Linux
Referência completa para desenvolvedores — filesystem, processos, texto, rede, serviços, scripting.
Filesystem Hierarchy (FHS)
/
├── bin/ binários essenciais (ls, cp, mv, bash)
├── sbin/ admin (iptables, fdisk, sshd)
├── etc/ arquivos de configuração
├── home/ diretórios dos usuários (/home/alfredo)
├── root/ home do root
├── usr/
│ ├── bin/ binários instalados por pacotes
│ ├── local/ instalações manuais (nvim, scripts próprios)
│ └── share/ man pages, fonts, documentação
├── var/
│ ├── log/ logs do sistema e serviços
│ ├── lib/ dados persistentes (docker, databases)
│ └── cache/ cache de pacotes e apps
├── tmp/ temporários — apagados no reboot
├── proc/ virtual — info de processos e kernel
├── sys/ virtual — hardware e parâmetros do kernel
├── dev/ dispositivos (sda, tty, null, random)
├── mnt/ pontos de montagem manuais
└── boot/ kernel e bootloader
Arquivos e Diretórios
# listar
ls -la # tudo + permissões + dono
ls -lh # tamanhos legíveis (K, M, G)
ls -lt # ordenado por data
# criar / deletar
mkdir -p dir/sub/outro
touch arquivo.txt
rm arquivo.txt
rm -rf dir/ # CUIDADO — recursivo sem confirmação
# copiar / mover
cp -r dir/ copia/
mv arquivo.txt /outro/lugar/
# buscar
find . -name "*.log"
find . -type f -size +10M
find . -name "*.js" -not -path "*/node_modules/*"
find /var/log -mtime -7 # modificados nos últimos 7 dias
Links
Simbólico (symlink)
Aponta para o caminho. Quebra se original mudar de lugar. Pode apontar para diretório. Mostra
l no ls.ln -s /origem /link
Hard Link
Aponta para o inode. Sobrevive se original for deletado. Só para arquivos. Mesmo filesystem.
ln arquivo link
Permissões
-rwxr-xr--
1 alfredo sudo 4096 Jun 27 script.sh
rwx
dono (user)
r-x
grupo
r--
outros
| Octal | Binário | Permissões | Uso típico |
|---|---|---|---|
| 7 | 111 | rwx | dono de executável |
| 6 | 110 | rw- | arquivos do dono |
| 5 | 101 | r-x | grupo de executável |
| 4 | 100 | r-- | leitura pública |
| 0 | 000 | --- | sem acesso |
chmod 755 script.sh # rwxr-xr-x
chmod 644 arquivo.txt # rw-r--r--
chmod 600 ~/.ssh/id_ed25519 # rw------- (chave privada)
chmod +x script.sh # adicionar execução
chmod -R 755 /var/www/ # recursivo
chown alfredo arquivo.txt
chown alfredo:sudo arquivo.txt
chown -R www-data:www-data /var/www/html/
# bits especiais
chmod u+s binário # SUID — executa como dono
chmod g+s dir/ # SGID — herda grupo do diretório
chmod +t /tmp/ # Sticky — só dono apaga seus arquivos
Usuários e Grupos
id # uid, gid, grupos do usuário atual
who / w # usuários logados
last # histórico de logins
sudo adduser alfredo # criar (interativo)
sudo usermod -aG sudo alfredo # adicionar ao grupo sudo
sudo usermod -aG docker alfredo # adicionar ao grupo docker
sudo usermod -s /bin/zsh alfredo # mudar shell
sudo passwd alfredo # definir senha
sudo userdel -r alfredo # remover + home
getent group docker # membros do grupo
groups alfredo # grupos de um usuário
su - alfredo # trocar usuário
sudo -u alfredo cmd # executar como outro usuário
sudo visudo # editar sudoers com validação
Processos
ps aux # todos os processos
ps aux | grep nginx
pgrep nginx # só os PIDs
pstree # árvore
# monitorar
htop # interativo
watch -n 2 'ps aux | grep node' # repetir a cada 2s
# background / foreground
comando & # iniciar em background
jobs # listar jobs
fg %1 / bg %1 # trazer / enviar para background
Ctrl+Z # suspender
Ctrl+C # encerrar
# nohup — sobrevive ao logout
nohup node server.js > /var/log/app.log 2>&1 &
# matar
kill PID # SIGTERM (gracioso)
kill -9 PID # SIGKILL (forçado)
kill -HUP PID # SIGHUP (reload)
pkill -f "node server" # por padrão no comando
# prioridade (nice: -20 mais prio → 19 menos)
nice -n 10 cmd
renice 15 -p PID
# ver o que processo usa
lsof -p PID # arquivos abertos
lsof -i :3000 # processo na porta 3000
Sinais
SIGTERM
15 · kill PID
encerrar graciosamente. Pode ser capturado.
SIGKILL
9 · kill -9 PID
matar imediatamente. Não pode ser ignorado.
SIGHUP
1 · kill -HUP PID
reload de configuração. Usado por nginx, sshd.
SIGINT
2 · Ctrl+C
interrupção do teclado.
SIGSTOP
19 · Ctrl+Z
pausar. Não pode ser ignorado.
SIGCONT
18
retomar processo pausado.
Visualizar Texto
cat arquivo.txt
cat -n arquivo.txt # com número de linha
less arquivo.txt # paginado (q sair, /busca, n próximo)
head -n 20 arquivo.txt # primeiras 20 linhas
tail -n 50 arquivo.txt # últimas 50
tail -f /var/log/nginx/access.log # seguir em tempo real
tail -F arquivo.log # seguir com rotação de log
grep / ripgrep
grep "pattern" arquivo.txt
grep -i "pattern" arquivo.txt # case-insensitive
grep -r "pattern" dir/ # recursivo
grep -n "pattern" arquivo.txt # com número de linha
grep -v "pattern" arquivo.txt # inverso (não bate)
grep -l "pattern" *.txt # só nomes dos arquivos
grep -E "regex+" arquivo.txt # extended regex
grep -A 3 "error" arquivo.log # 3 linhas após o match
grep -B 2 -A 2 "error" log.txt # contexto ao redor
# rg (ripgrep) — muito mais rápido
rg "pattern" dir/
rg -t js "useState" # filtrar por tipo de arquivo
rg -i "error" --glob "*.log"
sed
sed 's/foo/bar/' arquivo.txt # primeira ocorrência por linha
sed 's/foo/bar/g' arquivo.txt # todas
sed -i 's/foo/bar/g' arquivo.txt # editar in-place
sed -i.bak 's/foo/bar/g' arquivo # com backup .bak
sed '/pattern/d' arquivo.txt # deletar linhas com pattern
sed '5d' arquivo.txt # deletar linha 5
sed -n '10,20p' arquivo.txt # imprimir linhas 10-20
sed -n '/START/,/END/p' arquivo.txt # entre padrões
awk
awk '{print $1}' arquivo.txt # primeira coluna
awk -F: '{print $1}' /etc/passwd # separador personalizado
awk '$3 > 1000' arquivo.txt # filtrar por valor
awk '{sum += $2} END {print sum}' dados.txt # somar coluna
# processos com mais de 1% de CPU
ps aux | awk '$3 > 1.0 {print $0}'
# adicionar numeração de linha
awk '{print NR": "$0}' arquivo.txt
Outros Utilitários de Texto
cut
Extrair colunas ou chars.
cut -d: -f1 /etc/passwdsort
Ordenar.
sort -n numérico, -r reverso, -u únicouniq
Remover duplicatas (input deve estar ordenado).
uniq -c contarwc
Contar linhas
-l, palavras -w, bytes -ctr
Transformar chars.
tr 'a-z' 'A-Z', tr -d '\r'tee
Gravar e passar adiante.
cmd | tee arquivo.txtdiff
Comparar arquivos.
diff -u a b formato patchxargs
Converter stdin em argumentos.
find ... | xargs rmRedirecionamentos e Pipes
0
stdin
teclado
teclado
1
stdout
terminal
terminal
2
stderr
terminal
terminal
cmd > arquivostdout → arquivo (sobrescreve)
cmd >> arquivostdout → arquivo (append)
cmd 2> errosstderr → arquivo
cmd &> arquivostdout + stderr → arquivo
cmd 2>&1redirecionar stderr para stdout
cmd &>/dev/nulldescartar toda a saída
cmd < entradastdin ← arquivo
cmd1 | cmd2stdout de cmd1 → stdin de cmd2
cmd 2>&1 | cmd2incluir stderr no pipe
Compressão e Arquivos
# tar
tar -czf backup.tar.gz dir/ # criar .tar.gz
tar -xzf backup.tar.gz # extrair
tar -xzf backup.tar.gz -C /destino/ # extrair em dir específico
tar -tzf backup.tar.gz # listar sem extrair
# gzip
gzip -k arquivo.txt # comprimir (manter original)
gunzip arquivo.txt.gz # descomprimir
# zip
zip -r backup.zip dir/
unzip backup.zip -d /destino/
unzip -l backup.zip # listar
Disco e Armazenamento
df -h # espaço nos filesystems
du -sh dir/ # tamanho de diretório
du -sh * # tamanho de cada item atual
du -sh /* 2>/dev/null | sort -rh | head -10 # maiores dirs
lsblk # discos e partições
lsblk -f # com filesystem e UUID
blkid # UUIDs
Rede
ip addr
substitui ifconfig
Ver endereços IP das interfaces
ss -tulnp
substitui netstat
Portas abertas com processos
ip route
substitui route
Tabela de rotas e gateway
dig
substitui nslookup
Consultas DNS detalhadas
ip addr show eth0
ss -tulnp # portas abertas com processos
lsof -i :3000 # processo na porta 3000
ping -c 4 google.com
traceroute google.com
dig dominio.com A
dig @8.8.8.8 dominio.com # DNS específico
nslookup dominio.com
curl -L -o arquivo https://url
curl -I https://url # só headers HTTP
wget https://url/arquivo
Gerenciamento de Pacotes (apt)
sudo apt update
sudo apt install -y pacote
sudo apt remove pacote # remove, mantém configs
sudo apt purge pacote # remove tudo
sudo apt autoremove # remover dependências órfãs
sudo apt upgrade # atualizar tudo
apt search nginx
apt show nginx # detalhes
dpkg -l | grep nginx # listar instalados
dpkg -L nginx # arquivos do pacote
which nginx # localizar binário
Serviços — systemd
sudo systemctl start nginx
sudo systemctl stop nginx
sudo systemctl restart nginx
sudo systemctl reload nginx # recarregar config sem parar
sudo systemctl status nginx
sudo systemctl enable --now nginx # enable + start
sudo systemctl disable nginx
systemctl list-units --type=service --state=running
systemctl list-units --failed
# logs
journalctl -u nginx -f # seguir em tempo real
journalctl -u nginx -n 100 # últimas 100 linhas
journalctl -u nginx --since "1 hour ago"
journalctl -xe # erros recentes com contexto
Unit File
[Unit]
Description=Meu App Node.js
After=network.target
[Service]
Type=simple
User=alfredo
WorkingDirectory=/home/alfredo/apps/meu-app
ExecStart=/home/alfredo/.nvm/versions/node/v20.0.0/bin/node server.js
Restart=on-failure
RestartSec=5
Environment=NODE_ENV=production PORT=3000
[Install]
WantedBy=multi-user.target
sudo nvim /etc/systemd/system/meu-app.service
sudo systemctl daemon-reload
sudo systemctl enable --now meu-app
Variáveis de Ambiente
env # ver todas
echo $HOME $USER $SHELL $PATH
export VAR=valor # exportar para processos filhos
VAR=valor cmd # só para o comando
export PATH="$HOME/.local/bin:$PATH" # adicionar ao PATH
# persistir em ~/.zshrc ou ~/.bashrc
echo 'export EDITOR=nvim' >> ~/.zshrc
source ~/.zshrc
| Arquivo | Escopo |
|---|---|
| ~/.zshrc | zsh interativo |
| ~/.bashrc | bash interativo |
| ~/.profile | login shell (bash/sh) |
| /etc/environment | sistema inteiro |
| /etc/profile.d/*.sh | scripts de sistema |
Cron Jobs
*
minuto
0-59
0-59
·
*
hora
0-23
0-23
·
*
dia mês
1-31
1-31
·
*
mês
1-12
1-12
·
*
dia semana
0-7
0-7
→
/cmd
comando
crontab -e # editar
crontab -l # listar
sudo crontab -e # cron do root
# exemplos
0 2 * * * /usr/bin/backup.sh # diariamente às 2h
0 2 * * 0 /usr/bin/backup.sh # domingo às 2h
*/5 * * * * /usr/bin/check.sh # a cada 5 min
0 9-18 * * 1-5 /usr/bin/notify.sh # dias úteis horário comercial
@reboot /usr/bin/start.sh # no boot
@daily /usr/bin/cleanup.sh
Informações do Sistema
uname -a # kernel + arquitetura
cat /etc/os-release # distro
hostnamectl # hostname, SO, kernel
lscpu # CPU
free -h # RAM
lshw -short # hardware completo
uptime # carga do sistema
# tempo real
htop
vmstat 1 # CPU, mem, I/O por segundo
iostat -x 1 # I/O de disco
Shell Scripting
#!/usr/bin/env bash
set -euo pipefail # sair em erro, tratar vars não definidas, falha em pipe
# variáveis
NAME="alfredo"
echo "Olá, ${NAME}!"
# especiais: $0=script $1..=args $@=todos $#=count $?=exit code $$=PID
# condicional
if [ -f arquivo.txt ]; then
echo "existe"
elif [ -d dir/ ]; then
echo "é dir"
else
echo "não existe"
fi
# [[ ]] — mais robusto no bash
[[ "$str" == *"padrão"* ]] # glob
[[ "$str" =~ ^[0-9]+$ ]] # regex
# loops
for f in *.txt; do echo "$f"; done
for i in $(seq 1 10); do echo $i; done
while read -r line; do echo "$line"; done < arquivo.txt
# funções
my_func() {
local var="local"
echo "arg: $1"
return 0
}
RESULT=$(my_func "teste")
# arrays
ARR=("a" "b" "c")
echo ${ARR[@]} # todos
echo ${#ARR[@]} # tamanho
# string ops
echo ${#VAR} # comprimento
echo ${VAR:0:5} # substring
echo ${VAR:-default} # default se vazio
echo ${VAR//foo/bar} # substituir todas
# trap — limpeza ao sair
trap 'rm -f /tmp/lock' EXIT
Dicas e Padrões
# histórico
history | grep docker
Ctrl+r # busca reversa
!! # último comando
!$ # último argumento
# atalhos readline
Ctrl+a / Ctrl+e # início / fim da linha
Ctrl+k / Ctrl+u # cortar até fim / início
Ctrl+w # apagar palavra anterior
Ctrl+y # colar
# globbing
*.txt # todos os .txt
{a,b,c}.txt # a.txt b.txt c.txt
{1..5} # 1 2 3 4 5
# misc
time cmd # medir tempo
timeout 30 cmd # matar após 30s
yes | cmd # responder 'y' automaticamente
nohup cmd &>/var/log/cmd.log & # rodar após logout
/proc e /sys
# /proc — virtual, info do sistema
cat /proc/cpuinfo
cat /proc/meminfo
cat /proc/loadavg
cat /proc/PID/status # info do processo
ls /proc/PID/fd/ # file descriptors abertos
# /sys — parâmetros do kernel e hardware em tempo real
cat /sys/class/net/eth0/speed
cat /sys/class/block/sda/size
# sysctl — ajustar parâmetros
sysctl -a # ver todos
sudo sysctl -w vm.swappiness=10 # definir temporário
sudo nvim /etc/sysctl.conf # persistir
sudo sysctl -p # recarregar
Referência Rápida
| Tarefa | Comando |
|---|---|
| Ver espaço em disco | df -h |
| Tamanho de diretório | du -sh dir/ |
| Maiores diretórios | du -sh /* 2>/dev/null | sort -rh | head -10 |
| Processos usando mais RAM | ps aux --sort=-%mem | head |
| Processo na porta X | lsof -i :X |
| Matar processo por nome | pkill nginx |
| Seguir logs | tail -f /var/log/syslog |
| Buscar texto recursivo | rg "texto" . |
| Substituir em arquivo | sed -i 's/old/new/g' arquivo |
| Permissões numéricas | stat -c "%a %n" arquivo |
| Usuários logados | w |
| Variáveis de ambiente | env | sort |
| Serviços ativos | systemctl list-units --state=running |
| Logs de serviço | journalctl -u nome -f |
| Medir tempo de execução | time cmd |
| Contar linhas | wc -l arquivo |
| Colunas únicas ordenadas | sort arquivo | uniq -c | sort -rn |