O sistema operacional Linux, uma plataforma de código aberto e livre, tornou-se uma escolha predominante para servidores e sistemas embarcados. Este material abrange os princípios fundamentais do Linux, projetado para auxiliar iniciantes a compreenderem sua arquitetura central e desenvolverem competências operacionais básicas. Os assuntos explorados incluem a estrutura do kernel, o ambiente Shell, o sistema de arquivos, comandos essenciais, o editor vi/vim, gerenciamento de processos, administração do sistema, programação de scripts, serviços em segundo plano (daemon) e o sistema de controle de versões Git.
Visão Geral do Sistema Operacional Linux
Desde seu lançamento inicial por Linus Torvalds em 1991, o Linux evoluiu para se tornar um dos sistemas operacionais open-source mais influentes. Caracterizado por sua flexibilidade e robustez, é amplamente adotado em servidores, estações de trabalho, dispositivos incorporados e supercomputadores. Oferece suporte a múltiplos usuários e tarefas simultâneas, além de disponibilizar tanto uma interface de linha de comando (CLI) poderosa quanto ambientes gráficos (GUI).
Principais Características do Linux
O kernel do Linux é totalmente aberto, permitindo que qualquer pessoa visualize, modifique e distribua o código. Esta transparência impulsiona uma comunidade global de desenvolvimento. A arquitetura modular do kernel permite suporte dinâmico a uma vasta gama de hardware. O ecossistema Linux também inclui um amplo catálogo de software para produtividade, redes, desenvolvimento e outras áreas.
Aplicações e Evolução
Com o avanço tecnológico, o Linux se consolidou em domínios como computação em nuvem, big data e inteligência artificial. Sua estabilidade, segurança e adaptabilidade o tornaram a base de grande parte da infraestrutura da internet moderna.
Anatomia do Kernel do Linux
Funções e Componentes do Kernel
O kernel é o coração do sistema operacional, responsável por gerenciar recursos de hardware e fornecer uma API para os aplicativos. Ele controla a CPU, memória, drivers de dispositivo, sistemas de arquivos e outros componentes vitais.
Princípios de design incluem:
- Modularidade: Carregamento e descarga dinâmica de módulos, sem reinicialização do sistema.
- Multitarefa: Escalonamento de processos utilizando algoritmos como o escalonador totalmente justo (CFS).
- Multi-usuário: Isolamento de recursos para cada usuário do sistema.
- Geranciamento de Memória Virtual: Permite a execução de programas que excedem a memória física.
Subsistemas do Kernel
O kernel é composto por vários subsistemas especializados:
- Escalonador de Processos: Determina a alocação de tempo de CPU.
- Gerenciador de Memória: Administra a alocação, paginação e memória swap.
- Subsistema de Arquivos: Gerencia armazenamento e recuperação de dados.
- Subsistema de Rede: Processa comunicação de rede e pacotes de dados.
- Drivers de Dispositivo: Fornecem uma camada de abstração para hardware.
Gerenciamento de Processos
Um processo é uma instância de um programa em execução. Estados comuns incluem: execução, pronto, bloqueado e zumbi.
Ferramentas essenciais para processos incluem:
ps: Exibe informações sobre processos.top: Monitora processos em tempo real.kill: Envia sinais para processos, permitindo encerramento.
Gerenciamento de Memória
Utiliza um sistema de paginação virtual. Mecanismos de alocação incluem o alocador de páginas, sistema buddy para blocos contíguos e o alocador slab para objetos pequenos.
Estratégias de recuperação empregam algoritmos como LRU (Menos Recente Utilizado) e o daemon kswapd.
# Liberar cache de páginas do sistema de arquivos
sync; echo 1 > /proc/sys/vm/drop_caches
Interface de Usuário: O Shell
Tipos e Configuração do Shell
O Shell é a interface primária para interação com o Linux. Diversas variantes existem, como bash, zsh, ksh e csh. O bash (Bourne Again SHell) é o padrão mais comum, oferecendo edição de comando, histórico, auto-completar e capacidade de scripting. O zsh estende essas funcionalidades com características avançadas como geração de nomes de arquivo e correção ortográfica.
A personalização do ambiente é feita através de arquivos como .bashrc e .bash_profile. Exemplo de configuração:
# Configuração no .bashrc
export CLICOLOR=1
alias lg='ls -alF --color=auto'
export PATH="$PATH:/opt/nova/ferramenta/bin"
[ -f ~/.bashrc.local ] && source ~/.bashrc.local
Fundamentos de Scripts Shell
Scripts Shell permitem automação. Elementos básicos incluem variáveis, parâmetros posicionais e estruturas de controle.
#!/bin/bash
nome="$1"
if [ "$nome" = "Carlos" ]; then
echo "Bem-vindo, Carlos!"
else
echo "Olá, visitante."
fi
for arquivo in *.log; do
echo "Analisando: $arquivo"
done
Para depuração, utilize set -x. A leitura de entrada do usuário é feita com o comando read.
Funções e Redirecionamento de I/O
Funções encapsulam blocos de código reutilizáveis.
somar() {
local resultado=$(( $1 + $2 ))
echo "$resultado"
}
valor=$(somar 7 4)
echo "O resultado é: $valor"
Descritores de arquivo padrão são: 0 (stdin), 1 (stdout), 2 (stderr). Redirecionadores como >, >>, 2>& e &> controlam o fluxo de saída.
executavel > saida.txt 2>&1
Sistema de Arquivos e Permissões
Estrutura e Tipos de Sistema de Arquivos
O Linux suporta múltiplos sistemas de arquivos (ext4, xfs, btrfs), cada um com características distintas. A criação de um sistema de arquivos em uma partição é feita com ferramentas como mkfs.
sudo parted /dev/sdb mklabel gpt
sudo mkfs.ext4 /dev/sdb1
Controle de Acesso e Propriedade
Permissões são definidas para o proprietário (user), grupo (group) e outros (others), abrangedno leitura (r), escrita (w) e execução (x). O comando chmod modifica essas permissões.
chmod u+x script.sh
chmod go-w documento.txt
Permissões especiais incluem setuid, setgid e o bit sticky. Listas de Controle de Aceso (ACLs) oferecem granularidade adicional via setfacl.
setfacl -m u:ana:rw relatorio.doc
Recursos Avançados
Links rígidos (hard links) e simbólicos (symlinks) são criados com ln. Cotas de disco (quota, edquota) limitam o uso de espaço por usuários ou grupos.
Comandos Essenciais do Linux
Operações na Linha de Comando
Comandos seguem o formato: comando [opções] [argumentos]. O histórico de comandos é acessado com as setas do teclado, e aliases podem ser definidos para simplificar comandos complexos.
alias listar='ls -lh --color=auto'
Administração do Sistema
Gerenciamento de usuários utiliza useradd, usermod, passwd. Monitoramento de sistema com top, vmstat. Visualização de logs com journalctl ou tail -f.
| Comando | Função |
|---|---|
useradd |
Criar novo usuário |
htop |
Monitor de processos interativo |
journalctl |
Consulta logs do sistema |
Manipulação de Arquivos e Texto
find localiza arquivos por critérios. tar e gzip servem para empacotamento e compressão. Ferramentas como grep, sed e awk processam texto.
find /var/log -name "*.log" -size +10M
tar -czvf backup_etc.tar.gz /etc/
awk -F':' '{print $1}' /etc/passwd
Editor vi/vim
Modos e Operações Básicas
O editor opera em múltiplos modos: normal, inserção, linha de comando e visual. No modo normal, movimentos como h, j, k, l navegam pelo texto. i entra no modo de inserção.
Para salvar e sair: :wq ou :x. Apenas salvar: :w.
Funcionalidades Avançadas
Recursos avançados incluem seleção em bloco (Ctrl+v), macros (gravadas com q e reproduzidas com @) e objetos de texto (ex: iw para uma palavra, a) para um parênteses).
O arquivo de configuração ~/.vimrc personaliza o ambiente. Gerenciadores de plugins como vim-plug expandem suas capacidades.
Administração do Sistema e Automação
Monitoramento de Processos e Carga do Sistema
Comandos como ps aux, pstree e top visualizam processos. uptime exibe a carga média do sistema. kill e pkill encerram processos.
pkill -f "nome_do_processo"
Configuração e Diagnóstico de Rede
ip addr e ss mostram informações de rede. ping, traceroute e mtr diagnosticam conectividade. nslookup e dig consultam DNS.
ip route show
ss -tulnp
traceroute 8.8.8.8
Automação com Cron e Systemd
Tarefas agendadas são gerenciadas pelo cron (crontab -e). Exemplo de entrada no crontab para backup diário:
0 2 * * * /scripts/backup_full.sh
Serviços e daemons são controlados pelo systemctl.
systemctl start nginx
systemctl enable postfix
systemctl status firewalld