Hầu như tất cả các tập tin dưới /dev
đây là tập tin thiết bị . Trong khi đọc và ghi vào một tệp thông thường lưu trữ dữ liệu trên đĩa hoặc hệ thống tệp khác, việc truy cập tệp thiết bị sẽ giao tiếp với trình điều khiển trong kernel, thường lần lượt giao tiếp với một phần cứng (thiết bị phần cứng, do đó là tên).
Có hai loại tệp thiết bị: thiết bị khối (được biểu thị bằng b
ký tự đầu tiên trong đầu ra của ls -l
) và thiết bị ký tự (được chỉ định bởi c
). Sự khác biệt giữa các thiết bị khối và nhân vật không hoàn toàn phổ biến. Thiết bị chặn là những thứ giống như đĩa, hoạt động như các tệp lớn, kích thước cố định: nếu bạn viết một byte ở một độ lệch nhất định và sau đó đọc từ thiết bị ở độ lệch đó, bạn sẽ lấy lại byte đó. Các thiết bị ký tự gần như là bất cứ thứ gì khác, trong đó việc viết một byte có tác dụng ngay lập tức (ví dụ: nó được phát ra trên một chuỗi nối tiếp) và đọc một byte cũng có một số hiệu ứng ngay lập tức (ví dụ: đọc từ cổng nối tiếp).
Ý nghĩa của một tập tin thiết bị được xác định bởi số lượng của nó, không phải bởi tên của nó (tên quan trọng đối với các ứng dụng, nhưng không phải với kernel). Số thực tế là hai số: số chính cho biết trình điều khiển nào chịu trách nhiệm cho thiết bị này và số phụ cho phép người lái lái một số thiết bị¹. Những con số này xuất hiện trong ls -l
danh sách, nơi bạn thường tìm thấy kích thước tệp. Ví dụ brw-rw---- 1 root disk 8, 0 Jul 12 15:54 /dev/sda
→ thiết bị này là chính 8, nhỏ 0.
Một số tệp thiết bị dưới /dev
không tương ứng với các thiết bị phần cứng. Một cái tồn tại trên mọi hệ thống unix là /dev/null
; viết cho nó không có tác dụng, và đọc từ nó không bao giờ trả lại bất kỳ dữ liệu nào. Nó thường thuận tiện trong các kịch bản shell, khi bạn muốn bỏ qua đầu ra từ một lệnh ( >/dev/null
) hoặc chạy một lệnh không có đầu vào ( </dev/null
). Các ví dụ phổ biến khác là /dev/zero
(trả về null byte ad infinitum ) /dev/urandom
(trả về byte infinitum ngẫu nhiên ).
Một vài tệp thiết bị có ý nghĩa phụ thuộc vào quá trình truy cập nó. Ví dụ, /dev/stdin
chỉ định đầu vào tiêu chuẩn của quy trình hiện tại; mở từ có hiệu quả gần giống như mở tệp gốc được mở dưới dạng đầu vào tiêu chuẩn của quy trình. Tương tự như vậy, /dev/tty
chỉ định thiết bị đầu cuối mà quá trình được kết nối. Ngày nay, trong Linux, /dev/stdin
và bạn bè không được triển khai như các thiết bị ký tự, mà thay vào đó là các liên kết tượng trưng đến một cơ chế chung hơn cho phép mọi mô tả tệp được tham chiếu (trái ngược với chỉ 0, 1 và 2 theo phương pháp truyền thống); ví dụ /dev/stdin
là một liên kết tượng trưng đến /proc/self/fd/0
. Xem Làm thế nào / dev / fd liên quan đến / Proc / self / fd /? .
Bạn sẽ tìm thấy một số liên kết tượng trưng dưới /dev
. Điều này có thể xảy ra vì lý do lịch sử: một tệp thiết bị đã được chuyển từ tên này sang tên khác, nhưng một số ứng dụng vẫn sử dụng tên cũ. Ví dụ, /dev/scd0
là một liên kết tượng trưng đến /dev/sr0
trong Linux; cả hai chỉ định thiết bị CD đầu tiên. Một lý do khác cho liên kết tượng trưng là tổ chức: trong Linux, bạn sẽ tìm thấy đĩa cứng của bạn và phân vùng trong một số nơi: /dev/sda
và /dev/sda1
và bạn bè (mỗi đĩa được chỉ định bởi một chữ tùy ý, và phân vùng theo cách bố trí phân vùng), /dev/disk/by-id/*
(đĩa được chỉ định bởi một số sê-ri duy nhất), /dev/disk/by-label/*
(các phân vùng có hệ thống tệp, được chỉ định bởi nhãn do con người chọn); và nhiều hơn nữa. Liên kết tượng trưng cũng được sử dụng khi một tên thiết bị chung có thể là một trong nhiều tên; ví dụ/dev/dvd
có thể là một liên kết tượng trưng đến /dev/sr0
hoặc nó có thể là một liên kết đến /dev/sr1
nếu bạn có hai đầu đọc CD và cái thứ hai là đầu đọc DVD mặc định.
Cuối cùng, có một vài tệp khác mà bạn có thể tìm thấy bên dưới /dev
, vì lý do truyền thống. Bạn sẽ không tìm thấy điều tương tự trên mọi hệ thống. Trên hầu hết các thông báo, /dev/log
là một ổ cắm mà các chương trình sử dụng để phát ra thông điệp tường trình. /dev/MAKEDEV
là một kịch bản tạo ra các mục trong /dev
. Trên các hệ thống Linux hiện đại, các mục trong /dev/
được tạo tự động bởi udev , lỗi thời MAKEDEV
.
Điều này thực sự không còn đúng với Linux, nhưng chi tiết này chỉ quan trọng đối với người viết trình điều khiển thiết bị.