Gerenciamento de arquivos e diretórios¶
Visão geral¶
O gerenciamento eficiente de arquivos e diretórios é fundamental para trabalhar no cluster HPC. Este guia apresenta os comandos e práticas essenciais para criar, organizar e gerenciar seus dados no cluster.
Conceitos básicos de Linux
Se você é novo no ambiente Linux, recomendamos familiarizar-se com os comandos básicos de terminal antes de prosseguir.
Estrutura de diretórios do cluster¶
Antes de criar arquivos, entenda onde armazená-los:
| Diretório | Finalidade | Tamanho | Melhor uso |
|---|---|---|---|
/home/$USER | Arquivos pessoais | 20 GB | Scripts, configurações pessoais |
/scratch/projetos/<projeto> | Trabalho de projeto | 10 TB (por grupo) | Entrada/saída de jobs, dados do projeto |
/tmp | Temporário local | 1.7 TB | Arquivos temporários durante execução |
Quotas de armazenamento
Para informações sobre limites de armazenamento e retenção de dados, entre em contato com hpc@fieb.org.br.
Comandos básicos¶
Navegar entre diretórios¶
# Verificar em qual diretório você está
pwd
# Listar conteúdo do diretório atual
ls
# Listar com detalhes (permissões, tamanho, data)
ls -lh
# Listar incluindo arquivos ocultos
ls -la
# Ir para um diretório
cd /scratch/projetos/<seu_projeto>
# Voltar ao diretório anterior
cd -
# Ir para seu diretório home
cd ~
# ou simplesmente
cd
Criar diretórios¶
# Criar um diretório
mkdir seu_projeto
# Criar múltiplos níveis de diretórios de uma vez
mkdir -p /scratch/projetos/<seu_projeto>/dados/resultados
# Criar vários diretórios ao mesmo tempo
mkdir experimento1 experimento2 experimento3
Exemplo de estrutura organizada:
# Criar estrutura completa para um projeto
mkdir -p /scratch/projetos/<seu_projeto>/{dados,scripts,resultados,logs}
# Ou com subdiretório por usuário:
mkdir -p /scratch/projetos/<seu_projeto>/$USER/{dados,scripts,resultados,logs}
# Resultado:
# /scratch/projetos/<seu_projeto>/
# ├── dados/
# ├── scripts/
# ├── resultados/
# └── logs/
Copiar arquivos e diretórios¶
# Copiar arquivo
cp arquivo_original.py arquivo_copia.py
# Copiar arquivo para outro diretório
cp script.py /scratch/projetos/<seu_projeto>/scripts/
# Copiar diretório completo (recursivo)
cp -r pasta_original/ pasta_copia/
# Copiar preservando metadados (timestamps, permissões)
cp -a dados_importantes/ backup_dados/
# Copiar múltiplos arquivos para um diretório
cp arquivo1.txt arquivo2.txt arquivo3.txt /scratch/projetos/<seu_projeto>/dados/
Mover e renomear¶
# Renomear arquivo
mv nome_antigo.py nome_novo.py
# Mover arquivo para outro diretório
mv resultado.csv /scratch/projetos/<seu_projeto>/resultados/
# Mover diretório
mv pasta_antiga/ /scratch/projetos/<seu_projeto>/nova_localizacao/
# Mover múltiplos arquivos
mv *.txt /scratch/projetos/<seu_projeto>/textos/
Remover arquivos e diretórios¶
Atenção: Remoção é permanente
Não há lixeira no cluster. Arquivos removidos não podem ser recuperados.
# Remover arquivo
rm arquivo.txt
# Remover com confirmação (recomendado)
rm -i arquivo_importante.dat
# Remover múltiplos arquivos
rm arquivo1.txt arquivo2.txt
# Remover todos os arquivos .tmp do diretório atual
rm *.tmp
# Remover diretório vazio
rmdir pasta_vazia/
# Remover diretório com conteúdo (recursivo)
rm -r pasta_com_arquivos/
# Remover forçadamente (use com MUITO cuidado!)
rm -rf pasta/ # NÃO recomendado sem verificação prévia
Dica de segurança:
# Sempre verifique antes de remover
ls *.tmp # Ver o que será removido
rm -i *.tmp # Remover com confirmação para cada arquivo
Gerenciamento de espaço¶
Verificar uso de disco¶
# Verificar tamanho de um diretório de projeto
du -sh /scratch/projetos/<seu_projeto>/
# Listar tamanho de todos os subdiretórios
du -h --max-depth=1 /scratch/projetos/<seu_projeto>/
# Encontrar os 10 maiores diretórios no projeto
du -h /scratch/projetos/<seu_projeto>/ | sort -rh | head -10
# Verificar espaço disponível no filesystem
df -h /scratch
# Verificar sua quota (se configurado)
quota -s
Exemplo de saída:
$ du -h --max-depth=1 /scratch/projetos/simulacao_fluidos/
45G /scratch/projetos/simulacao_fluidos/dados
12G /scratch/projetos/simulacao_fluidos/resultados
2.3G /scratch/projetos/simulacao_fluidos/scripts
59G /scratch/projetos/simulacao_fluidos/
Encontrar e limpar arquivos grandes¶
# Encontrar arquivos maiores que 1GB no projeto
find /scratch/projetos/<seu_projeto>/ -type f -size +1G -exec ls -lh {} \;
# Encontrar arquivos modificados há mais de 30 dias
find /scratch/projetos/<seu_projeto>/ -type f -mtime +30
# Encontrar e listar arquivos .log grandes
find /scratch/projetos/<seu_projeto>/ -name "*.log" -size +100M -exec ls -lh {} \;
# Encontrar arquivos temporários antigos para remover
find /scratch/projetos/<seu_projeto>/ -name "*.tmp" -mtime +7 -ls
Organização de dados de jobs¶
Estrutura recomendada para projetos¶
# Criar estrutura organizada
mkdir -p /scratch/projetos/<seu_projeto>/{entrada,saida,logs,scripts}
# Estrutura resultante:
/scratch/projetos/<seu_projeto>/
├── entrada/ # Dados de entrada
├── saida/ # Resultados dos jobs
├── logs/ # Arquivos de log e output do SLURM
└── scripts/ # Scripts de submissão e análise
Gerenciar outputs de jobs SLURM¶
No seu script SLURM, especifique onde os arquivos de saída devem ir:
#!/bin/bash
#SBATCH --job-name=minha_analise
#SBATCH --output=/scratch/projetos/<seu_projeto>/logs/job_%j.out
#SBATCH --error=/scratch/projetos/<seu_projeto>/logs/job_%j.err
# Criar diretório de saída se não existir
mkdir -p /scratch/projetos/<seu_projeto>/saida/
# Executar seu programa
python meu_script.py --output /scratch/projetos/<seu_projeto>/saida/resultados.csv
Organizar resultados por data¶
# Criar diretório com timestamp
DATA=$(date +%Y-%m-%d_%H-%M-%S)
mkdir -p /scratch/projetos/<seu_projeto>/resultados/$DATA
# Ou no script SLURM:
#!/bin/bash
#SBATCH --job-name=analise
#SBATCH --output=/scratch/projetos/<seu_projeto>/logs/analise_%j.out
OUTPUT_DIR="/scratch/projetos/<seu_projeto>/resultados/$(date +%Y-%m-%d_%H-%M-%S)"
mkdir -p $OUTPUT_DIR
python analise.py --output $OUTPUT_DIR/
Permissões de arquivos¶
Entender permissões¶
# Ver permissões de arquivos
ls -l
# Exemplo de saída:
# -rw-r--r-- 1 joao users 1024 Jan 15 10:30 arquivo.txt
# drwxr-xr-x 2 joao users 4096 Jan 15 10:31 pasta/
#
# Primeira coluna explica as permissões:
# d = diretório, - = arquivo regular
# rwx = read, write, execute para: dono, grupo, outros
Modificar permissões¶
# Tornar script executável
chmod +x meu_script.sh
# Dar permissão de escrita ao grupo
chmod g+w arquivo.txt
# Remover permissão de leitura para outros
chmod o-r dados_privados.csv
# Definir permissões específicas (modo numérico)
chmod 755 script.sh # rwxr-xr-x
chmod 644 dados.txt # rw-r--r--
chmod 700 privado/ # rwx------ (apenas dono)
Compressão de arquivos¶
Comprimir dados para economizar espaço¶
# Comprimir arquivo individual
gzip arquivo_grande.txt
# Resulta em: arquivo_grande.txt.gz
# Descomprimir
gunzip arquivo_grande.txt.gz
# Comprimir mantendo o original
gzip -k arquivo.txt
# Comprimir diretório completo (tar + gzip)
tar -czf projeto.tar.gz projeto/
# Descomprimir arquivo tar.gz
tar -xzf projeto.tar.gz
# Ver conteúdo sem descomprimir
tar -tzf projeto.tar.gz
# Comprimir com bzip2 (mais compressão, mais lento)
tar -cjf dados.tar.bz2 dados/
Exemplo prático:
# Antes de transferir resultados grandes
cd /scratch/$USER/
tar -czf resultados_2024.tar.gz resultados_2024/
# Agora transfira resultados_2024.tar.gz (muito menor)
Buscar arquivos¶
Encontrar arquivos por nome¶
# Procurar arquivo por nome exato
find /scratch/projetos/<seu_projeto>/ -name "resultado.csv"
# Procurar com padrão (case-insensitive)
find /scratch/projetos/<seu_projeto>/ -iname "*.txt"
# Procurar apenas diretórios
find /scratch/projetos/<seu_projeto>/ -type d -name "logs"
# Procurar apenas arquivos
find /scratch/projetos/<seu_projeto>/ -type f -name "*.py"
Buscar por conteúdo¶
# Procurar texto em arquivos
grep "erro" log.txt
# Buscar recursivamente em todos os arquivos
grep -r "ERRO" /scratch/projetos/<seu_projeto>/logs/
# Buscar ignorando maiúsculas/minúsculas
grep -i "warning" *.log
# Buscar e mostrar número da linha
grep -n "sucesso" resultado.txt
# Buscar em arquivos específicos
grep "temperatura" *.csv
Dicas de produtividade¶
Uso de wildcards (curingas)¶
# * corresponde a qualquer sequência de caracteres
ls *.py # Todos os arquivos Python
rm temp_* # Remove arquivos começando com temp_
# ? corresponde a um único caractere
ls dados_?.csv # dados_1.csv, dados_2.csv, etc.
# [] corresponde a um caractere do conjunto
ls arquivo_[abc].txt # arquivo_a.txt, arquivo_b.txt, arquivo_c.txt
ls dados_[0-9].csv # dados_0.csv até dados_9.csv
Aliases úteis¶
Adicione ao seu ~/.bashrc:
# Aliases para comandos comuns
alias ll='ls -lh'
alias la='ls -lah'
alias ..='cd ..'
alias projeto='cd /scratch/projetos/<seu_projeto>'
alias du1='du -h --max-depth=1'
alias limpar_tmp='find /scratch/projetos/<seu_projeto>/ -name "*.tmp" -mtime +7 -delete'
Após adicionar, recarregue:
Trabalhar com múltiplos arquivos¶
# Renomear múltiplos arquivos (adicionar prefixo)
for arquivo in *.txt; do
mv "$arquivo" "processado_$arquivo"
done
# Copiar estrutura de diretórios (sem arquivos)
find /scratch/projetos/<seu_projeto>/ -type d -exec mkdir -p /scratch/projetos/<seu_projeto>_backup/{} \;
# Processar todos os arquivos .csv
for csv in *.csv; do
echo "Processando $csv..."
python analise.py "$csv"
done
Links simbólicos¶
Links simbólicos são atalhos para arquivos/diretórios em outros locais:
# Criar link simbólico
ln -s /scratch/projetos/<seu_projeto>/dados ~/dados_projeto
# Agora você pode acessar:
ls ~/dados_projeto
# Em vez de:
ls /scratch/projetos/<seu_projeto>/dados
# Verificar para onde um link aponta
ls -l ~/dados_projeto
# Remover link (não remove o original)
rm ~/dados_projeto
Uso prático:
# Link para projeto frequentemente acessado
ln -s /scratch/projetos/<seu_projeto> ~/projeto
# Link para diretório de resultados atual
ln -s /scratch/projetos/<seu_projeto>/resultados ~/resultados
Boas práticas¶
- Organize desde o início: Crie uma estrutura de diretórios lógica antes de começar
- Nomeie claramente: Use nomes descritivos (
analise_temperatura_2024.pyé melhor quescript.py) - Use datas: Inclua timestamps em nomes de diretórios de resultados
- Limpe regularmente: Remova arquivos temporários e intermediários desnecessários
- Documente: Mantenha um README em cada projeto explicando a estrutura
- Verifique quotas: Monitore seu uso de disco regularmente
- Backup importante: Transfira dados importantes para seu computador local
Exemplo de fluxo de trabalho completo¶
# 1. Criar estrutura do projeto
mkdir -p /scratch/projetos/analise_clima/{dados,scripts,resultados,logs}
# 2. Ir para o diretório
cd /scratch/projetos/analise_clima
# 3. Copiar dados de entrada
cp ~/dados_brutos/*.csv dados/
# 4. Criar script de submissão
cat > scripts/submit.sh << 'EOF'
#!/bin/bash
#SBATCH --job-name=clima
#SBATCH --output=/scratch/projetos/analise_clima/logs/job_%j.out
#SBATCH --error=/scratch/projetos/analise_clima/logs/job_%j.err
#SBATCH --time=02:00:00
#SBATCH --cpus-per-task=4
module load python/3.10
python /scratch/projetos/analise_clima/scripts/analise.py
EOF
# 5. Tornar executável
chmod +x scripts/submit.sh
# 6. Submeter job
cd /scratch/projetos/analise_clima
sbatch scripts/submit.sh
# 7. Verificar resultados após execução
ls -lh resultados/
# 8. Comprimir e transferir
tar -czf resultados_clima.tar.gz resultados/
# Depois transfira usando scp (ver guia de transferência)
Problemas comuns¶
Quota excedida¶
Se você não consegue criar arquivos:
# Verificar uso
du -sh /scratch/projetos/<seu_projeto>/
quota -s
# Encontrar e remover arquivos grandes
find /scratch/projetos/<seu_projeto>/ -type f -size +1G -ls
Permissão negada¶
Diretório não vazio¶
Suporte¶
Para mais informações ou problemas, consulte: