Guia Essencial de Comandos e Automação no Linux

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

Tags: Linux Bash shell-script administração-de-sistemas Terminal

Publicado em 7-10 22:36