sábado, 28 de março de 2026

Fundamentos de Banco de Dados Tipagem SQL Aula 13

Guia de Tipos de Dados no MySQL

Entender os tipos de dados no MySQL é fundamental para garantir a performance e a integridade do seu banco de dados. A escolha correta economiza espaço em disco e acelera as consultas.


1. Números Inteiros (Integers)

Utilizados para valores numéricos exatos, sem casas decimais.

  • TINYINT: 1 byte (Range: -128 a 127).
  • INT: 4 bytes (Até ~2,1 bilhões). Ideal para IDs principais.
  • BIGINT: 8 bytes. Usado para volumes massivos de dados (ex: redes sociais).

2. Ponto Flutuante e Decimais

Para valores com frações ou números reais.

Tipo Uso Recomendado
FLOAT/DOUBLE Cálculos científicos (Precisão aproximada).
DECIMAL Valores financeiros/dinheiro (Precisão exata).

3. Cadeias de Caracteres (Strings)

Para textos de qualquer tamanho.

Dica: Use VARCHAR para economizar espaço, pois ele armazena apenas o conteúdo real mais um pequeno prefixo de tamanho.
  • CHAR: Tamanho fixo (mais rápido para códigos pequenos como siglas de países).
  • VARCHAR: Tamanho variável (padrão para nomes e e-mails).
  • TEXT: Para descrições longas ou artigos de blog.

4. Data e Hora (Date/Time)

Gerenciar tempo corretamente evita erros de fuso horário e cálculos manuais complexos.

  • DATE: Formato AAAA-MM-DD.
  • DATETIME: Data e hora completa. Range de 1000 a 9999.
  • TIMESTAMP: Registra o momento exato (UTC). Atenção: Limite até o ano 2038.

⚠️ O Mistério do TIMESTAMP

O TIMESTAMP é o queridinho para logs porque ele entende fusos horários (UTC). Porém, ele tem um "prazo de validade".

Como ele utiliza 32 bits para contar os segundos desde 1970, ele atingirá seu limite máximo em 19 de janeiro de 2038. Para eventos que ocorrem após essa data (como parcelas de um financiamento de 30 anos), prefira sempre o DATETIME, que suporta datas até o ano 9999.

Tipo Exemplo Real Formato de Saída
DATE Data de Nascimento AAAA-MM-DD
DATETIME Reserva de Hotel AAAA-MM-DD HH:MM:SS
TIMESTAMP Log de Erro no Sistema AAAA-MM-DD HH:MM:SS (UTC)

Por que o Range e o Formato importam?

Definir o intervalo (range) correto evita o desperdício de memória RAM e disco. Um banco de dados bem estruturado permite que os Índices funcionem de forma otimizada, garantindo que seu site carregue rápido mesmo com milhões de linhas.

Tipagem MySQL

Os Dados estão divididos por categorias (Inteiros, Ponto Flutuante, String e Data/Hora).

1. Tipos Numéricos (Inteiros)

Tipo Bytes Valor Mínimo (Signed) Valor Máximo (Signed) Máximo (Unsigned)
TINYINT 1 -128 127 255
SMALLINT 2 -32.768 32.767 65.535
INT 4 -2.147.483.648 2.147.483.647 4.294.967.295
BIGINT 8 -2^63 2^63-1 2^64-1

2. Tipos de Texto (Strings)

Tipo Limite / Tamanho Melhor Uso
CHAR(n) Até 255 caracteres Tamanho fixo (Ex: Siglas, Sexo, CEP)
VARCHAR(n) Até 65.535 caracteres Tamanho variável (Nomes, e-mails, títulos)
TEXT 64 KB Corpo de artigos, comentários longos
LONGTEXT 4 GB Logs extensos ou livros completos

3. Tipos de Data e Hora

Tipo Formato Intervalo (Range)
DATE YYYY-MM-DD 1000-01-01 a 9999-12-31
DATETIME YYYY-MM-DD HH:MM:SS 1000-01-01 a 9999-12-31
TIMESTAMP YYYY-MM-DD HH:MM:SS 1970-01-01 a 2038-01-19 (UTC)
Desafio MySQL: Tipagem de Dados - Prof. Carlos

Pesquisa de Integridade: Tipagem MySQL

Valide seus conhecimentos sobre a estrutura de dados para o blog.

1. Qual tipo de dado ocupa apenas 1 byte e é ideal para idades (0-255)?
É a menor variação do tipo inteiro.
2. Para armazenar nomes de cidades que variam de tamanho, qual o melhor tipo?
Este tipo economiza espaço ao não preencher com brancos o que não foi usado.
3. Qual tipo garante precisão exata para valores monetários (R$)?
Evita os famosos erros de arredondamento do tipo FLOAT.
4. O tipo DATETIME armazena valores no formato:
Padrão internacional: Ano-Mês-Dia Hora:Minuto:Segundo.
5. Qual a principal característica do tipo ENUM?
Funciona como uma lista de opções pré-definidas.
6. Para um campo 'status' (Ativo/Inativo), o MySQL geralmente usa:
O BOOLEAN no MySQL é um apelido para um inteiro muito pequeno.
7. O atributo UNSIGNED em um campo INT serve para:
Remove a capacidade de armazenar números negativos.
8. Qual tipo é indicado para armazenar o corpo de um artigo de blog?
Indicado para textos muito longos que ultrapassam 65 mil caracteres.
9. Qual comando exibe a tipagem das colunas de uma tabela?
A palavra em inglês significa 'descrever'.
10. O tipo BLOB é utilizado para armazenar:
Dados binários como imagens ou arquivos PDF.

Segurança em Banco de Dados - Aula 10🗝️Privilégios de Usuário

Segurança Avançada: Privilégios de Usuário

🛡️ Segurança Nível Pro: Gerenciando Usuários no MySQL

Nunca use o usuário root em sua aplicação PHP. Se o seu site for comprometido, o invasor terá acesso a todo o seu servidor de banco de dados.

Princípio do Menor Privilégio: Dê à sua aplicação apenas as permissões estritamente necessárias para ela funcionar.

1. Script de Criação do Banco e Tabela

Execute este script no seu banco de dados para preparar o ambiente:

SQL
-- 1. Criar o Banco de Dados
CREATE DATABASE IF NOT EXISTS sistema_exemplo;
USE sistema_exemplo;

-- 2. Criar a Tabela de Usuários
CREATE TABLE IF NOT EXISTS usuarios (
    id INT AUTO_INCREMENT PRIMARY KEY,
    nome_usuario VARCHAR(50) NOT NULL UNIQUE,
    senha_hash VARCHAR(255) NOT NULL,
    criado_em TIMESTAMP DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB;

2. Criando o Usuário Restrito

Agora, vamos criar um usuário que só consegue mexer nesta tabela específica, sem poderes de administrador:

SQL
-- Criar o usuário da aplicação
CREATE USER 'app_usuario'@'localhost' IDENTIFIED BY 'senha_dificil_123';

-- Dar permissões apenas de leitura, inserção e edição na tabela 'usuarios'
GRANT SELECT, INSERT, UPDATE ON sistema_exemplo.usuarios TO 'app_usuario'@'localhost';

-- Atualizar os privilégios
FLUSH PRIVILEGES;

3. Atualizando a Conexão no PHP

No seu arquivo cadastro.php, altere as credenciais de conexão para utilizar o novo usuário:

PHP
// Altere de 'root' para o novo usuário restrito
$user = 'app_usuario';
$pass = 'senha_dificil_123';

$pdo = new PDO("mysql:host=localhost;dbname=sistema_exemplo", $user, $pass);
👏

Ótimo, agora temos segurança total!

Você protegeu as senhas com Bcrypt e o banco de dados com Privilégios Restritos.


Agora imaginem que um hacker consiga acesso ao seu arquivo PHP. Ele verá a senha senha_dificil_123. Se ele tentar deletar o banco de dados inteiro usando essa senha, o MySQL vai dizer: Acesso Negado. Isso é segurança em camadas!"

📝 Exercícios Práticos: Desafio de Segurança MySQL Desafios de Segurança: SQL e Privilégios

🛠️ Hora da Prática: Desafios de Segurança

Agora que você aprendeu a teoria, tente resolver estes 3 desafios no seu ambiente local:

Desafio 1: O Teste de Intrusão
  • Tente executar um comando DROP TABLE usuarios; usando a conexão do app_usuario no seu código PHP.
  • Pergunta: O que aconteceu? O MySQL permitiu a exclusão? Por quê?
Desafio 2: Ajuste de Permissões
  • Sua aplicação agora precisa de um sistema de "Excluir Conta". O app_usuario atual não tem essa permissão.
  • Tarefa: Escreva o comando SQL que adiciona apenas o privilégio de DELETE para o app_usuario na tabela de usuários.
Desafio 3: Auditoria de Senhas
  • Abra o seu phpMyAdmin e observe a coluna senha_hash.
  • Tarefa: Tente descobrir qual é a senha original apenas olhando para o hash.
    Dica: Se você usou Bcrypt, verá algo como $2y$10$.... Isso mostra por que o hash é seguro!

No Desafio 1, você deve receber um erro de "Access denied".


Isso é gratificante para ver que, mesmo que o código seja "sequestrado", o banco de dados é a última e mais forte linha de defesa.

No Desafio 2.

🗝️ Gabarito Rápido para consulta:

-- Resposta do Desafio 2:
GRANT DELETE ON sistema_exemplo.usuarios TO 'app_usuario'@'localhost';
FLUSH PRIVILEGES;

Veja o Infográfio Abaixo:


É a representação visual de informações, dados ou conhecimentos, combinando o que aprendemos nesta aula.

sexta-feira, 27 de março de 2026

Segurança em Banco de Dados - Aula 09 🔒 Guia: Como Gerenciar Senhas com Segurança (Bcrypt)

🚀 Tutorial: Criando um Sistema de Cadastro Seguro (PHP + MySQL) Neste guia, você aprenderá a criar uma interface de cadastro que utiliza Bcrypt para proteger senhas, fugindo de métodos obsoletos como MD5.


Passo 1: Preparando o Banco de Dados Antes de rodar o PHP, precisamos da tabela no MySQL.
Copie o código abaixo e execute-o no seu phpMyAdmin:
SQL (Executar no Banco de Dados)
CREATE DATABASE IF NOT EXISTS sistema_exemplo;
USE sistema_exemplo;

CREATE TABLE IF NOT EXISTS usuarios (
    id INT AUTO_INCREMENT PRIMARY KEY,
    nome_usuario VARCHAR(50) NOT NULL UNIQUE,
    senha_hash VARCHAR(255) NOT NULL,
    criado_em TIMESTAMP DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB;
Passo 2: O Código da Interface e Lógica (PHP + HTML) Salve o código abaixo como cadastro.php na pasta do seu servidor local (ex: htdocs). Este arquivo contém tanto o formulário quanto o código que salva no banco.
PHP + HTML (cadastro.php)
<!DOCTYPE html>
<html lang="pt-br">
<head>
    <meta charset="UTF-8">
    <title>Cadastro Seguro</title>
    <style>
        body { font-family: sans-serif; background: #f4f7f9; display: flex; justify-content: center; padding: 50px; }
        .card { background: #fff; padding: 20px; border-radius: 8px; box-shadow: 0 2px 10px rgba(0,0,0,0.1); width: 350px; }
        input { width: 100%; padding: 10px; margin: 10px 0; border: 1px solid #ddd; border-radius: 4px; box-sizing: border-box; }
        button { width: 100%; padding: 10px; background: #1a2a6c; color: #fff; border: none; border-radius: 4px; cursor: pointer; }
        .msg { padding: 10px; margin-bottom: 10px; border-radius: 4px; text-align: center; }
        .success { background: #d4edda; color: #155724; }
    </style>
</head>
<body>
    <div class="card">
        <h2>Novo Usuário</h2>
        
        <?php
        if ($_SERVER["REQUEST_METHOD"] == "POST") {
            try {
                $pdo = new PDO("mysql:host=localhost;dbname=sistema_exemplo", "root", "");
                $hash = password_hash($_POST['senha'], PASSWORD_BCRYPT);
                
                $sql = "INSERT INTO usuarios (nome_usuario, senha_hash) VALUES (?, ?)";
                $pdo->prepare($sql)->execute([$_POST['usuario'], $hash]);
                
                echo "<div class='msg success'>✅ Cadastrado com sucesso!</div>";
            } catch (Exception $e) {
                echo "<div class='msg'>❌ Erro: " . $e.getMessage() . "</div>";
            }
        }
        ?>

        <form method="POST">
            <input type="text" name="usuario" placeholder="Usuário" required>
            <input type="password" name="senha" placeholder="Senha" required>
            <button type="submit">Cadastrar</button>
        </form>
    </div>
</body>
</html>



🚀 Guia Rápido: Como Testar seu Projeto Local
Abra o painel do XAMPP e dê Start nos módulos Apache e MySQL.
Acesse o phpMyAdmin e crie o banco de dados utilizando o primeiro bloco de código (SQL).
Salve o código da interface como cadastro.php dentro da pasta htdocs do seu XAMPP.
Abra seu navegador e acesse: http://localhost/cadastro.php
👏 👏 👏

Ótimo agora temos segurança

Sistemas Operacionais - E/S - Aula 3.1

Sistemas Operacionais: E/S - Prof. Carlos Tojeiro
Aula 03 - Entrada e Saída (E/S)

Prof. Carlos Tojeiro: Sistemas Operacionais

1. Qual a função principal do subsistema de E/S em um Sistema Operacional?
2. O que é o mecanismo de Interrupção?
3. Qual a principal vantagem do DMA (Direct Memory Access)?
4. O que caracteriza o "Buffering" em Sistemas Operacionais?
5. O conceito de "Spooling" é comumente associado a qual dispositivo?
6. O que é um "Device Driver"?
7. Na E/S programada (Polling), a CPU fica:
8. Qual a diferença entre dispositivos de Bloco e dispositivos de Caractere?
9. O Controlador de Dispositivo (Device Controller) é responsável por:
10. Por que a velocidade de E/S é um gargalo para os computadores modernos?

Auditoria de Sistemas: Rootkits e Integridade - Aula 4.9

Desafio de Integridade: Rootkits - Prof. Carlos

Pesquisa de Integridade & Rootkits

Complete a pesquisa teórica para validar sua atividade.

1. Qual o diferencial de um Rootkit comparado a outros malwares?
2. Em qual nível (Ring) o Rootkit de Kernel opera?
3. O que o Rootkit altera para esconder arquivos do administrador?
4. A técnica de "Hooking" serve para:
5. Por que o Gerenciador de Tarefas não vê o processo do Rootkit?
6. O que significa "Perda de Integridade" em um sistema?
7. O DKOM (Direct Kernel Object Manipulation) atua na:
8. Qual Rootkit é o mais difícil de remover (sobrevive à formatação)?
9. O que garante a integridade do boot (inicialização)?
10. Qual a ação recomendada ao detectar um Rootkit de Kernel?

segunda-feira, 23 de março de 2026

Sistemas Operacionais - Guia de Hardware

Checklist foi desenhado para garantir a saúde física e lógica dos Computadores:

Inspeção Física: Limpeza de poeira (coolers e dissipadores) e troca de pasta térmica (se necessário).

Verificação de Conexões: Reassentamento de memórias RAM e cabos SATA/NVMe.

Saúde do Sistema (Comandos):

arch: Identifica a arquitetura (essencial para baixar drivers/ISOs corretas).

1. lscpu: Verifica se todos os núcleos e a frequência do processador estão corretos.

2. lspci & lsusb: Garante que as controladoras e periféricos estão sendo detectados eletricamente.

3. lsblk: Monitora a saúde e o particionamento dos discos de bloco.

4. free -h: Verifica se toda a memória RAM instalada está sendo reconhecida pelo SO.

5. dmidecode: Acessa dados da BIOS para checar versões de firmware e slots ocupados.

6. journalctl -p err: O comando crucial para diagnóstico. O parâmetro -p err filtra as mensagens do log do sistema (systemd journal) exibindo apenas as de nível de prioridade "Error" ou superior. É aqui que o hardware costuma "reclamar" de falhas de leitura no disco ou erros de barramento.

Checklist de Manutenção Preventiva - Professor Carlos

🛠️ Checklist de Diagnóstico de Hardware (Linux)

Utilize os comandos abaixo para realizar um inventário rápido e verificar a integridade do hardware nos Computadores.

1. Verificar Arquitetura do Sistema:
arch
2. Detalhes do Processador e Cache:
lscpu
3. Verificar Memória RAM disponível (Modo Humano):
free -h
4. Listar Dispositivos de Bloco (Discos e Partições):
lsblk
5. Listar Dispositivos PCI e USB:
lspci && lsusb
6. Inventário Físico via BIOS (Requer sudo):
sudo dmidecode -t baseboard
7. Diagnóstico de Erros Críticos de Hardware:
journalctl -p err

O parâmetro -p err filtra o log para mostrar apenas erros reais de hardware e drivers, ignorando avisos irrelevantes.

sábado, 21 de março de 2026

Otimizando Mirrors no Debian 13

Lab: Configurando Mirrors no Debian 13

Prática: Otimizando Mirrors no Debian 13 (Trixie)

Professor Carlos: Esta atividade foca na edição do sources.list para garantir downloads mais rápidos e acesso aos drivers non-free.

1. Backup de Segurança

Antes de alterar arquivos críticos do sistema, sempre realize uma cópia de segurança:

sudo cp /etc/apt/sources.list /etc/apt/sources.list.bkp

2. Configurando Espelhos Brasileiros

Abra o arquivo de fontes com o editor Nano:

sudo nano /etc/apt/sources.list

Substitua o conteúdo pelas linhas abaixo (otimizadas para o Brasil):

# Repositórios Oficiais - Debian 13 Trixie
deb http://ftp.br.debian.org/debian/ trixie main non-free-firmware contrib non-free
deb-src http://ftp.br.debian.org/debian/ trixie main non-free-firmware contrib non-free

# Atualizações de Segurança
deb http://security.debian.org/debian-security trixie-security main non-free-firmware
deb-src http://security.debian.org/debian-security trixie-security main non-free-firmware

3. Atualizando a Base de Dados

Após salvar (Ctrl+O) e sair (Ctrl+X), sincronize os novos espelhos:

sudo apt update && sudo apt upgrade -y

Atividade elaborada para a disciplina de Sistemas Operacionais.

📝 Questionário de Pesquisa

Responda às seguintes questões em seu relatório (entrega via Word):

  1. Velocidade e Latência: Qual a principal vantagem técnica de configurar um Mirror geograficamente próximo à sua localização física?
  2. Firmwares Modernos: No Debian 13, por que é essencial incluir a seção non-free-firmware nas linhas do repositório?
  3. Segurança: Explique a diferença entre o repositório principal (Main) e o repositório de segurança (Security). O que aconteceria se o segundo fosse removido?
  4. Sincronização: Por que o comando sudo apt update deve ser executado obrigatoriamente antes do comando sudo apt upgrade?
  5. Versionamento: O que acontece com o sistema se você mantiver o nome da distribuição como "bookworm" (Debian 12) em vez de "trixie" (Debian 13) no seu sources.list?

sexta-feira, 20 de março de 2026

Capture Flag - Segurança - Command Injection

🚩 Desafio #04: Capture The Flag - Command Injection

Módulo: Segurança de Aplicações Web

🎯 Missão: Explorar a falha de injeção de comandos no servidor para ler a Flag em /var/secret/flag.txt.

🚀 Laboratório:

📦 1. docker-compose.yml
services:
  web-ctf:
    build: .
    ports:
      - "8080:80"
    restart: always
    container_name: ctf_seguranca_4
📄 2. Dockerfile
FROM php:8.2-apache

RUN apt-get update && apt-get install -y iputils-ping && rm -rf /var/lib/apt/lists/*

COPY index.php /var/www/html/

RUN mkdir -p /var/secret && \
    echo "CTF{COMMAND_INJECTION_SUCCESS_2026}" > /var/secret/flag.txt

RUN chown -R www-data:www-data /var/www/html
🌐 3. index.php (Aplicação)
<?php
// Aplicação vulnerável para fins educacionais
?>
<!DOCTYPE html>
<html>
<head>
    <title>Rede Admin</title>
</head>
<body>
    <h2>Diagnóstico de Rede</h2>
    <form method="GET">
        <input type="text" name="host" placeholder="IP">
        <button type="submit">Ping</button>
    </form>
    <?php
    if (isset($_GET['host'])) {
        $host = $_GET['host'];
        // Execução direta no shell
        echo "<pre>" . shell_exec("ping -c 2 " . $host) . "</pre>";
    }
    ?>
</body>
</html>
🛠️ 4. Instruções de Execução (Passo a Passo)
  1. Criar Diretório: Abra o terminal e crie uma pasta exclusiva para o desafio:
    mkdir ctf-seguranca-4 && cd ctf-seguranca-4
  2. Salvar Arquivos: Crie os 3 arquivos acima (docker-compose.yml, Dockerfile e index.php) dentro desta pasta com o conteúdo fornecido.
  3. Subir o Ambiente: No terminal, execute o comando:
    docker-compose up -d
  4. Acessar o Desafio: Abra seu navegador e acesse: http://localhost:8080

Atenção: Certifique-se de que a porta 8080 não está sendo usada por outro serviço (como o Jenkins ou outro container).

📝 ENVIAR RESPOSTA #04

💡 Dica do Prof. Carlos: Se o comando docker-compose up -d apresentar erro de permissão, lembre-se de usar o sudo ou verificar se o seu usuário está no grupo docker. Segurança começa na configuração do ambiente!

terça-feira, 17 de março de 2026

Fundamentos de Banco de Dados - Aula 12

Tipos de Dados MysqlTipos de Dados Mysql


🧠 Quiz: Tipagem e Otimização MySQL

1. Para armazenar a idade de uma pessoa (0 a 120 anos) ocupando o menor espaço possível, qual tipo usar?

2. Por que usar DECIMAL(10,2) para preços em vez de FLOAT?

3. Um campo ID que chegará a 5 bilhões de registros deve ser de qual tipo?

4. O que define o parâmetro (10,4) em um campo DECIMAL(10,4)?

5. Qual o impacto direto de escolher tipos de dados maiores do que o necessário?

Estrutura de Dados - Prof. Carlos Tojeiro MySQL
-- Criando o banco de dados
CREATE DATABASE MicroMercado;
USE MicroMercado;

-- Exercício 1: Micro-Mercado (Foco em economia e precisão)
CREATE TABLE PRODUTO (
    id_produto SMALLINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    nome_produto VARCHAR(100) NOT NULL,
    preco_venda DECIMAL(10,2) NOT NULL,
    quantidade_estoque INT DEFAULT 0,
    status_ativo TINYINT(1) DEFAULT 1 -- 1 para Ativo, 0 para Inativo
);

-- Exercício 2: Monitoramento de Sensores (Foco em Big Data e performance)
CREATE TABLE LEITURA_SENSOR (
    id_leitura BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    valor_temperatura FLOAT NOT NULL, 
    data_hora DATETIME DEFAULT CURRENT_TIMESTAMP,
    bateria_sensor TINYINT UNSIGNED -- Valor de 0 a 100 cabe em 1 byte
);

-- Exercício 3: Folha de Pagamento (Foco em alta precisão financeira)
CREATE TABLE FUNCIONARIO (
    id_funcionario INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    salario_base DECIMAL(15,2) NOT NULL,
    percentual_bonus DECIMAL(6,5), -- Exemplo: 1.12534%
    total_filhos TINYINT UNSIGNED DEFAULT 0
);

// Apagar o Banco de Dados
DROP DATABASE nome_do_banco;

sábado, 14 de março de 2026

Aula Comandos Linux (Shell Script)

Aula Linux III: Automação com Shell Script

Aprenda a criar scripts que trabalham por você.

Um script é um arquivo de texto contendo uma sequência de comandos que o sistema executa automaticamente.

Todo script deve começar com a "Shebang": #!/bin/bash

Crie o arquivo e adicione o comando echo para imprimir texto.

nano ola.sh

Dentro do arquivo, digite:

#!/bin/bash
echo "Olá, mundo! Hoje é $(date)"

Por segurança, novos arquivos não são executáveis por padrão.

chmod +x ola.sh
./ola.sh

Armazene dados para usar depois (sem espaços ao redor do "=").

NOME="Professor"
echo "Bem-vindo, $NOME"

Faça o script interagir com quem o executa.

echo "Qual seu nome?"
read USUARIO
echo "Prazer em te conhecer, $USUARIO"

Use $1, $2 para capturar palavras enviadas junto ao comando.

./script.sh argumento1 argumento2

Verifica se uma condição é verdadeira.

if [ $USER == "root" ]; then
  echo "Você é o superusuário!"
else
  echo "Você é um usuário comum."
fi

Verificar se um arquivo existe antes de fazer algo.

if [ -f "/etc/passwd" ]; then
  echo "Arquivo de senhas encontrado."
fi

Executa uma ação para vários itens.

for i in {1..5}; do
  echo "Contagem: $i"
done

Repete enquanto a condição for verdade.

CONT=1
while [ $CONT -le 5 ]; do
  echo "Número $CONT"
  let CONT=$CONT+1
done

O Shell não faz contas direto, use $(( )).

SOMA=$((10 + 5))
echo "O resultado é $SOMA"

Agrupe comandos para reutilizar.

mensagem_erro() {
  echo "ERRO: Algo deu errado!"
}
mensagem_erro

Salve o resultado de um comando dentro de uma variável.

IP=$(hostname -I)
echo "Seu IP é: $IP"

Um exemplo real: compactar uma pasta.

#!/bin/bash
DATA=$(date +%Y-%m-%d)
tar -czf backup_$DATA.tar.gz /home/usuario/documentos

Desafio: Crie um script chamado monitor.sh que:

  1. Mostre a data e hora atual.
  2. Mostre o tempo que a máquina está ligada (uptime).
  3. Mostre o uso da memória RAM.
  4. Salve todas essas informações em um arquivo chamado log_sistema.txt automaticamente.

Dica: Use o redirecionamento >> para salvar no arquivo sem apagar o que já existe.

Aula Linux Comandos (Nível Intermediário)

Aula Linux II: Permissões e Processos

Nesta continuação, exploraremos o controle profundo do sistema.

O comando sudo permite executar comandos com privilégios de administrador.

sudo su -
Cuidado: No modo root (#), você pode apagar o sistema inteiro.

Grupos facilitam a gestão de múltiplos usuários.

sudo groupadd financeiro
sudo usermod -aG financeiro aluno1

Visualize as permissões de leitura (r), escrita (w) e execução (x):

ls -l /etc/passwd

Dar permissão total a um arquivo (não recomendado em produção):

chmod 777 arquivo.txt
sudo chown usuario:grupo arquivo.txt

O Nano é o editor mais simples para terminal.

nano meu_script.sh

Procurar um arquivo pelo nome em todo o sistema:

sudo find / -name "config.conf"

Buscar a palavra "erro" dentro de um log:

grep "error" /var/log/syslog
ps aux

Forçar o fechamento de um programa pelo PID:

sudo kill -9 1234

Ver tarefas agendadas:

crontab -l
sudo ss -tulpn
sudo apt update && sudo apt upgrade -y

Missão Final:

  1. Crie um grupo chamado seguranca.
  2. Crie um arquivo chamado relatorio.txt.
  3. Altere o grupo do arquivo para seguranca.
  4. Remova todas as permissões de "outros" (others) do arquivo.
  5. Use o grep para encontrar seu nome de usuário no arquivo /etc/passwd.



SCRIPT 2



#!/bin/bash

# Exibe a data atual
echo "Iniciando manutenção em: $(date)"

# Atualiza a lista de pacotes
echo "Atualizando repositórios..."
sudo apt update

# Limpa arquivos temporários do sistema
echo "Limpando cache do gerenciador de pacotes..."
sudo apt autoremove -y
sudo apt clean

echo "Manutenção concluída com sucesso! 🚀"



SCRIPT 2



#!/bin/bash

# 1. Define o nome da pasta com a data atual (Ano-Mês-Dia)
PASTA=$(date +%Y-%m-%d)

# 2. Cria a pasta (o -p evita erro se ela já existir)
mkdir -p "$PASTA"

# 3. Move todos os arquivos .txt para a nova pasta
mv *.txt "$PASTA/"

echo "Arquivos .txt movidos para a pasta: $PASTA"