Pular para conteúdo

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

# 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:

source ~/.bashrc

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 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

  1. Organize desde o início: Crie uma estrutura de diretórios lógica antes de começar
  2. Nomeie claramente: Use nomes descritivos (analise_temperatura_2024.py é melhor que script.py)
  3. Use datas: Inclua timestamps em nomes de diretórios de resultados
  4. Limpe regularmente: Remova arquivos temporários e intermediários desnecessários
  5. Documente: Mantenha um README em cada projeto explicando a estrutura
  6. Verifique quotas: Monitore seu uso de disco regularmente
  7. 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

# Verificar permissões
ls -l arquivo

# Corrigir se for seu arquivo
chmod u+w arquivo

Diretório não vazio

# Se rmdir não funciona:
ls -la pasta/  # Ver o que está dentro
rm -r pasta/   # Remover com conteúdo

Suporte

Para mais informações ou problemas, consulte: