Fundo
Existem muitos tipos de arquivos especiais no Unix, por exemplo, links simbólicos, arquivos de dispositivo e arquivos proc (em /proc
). /proc
arquivos são apenas arquivos normais ou até mesmo arquivos de texto. Mas de resto, só sei usá-los, mas não conheço sua estrutura interna e o que são (em profundidade). E, infelizmente, todas as maneiras de acessar arquivos só podem obter o objeto que eles representam. Em outras palavras, não há como obter a representação interna.
Perguntas
Para links simbólicos, não há dúvida de que existe uma string que armazena os caminhos de seus destinos. No entanto, se houver apenas uma string, como eles podem ser distinguidos dos arquivos de texto simples? Se houver um cabeçalho especial especificado pelos drivers do sistema de arquivos, qual é? Existe alguma convenção? Alguém pode me dizer qual é a representação binária de um link simbólico apontando /usr/bin/bash
?
Para arquivos de dispositivo (nós), qual é sua estrutura e representação binária? De acordo com seus comportamentos, eles devem incluir informações sobre o número de interface e drivers relevantes. Mas isso fará com que seu tamanho varie muito. Alguém pode explicar isso em um nível binário?
Para compatibilidade de links simbólicos e arquivo de dispositivo (sei que é impossível para um mesmo arquivo de dispositivo funcionar em dois ambientes diferentes, mas podemos usar nossa imaginação para fazer um experimento) é o conteúdo binário desses arquivos fortemente dependente do tipo de sistema de arquivos e o kernel do sistema operacional? Por exemplo, se eu copiar (não via cp
comando, apenas escrever conteúdo binário idêntico) para um sistema de arquivos diferente (como de ext4 para xfs), esse arquivo (link simbólico ou arquivo de dispositivo) ainda é válido e funcional? Que tal copiá-lo de uma máquina Linux para uma máquina BSD?
Ou eles não são arquivos, e apenas registros especiais na parte do cabeçalho do sistema de arquivos?
Arquivos “especiais” ainda são arquivos, armazenados no sistema de arquivos como arquivos “normais”. Diretórios, arquivos, links simbólicos etc. são diferenciados por seu tipo, que é explicitamente armazenado no sistema de arquivos tje. Consulte Noções básicas sobre permissões e tipos de arquivo do UNIX para obter detalhes sobre os vários tipos de arquivo que você pode encontrar.
Como os arquivos são armazenados e quais arquivos podem ser armazenados, depende do sistema de arquivos. Alguns sistemas de arquivos suportam um subconjunto de tipos de arquivos no estilo Unix; por exemplo, o FAT não pode armazenar nada além de arquivos ou diretórios (e rótulos de volume). Isso significa que o armazenamento de um arquivo “especial” depende do sistema de arquivos e você não pode copiar os bits que representam um arquivo de um sistema de arquivos para outro como está.
Os links simbólicos armazenam a representação de texto de seu destino. Na maioria dos sistemas de arquivos atuais no estilo Unix, há espaço para alvos curtos ao lado das informações “principais” do link simbólico (em seu inode); links mais longos requerem a alocação de um bloco de dados.
Os nós de dispositivo armazenam identificadores, conhecidos como principais e secundários dos nós. Esses são dois números pequenos com requisitos de armazenamento fixos e há espaço para eles no inode. Os números são específicos do sistema operacional, portanto, você não pode copiar um nó do Linux para o BSD enquanto preserva sua função.
Você pode ver detalhes exaustivos da maneira do Ext4 de armazenar essas informações na documentação do Ext4 do kernel . Procure
i_mode
em particular para ver como o tipo de um arquivo é armazenado.