Pular para o conteúdo principal

Lab 3.3 - Busca de Arquivos e Links

Objetivos​

Ao final deste lab, você será capaz de:

  • Buscar arquivos com find e locate
  • Criar links simbólicos
  • Criar links duros
  • Entender as diferenças entre os tipos de links
  • Utilizar links em cenários práticos

Pré-requisitos​

  • Ubuntu 24.04 instalado
  • Terminal aberto
  • Acesso de usuário normal

Exercício 1: Busca com find​

Etapa 1: Busca Básica​

# Criar arquivos de teste
mkdir -p ~/test-search/{docs,scripts,data}
touch ~/test-search/docs/{file1.txt,file2.txt}
touch ~/test-search/scripts/{script1.sh,script2.sh}
touch ~/test-search/data/{data1.csv,data2.csv}

# Buscar por nome
find ~/test-search -name "file1.txt"

# Buscar com wildcards
find ~/test-search -name "*.txt"

# Buscar por tipo
find ~/test-search -type f # Apenas arquivos
find ~/test-search -type d # Apenas diretórios

Etapa 2: Busca Avançada​

# Por tamanho
find ~/test-search -size +1M # Mais de 1MB
find ~/test-search -size -1k # Menos de 1KB

# Por data de modificação
find ~/test-search -mtime -1 # Modificados nas últimas 24h
find ~/test-search -mtime +7 # Modificados há mais de 7 dias

# Por permissões
find ~/test-search -perm 755

# Combinações
find ~/test-search -name "*.txt" -mtime -1

Etapa 3: Executar Comandos​

# Encontrar e remover (atenção!)
find ~/test-search -name "*.tmp" -delete

# Encontrar e exibir
find ~/test-search -name "*.txt" -exec ls -lh {} \;

# Encontrar e contar
find ~/test-search -type f | wc -l

Exercício 2: locate​

Etapa 1: Instalação e Configuração​

# Instalar locate
sudo apt update
sudo apt install mlocate

# Atualizar o banco de dados
sudo updatedb

# Buscar
locate file1.txt

# Busca case-insensitive
locate -i file

Etapa 2: Limitar Resultados​

# Limitar o número de resultados
locate file | head -10

# Contar
locate file | wc -l

# Criar um arquivo
echo "Conteúdo original" > ~/original.txt

# Criar um link simbólico
ln -s ~/original.txt ~/link-simbolico.txt

# Ver o link
ls -l ~/link-simbolico.txt
# Note a seta: link-simbolico.txt -> /home/user/original.txt

# Ler via o link
cat ~/link-simbolico.txt
# Criar um link para um diretório
ln -s ~/test-search ~/link-diretorio

# Usar o link
ls ~/link-diretorio
cd ~/link-diretorio
cd ~/test-search

# Link absoluto
ln -s /home/$USER/original.txt link-absoluto.txt

# Link relativo
ln -s ../original.txt link-relativo.txt

# Ver a diferença
ls -l link-*.txt

# Criar um arquivo
echo "Conteúdo" > ~/arquivo-original.txt

# Criar um link duro
ln ~/arquivo-original.txt ~/link-duro.txt

# Ver os dois arquivos
ls -li ~/arquivo-original.txt ~/link-duro.txt
# Note: mesmo inode (primeiro número)
# Modificar via o link duro
echo "Novo conteúdo" >> ~/link-duro.txt

# Ver o arquivo original
cat ~/arquivo-original.txt # Conteúdo modificado!

# Contar os links
ls -l ~/arquivo-original.txt
# O número após as permissões = número de links duros
# Remover o arquivo "original"
rm ~/arquivo-original.txt

# O link duro ainda existe!
cat ~/link-duro.txt # Conteúdo ainda está lá

# Verificar os inodes
ls -li ~/link-duro.txt

Etapa 1: Teste de Remoção​

# Criar arquivo, link simbólico e link duro
echo "Test" > test.txt
ln -s test.txt link-sym.txt
ln test.txt link-duro.txt

# Remover o arquivo original
rm test.txt

# Testar o link simbólico
cat link-sym.txt # ❌ Erro: arquivo não encontrado

# Testar o link duro
cat link-duro.txt # ✅ Ainda funciona!
# Links duros não funcionam para:
# 1. Diretórios
# ln dir1 dir2 # ❌ Erro

# 2. Sistemas de arquivos diferentes
# ln /mnt/external/file.txt ~/link.txt # ❌ Erro se FS diferente

# 3. Links simbólicos podem atravessar FS
ln -s /mnt/external/file.txt ~/link-sym.txt # ✅ Funciona

Exercício 6: Casos de Uso Práticos​

Etapa 1: Scripts no PATH​

# Criar um script
cat > ~/meu-script.sh << 'EOF'
#!/bin/bash
echo "Script executado!"
EOF

chmod +x ~/meu-script.sh

# Criar um link em um diretório do PATH
sudo ln -s ~/meu-script.sh /usr/local/bin/meu-script

# Usar de qualquer lugar
meu-script

Etapa 2: Versões de Softwares​

# Simular versões
mkdir -p ~/app/{v1.0,v2.0}
echo "Versão 1.0" > ~/app/v1.0/app.txt
echo "Versão 2.0" > ~/app/v2.0/app.txt

# Link para versão atual
ln -s ~/app/v2.0 ~/app/current

# Usar
cat ~/app/current/app.txt

# Trocar de versão facilmente
rm ~/app/current
ln -s ~/app/v1.0 ~/app/current

Etapa 3: Configuração​

# Arquivo de config no home
echo "config=value" > ~/.myapp-config

# Link a partir de /etc
sudo ln -s ~/.myapp-config /etc/myapp-config

# Usar
cat /etc/myapp-config

Verificação​

Checklist​

Verifique se você consegue:

  • Buscar arquivos com find
  • Usar locate para busca rápida
  • Criar links simbólicos (ln -s)
  • Criar links duros (ln)
  • Entender as diferenças entre os dois tipos
  • Utilizar links em cenários práticos

Perguntas para Reflexão​

  1. Quando usar um link simbólico vs um link duro?

    • Simbólico: diretórios, arquivos em FS diferentes, versões
    • Duro: mesmo FS, backup de segurança
  2. Por que links duros compartilham o mesmo inode?

    • Eles apontam para os mesmos dados no disco
    • O arquivo só é removido quando todos os links são removidos
  3. Qual a diferença entre find e locate?

    • find: busca em tempo real, mais flexível
    • locate: banco de dados pré-indexado, mais rápido mas pode estar desatualizado

Próximos Passos​

  • Lab 3.4: Prática Completa
  • Capítulo 3.6: Busca de Arquivos
  • Capítulo 3.7: Links Simbólicos e Duros

Lab criado em: Dezembro 2024 - Testado no Ubuntu 24.04