Comandos Essenciais do Linux para Desenvolvedores

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

Tags: Linux shell Bash Terminal Comandos

Publicado em 6-3 00:18 por Thomas