logo titulo
anterior indice proximo

Hierarquia de Arquivos e Diretórios


A árvore de diretórios do Linux segue um padrão estabelecido pelo unix durante a maior parte de sua existência, mas controlada por um conjunto de regras estabelecidas pelo Linux Filesystem Standard, ou FSSTND, que atualmente se encontra na versão 2.0.

O FSSTND tenta seguir a tradição Unix, tornando o Linux semelhante à grande maioria dos sistemas Unix presentes. Seu particionamento é escolhido em ramificações menores de forma a permitir o uso de vários dispositivos físicos em cada ramo principal, ou mesmo tipos de dispositivos diferentes como CDRoms e redes (via NFS). Partes comuns, por exemplo, podem ser compartilhadas via NFS (Networking File System) entre várias máquinas, mantendo uma parte independente em cada máquina.
Porque estudar primeiro a organização dos arquivos? Conhecendo os arquivos (dados), fica mais fácil entender o que as aplicações e ferramentas devem fazer, e o que já existe à disposição destes programas. O administrador de sistemas muitas vezes é levado a editar (com um editor de textos convencional) muitos arquivos dos discutidos aqui, pois nem sempre as ferramentas conseguem automatizar as peculiaridades de qualquer instalação quando tratamos de um sistema tão complexo quanto o Linux o é. Mesmo assim, o nível de documentação desses arquivos possibilitam ao administrador um total controle sobre a configuração do sistema, com maior adequação ao seu problema particular.

hierarquia de diretórios

Uma breve explanação dos diretórios mais importantes:

raiz (root, /)
é específico para cada máquina, geralmente armazenado localmente, mas também em rede ou ramdisk (por exemplo, quando instalamos o Linux), e deve conter os arquivos para a carga do sistema, de forma a permitir a montagem dos outros sistemas de arquivos. Deverá conter também as ferramentas necessárias para recuperar backups, quando "logamos" no sistema na forma de usuários único (single user).
/usr
contém comandos, bibliotecas, manpages (páginas de manual), e outros arquivos estáveis, isto é, que não precisem ser modificados durante a operação normal do sistema. A idéia desta restrição, é permitir os arquivos serem compartilhados via rede com outras máquinas. Quando este diretório é montado (caso esteja em um disco ou partição separado dos demais), ele poderá inclusive ser montado read-only, para reforçar este requisito. Evidentemente, isto não se aplica quando programas novos estão sendo instalados no sistema.
/var
contém em geral os arquivos que sofrem modificações durante a sessão, tais como logfiles, arquivos de spooling, manpages formatadas (o que acontece logo após cada man que executamos e a página não foi ainda consultada), bem como arquivos temporários. O uso tradicional de /var abaixo de /usr, torna impossível a montagem de /usr como read-only, e deve ser evitado. Uma solução é cirar um link simbólico de /var para /usr/var.[14]
/home
contém os diretórios dos usuários normais (o superusuário utiliza o diretório /root na maioria dos sistemas). De certa forma, podemos dizer que aí se localizam todos os dados reais do sistema. Quando este diretório se torna excessivamente grande, ele pode ser quebrado em vários, inroduzindo uma camada de nomes adicional (grupos de usuários), como por exemplo: /home/suporte, /home/clientes.
/bin
contém programas (executáveis) que são necessário durante a carga do sistema (boot time).
/dev
dispositivos (devices), não arquivos de dados no sentido explícito, mas que podem ser acessados, confome o caso por programas que usualmente editam, filtram ou processam de maneira geral arquivos convencionais. Todo cuidado com estes arquivos é pouco. Por exemplo, a cópia de um texto para um dispositivo como /dev/hda1 (supondo que este seja o seu disco rígido), pode deixar o sistema inoperante, reescrevendo sobre a partição ext2 do Linux. Evidentemente, para fazer isso, voce precisará ser um usuário privilegiado (root), portanto muito cuidado quando voce for o root!
/mnt

é um diretório com pontos para montagem de dispositivos de bloco, como discos rígidos adicionais, disquetes, cdroms, etc.

/proc
na realidade, um diretório virtual, mantido pelo kernel, mas de extrema utilidade. Nele encontramos "arquivos" com a configuração atual do sistema, dados estatísticos, dispositivos já montados, interrupções (e quantas vezes ocorreram desde o último boot), endereços e estados das portas físicas, dados sobre as redes, etc. Além disso, um subdiretório com o nome que corresponde ao PID (process id) de cada processo correntemente existente na máquina, aonde se encontram informações detalhadas sobre o estado do processo, linha de comando, ambiente (environment), etc.
/tmp
local destinado aos arquivos temporários. Observe a duplicidade aparente deste diretório com o /var. Na realidade o /tmp não necessariamente precisa ser salvo entre uma sessão e outra (após um boot), enquanto que o /var normalmente fica com os dados salvos. Programas executados após o boot do sistema, devem preferencialmente usar o diretório /var/tmp, que provavelmente terá mais espaço disponível, mas nem sempre essa regra é seguida.
/sbin
executáveis e ferramentas para a administração do sistema. Este é um dos diretórios que é disponível no PATH durante a execução do processo init.
/etc
este diretório é um dos mais importantes. Contém uma miscelânea de dados de configuração, notadamente no subdiretório /etc/rc.d, aonde estão os scripts de inicialização do sistema em seus vários níveis[15], ademais contém os arquivos fstab (tabela de filesystems), inittab (configuração da inicialização do sistema para cada nível), profile (configuração default para todos os logins), printcap (configuração do spooler de impressão), e um número considerável de arquivos para configuração de rede e outros aspectos do sistema, incluindo o X11.
/lost+found
um diretório aonde são colocados os arquivos "recuperados" pelo utilitário fsck, isto é clusters (blocos) orfãos no disco ou que pertenciam a arquivos danificados.
/lib
bibliotecas do sistema, compartilhadas, também os módulos do kernel que são carregados via modprobe ou insmod.
/usr/local
apesar de ser um subdiretório de /usr, este diretório é importante porque é aonde residem os programas instalados após o "pacote básico" do sistema operacional, isto é, após a distribuicão Linux é instalada no seu computador. Alguns programas podem ser instalados em /usr/local numa distribuição e em /usr numa outra, o que não importa muito, portanto confira os dois locais para verificar aonde o programa desejado está instalado. (o PATH deve conter tanto /usr/bin como /usr/local/bin)
/var/spool
outro diretório importante, aonde ficam os e-mails de todos os usuários, arquivos submetidos à impressão, faxes recebidos, bem como tarefas programadas para execução em um determinado instante (futuro).

Quais diretórios podem ser compartilhados?


Uma confusão muito grande se encontra entre os diretórios /var e /usr. O primeiro é destinado aos arquivos que poderão ser modificados livremente durante uma sessão do computador aonde está instalado, ou seja, normalmente ele não deverá ser compartilhado. O /usr por outro lado, é montado read-only, ou seja sem permissão para gravação. O porquê disso é a necessidade de compartilhamento da massa de programas, usualmente vários gigabytes, entre vários sistemas numa rede local, exportando o diretório /usr através de um filesystem nfs (network file system). Historicamente, foram colocados no diretório /usr arquivos que poderiam ser atualizados dinâmicamente. Para corrigir este problema, esses diretórios foram movidos para a hierarquia /var e colocados no seu local original um link simbólico para a localização definitiva. Instalações simplificadas do Linux, adicionalmente, contam com o /usr residindo em um CDROM, o que o torna forçosamente read-only.

O diretório /var pode também ser compartilhado, mas somente em parte, devido ao seu conteúdo. Por exemplo, /var/mail é um diretório variável, mas como cada máquina tem seus usuários (supostamente com logins diferentes), este diretório pode ser compartilhado entre várias máquinas, o mesmo acontecendo com /var/spool/news. Entretanto, /var/lock não pode ser compartilhado porque dois programas em máquinas diferentes poderiam criar simultaneamente duas "travas" com o mesmo nome.
Devemos notar que o compartilhamento não significa deixar a hierarquia read-only, mas tão somente indica se o mesmo dispositivo físico pode ser dividido (utilizado simultaneamente, de forma compartilhada) por várias máquina numa rede.
A utilização de toda a hierarquiva /usr montada read-only, todavia, nem sempre é utilizada, sendo geralmente montado o /usr como read-write-execute, portanto, só em casos especiais devemos cuidar dos detalhes discutidos acima.

Alguns arquivos importantes do /etc


O diretório /etc, como já mencionamos anteriormente, possui arquivos relacionados com a configuração dos vários aspectos do sistema. Muitos programas não-padronizados pelas distribuições de Linux também se utilizam desse diretório para colocar seus arquivos de configuração global. Configurações modificáveis por usuário, residem frequentemente no diretório /home/<usuário>/, isto é no diretório "home" de cada um, variável com o nome de login de cada usuário.

passwd

O arquivo passwd é o banco de dados de usuários que podem logar no sistema. Tem um formato de vários campos, separados pelo caracter ":" (dois pontos) e sempre na mesma ordem:

nome de login do usuário, senha (criptografada, evidentemente), id do usuário (identificação única, semelhante a um número de carteira de identidade), grupo primário deste usuário (o usuário poderá participar de vários grupos), nome completo (nome normal, sem ser de login), diretório home deste usuário, e shell inicial. Um exemplo mostra melhor como são estes valores na prática:

rildo:gfTMTkLpLeupE:500:100:rildo:/home/rildo:/bin/bash

Quando estamos utilizando shadow password (um pacote que evita o acesso de hackers ao conteúdo das senhas, mesmo criptografadas, para dificultar a tentativa de quebra de senha), o segundo campo é substituido por um "*" e a senha é armazenada em outro arquivo, normalmente inacessível.

fstab

O arquivo fstab contém uma tabela de parâmetros para a montagem de discos (rígidos, cdrom, disquetes, nfs, e outros dispositivos em bloco) de forma a ser necessário usar o programa mount fornecendo apenas o nome do volume ou o diretório default de montagem. Também é útil para determinar quais filesystems serão montados automaticamente durante o boot, ou os que o daemon [16] mountd (montador automático) deverá montar quando os seus diretórios são visitados. O seu formato é em linhas contendo (na ordem): dispositivo, diretório, tipo, opcões.

O dispositivo é algum dos dispositivos de bloco do /dev/ (/dev/hda1, /dev/fd0, /dev/hdd3, etc). Opcionalmente, para dispositivos remotos, via nfs, o dispositivo toma a forma de servidor:diretório (servidor e diretório separado por ":"). O diretório dado no fstab, é o local aonde o filesystem será montado. O tipo é o tipo do filesystem: ext2, msdos, vfat, minix, iso9660, nfs, etc. As opcões são várias, separadas por vírgulas: ro (read-only), user (acessível por um usuário normal), noauto (não monta automaticamente na carga do sistema). Para todas as demais, consulte a manpage do fstab(8).

group

Define os grupos aos quais os usuários pertencem. Seu conteúdo são linhas da forma:
group_name:passwd:GID:user_list
onde group_name é o nome do grupo. Um usuário pode pertencer a qualquer número de grupos, e herdará todas as permissões de acesso a arquivos desses grupos. Opcionalmente um grupo pode ter uma senha (campo passwd). O GID (group id) é um código, como o user_id (no arquivo passwd), mas relativo ao grupo. Finalmente, user_list é a lista (separada por vírgulas) de todos os usuários que pertencem a este grupo.

inittab

Configuração da partida dos diversos processos (a maioria gerenciadores de login de terminais), que será discutida em um capítulo adiante.

issue

Contém a mesnagem de benvindo ao sistema, ou outras informações apresentadas ao usuário antes do seu login.

fdprm

Parâmetros relativos aos formatos dos discos flexíveis.

motd

Mensagem do dia (abreviatura de message of the day), apresentada ao usuário logo depois do seu login.

magic

"Assinaturas" de arquivos, ou seja, primeiros bytes contidos em um arquivo, usualmente suficientes para determinar o formato dos dados desses arquivos. É usado principalmente pelo programa file, que gera informações sobre os arquivos desejados (determina o tipo de arquivo).

mtab

Tabela dos dispositivos correntemente montados. O seu formato é semelhante ao de fstab. Note que este arquivo é modificado dinamicamente, à medida que montamos ou desmontamos discos no sistema.

shadow

Arquivo usado para as senhas, quando a opção shadow password está instalada.

printcap

Banco de dados de capabilidades das impressoras. Será documentado adiante, quando veremos as configurações de impressoras no Linux.

securetty

Relação de terminais que estão permitidos a logar como superusuário (root). Indica as linhas que são seguras, isto é, não estão conectadas a um modem, por exemplo, o que deixaria o sistema vulnerável a ataques externos. O seu formato é simplesmente uma linha com cada nome de dispositivo seguro.

shells

Relação de shells consideradas seguras, para serem usadas durante um login. Eventualmente, outros shells poderão ser usados, mas como um programa normal, não durante o login dos usuários. A finalidade é evitar shells que, devido a uma implementação defeituosa, admitam brechas que comprometam a segurança do sistema.

termcap

Banco de dados com as capabilidades dos terminais. Atualmente o banco de dados mais usado para esse fim é o terminfo. Ambos serão discutidos no capítulo referente a terminais. Os dados contidos nestes bancos de dados se referem a sequências de controle para realizar operações com a tela (limpeza, movimentação do cursor, etc), bem como quais sequências de eventos de teclas (keystrokes) são enviados quando uma tecla especial (por exemplo "Home", "Insert", "F1") é pressionada.

lilo.conf

Arquivo com a configuração do LILO (LInux LOader). Será discutido com detalhes no capítulo sobre a partida do sistema.

ld.so.conf

Arquivo com a configuração do daemon ld.so (carregador dinâmico de bibliotecas), contendo a relação de diretórios aonde as bibliotecas formato DLL ou ELF devem ser procuradas. O comando ldconfig -p mostra quais as bibliotecas que atualmente estão no cache (arquivo /etc/ld.so.cache), enquanto que ldconfig (sem o flag -p) faz uma restauração do cache.

syslog.conf

Configuração do daemon syslogd, que gera mensagens de log para vários arquivos, usualmente localizados no diretório /var/log.

outros arquivos requeridos

Além desses, outros arquivos são necessários para um sistema Linux obedecer ao Linux Filesystem Standard. Entre eles: hosts, exports, host.conf, hosts.allow, hosts.deny, hosts.lpd, hosts.equiv, inetd.conf, networks, resolv.conf. rpc, services, gateways, ftpusers. A maioria destes será tratada quando falarmos sobre a administração de redes

Outros requisitos do FSSTND


O Linux Filesystem Standard impõe algumas restrições na organização de arquivos e diretórios para um sistema Linux.
O diretório /etc, por exemplo, não deverá conter nenhum programa executável. Além disso, o subdiretório /etc/X11 é o local recomendado para a configuração do X no sistema, apesar de que usualmente temos o arquivo XF86Config (que controla a configuração do servidor X) diretamente no diretório /etc. Os binários outrara residentes em /etc devem ser movidos para /sbin.

Programas que criam arquivos temporários em /tmp, não devem assumir que estes programas continuam existindo na próxima invocação deste programa. Inclusive, o recomendado é que no instante de carga do sistema, o diretório /tmp seja limpo, removendo todos os arquivos neste.

Para uma visão mais abrangente sobre esse assunto, recomendamos a leitura do FSSTND versão 2.0.


rpragana
Mon Jan 4 18:24:18 EDT 1999