Linux Filesystem Hierarchy — Entendendo subdiretórios raiz do Linux
Tags: linux, beginners, programming, devops
Published: 2022-02-11 21:26:36

Nesse artigo vamos falar de uma maneira simples e direta sobre os principais diretórios que todo ser humano que trabalha com Linux deve saber.  

Como todos sabem o Linux possui varias distribuições com customizações diferentes, diversos gerenciadores de pacotes e aplicativos instalados mas uma coisa que sempre iremos encontrar em qualquer distribuição Linux são os diretórios raiz, que são encontrados no `/`.  

É importante informar que, todo o filesystem (sistema de arquivos) do Linux é composto por arquivos, diretórios e nada mais. Por exemplo, um disco rígido é representado como um arquivo `/dev/sda` no Linux, tudo pode ser lido e/ou escrito. Pode parecer estranho no começo ficar comparando arquivos com dispositivos de hardware, mas é assim que funciona.  

Quando digitamos no terminal o comando `ls /` temos o seguinte output.  
  
![Linux terminal filesystem screenshot](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/v9k9x0812brhe9kd2727.png)  
  
  
### `/bin`
O diretório `/bin` é responsável por guardar os arquivos binários do sistema que você acaba utilizando todos os dias. Nele você vai encontrar comandos como ls, apt, curl, cut, cat, less, head, chattr e entre outros.  
  
### `/dev`  
Ah o diretório dev é feito para os devs né? Não. O diretório `/dev` é para guardar informações dos dispositivos periféricos que você possui na sua máquina Linux. Nele você vai encontrar as principais partições de volume (`sda`, `sdb`, `sdc`, …) a qual o diretório `/sda` é referente a partição do seu sistema portanto não apague ela! Os arquivos sd são os arquivos que você manipula quando está fazendo partição do HD e/ou SDD.  

Todos os dispositivos que sua máquina possui são encontrados aqui em forma de arquivos, desde o modem até a placa de vídeo que está utilizando. Aqui você encontra uma lista de possíveis dispositivos que sua máquina utiliza.  

Além disso você verá os dispositivos do tipo tty que correspondem as informações dos consoles virtuais (o shell) da máquina local. Existem 64 consoles virtuais (tty0 ao tty63) e eles podem ser acessados simultaneamente pelo usuário. Esses consoles podem ser úteis para encontrar logs de instalação do sistema.  
  
### `/home`
Agora sim, esse é o diretório do dev, ou melhor, do usuário da máquina. Nesse diretório você encontra arquivos pessoais que o usuário utiliza diariamente como projetos, documentos, imagens, músicas e jogos.  
  
### `/etc`
Aqui você encontra as configurações da sua máquina. Segundo o TLDP (The Linux Documentation Project) esse diretório é o sistema nervoso do SO, nele os arquivos locais são totalmente destinados as configurações para execução de programas. Todos os arquivos são estáticos e não há nenhum binário, portanto aconselha-se não colocar nenhum binário nesse diretório.  
  
### `/lost+found`
No Linux também existe departamento de Achados e Perdidos!  

Quando a máquina sofre uma interrupção brusca, seja por queda de energia ou uma parada total do sistema, os arquivos que estavam sendo manipulados e que foram corrompidos são tratados e são colocados nesse diretório.  

Vale lembrar que a velocidade como esse processo de tratamento de arquivos corrompidos é diferente para cada tipo de sistema de arquivos como ext3 e ext4.  
  
### `/lib`
Nesse diretório existem bibliotecas e pacotes do kernel que são compartilhados com outros programas da máquina. Também encontramos bibliotecas da linguagem C que auxiliam no processo de inicialização do sistema ou para manipular o sistema de arquivos.  
  
### `/mnt`
Diretório de montagem temporário.  

OK, mas o que é uma montagem no Linux?  
Uma montagem é um processo que é feito para que o SO consiga utilizar o sistema de arquivos. Logo quando tem-se um CD-ROM por exemplo, temos um diretório `/mnt/cdrom` onde conseguimos manipular o sistemas de arquivos desse CD-ROM.  

Um outro exemplo, caso você já tenha usado WSL no Windows deve ter percebido que o sistemas de arquivos do Windows pode ser acessado pelo WSL através do `/mnt`.  
  
### `/root`
O `/root` é o diretório “`/home`” do usuário root. Ficou meio confuso mas digamos que o usuário root precisa ter uma área de trabalho separada dos demais usuários. Como explica o LFH (Linux Filesystem Hierarchy):  
  
> […] `/home` is often located on a different partition or even on another system and would thus be inaccessible to ‘root’ when — for some reason — only `/` is mounted.  
  
Ou seja, caso o usuário root não tenha acesso a área de trabalho de outros usuários por algum motivo ele tem autonomia para utilizar a própria. Lembrando que recomenda-se utilizar a área de trabalho para guardar códigos fonte, arquivos de uso frequente, documentos, etc.  

É preciso ter cuidado para não guardar arquivos em diretórios que são compartilhados com o sistema para evitar possíveis falhas tanto nos seus arquivos pessoais quanto os utilizados pelo sistema da máquina local.  
  
### `/sbin`
Nessa pasta só pode ser acessada pelo super usuário, nela ficam os arquivos binários como chroot, fdisk, halt, killall5 e entre outros.  
  
### `/tmp` 
Em `/tmp` encontramos arquivos temporários onde os programas instalados na máquina utilizam, assim que a máquina é desligada ou reiniciada esses arquivos são removidos.  

Lembre-se de que deve ter muito cuidado ao remover um arquivo desse diretório pois, por mais que seja uma arquivo temporário, pode ser essencial para o programa que esteja manipulando ele. Caso seja removido erroneamente isso pode acarretar uma parada imediata de certo programa.  
  
### `/usr`
Enfim chegamos ao maior diretório do sistema! Esse diretório armazena todos os programas de todos os usuários da máquina como ifconfig, ssh, scp, ftp até cabeçalhos de arquivos.  

Nesse diretório podemos encontrar também os manuais sobre os comandos usados pelo usuário (o famoso `man`) até mesmo existem alguns diretórios repetidos dentro do `/usr` como o `/usr/sbin`, `/usr/lib`, `/usr/etc` e `/usr/tmp`. Os programas que usuário utiliza também contém comportamentos semelhantes aos programas que o sistema utiliza, por esse motivo que existem esses diretórios dentro do `/usr`.  

Segundo The Linux Documentation Project é recomendado que arquivos de programas muito grandes não fiquem armazenados nesse diretório pelo motivo de que o `/usr` é compartilhado com toda a hierarquia de diretórios padrão do Linux e isso pode causar problemas de performance quando buscas se tornam cada vez mais frequentes nesse diretório.  
  
### `/var`
Enquanto no /usr muitos arquivos são lidos, no diretório `/var` existem muitos arquivos que são gravados pelos programas do sistema com grande frequência. Esse diretório é usado muitas vezes em servidores de email, buffer de impressora e cache.  

Também pode ser usado como um lugar para logs dos programas onde os arquivos são atualizados de tempo em tempo.  

Vale pontuar aqui um possível problema de desempenho em relação a escrita de arquivos. Quando tem-se um fluxo muito alto de operações de escrita aconselha-se que desabilite a opção de atualizar a data e hora de atualização do arquivo. Isso faz com que reduza a busca feitas no disco rígido.  
  
### `/media`
Esse diretório serve para os pontos de montagem que o próprio sistema utiliza como: CD’s, pen-drives e redes.  
  
### `/boot`
Armazena arquivos que atuam na inicialização do sistema. Esses arquivos são lidos antes do processo de inicialização da máquina. Vale lembrar que arquivos de configuração de boot da máquina não ficam no `/boot`, eles se encontram no diretório `/etc`. Os arquivos executáveis necessários para fazer o boot do sistema estão localizados em `/sbin`.  
  
### `/opt` 
O `/opt` serve para salvar pacote de aplicações de terceiros que não padrões do Linux. Pra ficar mais fácil o entendimento desse diretório podemos fazer uma analogia com o C:/Program Files do Windows onde praticamente onde fica todos os arquivos estáticos dos programas que o usuário instala.  
  
**_A seguir temos os diretórios exclusivos do kernel do sistema._**  
  
### `/proc`
No `/proc` existem informações em tempo real do que o sistema consumindo desde hardware até informações sobre os processos executados na máquina. Alguns comandos do Linux como o lsmod fazem leitura dessas informações para mostrar para o usuário. Esse diretório é dito como um sistema de arquivos virtual pois não guarda arquivos estáticos, as informações dentro dele são voláteis e úteis durante o tempo de execução do sistema.  
  
### `/sys`
Assim como o `/proc` o diretório `/sys` é criado em tempo de execução pelo kernel Linux com o intuito de guardar informações em tempo de execução sobre o sistema para serem lidos por outros programas. Outra coisa interessante desse diretório é que podemos alterar parâmetros do kernel sem que seja necessário reiniciar a máquina. Tome cuidado com a alteração desses parâmetros pois, se algo for configurado errado, pode causar parada total do sistema e com isso será necessário reiniciar a máquina.  
  
  
  
### FONTES
[Linux Devices](https://www.kernel.org/doc/Documentation/admin-guide/devices.txt)  

[Guia Foca](https://www.guiafoca.org/guiaonline/)

[Linux Filesystem Hierarchy](https://tldp.org/LDP/Linux-Filesystem-Hierarchy/html/c23.html)