Hierarquia de Diretórios no Linux [Guia Básico]

A necessidade de guardar informações em objetos que pudessem ser acessados posteriormente de uma forma organizada vem de longe nos sistemas operacionais. Para isso foram criados os sistemas de arquivos. Cada sistema de arquivo mantém uma hierarquia de diretórios que define sua organização e utilidade, e no Linux não é diferente.

Nos sistemas de arquivos de uma forma geral, os objetos são organizados de uma forma hierárquica e cada objeto possui uma identificação única dentro de uma tabela.

Como exemplo, vejamos o sistema operacional Windows da Microsoft: ele organiza seus arquivos em uma partição nomeada como drive “C:\”, e nela temos o diretório Windows, que contém o sistema operacional; o diretório “Arquivos de Programas”, que contém a maioria dos produtos instalados, e assim por diante. Os arquivos ficam divididos em diretórios e subdiretórios diferentes por uma questão de afinidade e organização. Da mesma maneira temos uma organização no Linux. 

A identificação dos objetos de um sistema de arquivo no Linux é conhecida como inode. Ele carrega as informações de onde o objeto está localizado no disco, informações de segurança, data e hora de criação e última modificação dentre outras. Quando criamos um sistema de arquivos no Linux, cada dispositivo tem um número finito de inodes que será diretamente proporcional ao número de arquivos que este dispositivo poderá acomodar.

Basicamente no Linux tudo é um arquivo, que dependendo do seu tipo, pode se tornar um arquivo comum, um diretório, um link, um socket, um condutor, um descritor de dispositivos, etc.

Comparando com o Windows, a organização dos diretórios no Linux é um pouco mais complexa. O sistema de arquivos no Linux é semelhante a uma árvore de cabeça para baixo. No topo da hierarquia do Linux existe um diretório raiz nomeado simplesmente como root e identificado como o sinal “/”. Não confunda diretório raiz (root) com o superusuário root.

A estrutura do sistema de arquivos do Linux é definida por um padrão de mercado chamado Filesystem Hierarchy Standard ou FHS, criado pela comunidade Linux em 1994 e mantida pela Linux Foundation. Atualmente a FHS está na versão 3.0. As distribuições não são obrigadas a seguir este padrão, mas elas entendem a importância da localização dos arquivos e diretórios padronizados. 

Toda a estrutura de diretórios do sistema é criada abaixo do root: 

fhs2_pt-1024x656 Hierarquia de Diretórios no Linux [Guia Básico]
Linux FHS

/

Diretório raiz do sistema de arquivos;

/bin 

Contêm os comandos que podem ser utilizados pelos usuários e pelo administrador do sistema. São requeridos no modo monousuário ou de manutenção (single-user mode) e também podem conter comandos que são utilizados indiretamente por alguns scripts. Nele ficam os arquivos executáveis, tais como: cat, chgrp, chmod, chown, cp, date, dd, df, dmesg, echo, hostname, kill, ln, more, mount, mv, ps, pwd, rm, rmdir, sed, su, umount e uname; 

/boot

Arquivos estáticos necessários à carga do sistema. É onde fica localizada a imagem do Kernel, initramfs e alguns arquivos do Grub. Este diretório contém tudo que é necessário para carregar o sistema, exceto os arquivos de configuração e o gerenciador de boot. O /boot inclui o setor master de carga do sistema (master boot sectors) e arquivos de mapa de setor.

/dev

Abstração do Kernel onde ficam os arquivos para acesso dos dispositivos do sistema, como discos, cd-roms, pendrives, portas seriais, terminais, etc. Os arquivos são descritores que facilitam o acesso aos dispositivos. Este diretório é um pseudo-filesystem, e não existe no disco. Seu conteúdo, por exemplo, tem descritores de dispositivos como /dev/sda, /dev/cdrom, etc.

/etc

Arquivos necessários à configuração do sistema. São necessários para a carga do sistema operacional. Ele possui arquivos importantes tais como: fstab, exports, passwd, shadow, group, hosts, hosts.allow, hosts.deny, inittab, ld.so.conf, mtab, profile, services, etc. Nele também residem os arquivos de configuração das interfaces de rede.

Tipicamente /etc possui dois subdiretórios:

/etc/X11: Arquivos de configuração para a interface gráfica do Linux (X Window System);

/etc/skel: Esqueletos da configuração usuários. No diretório /etc/skel ficam localizados os arquivos de “modelo” para os usuários. O conteúdo deste diretório é replicado para o diretório home dos novos usuários quando são criados no sistema. 

/home

Geralmente é neste diretório onde ficam os diretórios home dos usuários. Nestes diretórios localizam-se scripts de carga de perfil e do shell bash de cada usuário.

/lib

Arquivos de bibliotecas essenciais ao sistema, utilizadas pelos programas em /bin e módulos do Kernel. É comum existir um diretório /lib[arquitetura]. Nos processadores de 64 bits, existe o diretório /lib64. Nos processadores de 32 bits, deve existir um diretório /lib32.

/mnt

Diretório vazio utilizado como ponto de montagem de dispositivos na máquina. Usado pelo administrador para montar discos.

/media

Diretório vazio utilizado como ponto de montagem de dispositivos na máquina, tais como cdrom, dvd, pendrives, etc.

/proc

Informações do Kernel e dos processos. É um pseudo-filesystem e não existe realmente no disco. Neste diretório ficam as abstrações de descritores de tudo quanto há no Kernel do sistema. É possível não só ler os dados, bem como fazer alterações no comportamento do Kernel alterando o conteúdo de arquivos em /proc. Fazendo uma abstração do Windows, este diretório seria o “registro” do sistema.

/opt

Neste diretório ficam instalados os aplicativos que não são da distribuição do Linux, como por exemplo, banco de dados de terceiros, software de vetores Cad, etc.

/root

Diretório home do superusuário root. Dependendo da distribuição pode estar presente ou não;

/run

Este diretório contém informações do sistema desde a última carga. Os arquivos deste diretório são apagados ou zerados no início do processo de boot. Arquivos como aqueles que indicam o PID do processo em execução devem residir neste diretório.

/sbin

Arquivos essenciais ao sistema, como aplicativos e utilitários para a administração da máquina. Normalmente só o superusuário tem acesso a estes arquivos, tais como: fdiskm fsck, ifconfig, init, mkfs, mkswap, route, reboot, swapon e swapoff.

/tmp

Diretório de arquivos temporários. Em algumas distribuições este diretório é montado em memória. Recomenda-se que seu conteúdo seja apagado de tempos em tempos ou a cada reboot. 

/usr

Arquivos pertencentes aos usuários e a segunda maior hierarquia de diretórios no Linux. Seu conteúdo pode ser distribuído via rede para diversos sistemas Linux da mesma distribuição sem problema algum. Ele tem alguns subdiretórios a saber:

/usr/bin:  Ferramentas e comandos auxiliares de usuários, bem como interpretadores de programação, como o perl, python, etc;

/usr/include:  Cabeçalhos e bibliotecas da linguagem C;

/usr/lib e /usr/lib64: bibliotecas de aplicações de usuários;

/usr/libexec:  binários que não são executados normalmente por usuários;

/usr/local:  hierarquia de diretórios para instalação de aplicativos locais no sistema. Possui vários subdiretórios como bin, etc, include, lib, man, sbin, share e src;

/usr/sbin:  contém ferramentas não essenciais, mas exclusivas da administração do sistema.

/usr/share:  arquivos de somente leitura de arquitetura independente. São arquivos que podem ser compartilhados entre distribuições de Linux iguais, independente da arquitetura. O diretório man por exemplo é onde residem os manuais dos comandos e fica em /usr/share.

/usr/src:  pode conter arquivos de código fonte de programas.

/var

Diretório onde são guardadas informações variáveis sobre o sistema, como arquivos de log, arquivos de e-mail etc. Possui subdiretórios importantes, a saber:

/var/cache:  mantém informações de cache das aplicações como cálculos, etc;

/var/lib:   mantém informações de estado das aplicações;

/var/lock:  mantém arquivos de trancamento que retém dispositivos para uso exclusivo de alguma determinada aplicação;

/var/log:   mantém os arquivos de log do sistema, tais como messages, lastlog e wtmp.

/var/mail:   mantém os diretórios de contas de email dos usuários;

/var/opt:   mantém os arquivos variáveis das aplicações;

/var/run:  a funcionalidade deste diretório foi movida para o /run.

/var/spool:  mantém dados de processos que mantém filas de arquivos, tais impressão e saída de email;

/var/tmp:  mantém os arquivos temporários das aplicações que precisem ser preservados entre o reboot do sistema

Arquivos e Diretórios Escondidos

Para esconder os arquivos e diretórios no Linux, basta renomear o seu nome, iniciando-o com um ponto “.”.

Por exemplo, ao listar um conteúdo de uma pasta, o diretório “musicas” está presente:

$ ls
arquivo  musicas

Se renomearmos o diretório musicas, iniciando com um “.”, ele não irá aparecer mais na lista de arquivos e diretórios:

$ mv musicas .musicas

O comando “mv” serve para mover, ou renomear arquivos e diretórios.

Ao listar a pasta, o diretório “musicas” não irá aparecer:

$ ls
arquivo

Os arquivos e diretórios ocultos somente irão aparecer na listagem com a opção “-a” do comando ls:

$ ls -a
.  ..  arquivo  .musicas

Diretório Corrente e Diretório Anterior

Todo diretório no Linux possui dois arquivos especiais, ocultos.

O primeiro arquivo é o ponto “.

Ele serve para referenciar o diretório corrente.

O segundo arquivo é o ponto-ponto “..

Ele serve para referenciar o diretório anterior.

Desta forma, estes dois arquivos especiais servem para se fazer referência relativa aos arquivos e diretórios do sistema. Chama-se relativa, porque a referência depende do ponto de partida, do diretório corrente.

Em contraponto, uma referência absoluta, ou caminho completo, é a referência de um arquivo ou diretório, tomando como base o diretório raiz “/”.

Para se saber o diretório corrente, deve-se usar o comando “pwd”.

Observe o diretório corrente:

$ pwd
/home/carlacruz

Se quisermos listar o conteúdo do diretório, pode-se usar o comando “ls”:

$ ls
bin  public_html

Para listar o conteúdo de algum arquivo dentro do diretório public_html, pode-se usar a referência relativa, à partir do diretório corrente, usando o arquivo “.”:

$ cat ./public_html/arquivo

Este é um arquivo texto de exemplo

Ou usar o caminho absoluto:

$ cat /home/carlacruz/public_html/arquivo

Este é um arquivo texto de exemplo

Se quisermos listar o conteúdo do diretório /home, pode-se da mesma forma usar o arquivo especial “..” que faz referência ao diretório anterior:

$ ls ../
carlacruz     uiraribeiro     arthur  

O arquivo especial “..” pode ser usado também para navegar nos diretórios, com o comando “cd”:

$ cd ..
$ pwd
/home
$ cd ..
$ pwd
/

Observe que entre o comando “cd” e o arquivo especial “..” é necessário um espaço, para separar o comando “cd” e o arquivo especial “..”.

Diretório Home

Cada usuário no Linux possui um diretório especial único, chamado de diretório HOME.

É no seu diretório HOME que cada usuário pode criar, apagar, mover e renomear arquivos e pastas à vontade.

Nenhum outro usuário comum do sistema pode ter acesso ao diretório home de outro usuário. Somente o super-usuário root pode ter acesso a qualquer diretório no sistema.

É no diretório home que também residem arquivos especiais de configuração do perfil e do ambiente de trabalho dos usuários, bem como suas chaves privadas de acesso a outros hosts e de criptografia.

O padrão da hierarquia de arquivos do Linux determina que o diretório HOME dos usuários sejam criados dentro do diretório /home.

É no arquivo de contas de usuário /etc/passwd que é definido o caminho do diretório home dos usuários:

$ cat /etc/passwd | grep carla
carla:1000:1000:Carla Cruz:/home/carlacruz:/bin/bash

A variável $HOME mantém o caminho do diretório HOME do usuário logado no sistema:

$ echo $HOME
/home/carlacruz

O Linux mantém um atalho para o diretório HOME do usuário conectado através do símbolo til “~”:

$ cd ~
$ pwd
/home/carlacruz

Desta forma, pode-se usar o caminho do “~” para fazer referência aos arquivos e diretórios do diretório HOME do usuário conectado:

$ cat ~/public_html/arquivo
Este é um arquivo texto de exemplo.

Conclusão

Saber a hierarquia de diretórios no Linux é algo essencial para os administradores de Linux/Unix. Explore cada um de seus diretórios, comandos e arquivos.

Aprenda muito mais sobre Linux em nosso curso online. Você pode efetuar a matrícula aqui. Se você já tem uma conta, ou quer criar uma, basta entrar ou criar seu usuário aqui.

Gostou? Compartilhe