Sistema de arquivos Linux: hierarquia FHS e o papel de cada diretório
1. Introdução ao FHS (Filesystem Hierarchy Standard)
O Filesystem Hierarchy Standard (FHS) é um padrão que define a estrutura de diretórios em sistemas operacionais baseados em Unix/Linux. Desenvolvido e mantido pela Linux Foundation, o FHS tem como objetivo estabelecer uma organização consistente dos arquivos do sistema, facilitando a administração, o desenvolvimento e a portabilidade de software entre diferentes distribuições Linux.
Historicamente, o FHS surgiu da necessidade de unificar as diversas estruturas de diretórios que existiam nas primeiras distribuições Linux. Antes do padrão, cada distribuição organizava seus arquivos de maneira particular, o que causava confusão e dificultava a criação de scripts e aplicativos portáteis.
Os principais benefícios da padronização incluem:
- Previsibilidade: administradores e desenvolvedores sabem onde encontrar arquivos específicos
- Portabilidade: scripts e aplicativos funcionam em diferentes distribuições
- Segurança: permissões e propriedades de diretórios são padronizadas
- Manutenibilidade: atualizações e backups seguem uma estrutura lógica
A árvore de diretórios no Linux começa com a raiz (/), a partir da qual todos os outros diretórios se ramificam. Vamos explorar cada um deles em detalhes.
2. Diretórios raiz e de sistema essenciais
/bin e /sbin
O diretório /bin contém binários essenciais do sistema que são necessários para o funcionamento básico do Linux, mesmo em modo de recuperação. Aqui estão comandos como ls, cp, mv, cat e bash. Já /sbin abriga binários de administração do sistema, como fdisk, mount e init.
# Exemplo: listando binários essenciais
ls /bin | head -5
bash
cat
chmod
cp
date
# Exemplo: binários de administração
ls /sbin | head -5
fdisk
fsck
halt
ifconfig
init
Atualmente, muitas distribuições criam links simbólicos de /bin e /sbin para /usr/bin e /usr/sbin, unificando a estrutura.
/boot
Este diretório contém os arquivos necessários para a inicialização do sistema: o kernel (vmlinuz), a imagem initramfs (initrd.img) e os arquivos de configuração do bootloader (como grub.cfg).
# Exemplo: conteúdo típico de /boot
ls /boot
config-5.15.0-91-generic
grub/
initrd.img-5.15.0-91-generic
System.map-5.15.0-91-generic
vmlinuz-5.15.0-91-generic
/etc
O diretório /etc armazena arquivos de configuração do sistema e de aplicativos. É aqui que você encontra arquivos como passwd (contas de usuários), fstab (sistemas de arquivos montados) e hosts (mapeamento de nomes de rede).
# Exemplo: arquivos de configuração importantes em /etc
ls /etc | grep -E "passwd|fstab|hosts|ssh"
fstab
hosts
passwd
ssh/
3. Diretórios de dados do usuário e bibliotecas
/lib e /lib64
Estes diretórios contêm bibliotecas compartilhadas essenciais (arquivos .so) necessárias para executar os binários em /bin e /sbin. /lib64 é usado em sistemas de 64 bits para bibliotecas de 64 bits, enquanto /lib pode conter bibliotecas de 32 bits ou links simbólicos.
# Exemplo: bibliotecas essenciais
ls /lib | head -3
firmware/
modules/
libc.so.6
/usr
O diretório /usr (Unix System Resources) contém a hierarquia secundária de dados do usuário. Inclui binários não essenciais (/usr/bin), bibliotecas adicionais (/usr/lib), documentação (/usr/share/doc) e cabeçalhos de desenvolvimento (/usr/include).
# Exemplo: subdiretórios comuns em /usr
ls /usr
bin/
include/
lib/
local/
sbin/
share/
src/
/home
Cada usuário do sistema possui um diretório pessoal em /home, onde pode armazenar seus arquivos, configurações pessoais e dados. Por exemplo, o usuário joao terá seu diretório em /home/joao.
# Exemplo: estrutura de /home
ls /home
joao/
maria/
admin/
4. Diretórios de dispositivos e processos virtuais
/dev
O diretório /dev contém arquivos especiais que representam dispositivos do sistema. Cada dispositivo de hardware tem uma representação aqui, como discos (sda, nvme0n1), terminais (tty) e dispositivos de áudio (audio).
# Exemplo: dispositivos de bloco (discos)
ls /dev | grep "^sd"
sda
sda1
sda2
sdb
sdb1
/proc
Este é um sistema de arquivos virtual que fornece informações sobre processos em execução e o kernel. Cada processo tem um subdiretório numerado por seu PID, e arquivos como cpuinfo e meminfo mostram informações do sistema.
# Exemplo: informações da CPU via /proc
cat /proc/cpuinfo | grep "model name" | head -1
model name: Intel(R) Core(TM) i7-8700K CPU @ 3.70GHz
# Exemplo: memória do sistema
cat /proc/meminfo | grep MemTotal
MemTotal: 16384000 kB
/sys
Similar ao /proc, /sys expõe informações sobre dispositivos, drivers e barramentos do kernel. É usado para interagir com o hardware em tempo real.
# Exemplo: informações de dispositivo via /sys
ls /sys/class/net/
eth0
lo
wlan0
5. Diretórios temporários e variáveis
/tmp
Arquivos temporários criados por aplicativos e usuários são armazenados em /tmp. Seu conteúdo geralmente é limpo na reinicialização do sistema.
# Exemplo: criando arquivo temporário
touch /tmp/meu_arquivo_temp.txt
ls -l /tmp/meu_arquivo_temp.txt
-rw-r--r-- 1 usuario usuario 0 Jan 15 10:30 /tmp/meu_arquivo_temp.txt
/var
O diretório /var armazena dados variáveis que mudam durante a execução do sistema. Inclui logs (/var/log), spool de impressão (/var/spool), bancos de dados (/var/lib) e caches (/var/cache).
# Exemplo: estrutura de /var
ls /var
backups/
cache/
lib/
log/
spool/
tmp/
/var/log
Especificamente, /var/log contém arquivos de log do sistema e serviços. Logs como syslog, auth.log e kern.log são essenciais para diagnóstico e auditoria.
# Exemplo: logs comuns
ls /var/log | head -5
auth.log
bootstrap.log
dmesg
kern.log
syslog
6. Diretórios de montagem e mídia
/mnt
Usado como ponto de montagem temporário para sistemas de arquivos montados manualmente pelo administrador.
# Exemplo: montando um disco manualmente
mount /dev/sdb1 /mnt/disco_externo
ls /mnt/disco_externo
dados_projeto/
backup_2024/
/media
Ponto de montagem automático para mídias removíveis, como pendrives, CDs e DVDs. O sistema monta automaticamente aqui quando um dispositivo é inserido.
# Exemplo: mídia removível montada automaticamente
ls /media
joao/
joao/USB_DRIVE/
joao/CDROM/
/run
Diretório para dados voláteis de tempo de execução, como arquivos PID (identificadores de processo), sockets Unix e locks. Seu conteúdo é perdido na reinicialização.
# Exemplo: arquivos PID em /run
ls /run | grep "\.pid"
crond.pid
sshd.pid
systemd.pid
7. Diretórios especiais e de compatibilidade
/opt
Usado para instalar pacotes de software opcionais de terceiros que não seguem a hierarquia padrão. Aplicativos como Google Chrome e Oracle Database frequentemente são instalados aqui.
# Exemplo: software em /opt
ls /opt
google/
chrome/
/srv
Diretório para dados de serviços específicos do sistema, como servidores HTTP (/srv/www), FTP (/srv/ftp) ou CVS (/srv/cvs).
# Exemplo: estrutura típica de /srv
ls /srv
www/
ftp/
git/
/root
Diretório home do superusuário (root). Diferente de /home/root, este diretório fica diretamente na raiz por questões de segurança e acesso em modo de recuperação.
# Exemplo: conteúdo de /root
ls /root
.bashrc
.ssh/
scripts/
Conclusão
Compreender a hierarquia FHS é fundamental para qualquer profissional que trabalhe com Linux. A padronização dos diretórios simplifica a administração, facilita o desenvolvimento de scripts portáteis e garante que o sistema funcione de maneira previsível. Ao navegar pelos diretórios /bin, /etc, /var, /dev e /proc, você está explorando não apenas arquivos, mas a própria arquitetura do sistema operacional. Dominar essa estrutura é o primeiro passo para se tornar um administrador Linux eficiente.
Referências
- Filesystem Hierarchy Standard (FHS) - Linux Foundation — Documentação oficial do padrão FHS versão 3.0, detalhando cada diretório e suas especificações.
- Linux Filesystem Hierarchy - The Linux Documentation Project — Guia completo e detalhado sobre a hierarquia de arquivos do Linux, com exemplos práticos.
- Guia FHS - Ubuntu Community Help — Tutorial da comunidade Ubuntu explicando a estrutura de diretórios e suas funções no sistema.
- Linux Directory Structure Explained - Red Hat — Artigo técnico da Red Hat sobre a estrutura de diretórios Linux e o papel do FHS.
- Filesystem Hierarchy Standard - Arch Linux Wiki — Documentação da comunidade Arch Linux com explicações detalhadas e exemplos de cada diretório.