Xuat chuoi vut trong linux

Bạn muốn xem văn bản bên trong tệp nhị phân hoặc tệp dữ liệu? Lệnh chuỗi trong Linux kéo các bit văn bản đó — được gọi là “chuỗi” — ra cho bạn.

Linux có đầy đủ các lệnh có thể giống như các giải pháp để tìm kiếm các vấn đề. Lệnh dây chắc chắn rơi vào trại đó. Chỉ cần mục đích của nó là gì? Có một điểm đến một lệnh liệt kê các chuỗi có thể in được từ bên trong một tệp nhị phân không?

Hãy lùi một bước. Tệp nhị phân — chẳng hạn như tệp chương trình — có thể chứa các chuỗi văn bản mà con người có thể đọc được. Nhưng làm thế nào để bạn có thể nhìn thấy chúng? Nếu bạn sử dụng mèo hoặc ít hơn, bạn có thể kết thúc với một cửa sổ thiết bị đầu cuối bị treo. Các chương trình được thiết kế để hoạt động với các tệp văn bản sẽ không hoạt động tốt nếu các ký tự không thể in được nạp qua chúng.

Hầu hết các byte trong một tệp nhị phân đều không thể đọc được và không thể được in ra cửa sổ đầu cuối theo cách có ý nghĩa. Không có ký tự hoặc ký hiệu tiêu chuẩn nào để đại diện cho các giá trị nhị phân không tương ứng với ký tự chữ và số, dấu câu hoặc khoảng trắng. Nói chung, chúng được gọi là các ký tự “in được”. Phần còn lại là các ký tự “không in được”.

Vì vậy, cố gắng xem hoặc tìm kiếm thông qua tệp nhị phân hoặc tệp dữ liệu cho chuỗi văn bản là một vấn đề. Và đó là nơi xuất hiện các chuỗi. Nó trích xuất chuỗi ký tự có thể in từ tệp để các lệnh khác có thể sử dụng các chuỗi mà không phải đối mặt với các ký tự không in được.

  • Sử dụng các chuỗi Lệnh
  • Đặt độ dài chuỗi tối thiểu
  • Đường ống thông qua ít hơn
  • Sử dụng chuỗi với các tệp đối tượng
  • Tìm kiếm trong các khu vực cụ thể trong tệp
  • In Chênh lệch chuỗi
  • Bao gồm khoảng trắng
  • Chúng tôi không giới hạn đối với tệp
  • Tìm kiếm nhiều tệp cùng một lúc
  • chuỗi được làm sáng tỏ
    • Share this post!

Lệnh string không có gì phức tạp và cách sử dụng cơ bản của nó rất đơn giản. Chúng tôi cung cấp tên của tệp mà chúng tôi muốn các chuỗi tìm kiếm trên dòng lệnh.

Ở đây, chúng ta sẽ sử dụng các chuỗi trên một tệp nhị phân — một tệp thực thi — được gọi là “jibber”. Chúng tôi nhập chuỗi, một khoảng trắng, “jibber” và sau đó nhấn Enter.

strings jibber

Các chuỗi được trích xuất từ ​​tệp và được liệt kê trong cửa sổ đầu cuối.

Xuat chuoi vut trong linux

Đặt độ dài chuỗi tối thiểu

Theo mặc định, các chuỗi sẽ tìm kiếm các chuỗi có bốn ký tự trở lên. Để đặt độ dài tối thiểu dài hơn hoặc ngắn hơn, hãy sử dụng tùy chọn -n (độ dài tối thiểu).

Lưu ý rằng độ dài tối thiểu càng ngắn thì khả năng bạn nhìn thấy nhiều rác càng cao.

Một số giá trị nhị phân có cùng giá trị số với giá trị đại diện cho một ký tự có thể in được. Nếu hai trong số các giá trị số đó nằm cạnh nhau trong tệp và bạn chỉ định độ dài tối thiểu là hai, các byte đó sẽ được báo cáo như thể chúng là một chuỗi.

Để yêu cầu các chuỗi sử dụng hai làm độ dài tối thiểu, hãy sử dụng lệnh sau.

strings -n 2 jibber

Xuat chuoi vut trong linux

Bây giờ chúng ta có các chuỗi hai chữ cái được bao gồm trong kết quả. Lưu ý rằng khoảng trắng được tính là một ký tự có thể in được.

Xuat chuoi vut trong linux

Đường ống thông qua ít hơn

Do độ dài của đầu ra từ các chuỗi, chúng tôi sẽ chuyển nó qua ít hơn. Sau đó, chúng tôi có thể cuộn qua tệp để tìm văn bản quan tâm.

strings jibber | less

Xuat chuoi vut trong linux

Danh sách bây giờ được trình bày cho chúng ta ít hơn, với phần trên cùng của danh sách được hiển thị đầu tiên.

Xuat chuoi vut trong linux

Sử dụng chuỗi với các tệp đối tượng

Thông thường, các tệp mã nguồn của chương trình được biên dịch thành các tệp đối tượng. Chúng được liên kết với các tệp thư viện để tạo tệp thực thi nhị phân. Chúng tôi có tệp đối tượng jibber để xử lý, vì vậy hãy xem bên trong tệp đó. Lưu ý phần mở rộng tệp “.o”.

jibber.o | less

Xuat chuoi vut trong linux

Tập hợp chuỗi đầu tiên được bao bọc ở cột tám nếu chúng dài hơn tám ký tự. Nếu chúng đã được bọc, ký tự “H” ở cột chín. Bạn có thể nhận ra các chuỗi này là các câu lệnh SQL.

Xuat chuoi vut trong linux

Cuộn qua đầu ra cho thấy rằng định dạng này không được sử dụng trong toàn bộ tệp.

Xuat chuoi vut trong linux

Thật thú vị khi thấy sự khác biệt trong chuỗi văn bản giữa tệp đối tượng và tệp thực thi đã hoàn thành.

Tìm kiếm trong các khu vực cụ thể trong tệp

Các chương trình đã biên dịch có các khu vực khác nhau được sử dụng để lưu trữ văn bản. Theo mặc định, các chuỗi tìm kiếm toàn bộ tệp tìm kiếm văn bản. Điều này giống như thể bạn đã sử dụng tùy chọn -a (tất cả). Để chỉ tìm kiếm chuỗi trong các phần dữ liệu đã tải, khởi tạo trong tệp, hãy sử dụng tùy chọn -d (dữ liệu).

strings -d jibber | less

Xuat chuoi vut trong linux

Trừ khi bạn có lý do chính đáng, bạn cũng có thể sử dụng cài đặt mặc định và tìm kiếm toàn bộ tệp.

In Chênh lệch chuỗi

Chúng ta có thể có các chuỗi in offset từ đầu tệp mà tại đó mỗi chuỗi được đặt. Để thực hiện việc này, hãy sử dụng tùy chọn -o (offset).

strings -o parse_phrases | less

Xuat chuoi vut trong linux

Phần bù được đưa ra trong Bát phân.

Xuat chuoi vut trong linux

Để hiển thị hiệu số trong một cơ số khác, chẳng hạn như thập phân hoặc thập lục phân, hãy sử dụng tùy chọn -t (cơ số). Tùy chọn cơ số phải được theo sau bởi d (số thập phân), x (hệ thập lục phân), hoặc o (Bát phân). Sử dụng -to cũng giống như sử dụng -o.

strings -t d parse_phrases | less

Xuat chuoi vut trong linux

Các hiệu số bây giờ được in dưới dạng thập phân.

Xuat chuoi vut trong linux

strings -t x parse_phrases | less

Xuat chuoi vut trong linux

Các hiệu số hiện được in dưới dạng thập lục phân.

Xuat chuoi vut trong linux

Bao gồm khoảng trắng

chuỗi coi các ký tự tab và dấu cách là một phần của chuỗi mà nó tìm thấy. Các ký tự khoảng trắng khác, chẳng hạn như dòng mới và ký tự xuống dòng, không được coi như thể chúng là một phần của chuỗi. Tùy chọn -w (khoảng trắng) làm cho các chuỗi coi tất cả các ký tự khoảng trắng như thể chúng là một phần của chuỗi.

strings -w add_data | less

Xuat chuoi vut trong linux

Chúng ta có thể thấy dòng trống trong đầu ra, là kết quả của ký tự xuống dòng (ẩn) và dòng mới ở cuối dòng thứ hai.

Xuat chuoi vut trong linux

Chúng tôi không giới hạn đối với tệp

Chúng ta có thể sử dụng chuỗi với bất kỳ thứ gì hoặc có thể tạo ra một dòng byte.

Với lệnh này, chúng ta có thể xem qua bộ nhớ truy cập tạm thời (RAM) của máy tính của chúng tôi.

Chúng ta cần sử dụng sudo vì chúng ta đang truy cập / dev / mem. Đây là một tệp thiết bị ký tự chứa hình ảnh của bộ nhớ chính của máy tính của bạn.

sudo strings /dev/mem | less

Xuat chuoi vut trong linux

Danh sách không phải là toàn bộ nội dung của RAM của bạn. Nó chỉ là các chuỗi có thể được trích xuất từ ​​nó.

Xuat chuoi vut trong linux

Tìm kiếm nhiều tệp cùng một lúc

Các ký tự đại diện có thể được sử dụng để chọn các nhóm tệp cần tìm kiếm. Ký tự * đại diện cho nhiều ký tự và dấu? ký tự đại diện cho bất kỳ ký tự đơn lẻ nào. Bạn cũng có thể chọn cung cấp nhiều tên tệp trên dòng lệnh.

Chúng tôi sẽ sử dụng ký tự đại diện và tìm kiếm qua tất cả các tệp thực thi trong thư mục / bin. Vì danh sách sẽ chứa kết quả từ nhiều tệp, chúng tôi sẽ sử dụng tùy chọn -f (tên tệp). Thao tác này sẽ in tên tệp ở đầu mỗi dòng. Sau đó, chúng tôi có thể xem từng chuỗi được tìm thấy trong tệp nào.

Chúng tôi đang cung cấp kết quả thông qua grepvà tìm kiếm các chuỗi có chứa từ “Bản quyền”.

strings -f /bin/* | grep Copyright

Xuat chuoi vut trong linux

Chúng tôi nhận được một danh sách ngắn gọn về các tuyên bố bản quyền cho mỗi tệp trong thư mục / bin, với tên của tệp ở đầu mỗi dòng.

Xuat chuoi vut trong linux

chuỗi được làm sáng tỏ

Không có gì bí ẩn đối với các chuỗi; nó là một lệnh Linux điển hình. Nó làm một cái gì đó rất cụ thể và làm nó rất tốt.

Đó là một trong những bánh răng khác của Linux, và thực sự trở nên sống động khi nó hoạt động với các lệnh khác. Khi bạn thấy cách nó có thể nằm giữa các tệp nhị phân và các công cụ khác như grep, bạn bắt đầu đánh giá cao chức năng của lệnh hơi khó hiểu này.