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:
- Chúng tôi đã tạo tệp
- 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:
- s = 7 bit byte (được sử dụng cho ASCII, ISO 8859)
- S = 8 bit byte
- b = 16 bit bigendian
- l = 16 bit littleendian
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