Se você está acostumado a lidar com as configurações de sistemas Windows e vem tentando entender o funcionamento do Linux, certamente notou uma série de diferenças, não é mesmo? Isso porque a estrutura de diretórios do Linux tem a sua própria complexidade (no bom sentido da palavra).
Por exemplo, o sistema da Microsoft trabalha com a representação das partições em letras (C:, D:, e outras mais que o usuário consegue criar), e todas as pastas ficam atreladas a esses rótulos. Já os diretórios do Linux são organizados no padrão Filesystem Hierarchy Standard (FHS).
O padrão FHS agrega muito mais que organização ao sistema de diretórios. Ele garante ao Linux os recursos básicos de segurança típicos de sistemas de arquivos UNIX. Além disso, os arquivos são distinguidos entre:
- compartilháveis e não compartilháveis (shareable e unshareable); e
- variável e estático (variable e static).
Um arquivo “shareable” é aquele que pode ser armazenado em um host e usado em outros, ao contrário dos itens “unshareable”. Quanto a arquivos “statics”, eles não podem ser modificados sem a intervenção do administrador do sistema, diferentemente de arquivos “variable”.
Você compreenderá melhor essas diferenças ao longo deste artigo. Nele, vou apresentá-lo toda a estrutura de diretórios do Linux, incluindo alguns subdiretórios e arquivos relevantes. Pronto para começar? Então vamos lá!
1. / (/root)
A credencial root é concedida ao usuário que tem plena liberdade de acesso a qualquer arquivo ou diretório. Por isso, os conteúdos do sistema de arquivos root normalmente são utilizados para propósitos de manutenção, como: boot, recuperação, restauração e reparos.
Tamanha restrição a documentos atrelados a permissões root se dá, também, pela crucialidade deles para o funcionamento adequado do Linux. Se o usuário acaba deletando ou modificando algum dos arquivos, é muito provável que processos importantes sejam afetados (negativamente).
Não há como, por exemplo, o boot ser executado corretamente se o conjunto de arquivos não estiver integralmente presente no sistema. Isso porque eles são necessários para que os componentes sejam montados — diferentemente do que ocorre no Windows, as partições não são todas “descobertas” no Linux.
Porém o diretório root, simbolizado pela barra inclinada em sentido horário (“/”), acolhe uma série de outros diretórios voltados a outras finalidades. Algumas delas: configurações do sistema, bibliotecas, utilitários, armazenamento de arquivos pessoas etc.
Do próximo tópico em diante, vou mostrar quais são cada um deles, bem como as suas respectivas funções e exemplos de arquivos que eles guardam.
2. /bin
O diretório /bin é reservado para gravar comandos a serem utilizados por todos os usuários mais o administrador. Ao mesmo tempo, tais comandos são requisitados quando acessamos o sistema no modo single user — que não carrega interface gráfica — e, também, quando scripts os acionam indiretamente.
Que comandos são esses? Abaixo, fiz a relação de todos eles — alguns já foram abordados aqui no blog, inclusive.
- cat (concatena arquivos, permitindo que os una e exiba no formato padrão de tela e muito mais);
- chgrp (troca o proprietário de um arquivo de grupo);
- chmod (modifica permissões de acesso a um arquivo);
- chown (troca o proprietário e / ou o grupo ao qual pertence um arquivo);
- cp (copia arquivos e diretórios);
- date (imprime ou configura data e hora no sistema);
- dd (converte e copia um arquivo);
- df (reporta espaço utilizado no disco rígido);
- dmesg (imprime ou controla a mensagem de buffer do kernel);
- echo (exibe uma linha de texto);
- false (retorna status de saída mal sucedido; costuma ser usado para declarar expressões condicionais usando if e else);
- hostname (exibe ou configura o nome do sistema host);
- kill (emite sinais a processos; muito utilizado para encerrar programas);
- ln (cria links simbólicos entre arquivos);
- login (inicia uma sessão no sistema);
- ls (lista conteúdos de diretórios);
- mkdir (cria diretórios);
- mknod (cria arquivos de blocos ou caracteres especiais);
- more (percorre um texto);
- mount (realiza a montagem de arquivos de sistema / partições);
- mv (move e renomeia arquivos);
- ps (gera relatórios de status de processos);
- pwd (imprime na tela o nome do diretório atual);
- rm (remove arquivos e / ou diretórios);
- rmdir (remove diretórios vazios);
- sed (editor de fluxo de texto);
- sh (shell compatível com POSIX);
- stty (modifica e exibe configurações do terminal);
- su (executa a troca de usuários por meio de ID; ex: @user);
- sync (libera memória esvaziando dados do sistema de arquivos);
- true (retorna status de saída bem sucedido; costuma ser usado para declarar expressões condicionais usando if e else);
- unmount (realiza a desmontagem de sistemas de arquivos / partições); e
- uname (imprime na tela informações do sistema).
Além dos comandos básicos listados acima, o diretório /bin armazena outros comandos alternativos, como gzip, ping e tar.
3. /boot
De acordo com a documentação FHS 3.0, o diretório /boot tem a finalidade de armazenar todo e qualquer item necessário no processo de boot. A exceção, no caso, são os arquivos de configuração desnecessários e os map installers, usados na instalação de estágios primários da inicialização de sistemas.
O diretório é acessado antes mesmo de o kernel começar a executar programas de modo usuário. Portanto, o conteúdo voltado à organização do bootloader para inicializar um arquivo são transferidos ao /sbin, enquanto os arquivos de configuração dos gerenciadores de boot não requisitados no processo, no diretório /etc.
3.1 /boot/vmlinuz
Vmlinuz é o nome do arquivo bootável do kernel Linux. Ele fica localizado no diretório /boot (/boot/vmlinuz), que também pode ser um link simbólico para o executável do kernel; nesse caso, o arquivo original tem o nome mais detalhado, geralmente a versão específica dele (exemplo: vmlinuz-4.15.0.62).
4. /dev
Se você convive com dúvidas a respeito do diretório /dev, talvez o significado ajude a fixar a função dele: device files (arquivos de dispositivos). Ou seja, nele sã guardados arquivos gerados dos dispositivos de hardware, como processador, placa de vídeo, leitor de mídia etc.
Como são diversos os dispositivos acionados a partir do sistema operacional, é natural que o usuário, ao abrir o diretório /dev, se depare com uma série de arquivos e subdiretórios que, claro, estão ali por algum motivo. Exemplos:
- /dev/sda: são arquivos de configuração para as partições de disco padrão SCSI (Small Computer System Interface) ou SATA (Serial AT Attachment);
- /dev/hda(hdb): eles têm a função similar ao sda, porém com discos que funcionam com barramento IDE (Integrated Drive Electronics), sendo o hda referente ao master e o hdb, ao slave;
- /dev/sr0: corresponde ao leitor / gravador de CD / DVD;
- /dev/tty: tty é uma abreviação para teletype, sendo este um tipo de arquivo especial que está ligado ao terminal de controle do processo em execução;
- /dev/null: trata-se de um arquivo especial para redirecionamento de saídas que o usuário deseja descartar, também conhecido como “buraco negro do Linux”.
Depois disso, acredito que a função do diretório /dev tenha ficado bem clara. O que estiver relacionado com devices é guardado ali.
5. /etc
No /etc se encontram a maioria dos arquivos essenciais do sistema operacional, mais precisamente os arquivos de configuração usados para controlar uma operação ou programa. Isto é, scripts de inicialização, encerramento etc., porém voltados a aplicações.
O padrão FHS 3.0 determina que os arquivos pertencentes ao diretório /etc devem ser estáticos em vez de binários executáveis, pois ele é reservado a scripts. Além disso, é recomendado que os conteúdos sejam armazenados em subdiretórios em vez do /etc/ em si.
5.1 Estrutura de diretórios do Linux e subdiretórios de hierarquia /etc
Abaixo, a relação dos subdiretórios de hierarquia /etc:
- /etc/bashrc: padrões e aliases usados pelo bash shell;
- /etc/crontab: script do shell para rodar comandos específicos em um intervalo de tempo ajustado pelo usuário;
- /etc/exports: lista de controle de acesso a arquivos de sistema NFS (Network File System);
- /etc/fstab: informações acerca do controlador de disco rígido e pontos de montagem (mount);
- /etc/group: arquivo de grupos de usuários;
- /etc/grub.conf: arquivo de configuração do carregador de boot Grub;
- /etc/init.d: script de serviço de inicialização;
- /etc/lilo.conf: configuração do carregador de boot Lilo (se houver);
- /etc/hosts: informações estáticas sobre nomes de hosts;
- /etc/hosts.allow (e host.deny): lista de hosts permitidos (ou negados) a acessar serviços no computador local;
- /etc/inittab: arquivo de configuração para inicialização do sistema;
- /etc/issue: mensagem de pré-login e arquivo de identificação;
- /etc/modules.conf: arquivos de configuração para módulos do sistema operacional;
- /etc/motd: configurações padrão para Message of the Day, isto é, mensagens que os usuários recebem ao fazer login;
- /etc/mtab: mantém informações dinâmicas sobre arquivos de sistema (filesystems);
- /etc/passwd: contém backup de senhas dos usuários do sistema para fins de segurança (as informações são armazenadas em uma cópia de sombra);
- /etc/printcap: armazena informações sobre impressoras;
- /etc/profile: definições padrão do bash shell;
- /etc/profile.d: script de programas executado após o login do usuário;
- /etc/rc.d: guarda informações sobre scripts específicos para runlevels;
- /etc/rc.d/init.d: runlevel para script de inicialização do sistema operacional;
- /etc/resolv.conf: arquivo de configuração do resolver, que dá acesso ao DNS;
- /etc/securetty: acesso de controle via terminal para login root;
- /etc/skel: script para preenchimento de diretório inicial do novo usuário;
- /etc/termcap: arquivo ASCII que define o comportamento do terminal, bem como do console e impressoras; e
- /etc/X11: configurações para o sistema X Window.
Como podemos entender pela gama de subdiretórios acima, o /etc armazena grande quantidade de arquivos importantes para a experiência do usuário.
6. /home
O propósito do diretório /home é estabelecer um local destinado a arquivos próprios de um usuário. As distribuições Linux que utilizam o padrão FHS 3.0 estão configuradas para criar, automaticamente, diretórios associados a cada host em locais específicos e permissões de acesso restritas.
Que tipos de arquivos e subdiretórios são encontrados no /home? Se você está adaptado ao Windows, considere o diretório /home equivalente à seção “Meus Documentos”, “Downloads”, “Minhas Músicas” etc. É o lugar especialmente reservado para arquivos pessoais ou específicos para um usuário.
7. /lib
O /lib é parte da estrutura de diretórios do Linux usada para armazenar imagens de biblioteca compartilhadas, necessárias para a inicialização do sistema e a execução de comandos no sistema de arquivos root.
É, também, o local onde estão localizados diretórios (ou links simbólicos a eles) correspondentes aos módulos do kernel. Acessando o diretório /lib/modules, você encontrará outros subdiretórios específicos para cada versão do kernel presente no sistema operacional.
8. /media
O diretório /media tem a função de guardar subdiretórios usados como pontos de montagem (mount points, em inglês, como a prática é mais conhecida) para dispositivos / mídia removíveis, como CD / DVD / Blu Ray, pendrive, HD externo, entre outros.
Diferentemente de outros diretórios do Linux, o /media pode ser considerado uma otimização mais recente. Isso porque, no contexto histórico, muitos outros locais já foram usados para montar mídias removíveis, como o próprio root, porém, segundo o documento do FHS, o processo gerava acumulo de diretórios extras.
9. /mnt
Embora tenha o propósito similar ao do /media, o /mnt é usado para gerar subdiretórios temporários para montagem de dispositivos não removíveis e arquivos (imagem ISO, por exemplo).
Se você particionou o seu disco rígido, por exemplo, é bem provável que as demais partições requerem montagem manual (a menos que utilize um script para montagem automática), e o processo acontece no diretório /mnt.
10. /opt
Por sua vez, o diretório /opt é uma área reservada para instalações de add-ons application software packages, ou seja, pacotes de aplicações que otimizam o funcionamento de determinado programa e / ou acrescentam novos recursos. Eles também representam componentes ou dispositivos de hardware adicionados à máquina.
Se o seu computador está rodando em Linux e está conectado a alguma impressora, por exemplo, provavelmente há uma série de arquivos correspondentes ao aparelho no diretório /opt. Cabe frisar que grande parte de seus subdiretórios (/opt/bin, opt/doc, opt/include, /opt/info, /opt/lib e /opt/man) são de uso exclusivo do administrador.
11. Por que o /proc é importante na estrutura de diretórios do Linux
No diretório /proc/ são armazenados arquivos de sistemas próprios para documentar informações sobre o kernel. Fora isso, é ali que são guardados registros de desempenho e status de processos, como veremos nos subdiretórios apresentados a seguir:
- /proc/cpuinfo: disponibiliza ao usuário informações de consumo de CPU;
- /proc/filesystems: exibe informações acerca de processos armazenados no kernel e do próprio sistema operacional que podem ser acessados de forma dinâmica;
- /proc/interrupts: este subdiretório guarda informações sobre eventos de interrupção;
- /proc/ioports: carrega os registros de todos os endereços de entrada e saída usados por dispositivos conectados ao servidor;
- /proc/meminfo: informa do consumo de memória RAM;
- /proc/modules: lista todos os módulos carregados dentro do kernel;
- /proc/mount: exibe informações relativas a sistemas de arquivos atualmente montados;
- /proc/stat: fornece estatísticas bem detalhadas do sistema Linux;
- /proc/swaps: concede informações do arquivo de memória Swap.
Evidentemente, trata-se de um diretório muito importante para o sysadmin, pois é a partir dele que se tem acesso a várias informações úteis em termos de gerenciamento Linux.
12. /sbin
Tal como o diretório /bin é dedicado a binários essenciais para o uso de comandos básicos no terminal, o /sbin reúne arquivos binários acionados pelo sistema em si, ou seja, comandos que o próprio Linux executa automaticamente durante o boot ou pelo usuário root em processos de manutenção.
De acordo com este documento sobre hierarquia do sistema de arquivos Linux, o /sbin é um diretório que ajuda o sistema a entender quais são os executáveis “normais” e os cruciais. Na prática, nele estão localizados binários para boot, restauração, recuperação e reparo do sistema (complementando os binários do /bin)
13. /srv
Já o diretório /srv diz respeito a dados de serviços fornecidos pelo sistema. Devido à abreviação nos induzir a pensar que estamos falando de servidores, é importante não confundir as coisas.
O propósito desse diretório é permitir que os usuários encontrem o endereço em que arquivos de dados de determinados serviços estão armazenados. Com isso, serviços que requerem uma só árvore para dados que só podem ser lidos (readonly) ou gravados, bem como scripts, são facilmente encontrados.
14. /tmp
Como o nome sugere, o diretório /tmp é destinado a arquivos temporários gerados pelos programas. Isto é, o software não assegura ao usuário de que arquivos ou diretórios despejados no /tmp serão preservados a cada vez que a aplicação é inicializada.
Não há segredos em relação a esse diretório. Contudo, há padrões que estabelecem melhores práticas de gerenciamento, como a norma POSIX.1-2008, da IEEE (Institute of Electrical and Electronics Engineers), que recomenda que os conteúdos localizados no /tmp sejam deletados a cada boot.
15. Na Estrutura de diretórios do Linux o /usr contém arquivos somente leitura
O diretório /usr representa a segunda maior seção da estrutura de arquivos do Linux. Um motivo suficiente para justificar a sua fração é o compartilhamento, pois o /usr contém arquivos somente leitura, bibliotecas e binários usados por todos os usuários do sistema, direta ou indiretamente.
Alguns subdiretórios que ilustram bem a sua relevância dentro da hierarquia do Linux:
- /usr/bin: comandos de usuário executáveis considerados “normais”;
- /usr/bin/X11: binários ligados ao sistema X windows (não confundir com o sistema da Microsoft);
- /usr/include: ;guarda arquivos cruciais para algumas funções de programação em C;
- /usr/share: são diretórios compartilhados de arquivos informativos, manuais, parâmetros, ícones, entre outros;
- /usr/lib: arquivos de biblioteca geralmente requeridos durante a compilação de um programa em desenvolvimento;
- /usr/share/ppd: este subdiretório em especial é usado para compartilhar definições da impressora;
- /usr/sbin: comandos restritos a superusuário para administração do sistema.
Como podemos notar, o diretório /usr é usado para armazenar os mais diversos tipos de arquivos, inclusive de variados graus de importância dentro do sistema Linux, desde o simples uso das aplicações no Linux às complexas tarefas de programação e administração de sistemas.
16. /var
Segundo o documento FHS 3.0, “o / var contém arquivos de dados variáveis. Isso inclui: diretórios e arquivos em spool, administração e registro dados e arquivos transitórios e temporários”.
Em razão desse caráter “variado” dos arquivos presentes no /var, há dados não compartilháveis (/var/log, /var/lock e /var/run) e outros que podem ser compartilhados (/var/mail, /var/cache/man, /var/cache/fonts e /var/spool/news).
Há, também, arquivos cujo propósito é relatar atividades do sistema, tais como:
- var/log/lastlog: nele são registrados detalhes do último processo de inicialização;
- var/log/messages: log de todas as mensagens produzidas pelo processo syslog durante o boot; e
- /var/log/wtmp: lista o horário de login e a duração do uso do sistema por cada usuário.
Ao longo deste conteúdo, vimos que a estrutura de diretórios do Linux é extensa e, ao mesmo tempo, bem organizada. Cada um dos caminhos tem a sua função clara, resultando no fácil entendimento do funcionamento do sistema operacional.
Fora isso tudo, os diretórios (e respectivos arquivos) têm as próprias permissões de acesso que podem ser controladas pelo administrador. Gerenciar usuários no Linux é um dos fundamentos essenciais a quem deseja seguir essa carreira.
Gostou de conhecer mais a fundo os diretórios do sistema de arquivos do Linux? Compartilhe o conteúdo com os seus amigos nas redes sociais para fazer as informações chegarem a mais pessoas!