Comandos de Sistema e Gerenciamento de Serviços
Para administrar um ambiente Linux, é fundamental dominar a interação com o kernel e o gerenciador de serviços (systemd).
# Exibir a versão atual do kernel
uname -r
# Obter detalhes da distribuição instalada
cat /etc/os-release
# Forçar a gravação de dados do buffer de memória para o disco
sync
# Desligar o servidor imediatamente
shutdown -h now
# Reiniciar o sistema
reboot
# Alterar o hostname da máquina para 'srv-db-01'
hostnamectl set-hostname srv-db-01
# Localizar os binários e arquivos de configuração do Nginx
whereis nginx
# Verificar o status do serviço Docker
systemctl status docker.service
# Iniciar o serviço Docker
systemctl start docker.service
# Reiniciar o serviço Docker
systemctl restart docker.service
# Habilitar o Docker para iniciar automaticamente no boot
systemctl enable docker.service
# Listar todos os serviços e filtrar apenas os habilitados
systemctl list-unit-files --type=service | grep enabled
# Identificar o usuário logado na sessão atual
whoami
# Listar todos os usuários conectados ao sistema
who
# Alternar para o usuário root (mantém o ambiente do usuário atual)
su root
# Alternar para o usuário root (carrega o ambiente completo do root)
su - root
# Monitorar o uso de memória em Megabytes, atualizando a cada 5 segundos
free -m -s 5
# Abrir o monitor de processos em tempo real
top
# Listar todos os processos em execução com detalhes completos
ps -aux
# Encerrar um processo pelo seu PID
kill 1234
# Encerrar processos pelo nome do executável
pkill nginx
Navegação e Manipulação de Diretórios
O sistema de arquivos Linux é hierárquico. A navegação pode ser feita utilizando caminhos absolutos (iniciando na raiz /) ou relativos (baseados no diretório atual).
# Avançar para um subdiretório (caminho relativo)
cd projetos/
# Retornar ao diretório pai
cd ..
# Navegar diretamente para um caminho absoluto
cd /var/log/nginx/
# Retornar à raiz do sistema
cd /
# Ir para o diretório home do usuário atual
cd ~
# Criar um novo diretório
mkdir ambiente_dev
# Copiar um arquivo
cp config.ini config_backup.ini
# Copiar um diretório inteiro e seu conteúdo recursivamente
cp -R /etc/nginx/ /backup/nginx_conf/
# Mover ou renomear um arquivo
mv script_antigo.sh script_novo.sh
# Criar um arquivo vazio ou atualizar o timestamp
mv arquivo_vazio.txt
# Exibir o caminho completo do diretório atual
pwd
# Listar arquivos no diretório atual
ls
# Incluir arquivos ocultos na listagem
ls -a
# Exibir detalhes (permissões, dono, tamanho, data)
ls -l
Exclusão de Arquivos e Diretórios
# Remover um diretório vazio
rmdir pasta_vazia/
# Remover um arquivo específico
rm documento.txt
# Forçar a remoção recursiva de um diretório e todo o seu conteúdo (cuidado!)
rm -rf /tmp/cache/
Operações com Arquivos de Texto
Leitura e Filtragem
# Sobrescrever o conteúdo de um arquivo (redirecionamento)
echo "novo log" > app.log
# Adicionar conteúdo ao final do arquivo (append)
echo "log adicional" >> app.log
# Visualizar o conteúdo de um arquivo com paginação básica
more relatorio.txt
# Visualizar com paginação avançada (navegação para frente e para trás)
less relatorio.txt
# Exibir as primeiras 20 linhas de um arquivo
head -n 20 acesso.log
# Exibir as últimas 50 linhas (útil para logs ativos)
tail -n 50 erro.log
# Concatenar e exibir múltiplos arquivos
cat parte1.sql parte2.sql
# Filtrar linhas que contenham um padrão específico (case-sensitive)
grep "Exception" application.log
Compactação e Empacotamento
# Empacotar arquivos sem compressão (formato .tar)
tar -cvf backup.tar /var/www/html/
# Desempacotar um arquivo .tar
tar -xvf backup.tar
# Criar um pacote comprimido com gzip (.tar.gz)
tar -czvf logs_compactados.tar.gz /var/log/
# Extrair um pacote gzip
tar -xzvf logs_compactados.tar.gz
Busca de Arquivos
# Procurar recursivamente por um arquivo específico a partir da raiz
find / -name "docker-compose.yml"
# Buscar arquivos maiores que 100MB no diretório /var
find /var -size +100M
Montagem de Dispositivos
No Linux, dispositivos de hardware são tratados como arquivos. Para acessar um disco ou partição, ele deve ser montado em um diretório existente.
# Listar sistemas de arquivos montados atualmente
mount
# Montar uma partição manualmente (o tipo de sistema de arquivos é detectado automaticamente)
mount -o rw /dev/sdb1 /mnt/dados
# Desmontar o dispositivo pelo ponto de montagem
umount /mnt/dados
Editor Vi / Vim
O Vi opera em modos distintos. O modo Normal é usado para navegação e manipulação, o modo de Inserção para digitação, e o modo de Comando (linha base) para salvar e sair.
Navegação no Modo Normal
# Movimento por caractere: h (esquerda), l (direita)
# Movimento por palavra: w (início da próxima), e (fim da atual), b (início da anterior)
# Movimento por linha: 0 (início da linha), $ (fim da linha), j (baixo), k (cima)
# Movimento por tela: H (topo da tela), L (base da tela)
# Movimento por documento: G (fim do arquivo), 1G ou gg (início do arquivo)
Manipulação de Texto
# Deletar o caractere sob o cursor
x
# Deletar a linha inteira
dd
# Copiar (yank) a linha atual
yy
# Copiar 3 linhas a partir da atual
3yy
# Colar (paste) após o cursor
p
# Desfazer a última ação
u
# Refazer a ação desfeita
Ctrl + r
# Juntar a linha atual com a linha abaixo
J
Modo de Comando (Linha Base)
# Salvar alterações
:w
# Sair do editor
:q
# Forçar saída sem salvar
:q!
# Salvar e sair
:wq
Configuração de Rede
Servidores DNS
As configurações de resolução de nomes são definidas no arquivo resolv.conf.
cat /etc/resolv.conf
# Exemplo de configuração:
# nameserver 1.1.1.1
# nameserver 9.9.9.9
Interfaces de Rede (Legacy/Network-scripts)
# Editar a configuração da interface principal
vim /etc/sysconfig/network-scripts/ifcfg-eth0
# Parâmetros essenciais:
# TYPE=Ethernet
# DEVICE=eth0
# ONBOOT=yes
# BOOTPROTO=static
# IPADDR=10.0.0.50
# NETMASK=255.255.255.0
# GATEWAY=10.0.0.1
Gerenciamento de Usuários e Grupos
# Criar um novo grupo de desenvolvedores
groupadd devs
# Renomear um grupo existente
groupmod -n engineering devs
# Remover um grupo
groupdel engineering
# Criar um usuário, associá-lo a um grupo e definir seu diretório home
useradd -g devs -d /home/carlos -m carlos
# Alterar o grupo principal de um usuário
usermod -g engineering carlos
# Remover um usuário e seu diretório home
userdel -r carlos
Controle de Permisões
As permissões são divididas em Leitura (r=4), Escrita (w=2) e Execução (x=1), aplicadas ao Dono (u), Grupo (g) e Outros (o).
# Definir permissões usando notação octal (Dono: rwx, Grupo: r-x, Outros: r-x)
chmod 755 deploy.sh
# Adicionar permissão de execução para o grupo
chmod g+x deploy.sh
# Remover permissão de leitura para outros
chmod o-r deploy.sh
# Alterar o proprietário do arquivo
chown ana deploy.sh
# Alterar o grupo proprietário do arquivo
chgrp admins deploy.sh
Agendamento de Tarefas (Cron)
O daemon cron permite a execução automatizada de scripts em intervalos definidos.
# Editar a crontab do usuário atual
crontab -e
# Estrutura: minuto(0-59) hora(0-23) dia(1-31) mês(1-12) dia_semana(0-7) comando
# Executar script de backup todos os dias às 02:30 da manhã
30 2 * * * /opt/scripts/backup_db.sh
# Executar limpeza de cache a cada 4 horas
0 */4 * * * /opt/scripts/clear_cache.sh
# Executar monitoramento a cada 15 minutos e descartar a saída padrão e de erro
*/15 * * * * /opt/scripts/health_check.sh > /dev/null 2>&1
Programação em Shell Script
Scripts Bash permitem automatizar fluxos de trabalho complxeos, utilizando variáveis, estruturas de controle e laços de repetição.
Variáveis e Entradas
#!/bin/bash
# Definição de variáveis personalizadas
servidor="web-prod-01"
porta=8080
echo "Conectando ao $servidor na porta $porta"
# Utilizando variáveis de ambiente do sistema
echo "Usuário atual: $USER"
echo "Diretório home: $HOME"
# Capturando a saída de um comando
uptime_sistema=$(uptime -p)
echo "O sistema está: $uptime_sistema"
Estruturas Condicionais e Testes
#!/bin/bash
# Verificando o sucesso de um comando
if ping -c 1 google.com > /dev/null; then
echo "Conexão com a internet estabelecida."
else
echo "Falha na conexão."
fi
# Testes com arquivos
diretorio_alvo="/var/log/app"
if [ -d "$diretorio_alvo" ]; then
echo "O diretório de logs já existe."
elif [ -e "$diretorio_alvo" ]; then
echo "Existe um arquivo com este nome, mas não é um diretório."
else
mkdir -p "$diretorio_alvo"
echo "Diretório criado com sucesso."
fi
# Comparação numérica
limite_cpu=85
uso_atual=90
if [ "$uso_atual" -gt "$limite_cpu" ]; then
echo "Alerta: Uso de CPU crítico!"
fi
# Comparação de strings
if [ "$USER" == "root" ]; then
echo "Aviso: Você está executando como superusuário."
fi
Laços de Repetição
#!/bin/bash
# Iterando sobre uma lista de itens (Estilo Bash)
for ambiente in dev staging prod; do
echo "Fazendo deploy para o ambiente: $ambiente"
done
# Laço numérico (Estilo C)
for ((contador=1; contador<=5; contador++)); do
echo "Tentativa de conexão número $contador"
sleep 1
done