Comece por aqui! - Linux

Comandos Linux para Análise e Gerenciamento de Arquivos

O Linux oferece um arsenal poderoso de ferramentas para manipulação e análise de arquivos. Este guia apresenta comandos fundamentais que toda profissional de TI e especialista em segurança cibernética deveria dominar.

Análise binária e engenharia reversa

Explorando arquivos binários

Todos os arquivos do sistema são armazenados como dados binários no disco rígido. Para examinar esses dados em formato hexadecimal:

user:$ hexdump file.bin                    #Dump hexadecimal básico
  • Usado para visualizar conteúdo de um arquivo binário em formato hexadecimal (base 16) e em caracteres legíveis (ASCII)
user:$ hexdump -C file.bin       #Formato canônico (hex + ASCII)
  • “-C” mostra o conteúdo do arquivo dividido em 16 bytes por linha e cria três colunas automáticas. A primeira coluna exibe a posição exata (o endereço do byte), a segunda mostra os dados em formato hexadecimal, e a terceira traz a tradução em texto comum (ASCII). Se um byte for um código de controle ou um caractere que não pode ser exibido na tela, o comando o substitui por um ponto (.). Isso evita que o terminal fique desconfigurado e permite que você identifique rapidamente qualquer texto ou padrão escondido no arquivo.
user:$ hexdump -n 100 file.bin    #Exibe apenas os primeiros 100 bytes
  • “-n 100" instrui o comando a ler e exibir apenas os primeiros 100 bytes do arquivo, interrompendo a leitura logo em seguida. Essa flag é útil para arquivos grandes,. Como o comando foi usado sem a flag “-C“, a saída padrão mostrará os dados agrupados em blocos de dois bytes no formato hexadecimal de duas colunas.

O comando strings na segurança cibernética

O comando strings é uma ferramenta fundamental na engenharia reversa e na análise de malware:

user:$ strings executable_file  #extrai strings legíveis
user:$ strings -n 8 file.bin  #mostra apenas strings de 8+ caracteres
user:$ strings -o file.bin  #mostra o offset de cada string

Exemplo prático:

user:$ strings -n 6 /usr/bin/passwd | grep -i password

Esse comando extrai todas as sequências de caracteres legíveis de um arquivo binário, sendo inestimável para descobrir textos embutidos, URLs ou dados de configuração em executáveis.

Redirecionamento de arquivos e gerenciamento de saída

Criando e redirecionando a saída

O símbolo > redireciona a saída para um arquivo:

user:$ echo "kidcoders-is-amazing" > truths.log #Sobrescreve o arquivo 
user:$ echo "additional-truth" >> truths.log #Anexa ao arquivo 
user:$ ls -la > directory_listing.txt #Salva a saída do comando

Tratamento de erros com redirecionamento

O Linux usa fluxos de saída diferentes. O fluxo 2 representa os erros:

<command> 2>/dev/null     #Não mostra os erros, ou informações não encontradas
<command> >/dev/null 2>&1   #Não mostra nenhuma saída, oculta tudo
find / -name "*.txt" 2>/dev/null #Busca os arquivos e ignora os erros de permissão

Gerenciamento de arquivos de log

Navegando pelos arquivos de log

Os logs do sistema normalmente ficam armazenados em /var/log:

cd /var/log               #Navega até o diretório de logs
ls /var/log       #Lista todos os arquivos de log com detalhes
du -sh /var/log/*     #Mostra o tamanho de cada arquivo de log

Removendo arquivos

Para apagar arquivos com segurança:

rm filename                       #Apaga um único arquivo
rm -i filename          #Remoção interativa (pede confirmação)
rm -r directory/             #Apaga o diretório recursivamente
rm *.log                     #Apaga todos os arquivos .log<br>

Processamento e análise de texto

Visualizando o conteúdo de arquivos

Primeiras linhas com head:

head file.txt                 #Mostra as primeiras 10 linhas
head -n 5 file.txt            #Mostra as primeiras 5 linhas
head -c 100 file.txt      #Mostra os primeiros 100 caracteres

Últimas linhas com tail:

tail file.txt                  #Mostra as últimas 10 linhas
tail -n 5 file.txt              #Mostra as últimas 5 linhas
tail -f file.txt                #Acompanha as atualizações do arquivo (tempo real)
sudo tail -f /var/log/syslog    #Monitora os logs do sistema em tempo real

Exibição invertida com tac:

tac file.txt              # Exibe o conteúdo do arquivo em ordem reversa

Numeração de linhas

nl file.txt                         # Adiciona números de linha à saída
nl -b a file.txt                    # Numera todas as linhas (incluindo as vazias)
nl -w 3 file.txt                    # Define a largura do número em 3 caracteres

Automação e operações em lote

Geração de arquivos com loops

Crie múltiplas entradas de log com eficiência:

# Loop básico - gera 50 eventos numerados
for i in {1..50}do echo "Event $i" >> done
# Loop com marcações de data e hora
for i in {1..10}; do echo "$(date): Event $i" >> timestamped_events.log; done
# Gera dados de teste
for i in {1..100}; do echo "User$i,user$i@domain.com,$(( RANDOM % 100 + 18 ))" >> users.csv; done
# Cria múltiplos arquivos
for i in {1..5}; do echo "Content for file $i" > "test_file_$i.txt"; done

Permissões de arquivos e segurança

Encontrando arquivos por permissões

find . -perm 777 -type f                        # Arquivos com permissão total
find . -perm 755 -type d                        # Diretórios com permissões padrão
find /home -perm 666 -type f 2>/dev/null      # Arquivos legíveis/graváveis por todos
find . -name "*.sh" -perm +111                  # Scripts shell executáveis

Decomposição dos números de permissão:

  • 7 = rwx (leitura, escrita, execução)
  • 6 = rw- (leitura, escrita)
  • 5 = r-x (leitura, execução)
  • 4 = r– (somente leitura)

Processamento avançado de texto

Combinando comandos: cat e grep

cat gile.txt                               #Uso básico, mostra o conteúdo do arquivo sem abrir ele
cat file.txt | grep "pattern"              #Filtra o conteúdo por padrão
cat *.log | grep "ERROR"                   #Encontra erros em todos os arquivos de log
cat file.txt | grep -i "case_insensitive"  #Busca sem diferenciar maiúsculas
cat file.txt | grep -v "exclude_this"      #Inverte a correspondência (exclui o padrão)
cat file.txt | grep -n "pattern"           #Mostra os números das linhas
# Flags avançadas do grep
grep -r "pattern" /var/log/                #Busca recursiva no diretório
grep -A 3 "ERROR" logfile.txt              #Mostra 3 linhas depois da ocorrência
grep -B 2 "ERROR" logfile.txt              #Mostra 2 linhas antes da ocorrência
grep -w "word" file.txt                    #Corresponde apenas palavras inteiras

Exemplos práticos:

cat /var/log/auth.log | grep "Failed password" | head -10
ps aux | grep"apache"                          # Encontra processos do Apache
cat /etc/passwd | grep -E "/bin/(bash|sh)$"     # Encontra usuários com acesso a shell

Edição de fluxos com sed

O comando sed é essencial para modificações de arquivos em larga escala:


sed 's/old/new/' file.txt          #Substitui a primeira ocorrência por linha

sed 's/old/new/g' file.txt         #Substitui todas as ocorrências (global)

sed 's/old/new/gi' file.txt         #Global, sem diferenciar maiúsculas

sed '5d' file.txt                   #Apaga a linha 5

sed '/pattern/d' file.txt           #Apaga as linhas que correspondem ao padrão

sed '/^$/d'file.txt                 #Apaga as linhas vazias

sed -i 's/old/new/g' file.txt       #Modifica o arquivo diretamente

sed -i.bak 's/old/new/g' file.txt   #Cria backup antes de modificar

Exemplos práticos:

sed -i 's/DEBUG/INFO/g' application.conf        # Muda o nível de log
sed 's/^/[PROCESSED] /' logfile.txt             # Adiciona prefixo a cada linha
sed 's/[[:space:]]*$//' file.txt                # Remove espaços em branco no final<br>

Expressões regulares

As expressões regulares (regex) oferecem correspondência de padrões poderosa:

grep "^start" file.txt    #Linhas que começam com "start"
grep "end$" file.txt   #Linhas que terminam com "end"
grep "[0-9]" file.txt   #Qualquer dígito
grep "[a-zA-Z]" file.txt   #Qualquer letra

#Padrões avançados
grep -E "word1|word2" file.txt   #word1 ou word2
grep -E "[0-9]{3}" file.txt      #Exatamente 3 dígitos
grep -E "\b[0-9]{1,3}(\.[0-9]{1,3}){3}\b" file.txt  #Endereços IP

Conclusão

Esses comandos do Linux formam a base de um gerenciamento e uma análise de arquivos eficazes. Seja para diagnosticar problemas do sistema, analisar logs ou conduzir investigações de segurança, dominar essas ferramentas vai aumentar significativamente sua produtividade e suas capacidades.

Lembre-se de sempre testar os comandos em um ambiente seguro antes de aplicá-los em sistemas de produção, especialmente ao lidar com modificações e exclusões de arquivos.