Introdução ao GNU/Linux

O GNU/Linux é um sistema operacional livre e de código aberto que combina o núcleo LinuxO kernel é o núcleo do sistema, responsável pela comunicação entre hardware e software com os utilitários e ferramentas do projeto GNU, idealizado por Richard Stallman nos anos 80.

Ao contrário de sistemas proprietários, o GNU/Linux oferece liberdade total aos usuários para executar, estudar, modificar e distribuir o software, conforme as quatro liberdades do software livre.

Entre suas principais características estão:

Primeiro comando no Linux
# Exibindo mensagem de boas-vindas no terminal
echo "Bem-vindo ao mundo GNU/Linux!"

Atualmente, o GNU/Linux está presente em diversos ambientes, desde servidores de grandes empresas até dispositivos móveis, roteadores, supercomputadores e sistemas embarcados.

Ao longo deste material, você conhecerá a história do GNU/Linux, suas principais distribuições, estrutura de diretórios, comandos essenciais, permissões e muito mais — com atividades práticas e interativas!

História do GNU/Linux

A história do GNU/Linux é uma junção de duas grandes iniciativas: o projeto GNU, iniciado por Richard Stallman na década de 1980, e o kernel Linux, criado por Linus Torvalds em 1991. Essa união deu origem a um sistema operacional livre, poderoso e altamente personalizável, hoje amplamente utilizado em servidores, desktops, dispositivos móveis e embarcados.

O projeto GNU tinha como objetivo criar um sistema operacional completamente livre e compatível com Unix. No entanto, o desenvolvimento do kernel do GNU atrasou. Paralelamente, Linus Torvalds desenvolvia um kernel como hobby para seu computador pessoal, baseado no MINIX. Ao ser licenciado sob a GPL (General Public License), esse kernel passou a complementar o projeto GNU, formando o GNU/Linux como o conhecemos.

1969

Criação do UNIX nos laboratórios Bell, por Ken Thompson e Dennis Ritchie.

1983

Richard Stallman lança o Projeto GNU para criar um sistema operacional livre.

1985

Fundação da Free Software Foundation (FSF).

1991

Linus Torvalds desenvolve o kernel Linux como projeto pessoal.

1992

O kernel Linux é licenciado sob a GPL, permitindo sua integração ao GNU.

1993

Surgem as primeiras distribuições: Slackware e Debian.

Distribuições GNU/Linux

Distribuições GNU/Linux são sistemas operacionais completos que combinam o kernel Linux com um conjunto de softwares, gerenciadores de pacotes e ferramentas de configuração. Cada distribuição tem objetivos e públicos diferentes: algumas são voltadas para iniciantes, outras para ambientes corporativos ou usuários avançados.

As distribuições podem ser classificadas por suas famílias, com base no sistema de gerenciamento de pacotes e na comunidade ou empresa que a mantém.

Família Debian

Debian

Debian

Conhecida por sua estabilidade e foco em software livre. É a base de várias outras distribuições.

Ubuntu

Ubuntu

Popular entre usuários domésticos e empresas. Conta com versões desktop, server e para IoT.

Linux Mint

Linux Mint

Baseada no Ubuntu, com foco em usabilidade e familiaridade para quem vem do Windows.

Família Red Hat

Red Hat

Red Hat Enterprise Linux (RHEL)

Distribuição comercial voltada a servidores e empresas. Fornece suporte técnico e certificações.

Fedora

Fedora

Voltada à inovação. Testa tecnologias que futuramente serão incorporadas ao RHEL.

CentOS

CentOS

Era a versão gratuita do RHEL, agora substituída pelo CentOS Stream, uma versão rolling release.

Família Arch

Arch Linux

Arch Linux

Distribuição minimalista e altamente personalizável. Ideal para usuários avançados.

Manjaro

Manjaro

Baseada no Arch, com foco em facilidade de uso e instalação amigável.

Existem ainda distribuições especializadas para finalidades específicas, como segurança da informação (ex: Kali Linux), privacidade (ex: Tails), servidores (ex: ClearOS) e educação (ex: Edubuntu). A escolha da distro ideal depende dos seus objetivos e familiaridade com o sistema.

Interfaces Gráficas (GUIs) no GNU/Linux

O GNU/Linux permite escolher entre diversas interfaces gráficas que determinam a aparência, comportamento e recursos da área de trabalho. Algumas são completas e modernas, outras são leves e eficientes, ideais para máquinas com poucos recursos.

GNOME

GNOME

Moderna, limpa e voltada à produtividade. Padrão em distros como Ubuntu e Fedora.

KDE Plasma

KDE Plasma

Extremamente personalizável e com visual arrojado. Repleta de recursos avançados.

Cinnamon

Cinnamon

Interface do Linux Mint, moderna e familiar para quem vem do Windows.

XFCE

XFCE

Leve e estável. Excelente escolha para quem quer desempenho e simplicidade.

MATE

MATE

Baseada no antigo GNOME 2. Clássica, leve e estável.

LXQt

LXQt

Extremamente leve, baseada em Qt. Ideal para máquinas antigas.

Budgie

Budgie

Interface moderna desenvolvida pela equipe do Solus. Limpa, simples e bonita.

Deepin

Deepin

Interface visualmente refinada e elegante. Experiência semelhante ao macOS.

Enlightenment

Enlightenment

Leve, animada e com aparência futurista. Visual avançado com baixo consumo.

i3wm

i3wm

Gerenciador de janelas em mosaico. Interface minimalista para usuários avançados.

Fluxbox

Fluxbox

Levíssima e rápida. Ideal para sistemas com hardware antigo. Interface simplificada.

Openbox

Openbox

Gerenciador de janelas leve e altamente configurável. Usado em ambientes minimalistas.

Blackbox

Blackbox

Minimalista, leve e rápido. Ótimo para sistemas embarcados ou sem recursos gráficos pesados.

IceWM

IceWM

Interface leve com aparência clássica. Rápida, estável e com recursos básicos.

A escolha de uma interface gráfica depende do seu gosto, desempenho esperado e finalidade do sistema. No GNU/Linux, você pode até instalar mais de uma interface e escolher no login qual deseja usar. Liberdade é a essência!

Licenças de Software Livre

O movimento do Software Livre é sustentado por princípios éticos e legais que garantem liberdade aos usuários. Esses princípios são definidos por licenças que determinam como o software pode ser utilizado, estudado, modificado e redistribuído. A Free Software Foundation (FSF) estabeleceu quatro liberdades fundamentais:

0

Executar

Liberdade de executar o programa para qualquer propósito.

1

Estudar

Liberdade de estudar como o programa funciona e adaptá-lo às suas necessidades. Para isso, o acesso ao código-fonte é fundamental.

2

Redistribuir

Liberdade de redistribuir cópias para ajudar outras pessoas.

3

Aprimorar

Liberdade de melhorar o programa e liberar as melhorias para a comunidade, beneficiando todos os usuários.

Principais Licenças de Software Livre

Diversas licenças foram criadas para garantir essas liberdades. Algumas são mais rígidas (copyleft), exigindo que qualquer modificação mantenha os mesmos termos da licença original, enquanto outras são mais permissivas. Abaixo, as mais utilizadas:

GPL (GNU General Public License)

Licença copyleft criada pela FSF. Exige que trabalhos derivados sejam também licenciados como GPL. Garante as quatro liberdades de forma forte.

LGPL (Lesser GPL)

Versão mais permissiva da GPL. Permite que bibliotecas sejam usadas em softwares proprietários sem que o software completo precise ser GPL.

BSD

Licença permissiva. Permite uso, modificação e redistribuição inclusive em software proprietário. Muito usada em sistemas como FreeBSD, macOS, etc.

MIT

Uma das mais simples e permissivas licenças. Permite uso para qualquer fim, desde que mantenha o aviso de direitos autorais original.

Verificando licenças de pacotes
# Debian/Ubuntu:
apt show nome-do-pacote | grep License

# Fedora:
dnf info nome-do-pacote | grep License

# Visualizando licença em projetos GitHub:
acessar o repositório e procurar por LICENSE ou COPYING

Entender as licenças de software é fundamental tanto para desenvolvedores quanto para usuários. Respeitar as condições de uso e contribuir com a comunidade fortalece o ecossistema do software livre.

Certificações Linux

As certificações Linux comprovam o conhecimento técnico em administração de sistemas, segurança, redes e automação. Elas são reconhecidas internacionalmente e valorizadas por empresas de tecnologia.

LPI (Linux Professional Institute)

O LPI oferece uma trilha de certificações neutras quanto à distribuição. É uma das mais reconhecidas e respeitadas mundialmente.

LPIC-1

Junior Level Linux Certification

  • Comandos GNU/Linux e Unix
  • Manipulação de arquivos, permissões e scripts
  • Instalação e configuração básica de sistemas

LPIC-2

Advanced Level Linux Certification

  • Administração avançada de sistemas
  • Configuração de serviços de rede
  • Gerenciamento de usuários, backups e firewall

Red Hat

A Red Hat oferece certificações voltadas ao uso profissional do Red Hat Enterprise Linux (RHEL), bastante requisitadas em ambientes corporativos.

RHCSA

Red Hat Certified System Administrator

  • Gerenciamento de usuários e permissões
  • Configuração de serviços e pacotes
  • Monitoramento e segurança básica

RHCE

Red Hat Certified Engineer

  • Automação com scripts e Ansible
  • Configuração avançada de rede
  • Gerenciamento de sistemas em larga escala

Instalação do GNU/Linux

Instalar uma distribuição GNU/Linux pode ser uma excelente forma de aprender mais sobre sistemas operacionais, ferramentas de linha de comando e liberdade digital. Você pode começar sem modificar seu sistema atual, usando uma versão ao vivo (live), ou optar por instalar em definitivo ao lado do Windows ou em uma máquina virtual.

1. Usando Live USB (sem instalar)

O modo Live permite experimentar o sistema Linux diretamente a partir de um pendrive, sem instalar nada no computador. Ideal para conhecer a interface e as ferramentas básicas.

2. Instalação em Máquina Virtual

Utilizar uma máquina virtual permite que você rode o Linux dentro do Windows ou macOS, sem reiniciar ou particionar o disco.

3. Dual Boot (instalar ao lado do Windows)

O dual boot permite manter o Windows e o Linux no mesmo computador, escolhendo o sistema operacional a cada inicialização.

Criando pendrive bootável com dd no Linux
# Verifique o nome do dispositivo USB com:
lsblk

# Substitua /dev/sdX pelo nome correto do seu pendrive
sudo dd if=ubuntu.iso of=/dev/sdX bs=4M status=progress

Independentemente da forma escolhida, experimente, explore e não tenha medo de testar. O GNU/Linux é um sistema que incentiva a curiosidade e o aprendizado contínuo.

Estrutura de Diretórios no GNU/Linux

O sistema de arquivos no GNU/Linux segue o padrão FHS (Filesystem Hierarchy Standard), que organiza os arquivos em uma estrutura de diretórios hierárquica, começando pela raiz /. Cada diretório tem uma função específica no funcionamento do sistema.

/ – Raiz

Diretório principal de onde todos os outros partem. Contém toda a estrutura do sistema de arquivos.

/bin

Armazena os executáveis essenciais disponíveis para todos os usuários (como ls, cp, mv, bash).

/boot

Contém os arquivos necessários para inicialização do sistema, como o kernel e o GRUB.

/etc

Armazena os arquivos de configuração do sistema e dos serviços. Exemplo: /etc/passwd.

/home

Diretório onde ficam os arquivos dos usuários comuns. Cada usuário tem sua pasta pessoal, como /home/joao.

/root

Diretório pessoal do superusuário (root). Não confundir com a raiz /.

/var

Contém arquivos variáveis como logs do sistema, filas de impressão e dados de serviços.

/usr

Armazena a maior parte dos programas e arquivos de usuário. Possui subpastas como /usr/bin, /usr/lib e /usr/share.

/sbin

Executáveis destinados ao administrador do sistema. Exemplo: fsck, reboot.

/tmp

Arquivos temporários criados por aplicações e pelo sistema. São apagados periodicamente.

/dev

Arquivos especiais que representam dispositivos (ex: /dev/sda, /dev/null).

/mnt e /media

Locais onde dispositivos externos são montados, como pendrives e HDs externos.

/lib

Bibliotecas compartilhadas necessárias para os programas em /bin e /sbin.

/opt

Utilizado para instalar softwares opcionais, normalmente externos à distribuição padrão.

/proc e /sys

Diretórios virtuais usados pelo kernel para fornecer informações sobre o sistema e hardware.

Visualizando diretórios com detalhes
ls -l /
tree -L 1 /

Compreender a estrutura de diretórios é essencial para administrar um sistema Linux com segurança e eficiência.

Comandos Básicos do GNU/Linux

O terminal é uma poderosa ferramenta no GNU/Linux. Através dele, você pode navegar, manipular arquivos, gerenciar permissões, processos e muito mais. Abaixo, estão os comandos mais utilizados por iniciantes.

📁 Navegação no sistema

📂 Manipulação de arquivos e diretórios

🔍 Busca e ajuda

📜 Visualizar conteúdo de arquivos

⚙️ Outros úteis

Exemplo prático no terminal
# Criando uma pasta, entrando nela e criando um arquivo
mkdir projetos
cd projetos
touch resumo.txt
ls -l

Esses são apenas os primeiros passos. Com o tempo, você poderá usar pipes (|), redirecionamentos (>, >>), e montar scripts para automatizar tarefas. O terminal é seu aliado na produtividade!

Permissões no GNU/Linux

O GNU/Linux adota um sistema de permissões baseado em três categorias de usuários: proprietário (dono), grupo e outros. Para cada um, há três tipos de permissão:

Quando usamos o comando ls -l, vemos uma linha como esta:

-rwxr-xr--  1 jefer grupo  1024 mai 14 10:00 script.sh

Explicando:

🔧 Modificando permissões com chmod

Você pode alterar permissões com letras (modo simbólico) ou números (modo octal):

✔️ Modo simbólico

chmod u+x script.sh     # adiciona permissão de execução para o dono
chmod g-w arquivo.txt   # remove permissão de escrita do grupo
chmod o+r log.txt       # dá permissão de leitura para outros

🔢 Modo octal

As somas determinam os números:

chmod 755 script.sh  # rwxr-xr-x
chmod 644 arquivo.txt  # rw-r--r--

👤 Mudando dono e grupo

chown joao arquivo.txt       # muda o dono
chown joao:alunos arquivo.txt  # muda dono e grupo

🔒 Permissões especiais (avançado)

chmod +t /publico   # ativa sticky bit
chmod u+s programa  # ativa setuid

Entender as permissões é essencial para manter a segurança e o controle de acesso em sistemas GNU/Linux.

Diagnóstico e Recuperação de Senha

Esqueceu a senha do root ou de um usuário no Linux? Veja como recuperar o acesso com métodos seguros, usados por administradores em situações reais.

🔎 Diagnóstico: Esqueceu a senha ou conta bloqueada?

🛠️ Recuperando senha pelo modo de recuperação (GRUB / modo single user)

  1. Reinicie o computador.
  2. No menu do GRUB, selecione a linha do seu sistema e pressione e para editar.
  3. Procure pela linha que começa com linux e, ao final dela, adicione:
    init=/bin/bash
    Exemplo: linux ... ro quiet splash init=/bin/bash
  4. Pressione Ctrl+X ou F10 para inicializar com essa configuração.
  5. O sistema iniciará em modo de shell root. Remonte o sistema de arquivos como leitura/escrita:
    mount -o remount,rw /
  6. Altere a senha:
    passwd root
    (ou para outro usuário: passwd usuario)
  7. Sincronize alterações e reinicie:
    sync
    exec /sbin/init

    (ou apenas reboot -f)

💽 Recuperando senha via LiveCD/pendrive (usando chroot)

  1. Inicie o computador por um LiveCD/pendrive de Linux.
  2. Abra um terminal e descubra a partição do seu sistema:
    lsblk   # Procure algo como /dev/sda1, /dev/nvme0n1p2 etc.
  3. Monte a partição principal:
    sudo mount /dev/sda1 /mnt   # Substitua pelo seu disco
  4. (Opcional, para sistemas UEFI):
    sudo mount /dev/sda2 /mnt/boot/efi
  5. Faça chroot para assumir o sistema instalado:
    sudo chroot /mnt
  6. Altere a senha normalmente:
    passwd root
    passwd seu_usuario
  7. Saia do chroot e desmonte:
    exit
    sudo umount /mnt
    sudo reboot

🔐 Dicas de segurança e prevenção

📚 Exercícios práticos

  1. Simule a troca de senha root em uma VM usando o método do GRUB (init=/bin/bash).
  2. Experimente alterar a senha via LiveCD e chroot.
  3. Pesquise como proteger o GRUB com senha e configure em uma máquina de testes.
  4. Bloqueie temporariamente um usuário (passwd -l usuario) e depois desbloqueie (passwd -u usuario).

Essas técnicas são valiosas para administradores, mas devem ser usadas com responsabilidade! Sempre proteja fisicamente servidores e mantenha políticas de segurança atualizadas.

chroot, sudo e su no GNU/Linux

🏠 chroot: Mudando o “raiz” do sistema

O comando chroot (change root) altera o diretório raiz (/) percebido por um processo e seus filhos. É usado para manutenção, recuperação de sistemas, ambientes isolados para testes ou instalação de softwares.
Exemplo prático: Recuperação do GRUB ou senha de root usando um LiveCD:

# Monte a partição do sistema (supondo /dev/sda1)
sudo mount /dev/sda1 /mnt
# (Monte também /dev, /proc, /sys, /run para total compatibilidade)
sudo mount --bind /dev /mnt/dev
sudo mount --bind /proc /mnt/proc
sudo mount --bind /sys /mnt/sys
sudo mount --bind /run /mnt/run
# Entra no ambiente raiz da instalação
sudo chroot /mnt
# Agora você pode rodar comandos como se estivesse naquele sistema:
passwd     # trocar senha de root
update-grub
grub-install /dev/sda
exit       # Sair do chroot
  

🔑 sudo: SuperUser DO

sudo permite executar comandos com privilégios de administrador (root), mas sem a necessidade de se logar como root. Vantagens: mais seguro, audita uso, permite delegar comandos específicos para usuários comuns.

sudo comando         # Executa comando como root
sudo apt update      # Atualiza pacotes (precisa de root)
sudo nano /etc/fstab # Edita arquivo protegido
sudo reboot          # Reinicia o sistema

Por padrão, sudo pede sua senha (não a do root) e registra o uso em logs (/var/log/auth.log). Para dar acesso personalizado, edite o arquivo /etc/sudoers com visudo.

Exemplo de entrada em /etc/sudoers
jefer   ALL=(ALL:ALL) ALL
# Permite a usuário 'jefer' executar qualquer comando como root
# É possível restringir comandos, hosts, etc.

👤 su: Substituir Usuário (Switch User)

O comando su (“substitute user” ou “switch user”) permite trocar para outro usuário, geralmente root, pedindo a senha desse usuário:

su           # Troca para root (requer senha do root)
su -         # Troca para root e carrega o ambiente do root
su usuario   # Troca para usuário especificado (senha desse usuário)

💡 Diferenças e dicas rápidas

Comando Função Senha Recomendado para
sudo Executar comando único como root Senha do usuário Tarefas rápidas, log de auditoria
sudo -i Abrir shell root temporário Senha do usuário Administração prolongada, scripts interativos
su Trocar para root (ou outro usuário) Senha do root/usuário Manutenção em sistemas legados, ambientes single user
chroot Alterar raiz do sistema para recuperação/isolamento Senha do root (em geral) Resgate, testes, jail/containers

📚 Exercícios práticos

  1. Use sudo para instalar um pacote qualquer (htop, por exemplo).
  2. Edite um arquivo do sistema (/etc/hosts) usando sudo nano e depois tente sem sudo (deve falhar).
  3. Crie um novo usuário e alterne para ele usando su e sudo su - novo_usuario.
  4. Simule a recuperação de um sistema corrompido (pode ser uma VM) usando LiveCD + chroot para alterar a senha de root.
  5. Altere permissões em /etc/sudoers (usando visudo) para dar acesso a um comando específico para um usuário padrão.

O domínio de chroot, sudo e su é fundamental para administradores e usuários avançados de GNU/Linux, tanto para recuperação de sistemas quanto para manter segurança e boas práticas!

Shell Script

Um shell script é um arquivo de texto com uma sequência de comandos que podem ser executados no terminal. Ele automatiza tarefas repetitivas e facilita a administração de sistemas GNU/Linux. O shell mais utilizado é o bash (Bourne Again SHell).

🧪 Primeiro script

hello.sh
#!/bin/bash
echo "Hello, mundo Linux!"

Salve com .sh, torne executável e execute:

chmod +x hello.sh
./hello.sh

🔄 Variáveis e entrada do usuário

#!/bin/bash
echo "Digite seu nome:"
read nome
echo "Olá, $nome! Bem-vindo ao GNU/Linux!"

🧭 Condicionais

#!/bin/bash
echo "Digite um número:"
read n
if [ $n -gt 10 ]; then
  echo "Maior que 10"
else
  echo "10 ou menor"
fi

🔁 Laços de repetição

#!/bin/bash
for i in {1..5}
do
  echo "Contando: $i"
done

📦 Criando scripts úteis

Exemplo de script que exibe o uso do disco:

#!/bin/bash
echo "Verificando uso do disco..."
df -h | grep "^/dev"

Shell scripts podem ser simples ou extremamente poderosos, integrando condições, loops, menus, e manipulação de arquivos e processos. São ferramentas essenciais para qualquer administrador ou usuário avançado de GNU/Linux.

Comandos Avançados no Linux

O GNU/Linux é um sistema operacional poderoso, especialmente na linha de comando, que oferece ferramentas avançadas para administração de sistemas, monitoramento, automação, análise de rede e depuração. Esta seção apresenta comandos essenciais para usuários avançados, organizados por categoria, com explicações detalhadas e exemplos práticos. Estes comandos são fundamentais para entender conceitos de sistemas operacionais, como gerenciamento de processos, memória, I/O, e comunicação em rede, além de serem úteis em cenários reais de administração de servidores.


🌐 Comandos de Rede

Comandos de rede permitem configurar, monitorar e depurar conexões, interfaces e tráfego de rede, fundamentais para entender protocolos como TCP/IP e o modelo de camadas do sistema operacional.

Boot, GRUB e Cron no GNU/Linux

🚀 Processo de Boot

1. POST

O hardware é testado pela BIOS/UEFI (memória, processador, disco).

2. BIOS/UEFI

Localiza o disco de boot e inicializa o carregador (GRUB).

3. Bootloader (GRUB)

Permite escolher o SO ou kernel e passa o controle ao kernel Linux.

4. Kernel

Kernel Linux é carregado na RAM, detecta hardware e monta o root.

5. Init/Systemd

Systemd (ou init) carrega serviços e prepara o ambiente de usuário.

6. Login

Usuário faz login no terminal ou interface gráfica.

📝 O que é o GRUB?

GRUB (GRand Unified Bootloader) é o carregador de boot padrão do GNU/Linux moderno. Ele gerencia:

Editando GRUB temporariamente
# Na tela do GRUB, pressione 'e' para editar a entrada.
# Modifique a linha do kernel (ex: adicione 'single' para modo manutenção).
# Pressione Ctrl+X ou F10 para inicializar com as opções editadas.

O arquivo principal de configuração é /etc/default/grub. Após alterações:

sudo update-grub    # Debian/Ubuntu
sudo grub2-mkconfig -o /boot/grub2/grub.cfg    # Fedora/Red Hat

🛠️ Troubleshooting: Resgate e Recuperação de Boot

Dica: Se alterar UUIDs, dispositivos ou partições, confira e ajuste seu /etc/fstab para evitar erros de montagem no boot!

🖇️ Automontagem de Partições: /etc/fstab

O /etc/fstab especifica o que será montado automaticamente no boot:

UUID=abcd-1234   /mnt/dados   ext4   defaults   0  2
Montar partições manualmente
sudo mount -a  # Monta tudo do fstab (após editar)

⏰ Agendamento de tarefas com Cron

O cron é o serviço para agendamento recorrente de tarefas. Com o comando crontab -e você edita tarefas do seu usuário:

# min  hora  diaMês  mês  diaSemana  comando
0     2     *      *    *         /home/usuario/scripts/backup.sh  # 2h todo dia

Ferramentas complementares:

Exemplo: backup semanal às 5h da manhã no domingo
0 5 * * 0 /home/usuario/scripts/backup_semanal.sh
Logs do cron
sudo tail -f /var/log/syslog    # Debian/Ubuntu
sudo tail -f /var/log/cron      # Fedora/Red Hat

📚 Exercícios Práticos

  1. Altere uma linha do GRUB para iniciar em modo texto (adicione 3 ao final da linha do kernel).
  2. Monte manualmente uma partição em /mnt/teste e adicione sua entrada ao /etc/fstab.
  3. Agende uma tarefa para criar um arquivo /tmp/teste.txt todo dia às 7h.
  4. Simule um problema de boot trocando um UUID do fstab e resolva pelo LiveCD usando chroot.
  5. Use o comando at para reiniciar o sistema em 1 hora.

Dicas e Observações

Entender o processo de boot, GRUB, automontagem e agendamento de tarefas é essencial para qualquer administrador Linux ou profissional de sistemas operacionais!

Firewall no GNU/Linux

O firewall é uma das primeiras linhas de defesa em sistemas operacionais. No Linux, o firewall atua controlando o tráfego de rede, permitindo ou bloqueando conexões de acordo com regras definidas pelo usuário ou administrador.

🔥 Principais ferramentas de firewall no Linux

🛡️ Exemplos práticos de uso

Comando UFW (Ubuntu, Mint, etc.)

sudo ufw status                # Verificar status do firewall
sudo ufw enable                # Ativar o firewall
sudo ufw disable               # Desativar o firewall
sudo ufw allow 22/tcp          # Liberar porta SSH (22)
sudo ufw deny 80/tcp           # Bloquear acesso à porta 80 (HTTP)
sudo ufw delete allow 22/tcp   # Remover regra específica

Comando firewalld (Fedora, CentOS, RHEL)

sudo firewall-cmd --state                            # Verificar status
sudo firewall-cmd --add-service=ssh --permanent      # Liberar SSH permanentemente
sudo firewall-cmd --remove-service=ftp --permanent   # Bloquear FTP
sudo firewall-cmd --reload                           # Aplicar alterações

Comando iptables (tradicional, avançado)

sudo iptables -L                         # Listar regras
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT    # Liberar SSH
sudo iptables -A INPUT -j DROP            # Bloquear todas as outras conexões
sudo iptables-save > /etc/iptables/rules.v4  # Salvar regras

🔎 Dicas e observações

Exemplo: Liberar acesso SSH e bloquear tudo o resto (UFW)
sudo ufw default deny incoming
sudo ufw allow 22/tcp
sudo ufw enable

Praticar o uso do firewall em laboratório é essencial para quem administra sistemas GNU/Linux!

Benchmark e Tuning de Desempenho no GNU/Linux

Benchmark é o processo de medir o desempenho de hardware ou software para comparação, diagnóstico ou ajuste. Tuning refere-se à otimização do sistema para atingir o melhor desempenho possível em determinada tarefa ou ambiente.

🛠️ Principais ferramentas de benchmark

📊 Exemplos práticos

Testando CPU com sysbench
sudo apt install sysbench
sysbench cpu --cpu-max-prime=20000 run
Testando estabilidade com stress
sudo apt install stress
stress --cpu 2 --io 1 --vm 1 --timeout 30
Testando velocidade do disco com hdparm
sudo hdparm -Tt /dev/sda
Teste de rede com iperf
sudo apt install iperf3
iperf3 -s    # Em um computador (servidor)
iperf3 -c IP_DO_SERVIDOR   # No outro computador (cliente)

⚙️ Tuning: Ajustando o desempenho do sistema

💡 Exercícios práticos

  1. Faça um benchmark da CPU do seu sistema com sysbench e salve o resultado.
  2. Teste a velocidade de leitura do seu disco usando hdparm ou fio.
  3. Gere carga no sistema com stress e monitore em tempo real com htop.
  4. Altere o valor de vm.swappiness e observe o comportamento da memória.
  5. Teste a largura de banda de rede entre dois computadores com iperf3.

Medir e otimizar desempenho é fundamental para garantir a eficiência de sistemas GNU/Linux, seja em desktops, laboratórios ou servidores!

Automontagem, Diagnóstico e Gerenciamento de Discos

Gerenciar dispositivos de armazenamento no GNU/Linux envolve entender como o sistema reconhece, monta e diagnostica discos, partições e dispositivos removíveis (pendrives, HDs externos). A automontagem facilita o uso diário, enquanto comandos avançados ajudam a identificar, reparar e otimizar discos.

🔗 Automontagem de Dispositivos

Exemplo de regra do udev:

# /etc/udev/rules.d/99-usb.rules
KERNEL=="sd*", SUBSYSTEMS=="usb", ACTION=="add", RUN+="/usr/bin/mount /dev/%k /media/usb"
  

Regras do udev são avançadas e podem automatizar montagem, permissões e até execução de scripts ao plugar dispositivos.

🩺 Diagnóstico e Solução de Problemas de Disco

🖼️ Esquema: Como ocorre a montagem de um dispositivo no Linux

Fluxo de Montagem de Dispositivos no Linux

Fonte: Wikimedia Commons – O kernel detecta o dispositivo (udev), atribui identificadores (blkid, lsblk), a automontagem pode ser feita via fstab, udisksctl, desktop, ou manualmente pelo usuário.

📋 Mini-guia: Backup, Recuperação e Reparticionamento Seguro

Script de backup de partição
#!/bin/bash
origem="/dev/sdb1"
destino="/mnt/backup/backup-$(date +%F).img"
echo "Iniciando backup de $origem para $destino"
sudo dd if=$origem of=$destino bs=4M status=progress
sync
echo "Backup concluído!"
    
Regra udev para montagem automática
# Salve como /etc/udev/rules.d/99-auto-usb.rules
KERNEL=="sd[b-z][1-9]", ACTION=="add", RUN+="/usr/bin/udisksctl mount -b /dev/%k"
    
Abrindo Gnome Disks ou GParted
gnome-disks    # Utilitário gráfico (em GNOME)
sudo gparted   # Editor gráfico de partições universal
    

📚 Exercícios práticos

  1. Liste todos os discos, partições e UUIDs do sistema com lsblk -f e blkid.
  2. Monte manualmente um pendrive usando udisksctl e depois pelo comando mount.
  3. Simule e corrija um erro em /etc/fstab usando LiveCD.
  4. Verifique o status S.M.A.R.T. do seu HD com smartctl.
  5. Encontre e corrija bad blocks em uma partição de teste usando badblocks e fsck.
  6. Crie e teste uma regra simples de udev para montar um HD em uma pasta específica automaticamente.

Entender automontagem, diagnóstico e gerenciamento de discos é essencial para resolver problemas reais e garantir a integridade de dados em sistemas GNU/Linux!

Gerenciamento de Logs e Monitoramento

O gerenciamento de logs é fundamental para diagnosticar problemas, auditar acessos, detectar falhas e garantir a segurança em sistemas Linux. Além disso, monitorar recursos do sistema (CPU, memória, disco, rede) é essencial para administração eficiente.

📖 Logs do sistema: journalctl, rsyslog e logrotate

🔍 Dicas para consultar e filtrar logs

🖥️ Monitoramento em tempo real (CLI)

🖼️ Monitoramento Gráfico (GUI)

📚 Exercícios práticos

  1. Liste todos os logs de falha de autenticação do último boot (journalctl -b -p err | grep 'authentication').
  2. Rode o htop ou glances e capture um print mostrando uso de CPU, RAM e disco.
  3. Simule um erro (ex: senha errada no sudo), ache o log correspondente no journalctl ou /var/log/auth.log.
  4. Verifique a política de rotação dos logs usando cat /etc/logrotate.conf e ls /etc/logrotate.d/.
  5. Instale o stacer e explore recursos de monitoramento gráfico.

Saber interpretar logs e monitorar recursos em tempo real é uma das habilidades mais valorizadas para quem administra ou utiliza sistemas GNU/Linux em ambientes profissionais!

Criação e Gerenciamento de Serviços (systemd)

O systemd é o sistema padrão de inicialização e gerenciamento de serviços da maioria das distribuições GNU/Linux modernas. Ele permite iniciar, parar, habilitar e monitorar serviços de forma centralizada.

⚙️ Comandos essenciais do systemd

📝 Criando um serviço customizado (.service)

  1. Crie um script a ser executado como serviço (exemplo: backup simples):
    #!/bin/bash
    tar -czf /home/$USER/backup-$(date +%F).tar.gz /home/$USER/documentos

    Salve como /home/$USER/scripts/backup.sh e torne executável:

    chmod +x /home/$USER/scripts/backup.sh
  2. Crie o arquivo de serviço:
    sudo nano /etc/systemd/system/backup.service
    
    [Unit]
    Description=Backup diário dos documentos do usuário
    
    [Service]
    Type=oneshot
    User=seu_usuario
    ExecStart=/home/seu_usuario/scripts/backup.sh
    
    [Install]
    WantedBy=multi-user.target
          

    Dicas: - Substitua seu_usuario pelo seu usuário real. - Type=oneshot é ideal para tarefas que rodam e terminam.

  3. Recarregue o systemd e teste:
    sudo systemctl daemon-reload
    sudo systemctl start backup.service
    sudo systemctl status backup.service
  4. Habilite para rodar no boot (opcional):
    sudo systemctl enable backup.service

🕒 Rodando serviços automaticamente em horários agendados

📖 Logs dos serviços (journalctl)

📚 Exercícios práticos

  1. Crie um serviço que rode qualquer script personalizado no boot e monitore seu status.
  2. Crie um timer que execute um script de backup todos os dias às 3h da manhã.
  3. Use o journalctl para verificar logs de serviços, encontrando mensagens de erro.
  4. Altere um serviço e faça reload do systemd para aplicar mudanças.

O domínio do systemd permite automatizar, monitorar e administrar tarefas críticas do sistema com precisão e confiabilidade!

Serviços LAMP: Linux, Apache, MySQL/MariaDB, PHP

LAMP é um acrônimo para um conjunto de softwares livres amplamente utilizado para hospedagem de aplicações web:

Esse conjunto é a base da maioria dos servidores de sites do mundo, sendo uma plataforma robusta, flexível e didática para estudos.

🖥️ Instalando o LAMP no Ubuntu/Debian

  1. Atualize o sistema:
    sudo apt update && sudo apt upgrade
  2. Instale o Apache:
    sudo apt install apache2

    Acesse http://localhost no navegador para testar.

  3. Instale o MySQL ou MariaDB:
    sudo apt install mysql-server

    Recomenda-se executar o assistente de segurança:
    sudo mysql_secure_installation

  4. Instale o PHP (e módulos recomendados):
    sudo apt install php libapache2-mod-php php-mysql

    Crie um arquivo /var/www/html/info.php com:
    <?php phpinfo(); ?>
    Acesse http://localhost/info.php para ver a página de teste.

🔧 Comandos úteis de administração

💡 Dicas de segurança

🗂️ Estrutura padrão de diretórios

📚 Exercícios práticos

  1. Instale o ambiente LAMP em uma VM ou computador com Ubuntu/Debian.
  2. Crie um site simples em HTML e PHP em /var/www/html e teste pelo navegador.
  3. Crie um banco de dados, uma tabela simples e insira alguns registros usando o MySQL/MariaDB.
  4. Implemente um formulário em PHP que leia dados do banco e mostre na tela.
  5. Realize um backup do banco usando mysqldump e depois restaure.
  6. Pesquise como instalar o phpMyAdmin para administração gráfica e teste o acesso.

O domínio dos serviços LAMP é essencial para quem deseja atuar com administração de servidores Linux, desenvolvimento web ou hospedagem de sites profissionais.

🌐 Configurando Virtual Hosts (Múltiplos Sites) no Apache

Virtual hosts permitem hospedar mais de um site/domínio em um mesmo servidor. Exemplo prático para meusite.local:

  1. Crie um diretório para o novo site:
    sudo mkdir -p /var/www/meusite.local
  2. Defina permissões:
    sudo chown -R $USER:$USER /var/www/meusite.local
  3. Crie um arquivo de configuração:
    sudo nano /etc/apache2/sites-available/meusite.local.conf
    
    
        ServerAdmin webmaster@meusite.local
        ServerName meusite.local
        DocumentRoot /var/www/meusite.local
        ErrorLog ${APACHE_LOG_DIR}/meusite_error.log
        CustomLog ${APACHE_LOG_DIR}/meusite_access.log combined
    
        
  4. Ative o site e reinicie o Apache:
    
    sudo a2ensite meusite.local.conf
    sudo systemctl reload apache2
        
  5. Adicione o domínio em /etc/hosts (para acesso local):
    
    sudo nano /etc/hosts
    # Adicione a linha:
    127.0.0.1   meusite.local
        

Acesse http://meusite.local no navegador para testar. Dica: Repita para quantos domínios quiser!

🛠️ Instalando o phpMyAdmin

  1. Instale o phpMyAdmin:
    sudo apt install phpmyadmin

    Durante a instalação, escolha Apache2 e configure a senha do banco de dados quando solicitado.

  2. Verifique se existe o link simbólico:
    ls /usr/share/phpmyadmin

    Em geral, o acesso é via http://localhost/phpmyadmin.

  3. Se necessário, crie o link manualmente:
    
    sudo ln -s /usr/share/phpmyadmin /var/www/html/phpmyadmin
        

Dica de segurança: Restrinja o acesso ao phpMyAdmin, edite /etc/apache2/conf-available/phpmyadmin.conf para liberar só IPs específicos, ou use autenticação adicional.
Nunca exponha o phpMyAdmin publicamente sem senha forte e firewall ativo!

🔒 Integrando Firewall (UFW) ao LAMP

Permita apenas as portas essenciais:

sudo ufw allow 80/tcp      # HTTP
sudo ufw allow 443/tcp     # HTTPS (SSL/TLS)
sudo ufw allow 3306/tcp    # MySQL (apenas se realmente necessário para acesso remoto!)
sudo ufw enable            # Ative o firewall, se ainda não estiver ativo
sudo ufw status            # Confira as regras ativas

Dica: Para máxima segurança, mantenha a porta 3306 (MySQL) bloqueada para redes externas; só permita localmente ou para IPs restritos.

💾 Script de backup automático de banco de dados

Script de backup MySQL/MariaDB (bash)
#!/bin/bash
DATA=$(date +%F-%H%M)
ARQUIVO="/home/$USER/backup-mysql-$DATA.sql"
mysqldump -u root -pSENHA --all-databases > "$ARQUIVO"
gzip "$ARQUIVO"
echo "Backup completo: $ARQUIVO.gz"
  

Dica: - Programe o script no cron para executar diariamente ou semanalmente.
- Nunca armazene a senha em texto plano em scripts de produção (use ~/.my.cnf para credenciais seguras).
- Envie backups para outro servidor/drive para máxima segurança!

Compartilhamento de Arquivos com Samba

Samba é um conjunto de ferramentas que permite o compartilhamento de arquivos e impressoras entre sistemas GNU/Linux, Windows e macOS usando o protocolo SMB/CIFS (usado nativamente pelo Windows). Ele é fundamental em ambientes corporativos e domésticos para integração de redes mistas.

🛠️ Instalando o Samba

sudo apt update
sudo apt install samba samba-common

O serviço principal é o smbd. Verifique se está ativo:

sudo systemctl status smbd

📂 Configuração Básica de Compartilhamento

  1. Crie um diretório para compartilhar, por exemplo:
    sudo mkdir -p /srv/samba/publico
    sudo chown nobody:nogroup /srv/samba/publico
    sudo chmod 0777 /srv/samba/publico
  2. Edite o arquivo de configuração:
    sudo nano /etc/samba/smb.conf
    Adicione ao final:
    
    [Publico]
       path = /srv/samba/publico
       browseable = yes
       read only = no
       guest ok = yes
    
  3. Reinicie o serviço Samba:
    sudo systemctl restart smbd
  4. Agora o compartilhamento está disponível na rede local como \\seu-ip\Publico.
    No Windows, acesse pelo Explorer: \\192.168.1.10\Publico

🔐 Compartilhamento com Usuário e Senha (mais seguro)

🔧 Comandos úteis para administração

💡 Dicas de segurança

🚑 Solução de problemas (troubleshooting)

📚 Exercícios práticos

  1. Configure um compartilhamento público e outro restrito por usuário.
  2. Acesse o compartilhamento a partir de uma máquina Windows ou outro Linux (smbclient).
  3. Altere permissões e teste acessos de diferentes usuários.
  4. Liste e monitore conexões ativas usando smbstatus.
  5. Desafie-se: Crie um script que faça backup diário de uma pasta compartilhada.

O domínio do Samba amplia as possibilidades de integração de sistemas em redes mistas, tornando o GNU/Linux uma solução completa para servidores de arquivos em ambientes domésticos ou corporativos.

🔗 Montando compartilhamento Samba automaticamente (fstab)

Para montar uma pasta Samba (ex: \\servidor\publico) automaticamente em cada boot do Linux:

  1. Crie um ponto de montagem:
    sudo mkdir -p /mnt/publico
  2. Crie (opcional) um arquivo com as credenciais:
    
    sudo nano /etc/samba-credenciais
    # Dentro do arquivo:
    username=aluno
    password=suasenha
        

    Proteja o arquivo:

    sudo chmod 600 /etc/samba-credenciais
  3. Adicione a linha ao /etc/fstab:
    
    //192.168.1.10/publico   /mnt/publico   cifs   credentials=/etc/samba-credenciais,iocharset=utf8,uid=1000,gid=1000  0  0
        
    • Substitua 192.168.1.10, publico e os IDs de usuário (uid, gid) conforme seu ambiente.
  4. Monte tudo:
    sudo mount -a

Agora o compartilhamento será montado automaticamente ao iniciar o sistema.

💾 Script de backup de pasta Samba

Backup automático de compartilhamento Samba
#!/bin/bash
# Backup diário de /mnt/publico para /home/$USER/backup_samba/
ORIGEM="/mnt/publico"
DESTINO="/home/$USER/backup_samba/$(date +%F)"
mkdir -p "$DESTINO"
rsync -avh --delete "$ORIGEM/" "$DESTINO/"
echo "Backup concluído: $DESTINO"
  

Programe esse script no cron para execução diária, semanal, etc. Dica: O parâmetro --delete sincroniza apagando arquivos removidos na origem.

🏢 Samba + Active Directory (AD)

O Samba pode ser integrado a domínios Active Directory para autenticação centralizada, mapeamento de permissões e gerenciamento empresarial.

Observação: Integração com AD é tema avançado e pode envolver ajustes finos em DNS, Kerberos, políticas de grupo e scripts de logon.

🔐 Autenticação de Usuários Linux no Active Directory

É possível autenticar logins do Linux diretamente contra o AD, permitindo que usuários usem as mesmas credenciais do domínio para acessar o sistema e compartilhamentos Samba.
Esse recurso é muito usado em empresas que querem padronizar senhas e permissões.

  1. Instale os pacotes necessários:
    sudo apt install realmd sssd sssd-tools libnss-sss libpam-sss adcli samba-common-bin packagekit
  2. Descubra o domínio:
    realm discover DOMINIO.EXEMPLO.COM.BR
  3. Junte-se ao domínio:
    sudo realm join --user=administrador DOMINIO.EXEMPLO.COM.BR
    • Substitua administrador pelo nome de um usuário AD com permissão para adicionar máquinas ao domínio.
    • Você será solicitado a informar a senha do administrador do domínio.
  4. Teste a autenticação:
    id usuario@DOMINIO.EXEMPLO.COM.BR

    Se aparecer UID/GID do usuário, a autenticação está funcionando!

  5. Faça login como usuário do domínio:
    su - usuario@DOMINIO.EXEMPLO.COM.BR

    Ou faça logout da sessão gráfica e tente logar usando as credenciais do domínio.

  6. Verifique usuários e grupos do AD:
    getent passwd
    getent group
    wbinfo -u     # Lista usuários AD
    wbinfo -g     # Lista grupos AD
    

Dicas:

Referências oficiais: Debian: Authenticating Linux With Active Directory | Samba Wiki: Idmap config ad

Firewall Avançado e Segurança

Garantir a segurança de um sistema GNU/Linux envolve controlar acessos de rede, monitorar tentativas de ataque e proteger serviços críticos. Firewalls filtram conexões indesejadas, enquanto boas práticas de segurança e ferramentas complementares aumentam a proteção.

🔥 UFW – Firewall Simples

🛡️ IPTABLES – Controle Avançado de Pacotes

🚦 FIREWALLD – Gerenciamento Dinâmico

🛑 Fail2Ban – Proteção contra Ataques de Força Bruta

🔒 SSH Hardening & Chaves

🔎 Identificando portas abertas e escaneamento

📚 Exercícios práticos

  1. Ative e configure o UFW, libere só SSH e HTTP, bloqueie tudo o resto. Tente acessar via outra porta e veja o resultado.
  2. Crie regras personalizadas no iptables para bloquear tentativas de ping (ICMP).
  3. Instale e teste o Fail2Ban: faça várias tentativas erradas de login SSH e veja seu IP ser bloqueado.
  4. Configure o SSH para aceitar apenas chaves e negue o root. Tente acessar com senha e veja a recusa.
  5. Use nmap para escanear sua própria máquina e identificar portas abertas. Compare com a saída do ss/netstat.

Um bom firewall, somado a práticas de segurança como Fail2Ban e SSH fortalecido, são essenciais para proteger sistemas Linux, seja em servidores, desktops ou nuvem!

Virtualização Completa (KVM, VirtualBox)

Virtualização completa permite executar múltiplos sistemas operacionais simultaneamente, cada um em uma "máquina virtual" isolada, utilizando todo o hardware disponível do host. É muito usada em testes, laboratórios, servidores e ambientes de produção.

⚡ Diferença entre Virtualização Completa e Containers

💻 KVM/QEMU: Virtualização nativa no Linux

🖥️ VirtualBox

📚 Exercícios práticos

  1. Instale o virt-manager, crie uma VM Linux, ajuste CPUs/RAM e instale o sistema operacional convidado.
  2. Gerencie VMs usando virsh: inicie, pare, crie snapshot e restaure.
  3. Instale o VirtualBox e crie uma VM para testar um sistema diferente do seu (ex: BSD, Windows).
  4. Compare consumo de recursos entre VMs e containers rodando o mesmo serviço.
  5. Desafie-se: configure rede em bridge para a VM acessar a rede real do host.

Virtualização completa permite criar ambientes isolados, seguros e realistas para estudo, desenvolvimento, testes e produção!

Containers (Docker/Podman)

Containers são tecnologias que permitem empacotar, distribuir e executar aplicações de forma isolada, leve e eficiente, compartilhando o kernel do sistema host mas isolando processos, redes e sistemas de arquivos. As ferramentas mais usadas atualmente são Docker e Podman.

🚀 O que é um container?

🐳 Docker: principais comandos

# Verifique se o Docker está instalado e rodando
sudo systemctl status docker

# Baixe e rode um container interativo
docker run -it ubuntu bash

# Liste containers em execução
docker ps

# Liste todos os containers (inclusive parados)
docker ps -a

# Execute comando em container rodando (exemplo: abrir bash)
docker exec -it  bash

# Pare e remova containers
docker stop 
docker rm 

# Remova imagens não utilizadas
docker image prune -a

# Liste imagens disponíveis localmente
docker images
  

🧑‍💻 Quando usar containers?

📝 Exemplos de uso prático

🍀 Podman: alternativa rootless ao Docker

📚 Exercícios práticos

  1. Rode um container Ubuntu, instale e execute um programa básico dentro dele.
  2. Crie um arquivo docker-compose.yml com um serviço web e um banco de dados, suba ambos e teste a comunicação.
  3. Liste todos os containers rodando e pare-os.
  4. Compare o tempo de inicialização de um container vs. uma VM.
  5. Desafie-se: use Podman para rodar o mesmo serviço sem privilégios de root.

Containers revolucionaram o desenvolvimento, tornando ambientes portáteis, reproduzíveis e escaláveis. Aprender Docker ou Podman é essencial para qualquer profissional de TI moderno!

🛠️ Construindo suas próprias imagens com Dockerfile

📤 Publicando imagens no DockerHub (push/pull)

☸️ Orquestração: Docker + Kubernetes (K8s)

Quiz Interativo

Teste seus conhecimentos sobre GNU/Linux: