Iniciante Fundamental Progresso 0%

Sistema de Arquivos Linux

Estrutura de diretórios, inodes e links, a base de como o Linux organiza dados.

01. Conceito

O princípio: Tudo é Arquivo

Explicação

"Tudo é arquivo" é a filosofia central do Unix/Linux. Não é apenas um slogan — é uma decisão de design que torna o sistema radicalmente consistente.

No Linux, os seguintes itens são representados como arquivos:

  • Arquivos comuns — texto, binários, imagens
  • Diretórios — arquivos especiais que listam outros arquivos
  • Dispositivos de hardware/dev/sda (disco), /dev/tty (terminal)
  • Processos/proc/1234/ representa o processo PID 1234
  • Sockets de rede e pipes — mecanismos de comunicação entre processos
  • Pseudodispositivos/dev/null, /dev/zero, /dev/random

Isso significa que as mesmas ferramentas que operam em arquivos (cat, read(), write()) operam igualmente em dispositivos e processos. Você pode ler informações da CPU com cat /proc/cpuinfo como se fosse um simples arquivo de texto.

Exemplo Concreto
# Tudo é arquivo — na prática:

# Ler informações da CPU como se fosse um arquivo de texto
cat /proc/cpuinfo | head -20

# Descartar output enviando para /dev/null
comando_ruidoso > /dev/null 2>&1

# Gerar zeros infinitos (útil para apagar discos)
dd if=/dev/zero of=/dev/sdb bs=1M count=100

# Ver o tipo real de cada "arquivo" em /dev
file /dev/sda    # block special (dispositivo de bloco)
file /dev/null   # character special (dispositivo de caractere)
file /dev/tty    # character special

# Listar o que está dentro do "diretório" de um processo
ls -la /proc/1   # processo init/systemd
O que você precisa guardar
  • Hardware, processos, pipes e sockets são todos acessíveis como arquivos
  • Isso torna o sistema previsível: uma interface para tudo
  • /dev/null descarta qualquer dado escrito nele
  • /proc expõe estado do kernel e processos em tempo real
02. Estrutura

A Árvore de Diretórios

Explicação

No Linux há uma única árvore de diretórios, com raiz em /. Diferente do Windows com C:\, D:\, aqui tudo parte do mesmo ponto. Dispositivos externos são "montados" dentro dessa árvore.

Os diretórios principais que você deve conhecer:

  • / — raiz de tudo. O início da árvore.
  • /etc — arquivos de configuração do sistema. /etc/passwd, /etc/fstab, /etc/ssh/sshd_config.
  • /var — dados variáveis: logs (/var/log), spools, bases de dados de pacotes.
  • /home — diretórios dos usuários. /home/joao, /home/maria.
  • /root — diretório home do usuário root (não fica dentro de /home).
  • /tmp — arquivos temporários, apagados no boot ou periodicamente.
  • /usr — programas e dados do usuário. /usr/bin (executáveis), /usr/lib (bibliotecas), /usr/share (dados compartilhados).
  • /bin e /usr/bin — executáveis essenciais. Em distros modernas, /bin é um symlink para /usr/bin.
  • /sbin e /usr/sbin — executáveis do sistema (tipicamente requerem root): fdisk, iptables, reboot.
  • /lib e /usr/lib — bibliotecas compartilhadas (.so files — o equivalente de .dll no Windows).
  • /mnt e /media — pontos de montagem para dispositivos externos (pendrives, HDs externos).
  • /opt — softwares opcionais instalados manualmente, fora do gerenciador de pacotes.
Exemplo Concreto
# Listar a raiz com permissões e tamanhos
ls -la /

# Output típico:
drwxr-xr-x  19 root root  4096 Mai 20 10:00 .
drwxr-xr-x  19 root root  4096 Mai 20 10:00 ..
lrwxrwxrwx   1 root root     7 Jan  1  2024 bin -> usr/bin
drwxr-xr-x   4 root root  4096 Mai 15 08:30 boot
drwxr-xr-x  20 root root  4760 Mai 20 09:55 dev
drwxr-xr-x 130 root root 12288 Mai 20 09:58 etc
drwxr-xr-x   3 root root  4096 Fev 10 14:20 home
lrwxrwxrwx   1 root root     7 Jan  1  2024 lib -> usr/lib
drwxr-xr-x   2 root root  4096 Jan  1  2024 mnt
drwxr-xr-x   3 root root  4096 Mar  5 11:00 opt
dr-xr-xr-x 348 root root     0 Mai 20 07:00 proc
drwx------   6 root root  4096 Mai 18 16:45 root
drwxr-xr-x  30 root root   940 Mai 20 09:55 run
lrwxrwxrwx   1 root root     8 Jan  1  2024 sbin -> usr/sbin
drwxrwxrwt  24 root root  4096 Mai 20 11:20 tmp
drwxr-xr-x  12 root root  4096 Mai 10 09:00 usr
drwxr-xr-x  13 root root  4096 Mai 10 09:00 var

# Note: bin e lib são symlinks para usr/bin e usr/lib
# Isso é o FHS moderno (distros como Ubuntu 20.04+)

# Encontrar logs modificados nos últimos 7 dias
find /var/log -name "*.log" -mtime -7
Erros comuns

Confundir /root com /"/root é o diretório home do usuário root. / (root do filesystem) é a raiz de toda a árvore. São coisas diferentes.

Salvar arquivos de configuração em /tmp/tmp é apagado no boot. Qualquer configuração salva lá some ao reiniciar.

Instalar software manualmente em /usr/bin — software instalado manualmente vai em /usr/local/bin ou /opt. Isso evita conflito com o gerenciador de pacotes.

03. Especiais

Diretórios Especiais: /proc, /dev, /sys

Explicação

Estes três diretórios são sistemas de arquivos virtuais — não existem no disco. O kernel os cria na memória RAM e os expõe como se fossem diretórios comuns.

/proc — expõe informações sobre processos e o estado do kernel:

  • /proc/cpuinfo — modelo, velocidade e cores da CPU
  • /proc/meminfo — uso de memória RAM
  • /proc/1234/ — tudo sobre o processo com PID 1234
  • /proc/1234/cmdline — comando que iniciou o processo
  • /proc/1234/fd/ — file descriptors abertos pelo processo
  • /proc/net/ — informações de rede

/dev — arquivos de dispositivo. Cada dispositivo de hardware tem um arquivo aqui:

  • /dev/sda — primeiro disco SATA/SCSI
  • /dev/sda1 — primeira partição desse disco
  • /dev/nvme0n1 — disco NVMe
  • /dev/null — buraco negro (dados escritos aqui somem)
  • /dev/zero — fonte infinita de zeros
  • /dev/random e /dev/urandom — fontes de dados aleatórios
  • /dev/tty — terminal atual

/sys — similar ao /proc, expõe informações de hardware e drivers com uma estrutura mais organizada. Usado para configurar drivers e ver informações de dispositivos.

Exemplo Concreto
# Informações da CPU (lendo um "arquivo" na memória)
cat /proc/cpuinfo | head -20
# processor : 0
# model name: Intel(R) Core(TM) i7-1165G7 @ 2.80GHz
# cpu MHz   : 2800.000
# cache size: 12288 KB
# ...

# Uso de memória em tempo real
cat /proc/meminfo
# MemTotal:       16384000 kB
# MemFree:         3201024 kB
# MemAvailable:    8547328 kB

# Ver file descriptors abertos pelo processo bash (PID=$$)
ls -la /proc/$$/fd

# Gerar arquivo de 1MB com zeros
dd if=/dev/zero of=/tmp/teste.bin bs=1M count=1

# Ver tipo de arquivo do dispositivo de disco
file /dev/sda
# /dev/sda: block special (8/0)

# Ver informações de hardware via /sys
cat /sys/class/net/eth0/speed  # velocidade da interface de rede
04. Internos

Inodes: o que é um arquivo por dentro

Explicação

Um inode (index node) é uma estrutura de dados que o sistema de arquivos mantém para cada arquivo. Ele armazena todos os metadados do arquivo, exceto o nome:

  • Número do inode — identificador único dentro do sistema de arquivos
  • Permissões — rwxrwxrwx e tipo de arquivo
  • Dono (UID) e Grupo (GID)
  • Tamanho em bytes
  • Timestamps: atime (último acesso), mtime (última modificação do conteúdo), ctime (última mudança de metadados)
  • Número de hard links apontando para este inode
  • Ponteiros para blocos de dados no disco

O nome do arquivo NÃO está no inode — ele fica no diretório. Um diretório é essencialmente uma tabela que mapeia nomes de arquivos para números de inode. É por isso que você pode ter vários nomes diferentes apontando para o mesmo arquivo.

Exemplo Concreto
# Ver todas as informações do inode de um arquivo
stat arquivo.txt

# Output:
#   File: arquivo.txt
#   Size: 4096            Blocks: 8          IO Block: 4096
# Device: 8,1    Inode: 1234567     Links: 1
# Access: (0644/-rw-r--r--)  Uid: (1000/   joao)   Gid: (1000/  devs)
# Access: 2026-05-20 10:00:00.000 +0000   ← atime
# Modify: 2026-05-19 14:30:00.000 +0000   ← mtime
# Change: 2026-05-19 14:30:00.000 +0000   ← ctime

# Ver o número do inode na listagem
ls -lai /etc/passwd
# 655361 -rw-r--r-- 1 root root 2847 Mai 20 10:00 /etc/passwd
# ↑ número do inode

# Ver uso de inodes no sistema de arquivos
df -i
# Filesystem      Inodes  IUsed   IFree IUse% Mounted on
# /dev/sda1      6553600 234871 6318729    4% /
Analogia: Ficha de biblioteca

Pense no inode como uma ficha de biblioteca. A ficha contém todas as informações do livro: autor, páginas, data de aquisição, localização na estante (blocos no disco). O título do livro (nome do arquivo) fica no catálogo (diretório), que aponta para a ficha. Você pode colocar o mesmo livro em múltiplos catálogos com nomes diferentes — é isso que são os hard links.

Erros comuns

"Copiar um arquivo cria um inode novo" — sim, cp cria um inode e blocos de dados novos. Mas mv dentro do mesmo sistema de arquivos apenas renomeia a entrada no diretório — o inode não muda.

"Discos grandes nunca ficam sem inodes" — errado. Um disco pode ter espaço livre mas estar sem inodes disponíveis, impossibilitando criar novos arquivos. Acontece quando há milhões de arquivos pequenos (ex: cache de email, npm modules).

🃏 Flashcards

📝 Quiz: Módulo 02