Sistema de Arquivos Linux
Estrutura de diretórios, inodes e links, a base de como o Linux organiza dados.
O princípio: Tudo é Arquivo
"Tudo é arquivo" é a filosofia central do Unix/Linux. Não é apenas um slogan — é uma decisão de design que torna o sistema radicalmente consistente.
No Linux, os seguintes itens são representados como arquivos:
- Arquivos comuns — texto, binários, imagens
- Diretórios — arquivos especiais que listam outros arquivos
-
Dispositivos de hardware —
/dev/sda(disco),/dev/tty(terminal) -
Processos —
/proc/1234/representa o processo PID 1234 - Sockets de rede e pipes — mecanismos de comunicação entre processos
-
Pseudodispositivos —
/dev/null,/dev/zero,/dev/random
Isso significa que as mesmas ferramentas que operam em arquivos
(cat, read(), write())
operam igualmente em dispositivos e processos. Você pode ler
informações da CPU com cat /proc/cpuinfo como se
fosse um simples arquivo de texto.
# Tudo é arquivo — na prática:
# Ler informações da CPU como se fosse um arquivo de texto
cat /proc/cpuinfo | head -20
# Descartar output enviando para /dev/null
comando_ruidoso > /dev/null 2>&1
# Gerar zeros infinitos (útil para apagar discos)
dd if=/dev/zero of=/dev/sdb bs=1M count=100
# Ver o tipo real de cada "arquivo" em /dev
file /dev/sda # block special (dispositivo de bloco)
file /dev/null # character special (dispositivo de caractere)
file /dev/tty # character special
# Listar o que está dentro do "diretório" de um processo
ls -la /proc/1 # processo init/systemd
- Hardware, processos, pipes e sockets são todos acessíveis como arquivos
- Isso torna o sistema previsível: uma interface para tudo
-
/dev/nulldescarta qualquer dado escrito nele -
/procexpõe estado do kernel e processos em tempo real
A Árvore de Diretórios
No Linux há uma única árvore de diretórios, com
raiz em /. Diferente do Windows com C:\,
D:\, aqui tudo parte do mesmo ponto. Dispositivos
externos são "montados" dentro dessa árvore.
Os diretórios principais que você deve conhecer:
-
/— raiz de tudo. O início da árvore. -
/etc— arquivos de configuração do sistema./etc/passwd,/etc/fstab,/etc/ssh/sshd_config. -
/var— dados variáveis: logs (/var/log), spools, bases de dados de pacotes. -
/home— diretórios dos usuários./home/joao,/home/maria. -
/root— diretório home do usuário root (não fica dentro de /home). -
/tmp— arquivos temporários, apagados no boot ou periodicamente. -
/usr— programas e dados do usuário./usr/bin(executáveis),/usr/lib(bibliotecas),/usr/share(dados compartilhados). -
/bine/usr/bin— executáveis essenciais. Em distros modernas,/biné um symlink para/usr/bin. -
/sbine/usr/sbin— executáveis do sistema (tipicamente requerem root):fdisk,iptables,reboot. -
/libe/usr/lib— bibliotecas compartilhadas (.sofiles — o equivalente de.dllno Windows). -
/mnte/media— pontos de montagem para dispositivos externos (pendrives, HDs externos). -
/opt— softwares opcionais instalados manualmente, fora do gerenciador de pacotes.
# Listar a raiz com permissões e tamanhos
ls -la /
# Output típico:
drwxr-xr-x 19 root root 4096 Mai 20 10:00 .
drwxr-xr-x 19 root root 4096 Mai 20 10:00 ..
lrwxrwxrwx 1 root root 7 Jan 1 2024 bin -> usr/bin
drwxr-xr-x 4 root root 4096 Mai 15 08:30 boot
drwxr-xr-x 20 root root 4760 Mai 20 09:55 dev
drwxr-xr-x 130 root root 12288 Mai 20 09:58 etc
drwxr-xr-x 3 root root 4096 Fev 10 14:20 home
lrwxrwxrwx 1 root root 7 Jan 1 2024 lib -> usr/lib
drwxr-xr-x 2 root root 4096 Jan 1 2024 mnt
drwxr-xr-x 3 root root 4096 Mar 5 11:00 opt
dr-xr-xr-x 348 root root 0 Mai 20 07:00 proc
drwx------ 6 root root 4096 Mai 18 16:45 root
drwxr-xr-x 30 root root 940 Mai 20 09:55 run
lrwxrwxrwx 1 root root 8 Jan 1 2024 sbin -> usr/sbin
drwxrwxrwt 24 root root 4096 Mai 20 11:20 tmp
drwxr-xr-x 12 root root 4096 Mai 10 09:00 usr
drwxr-xr-x 13 root root 4096 Mai 10 09:00 var
# Note: bin e lib são symlinks para usr/bin e usr/lib
# Isso é o FHS moderno (distros como Ubuntu 20.04+)
# Encontrar logs modificados nos últimos 7 dias
find /var/log -name "*.log" -mtime -7
Confundir /root com /" — /root é o
diretório home do usuário root. / (root do
filesystem) é a raiz de toda a árvore. São coisas diferentes.
Salvar arquivos de configuração em /tmp —
/tmp é apagado no boot. Qualquer configuração salva
lá some ao reiniciar.
Instalar software manualmente em /usr/bin —
software instalado manualmente vai em
/usr/local/bin ou /opt. Isso evita
conflito com o gerenciador de pacotes.
Diretórios Especiais: /proc, /dev, /sys
Estes três diretórios são sistemas de arquivos virtuais — não existem no disco. O kernel os cria na memória RAM e os expõe como se fossem diretórios comuns.
/proc — expõe informações sobre
processos e o estado do kernel:
-
/proc/cpuinfo— modelo, velocidade e cores da CPU /proc/meminfo— uso de memória RAM-
/proc/1234/— tudo sobre o processo com PID 1234 -
/proc/1234/cmdline— comando que iniciou o processo -
/proc/1234/fd/— file descriptors abertos pelo processo /proc/net/— informações de rede
/dev — arquivos de dispositivo. Cada
dispositivo de hardware tem um arquivo aqui:
/dev/sda— primeiro disco SATA/SCSI/dev/sda1— primeira partição desse disco/dev/nvme0n1— disco NVMe-
/dev/null— buraco negro (dados escritos aqui somem) /dev/zero— fonte infinita de zeros-
/dev/randome/dev/urandom— fontes de dados aleatórios /dev/tty— terminal atual
/sys — similar ao /proc, expõe
informações de hardware e drivers com uma estrutura mais
organizada. Usado para configurar drivers e ver informações de
dispositivos.
# Informações da CPU (lendo um "arquivo" na memória)
cat /proc/cpuinfo | head -20
# processor : 0
# model name: Intel(R) Core(TM) i7-1165G7 @ 2.80GHz
# cpu MHz : 2800.000
# cache size: 12288 KB
# ...
# Uso de memória em tempo real
cat /proc/meminfo
# MemTotal: 16384000 kB
# MemFree: 3201024 kB
# MemAvailable: 8547328 kB
# Ver file descriptors abertos pelo processo bash (PID=$$)
ls -la /proc/$$/fd
# Gerar arquivo de 1MB com zeros
dd if=/dev/zero of=/tmp/teste.bin bs=1M count=1
# Ver tipo de arquivo do dispositivo de disco
file /dev/sda
# /dev/sda: block special (8/0)
# Ver informações de hardware via /sys
cat /sys/class/net/eth0/speed # velocidade da interface de rede
Inodes: o que é um arquivo por dentro
Um inode (index node) é uma estrutura de dados que o sistema de arquivos mantém para cada arquivo. Ele armazena todos os metadados do arquivo, exceto o nome:
- Número do inode — identificador único dentro do sistema de arquivos
- Permissões — rwxrwxrwx e tipo de arquivo
- Dono (UID) e Grupo (GID)
- Tamanho em bytes
- Timestamps: atime (último acesso), mtime (última modificação do conteúdo), ctime (última mudança de metadados)
- Número de hard links apontando para este inode
- Ponteiros para blocos de dados no disco
O nome do arquivo NÃO está no inode — ele fica no diretório. Um diretório é essencialmente uma tabela que mapeia nomes de arquivos para números de inode. É por isso que você pode ter vários nomes diferentes apontando para o mesmo arquivo.
# Ver todas as informações do inode de um arquivo
stat arquivo.txt
# Output:
# File: arquivo.txt
# Size: 4096 Blocks: 8 IO Block: 4096
# Device: 8,1 Inode: 1234567 Links: 1
# Access: (0644/-rw-r--r--) Uid: (1000/ joao) Gid: (1000/ devs)
# Access: 2026-05-20 10:00:00.000 +0000 ← atime
# Modify: 2026-05-19 14:30:00.000 +0000 ← mtime
# Change: 2026-05-19 14:30:00.000 +0000 ← ctime
# Ver o número do inode na listagem
ls -lai /etc/passwd
# 655361 -rw-r--r-- 1 root root 2847 Mai 20 10:00 /etc/passwd
# ↑ número do inode
# Ver uso de inodes no sistema de arquivos
df -i
# Filesystem Inodes IUsed IFree IUse% Mounted on
# /dev/sda1 6553600 234871 6318729 4% /
Pense no inode como uma ficha de biblioteca. A ficha contém todas as informações do livro: autor, páginas, data de aquisição, localização na estante (blocos no disco). O título do livro (nome do arquivo) fica no catálogo (diretório), que aponta para a ficha. Você pode colocar o mesmo livro em múltiplos catálogos com nomes diferentes — é isso que são os hard links.
"Copiar um arquivo cria um inode novo" — sim,
cp cria um inode e blocos de dados novos. Mas
mv dentro do mesmo sistema de arquivos apenas
renomeia a entrada no diretório — o inode não muda.
"Discos grandes nunca ficam sem inodes" — errado. Um disco pode ter espaço livre mas estar sem inodes disponíveis, impossibilitando criar novos arquivos. Acontece quando há milhões de arquivos pequenos (ex: cache de email, npm modules).
Hard Links e Symbolic Links
Existem dois tipos de links no Linux, com comportamentos muito diferentes:
Hard Link — outro nome para o mesmo inode. Ambos os nomes apontam diretamente para os mesmos blocos de dados no disco. O inode mantém um contador de hard links. O dado só é removido do disco quando esse contador chega a zero (todos os hard links foram deletados). Limitações: não pode cruzar sistemas de arquivos, não pode apontar para diretórios.
Symbolic Link (symlink) — arquivo especial que contém um caminho para outro arquivo. Similar a um atalho no Windows. O symlink tem seu próprio inode. Se o arquivo original for deletado, o symlink fica "quebrado" (dangling link). Pode cruzar sistemas de arquivos e apontar para diretórios.
# Criar um hard link
ln arquivo.txt hard_link.txt
# Verificar: ambos têm o mesmo inode
ls -lai arquivo.txt hard_link.txt
# 1234567 -rw-r--r-- 2 joao devs 1024 ... arquivo.txt
# 1234567 -rw-r--r-- 2 joao devs 1024 ... hard_link.txt
# ↑ mesmo inode! ↑ link count = 2
# Deletar o original não afeta o hard link
rm arquivo.txt
cat hard_link.txt # ainda funciona!
# ---
# Criar um symbolic link
ln -s /caminho/para/original /caminho/para/symlink
# Exemplo prático: link para versão atual do python
ln -s /usr/bin/python3.12 /usr/local/bin/python
# Ver para onde o symlink aponta
ls -la /usr/bin/python
# lrwxrwxrwx 1 root root 16 ... /usr/bin/python -> python3.12
# Resolver o caminho real de um symlink
readlink -f /usr/bin/python
# /usr/bin/python3.12
# Symlinks quebrados (dangling links)
ln -s /arquivo/que/nao/existe meu_link
ls -la meu_link # aparece em vermelho — link quebrado
- Hard link: mesmo inode, dados sobrevivem enquanto houver ao menos um link
- Symlink: arquivo separado com caminho — quebra se o destino some
-
Symlinks aparecem com
lnols -lae têm permissãolrwxrwxrwx - Hard links não cruzam sistemas de arquivos — symlinks sim
-
readlink -fresolve a cadeia completa de symlinks até o arquivo real