sábado, 3 de maio de 2008

Entendo o FHS: Filesystem Hierarchy Standard

Meu primeiro post de hoje será sobre o FHS ou Filesystem Hierarchy Standard, um assunto que também é bastante abordado nas provas da LPI (principalmente na prova 101). Mas afinal, o que seria isso? FHS é um padrão criado em 1996 como uma forma e padronizar a estrutura hierárquica das distribuições Unix-Like, de em foco um objetivo claros: o de possibilitar que usuários e programas possam prever a localização dos arquivos instalados.


Atualmente o FHS se encontra na versão 2.3, tendo sido atualizado pela última vez no dia 29 de janeiro de 2004 e tendo sido editado por Rusty Russell, Daniel Quinlan e Christopher Yeoh. Essa última versão, assim como as anteriores, se encontram disponíveis em http://www.pathname.com/fhs/

Tal documento não é uma matriz obrigatória que todos os sistemas operacionais devem seguir. A grande maioria deles segue o FHS em linhas gerais porém acabam, por apresentar pequenas variações. Outros, como por exemplo, o GoBoLinux, apresentam uma organização completamente distinta.

Os métodos seguidos pelo FHS para que os objetivos propostos possam ser alcançados consistem em básicamente 4 diretrizes:

Especificação do índice de cada área do sistema de arquivos;
Especificação do número mínimo de arquivos e diretórios;
Enumeração das exceções;
Enumeração dos casos de conflito e legado.

Abaixo vou descrever os principais diretório e expor uma breve explicação sobre cada um. Todo este material se encontra em concordância com a versão 2.3 da FHS e para maiores informações eu recomendo a você uma lida neste documento aqui.

/ ou root ou ainda partição raiz do sistema, será aquela onde se encontra o sistema operacional com os programas básicos necessários para iniciar (boot), restaurar, recuperar e reparar outros sistemas de arquivo.

/bin, armazena comandos básicos para a inicialização do sistema e de execução de scripts. Pode ser acessados por administradores e usuários comuns e deve estar localizado na partição raiz.

/boot, armazena todos os arquivos de configuração necessários para a inicialização (boot) do sistema, além disso é o local onde fica armazenado o kernel do sistema.

/dev, nesse diretório ficam os arquivos relativos aos dispositivos no computador.

/etc, armazena todos os arquivos de configuração

/home, armazena arquivos dos usuários assim como seus arquivos de configuração particulares.

/lib, armazena as bibliotecas compartilhadas básicas assim como os módulos do kernel.

/media, contém subdiretórios utilizados como ponto de montagem para disquetes, pendrivers, cds e outras partições. Substitui as montagens em diretórios diretamente em / e em /mnt, por questões de legado com programas que montagem dispositivos diretamente nesse diretório.

/mnt, serve como ponto de montagem temporário mantido apenas por legado.

/opt, é reservadp para a instalação de plugins e aplicativos específicos. Pode estar localizado em um file system diferente do root.

/sbin, é o diretório onde são armazenados programas essenciais para administração do sistema, o que inclui o processo de inicialização, restauração, recuperação e reparo do sistema, em conjunto com os programas de /bin, com a diferença de que esses programa são para uso exclusivo de administradores. Essa definição se estente a outros diretórios sbin como /usr/sbin e /usr/local/sbin.

/srv, armazenas dados relativos aos serviços providos pelo sistema. Exemplo em um servidor de páginas, as mesmas ficariam armazenadas em /srv/www/htdocs.

/tmp, diretório para armazenamento de dados temporários.

/var, serve para o armazenamento de dados variáveis como ubdiretórios de spool, arquivos de log, arquivos temporários e etc. A diferença básica entre o conteúdo do /var e do /tmp é a sua criticidade e tempo de vida, pois os arquivos de /var são importantes e apesar de possuir tempo de vida contado, esse normalmente é bem maior que os de /tmp. Pode estar localizado em um file system diferente do root.

/proc, é um diretório “virtual”, no sentido de que não ocupa espaço no sistema de arquivos. É utilizado pelo kernel do Linxu para exibir dados e informativos sobre o estado do sistema.

/usr, é um diretório compartilhável, porém como somente-leitura, que fornece uma segunda estrutura semelhante as estrutura principal, contendo um subdiretório bin, sbin, lib, include (utilizado para o armazenamento de headers), share (utilizado para o armazenamento de dados não binários), src (para o armazenamento de fontes) e local (que contém uma terceira hierarquia, semelhante a esta, para o armazenamento de programa não usados pelos demais computadores da rede). Pode estar localizado em um file system diferente do root.