Estrutura do sistema de arquivos Linux
Esta aula explora a estrutura do sistema de arquivos Linux, apresentando o padrão FHS e os principais diretórios como /etc, /var, /usr, além dos arquivos de dispositivo e dos sistemas de arquivos virtuais /proc e /sys. O aluno aprenderá a navegar e entender a função de cada diretório, essencial para administração e desenvolvimento no ambiente Linux.
Nesta aula, vamos mergulhar na estrutura do sistema de arquivos Linux, um dos pilares para qualquer profissional que trabalha com servidores, desenvolvimento ou operações. Compreender onde cada arquivo reside e por que ele está ali não é apenas uma questão de curiosidade: é fundamental para configurar serviços, diagnosticar problemas, automatizar tarefas e escrever scripts robustos. Vamos explorar o padrão FHS (Filesystem Hierarchy Standard), os diretórios mais críticos como /etc, /var e /usr, além dos arquivos de dispositivo e dos sistemas de arquivos virtuais /proc e /sys.
O Linux adota uma estrutura hierárquica única, onde tudo é tratado como arquivo, desde dispositivos até informações do kernel. Essa filosofia torna o sistema poderoso e flexível, mas exige que o administrador conheça bem o papel de cada diretório. Ao final desta aula, você terá uma visão clara de como o sistema está organizado e como utilizar esse conhecimento no seu dia a dia.
FHS (visão geral)
O FHS (Filesystem Hierarchy Standard) é uma especificação que define a estrutura de diretórios em sistemas operacionais baseados em Unix, incluindo o Linux. Ele foi criado para padronizar a localização de arquivos e diretórios, facilitando a interoperabilidade entre diferentes distribuições e permitindo que usuários e administradores saibam onde encontrar determinados arquivos. O FHS é mantido pela Linux Foundation e sua versão mais recente é a 3.0, publicada em 2015.
A estrutura é organizada em uma árvore única, com o diretório raiz / no topo. A partir dele, todos os outros diretórios são ramificados. O FHS define dois tipos de diretórios: os estáticos (que raramente mudam, como /usr e /opt) e os dinâmicos (que contêm dados que mudam com frequência, como /var e /tmp). Essa separação é importante para estratégias de backup, particionamento e montagem de sistemas de arquivos em redes.
Vamos ver uma árvore simplificada dos principais diretórios:
/
├── bin
├── boot
├── dev
├── etc
├── home
├── lib
├── media
├── mnt
├── opt
├── proc
├── root
├── run
├── sbin
├── srv
├── sys
├── tmp
├── usr
└── var
Alguns diretórios merecem destaque imediato: /bin contém binários essenciais (como ls, cp), /sbin contém binários de sistema (como fdisk, mount), /boot armazena o kernel e arquivos de boot, e /home é onde ficam os diretórios dos usuários. Vamos explorar os mais relevantes para scripts e administração.
/etc, /var, /usr
Esses três diretórios são essenciais para a administração do sistema. Cada um tem uma função específica e é importante saber diferenciá-los.
Diretório /etc
O diretório /etc (de "et cetera") concentra os arquivos de configuração do sistema e dos serviços. É aqui que ficam arquivos como passwd, shadow, hosts, fstab, e os arquivos de configuração de serviços como Apache (httpd), SSH (ssh) e outros. A maioria desses arquivos é texto puro e pode ser editada com um editor de texto, mas é recomendável ter cuidado, pois erros podem quebrar o sistema.
Exemplos de arquivos importantes em /etc:
/etc/passwd— informações básicas dos usuários/etc/shadow— senhas criptografadas e políticas de expiração/etc/hosts— mapeamento estático de nomes para IPs/etc/fstab— definição de sistemas de arquivos montados na inicialização/etc/resolv.conf— configuração de DNS
Você pode listar o conteúdo do diretório com:
ls -la /etc
Muitos serviços criam subdiretórios em /etc, como /etc/nginx ou /etc/ssh, para organizar seus arquivos de configuração. Em scripts, é comum fazer backup desses arquivos antes de alterá-los.
Diretório /var
O diretório /var (de "variable") contém dados variáveis, ou seja, arquivos que mudam de tamanho e conteúdo durante a execução do sistema. Aqui ficam logs, spools de impressão, arquivos temporários de serviços, cache e bases de dados de alguns aplicativos. É um dos diretórios que mais cresce, por isso é importante monitorar seu espaço em disco.
Subdiretórios comuns:
/var/log— logs do sistema (syslog, auth.log, etc.)/var/spool— filas de impressão, cron, etc./var/tmp— arquivos temporários que persistem entre reinicializações/var/lib— dados de aplicativos (bancos de dados, pacotes)/var/cache— cache de pacotes e aplicativos
Veja como visualizar os logs mais recentes:
ls -lt /var/log | head
Diretório /usr
O diretório /usr (de "Unix System Resources") contém a maioria dos programas, bibliotecas e arquivos de documentação do sistema. Embora o nome sugira "user", ele é usado para software do sistema e do usuário. Na maioria das distribuições, /usr é um sistema de arquivos separado e pode ser montado como somente leitura em sistemas críticos.
Principais subdiretórios:
/usr/bin— binários de usuário (comandos comovim,python3)/usr/sbin— binários de administração (comouseradd)/usr/lib— bibliotecas compartilhadas/usr/local— software compilado localmente/usr/share— dados independentes de arquitetura (documentação, ícones)
Exemplo de uso: descobrir onde está um comando:
which python3
# Muitas vezes retorna /usr/bin/python3
Arquivos de dispositivo
No Linux, quase tudo é tratado como arquivo, inclusive os dispositivos de hardware. Eles são representados por arquivos especiais no diretório /dev. Esses arquivos não armazenam dados comuns; eles servem como interface para o kernel, permitindo que programas interajam com o hardware por meio de operações de leitura e escrita.
Existem dois tipos principais de arquivos de dispositivo: os de bloco (block devices) e os de caractere (character devices). Dispositivos de bloco transferem dados em blocos, como discos rígidos (/dev/sda) e SSDs. Dispositivos de caractere transferem dados caractere por caractere, como terminais (/dev/tty) e portas seriais (/dev/ttyS0).
Exemplos:
/dev/sda— primeiro disco rígido SATA/SCSI/dev/sda1— primeira partição do disco/dev/tty— terminal atual/dev/null— dispositivo que descarta tudo o que é escrito/dev/zero— fornece fluxo de zeros
Você pode ver os dispositivos com:
ls -l /dev/sda*
No contexto de scripts, é comum usar /dev/null para descartar saídas indesejadas:
comando_que_gera_saida > /dev/null 2>&1
Também é possível criar arquivos de dispositivo com o comando mknod, mas isso raramente é necessário em sistemas modernos, pois o udev gerencia a criação automática.
/proc e /sys
Os diretórios /proc e /sys são sistemas de arquivos virtuais que expõem informações internas do kernel e permitem a configuração em tempo real. Eles não ocupam espaço em disco, pois são gerados dinamicamente.
Diretório /proc
O /proc (de "process") é um sistema de arquivos virtual que fornece uma visão detalhada dos processos em execução e do sistema. Cada processo em execução tem um subdiretório com seu PID, contendo arquivos como status, cmdline, environ e fd. Além disso, o /proc contém informações sobre memória, CPU, versão do kernel, e muito mais.
Exemplos de arquivos úteis:
/proc/cpuinfo— detalhes da CPU/proc/meminfo— informações de memória/proc/version— versão do kernel/proc/uptime— tempo de atividade do sistema/proc/loadavg— carga média do sistema
Para ver informações da CPU:
cat /proc/cpuinfo | grep "model name" | head -1
Para listar todos os processos:
ls /proc | grep -E '^[0-9]+$'
Diretório /sys
O /sys (de "sysfs") é outro sistema de arquivos virtual, introduzido no kernel 2.6, que expõe informações sobre dispositivos e drivers, além de permitir a configuração de alguns parâmetros do kernel em tempo real. Ele é mais estruturado que /proc e é usado pelo udev para gerenciar dispositivos.
Em /sys, você encontra subdiretórios como /sys/class, /sys/block e /sys/devices. Por exemplo, para ver informações sobre a temperatura da CPU em muitos sistemas:
cat /sys/class/thermal/thermal_zone0/temp
Esse comando retorna a temperatura em miligraus Celsius (ex.: 45000 = 45°C).
Scripts avançados podem usar /sys para ajustar brilho de tela, gerenciar energia ou monitorar sensores. Por exemplo, para ver a velocidade da ventoinha:
cat /sys/class/hwmon/hwmon0/fan1_input
Boas práticas e observações finais
Ao trabalhar com a estrutura de arquivos, siga estas boas práticas:
- Sempre faça backup de arquivos de configuração antes de alterá-los, especialmente em
/etc. - Prefira usar caminhos absolutos em scripts para evitar ambiguidade.
- Monitore o espaço em disco, principalmente em
/vare/tmp, para evitar que logs preencham o disco. - Use
/dev/nullpara descartar saídas indesejadas em scripts. - Consulte
/proce/syspara obter informações em tempo real, mas evite escrever neles sem conhecimento profundo. - Respeite o FHS ao instalar software manualmente: use
/usr/localpara compilações locais.
Exercícios
Explique a diferença entre os diretórios
/etc,/vare/usr, e dê um exemplo de arquivo que normalmente reside em cada um.✓ Resposta:/etcguarda arquivos de configuração do sistema e serviços (ex.:/etc/passwd)./varcontém dados variáveis como logs e spool (ex.:/var/log/syslog)./usrcontém programas e bibliotecas (ex.:/usr/bin/python3).Qual comando você usaria para ver a quantidade total de memória RAM do sistema usando
/proc? Escreva o comando.✓ Resposta:grep MemTotal /proc/meminfooucat /proc/meminfo | grep MemTotal.O que é o FHS e por que ele é importante para a padronização do sistema?
✓ Resposta: O FHS é um padrão que define a hierarquia de diretórios em sistemas Unix/Linux. Ele garante que arquivos e diretórios tenham localizações previsíveis, facilitando a administração, o desenvolvimento de software e a interoperabilidade entre distribuições.Escreva um script que liste todos os arquivos de dispositivo do tipo bloco em
/dev(usels -le filtre pela primeira letra 'b' no tipo).✓ Resposta:ls -l /dev | grep '^b'Como você pode descobrir o PID do processo atual usando
/proc? Dica: existe um link simbólico chamadoself.✓ Resposta: O link/proc/selfaponta para o diretório do processo atual. O PID pode ser obtido comreadlink /proc/selfoubasename $(readlink /proc/self).