Kernel e Internals

Sistema de arquivos Linux: hierarquia FHS e o papel de cada diretório

• 7 min de leitura

Sistema de arquivos Linux: hierarquia FHS e o papel de cada diretório
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.

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

💬 Comentários
Mais em Kernel e Internals