แสดงอักขระที่พิมพ์ได้ของไฟล์ด้วยสตริง

คุณเคยพยายามเปิดไฟล์ในโปรแกรมแก้ไขเพื่อค้นหาว่ามีเนื้อหาไบนารีที่ไม่สามารถอ่านได้หรือไม่? 

คำสั่ง "สตริง" ของ Linux ทำให้สามารถดูอักขระที่มนุษย์อ่านได้ภายในไฟล์ใด ๆ 

จุดประสงค์หลักของการใช้คำสั่ง "strings" คือเพื่อระบุประเภทของไฟล์ที่คุณกำลังดูอยู่ แต่คุณยังสามารถใช้เพื่อแยกข้อความได้อีกด้วย ตัวอย่างเช่นหากคุณมีไฟล์จากโปรแกรมที่เป็นกรรมสิทธิ์ซึ่งบันทึกไฟล์ในรูปแบบไบนารีแปลก ๆ คุณสามารถใช้ "สตริง" เพื่อแยกข้อความที่คุณใส่ลงในไฟล์


ตัวอย่างการใช้คำสั่ง Strings

วิธีที่ยอดเยี่ยมในการแสดงให้เห็นถึงพลังของคำสั่ง strings คือการสร้างเอกสารโดยใช้ LibreOffice Writer

เพียงเปิด LibreOffice Writer แล้วป้อนข้อความจากนั้นบันทึกในรูปแบบ ODT มาตรฐาน

ตอนนี้เปิดหน้าต่างเทอร์มินัล (กด CTRL, ALT และ T ในเวลาเดียวกัน) จากนั้นใช้คำสั่ง cat เพื่อแสดงไฟล์ดังนี้:

แมวของคุณ

(แทนที่ yourfilename.odt ด้วยชื่อไฟล์ที่คุณสร้างขึ้น)

สิ่งที่คุณจะเห็นคือผนังทั้งตัวของข้อความที่อ่านไม่ออก

กดแป้นเว้นวรรคเพื่อเลื่อนดูไฟล์ คุณจะเห็นข้อความบางส่วนที่คุณป้อนเป็นระยะ ๆ ตลอดทั้งไฟล์

คำสั่ง strings สามารถใช้เพื่อแสดงเฉพาะส่วนที่มนุษย์อ่านได้

ในรูปแบบที่ง่ายที่สุดคุณสามารถรันคำสั่งต่อไปนี้:

สตริง yourfi

เช่นเดิมกำแพงข้อความจะปรากฏขึ้น แต่มีเพียงข้อความที่คุณสามารถอ่านได้ในฐานะมนุษย์ หากคุณโชคดีคุณจะสามารถเห็นข้อความของคุณ

สิ่งที่คุณจะเห็นว่าเป็นกุญแจสำคัญอยู่ในบรรทัดแรก:

mimetypeapplication / vnd.oasis

เราทราบว่าประเภทไฟล์เป็นไฟล์ LibreOffice Writer ODT ด้วยเหตุผล 2 ประการ:

  1. เราสร้างไฟล์
  2. นามสกุลคือ. ODT

ลองนึกภาพว่าคุณไม่ได้สร้างไฟล์หรือคุณพบไฟล์ในดิสก์ที่กู้คืนและไฟล์นั้นไม่มีนามสกุล

การกู้คืน Windows มักจะกู้คืนไฟล์ที่มีชื่อเช่น 0001, 0002, 0003 เป็นต้นความจริงที่ว่าไฟล์ที่กู้คืนนั้นดีมาก แต่การพยายามหาประเภทของไฟล์เหล่านั้นเป็นฝันร้าย

การใช้สตริงทำให้คุณมีโอกาสต่อสู้กับประเภทไฟล์ การรู้ว่าไฟล์เป็นไฟล์ opendocument.text หมายความว่าคุณสามารถบันทึกด้วยนามสกุล ODT และเปิดใน LibreOffice writer

ในกรณีที่คุณไม่ทราบว่าไฟล์ ODT นั้นเป็นไฟล์บีบอัด หากคุณเปลี่ยนชื่อ yourfilename.odt เป็น yourfilename.zip คุณสามารถเปิดได้ในเครื่องมือเก็บถาวรและยังแตกไฟล์ได้


พฤติกรรมทางเลือก

ตามค่าเริ่มต้นคำสั่ง strings จะส่งคืนสตริงทั้งหมดภายในไฟล์ แต่คุณสามารถเปลี่ยนลักษณะการทำงานเพื่อให้ส่งคืนสตริงจากส่วนข้อมูลที่เตรียมใช้งานและโหลดในไฟล์

นี่หมายความว่าอย่างไรกันแน่? ดูเหมือนจะไม่มีใครรู้ 

ควรสมมติว่าคุณกำลังใช้สตริงเพื่อลองค้นหาประเภทไฟล์หรือค้นหาข้อความเฉพาะในไฟล์

หากเมื่อเรียกใช้คำสั่ง strings โดยใช้พฤติกรรมเริ่มต้นคุณไม่ได้รับผลลัพธ์ที่คุณคาดหวังให้ลองเรียกใช้คำสั่งต่อไปนี้เพื่อดูว่ามันสร้างความแตกต่างหรือไม่:

เชือก

or

สตริง - ข้อมูลชื่อไฟล์ของคุณ

หน้าคู่มือระบุว่าคำสั่งด้านบนอาจช่วยลดปริมาณขยะที่ส่งคืนจากสตริง 

คำสั่ง "strings" สามารถตั้งค่าให้ทำงานย้อนกลับเพื่อให้สวิตช์ลบ d เป็นลักษณะการทำงานเริ่มต้น หากเป็นกรณีนี้ในระบบของคุณคุณสามารถส่งคืนข้อมูลทั้งหมดโดยใช้คำสั่งต่อไปนี้:

เชือก


การจัดรูปแบบเอาต์พุต

คุณสามารถรับข้อความภายในเอาต์พุตเพื่อแสดงชื่อไฟล์ข้างข้อความแต่ละบรรทัด

ในการดำเนินการนี้ให้เรียกใช้หนึ่งในคำสั่งต่อไปนี้:

เชือก

or

สตริง - พิมพ์ไฟล์ชื่อชื่อไฟล์ของคุณ

ผลลัพธ์จะมีลักษณะดังนี้:

yourfilename: ส่วนของข้อความ

or

yourfilename: ส่วนของข้อความอื่น

ในฐานะที่เป็นส่วนหนึ่งของผลลัพธ์คุณยังสามารถแสดงออฟเซ็ตของตำแหน่งที่ข้อความนั้นปรากฏในไฟล์ โดยเรียกใช้คำสั่งต่อไปนี้:

เชือก

ผลลัพธ์จะมีลักษณะดังนี้:

ออฟเซ็ตเป็นออฟเซ็ตฐานแปดแม้ว่าจะขึ้นอยู่กับว่าสตริงถูกคอมไพล์สำหรับระบบของคุณอย่างไรซึ่งอาจเป็นฐานสิบหกหรือออฟเซ็ตทศนิยมได้เช่นกัน

วิธีที่ถูกต้องมากขึ้นในการชดเชยที่คุณต้องการคือใช้คำสั่งต่อไปนี้:

สตริง -td yourfilename
สตริง -to yourfilename
สตริง -th yourfilename

เครื่องหมายลบหมายถึงส่งกลับค่าชดเชยและอักขระที่ตามมาจะกำหนดประเภทออฟเซ็ต (เช่น d = ทศนิยม, o = ฐานแปด, h = ฐานสิบหก)

ตามค่าเริ่มต้นคำสั่ง strings จะพิมพ์สตริงใหม่ในบรรทัดใหม่ แต่คุณสามารถตั้งค่าตัวคั่นที่คุณต้องการได้ ตัวอย่างเช่นการใช้สัญลักษณ์ไปป์ ("|") เป็นตัวคั่นให้รันคำสั่งต่อไปนี้:

สตริง -s "| &


ปรับขีด จำกัด สตริง

คำสั่ง strings โดยค่าเริ่มต้นจะค้นหาสตริงที่พิมพ์ได้ 4 ตัวในแถว คุณสามารถปรับค่าเริ่มต้นเพื่อให้ส่งคืนสตริงที่มีอักขระที่พิมพ์ได้ 8 ตัวหรืออักขระที่พิมพ์ได้ 12 ตัว

การปรับขีด จำกัด นี้ทำให้คุณสามารถปรับแต่งผลลัพธ์เพื่อให้ได้ผลลัพธ์ที่ดีที่สุด การมองหาสตริงที่ยาวเกินไปคุณอาจเสี่ยงต่อการละเว้นข้อความที่มีประโยชน์ แต่การทำให้สั้นเกินไปคุณอาจได้รับขยะที่ส่งกลับมามากขึ้น

ในการปรับขีด จำกัด สตริงให้รันคำสั่งต่อไปนี้:

เงื่อนไข

ในตัวอย่างข้างต้นฉันได้เปลี่ยนขีด จำกัด เป็น 8 คุณสามารถแทนที่ 8 ด้วยจำนวนที่คุณเลือกได้

คุณยังสามารถใช้คำสั่งต่อไปนี้เพื่อทำสิ่งเดียวกัน:

สตริง - ไบต์ & #


รวมช่องว่าง

ตามค่าเริ่มต้นคำสั่ง strings จะมีช่องว่างเช่นแท็บหรือช่องว่างเป็นอักขระที่พิมพ์ได้ ดังนั้นหากคุณมีสตริงที่อ่านว่า "แมวนั่งบนเสื่อ" คำสั่งสตริงจะส่งคืนข้อความทั้งหมด

อักขระขึ้นบรรทัดใหม่และการส่งคืนแคร่ไม่ถือเป็นอักขระที่พิมพ์ได้ตามค่าเริ่มต้น

ในการรับสตริงเพื่อรับรู้อักขระบรรทัดใหม่และการส่งคืนค่าขนส่งเป็นสตริงการรันอักขระที่พิมพ์ได้ด้วยวิธีต่อไปนี้:

เชือก

เปลี่ยนการเข้ารหัส

มีตัวเลือกการเข้ารหัส 5 แบบสำหรับใช้กับสตริง:

  • s = 7-bit byte (ใช้สำหรับ ASCII, ISO 8859)
  • S = 8 บิตไบต์ 
  • b = bigendian 16 บิต
  • l = 16 บิต littleendian

ค่าเริ่มต้นคือไบต์ 7 บิต

ในการเปลี่ยนการเข้ารหัสให้รันคำสั่งต่อไปนี้:

สตริง -es yourfilename
สตริง --encoding = s yourfilename

ในคำสั่งด้านบนฉันได้ระบุ "s" เริ่มต้นซึ่งหมายถึงไบต์ 7 บิต เพียงแค่แทนที่ "s" ด้วยอักษรเข้ารหัสที่คุณเลือก

เปลี่ยนชื่อคำอธิบายไฟล์ไบนารี

คุณสามารถเปลี่ยนลักษณะการทำงานของสตริงเพื่อให้ใช้ไลบรารีตัวอธิบายไฟล์ไบนารีอื่นนอกเหนือจากที่มีให้สำหรับระบบของคุณ

สวิตช์นี้เป็นสวิตช์สำหรับผู้เชี่ยวชาญ หากคุณมีไลบรารีอื่นให้ใช้คุณสามารถทำได้โดยรันคำสั่งสตริงต่อไปนี้:

st

การอ่านตัวเลือกจากไฟล์

หากคุณจะใช้ตัวเลือกเดียวกันทุกครั้งคุณก็ไม่ต้องการระบุสวิตช์ทั้งหมดทุกครั้งที่คุณเรียกใช้คำสั่งเพราะต้องใช้เวลา

สิ่งที่คุณทำได้คือสร้างไฟล์ข้อความโดยใช้นาโนและระบุตัวเลือกภายในไฟล์นั้น

หากต้องการลองใช้งานภายในเทอร์มินัลให้รันคำสั่งต่อไปนี้:

ในไฟล์ให้ป้อนข้อความต่อไปนี้:

-f -o -n

บันทึกไฟล์โดยกด CTRL และ O แล้วออกโดยกด CTRL และ X

ในการรันคำสั่งสตริงด้วยอ็อพชันเหล่านี้ให้รันคำสั่งต่อไปนี้:

สตริง @strings

ตัวเลือกต่างๆจะถูกอ่านจากสตริงของไฟล์และคุณควรเห็นชื่อไฟล์ก่อนสตริงแต่ละอันค่าออฟเซ็ตและ "|" เป็นตัวคั่น

การขอความช่วยเหลือ

หากคุณต้องการอ่านเพิ่มเติมเกี่ยวกับสตริงคุณสามารถเรียกใช้คำสั่งต่อไปนี้เพื่อรับความช่วยเหลือ

หรือคุณสามารถอ่านหน้าคู่มือ:

ค้นหาว่าคุณกำลังใช้งานสตริงเวอร์ชันใด

หากต้องการค้นหาเวอร์ชันของสตริงที่คุณกำลังเรียกใช้ให้รันคำสั่งใดคำสั่งหนึ่งต่อไปนี้:

สตริง -v
สตริง -V
สตริง - เวอร์ชัน