Lệnh strings trong linux

Fatmawati Achmad Zaenuri / Shutterstock.com

Bạn muốn xem văn bản bên trong tệp nhị phân hoặc tệp dữ liệu? Linux strings lệnh 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 đề. Các strings lệnh 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 dùng cat hoặc là less bạn có khả năng 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 đưa 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ự “có thể 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 các chuỗi văn bản là một vấn đề. Và đó là nơi strings đi kèm. Nó trích xuất các chuỗi ký tự có thể in được từ các tệp để các lệnh khác có thể sử dụng các chuỗi mà không cần phải đối mặt với các ký tự không thể in được.

Không có gì phức tạp về strings 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 strings để 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 gõ strings, một dấu cách, “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.

Đặ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 -n [độ dài tối thiểu] tùy chọn.

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.

Để hỏi strings để sử dụng hai làm độ dài tối thiểu, hãy sử dụng lệnh sau.

strings -n 2 jibber

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

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

Vì độ dài của đầu ra từ strings, chúng tôi sẽ thông qua less. Sau đó, chúng tôi có thể cuộn qua tệp tìm kiếm văn bản quan tâm.

strings jibber | less

Danh sách hiện đã được giới thiệu cho chúng tôi trong less, với đầu danh sách được hiển thị đầu tiên.

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

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 những chuỗi này là câu lệnh SQL.

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.

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, strings 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 -a [tất cả] tùy chọn. Để 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 -d [dữ liệu] tùy chọn.

strings -d jibber | less

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 offset chuỗi

Chúng ta có thể có strings in offset từ đầu tệp mà tại đó mỗi chuỗi được đặt. Để làm điều này, hãy sử dụng -o [bù đắp] tùy chọn.

strings -o parse_phrases | less

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

Để hiển thị hiệu số trong một cơ số 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 [cơ số] tùy chọn. Tùy chọn cơ số phải được theo sau bởi d [thập phân], x [thập lục phân], hoặc o [Bát phân]. Sử dụng -t o cũng giống như việc sử dụng -o.

strings -t d parse_phrases | less

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

strings -t x parse_phrases | less

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

Bao gồm khoảng trắng

strings coi các ký tự tab và khoảng trắng 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. Các -w [khoảng trắng] tùy chọn làm cho các chuỗi xử lý 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

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à ký tự xuống dòng ở cuối dòng thứ hai.

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

Chúng ta có thể sử dụng strings với bất kỳ thứ gì có 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 ngẫu nhiên [RAM] của máy tính.

Chúng ta cần sử dụng sudo bởi vì chúng tôi đ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

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ó.

LIÊN QUAN: “Mọi thứ là một tệp” có nghĩa là gì 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. Các * ký tự đại diện cho nhiều ký tự và ? 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. Bởi vì danh sách sẽ chứa kết quả từ nhiều tệp, chúng tôi sẽ sử dụng -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 tổng hợp kết quả thông qua grep và tìm kiếm các chuỗi có chứa từ “Bản quyền”.

strings -f /bin/* | grep Copyright

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.

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 tối nghĩa này.

Bài Viết Liên Quan

Chủ Đề