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

23

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

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

Cody
источник

Ответы:

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файл имеет определенный размер, так как это не обычный файл на любом носителе.

Byte Commander
источник
Ввод? Что дает бесконечный список символов 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.
Кос