Vấn đề chính với việc sử dụng các lệnh như head
hoặc tail
là chúng là các tệp nhị phân hướng và dòng không. Nếu chúng có dòng mới trong chúng, chúng thường không được sử dụng để thể hiện phần cuối của dòng và nếu có, chúng có thể chỉ là một phần của chuỗi như thông điệp chương trình hoặc trường dữ liệu.
Nếu dữ liệu được cấu trúc theo bất kỳ cách nào, thì bạn phải tính đến điều đó trong việc chọn các điểm phân tách để bạn không phá vỡ các cấu trúc ở giữa.
Nếu bạn biết cấu trúc của tệp, bạn có thể sử dụng một lệnh như
dd -if input-file -of output-file ...
với các tùy chọn chỉ sao chép rất nhiều khối dữ liệu có kích thước cụ thể bắt đầu ở phần bù (tăng) cụ thể vào tệp.
Có vẻ như split
lệnh được đề cập bởi @egmont sẽ tự động hóa quy trình này cho bạn, nhưng nó dường như được định hướng theo dòng theo mặc định, vì vậy bạn sẽ phải chỉ định các tùy chọn bổ sung như --bytes count
để cho biết mỗi phần của tệp nên lớn đến mức nào là.
Một lưu ý phụ, nếu bạn không biết những gì trong một tệp, nhưng nghi ngờ nó chứa ít nhất một số dữ liệu văn bản có ý nghĩa, thì strings
lệnh là một cách tuyệt vời để có cái nhìn đầu tiên để xem bạn đang xử lý vấn đề gì.
strings -n 6 file | less
sẽ tìm thấy tất cả các ký tự có thể in ít nhất sáu ký tự và hiển thị chúng trong máy nhắn tin để chúng không bay trên thiết bị đầu cuối. Sử dụng một số lớn hơn một chút so với 4 ký tự mặc định sẽ giúp loại bỏ các đoạn dữ liệu nhỏ có thể in được, nhưng không được sử dụng theo cách đó trong tệp.
Nếu sau này bạn phải khám phá tệp chi tiết hơn với trình chỉnh sửa nhị phân, chẳng hạn như hexedit
, bạn sẽ có một số mốc chỉ ra nơi có thể tìm thấy thứ gì đó thú vị.
strings
có một tùy chọn - t x
sẽ đi trước mỗi chuỗi được in với phần bù của nó vào tệp theo hệ thập lục phân (o cho số bát phân / d cho số thập phân) để bạn biết nơi tìm thấy nó sau. Ngay cả các tệp rất ngắn cũng có rất nhiều vấn đề khi bạn phải xem chúng theo từng ký tự.
split
lệnh.