Estrutura de diretórios no GNU/Linux

Quem está começando agora no mundo GNU/Linux, costuma ficar confuso com a estrutura de diretórios e partições.

Enquanto no Windows temos as unidades A:, C: ou D:, no Linux temos os /dev/sda, /dev/sdb e seus pontos de montagem; lá no Windows, tem a pasta “Meus Documentos” onde os usuários gravam seus arquivos; no Linux, existe o diretório /home/usuario, onde geralmente ‘usuario’ é substituído pelo nome do usuário que está logado no sistema no momento.

A estrutura de diretórios do Linux segue o File Hierarchy Standard [1] – Padrão para Hierarquia de Sistema de Arquivos, ou FHS, que é um orgão que define os principais diretórios e o seu conteúdo em sistema Linux ou do tipo Unix e é um subpadrão do LSB – Linux Standard Base[2].

Uma estrutura de diretórios padrão mantém o sistema organizado, e sempre vamos saber onde estará um arquivo de configuração ou um comando que pode ser utilizado por todos usuários, além de garantir que a estrutura padrão será a mesma para qualquer distribuição.

Falando sobre os principais diretórios, o FHS especifica que um sistema GNU/Linux, deve conter obrigatoriamente 14 diretórios. Alguns diretórios são opcionais e pelo menos um é recomendado. Basicamente, temos algo assim:

Conhecendo os diretórios!

/ – É na raiz que ficam todos os diretórios do GNU/Linux. O diretório raiz é representado pela / (barra). Fazendo uma comparação, lá no Windows, temos o diretório C:, que é também é chamado de raiz. Isso significa que tudo o que for instalado no Windows, estará abaixo de C:.No GNU/Linux, tudo também fica abaixo da raiz, ou melhor, do /.

/bin – O diretório /bin guarda os comandos essenciais para o funcionamento do sistema. Esse é um diretório público; sendo assim, os comandos que estão nele podem ser utilizados por qualquer usuário do sistema. Exemplos de comandos: bash, ls, echo, cp e outros.

/boot – No diretório /boot estão os arquivos estáticos necessários à inicialização do sistemae os arquivos do gerenciador de boot. O Gerenciador de Boot é um programa que carrega um sistema operacional e/ou permite escolher qual será iniciado. Normalmente esse programa é gravado no Setor de Boot da partição ativa ou no Master Boot Record (MBR) do disco rígido.

/dev – No diretório /dev ficam todos os arquivos-dispositivos. O Linux faz a comunicação com os periféricos através de links simbólicos (seria algo como atalhos) que ficam armazenados nesse diretório facilitando assim, o acesso aos mesmos. Aqui, vale lembrar que os arquivos-dispositivos podem ser do tipo devfs ou udev:

* devfs – contém todos arquivos-dispositivos, inclusive para dispositivos que não existem no computador e irá ocupar espaço em disco.
* udev – utilizado a partir do kernel 2.6.12, não ocupa espaço em disco e contém somente os arquivos-dispositivos dos devices presentes na máquina.

/etc – No diretório /etc estão os arquivos de configuração do sistema da máquina local. Nesse diretório vamos encontrar uma miscelânea de dados de configuração, tais como: scripts de inicialização do sistema em seus vários níveis (armazenados nos diretórios /etc/r*c), tabela do filesystem (arquivo /etc/fstab), configuração da inicialização do sistema para cada nível (arquivo /etc/inittab), configuração default para todos os logins (arquivo /etc/profile), e um número considerável de arquivos para configuração de rede e outros aspectos do sistema, incluindo a parte gráfica.

/lib – No diretório /lib estão as biblilotecas compartilhadas e módulos do kernel. As bibliotecas, conhecidas como libs, são como as dlls para o Windows. No caso do Linux, quando um programa é instalado, todas as bibliotecas para o seu funcionamento ficam armazenadas nesse diretório.

/media – Ponto de montagem para mídias removíveis, tais como: cd, dvd, floppy disk, pendrive, câmera digital, etc. Aqui seria mais ou menos o equivalente as letras A: e D: do windows… só que aqui, não se usam as letras, usa-se o nome do dispositivo!

/mnt – Diretório usado como ponto de montagem de sistema de arquivos. Por exemplo, existe um servidor de arquivos na rede que precisa ser acessado por um usuário; o administrador irá disponibilizar esse diretório na máquina do usuário dentro do /mnt. E uma coisa legal, é que isso fica transparente… o Linux vai enxergar o diretório remoto como se fosse um diretório da máquina local!

/opt – Normalmente, é utilizado por programas que foram instalados com o sistema já em funcionamento, e que precisam de uma quantidade de uma espaço maior para sua instalação como é o caso do OpenOffice e o KDE.

/srv – Diretório para dados de serviços fornecidos pelo sistema e, cuja aplicação é de alcance geral, ou seja, os dados não são específicos de um usuário. Por exemplo, /srv/www (servidor web), /srv/ftp (servidor ftp), etc.

/var – O diretório /var contém arquivos de dados variáveis. Por padrão, os programas que geram um arquivo de registro para consulta, mais conhecido como log, ficam armazenados nesse diretório. Além do log, os arquivos que estão aguardando liberação, ficam localizados em /var/spool. Os principais arquivos que se utilizam do diretório /var, são as mensagens de e-mail e os arquivos a serem impressos.

/sbin – O diretório /sbin guarda os comandos utilizados para inicializar, reparar, restaurar e/ou recuperar o sistema. Isso quer dizer que esse diretório também é de comandos essenciais, mas os mesmos são utilizados apenas pelo usuário root. Entre os comandos estão o halt, ifconfig, init, iptables e outros.

/tmp – Utilizado para armazenar arquivos temporários. Por exemplo, guardar pequenas informações que precisam estar em algum lugar até que a operação seja completada, como é o caso de um download. Enquanto não for concluído, o arquivo fica registrado em /tmp, e, assim que é finalizado, é encaminhado para o local correto. Observação: no Debian, esse diretório é limpo a cada boot, então não é uma boa idéia guardar arquivos importantes no /tmp!

/usr – Armazena dados compartilhados, e é montado como somente leitura. É considerado um dos mais importantes de todo o sistema. É nele que todos os programas que não foram instalados durante a instalação inicial (hmmm frase estranha! :P) do Linux são instalados. Um diretório /usr requer a existência dos seguintes sub-diretórios:

* /usr/include: arquivos de cabeçalho utilizados por programas C/C++.
* /usr/lib: bibliotecas.
* /usr/local: uso do administrador de sistemas para instalação local e/ou pós-instalação de software.
* /usr/sbin: binários, não essenciais, do sistema.
* /usr/share: dados independentes de arquitetura (ex.: páginas de manual, documentação, etc).
* /usr/bin: programas de usuários, não essenciais para a inicialização do sistema.

Diretórios Opcionais

Surpreso? Sim… temos dentro da estrutura do GNU/Linux, alguns diretórios que vamos encontrar em praticamente todas as distribuições, porém são opcionais. Isso quer dizer que eles podem não existir dentro da estrutura, ou ainda, podem ser renomeados.

/home – É o diretório “lar doce lar” dos usuários. Todo usuário no GNU/Linux, tem um diretório para chamar de seu. Sempre que um novo usuários é criado no sistema, um diretório como mesmo nome é criado no /home. Assim, o sistema fica organizado, além de evitar que usuários escrevam em diretórios que não sejam o seu.

/root – Diretório pessoal do “poderoso chefão” do sistema. O root é o administrador do sistema, e tem poderes para: configurar interfaces de rede, manipular usuários e grupos, alterar a prioridades de processos, entre outros.

/sys – O diretório /sys, está presente a partir do kernel 2.6. Nesse diretório estão os módulos para equipamentos USB. Como ele é montado automaticamente no sistema, basta conectar o equipamento para ser reconhecido.

Diretório Recomendado

/proc – O /proc é um diretório virtual, mantido pelo kernel onde encontramos a configuração atual do sistema, tais como: modelo da cpu, quantidade de memória, dispositivos já montados, interrupções, etc. Aqui, temos subdiretórios, com o nome que corresponde ao PID (Process ID – Identificação do Processo) de cada processo; dentro deles, vamos encontrar diversos arquivos texto, que representam uma importante função do programa em execução.

Para saber mais…

O que foi colocado aqui é uma breve descrição da estrutura de diretórios do Linux! Achei um link super legal com um resumo do padrão da Estrutura de Diretórios no GNU/Linux[3] que vale a pena conferir!

[1] http://www.pathname.com/fhs/

[2] http://www.freestandards.org/en/LSB

[3] http://www.angusyoung.org/filesystem-hierarchy-standard/