Um diretório é, semanticamente falando, um mapeamento do nome do arquivo para o inode. É assim que a abstração da árvore de diretórios é projetada, correspondendo à interface entre aplicativos e sistemas de arquivos. Aplicativos podem designar arquivos pelo nome e enumerar a lista de arquivos em um diretório, e cada arquivo tem um designador exclusivo que é chamado de “inode”.
Como essa semântica é implementada depende do tipo de sistema de arquivos. Cabe a cada sistema de arquivos como o diretório é codificado. Na maioria dos sistemas de arquivos Unix, um diretório é um mapeamento de nomes de arquivos para números de inodes, e há uma tabela separada que mapeia números de inode para dados de inode. (Os dados do inode contêm metadados de arquivos, como permissões e registros de data e hora, a localização do conteúdo do arquivo etc.). O mapeamento pode ser uma lista, uma tabela de hash, uma árvore ...
Você não pode ver esse mapeamento com o Vim. O Vim não mostra a área de armazenamento que representa o diretório. O Linux, como muitos outros sistemas Unix modernos, não permite que os aplicativos vejam a representação do diretório diretamente. Diretórios agem como arquivos comuns quando se trata de sua entrada de diretório e seus metadados, mas não quando se trata de seu conteúdo. Aplicativos lidos do arquivo comum com chamadas do sistema, como open
, read
, write
, close
; para diretórios, há outras chamadas do sistema: opendir
, readdir
, closedir
e a modificação de um diretório é feita criando, movendo e excluindo arquivos. Um aplicativo como cat
usa open
, read
, close
para ler o conteúdo de um arquivo; um aplicativo como ls
usa opendir
, readdir
, closedir
para ler o conteúdo de um diretório. O Vim normalmente funciona como cat
para ler o conteúdo de um arquivo, mas se você pedir para ele abrir um diretório, ele funciona como ls
e imprime os dados de uma maneira bem formatada.
Se você quiser ver como é um diretório sob o capô, você pode usar uma ferramenta como debugfs
para ext2 / ext3 / ext4. Certifique-se de não modificar nada! Uma ferramenta como debugfs
ignora o sistema de arquivos e pode destruí-lo completamente. O ext2 / ext3 / ext4 debugfs
é seguro porque está no modo somente leitura, a menos que você permita explicitamente escrever através de uma opção de linha de comando.
# debugfs /dev/root
debugfs 1.42.12 (29-Aug-2014)
debugfs: dump / /tmp/root.bin
debugfs: quit
# od -t x1 /tmp/root.bin
Você verá os nomes das entradas de diretório em /
em meio a um monte de outros caracteres, alguns não imprimíveis. Para entender, você precisa conhecer os detalhes do formato do sistema de arquivos.