Tập tin / dev / null có thực sự có kích thước cố định không?


23

Tôi vừa phát hiện ra đó /dev/nulllà một tập tin chứ không phải một thư mục.

Tôi chỉ tự hỏi nếu nó có kích thước tập tin thực tế.

Câu trả lời:


35

/dev/nullkhông thực sự là một tập tin. Đó là một thiết bị nhân vật !

$ ls -l /dev/null
crw-rw-rw- 1 root root 1, 3 Apr 10 09:53 /dev/null

Chữ cái đầu tiên ccủa chuỗi quyền ( crw-rw-rw-) chỉ ra điều này. Đối với các tập tin thông thường, nó sẽ là một -thay thế.

Vì vậy, nói một cách dễ dàng: /dev/nullkhông phải là một tệp mà là một thiết bị ảo được ánh xạ tới đường dẫn này trong hệ thống tệp, mục đích duy nhất là nuốt và biến mất dữ liệu - giống như một lỗ đen.
Nó cũng có thể được sử dụng làm đầu vào, sau đó nó hoạt động như một tệp trống (kích thước 0) và ngay lập tức trả về EOF (End Of File).

Do đó, bạn không thể thực sự nói rằng /dev/nullcó kích thước tệp cụ thể, vì đó không phải là tệp thông thường trên bất kỳ phương tiện lưu trữ nào.


Đầu vào? Nó cung cấp một danh sách vô tận các ký tự NUL?
Jonathon

@JonathonWisnoski Tôi không biết chính xác và tôi chưa bao giờ sử dụng nó như thế này, vì vậy tôi chỉ có thể cung cấp cho bạn liên kết này đến một câu hỏi trên StackOverflow nơi nó được giải thích.
Chỉ huy Byte

7
@JonathonWisnoski, không - nó hoạt động giống như một tệp có kích thước bằng 0 ở đầu vào, do đó lần đọc đầu tiên từ nó báo cáo rằng tệp nằm ở EOF.
trời ơi

Đúng, đúng vậy.
trời ơi

3
@JonathonWisnoski nhìn vào / dev / zero cho điều đó.
Paŭlo Ebermann

16

/dev/nulllà một loại tệp đặc biệt gọi là " tệp thiết bị ".

Các tập tin thiết bị hoạt động như một giao diện cho một số chức năng kernel. Họ chỉ chiếm không gian cần thiết cho một mục nhập thư mục (" inode ") nhưng không có bất kỳ nội dung thực sự nào và không có kích thước tệp thực tế.

Các tệp thiết bị khác là ví dụ /dev/sda(nói chung là ổ cứng hoặc SSD), /dev/zero(tệp tạo ra số 0 khi đọc) hoặc /dev/random(tệp tạo dữ liệu ngẫu nhiên khi đọc). Trên thực tế về tất cả các tệp trong /dev/là tệp thiết bị hoặc liên kết trỏ đến tệp thiết bị.


Mặc dù tôi thấy hầu hết câu trả lời này là đúng (+1), tôi nghĩ rằng sẽ hơi sai khi nói rằng chúng chiếm kích thước của một mục nhập inode. Chúng không chiếm bất kỳ không gian nào, nếu đề cập đến không gian đĩa, hoặc chúng chiếm nhiều hơn, nếu đề cập đến toàn bộ việc thực hiện của chúng như các thiết bị ký tự.
kos

2
Cũng giống như bất kỳ tệp nào khác, tệp thiết bị cần có một nút lưu trữ chủ sở hữu, quyền, số chính / số phụ và siêu dữ liệu khác. Nó phụ thuộc vào hệ thống tệp như thế nào và nơi lưu trữ các nút này (bạn có thể sử dụng mknodđể tạo tệp thiết bị ở bất cứ đâu bạn muốn). Đối với các hệ thống tệp ảo như /dev/inode không chiếm dung lượng đĩa mà chỉ có một số bộ nhớ.
Florian Diesch

Chính xác. Tôi nghĩ rằng tôi đã không thể hiện bản thân tốt, vì vậy hãy để tôi nói lại. Có lẽ những gì tôi đang chỉ ra nó hơi kén chọn, vì vậy hãy tha thứ cho tôi vì điều đó. Ý tôi là nếu bạn nói rằng mỗi thiết bị ký tự chiếm một khoảng trống trong bộ nhớ do mục nhập inode của nó, có lẽ bạn muốn chỉ ra rằng các chức năng được gọi khi đọc / ghi trên thiết bị đó, được tải cùng với chúng, hãy làm nên cũng.
kos

Có thực sự đúng khi nói một tệp chiếm không gian bị chiếm bởi mục nhập bảng inode của nó không? Tôi không nghĩ rằng điều này thường được bao gồm trong những gì mọi người - và những người phần mềm đã viết - có nghĩa là khi họ nói về kích thước tệp. Cụ thể, yêu cầu lsdubáo cáo kích thước của một thiết bị đặc biệt như /dev/nullhoặc /dev/randommang lại 0 .
Eliah Kagan

Xin lỗi, nhưng tôi đã đánh giá thấp câu trả lời này, bởi vì trừ khi ai đó chứng minh tôi sai về những gì tôi đã nói (mà tôi có thể nói), tôi vẫn nghĩ rằng không đúng khi nói rằng một thiết bị nhân vật chiếm không gian của một mục nhập inode.
kos
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.