Acredito que a principal característica de um bom técnico em
Linux é entender bem a estrutura de arquivos do sistema operacional. Por outro lado, muitas pessoas que migram de Windows para Linux tem muitos problemas em entender o que são todos esses diretórios. Através desse texto explico o funcionamento do sistema de arquivos do Linux.
FHS é sigla para
Filesystem Hierarchy Standard (padrão para sistema de arquivos hierárquico), e define os principais diretórios de um sistema Linux. Até onde conheço está na versão 2.3, atualizada em 2004.
O sistema FHS é mantido pela Free Standard Groups, que contém engenheiros de empresas como Red Hat, IBM, Dell e HP. Hoje em dia, 99% dos sistemas Linux trabalham com o FHS (provavelmente todos Linux que você conhece usam).
Devo lembrar que todos diretórios, não importando se estão em partições separadas, estão abaixo do diretório "/", e que o FHS não se refere exclusivamente a diretórios situados diretamente na "/".
Descrevo a seguir os principais diretórios definidos pela última versão do FHS (se alguém tiver alguma contestação ou algum diretório que esqueci, sintam-se livres para comentar ou enviar por e-mail):
- /etc - nesse diretório e em seus subdiretórios se encontram basicamente todos arquivos de configuração do Linux. Ex.: /etc/resolv.conf, de configuração do DNS; o /etc/samba/smb.conf, arquivos de configuração do samba, entre outros. (Obs.: nos exemplos estou usando alguns arquivos padrão da distro Fedora, em outras distros poderá ser um pouco diferente, mas sem romper com o padrão FHS)
- /etc/opt - Arquivos de configuração para a pasta /opt.
- /etc/skel - Arquivos gravados nas pastas dos novos usuários.
- /etc/X11 - Arquivos de configuração para o servidor X (modo gráfico), versão 11.
- /opt - Arquivos opcionais, não padrão da distribuição. Ex.: aplicações como GoolgleEarth.
- /srv - Dados dos serviços fornecidos pelo próprio sistema.
- /bin - Arquivos binários com comandos essenciais para todos usuários. Ex.: cat, cp, rm.
- /sbin - Também arquivos binários, só que com comandos essenciais para administração de rede. Ex: ifconfig, modprobe, runlevel.
- /lib - Bibliotecas necessárias para os binários das pastas /bin e /sbin. Ex.: se for usado o comando ldd /bin/ls, mostrará as bibliotecas necessárias para esse comandos rodarem, como libc e linux-gate. Dica: se por acaso algum binário não rodar, você pode verificar com o comando ldd, ele vai mostrar se tem alguma biblioteca faltando. Você pode fazer a verificação em outra máquina que tenha a mesma distro e o programa rodando e descobrir qual pacote é necessário baixar, por exemplo se for usado o rpm -qf /lib/libc.so.6, vai mostrar o pacote glibc, daí é só ir na maquina com problema e instalar através do comando yum install glibc, ou apt-get install glibc.
- /usr - Aí é que vem uma boa jogada na minha opinião. Uma hierarquia secundária para alguns arquivos, com permissões diferentes.
- /usr/bin - Entra em jogo a hierarquia secundária. A pasta /usr/bin em teoria tem o mesmo funcionamento da /bin, porém usada para arquivos não necessários para a comunicação usuário-máquina. Ex.: less, renice, yum.
- /usr/sbin - Hierarquia secundária para /sbin, também com comandos não necessários para uso. Ex.: logrotate, lsof, lpinfo.
- /usr/lib - Bibliotecas necessárias para arquivos das pastas /usr/bin e /usr/sbin.
- /usr/local - Hierarquia terciária. Também contém as subpastas bin, lib e sbin, porém elas vêm vazias por padrão, sendo deixadas exclusivamente para programas criados pelo usuário.
- /usr/src - Código fonte do kernel.
- /boot - Arquivos estáticos usados no Boot Loader, ou seja, na inicialização do sistema.
- /tmp - Pasta onde ficam arquivos temporários. Ex.: quando você baixa algum arquivo da internet e opta por executar ao invés de salvar, na prática ele fica salvo na pasta /tmp e depois é excluído(muitas vezes não prontamente após o final da execução, o que o permite executar novamente).
- /dev - Pasta onde ficam os endereços lógicos dos devices conectados no computador. Ex.: a terceira partição de um HD conectado no primeiro canal IDE da máquina: /dev/hda3.
- /mnt - Onde ficam montados os volumes temporários.
- /media - Onde ficam montados devices como pendrive e CDs.
- /home - Diretório home dos usuários. Ex.: a pasta do usuário papainoel normalmente vai ser /home/papainoel, e dentro terá pastas como Desktop e Documentos.
- /root - Diretório home do usuário root. Por padrão vem com poucos arquivos, como o arquivos de instalação anaconda-ks.cfg.
- /proc - Diretório com informações dinâmicas sobre a máquina. Ex.: /proc/meminfo contém informações sobre uso da memória naquele instante. Obs.: Os arquivos da /proc não tem permissão de alteração nem pra usuário root.
- /var - Arquivos variáveis, como logs e páginas web.
- /var/log - Onde são gerados os principais logs do sistema.
- /var/lock - Contém uma espécie de controle sobre alguns processos que estão em execução.
- /var/run - Contém o PID dos processos que estão rodando na máquina.
- /var/spool - Processos que estão em uma fila de execução. Ex.: documento sendo enviado para uma fila de impressão.
- /var/mail - Caixa de e-mail dos usuários.
- /var/cache - Arquivos de cache de diversos programas.
Além desses diretórios, o FHS também recomenda diretórios a serem usados como partições e diretórios que são obrigatórios que estejam na raiz.
Diretórios que são obrigatórios estarem localizados na partição "/": /bin, /sbin, /lib, /etc, /dev e /proc.
Pastas recomendadas como ponto de montagem (normalmente se recomenda os diretórios que normalmente crescem dinamicamente, para não lotar a partição "/"): /boot, /home, /var, /tmp e /usr/local.
Como eu havia citado antes, sintam-se livre para comentar e tirar dúvidas.