Hierarquia de Diretórios no Linux [Guia Básico] - Certificação Linux
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:
Diretório raiz do sistema de arquivos;
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;
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.
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.
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.
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.
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.
Diretório vazio utilizado como ponto de montagem de dispositivos na máquina. Usado pelo administrador para montar discos.
Diretório vazio utilizado como ponto de montagem de dispositivos na máquina, tais como cdrom, dvd, pendrives, etc.
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.
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.
Diretório home do superusuário root. Dependendo da distribuição pode estar presente ou não;
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.
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.
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.
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.
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:
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:
Os arquivos e diretórios ocultos somente irão aparecer na listagem com a opção "-a" do comando ls:
.  ..  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:
/home/carlacruz
Se quisermos listar o conteúdo do diretório, pode-se usar o comando "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
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:
carlacruz     uiraribeiro     arthur
O arquivo especial ".." pode ser usado também para navegar nos diretórios, com o comando "cd":
Observe que entre o comando "cd" e o arquivo especial ".." é necessário um espaço, para separar o comando "cd" e o arquivo especial "..".
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:
O Linux mantém um atalho para o diretório HOME do usuário conectado através do símbolo til "~":
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.
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.