วิธีใช้คำสั่ง strings บน Linux
เผยแพร่แล้ว: 2022-01-29 ต้องการดูข้อความภายในไฟล์ไบนารีหรือไฟล์ข้อมูลหรือไม่ คำสั่ง strings
ของ Linux จะดึงบิตของข้อความที่เรียกว่า “สตริง” ออกมาให้คุณ
Linux เต็มไปด้วยคำสั่งที่ดูเหมือนวิธีแก้ปัญหาในการค้นหาปัญหา คำสั่ง strings
ตกลงไปในแคมป์นั้นอย่างแน่นอน จุดประสงค์ของมันคืออะไร? มีคำสั่งชี้ไปที่คำสั่งที่แสดงรายการสตริงที่พิมพ์ได้จากภายในไฟล์ไบนารีหรือไม่?
ลองก้าวถอยหลัง ไฟล์ไบนารี เช่น ไฟล์โปรแกรม อาจมีสตริงข้อความที่มนุษย์อ่านได้ แต่คุณจะได้เห็นพวกเขาได้อย่างไร? หากคุณใช้ cat
หรือ less
นั้น คุณมักจะจบลงด้วยหน้าต่างเทอร์มินัลที่แขวนอยู่ โปรแกรมที่ออกแบบมาให้ทำงานกับไฟล์ข้อความไม่สามารถรับมือได้ดีหากป้อนอักขระที่ไม่สามารถพิมพ์ได้เข้ามา
ไบต์ส่วนใหญ่ภายในไฟล์ไบนารีไม่สามารถอ่านได้โดยมนุษย์และไม่สามารถพิมพ์ไปยังหน้าต่างเทอร์มินัลในลักษณะที่เหมาะสม ไม่มีอักขระหรือสัญลักษณ์มาตรฐานที่ใช้แทนค่าไบนารีที่ไม่ตรงกับอักขระที่เป็นตัวอักษรและตัวเลขคละกัน เครื่องหมายวรรคตอน หรือช่องว่าง เรียกรวมกันว่าอักขระเหล่านี้ "พิมพ์ได้" ส่วนที่เหลือเป็นอักขระที่ "ไม่สามารถพิมพ์ได้"
ดังนั้น การพยายามดูหรือค้นหาผ่านไบนารีหรือไฟล์ข้อมูลสำหรับสตริงข้อความจึงเป็นปัญหา และนั่นคือที่มาของ strings
โดยจะแยกสตริงของอักขระที่พิมพ์ได้ออกจากไฟล์เพื่อให้คำสั่งอื่นๆ สามารถใช้สตริงได้โดยไม่ต้องโต้แย้งกับอักขระที่ไม่สามารถพิมพ์ได้
การใช้คำสั่งสตริง
คำสั่ง strings
ไม่มีอะไรซับซ้อน และการใช้งานพื้นฐานนั้นง่ายมาก เราระบุชื่อไฟล์ที่เราต้องการให้ strings
ค้นหาในบรรทัดคำสั่ง
ในที่นี้ เราจะใช้สตริงในไฟล์ไบนารี—ไฟล์เรียกทำงาน—เรียกว่า “jibber” เราพิมพ์ strings
เว้นวรรค "jibber" แล้วกด Enter
สตริง jibber
สตริงถูกแยกจากไฟล์และแสดงอยู่ในหน้าต่างเทอร์มินัล
การตั้งค่าความยาวขั้นต่ำของสตริง
โดยค่าเริ่มต้น สตริงจะค้นหาสตริงที่มีอักขระสี่ตัวขึ้นไป หากต้องการตั้งค่าความยาวขั้นต่ำที่ยาวขึ้นหรือสั้นลง ให้ใช้ตัวเลือก -n
(ความยาวขั้นต่ำ)
โปรดทราบว่ายิ่งความยาวขั้นต่ำสั้นลงเท่าใด โอกาสที่คุณจะเห็นขยะก็จะสูงขึ้นเท่านั้น
ค่าไบนารีบางค่ามีค่าตัวเลขเหมือนกันกับค่าที่แสดงอักขระที่พิมพ์ได้ หากค่าตัวเลขสองค่าเหล่านี้อยู่เคียงข้างกันในไฟล์ และคุณระบุความยาวขั้นต่ำเป็นสองค่า ไบต์เหล่านั้นจะถูกรายงานราวกับว่าเป็นสตริง
ในการขอให้ strings
ใช้สองเป็นความยาวขั้นต่ำ ให้ใช้คำสั่งต่อไปนี้
strings -n 2 jibber
ตอนนี้เรามีสตริงตัวอักษรสองตัวรวมอยู่ในผลลัพธ์แล้ว โปรดทราบว่าช่องว่างจะถูกนับเป็นอักขระที่พิมพ์ได้
ร้อยสายผ่าน Less
เนื่องจากความยาวของเอาต์พุตจาก strings
เราจะไพพ์ผ่านให้ less
จากนั้นเราสามารถเลื่อนดูไฟล์เพื่อค้นหาข้อความที่น่าสนใจ
strings jibber | น้อย
รายชื่อถูกนำเสนอสำหรับเราใน less
โดยที่ด้านบนสุดของรายชื่อแสดงก่อน
การใช้สตริงกับ Object Files
โดยทั่วไป ไฟล์ซอร์สโค้ดของโปรแกรมจะถูกคอมไพล์เป็นไฟล์อ็อบเจ็กต์ สิ่งเหล่านี้เชื่อมโยงกับไฟล์ไลบรารีเพื่อสร้างไฟล์ปฏิบัติการแบบไบนารี เรามีไฟล์อ็อบเจ็กต์ jibber อยู่ในมือ ดังนั้นเรามาดูภายในไฟล์กัน สังเกตนามสกุลไฟล์ “.o”
jibber.o | น้อย
สตริงชุดแรกทั้งหมดจะถูกรวมไว้ที่คอลัมน์ที่ 8 หากมีความยาวเกินแปดอักขระ หากห่อไว้ อักขระ "H" จะอยู่ในคอลัมน์ที่เก้า คุณอาจรู้จักสตริงเหล่านี้เป็นคำสั่ง SQL
การเลื่อนดูผลลัพธ์เผยให้เห็นว่าการจัดรูปแบบนี้ไม่ได้ใช้ตลอดทั้งไฟล์
เป็นเรื่องที่น่าสนใจที่จะเห็นความแตกต่างในสตริงข้อความระหว่างไฟล์อ็อบเจ็กต์และไฟล์เรียกทำงานที่เสร็จสิ้น
การค้นหาในพื้นที่เฉพาะในไฟล์
โปรแกรมที่คอมไพล์แล้วจะมีส่วนต่างๆ ในตัวที่ใช้เก็บข้อความ โดยค่าเริ่มต้น strings
จะค้นหาทั้งไฟล์เพื่อค้นหาข้อความ เหมือนกับว่าคุณเคยใช้ตัวเลือก -a
(ทั้งหมด) หากต้องการให้สตริงค้นหาเฉพาะในส่วนข้อมูลที่เริ่มต้นและโหลดในไฟล์ ให้ใช้ตัวเลือก -d
(ข้อมูล)
strings -d jibber | น้อย
เว้นแต่คุณจะมีเหตุผลที่ดี คุณอาจใช้การตั้งค่าเริ่มต้นและค้นหาไฟล์ทั้งหมด
การพิมพ์ออฟเซ็ตสตริง
เราสามารถให้ strings
พิมพ์ออฟเซ็ตตั้งแต่เริ่มต้นไฟล์ที่แต่ละสตริงตั้งอยู่ เมื่อต้องการทำสิ่งนี้ ให้ใช้ตัวเลือก -o
(ออฟเซ็ต)
strings -o parse_phrases | น้อย
ออฟเซ็ตจะได้รับใน Octal
หากต้องการให้ออฟเซ็ตแสดงในฐานตัวเลขอื่น เช่น ทศนิยมหรือเลขฐานสิบหก ให้ใช้ตัวเลือก -t
(radix) ตัวเลือกฐานจะต้องตามด้วย d
(ทศนิยม), x
(ฐานสิบหก) หรือ o
(ฐานแปด) การใช้ -to
เหมือนกับการใช้ -o
strings -td parse_phrases | น้อย
ออฟเซ็ตจะถูกพิมพ์เป็นทศนิยม
strings -tx parse_phrases | น้อย
ตอนนี้ออฟเซ็ตพิมพ์เป็นเลขฐานสิบหก
รวมถึงช่องว่าง
strings
จะถือว่าอักขระแท็บและช่องว่างเป็นส่วนหนึ่งของสตริงที่พบ อักขระช่องว่างอื่นๆ เช่น การขึ้นบรรทัดใหม่และการขึ้นบรรทัดใหม่ จะไม่ถือว่าเป็นส่วนหนึ่งของสตริง ตัวเลือก -w
(ช่องว่าง) ทำให้สตริงปฏิบัติต่ออักขระช่องว่างทั้งหมดราวกับว่าเป็นส่วนหนึ่งของสตริง
strings -w add_data | น้อย
เราสามารถเห็นบรรทัดว่างในผลลัพธ์ ซึ่งเป็นผลมาจากการขึ้นบรรทัดใหม่ (ล่องหน) และอักขระขึ้นบรรทัดใหม่ที่ส่วนท้ายของบรรทัดที่สอง
เราไม่ได้จำกัดแค่ไฟล์
เราสามารถใช้ strings
กับอะไรก็ได้ที่เป็นหรือสร้างกระแสข้อมูลไบต์ได้
ด้วยคำสั่งนี้ เราสามารถดูผ่านหน่วยความจำเข้าถึงโดยสุ่ม (RAM) ของคอมพิวเตอร์ของเราได้
เราจำเป็นต้องใช้ sudo
เพราะเรากำลังเข้าถึง /dev/mem นี่คือไฟล์อุปกรณ์อักขระที่เก็บรูปภาพของหน่วยความจำหลักของคอมพิวเตอร์ของคุณ
sudo strings /dev/mem | น้อย
รายการไม่ใช่เนื้อหาทั้งหมดของแรมของคุณ เป็นเพียงสายอักขระที่สามารถดึงออกมาจากมันได้
ที่เกี่ยวข้อง: "ทุกอย่างเป็นไฟล์" หมายถึงอะไรใน Linux?
ค้นหาไฟล์จำนวนมากพร้อมกัน
สามารถใช้สัญลักษณ์แทนเพื่อเลือกกลุ่มของไฟล์ที่จะค้นหาได้ อักขระ *
แทนอักขระหลายตัว และ ?
อักขระแสดงถึงอักขระตัวเดียว คุณยังสามารถเลือกที่จะระบุชื่อไฟล์จำนวนมากบนบรรทัดคำสั่งได้
เราจะใช้สัญลักษณ์แทนและค้นหาไฟล์ที่เรียกใช้งานได้ทั้งหมดในไดเร็กทอรี /bin เนื่องจากรายชื่อจะมีผลลัพธ์จากหลายไฟล์ เราจะใช้ตัวเลือก -f
(ชื่อไฟล์) ซึ่งจะพิมพ์ชื่อไฟล์ที่จุดเริ่มต้นของแต่ละบรรทัด จากนั้นเราจะดูได้ว่าแต่ละสตริงถูกพบในไฟล์ใด
เรากำลังส่งผลลัพธ์ผ่าน grep และค้นหาสตริงที่มีคำว่า "ลิขสิทธิ์"
strings -f /bin/* | ลิขสิทธิ์
เราได้รับรายการประกาศลิขสิทธิ์สำหรับแต่ละไฟล์อย่างละเอียดในไดเร็กทอรี /bin โดยมีชื่อไฟล์อยู่ที่จุดเริ่มต้นของแต่ละบรรทัด
สตริง Unraveled
ไม่มีความลึกลับสำหรับสตริง มันเป็นคำสั่ง Linux ทั่วไป มันทำสิ่งที่เจาะจงมากและทำได้ดีมาก
เป็นฟันเฟืองอีกตัวหนึ่งของ Linux และมีชีวิตชีวาขึ้นเมื่อทำงานกับคำสั่งอื่นๆ เมื่อคุณเห็นว่าสามารถอยู่ระหว่างไฟล์ไบนารีและเครื่องมืออื่นๆ เช่น grep
ได้อย่างไร คุณจะเริ่มชื่นชมฟังก์ชันการทำงานของคำสั่งที่คลุมเครือเล็กน้อยนี้
คำสั่งลินุกซ์ | ||
ไฟล์ | tar · pv · cat · tac · chmod · grep · diff · sed · ar · man · pushd · popd · fsck · testdisk · seq · fd · pandoc · cd · $PATH · awk · เข้าร่วม · jq · fold · uniq · journalctl · tail · stat · ls · fstab · echo · less · chgrp · chown · rev · ดู · strings · พิมพ์ · เปลี่ยนชื่อ · zip · unzip · เมานต์ · umount · ติดตั้ง · fdisk · mkfs · rm · rmdir · rsync · df · gpg · vi · nano · mkdir · du · ln · แพทช์ · แปลง · rclone · ฉีก · srm | |
กระบวนการ | alias · screen · top · nice · renice · progress · strace · systemd · tmux · chsh · history · at · batch · free · which · dmesg · chfn · usermod · ps · chroot · xargs · tty · pinky · lsof · vmstat · หมดเวลา · ผนัง · ใช่ · ฆ่า · หลับ · sudo · su · เวลา · groupadd · usermod · กลุ่ม · lshw · ปิดระบบ · รีบูต · หยุด · poweroff · passwd · lscpu · crontab · วันที่ · bg · fg | |
ระบบเครือข่าย | netstat · ping · traceroute · ip · ss · whois · fail2ban · bmon · dig · finger · nmap · ftp · curl · wget · who · whoami · w · iptables · ssh-keygen · ufw |
ที่เกี่ยวข้อง: แล็ปท็อป Linux ที่ดีที่สุดสำหรับนักพัฒนาและผู้ที่ชื่นชอบ