O que é um arquivo especial?

Em um sistema operacional de computador, um arquivo especial é um tipo de arquivo que pode ser armazenado em um sistema de arquivos. Um arquivo especial às vezes também é chamado de arquivo de dispositivo .

O objetivo de um arquivo especial é expor o dispositivo como um arquivo no sistema de arquivos. Um arquivo especial fornece uma interface universal para dispositivos de hardware (e dispositivos virtuais criados e usados ​​pelo kernel), porque as ferramentas para E / S de arquivo podem ser usadas para acessar o dispositivo.

Quando os dados são vermelhos ou gravados em um arquivo especial, a operação acontece imediatamente e não está sujeita às regras convencionais do sistema de arquivos.

No Linux, existem dois tipos de arquivos especiais: bloquear arquivos especiais e arquivos especiais de caracteres .

Um arquivo especial de bloco funciona como uma interface direta para um dispositivo de bloco. Um dispositivo de bloco é qualquer dispositivo que executa E / S de dados em unidades de blocos.

Exemplos de arquivos especiais de bloco:

  • / dev / sd xn - partições montadas de dispositivos de armazenamento físico. A letra x refere-se a um dispositivo físico e o número n refere-se a uma partição nesse dispositivo. Por exemplo, / dev / sda1 é tipicamente a primeira partição no primeiro dispositivo de armazenamento físico.
  • / dev / loop n - dispositivos de loop. Estes são dispositivos especiais que permitem que um arquivo no sistema de arquivos seja usado como um dispositivo de bloco. O arquivo pode conter um sistema de arquivos inteiro próprio e ser acessado como se fosse uma partição montada em um dispositivo de armazenamento físico. Por exemplo, um arquivo de imagem de disco ISO pode ser montado como um dispositivo de loop.

Se você quiser saber o tamanho de um bloco no seu sistema, execute " blockdev --getbsz device " como root, por exemplo:

 sudo blockdev --getbsz / dev / sda1 
 4096 

Neste exemplo, o tamanho do bloco é de 4096 bytes (4 kibibytes).

Arquivos especiais de caracteres

Um arquivo especial de caractere é semelhante a um dispositivo de bloco, mas os dados são gravados em um caractere (oito bits ou um byte) de cada vez.

Exemplos de arquivos especiais de caracteres:

  • / dev / stdin (entrada padrão)
  • / dev / stdout (saída padrão).
  • / dev / stderr (erro padrão)
  • / dev / random (PRNG que pode atrasar o retorno de um valor para adquirir entropia adicional).
  • / dev / urandom (PRNG que sempre retorna um valor imediatamente, independentemente da entropia requerida).
  • / dev / null (O dispositivo nulo. A leitura deste arquivo sempre obtém um byte nulo; a gravação nesse arquivo não faz nada com êxito.)

Tipos de arquivos Linux

No kernel do Linux, os tipos de arquivos são declarados no arquivo de cabeçalho sys / stat.h. O nome do tipo, o nome simbólico e o bitmask para cada tipo de arquivo do Linux estão listados abaixo.

Como posso saber se um arquivo é especial?

Teste para bloco especial

No bash, o comando " test -b file " retorna um status de saída de 0 se o arquivo for especial de bloco, ou 1 se o arquivo for de outro tipo ou não existir.

 teste -b / dev / sda1; echo $? # check for block special, status de saída de eco do teste 
 0 
 teste -b / dev / null; echo $? # arquivos especiais de caracteres não são blocos especiais 
 1 

Teste para personagem especial

Para determinar se um arquivo é especial, use " test -c file ":

 teste -c / dev / null; echo $? 
 0 

Usando stat

Você também pode verificar o tipo de um arquivo com stat :

 stat / dev / sda1 
 Arquivo: / dev / sda1 Tamanho: 0 Blocos: 0 IO Bloqueio: 4096 bloquear arquivo especial Dispositivo: 6h / 6d Inode: 7998 Links: 1 Tipo de dispositivo: 8, 1 Acesso: (0660 / brw-rw ----) Uid : (0 / root) Gid: (6 / disco) Access: 2018-07-08 06: 41: 25.540000000 -0400 Modificar: 2018-07-08 06: 41: 25.540000000 -0400 Alterar: 2018-07-08 06: 41: 25.540000000 -0400 Nascimento: - 
 stat / dev / random 
 Arquivo: / dev / random Tamanho: 0 Blocos: 0 IO Bloqueio: 4096 caractere de arquivo especial Dispositivo: 6h / 6d Inode: 6518 Links: 1 Tipo de dispositivo: 1, 8 Acesso: (0666 / crw-rw-rw-) Uid: (0 / root) Gid: (0 / raiz) Access: 2018-07-08 06: 41: 19.676000000 -0400 Modificar: 2018-07-08 06: 41: 19.676000000 -0400 Alterar: 2018-07-08 06:41 : 19.676000000 -0400 Nascimento: - 

Inode, termos do sistema operacional, entrada padrão (stdin), saída padrão (stdout)