DEE355 – Sistemas Operacionais

Prática: Comandos Linux e Sistemas de Arquivos

1. Introdução

Este material cobre comandos Linux para manipulação de arquivos, sistemas de arquivos (ext4, ReiserFS, etc.), montagem de dispositivos, particionamento com fdisk e GParted, além de exercícios práticos e interativos.

Pré-requisitos
  1. Terminal Linux (nativo, VM ou WSL)
  2. Privilégios de root para alguns comandos
  3. Pendrive para prática de montagem
  4. Ferramentas instaladas: sudo apt install gparted fdisk

2. Sistemas de Arquivos

2.1 Tipos de Sistemas de Arquivos

Os sistemas de arquivos organizam dados em dispositivos de armazenamento. No Linux, os mais comuns são:

SistemaDescriçãoVantagensDesvantagens
ext4Padrão do Linux, com journalingEstável, amplo suporteMenos recursos avançados
ReiserFSOtimizado para arquivos pequenosAlta performanceMenos usado, suporte limitado
XFSAlta performance, grandes volumesEscalávelComplexo para recuperação
BtrfsModerno, com snapshots e RAIDRecursos avançadosEstabilidade em evolução
FAT32Compatível com múltiplos SOsPortabilidadeLimite de 4GB por arquivo
NTFSUsado no Windows, suportado no LinuxSuporte a arquivos grandesMenor performance no Linux

2.2 Montagem de Dispositivos

lsblk
Lista dispositivos de bloco
lsblk [opções]
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 500G 0 disk
└─sda1 8:1 0 500G 0 part /
sdb 8:16 1 16G 0 disk
└─sdb1 8:17 1 16G 0 part
mount
Monta um sistema de arquivos
mount -t tipo dispositivo diretório
$ sudo mount -t vfat /dev/sdb1 /mnt/pendrive
umount
Desmonta um sistema de arquivos
umount diretório_ou_dispositivo
$ sudo umount /mnt/pendrive
Prática: Montar Pendrive
  1. Insira um pendrive e identifique-o com lsblk
  2. Crie um ponto de montagem: sudo mkdir /mnt/pendrive
  3. Monte o pendrive: sudo mount /dev/sdX1 /mnt/pendrive (substitua sdX1)
  4. Liste os arquivos: ls /mnt/pendrive
  5. Desmonte: sudo umount /mnt/pendrive

2.3 Particionamento e Verificação

fdisk
Gerencia tabelas de partição
fdisk dispositivo
$ sudo fdisk /dev/sdb
(use 'm' para ajuda, 'n' para nova partição, 'w' para salvar)

Atenção: Use com cuidado, alterações podem apagar dados!

fsck
Verifica e repara sistemas de arquivos
fsck [opções] dispositivo
$ sudo fsck /dev/sdb1

Atenção: O dispositivo não deve estar montado.

Prática: Particionamento com fdisk
  1. Insira um pendrive e identifique-o com lsblk
  2. Execute sudo fdisk /dev/sdX (substitua sdX)
  3. Crie uma nova partição primária com n, tipo p
  4. Salve com w
  5. Formate como ext4: sudo mkfs.ext4 /dev/sdX1
  6. Verifique com sudo fsck /dev/sdX1

2.4 Gerenciamento com GParted

GParted é uma ferramenta gráfica para gerenciar partições.

Prática: Usar GParted
  1. Instale: sudo apt install gparted
  2. Execute: sudo gparted
  3. Selecione um dispositivo (ex.: /dev/sdb)
  4. Crie uma partição FAT32 ou ext4
  5. Aplique as alterações e verifique com lsblk

Atenção: Evite alterar o disco principal!

4. Manipulação de Arquivos e Diretórios

touch
Cria arquivo vazio ou atualiza timestamps
touch arquivo
$ touch relatorio.txt
mkdir
Cria diretórios
mkdir [opções] diretório
$ mkdir projetos
$ mkdir -p projetos/2024/janeiro
cp
Copia arquivos/diretórios
cp [opções] origem destino
$ cp arquivo.txt backup/
$ cp -r diretorio/ backup/
mv
Move/renomeia arquivos/diretórios
mv origem destino
$ mv arquivo.txt novo.txt
rm
Remove arquivos/diretórios
rm [opções] arquivo
$ rm arquivo.txt
$ rm -r diretorio/
$ rm -f arquivo.txt

Atenção: Remove permanentemente!

rmdir
Remove diretórios vazios
rmdir diretório
$ rmdir vazio/
Prática: Manipulação
  1. Crie um diretório: mkdir aula_pratica
  2. Entre no diretório: cd aula_pratica
  3. Crie três arquivos: touch arquivo1.txt arquivo2.txt arquivo3.txt
  4. Renomeie: mv arquivo1.txt dados.txt
  5. Crie um subdiretório backup e copie os arquivos para ele
  6. Remova os arquivos originais (mantenha o backup)

5. Visualização e Edição de Arquivos

cat
Exibe conteúdo de arquivos
cat arquivo
$ cat arquivo.txt
less
Visualiza arquivos paginados
less arquivo
$ less /var/log/syslog
more
Visualiza arquivos paginados (menos recursos que less)
more arquivo
$ more arquivo.txt
head
Mostra primeiras linhas
head [opções] arquivo
$ head -n 5 arquivo.txt
tail
Mostra últimas linhas
tail [opções] arquivo
$ tail -n 10 /var/log/syslog
$ tail -f /var/log/syslog
nano
Editor de texto simples
nano arquivo
$ nano arquivo.txt
vim
Editor de texto avançado
vim arquivo
$ vim arquivo.txt

6. Comparação de Arquivos

diff
Compara diferenças entre arquivos
diff [opções] arquivo1 arquivo2
$ diff arquivo1.txt arquivo2.txt
cmp
Compara arquivos byte a byte
cmp [opções] arquivo1 arquivo2
$ cmp arquivo1.txt arquivo2.txt

7. Sincronização e Backup

rsync
Sincroniza arquivos/diretórios
rsync [opções] origem destino
$ rsync -avz projetos/ /mnt/backup/
scp
Copia arquivos via SSH
scp arquivo user@host:/destino
$ scp arquivo.txt user@192.168.1.100:/home/user/

8. Gerenciamento de Permissões

chmod
Altera permissões
chmod [opções] permissões arquivo
$ chmod 755 script.sh
$ chmod u+x arquivo.txt

Permissões numéricas:

  • 4 = Leitura (r)
  • 2 = Escrita (w)
  • 1 = Execução (x)
chown
Altera dono/grupo
chown [opções] dono:grupo arquivo
$ chown usuario:grupo arquivo.txt
Prática: Permissões
  1. Crie um arquivo: touch teste.txt
  2. Verifique permissões: ls -l teste.txt
  3. Altere para 640: chmod 640 teste.txt
  4. Adicione execução ao dono: chmod u+x teste.txt
  5. Remova escrita do grupo: chmod g-w teste.txt
  6. Tente mudar o dono (com sudo): sudo chown root teste.txt

9. Compactação de Arquivos

tar
Empacota arquivos
tar [opções] arquivo.tar arquivos
$ tar -cvzf backup.tar.gz projetos/
zip/unzip
Compacta/descompacta .zip
zip arquivo.zip arquivos
unzip arquivo.zip
$ zip -r backup.zip projetos/

10. Busca de Arquivos

find
Busca arquivos por critérios
find [diretório] [critérios]
$ find /home -name "*.txt"
locate
Busca rápida em banco de dados
locate [opções] padrão
$ locate -i documento
grep
Busca padrões em arquivos
grep [opções] padrão [arquivos]
$ grep -r "erro" /var/log/

11. Recuperação de Arquivos no Linux

A recuperação de arquivos é um processo crítico quando ocorrem exclusões acidentais ou corrupção de dados. O Linux oferece várias ferramentas poderosas para esta finalidade.

11.1 Quando a Recuperação é Possível

Os arquivos podem ser recuperados quando:

  • Foram excluídos mas o espaço não foi sobrescrito
  • O sistema de arquivos está corrompido mas o disco está intacto
  • A partição foi formatada mas os dados não foram totalmente sobrescritos

Importante: Quanto menos operações forem feitas no disco após a perda, maiores as chances de recuperação.

testdisk
Ferramenta poderosa para recuperar partições perdidas e arquivos apagados
testdisk [dispositivo]
$ sudo testdisk /dev/sda1

Principais recursos:

  • Recupera partições perdidas
  • Repara tabelas de partição corrompidas
  • Recupera setores de boot
  • Funciona com diversos sistemas de arquivos (FAT, NTFS, ext2/3/4)
photorec
Ferramenta irmã do testdisk focada em recuperar arquivos (fotos, documentos, etc)
photorec [dispositivo]
$ sudo photorec /dev/sdb1

Características:

  • Recupera por assinatura de arquivos (não depende do sistema de arquivos)
  • Reconhece mais de 480 formatos de arquivos
  • Pode recuperar mesmo de discos formatados
extundelete
Específico para sistemas de arquivos ext3/ext4
extundelete [opções] dispositivo
$ sudo extundelete /dev/sda1 --restore-all
$ sudo extundelete /dev/sda1 --restore-file caminho/arquivo

Funcionalidades:

  • Recupera arquivos excluídos
  • Restaura arquivos específicos ou todo o sistema de arquivos
  • Mostra arquivos recuperáveis sem restaurar
ddrescue
Ferramenta para recuperação de discos danificados
ddrescue [opções] entrada saida [arquivo_log]
$ sudo ddrescue /dev/sdb disco.img log.txt

Vantagens:

  • Tenta recuperar setores danificados
  • Pode pular blocos ruins e voltar depois
  • Mantém log do progresso para continuar interrompido
Exercício Prático: Recuperação de Arquivos

ATENÇÃO: Estes exercícios devem ser feitos em um ambiente controlado para não afetar dados reais.

  1. Preparação:
    1. Crie uma imagem de disco para testes: dd if=/dev/zero of=disco_teste.img bs=1M count=100
    2. Formate com ext4: mkfs.ext4 disco_teste.img
    3. Monte a imagem: sudo mount -o loop disco_teste.img /mnt
    4. Crie alguns arquivos dentro do sistema montado
  2. Simulação de perda:
    1. Exclua alguns arquivos: rm /mnt/arquivo*
    2. Desmonte o sistema: sudo umount /mnt
  3. Recuperação:
    1. Tente recuperar com extundelete: sudo extundelete disco_teste.img --restore-all
    2. Verifique os arquivos recuperados no diretório RECOVERED_FILES/
  4. Para prática adicional:
    1. Repita o processo usando photorec para recuperar arquivos específicos
    2. Experimente testdisk para simular recuperação de partição

11.2 Boas Práticas para Recuperação

  • Pare de usar o disco imediatamente após perceber a perda de dados
  • Se possível, trabalhe com uma imagem do disco em vez do original
  • Não grave os dados recuperados no mesmo disco de origem
  • Para sistemas críticos, considere um profissional especializado

11.3 Prevenção de Perda de Dados

  • Mantenha backups regulares (3-2-1: 3 cópias, 2 mídias, 1 off-site)
  • Use sistemas de arquivos com journaling (ext4, XFS, etc.)
  • Implemente snapshots para sistemas importantes
  • Considere soluções RAID para redundância

12. Sistemas RAID

RAID (Redundant Array of Independent Disks) é uma tecnologia que combina múltiplos discos físicos em uma única unidade lógica para melhorar desempenho, redundância ou ambos.

12.1 Níveis de RAID Comuns

Nível Descrição Mínimo de Discos Vantagens Desvantagens Uso Recomendado
RAID 0 Striping (distribuição de dados) 2 Máximo desempenho Sem redundância - falha de um disco perde todos os dados Dados temporários ou não críticos que requerem alta velocidade
RAID 1 Mirroring (espelhamento) 2 Redundância total - tolera falha de n-1 discos Capacidade útil reduzida à metade Sistemas críticos onde a disponibilidade é essencial
RAID 5 Striping com paridade distribuída 3 Bom equilíbrio entre desempenho, capacidade e redundância Desempenho de escrita reduzido devido ao cálculo de paridade Armazenamento geral com boa relação custo-benefício
RAID 6 Striping com paridade dupla 4 Tolerância a falhas de até 2 discos Overhead maior que RAID 5 (mais capacidade para paridade) Ambientes onde a disponibilidade é crítica e discos são grandes
RAID 10 Combina mirroring e striping 4 Alto desempenho e boa tolerância a falhas Capacidade útil reduzida à metade Bancos de dados e aplicações críticas de alto desempenho

12.2 Implementação de RAID no Linux

No Linux, o RAID pode ser implementado via software (usando mdadm) ou via hardware (com controladoras dedicadas).

mdadm
Ferramenta para gerenciar arrays RAID por software
mdadm [opções] dispositivo [discos]
# Criar RAID 1 com 2 discos
$ sudo mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sdb /dev/sdc

Operações comuns:

  • --create: Cria um novo array RAID
  • --detail: Mostra informações sobre um array
  • --add: Adiciona um disco a um array existente
  • --remove: Remove um disco de um array
  • --fail: Marca um disco como falho
Monitoramento
Comandos para monitorar o status do RAID
cat /proc/mdstat
mdadm --detail /dev/mdX
$ cat /proc/mdstat
Personalities : [raid1]
md0 : active raid1 sdc[1] sdb[0]
1047552 blocks super 1.2 [2/2] [UU]

12.3 RAID por Software vs Hardware

Característica Software RAID Hardware RAID
Custo Grátis (incluído no sistema operacional) Requer controladora dedicada (custos adicionais)
Desempenho Depende da CPU do sistema Processamento dedicado na controladora
Portabilidade Pode ter problemas entre sistemas diferentes Depende da controladora específica
Configuração Flexível, pode ser modificada facilmente Geralmente requer reinicialização para alterações
BBU (Battery Backup Unit) Não disponível Disponível em controladoras enterprise
Exercício Prático: Configurando RAID no Linux

Nota: Este exercício pode ser realizado com discos virtuais para prática.

  1. Preparação:
    1. Crie discos virtuais para teste:
      $ dd if=/dev/zero of=/tmp/disk1.img bs=1M count=100
      $ dd if=/dev/zero of=/tmp/disk2.img bs=1M count=100
    2. Associe os arquivos a dispositivos de loopback:
      $ sudo losetup /dev/loop1 /tmp/disk1.img
      $ sudo losetup /dev/loop2 /tmp/disk2.img
  2. Criação de RAID 1:
    1. Crie o array:
      $ sudo mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/loop1 /dev/loop2
    2. Verifique o status:
      $ cat /proc/mdstat
      $ sudo mdadm --detail /dev/md0
  3. Usando o RAID:
    1. Crie um sistema de arquivos:
      $ sudo mkfs.ext4 /dev/md0
    2. Monte o dispositivo:
      $ sudo mkdir /mnt/raidtest
      $ sudo mount /dev/md0 /mnt/raidtest
  4. Simulação de falha:
    1. Marque um disco como falho:
      $ sudo mdadm /dev/md0 --fail /dev/loop1
    2. Remova o disco:
      $ sudo mdadm /dev/md0 --remove /dev/loop1
    3. Adicione um novo disco (simulado):
      $ sudo mdadm /dev/md0 --add /dev/loop1
    4. Monitore a reconstrução:
      $ watch cat /proc/mdstat

12.4 Considerações sobre RAID

Monitoramento e Manutenção
Boas práticas para sistemas RAID
Monitoramento regular
Substituição rápida de discos falhos
Testes periódicos

Recomendações importantes:

  • Implemente monitoramento para alertas de falhas
  • Substitua discos falhos imediatamente
  • RAID não substitui backup - sempre mantenha backups
  • Teste periodicamente o processo de reconstrução
  • Considere a compatibilidade ao migrar entre sistemas

13. Exercícios Práticos

Desafio: Configuração de Pendrive
  1. Insira um pendrive e identifique-o com lsblk
  2. Formate como ext4 usando GParted ou mkfs.ext4
  3. Monte e crie um arquivo de teste
  4. Configure permissões 660 para o arquivo
  5. Crie um backup compactado do conteúdo

14. Quiz de Verificação

1. Qual sistema de arquivos é mais adequado para pendrives devido à compatibilidade?

  • a) ext4
  • b) FAT32
  • c) ReiserFS
  • d) Btrfs

2. Qual comando monta um pendrive em /mnt/pendrive?

  • a) umount /mnt/pendrive
  • b) mount /dev/sdb1 /mnt/pendrive
  • c) lsblk /mnt/pendrive
  • d) chmod /mnt/pendrive

3. Qual comando verifica a integridade de um sistema de arquivos?

  • a) df -h
  • b) du -sh
  • c) fsck
  • d) chmod

4. O que faz o comando tail -f?

  • a) Mostra as primeiras linhas de um arquivo
  • b) Compara dois arquivos
  • c) Monitora alterações em tempo real
  • d) Edita um arquivo

5. Qual comando cria diretórios aninhados?

  • a) mkdir
  • b) mkdir -p
  • c) touch
  • d) rmdir

15. Referências