FHS – Hierarquia e Função das Pastas no Linux(/sbin, /bin, /usr, /root, etc…)

Desde a época do Unix havia uma certa tentativa de manter os arquivos em seus devidos lugares e bem organizados. Isso é tentado faz mais de 50 anos.

Porém nunca foi fácil e até hoje não é diferente.

Afinal, quem nunca se confundiu em tentar entender porque existem pastas com o mesmo nome e, aparentemente, a mesma função no sistema de arquivos? Encontramos uma pasta chamada “bin” tanto em /bin quanto em /usr/bin e ainda em /usr/local/bin. Isso não é diferente da pasta “sbin”. Veja:

[elder@centos65 Labs]$ sudo find / -type d -name "sbin" 
/usr/sbin
/usr/local/samba/sbin
/usr/local/sbin
/sbin

Agora refazendo a busca para a pasta bin:

[elder@centos65 Labs]$ sudo find / -type d -name "bin" 
/usr/bin
/usr/share/locale/bin
/usr/share/sgml/docbook/xsl-stylesheets-1.75.2/epub/bin
/usr/local/samba/bin
/usr/local/bin
/bin

Vemos pastas com o mesmo nome em diversos locais.

 

FSSTND  – Filesystem Standard

 

Em português significa algo do tipo: Padrão de Hierarquia do Sistema de Arquivos.

Embora Linux se inspire bastante no Unix, Unix passou por diversas divisões e variações. Podemos citar o BSD(Berkeley Standard Distribution) que no seu início era apenas um conjunto de correções(patches) e extensões do código original do Unix  para o AT&T’s. Assim, várias Distros não seguiam um padrão para organização dos arquivos. Várias medidas foram tomadas para tentar solucionar e manter um padrão na localização dos arquivos; seguindo esse padrão, independente da distro dos Sistemas Operacionais baseados no Unix, cada arquivo teria um local específico a ser colocado de acordo com sua função.

Em 1993 a comunidade Linux criou um projeto chamado FSSTND(Filesystem Standard). Esse projeto foi lançado em 1994.

FSSTND não era um programa, mas sim um documento contendo boas práticas em como organizar arquivos no Sistema. Essas normas não eram obrigatórias.

O FSSTND preconizava:

  •  A padronização dos programas residentes em /bin e /usr/bin. Algumas vezes alguns programas retornavam erro por procurar, por exemplo, um script dentro de /bin e não encontrar justamente por estar dentro de /usr/bin.
  • Especificava também que dentro de /etc não deveria existir nenhum arquivo executável(programa ou script) e isso era bem comum antigamente.
  • Só pode estar dentro da pasta /usr os arquivos que não se alteram ou se alteram raramente por intervenção humana 🙂 Assim essa pasta, /usr, poderia ser compartilhada como somente leitura(Outros computadores não poderiam alterar o seu conteúdo)

O FSSTND ainda teve algumas versões, como a 1.0, 1.1 e 1.2.

Devido a algumas limitações  deu lugar à sua versão melhorada/estendida: FHS

FHS  – Filesystem hierarchy Standard

 

A versão 2.3 é a atual desde janeiro de 2004 🙂

Lembrando, FHS não é um programa, mas sim um conjunto de normas não obrigatórias, porém bastante respeitadas. Seguindo essas normas todos os sistemas mantém seus arquivos com uma estrutura bastante semelhante no que se refere à sua localização de acordo com suas funções.

O Site oficial com as normas/padrões FHS é o http://www.pathname.com/fhs/

FSSTND teve seu nome alterado para FHS  e é bem reconhecida e levada a sério pela comunidade Linux.

É seguida por diversos Sistemas, como BSD, Unix.

 

Uma das implementação feitas dentro da FHS foi a divisão dos arquivos em tipos:

Por Compartilhamento de Arquivos na Rede

    • Arquivo compartilhável(Sharable)

São arquivos localizados em uma máquina/pc mais que podem ser disponibilizados por você para que outras pessoas acessem  de outros computadores. Tudo isso sem por em risco seu Sistema Operacional.  Exemplo de arquivos: Documentação do Sistema, Executáveis de programas e arquivos com conteúdo que interessa à outras pessoas.

    • Arquivo Não Compartilhável(Nonsharable)

Bom…. 🙂 o contrário da explicação acima. Arquivos que estão e devem estar vinculados apenas ao computador local.

 

Por Modificação

    • Variável(Variable)

São os arquivos frequentemente alterados. Alterados naturalmente.  Como arquivos de logs e arquivos pessoais do usuário.

    • Estático(Static)

Bom… 🙂 o contrário do item acima. São  arquivos não alterados ou alterados com rara frequência. Como binários(programas)  que são alterados quando há atualização apenas.

 

Exemplo usando Tabela 2 x 2

Como exemplo é usado uma tabela contendo duas colunas e duas linhas( 2 x 2  🙂  )

 

O Diretório root

 

O diretório root, chamado também de Sistema de Arquivos root, é a pasta pai e representada apenas pela barra “/”. A barra usada também para descrever datas 🙂

Não confunda o diretórios root(“/”)  com a pasta /root. E não confunda também a pasta /root com o usuário root 🙂 .  A pasta /root é a casa do usuário root, assim como /home/elder é a pasta do meu usuário.

Muito confuso não é mesmo?

Bom, por enquanto, basta saber que:

  • root =  Nome do usuário mais poderoso e top do Mundo Linux.
  • /root =  é a pasta onde o usuário root mora.
  • / =  é a pasta pai de todas as pastas do mundo Linux. Dentro dessa pasta  estão todas as outras.

Bom, root mora na pasta /root que está dentro de root  /  🙂

A pasta root “/” é como se fosse o c: do windows.

Mas diferente do windows, em Linux dos HDs, pen drives, as quase obsoletas mídias de DVDs  e CDs, HDs externos… são montados(vinculados) à pastas e não à letras. Assim, ao abrir uma pasta na verdade você pode está abrindo uma partição de disco e tendo acesso ao sistema de arquivos. Em Linux não existe C: ou D:

O Sistema de Arquivos root é montado em “/”. Conforme podemos notar executando o comando “df -h”. Realcei de vermelho o sistema de arquivos root.

[elder@centos65 Labs]$ df -h
Filesystem                      Size  Used Avail Use% Mounted on

/dev/mapper/vg_centos65-lv_root 13G   2,5G  9,6G  21%     /

 

Pastas Importantes e Seus Conteúdos

Essas são as pastas importantes localizadas dentro da root:

 

/boot

  • boot de boot 🙂 bom, quem nunca falou que “o sistema não dar boot“? ou o “sistema não está butanto“? Querendo dizer que não inicializa? Em inglês boot significa bota ou pontapé. Pontapé é o que mais se encaixa aqui.
  • Contém os arquivos responsáveis pela inicialização do sistema.
  • É sempre montado em uma  partição de disco separada.
  • É estático e não compartilhável.
[elder@centos65 Labs]$ df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/vg_centos65-lv_root
                       13G  2,5G  9,6G  21% /
tmpfs                 499M     0  499M   0% /dev/shm
/dev/sda1             477M   49M  403M  11% /boot
/dev/drbd1            4,8G   11M  4,6G   1% /labDRBD

Acima, /boot é usado como ponto de montagem de /dev/asa1

 

/bin

  • bin de binário. Explicando resumidamente, são programas já compilados.
  • Contém executáveis acessíveis a qualquer usuário. Quando digo executáveis logicamente refiro-me a programas. Como exemplo de programas dentro dessa pasta temos ls, cp, mount, ln, mkdir, more e date. São comandos essenciais para administração do sistema. São essenciais para momentos de emergência.
  • Não possui uma partição do disco dedica a ela. E assim sendo, está dentro de /.
  • É Estático e compartilhável. Porém ninguém compartilha essa pasta.
[elder@centos65 Labs]$ ls -m  /bin
arch, awk, basename, bash, cat, cgclassify, cgcreate, cgdelete, cgexec, cgget, cgset, cgsnapshot, chgrp,
chmod, chown, cp, cpio, cut, dash, date, dd, df, dmesg, dnsdomainname, domainname, dumpkeys, echo,
egrep, env, ex, false, fgrep, find, findmnt, fusermount, gawk, grep, gtar, gunzip, gzip, hostname,
ipcalc, iptables-xml, iptables-xml-1.4.7, kbd_mode, keyctl, kill, link, ln, loadkeys, logger, login, ls,
lsblk, lscgroup, lssubsys, mkdir, mknod, mktemp, more, mount, mountpoint, mv, netstat, nice,
nisdomainname, ping, ping6, plymouth, ps, pwd, raw, readlink, rm, rmdir, rpm, rvi, rview, sed, setfont,
sh, sleep, sort, stty, su, sync, tar, taskset, touch, tracepath, tracepath6, true, ulockmgr_server,
umount, uname, unicode_start, unicode_stop, unlink, usleep, vi, view, ypdomainname, zcat

 

/sbin

  • S de super e bin de binário. Super se refere a superusuário e binário, como acima, a programas. Programas que devem ser usados apenas por usuário top, ou seja, o usuário root.
  • Igualmente à pasta /bin, contém programas, com uma diferença, são programas que somente o superusuário pode usar. Como exemplo temos, fdisk,  fsck, mkfs. São essenciais para momentos de emergência.
  • Não possui uma partição do disco dedica a ela. E assim sendo, está dentro de /.
  • É estático e na teoria compartilhável, mas na prática não faz sentido compartilhá-la.
[elder@centos65 Labs]$ ls -m /sbin/
ether-wake, ethtool,aillock, fdisk, findfs, fixfiles, fsadm, fsck, fsck.cramfs, fsck.ext2, fsck.ext3, fsck.ext4,
fsck.ext4dev, fsck.xfs, fsfreeze, fstab-decode, fstrim, fuser, genhostid, getkey, grub, grubby,
grub-crypt, grub-install, grub-md5-crypt, grub-terminfo, halt, hwclock, ifcfg, ifconfig, ifdown,
ifenslave, ifup, init, initctl, insmod, insmod.static, install-info, installkernel, ip, ip6tables,
ip6tables-1.4.7, ip6tables-multi, ip6tables-multi-1.4.7, ip6tables-restore, ip6tables-restore-1.4.7,
ip6tables-save, ip6tables-save-1.4.7, ipmaddr, iptables, iptables-1.4.7, iptables-multi,
iptables-multi-1.4.7, iptables-restore, iptables-restore-1.4.7, iptables-save, iptables-save-1.4.7,
iptunnel, iscsiadm, iscsid, iscsi-iname, iscsistart, iscsiuio, killall5, kpartx, ldconfig, load_policy,
logsave, losetup, lsinitrd, lsmod, lvchange, lvconvert, lvcreate, lvdisplay, lvextend, lvm, lvmchange,
lvmconf, lvmconfig, lvmdiskscan, lvmdump, lvmetad, lvmsadc, lvmsar, lvreduce, lvremove, lvrename,
lvresize, lvs, lvscan, MAKEDEV, matchpathcon, mdadm, mdmon, mii-diag, mii-tool, mingetty, mke2fs, mkfs,
mkfs.cramfs, mkfs.ext2, mkfs.ext3, mkfs.ext4, mkfs.ext4dev, mkfs.xfs, mkhomedir_helper, mkinitrd,
mkswap, modinfo, modprobe, mount.fuse, mount.nfs, mount.nfs4, mount.tmpfs, mpathconf, mpathpersist

Para ficar mais claro a lista acima não está completa.

 

/lib

  • Lib de library ou biblioteca em português. Clique aqui para acessar link de post falando o que são bibliotecas.
  • Contém bibliotecas. Bibliotecas são programas usados por outros programas. Por exemplo, um programador ao criar seu programa não precisará criar a janela para abrir arquivos ou uma outra para salvar. Esse tipo de janelas geralmente já estão prontas em formato de biblioteca. No windows as bibliotecas são arquivos terminados em .dll e por isso são chamadas de DLLs.
  • A pasta /lib também contém módulos do kernel.
  • Não possui uma partição do disco dedica a ela. E assim sendo, está dentro de /.
  • É uma pasta Estática e na teoria compartilhável. mas… mas… na prática ninguém a compartilha.
[elder@centos65 Labs]$ ls -m  /lib/
cpp, drbd, firmware, kbd, modules, security, terminfo, udev

/usr

  • Usr provavelmente vem da palavra user ou usuário.
  • Contém pastas como /usr/bin e /usr/sbin e /usr/lib E para complicar a nossa mente um pouco mais ainda possui a subpasta /usr/local/bin, /usr/local/lib e /usr/local/sbin. A diferença entre essas pastas e suas similares é que essas não são de extrema importância à administração do sistema. Sendo não essenciais para momentos emergenciais.
  • Não possui uma partição dedicada.
  • O conteúdo dessa pasta é Compartilhável e estático. Antigamente os usuários costumavam compartilha na rede o conteúdo de /usr; hoje em dia não há mais esse costume.
[elder@centos65 Labs]$ ls -m /usr/ 
bin, etc, games, include, lib, lib64, libexec, local, sbin, share, src, tmp

Essa pasta mantém praticamente a mesma estrutura da pasta raiz 🙂 🙂 🙂 que coisa hein????

/usr/local

  • Quer ficar mais confuso? sim, essa pasta nos deixa delirando de dúvidas. É para acabar de nos matar dando um fatality!
  • Contém arquivos que adminstradores instalam localmente. Por exemplo, quando compilamos o samba em um dos artigos anteiores; vimos que o samba foi instalado em /usr/local/samba. A ideia aqui é ótima. Essa pasta se destina a instalação de softwares que não sofrerá alteração ao atualizarmos por completo o sistema ou quando este for atualizado automaticamente. /usr/local é uma pasta vazia logo assim que você instala o sistema operacional. Com o tempo ela vai ganhando vida.
  • Esse diretório não tem uma partição dedicada, mas seria uma boa conduta dedicar uma partição  para ela; assim, quando, por exemplo, reinstalar o sistema operacional ela pasta não será zerada.
  • O conteúdo dessa pasta é Compartilhável e estático. Na prática….. ninguém  compartilha.

 

/opt

  • Não faço a mínima ideia do significado de opt 🙂
  • Tem a mesma característica que /usr/local, mas voltada para programas pagos, jogos e outros. Geralmente destina-se a pacotes pré-prontos, se é que posso usar esse termo.
  • Abaixo tive que usar o comando ls em meu computador pessoal, já que no centos a pasta /opt está vazia.
  • Esse diretório não tem uma partição dedicada. Apesar de alguns administradores colocarem  /opt em uma partição separada. Alguns outros ainda fazem da pasta /opt apenas um link para /usr/local
  • É estática e não compatilhável

elder@ti:~$ ls /opt/
google  kingsoft  teamviewer  WordPress.com

 

/home

  • O que dizer da nossa casa? do nosso lar? Sim, home em português quer dizer casa ou lar.
  • Contém as pastas de todos os usuários criados no sistema e assim é nela onde estão todos nossos arquivos pessoais. Por precaução  e segurança a pasta pasta do usuário top dos tops, ou seja, o root, não está dentro da /home. A pasta do perfil do usuário root é a /root.
  • É bastante recomendado deixar /home em uma partição separada e manter backup.
  • É Variável e Compartilhável.
[elder@centos65 Labs]$ ls /home/
andre  elder  intruso  joao  maria  salesTeste

/root

  • Root em português quer dizer raiz. Bom, para a pasta / teria lógica, mas para /root não entendo. Poderiam colocar outro nome ao invés de /root?  a pasta / é a raiz, o início de toda a hierarquia. mas e /root?
  • Essa é a pasta home do usuário root. Nela estão alguns poucos arquivos.
  • É variável e Não compartilhável
[elder@centos65 Labs]$ sudo ls -m /root/
anaconda-ks.cfg, install.log, install.log.syslog

/var

  • var de variável. Sim essa pasta já traz em seu nome que o seu conteúdo está sempre em alterações, constantes mudanças.
  • Bom, nela estão arquivos transientes, passageiros. Podemos citar arquivos delogs dos programas, arquivos de spool de impressão, emails.
  • Não vem por padrão tendo uma partição só sua, mas alguns administradores deixa ela separada em uma partição própria em casos onde há muita atividade e acúmulo  de arquivos.
  • Bom, é uma pasta variável. Mas algumas de suas subpastas são Compartilháveis enquanto outras não.

 

[elder@centos65 Labs]$ ls -m /var
cache, db, empty, games, lib, local, lock, log, mail, nis, opt, preserve, run, spool, tmp, www, yp

Acima vemos que a estrutura da pasta /var é bem semelhante à de /usr. Bem complexa

 

/tmp

  • tmp de temporário. Isso mesmo. O conteúdo dessa pasta está destinada a ir para o lixo.
  • FHS recomenda que o seu conteúdo seja deletado após cada boot(reinício do sistema)
  • Muitos programas precisam criar arquivos temporários e /tmp é o local ideal.
  • Tanto dentro de /var quanto em /usr há uma pasta chamada tmp também.
  • Não tem uma partição própria. Mais em alguns casos alguns administradores dedicam uma partição para /tmp como precaução para casos em que o ela fique cheia de arquivos e assim evitando de encher a pasta /.
  • É variável e raramente compartilhada.
[elder@centos65 Labs]$ ls -m /tmp/
yum.log, yum_save_tx-2019-06-13-13-12zuru6K.yumtx

 

/mnt

mnt de mount. Montagem em português.

Serve como ponto de montagem para algumas mídias removíveis, como pendrives.

O FHS apenas menciona essa pasta, mas não diz como usá-la.

É Estática e Compartilhável? depende do dispositivo montado e da boa vontade do usuário em compartilhar o conteúdo com outros computadores.

Nem irei postar o conteúdo dela, pois não tenho nada montado no momento 🙂

 

/media

  • media de média. Isso mesmo.
  • Assim como /mnt, serve como ponto de montagem para dispositivos removíveis. Esses dispositivos são montados em subpastas dentro de /media. Diferente de /mnt, onde os dispositivos removíveis são montados diretamente nela.
  • Muitas distros usam /media ao invés de /mnt
[elder@centos65 Labs]$  ls /media/
novoDiscoBKP pendrive hdExterno cdrom

 

/dev

  • dev de device. Dispositivo em português. O que é um dispositivo? pode se referir a muita coisa, mas geralmente está relacionado a disco, pendrive, dvds etc….
  • Sabemos que tudo no Linux são arquivos. Assim, os HDs, pendrives, e terminais etc… são tratados como arquivos dentro de /dev. Ao inserir um novo HD automaticamente o kernel criará um arquivo dentro de /dev para o representar.
  • devfs transforma /dev em um sistema de arquivos virtual. Assim sendo, já que é algo virtual, ele não precisa de uma partição exclusiva.
  • Ele é Estático e Variável?
[elder@centos65 Labs]$ ls /dev/sd?
/dev/sda  /dev/sdb  /dev/sdc

Acima temos três HDs

 

/proc

  • proc é um diretório diferente dos demais. Pois ele só passa a existir após ligado o computador.
  • Os seus arquivos são criados dinamicamente e através deles nós e muitos programas coletam muitas informações, como por exemplo de informações sobre hardware.   Por exemplo,
          • informação sobre processador =  cat /proc/cpuinfo
          • Informações sobre memória ram = cat /proc/meminfo
  • Linux prover informações de hardwares via /proc que não estão dentro de /dev
  • Por ser algo “virtual” ele não necessita de uma partição dedicada.
  • É Variável e não compartilhável
[elder@centos65 Labs]$ ls -m /proc/
asound, buddyinfo, bus, cgroups, cmdline, cpuinfo, crypto, devices, diskstats, dma, drbd, driver,
execdomains, fb, filesystems, fs, interrupts, iomem, ioports, irq, kallsyms, kcore, keys, key-users,
kmsg, kpagecount, kpageflags, loadavg, locks, mdstat, meminfo, misc, modules, mounts, mtd, mtrr, net,
pagetypeinfo, partitions, sched_debug, schedstat, scsi, self, slabinfo, softirqs, stat, swaps, sys,
sysrq-trigger, sysvipc, timer_list, timer_stats, tty, uptime, version, vmallocinfo, vmstat, zoneinfo

 

Conclusão

Conhecendo a estrutura e hierarquia das pastas dentro do sistema facilita e é um bom caminho andado para localizarmos arquivos. Sem falar que esse padrão que  FHS propaga é muito importante e evita confusão e diferenças vãs entre distros e Sistemas.

 

 

Siga-nos em nossas redes:

Link Facebook: https://www.facebook.com/gnulinuxbr

Link WhatsApp: https://chat.whatsapp.com/G9xS3Ylzoou3TrN49DQso4

Link Telegram: https://t.me/gnulinux_brasil

YouTube: https://www.youtube.com/channel/UCwyFWDqE0v7SwpZenjmzxYQ

Leitor voraz e um dos administradores do GNU/Linux Brasil no Whatsapp, facebook, youtube e nesse dito site: www.gnulinuxbrasil.com.br

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *