Terminal Linux: comandos que todo desenvolvedor deveria saber

Dominar o terminal Linux é uma habilidade essencial para qualquer desenvolvedor que deseja produtividade e controle sobre o ambiente de desenvolvimento. Este artigo aborda os comandos fundamentais que todo profissional deveria conhecer, organizados por categorias práticas para facilitar o aprendizado e a consulta rápida.

1. Navegação e gerenciamento de arquivos

Os comandos básicos de navegação formam a base do trabalho no terminal. pwd mostra o diretório atual, ls lista arquivos e cd permite mover-se entre diretórios.

$ pwd
/home/usuario/projetos
$ ls -la
total 32
drwxr-xr-x  5 usuario usuario 4096 mar 15 10:30 .
drwxr-xr-x 12 usuario usuario 4096 mar 15 09:00 ..
-rw-r--r--  1 usuario usuario  120 mar 15 10:00 index.html
drwxr-xr-x  2 usuario usuario 4096 mar 15 10:05 src
$ cd src

Para manipular arquivos, utilize cp para copiar, mv para mover/renomear, rm para remover e mkdir para criar diretórios. Sempre use rm -i para confirmação ao deletar.

$ mkdir -p backup/2024
$ cp index.html backup/2024/index.html.bak
$ mv backup/2024 backup/2024-03

Localizar arquivos rapidamente é possível com find e locate. find busca em tempo real com critérios flexíveis:

$ find /home/usuario -name "*.log" -type f -mtime -7
/home/usuario/logs/erro.log
/home/usuario/logs/acesso.log

2. Visualização e edição de conteúdo

Para visualizar arquivos sem abrir um editor completo, use cat, less, head e tail. less permite navegação interativa em arquivos grandes, enquanto tail -f é ideal para monitorar logs em tempo real.

$ head -n 5 dados.csv
nome,idade,cidade
João,28,São Paulo
Maria,32,Rio de Janeiro
$ tail -f /var/log/syslog
Mar 15 10:45:01 servidor kernel: [12345.678] CPU: 0 PID: 1234

Para busca e transformação de texto, grep e sed são ferramentas poderosas:

$ grep -rn "ERROR" /var/log/ --include="*.log"
/var/log/app.log:23: ERROR: conexão recusada
$ sed -i 's/ERROR/ERRO/g' /var/log/app.log

Edições rápidas podem ser feitas com vim ou nano. Para iniciantes, nano oferece uma interface mais amigável:

$ nano config.json

3. Permissões e propriedade de arquivos

Entender permissões é crucial para segurança. Use ls -l para visualizar e chmod para alterar permissões. O chown modifica o proprietário do arquivo.

$ ls -l script.sh
-rwxr-xr-x 1 usuario developers 1024 mar 15 11:00 script.sh
$ chmod 750 script.sh
$ chown root:admin script.sh

O umask define permissões padrão para novos arquivos, enquanto sudo permite executar comandos como superusuário:

$ sudo systemctl restart nginx
$ su - outro_usuario

4. Processos e monitoramento do sistema

Monitore processos com ps, top (ou htop para interface mais amigável). Para finalizar processos, use kill, killall ou pkill.

$ ps aux | grep python
usuario  1234  2.5  1.2  45000  8000 ?  S  11:00  0:05 python app.py
$ kill -9 1234
$ pkill -f "node server.js"

Verifique o uso de disco com df e du:

$ df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1       100G   45G   55G  45% /
$ du -sh /home/usuario/projetos
2.3G    /home/usuario/projetos

5. Redes e conectividade

Teste conectividade com ping, baixe recursos com curl ou wget, e investigue portas com netstat ou ss:

$ ping -c 4 google.com
64 bytes from 142.250.80.46: icmp_seq=1 ttl=118 time=12.3 ms
$ curl -O https://exemplo.com/arquivo.zip
$ ss -tuln | grep 80
LISTEN 0 128 0.0.0.0:80 0.0.0.0:*

Acesso remoto seguro é feito com ssh e transferência com scp:

$ ssh usuario@192.168.1.100
$ scp relatorio.pdf usuario@servidor:/home/usuario/documentos/

6. Compactação, arquivamento e backups

Empacote e comprima arquivos com tar e gzip, ou use zip para compatibilidade com Windows:

$ tar -czvf projeto.tar.gz /home/usuario/projeto/
$ zip -r projeto.zip /home/usuario/projeto/

Sincronize diretórios eficientemente com rsync, que transfere apenas diferenças:

$ rsync -avz --delete /local/ usuario@servidor:/remoto/
sending incremental file list
./
index.html
sent 1.2K bytes  received 35 bytes  2.5K bytes/sec

Para clonagem de discos, dd cria imagens byte a byte:

$ sudo dd if=/dev/sda of=/backup/disco.img bs=4M status=progress

7. Automação e scripts básicos

Pipes (|) e redirecionamento (>, >>, <) permitem encadear comandos poderosamente:

$ cat log.txt | grep "ERROR" | sort | uniq -c | head -10
    5 ERROR: timeout
    3 ERROR: conexão recusada
$ echo "novo valor" >> config.txt

Variáveis de ambiente personalizam o shell. Use export para torná-las disponíveis:

$ export EDITOR=nano
$ export PATH=$PATH:/home/usuario/scripts

Um script shell básico segue esta estrutura:

#!/bin/bash
# Script de backup automático
BACKUP_DIR="/backup/$(date +%Y%m%d)"
ORIGEM="/home/usuario/dados"

mkdir -p "$BACKUP_DIR"

for arquivo in "$ORIGEM"/*.txt; do
    if [ -f "$arquivo" ]; then
        cp "$arquivo" "$BACKUP_DIR/"
        echo "Copiado: $arquivo"
    fi
done

echo "Backup concluído em $BACKUP_DIR"

Para executar, torne o script executável:

$ chmod +x backup.sh
$ ./backup.sh

Dominar esses comandos transforma o terminal em uma ferramenta produtiva e versátil. Pratique cada categoria progressivamente e consulte as referências abaixo para aprofundamento.

Referências