Làm thế nào để hiển thị các ký tự in được của một tập tin với lệnh chuỗi

Bạn đã từng mở một tệp trong trình chỉnh sửa chỉ để tìm ra tệp có chứa nội dung nhị phân không đọc được không?

Lệnh "chuỗi" của Linux giúp bạn có thể xem các ký tự có thể đọc được của con người trong bất kỳ tệp nào.

Mục đích chính của việc sử dụng lệnh "strings" là tìm ra loại tệp mà bạn đang xem nhưng bạn cũng có thể sử dụng nó để trích xuất văn bản. Ví dụ, nếu bạn có một tập tin từ một chương trình độc quyền mà lưu các tập tin trong một định dạng nhị phân lạ bạn có thể sử dụng "chuỗi" để trích xuất văn bản bạn đưa vào tập tin.

Ví dụ về cách sử dụng lệnh chuỗi

Một cách tuyệt vời để chứng minh sức mạnh của lệnh chuỗi là tạo một tài liệu bằng cách sử dụng LibreOffice Writer.

Chỉ cần mở LibreOffice Writer và nhập một số văn bản và sau đó lưu nó ở định dạng ODT chuẩn .

Bây giờ mở một cửa sổ đầu cuối (nhấn CTRL, ALT và T cùng một lúc) và sau đó sử dụng lệnh cat để hiển thị tập tin như sau:

cat yourfilename.odt | hơn

(Thay thế yourfilename.odt bằng tên của tệp bạn đã tạo)

Những gì bạn sẽ thấy là một bức tường toàn bộ văn bản không đọc được.

Nhấn phím cách để cuộn qua tệp. Thường xuyên trong suốt tệp, bạn sẽ thấy một số văn bản bạn đã nhập.

Lệnh chuỗi có thể được sử dụng để chỉ hiển thị các phần có thể đọc được.

Ở dạng đơn giản nhất, bạn có thể chạy lệnh sau:

chuỗi yourfilename.odt | hơn

Như trước đây, một bức tường văn bản sẽ xuất hiện, nhưng chỉ có văn bản mà bạn có thể đọc như một con người. Nếu bạn may mắn thì bạn sẽ có thể nhìn thấy văn bản của bạn.

Tuy nhiên, những gì bạn sẽ có thể thấy đó là chìa khóa, nằm trên dòng đầu tiên:

mimetypeapplication / vnd.oasis.opendocument.text

Chúng tôi biết rằng loại tệp là một tệp ODT LibreOffice Writer vì 2 lý do:

  1. Chúng tôi đã tạo tệp
  2. Tiện ích mở rộng là .ODT

Hãy tưởng tượng rằng bạn không tạo tệp hoặc bạn tìm thấy tệp trên đĩa được khôi phục và tệp không có phần mở rộng.

Windows phục hồi thường sẽ phục hồi các tập tin với tên như 0001, 0002, 0003 vv Thực tế là các tập tin đã được phục hồi là rất tốt nhưng cố gắng để làm việc ra những gì các loại tập tin đã được một cơn ác mộng.

Bằng cách sử dụng chuỗi, bạn có cơ hội chiến đấu để tìm ra loại tệp. Biết rằng một tệp là một tệp tin opendocument.text có nghĩa là bạn có thể lưu nó bằng phần mở rộng ODT và mở nó trong trình soạn thảo LibreOffice.

Trong trường hợp bạn không biết một tập tin ODT về cơ bản là một tập tin nén. Nếu bạn đổi tên yourfilename.odt thành yourfilename.zip, bạn có thể mở nó trong một công cụ lưu trữ và thậm chí giải nén tệp.

Hành vi thay thế

Theo mặc định, lệnh chuỗi trả về tất cả các chuỗi trong một tệp nhưng bạn có thể chuyển đổi hành vi để nó trả về các chuỗi từ các phần dữ liệu được khởi tạo, được tải trong một tệp.

Điều này có nghĩa là chính xác? Không ai có vẻ biết.

Bạn nên giả sử rằng bạn đang sử dụng chuỗi để thử và tìm ra loại tệp hoặc tìm văn bản cụ thể trong tệp.

Nếu khi chạy lệnh chuỗi bằng cách sử dụng hành vi mặc định, bạn không nhận được kết quả đầu ra mà bạn mong đợi, sau đó thử chạy một trong các lệnh sau đây để xem nó có tạo ra sự khác biệt hay không:

chuỗi -d yourfilename

chuỗi --data yourfilename

Trang hướng dẫn sử dụng nói rằng lệnh trên có thể giúp giảm lượng rác được trả lại từ chuỗi.

Lệnh "chuỗi" có thể được thiết lập để hoạt động ngược lại để chuyển đổi trừ d là hành vi mặc định. Nếu đây là trường hợp trên hệ thống của bạn thì bạn có thể trả về tất cả dữ liệu bằng cách sử dụng lệnh sau:

chuỗi -a yourfilename

Định dạng đầu ra

Bạn có thể nhận được văn bản trong đầu ra để hiển thị tên của tệp cùng với mỗi dòng văn bản.

Để thực hiện việc này, hãy chạy một trong các lệnh sau:

chuỗi -f yourfilename

strings --print-file-name yourfilename

Đầu ra sẽ trông giống như sau:

yourfilename: một đoạn văn bản

yourfilename: một đoạn văn bản khác

Là một phần của đầu ra, bạn cũng có thể hiển thị độ lệch của vị trí văn bản xuất hiện trong một tệp. Để làm như vậy, hãy chạy lệnh sau:

chuỗi -o yourfilename

Đầu ra sẽ trông giống như sau:

16573 của bạn

Văn bản 17024

Mức chênh lệch thực sự là độ lệch bát phân mặc dù tùy thuộc vào cách các chuỗi đã được biên dịch cho hệ thống của bạn, nó cũng có thể dễ dàng là hex hoặc bù thập phân.

Một cách chính xác hơn để nhận được bù đắp mà bạn muốn là sử dụng các lệnh sau:

strings -td yourfilename

chuỗi -to yourfilename

strings -th yourfilename

Dấu trừ có nghĩa là trả về giá trị bù trừ và ký tự sau xác định loại bù trừ. (tức là d = thập phân, o = bát phân, h = hex).

Theo mặc định, lệnh chuỗi sẽ in từng chuỗi mới trên một dòng mới nhưng bạn có thể đặt dấu phân cách bạn chọn. Ví dụ để sử dụng ký hiệu đường ống ("|") làm dấu phân cách chạy lệnh sau:

string -s "|" yourfilename

Điều chỉnh giới hạn chuỗi

Lệnh chuỗi theo mặc định sẽ tìm một chuỗi gồm 4 ký tự có thể in liên tiếp. Bạn có thể điều chỉnh giá trị mặc định để nó chỉ trả về một chuỗi có 8 ký tự có thể in hoặc 12 ký tự có thể in.

Bằng cách điều chỉnh giới hạn này, bạn có thể điều chỉnh đầu ra để có được kết quả tốt nhất có thể. Bằng cách tìm kiếm một chuỗi quá dài bạn có nguy cơ bỏ qua văn bản hữu ích nhưng bằng cách làm cho nó quá ngắn, bạn có thể kết thúc với nhiều rác hơn trở lại.

Để điều chỉnh giới hạn chuỗi chạy lệnh sau:

chuỗi -n 8 yourfilename

Trong ví dụ trên tôi đã thay đổi giới hạn thành 8.

Bạn có thể thay thế 8 bằng số bạn chọn.

Bạn cũng có thể sử dụng lệnh sau để làm điều tương tự:

strings --bytes = 8 yourfilename

Bao gồm khoảng trắng

Theo mặc định, lệnh chuỗi bao gồm khoảng trắng chẳng hạn như tab hoặc không gian dưới dạng ký tự có thể in. Do đó nếu bạn có một chuỗi mà đọc là "con mèo ngồi trên tấm thảm" thì lệnh chuỗi sẽ trả về toàn bộ văn bản.

Các ký tự dòng mới và trả về vận chuyển không được coi là các ký tự có thể in theo mặc định.

Để nhận các chuỗi nhận dạng các ký tự dòng mới và trả về dòng vận chuyển dưới dạng chuỗi ký tự có thể in theo cách sau:

chuỗi -w yourfilename

Thay đổi mã hóa

Có 5 tùy chọn mã hóa có sẵn để sử dụng với chuỗi:

Mặc định là byte 7 bit.

Để thay đổi mã hóa, hãy chạy lệnh sau:

string -es yourfilename

strings --encoding = s yourfilename

Trong lệnh trên, tôi đã chỉ định mặc định "s" có nghĩa là 7 bit byte. Chỉ cần thay thế "s" bằng ký tự mã hóa mà bạn chọn.

Thay đổi tên mô tả tệp nhị phân

Bạn có thể thay đổi hành vi của chuỗi sao cho nó sử dụng một thư viện mô tả tệp nhị phân khác với thư viện được cung cấp cho hệ thống của bạn.

Chuyển đổi này là một cho các chuyên gia. Nếu bạn có một thư viện khác để sử dụng thì bạn có thể làm như vậy bằng cách chạy lệnh chuỗi sau:

strings -T bfdname

Tùy chọn đọc từ tệp

Nếu bạn định sử dụng các tùy chọn tương tự mỗi lần thì bạn không muốn phải chỉ định tất cả các công tắc mỗi khi bạn chạy lệnh bởi vì nó cần có thời gian.

Những gì bạn có thể làm là tạo một tệp văn bản bằng nano và chỉ định các tùy chọn trong tệp đó.

Để thử điều này trong một thiết bị đầu cuối chạy lệnh sau:

nano stringsopts

Trong tệp, hãy nhập văn bản sau:

-f -o -n 3 -s "|"

Lưu tệp bằng cách nhấn CTRL và O và thoát bằng cách nhấn CTRL và X.

Để chạy các lệnh chuỗi với các tùy chọn này, hãy chạy lệnh sau:

chuỗi @stringsopts yourfilename

Các tùy chọn sẽ được đọc từ chuỗi tệp và bạn sẽ thấy tên tệp trước mỗi chuỗi, phần bù và "|" như một dấu phân cách.

Tìm sự giúp đỡ

Nếu bạn muốn đọc thêm về các chuỗi, bạn có thể chạy lệnh sau đây để được trợ giúp.

chuỗi - help

Hoặc bạn cũng có thể đọc trang hướng dẫn sử dụng:

người đàn ông strings

Tìm hiểu phiên bản nào của chuỗi bạn đang chạy

Để tìm phiên bản chuỗi bạn đang chạy chạy một trong các lệnh sau:

dây -v

chuỗi -V

chuỗi - đảo ngược