Depois de ficar sem postar por algum tempo, aqui estou lançando mais um post sobre Linux, desta vez é sobre um assunto básico que é estrutura de diretórios, mas tendo em vista de que este é um dos “problemas” que a grande maioria dos usuários enfrentam quando chegam ao sistema do pinguim, servirá de muita ajuda aos mesmos.

Os arquivos e diretórios do Linux, assim como a maioria dos sistemas, possuem uma estrutura de árvore para organizar hierarquicamente seus arquivos e diretórios. No Linux e outros sistemas que utilizam o padrão POSIX (interface portável entre sistemas operacionais) não existem letras para representar as unidades lógicas (partições) do HD como no Windows.

O Linux possui uma estrutura de diretórios conhecida como FHS (File Hierarquical System) onde qualquer partição lógica de armazenamento se localiza abaixo do nó principal denominado diretório raiz “/” ou no próprio raiz.

O diretório raiz “/”

Este diretório é o que se localiza no topo da estrutura de diretórios. Como mencionado acima, toda e qualquer unidade lógica que mapeia um dispositivo de armazenamento ou parte dele será montada no diretório raiz ou abaixo dele. Os diretórios que se localizam abaixo dele são padronizados para dividirem as funcionalidades do sistema. Por mais que se consiga criar diretórios abaixo dele como super usuário (Root), não é aconselhável pois isso pode causar redundância e confusão para o administrador do sistema.

O diretório “/home”

Abaixo deste diretório localizam-se os diretórios dos usuários do sistema, de certa forma podemos compara-lo com a pasta “c:\documents and settings” do XP ou “c:\users” no Vista e Windows Seven. No Linux temos como configurar uma partição (ou HD) específico para esta pasta, isto é uma boa prática em servidores, pois juntamente com o Backup conseguimos assegurar a integridade dos dados.

O diretório “/root”

Este é o “home” do superusuário (root) padrão do sistema. Tem como finalidade armazenar arquivos que o administrador ache necessário (muitas vezes não é utilizado).

O diretório “/proc”

Este diretório tem um detalhe interessante, ele não esta alocado em nenhuma unidade de memória secundária (HD), pois toda sua estrutura esta montada na memória principal (RAM). Seus subdiretórios são identificados principalmente por números, que dizem respeito ao PID (Process Identification); além disso estão armazenadas informações de configuração do sistema, rede, hardware e do próprio kernel. Caso você salve algo neste diretório, assim que reiniciar o micro isto é apagado devido a memória RAM ser volátil.

O diretório “/var”

Neste diretório ficam os arquivos variáveis do sistema, ou seja, arquivos que são modificados durante a execução de vários processos no sistema, incluindo fila de impressão (spool), e-mail, proxy, etc.

O diretório “/var/spool”

Este diretório possui subdiretórios que dizem respeito a sistemas que fazem o uso de filas, sejam elas de impressão, e-mail, tarefas agendadas. Daemons, como o crond, lpd e sendmail, geram subdiretórios para realizarem suas tarefas.

O diretório “/var/run”

Este diretório possui subdiretórios e arquivos com informações sobre os processos do sistema operacional desde que o mesmo foi iniciado.

O diretório “/var/log”

Neste diretório ficam os principais arquivos de log do sistema, que podem ser gerenciados pelo daemon syslogd. Muitos aplicativos geram seus log’s dentro deste diretório.

O diretório “/var/lib”

Geralmente (pelo que constatei) este diretório armazena bases de dados de gerenciadores de pacotes de instalação. Além disso banco de dados como o PostgreSQL e outros utilizam este caminho. Os arquivos contidos neste caminho não devem ser manipulados diretamente e sim através de seus respectivos sistemas.

O diretório “/dev”

Este diretório contém os arquivos que representam os dispositivos físicos, arquivo de bloco e caractere. Todo hardware é suportado pelo Linux e outros sistemas do padrão POSIX, como disco rígido (HD), placas de rede, portas seriais, paralelas, usb e muitos outros. Nestes arquivos se conectam os drivers (módulos) de cada dispositivo físico, com suas implementações específicas. Desta maneira a interface com os aplicativos do sistema fica de forma transparente.

O diretório “/etc”

Este diretório possui arquivos de configuração do sistema operacional e de vários sistemas instalado no mesmo. Extremamente importantes estes arquivos devem ser manipulados com cautela. Outra característica deste diretório é a de possuir somente arquivos texto. Não é recomendável colocar arquivos binários abaixo do mesmo.

O diretório “/bin”

Este diretório contém os aplicativos e utilitários essenciais para o funcionamento do sistema, muitos destes arquivos são carregados na inicialização do sistema, quando ainda não há estrutura de diretórios montada. Os comandos mais básicos do sistema também se localizam neste diretório. Ao contrário do “/etc”, tradicionalmente este diretório possui apenas arquivos binários, embora possa possuir um ou mais shell script’s.

O diretório “/sbin”

Este diretório possui programas e sistemas reservados para o administrador do sistema, pois são programas que dizem respeito a configuração do sistema operacional ou a configuração de dispositivos físicos. Geralmente são armazenados utilitários, como o fdisk, shutdown, iptables (firewall), dos quais a maioria é de uso do superusuário.

O diretório “/lib”

Possui as bibliotecas compartilhadas por vários aplicativos e utilitários do sistema, os famosos shared objects. Estas bibliotecas são essenciais para a inicialização e bom funcionamento básico do sistema operacional. É aqui que se localiza a “libc”, que possui rotinas utilizadas por comandos básicos como: ls, halt, co, mv, rm e utilitários como o shell, o compilador gcc, o linqueditor ld entre outros.

O diretório “/boot”

Contém o Kernel, núcleo do sistema, além dos arquivos necessários para realizar o processo de boot, ou seja, para que o sistema possa ser iniciado assumindo o controle do hardware. Neste diretório também encontramos o gerenciador de boot utilizado, grub por exemplo. Para entender melhor o que é o Kernel, acesse o nosso resumo sobre o mesmo.

O diretório “/usr”

Possui em sua estrutura praticamente todos os aplicativos, boa parte dos utilitários e shared objects, é como se fosse um diretório raiz abaixo do verdadeiro raiz, pois abaixo dele estão diretórios como /usr/lib, usr/sbin, /usr/bin, ou seja, diretórios que existem abaixo da raiz. Mas estes diretórios possuem arquivos que dizem respeito às aplicações contidas no /usr/bin e /usr/sbin. Temos por exemplo o compilador gcc e o sistema de interface gráfica conhecido por servidor X localizados abaixo deste diretório.

O diretório “/usr/bin”

Neste caminho estão os arquivos binários e programas. A maior parte das aplicações e utilitários do sistema operacional se encontra neste caminho, principalmente as aplicações de interface gráfica como navegadores web, editores de texto, entre outros programas gráficos.

O diretório “/usr/include”

Aqui se encontram quase todos os arquivos de cabeçalho para a instalação de programas que se encontram em forma de código fonte (arquivos da linguagem de programação C, arquivos “.hheaders). Pois o principal compilador do sistema GCC ou CC no caso de outras distribuições da família POSIX, faz uso destes arquivos que contém as declarações de constantes, variáveis, estruturas e funções contidas em arquivos objeto ou bibliotecas shared objects.

O diretório “/usr/lib”

Bibliotecas, shared objects, que não serão utilizadas por shell script são colocadas neste caminho (não é regra e sim uma proposta). Aqui se localizam bibliotecas que serão utilizadas por aplicações, principalmente as que não são utilizadas como comandos de prompt de shell. Muitos aplicativos mantêm subdiretórios com os seus nomes, nestes diretórios se localizam bibliotecas específicas para o funcionamento de tal aplicação.

O diretório “/usr/local”

Este caminho é reservado para softwares de terceiros, ou seja, que não são distribuidos pela distribuidora do sistema operacional. Os scripts de compilação de programas fonte geralmente apontam para este caminho como sendo o caminho padrão de instalação. Nele são colocados subdiretórios com o nome do sistema que está instalado. Sistemas servidores como o Apache, PostGreeSql e outros são colocados neste caminho quando são instalados por meio de pacotes de terceiros. Neste caminho também se encontram alguns dos diretórios encontrados em seu diretório pai, o ‘/usr‘, como o ‘/bin‘ por exemplo, que guarda comandos de shell de terceiros.

O diretório “/usr/sbin”

Aqui se localizam programas e sistemas não essenciais que realizam alguns tipos de configuração em algum aplicativo no sistema operacional. Tais programas são reservados ao administrador do sistema ou para o administrador de um grupo de usuários pertencentes a um sistema específico que esteja instalado no sistema operacional.

Um exemplo disto vimos aqui mesmo no blog com o post sobre a instalação da broadcom bcm43xx no suse, apenas rodando o binário

user@opensuse:~$ sudo /usr/sbin/install_bcm43xx_firmware

O diretório “/usr/src”

Aqui são colocados códigos fonte de programas fornecidos pela distribuidora do sistema operacional, mas os de terceiros também podem ser colocados neste local. Os sistemas gerenciadores de pacores e script’s de intalação geralmente colocam os fontes em subdiretórios com o nome do sistema neste caminho. Mas tal ação só é tomada se o pacote de intalação disponibilitar tal opção e se o administrador que o instala optar por fazê-lo.

O diretório “/tmp”

Possui arquivos temporários que são utilizados por processos que os criaram por alguma necessidade momentânea para a execução de uma determinada operação. Os arquivos presentes neste diretório podem ser apagados a qualquer momento, geralmente quando não são mais necessários.

O diretório “/mnt”

Este diretório sugere que dispositivos de unidades removíveis como disquetes, fitas magnéticas e CD-Rom sejam montados em diretórios abaixo deste. Pois na instalação do sistema operacional será verificado quais dispositivos físicos removíveis existem no computador a fim de configurá-los e criar subdiretórios neste caminho. Na maioria das distribuições existe o diretório “/media” que tem a mesma função, e dependendo da interface gráfica utilizada os dispositivos hot plug são montados automaticamente neste diretório.

O diretório “/opt”

Programas adicionais são instalados abaixo deste diretório, principalmente programas de terceiros, ou seja, programas que não tem vínculo direto com a distribuidora do sistema operacional. Esse caminho pode possuir diversas outras funcionalidades como guardar backups e documentos de texto, isto vai depender da opção do administrador do sistema.

Enfim terminei, demorei algumas horas planejando este post, mas muitos dias para digitá-lo devido a falta de tempo. Espero que possa de certa forma contribuir com o aprendizado dos leitores do mesmo. Caso tenham lido e gostado comente, suas sugestões para o próximo post serão bem vindas.

Um abraço e que a força esteja com vocês.