Tất cả các tệp là nhị phân dưới mui xe: chúng được lưu trữ dưới dạng một chuỗi các bit .
Các bit của tập tin thực sự được nhóm theo byte . Mỗi tệp bao gồm một số nguyên byte. Tất cả các hệ thống unix và trên thực tế hầu hết tất cả các máy tính đều có byte gồm 8 bit (được gọi là octet trong thuật ngữ mạng). Có một cách tự nhiên để diễn giải các byte là số 8 bit, tức là các số từ 0 đến 2 8 -1 = 255.
Để xem chúng là nhị phân, bạn cần một công cụ viết chúng ra theo ký hiệu nhị phân. Con người không phù hợp với ký hiệu nhị phân: mất quá nhiều thời gian để viết bất cứ điều gì. Thông thường hơn là sử dụng ký hiệu thập lục phân , với 16 chữ số khác nhau. Ví dụ: 41
(sáu mươi lăm trong thập lục phân) thoải mái hơn để đọc hơn 01000001
(sáu mươi lăm trong nhị phân). Bạn có thể sử dụng một lệnh, chẳng hạn như od
(bát bát bát bát) hexdump
hoặc hd
để liệt kê một tệp có ký hiệu bát phân hoặc thập lục phân cho mỗi byte ( od -t x1
chuyển sang thập lục phân).
Byte có thể đại diện cho các ký tự. Có một số mã hóa ký tự được sử dụng trong thế giới unix. Tất cả đều dựa trên ASCII , định nghĩa việc giải thích các byte trong khoảng từ 0 đến 127. Lưu ý rằng điều này chỉ xác định một ý nghĩa cho một nửa các giá trị byte có thể. Ví dụ: 65 đại diện cho chữ in hoa A
, 97 đại diện cho chữ thường a
, 30 đại diện cho chữ số 0
, v.v. Một số mã hóa ký tự đại diện cho mỗi ký tự bằng một byte; ví dụ: trong mã hóa Latin-1 , 163 đại diện £
, 241 đại diệnñ
và như thế. Số lượng ký tự tối đa mà một người có thể đại diện theo cách này là 256, không nhiều; do đó, có các bảng mã khác sử dụng nhiều hơn một byte cho mỗi ký tự. Mã hóa tiêu chuẩn thực tế trong thế giới unix hiện nay là UTF-8 , là mã hóa có độ dài thay đổi (các ký tự khác nhau chiếm số byte khác nhau) cho bộ ký tự Unicode .
Một tệp văn bản là một tệp nhị phân xảy ra để chứa văn bản dễ hiểu. Trong thực tế, đối với các chương trình unix, một tệp là một tệp văn bản miễn là nó tuân thủ hai điều kiện:
- Một tệp văn bản có thể không chứa bất kỳ byte null nào (một byte có giá trị bằng 0). Byte này không đại diện cho bất kỳ ký tự nào và được sử dụng như một điểm đánh dấu đặc biệt trong nội bộ trong nhiều chương trình thao tác văn bản.
- Một tệp văn bản bao gồm một chuỗi các dòng và mỗi dòng được kết thúc bởi một ký tự dòng mới (có giá trị số 10).
Máy thực thi là một loại tệp nhị phân cụ thể. Nếu bạn chạy cat
lệnh trên chúng, bạn sẽ thấy rác với một chút văn bản. Các tệp này cũng có thể chứa các lệnh cho thiết bị đầu cuối của bạn. Bạn có thể sử dụng chương trình strings
để xem tất cả các đoạn văn bản trong tệp nhị phân, bỏ qua các ký tự không in được.
Các tệp thực thi của máy không chính xác là một chuỗi các hướng dẫn máy: chúng cũng chứa một ít thông tin bổ sung cho hệ điều hành biết cách tải tệp vào bộ nhớ, thường là một số dữ liệu được sử dụng bởi chương trình và tùy chọn gỡ lỗi thông tin. Hầu hết các hệ thống unix sử dụng định dạng ELF cho các máy thực thi. Định dạng này chỉ định cách chia tệp chứa mã máy thành các phần và phần đó độc lập với kiến trúc máy; một số phần chứa mã và ý nghĩa của mã đó là dành riêng cho một kiến trúc máy cụ thể.
Bạn có thể sử dụng lệnh objdump -D /path/to/machine-executable
để hiển thị danh sách thực thi dưới dạng có thể đọc được: ngôn ngữ hợp ngữ . Vâng, dù sao cũng có thể đọc được bởi một người được đào tạo. Ngôn ngữ hội dành riêng cho kiến trúc bộ xử lý và ánh xạ trực tiếp tới các hướng dẫn máy.
Có thể viết một chương trình hoàn chỉnh bằng ngôn ngữ lắp ráp, nhưng điều này hiếm khi được thực hiện cho các chương trình không tầm thường, bởi vì nó mất nhiều thời gian. Nếu bạn thực sự điên, bạn có thể viết chương trình của mình trực tiếp dưới dạng nhị phân. Một số người đã cố gắng đưa ra chương trình ngắn nhất có thể in raHello world
; Ryan Henszey giải thích cách viết ELF thực thi 142 byte cho bộ xử lý PC ; Brian Raiter đã phân tích định dạng ELF và đưa ra một chương trình 45 byte mà Linux sẵn sàng thực hiện (chương trình đó không in gì cả).
Ngoài ra còn có các tệp thực thi không phải là tệp nhị phân; chúng được gọi là kịch bản . Và ngược lại, có nhiều tệp nhị phân không thể thực thi được: hình ảnh, video, tệp nén, tài liệu xử lý văn bản, thư viện mã không có điểm vào , tệp thực thi cho các kiến trúc bộ xử lý khác,