Consultas Gerais do Sistema
# Exibir endereço IP
ip addr show
hostname -I
# Mostrar o caminho do diretório atual
pwd
# Buscar arquivos por padrão no diretório corrente
find / -name "*.pdf"
Gerenciamento de Processos
# Listar processos que correspondem a um padrão
ps -ef | grep teste
ps aux | grep teste
# Contar processos 'java' excluindo a própria busca
ps -ef | grep java | grep -v grep | wc -l
# Usar ferramentas específicas para Java
jps
pidof java
pgrep java
# Finalizar processos por nome
pkill nome_do_processo
# Finalizar processos contendo um padrão
pkill -f padrao
# Combinação complexa para finalizar processos
ps -ef | grep padrao | grep -v grep | awk '{print $2}' | xargs kill -9
Análise de Portas de Rede
# Linux: Visualizar portas em escuta e seus processos
ss -tnlp
# Filtrar por porta específica
ss -tnlp | grep :8080
# Exemplo com Windows (para referência)
netstat -ano | findstr ":8080"
Realização de Requisições HTTP
# Requisição GET simples
curl http://exemplo.com
# GET com parâmetros na URL
curl "http://exemplo.com/api/usuarios?id=123"
# GET com cabeçalhos personalizados
curl -H "Accept: application/json" http://exemplo.com/api/dados
# POST com dados de formulário
curl -X POST http://exemplo.com/api -d "chave1=valor1&chave2=valor2"
# POST com corpo JSON
curl -X POST -H "Content-Type: application/json" -d '{"chave1":"valor1"}' http://exemplo.com/api
# POST a partir de um arquivo JSON
curl -X POST -H "Content-Type: application/json" -d @dados.json http://exemplo.com/api
Verificação de Armazenamento
# Visualizar uso do sistema de arquivos
df -h -T
# Encontrar arquivos deletados ainda abertos por processos
find /proc/*/fd -ls 2>/dev/null | grep '(deleted)'
# Localizar arquivos maiores que 1GB
find . -type f -size +1G
# Listar os 10 maiores arquivos no diretório atual
find . -type f -exec du -sh {} + | sort -rh | head -n 10
# Ver tamanho de diretórios no diretório corrente
du -sh *
# Listar os 5 maiores subdiretórios
du -hd 1 | sort -rh | head -n 5
# Limpar conteúdo de um arquivo
truncate -s 0 nome_do_arquivo
# Informações da CPU
lscpu
cat /proc/cpuinfo
Monitoramento com o Comando top
O comando top fornece uma visão dinâmica e em tempo real dos processos do sistema e do consumo de recursos.
Cabeçalho do top (Estatísticas do Sistema)
top - 15:30:45 up 2 days, 3:45, 2 users, load average: 0.65, 0.42, 0.38
Tasks: 230 total, 1 running, 229 sleeping, 0 stopped, 0 zombie
%Cpu(s): 5.2 us, 2.1 sy, 0.0 ni, 92.5 id, 0.2 wa, 0.0 hi, 0.0 si, 0.0 st
MiB Mem : 15917.9 total, 8958.1 free, 3245.6 used, 3714.2 buff/cache
MiB Swap: 2048.0 total, 2048.0 free, 0.0 used. 11895.7 avail Mem
| Linha 1: Estado Geral | up 2 days, 3:45: Tempo de ativdiade do sistema. |
load average: 0.65, 0.42, 0.38: Carga média (1, 5 e 15 min). Idealmente, próximo ao número de núcleos da CPU. |
|---|---|---|
| Linha 2: Tarefas | 1 running: Processo usando CPU. |
0 zombie: Processos zumbis. Um número alto pode indicar problemas. |
| Linha 3: CPU (%) | id: Tempo ocioso. Baixo valor indica alta carga. |
wa: Espera por E/S. Alto valor sugere gargalo de disco/rede. |
| Linhas 4/5: Memória/Swap | avail Mem: Memória real disponível para novos processos. |
buff/cache: Memória usada para cache, liberável se necessário. |
Lista de Processos (Colunas Padrão)
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1234 root 20 0 123456 78900 45600 S 5.0 0.5 12:34.56 java
| PID | ID do processo. |
|---|---|
| USER | Usuário dono do processo. |
| PR | Prioridade (menor valor = maior prioridade). |
| NI | Valor nice (-20 a 19). Ajuda a ajustar a prioridade. |
| VIRT/RES/SHR | Memória Virtual, Residente (física) e Compartilhada usada. |
| S | Estado: R (Executando), S (Dormindo), D (E/S), Z (Zumbi), T (Parado). |
| %CPU/%MEM | Porcentagem de CPU e memória física usada. |
| TIME+ | Tempo total de CPU consumido. |
| COMMAND | Comando que iniciou o processo. |
Diagnóstico de Alto Consumo de CPU
# Passo 1: Identificar o processo com maior uso de CPU (executar 'top' e observar)
# Passo 2: Dentro do processo, listar as threads
top -Hp [PID_do_processo]
# Passo 3: Converter o TID da thread problemática para hexadecimal
printf "%x\n" [TID_da_thread]
# Passo 4: Analisar o stack trace da thread no dump de threads do JVM
jstack [PID_do_processo] | grep -A 10 [TID_em_hexadecimal]
Causas Comuns e Exemplos de Código (Java):
// 1. Laço infinito
while (true) { /* lógica de negócio */ }
// 2. Coleta de lixo (GC) frequente
System.gc(); // Chamada manual do GC
// 3. Computação intensiva em loop
for (int i = 0; i < Integer.MAX_VALUE; i++) { calculoComplexo(); }
Diagnóstico de Vazamento de Memória
# Passo 1: Monitorar o crescimento da memória do processo Java
watch -n 5 'ps -p $(pgrep -d"," -f java) -o pid,%mem,rss --sort=-%mem'
# Passo 2: Gerar um heap dump para análise offline
jmap -dump:live,format=b,file=heap.hprof [PID_do_java]
# Passo 3: Analisar o histograma de objetos (vazamentos comuns)
jmap -histo [PID_do_java] | head -20
Padrões de Vazamento Comuns (Análise do Histograma):
// Padrão 1: Excesso de char[] e String (cache inadequado)
private static List<string> cache = new ArrayList<>();
public void processar(String dados) {
cache.add(dados + System.currentTimeMillis()); // Acúmulo infinito
}
// Padrão 2: Objetos de negócio acumulados (cache sem eviction)
private Map<long usuario=""> cacheUsuarios = new HashMap<>();
public Usuario obterUsuario(Long id) {
return cacheUsuarios.computeIfAbsent(id, k -> carregarDoBD(k)); // Crescimento contínuo
}
</long></string>
Comandos Interativos no top
Dentro da interface do top:
P: Ordenar por %CPU.M: Ordenar por %MEM.k: Matar um processo pelo PID.1: Mostrar uso de todos os núcleos da CPU.H: Mostrar threads (desdobrar processos em threads).q: Sair.
Informações do Hostname e Sistema
hostname
uname -a
cat /etc/os-release
Histórico de Comandos
history 10 # Últimos 10 comandos
history | grep texto # Buscar no histórico
Teste de Conectividade de Rede
# Testar se uma porta está aberta
telnet endereco_ip porta
curl endereco_ip:porta
nc -zv endereco_ip porta
# Acesso remoto via SSH
ssh usuario@endereco_ip
# Cópia segura de arquivos
scp arquivo.txt usuario@endereco_ip:/caminho/destino
Atalhos de Teclado no Terminal
Ctrl + L: Limpar a tela.Ctrl + C: Interromper comando atual.Ctrl + R: Busca reversa no histórico.Tab: Auto-completar.
Operações Básicas com Arquivso e Diretórios
# Navegação
cd - # Voltar ao diretório anterior
cd ~ # Ir para o diretório home
cd .. # Subir um nível
# Cópia e Movimentação
cp origem destino # Copiar arquivo
cp -r origem destino # Copiar diretório recursivamente
mv antigo novo # Renomear ou mover
# Criação e Remoção
mkdir -p caminho/novo/diretorio # Criar diretórios recursivamente
rmdir diretorio # Remover diretório vazio
touch arquivo.txt # Criar arquivo vazio
rm -i arquivo.txt # Remover com confirmação
# Busca por Arquivos
find /caminho -name "*.log" -mtime -7 # Logs modificados nos últimos 7 dias
find . -type f -size +100M # Arquivos maiores que 100MB
# Visualização de Conteúdo
ls -lha # Listagem detalhada
cat arquivo.txt # Exibir conteúdo
tail -f log.txt # Acompanhar novas linhas em tempo real
head -n 5 arquivo.txt # Primeiras 5 linhas
# Permissões (chmod)
chmod u+x script.sh # Dar permissão de execução ao dono
chmod -R 755 diretorio/ # Permissões recursivas (rwxr-xr-x)
Manipulação de Strings e Variáveis no Shell
# Extração de substring
string="Hello World"
echo ${string:0:5} # Saída: Hello
echo ${string:(-5)} # Saída: World (últimos 5 caracteres)
# Substituição de padrões
caminho="/home/user/docs/arquivo.txt"
echo ${caminho#*/} # Remove até o primeiro '/': home/user/docs/arquivo.txt
echo ${caminho##*/} # Remove até o último '/': arquivo.txt
echo ${caminho%/*} # Remove do último '/': /home/user/docs
echo ${caminho%%/*} # Remove de '/': (vazio)
echo ${caminho/arquivo/dados} # Substitui 'arquivo' por 'dados'
# Manipulação de arquivos com `sed`
sed -i 's/palavra_antiga/palavra_nova/g' arquivo.txt # Substituir globalmente
sed -i '/^#/d' config.txt # Deletar linhas que começam com '#'
Feramentas de Cálculo e Processamento de Texto
# Cálculos simples com `expr` ou `(( ))`
resultado=$(( 5 + 3 * 2 ))
echo $resultado
# Processamento de colunas com `awk`
echo "Alice 30" | awk '{print $1, "tem", $2, "anos."}'
# Saída: Alice tem 30 anos.
# `grep` para filtragem avançada
grep -E "erro|falha" /var/log/syslog # Regex extendida
grep -c "sucesso" log.txt # Contar linhas