Professional Documents
Culture Documents
Aula 05 Estrutura de diretórios
1.0 – Histórico
Quando do desenvolvimento do Linux, Linus Torvalds tinha a pretensão de evitar
problemas encontrados durante seu uso do Minix. Dessa maneira, o sistema de arquivos adotado
no Linux baseiase numa camada virtual (VFS – Virtual FileSystem), construída para suportar
múltiplos sistemas de arquivos. Essa estrutura permitiu ao Linux um gerenciamento poderoso
desse recurso.
Um problema prático existente no início do desenvolvimento do Linux era referente ao uso
do sistema de arquivos. Dessa maneira, administradores e distribuições nem sempre utilizavam o
mesmo diretório para colocar um dado arquivo. Isso gerava um esforço muito grande e adicional na
administração dos sistemas, dada a confusão criada.
Em agosto de 1.993, Olaf Kirsh, um programador postou uma mensagem em um dos
grupos de discussão sobre Linux, discutindo a possibilidade de criação de um padrão para a
estrutura de diretórios.
Em fevereiro de 1.994, a primeira versão desse padrão foi disponibilizado sob o nome de
FSSTND (File System StaNDard). Duas outras versões foram disponibilizadas em 1.995, incluindo
se a FSSTND 1.2, a última versão disponibilizada. A maior limitação desse padrão é que ele
aplicavase somente ao Linux e dificultava o uso de ambientes mistos, com vários sistemas
operacionais.
Esse problema levou a comunidade a avançar da FSSTND em direção a um novo padrão.
Assim, um esforço para criar um padrão hierárquico do sistema de arquivos que pudesse suportar a
outros sistemas baseados no UNIX foi iniciado em 1.995, com a ajuda de desenvolvedores do BSD.
O nome do padrão foi alterado para FileSystem Hierarcy Standard – FHS, que poderia ser aplicado
a qualquer sistema de arquivos.
que utilizasse uma estrutura hierárquica (árvores de diretórios);
que controlasse dados de arquivos de forma consistente;
que incluísse mecanismos de proteção de dados;
Dessa maneira, o FHS inicialmente estabelece uma distinção entre dados compartilháveis e
não compartilháveis e entre dados estáticos e variáveis:
Dados compartilháveis são aqueles podem ser distribuídos entre diferentes máquinas; não
compartilháveis são aqueles específicos a um dado sistema. Por exemplo, os diretórios pessoais
dos usuários são dados compartilháveis, mas arquivos de dispositivos não são.
2
Dados estáticos incluem binários, bibliotecas e documentação, e tudo aquilo que não é alterado
sem intervenção do administrador; dados variáveis incluem tudo que pode ser modificado sem a
intervenção do administrador do sistema.
O objetivo dessa distinção é fazer com que o FHS facilite o compartilhamento de
informações em um ambiente distribuído. Dessa maneira, dados não compartilháveis devem estar
em árvores de diretórios próprias. Ainda, dados estáticos podem ser montados somente por leitura,
aumentando a segurança do sistema e até mesmo o uso de mídia estática (CDROM) como parte
estrutural do sistema de arquivos.
1.1 – Árvore de diretórios no Linux
A Figura a seguir apresenta a árvore raiz de diretórios proposta no FHS. Itens em itálico
não precisam existir na árvore, mas se existirem devem estar no diretório raiz. Obviamente, cada
entrada na árvore de diretórios descrita na Figura pode ter sob si uma subárvore própria e, para
algumas dessas entradas, freqüentemente isso ocorre. Observe que algumas dessas entradas
podem ser links para outros diretórios. Seguese uma descrição mais detalhada dessas entradas
(obs: os diretórios /usr e /var, por serem mais complexos, serão tratados em seções próprias):
1.2 O diretório /usr
Depois do diretório raiz, o diretório /usr é a maior seção utilizada no sistema de arquivos.
Esse diretório contém dados compartilháveis e podem ser montado apenas para leitura. Isso o
torna altamente capacitado para compartilhamento em rede com sistemas compatíveis com FHS.
A Figura 3.2 apresenta a árvore de diretórios /usr proposta no FHS. Novamente, itens em itálico
não precisam existir na árvore, mas se existirem devem estar nesse diretório.
Os diretórios /usr/bin e /usr/sbin têm objetivos semelhantes aos diretórios /bin e /sbin,
respectivamente. A única diferença é que os comandos disponibilizados em /usr/bin e /usr/sbin são
considerados como não essenciais à inicialização, manutenção e recuperação do sistema. Isso
ocorre porque, como o diretório /usr pode ser montado via rede, ele não pode conter aplicativos e
arquivos desse perfil.
O diretório /usr/lib inclui arquivos objetos, bibliotecas e comandos binários que não são
disponibilizados para serem executados diretamente por usuários e shell scripts. As DLLs de
5
suporte aos aplicativos existentes em /usr/bin e /usr/sbin, que já não estiverem em /lib, são
colocadas em /usr/lib. Os arquivos de cabeçalhos C/C++ são colocados no diretório /usr/include ou
um de seus subdiretórios. Códigofonte de aplicativos nãolocais utilizam o diretório /usr/src como
árvore raiz (incluindo o kernel).
Em /usr/X11R6, encontramse os arquivos relacionados ao sistema gráfico do UNIX, o X
Window System, em sua versão 11, release 6. Para facilitar o acesso do usuário, os seguintes links
devem existir:
/usr/bin/X11 > /usr/X11R6/bin
/usr/lib/X11 > /usr/X11R6/lib/X11
/usr/include/X11 > /usr/X11R6/include/X11
O objetivo da existência desses links é facilitar a transição entre releases do X11. Observe
que os arquivos de configuração do X11 devem ficar no diretório /etc/X11. O objetivo do diretório
/usr/share é servir como um repositório de dados readonly independentes de arquitetura. Assim,
nesse diretório ficam as páginas de manuais (em /usr/share/man), as páginas de informações (em /
usr/share/info). No subdiretório /usr/share/locale, encontramse os arquivos de localização
(internacionalização do sistema). Alguns ícones podem ser encontrados em /usr/share/pixmaps
ou /usr/share/icons. O diretório /usr/share/fonts é um dos preferidos para instalação de fontes em
diversos formatos (ex.: TrueType, Type 1 ou Type 3).
A intenção do diretório /usr/local é funcionar como uma hierarquia para instalação
localizada de software. O objetivo de utilizar /usr/local/bin para instalação de aplicativos locais é
evitar substituir ou atualizar, inadvertidamente, aplicativos em /usr/bin. Entre os subdiretórios de
/usr/local, encontramse: /usr/local/bin, /usr/local/sbin, /usr/local/man, /usr/local/share,
/usr/local/include e /usr/local/lib.
1.3 O diretório /var
O diretório /var contém os dados variáveis do sistema, como cache de aplicações,
arquivos de spool e informações de registros (logs). Ele foi pensado dessa maneira para que o
diretório /usr pudesse ser montado somente para leitura. Todo arquivo que necessita ser escrito
durante operação do sistema, excluíndose instalação e manutenção de software. Em servidores de
rede, é desejável que /var esteja em uma partição separada. A Figura a seguir apresenta a
árvore de diretórios /var proposta no FHS. Como atividade, é deixada tarefa de descobrir para
que servem esses diretórios.
6
1.4 – Outros diretórios
Em uma seção específica ao Linux, o FHS apresenta detalhes desse padrão aplicáveis
somente a esse sistema operacional. A observação mais pertinente é a existência do diretório
/proc. Esse diretório é um sistema de arquivos virtual que armazena informações sobre o kernel
os processos em execução e o sistema como um todo. Assim, por exemplo, o arquivo
/proc/kcore representa a memória do computador em questão. O arquivo /proc/partitions
apresenta detalhes sobre as partições dos discos rígidos disponíveis. As interrupções (IRQs) do
sistema podem ser visualizadas em /proc/interrupts e informações sobre os dispositivos PCI
ou USB podem ser encontrados, respectivamente, em /proc/pci e /proc/bus/usb/devices.
Dessa maneira, uma visita aos arquivos desse diretório podem facilitar, e muito, a instalação de
dispositivos de hardware em Linux.
Ainda, caso o sistema de arquivos usado seja ext2 ou ext3, então, para cada partição existente,
será criado um diretório /lost+found. Esse diretório, “achados e perdidos”, é utilizado pelo fsck,
um utilitário de checagem do sistema de arquivos que ali aloca os blocos de arquivos “perdidos”, ou
seja, inodes sem nomes de arquivos.