Имеет ли файл / dev / null фиксированный размер?


23

Я только что узнал, что /dev/nullэто файл, а не каталог.

Мне просто интересно, если у него есть фактический размер файла.

Ответы:


35

/dev/nullна самом деле это не файл. Это устройство персонажа !

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

Первая буква cстроки разрешений ( crw-rw-rw-) указывает на это. Для обычных файлов это было бы -вместо.

Проще говоря, /dev/nullэто не файл, а виртуальное устройство, сопоставленное этому пути в файловой системе, которое имеет единственную цель проглотить и скрыть данные - как черная дыра.
Он также может быть использован в качестве входных данных, тогда он действует как пустой файл (размер 0) и немедленно возвращает EOF (конец файла).

Поэтому вы не можете сказать, что /dev/nullфайл имеет определенный размер, так как это не обычный файл на любом носителе.


Ввод? Что дает бесконечный список символов NUL?
— Джонатон

@JonathonWisnoski Я точно не знаю, и я никогда не использовал его таким образом, поэтому я могу просто дать вам эту ссылку на вопрос в StackOverflow, где это объясняется.
— Byte Commander

7
@JonathonWisnoski, нет - на входе он ведет себя как файл нулевого размера, поэтому при первом чтении с него сообщается, что файл находится в EOF.
— Godlygeek

Да, это правильно.
— Godlygeek

3
@JonathonWisnoski посмотрите на / dev / zero для этого.
— Пагло Эберманн

16

/dev/nullэто особый вид файла, который называется « файл устройства ».

Файлы устройств действуют как интерфейс для некоторых функций ядра. Они просто занимают место, необходимое для записи в каталоге (« inode »), но не имеют реального содержимого и не имеют фактического размера файла.

Другими файлами устройств являются, например, /dev/sda(обычно HDD или SSD), /dev/zero(файл, который генерирует нули при чтении), или /dev/random(файл, который генерирует случайные данные при чтении). Фактически обо всех файлах в нем /dev/являются либо файлы устройства, либо ссылки, указывающие на файлы устройства.


В то время как я нахожу большую часть этого ответа правильным (+1), я думаю, что немного вводить в заблуждение, чтобы сказать, что они занимают размер записи inode. Они либо не занимают места, если ссылаются на дисковое пространство, либо занимают больше, если ссылаются на всю свою реализацию как символьные устройства.
— Кос

2
Как и любой другой файл, для файла устройства требуется индекс, в котором хранятся владелец, права доступа, старший / младший номер и другие метаданные. От того, как и где хранятся эти inode, зависит файловая система (вы можете использовать ее mknodдля создания файлов устройств в любом месте). Для виртуальных файловых систем, таких /dev/как inode, они занимают не дисковое пространство, а некоторую память.
— Florian Diesch

В точку. Я думаю, что я не выразил себя хорошо, поэтому позвольте мне перефразировать. Возможно, то, на что я указываю, немного придирчиво, так что прости меня за это. Я имел в виду, что если вы утверждаете, что каждое символьное устройство занимает определенное пространство в памяти из-за его записи inode, возможно, вы хотите указать, что функции, вызываемые при чтении / записи на таком устройстве, которые загружаются вместе с ними, делают Поэтому также.
— Кос

Действительно ли правильно сказать, что файл занимает место, занимаемое записью его таблицы inode? Я не думаю, что это обычно входит в то, что люди - и люди, написавшие программное обеспечение - имеют в виду, когда говорят о размере файла. В частности, при запросе lsи duсообщении о размере символа специальное устройство наподобие /dev/nullor /dev/randomвыдает 0 .
— Элия ​​Каган

Извините, но я отклонил этот ответ, потому что, если кто-то не докажет, что я не прав в том, что я сказал (что я могу быть), я все еще думаю, что неправильно утверждать, что символьное устройство занимает пространство записи inode.
— Кос
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.