O arquivo / dev / null realmente tem um tamanho fixo?

23

Acabei de descobrir que /dev/nullé um arquivo e não um diretório.

Eu só estou querendo saber se ele tem um tamanho de arquivo real.

Cody
fonte

Respostas:

35

/dev/nullnão é realmente um arquivo. É um dispositivo de personagem !

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

A primeira letra cda string de permissões ( crw-rw-rw-) indica isso. Para arquivos regulares, seria um -substituto.

Então, em palavras fáceis: /dev/nullnão é um arquivo, mas um dispositivo virtual mapeado para esse caminho no sistema de arquivos, que tem o único objetivo de engolir e desaparecer dados - como um buraco negro.
No entanto, ele também pode ser usado como entrada, e age como um arquivo vazio (tamanho 0) e retorna imediatamente um EOF (Fim do arquivo).

Portanto, você não pode realmente dizer que /dev/nullpossui um tamanho de arquivo específico, pois não é um arquivo comum em qualquer mídia de armazenamento.

Byte Commander
fonte
Entrada? O que fornece uma lista interminável de caracteres NUL?
21815 Jonathon
@ JonathonWisnoski Eu não sei exatamente e nunca o usei assim, então posso apenas fornecer esse link para uma pergunta no StackOverflow, onde é explicada.
Byte Commander
7
@ JonathonWisnoski, não - ele se comporta como um arquivo de tamanho zero na entrada, de modo que a primeira leitura dele relata que o arquivo está no EOF.
godlygeek
Sim, está correto.
godlygeek
3
@JonathonWisnoski olha para / dev / zero para isso.
Paŭlo Ebermann 10/04
16

/dev/nullé um tipo especial de arquivo chamado " arquivo de dispositivo ".

Os arquivos do dispositivo funcionam como uma interface para algumas funções do kernel. Eles apenas ocupam o espaço necessário para uma entrada de diretório (" inode "), mas não têm nenhum conteúdo real e não têm um tamanho de arquivo real.

Outros arquivos de dispositivos são, por exemplo /dev/sda(geralmente um HDD ou SSD), /dev/zero(um arquivo que gera zeros quando lidos) ou /dev/random(um arquivo que gera dados aleatórios quando lidos). Na verdade, todos os arquivos /dev/incluídos são arquivos de dispositivo ou links que apontam para arquivos de dispositivo.

Florian Diesch
fonte
Embora eu ache a maior parte desta resposta correta (+1), acho que é um pouco enganador dizer que eles ocupam o tamanho de uma entrada de inode. Eles não ocupam espaço, se referindo ao espaço em disco, ou ocupam mais, se referindo a toda a implementação como dispositivos de caracteres.
kos
2
Assim como qualquer outro arquivo, um arquivo de dispositivo precisa de um inode que armazene o proprietário, permissões, número maior / menor e outros metadados. Depende do sistema de arquivos como e onde esses inodes são armazenados (você pode usar mknodpara criar arquivos de dispositivo onde quiser). Para sistemas de arquivos virtuais como /dev/o inode, não ocupa espaço em disco, mas um pouco de memória.
Florian Diesch 10/04/2015
Exatamente. Eu acho que não me expressei bem, então deixe-me reformular. Talvez o que estou apontando seja um pouco exigente, então me perdoe por isso. O que eu quis dizer é que, se você declarar que cada dispositivo de caractere ocupa algum espaço na memória devido à sua entrada de inode, talvez você queira salientar que as funções a serem chamadas na leitura / gravação em tal dispositivo, que são carregadas junto com ele, assim também.
kos
É realmente correto dizer que um arquivo ocupa o espaço ocupado por sua entrada na tabela de inodes? Eu não acho que isso geralmente esteja incluído no que as pessoas - e as pessoas de software escreveram - querem dizer quando falam sobre o tamanho do arquivo. Em particular, pedir lse durelatar o tamanho de um dispositivo especial de caractere como /dev/nullou /dev/randomproduz 0 .
Elias Kagan
Desculpe, mas diminuí a votação para esta resposta, porque, a menos que alguém me mostre errado sobre o que eu disse (o que eu poderia ser), ainda acho que não é correto afirmar que um dispositivo de caractere ocupa o espaço de uma entrada de inode.
quer