From 875462a7c18be0867744ecddbb48d7fbd07f74ea Mon Sep 17 00:00:00 2001 From: Daniel Esmeraldo Date: Tue, 28 Apr 2026 15:00:20 -0300 Subject: [PATCH 01/11] atividade_1 --- .../Daniel_Esmeraldo/atividade_1/dados.txt | 20 +++++++++++++ .../Daniel_Esmeraldo/atividade_1/grep1.txt | 7 +++++ .../Daniel_Esmeraldo/atividade_1/grep2.txt | 10 +++++++ .../Daniel_Esmeraldo/atividade_1/grep3.txt | 1 + .../Daniel_Esmeraldo/atividade_1/grep4.txt | 1 + .../atividade_1/perguntas_resposta.txt | 8 +++++ .../Daniel_Esmeraldo/atividade_1/script.sh | 29 +++++++++++++++++++ 7 files changed, 76 insertions(+) create mode 100644 noturno/lab/Daniel_Esmeraldo/atividade_1/dados.txt create mode 100644 noturno/lab/Daniel_Esmeraldo/atividade_1/grep1.txt create mode 100644 noturno/lab/Daniel_Esmeraldo/atividade_1/grep2.txt create mode 100644 noturno/lab/Daniel_Esmeraldo/atividade_1/grep3.txt create mode 100644 noturno/lab/Daniel_Esmeraldo/atividade_1/grep4.txt create mode 100644 noturno/lab/Daniel_Esmeraldo/atividade_1/perguntas_resposta.txt create mode 100644 noturno/lab/Daniel_Esmeraldo/atividade_1/script.sh diff --git a/noturno/lab/Daniel_Esmeraldo/atividade_1/dados.txt b/noturno/lab/Daniel_Esmeraldo/atividade_1/dados.txt new file mode 100644 index 0000000..f548945 --- /dev/null +++ b/noturno/lab/Daniel_Esmeraldo/atividade_1/dados.txt @@ -0,0 +1,20 @@ +Ana Silva, 25, ana.silva@gmail.com +Bruno Costa, trinta e dois, bruno.c@yahoo.com +Carlos Souza, 19, c.souza@outlook.com +Daniela Lima, vinte e sete, dani.lima@gmail.com +Eduardo Rocha, 45, edu.rocha@yahoo.com +Fernanda Alves, quarenta, fe.alves@outlook.com +Gabriel Neves, 21, gabi.neves@gmail.com +Helena Porto, dezoito, h.porto@yahoo.com +Igor Mendes, 34, igor.mendes@outlook.com +Juliana Farias, vinte e nove, ju.farias@gmail.com +Kevin Santos, 22, kevin.santos@yahoo.com +Larissa Gomes, trinta e cinco, lari.gomes@outlook.com +Maurício Vaz, 50, mau.vaz@gmail.com +Natália Reis, quarenta e dois, naty.reis@yahoo.com +Otávio Cruz, 27, otavio.cruz@outlook.com +Patrícia Belo, vinte e quatro, patri.belo@gmail.com +Ricardo Dias, 38, ric.dias@yahoo.com +Sabrina Leite, trinta e um, sabrina.l@outlook.com +Tiago Nunes, 26, tiago.n@gmail.com +Vanessa Meira, dezenove, vanessa.m@yahoo.com diff --git a/noturno/lab/Daniel_Esmeraldo/atividade_1/grep1.txt b/noturno/lab/Daniel_Esmeraldo/atividade_1/grep1.txt new file mode 100644 index 0000000..e162a22 --- /dev/null +++ b/noturno/lab/Daniel_Esmeraldo/atividade_1/grep1.txt @@ -0,0 +1,7 @@ +Ana Silva, 25, ana.silva@gmail.com +Daniela Lima, vinte e sete, dani.lima@gmail.com +Gabriel Neves, 21, gabi.neves@gmail.com +Juliana Farias, vinte e nove, ju.farias@gmail.com +Maurício Vaz, 50, mau.vaz@gmail.com +Patrícia Belo, vinte e quatro, patri.belo@gmail.com +Tiago Nunes, 26, tiago.n@gmail.com diff --git a/noturno/lab/Daniel_Esmeraldo/atividade_1/grep2.txt b/noturno/lab/Daniel_Esmeraldo/atividade_1/grep2.txt new file mode 100644 index 0000000..8675490 --- /dev/null +++ b/noturno/lab/Daniel_Esmeraldo/atividade_1/grep2.txt @@ -0,0 +1,10 @@ +Bruno Costa, trinta e dois, bruno.c@yahoo.com +Daniela Lima, vinte e sete, dani.lima@gmail.com +Fernanda Alves, quarenta, fe.alves@outlook.com +Helena Porto, dezoito, h.porto@yahoo.com +Juliana Farias, vinte e nove, ju.farias@gmail.com +Larissa Gomes, trinta e cinco, lari.gomes@outlook.com +Natália Reis, quarenta e dois, naty.reis@yahoo.com +Patrícia Belo, vinte e quatro, patri.belo@gmail.com +Sabrina Leite, trinta e um, sabrina.l@outlook.com +Vanessa Meira, dezenove, vanessa.m@yahoo.com diff --git a/noturno/lab/Daniel_Esmeraldo/atividade_1/grep3.txt b/noturno/lab/Daniel_Esmeraldo/atividade_1/grep3.txt new file mode 100644 index 0000000..d6b2404 --- /dev/null +++ b/noturno/lab/Daniel_Esmeraldo/atividade_1/grep3.txt @@ -0,0 +1 @@ +19 diff --git a/noturno/lab/Daniel_Esmeraldo/atividade_1/grep4.txt b/noturno/lab/Daniel_Esmeraldo/atividade_1/grep4.txt new file mode 100644 index 0000000..0e16ffb --- /dev/null +++ b/noturno/lab/Daniel_Esmeraldo/atividade_1/grep4.txt @@ -0,0 +1 @@ +Ana Silva, 25, ana.silva@gmail.com diff --git a/noturno/lab/Daniel_Esmeraldo/atividade_1/perguntas_resposta.txt b/noturno/lab/Daniel_Esmeraldo/atividade_1/perguntas_resposta.txt new file mode 100644 index 0000000..54c6d3f --- /dev/null +++ b/noturno/lab/Daniel_Esmeraldo/atividade_1/perguntas_resposta.txt @@ -0,0 +1,8 @@ +- Qual é a diferença entre `grep "padrão"` e `grep -E "padrão"`? + O grep padrão utiliza Expressões Regulares Básicas (BRE), nele símbolos especiais são lidos como texto normal, para utilizá-los é necessário colocar um "\" antes. + O grep -E ativa as Expressões Regulares Estendidas (ERE), nele símbolos especiais são lidos como símbolos espciais diretamente. É a forma recomendada para buscas complexas. +- Como usar regex para encontrar e-mails? + Utilizar a estrutura do email: usuário + @ + provedor + ponto + extensão + Comando: grep "[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,} nome_arquivo +- O que `grep -i` faz? + O -i vem de Ignore Case, isso faz com que ele ignore maiúsculas e minúsculas. Então grep -i "Rodrigo" retornaria, por exemplo: rodrigo, RODrigO, RODRIGO. diff --git a/noturno/lab/Daniel_Esmeraldo/atividade_1/script.sh b/noturno/lab/Daniel_Esmeraldo/atividade_1/script.sh new file mode 100644 index 0000000..1aa2f5b --- /dev/null +++ b/noturno/lab/Daniel_Esmeraldo/atividade_1/script.sh @@ -0,0 +1,29 @@ +#!/bin/bash + +cat > dados.txt << EOF +Ana Silva, 25, ana.silva@gmail.com +Bruno Costa, trinta e dois, bruno.c@yahoo.com +Carlos Souza, 19, c.souza@outlook.com +Daniela Lima, vinte e sete, dani.lima@gmail.com +Eduardo Rocha, 45, edu.rocha@yahoo.com +Fernanda Alves, quarenta, fe.alves@outlook.com +Gabriel Neves, 21, gabi.neves@gmail.com +Helena Porto, dezoito, h.porto@yahoo.com +Igor Mendes, 34, igor.mendes@outlook.com +Juliana Farias, vinte e nove, ju.farias@gmail.com +Kevin Santos, 22, kevin.santos@yahoo.com +Larissa Gomes, trinta e cinco, lari.gomes@outlook.com +Maurício Vaz, 50, mau.vaz@gmail.com +Natália Reis, quarenta e dois, naty.reis@yahoo.com +Otávio Cruz, 27, otavio.cruz@outlook.com +Patrícia Belo, vinte e quatro, patri.belo@gmail.com +Ricardo Dias, 38, ric.dias@yahoo.com +Sabrina Leite, trinta e um, sabrina.l@outlook.com +Tiago Nunes, 26, tiago.n@gmail.com +Vanessa Meira, dezenove, vanessa.m@yahoo.com +EOF + +grep "gmail.com" dados.txt > grep1.txt +grep -v "[0-9]" dados.txt > grep2.txt +grep -c "a" dados.txt > grep3.txt +grep "^A" dados.txt > grep4.txt From d7bd7c2522e92a315c9af7ea90040af1aa482d05 Mon Sep 17 00:00:00 2001 From: Daniel Esmeraldo Date: Tue, 28 Apr 2026 15:24:17 -0300 Subject: [PATCH 02/11] atividade_2 --- .../Daniel_Esmeraldo/atividade_2/config.txt | 10 ++++++++++ .../atividade_2/perguntas_resposta.txt | 7 +++++++ .../Daniel_Esmeraldo/atividade_2/script.sh | 19 +++++++++++++++++++ 3 files changed, 36 insertions(+) create mode 100644 noturno/lab/Daniel_Esmeraldo/atividade_2/config.txt create mode 100644 noturno/lab/Daniel_Esmeraldo/atividade_2/perguntas_resposta.txt create mode 100644 noturno/lab/Daniel_Esmeraldo/atividade_2/script.sh diff --git a/noturno/lab/Daniel_Esmeraldo/atividade_2/config.txt b/noturno/lab/Daniel_Esmeraldo/atividade_2/config.txt new file mode 100644 index 0000000..f38fd8c --- /dev/null +++ b/noturno/lab/Daniel_Esmeraldo/atividade_2/config.txt @@ -0,0 +1,10 @@ +SERVIDOR=localhost +# Configurações do Banco de Dados +BANCO=producao +# Porta de acesso +PORTA=8080 +TIMEOUT=30 +# Modo de debug +DEBUG=false +# Limite de conexões +MAX_CONN=100 diff --git a/noturno/lab/Daniel_Esmeraldo/atividade_2/perguntas_resposta.txt b/noturno/lab/Daniel_Esmeraldo/atividade_2/perguntas_resposta.txt new file mode 100644 index 0000000..54d8cf2 --- /dev/null +++ b/noturno/lab/Daniel_Esmeraldo/atividade_2/perguntas_resposta.txt @@ -0,0 +1,7 @@ +- Por que usar `sed` em vez de editar o arquivo manualmente? + O sed permite automação, imagina ter que alterar o IP de 1000 servidores diferente manualmente, demoraria muito tempo. O sed permite automatizar isso. +- Qual é a diferença entre `sed 's/old/new/'` e `sed 's/old/new/g'`? + Sem o g, o sed altera apenas a primeira ocorrência da palavra em cada linha. + Com o g (global), o sed altera todas as ocorrências da palavra em cada linha. +- Como usar `sed` para fazer backup antes de modificar? + Usar o sed -i.bak 's/old/new/' nome_arquivo, esse comando altera o arquivo original e cria um backup do mesmo: nome_arquivo.bak diff --git a/noturno/lab/Daniel_Esmeraldo/atividade_2/script.sh b/noturno/lab/Daniel_Esmeraldo/atividade_2/script.sh new file mode 100644 index 0000000..336eb97 --- /dev/null +++ b/noturno/lab/Daniel_Esmeraldo/atividade_2/script.sh @@ -0,0 +1,19 @@ +#!/bin/bash + +cat > config.txt << EOF +SERVIDOR=localhost +# Configurações do Banco de Dados +BANCO=producao +# Porta de acesso +PORTA=8080 +TIMEOUT=30 +# Modo de debug +DEBUG=false +# Limite de conexões +MAX_CONN=100 +EOF + +sed 's/localhost/192.168.1.1/' config.txt +sed '/^#/d' config.txt +sed -n '5,10p' config.txt +sed 's/^/SISTEMA_/' config.txt From 0cd64c609a1cd2578c201fc20b2988fd3b7e0e97 Mon Sep 17 00:00:00 2001 From: Daniel Esmeraldo Date: Tue, 28 Apr 2026 16:08:02 -0300 Subject: [PATCH 03/11] atividade_3 --- .../atividade_3/perguntas_resposta.txt | 9 ++++++ .../Daniel_Esmeraldo/atividade_3/script.sh | 30 +++++++++++++++++++ .../Daniel_Esmeraldo/atividade_3/vendas.txt | 21 +++++++++++++ 3 files changed, 60 insertions(+) create mode 100644 noturno/lab/Daniel_Esmeraldo/atividade_3/perguntas_resposta.txt create mode 100644 noturno/lab/Daniel_Esmeraldo/atividade_3/script.sh create mode 100644 noturno/lab/Daniel_Esmeraldo/atividade_3/vendas.txt diff --git a/noturno/lab/Daniel_Esmeraldo/atividade_3/perguntas_resposta.txt b/noturno/lab/Daniel_Esmeraldo/atividade_3/perguntas_resposta.txt new file mode 100644 index 0000000..dc9318f --- /dev/null +++ b/noturno/lab/Daniel_Esmeraldo/atividade_3/perguntas_resposta.txt @@ -0,0 +1,9 @@ +- Por que usar `awk` em vez de `cut` ou `grep`? + O grep é bom em achar linhas inteiras, mas não lida bem com colunas. + O cut é bom pra separar colunas simples, mas é limitidado. Não consegue usar a lógica. + Já o awk é uma ferramenta de análise de dados completa. Ele lida muito bem com colunas, sabe fazer operações e usar a lógica. Além de formatar o texto de saída de uma forma mais bonita. +- Como usar `awk` para processar arquivos CSV? + É só utilizar o parâmetro -F (Field Separator) com uma "," ou ";" ou "|". +- Qual é a diferença entre `awk` e `sed`? + O sed (Stream Editor) é focado em edição e transformação. É ótimo para substituir palavras, deletar linhas ou inserir texto em posições específicas. + O awk é focado em extração e processamento de dados. É o melhor para gerar relatórios, somar valores e trabalhar com tabelas e colunas. diff --git a/noturno/lab/Daniel_Esmeraldo/atividade_3/script.sh b/noturno/lab/Daniel_Esmeraldo/atividade_3/script.sh new file mode 100644 index 0000000..555b2a7 --- /dev/null +++ b/noturno/lab/Daniel_Esmeraldo/atividade_3/script.sh @@ -0,0 +1,30 @@ +#!/bin/bash + +cat > vendas.txt << EOF +produto:preco:quantidade +Roteador Cisco:1245:5 +Switch Gerenciável:857:10 +Cabo de Rede Cat6:453:2 +Servidor Dell:15321:1 +Firewall Fortigate:4512:2 +Conector RJ45:87:15 +Access Point:984:8 +Patch Panel:322:4 +Rack de Parede:559:3 +Nobreak 1500VA:1124:5 +Placa de Rede Gigabit:123:20 +Fibra Óptica:1847:1 +Transceiver SFP+:256:12 +Testador de Cabos:193:6 +Alicate de Crimpagem:78:10 +Organizador de Cabos:49:25 +Teclado Mecânico:352:7 +Monitor 24 Polegadas:899:12 +HD Externo 2TB:427:9 +Câmera IP:381:14 +EOF + +awk -F: 'NR>1 && $2 > 100 { print $1 "|" $2 "|" $3}' vendas.txt +awk -F: 'NR>1 { print "Total:", $2 * $3 }' vendas.txt +awk -F: 'NR>1 { total_geral += $2 * $3 } END { print "Total Geral:", total_geral }' vendas.txt +awk -F: 'NR>1 { contador ++ } END { print "Produtos:", contador }' vendas.txt diff --git a/noturno/lab/Daniel_Esmeraldo/atividade_3/vendas.txt b/noturno/lab/Daniel_Esmeraldo/atividade_3/vendas.txt new file mode 100644 index 0000000..4d5cdc0 --- /dev/null +++ b/noturno/lab/Daniel_Esmeraldo/atividade_3/vendas.txt @@ -0,0 +1,21 @@ +produto:preco:quantidade +Roteador Cisco:1245:5 +Switch Gerenciável:857:10 +Cabo de Rede Cat6:453:2 +Servidor Dell:15321:1 +Firewall Fortigate:4512:2 +Conector RJ45:87:15 +Access Point:984:8 +Patch Panel:322:4 +Rack de Parede:559:3 +Nobreak 1500VA:1124:5 +Placa de Rede Gigabit:123:20 +Fibra Óptica:1847:1 +Transceiver SFP+:256:12 +Testador de Cabos:193:6 +Alicate de Crimpagem:78:10 +Organizador de Cabos:49:25 +Teclado Mecânico:352:7 +Monitor 24 Polegadas:899:12 +HD Externo 2TB:427:9 +Câmera IP:381:14 From 64714dfc7eb45a63b2eb74d8fbcda5ad3b15b996 Mon Sep 17 00:00:00 2001 From: Daniel Esmeraldo Date: Tue, 28 Apr 2026 16:42:23 -0300 Subject: [PATCH 04/11] atividade_4 --- .../lab/Daniel_Esmeraldo/atividade_4/log.txt | 20 +++++++++++++ .../atividade_4/perguntas_resposta.txt | 10 +++++++ .../atividade_4/relatorio_erros.txt | 4 +++ .../Daniel_Esmeraldo/atividade_4/script.sh | 28 +++++++++++++++++++ 4 files changed, 62 insertions(+) create mode 100644 noturno/lab/Daniel_Esmeraldo/atividade_4/log.txt create mode 100644 noturno/lab/Daniel_Esmeraldo/atividade_4/perguntas_resposta.txt create mode 100644 noturno/lab/Daniel_Esmeraldo/atividade_4/relatorio_erros.txt create mode 100644 noturno/lab/Daniel_Esmeraldo/atividade_4/script.sh diff --git a/noturno/lab/Daniel_Esmeraldo/atividade_4/log.txt b/noturno/lab/Daniel_Esmeraldo/atividade_4/log.txt new file mode 100644 index 0000000..46f73da --- /dev/null +++ b/noturno/lab/Daniel_Esmeraldo/atividade_4/log.txt @@ -0,0 +1,20 @@ +2025-01-15 08:23:45 [INFO] Usuário admin fez login +2025-01-15 08:45:12 [ERROR] Falha de conexão com banco de dados +2025-01-15 09:02:30 [ERROR] Timeout na requisição API +2025-01-15 09:15:22 [INFO] Backup concluído +2025-01-15 09:30:17 [WARN] Uso de CPU acima de 80% +2025-01-15 09:45:08 [ERROR] Falha de conexão com banco de dados +2025-01-15 10:00:01 [INFO] Usuário jose fez logout +2025-01-15 10:22:44 [ERROR] Arquivo não encontrado: config.xml +2025-01-15 10:45:33 [WARN] Pouco espaço em disco (15% livre) +2025-01-15 11:05:19 [ERROR] Timeout na requisição API +2025-01-15 11:30:02 [INFO] Relatório gerado com sucesso +2025-01-15 11:55:48 [ERROR] Falha de conexão com banco de dados +2025-01-15 12:20:15 [INFO] Usuário admin fez logout +2025-01-15 12:45:33 [ERROR] Permission denied: /var/log/syslog +2025-01-15 13:10:22 [WARN] Conexão lenta detectada +2025-01-15 13:35:07 [ERROR] Timeout na requisição API +2025-01-15 14:00:44 [INFO] Sincronização completa +2025-01-15 14:25:16 [ERROR] Falha de conexão com banco de dados +2025-01-15 14:50:39 [CRITICAL] Serviço web caiu +2025-01-15 15:15:03 [INFO] Serviço web reiniciado diff --git a/noturno/lab/Daniel_Esmeraldo/atividade_4/perguntas_resposta.txt b/noturno/lab/Daniel_Esmeraldo/atividade_4/perguntas_resposta.txt new file mode 100644 index 0000000..d370c2c --- /dev/null +++ b/noturno/lab/Daniel_Esmeraldo/atividade_4/perguntas_resposta.txt @@ -0,0 +1,10 @@ +- Como o kernel gerencia o buffer entre pipes? + Imagine o "|" como um cano fisico ligando os programas. O kernel do linux criar um buffer (uma área de memória temporária) para esse cano. + Quando o primeiro comando produz dados, o kernel os armazena nesse buffer até que o segundo programa esteja pronto para ler. + Se o buffer ficar cheio, o kernel coloca o primeiro comando em "pausa" até que o segundo programa consuma dados e abra um pouco de espaço. +- Por que `sort|uniq` é mais eficiente que `uniq`? + Porque quando usamos o uniq sozinho, ele não consegue contar os mesmo erros. Para isso acontecer eles tem que ficar linhas próximas. Usando ele sozinho teremos: 1 Erro A, 1 Erro B, 1 Erro A + Quando usamos o sort | uniq, o sort junta esses erroas em linhas próximas. Usando dessa forma teremos: 2 Erro A, 1 Erro B +- Como redirecionar stderr e stdout para arquivos diferentes? + Para stderr: comando 2> erros.txt + Para stdout: comando > sucessos.txt (1 implícito) diff --git a/noturno/lab/Daniel_Esmeraldo/atividade_4/relatorio_erros.txt b/noturno/lab/Daniel_Esmeraldo/atividade_4/relatorio_erros.txt new file mode 100644 index 0000000..7336685 --- /dev/null +++ b/noturno/lab/Daniel_Esmeraldo/atividade_4/relatorio_erros.txt @@ -0,0 +1,4 @@ + 4 Falha de conexão com banco de dados + 3 Timeout na requisição API + 1 Permission denied: /var/log/syslog + 1 Arquivo não encontrado: config.xml diff --git a/noturno/lab/Daniel_Esmeraldo/atividade_4/script.sh b/noturno/lab/Daniel_Esmeraldo/atividade_4/script.sh new file mode 100644 index 0000000..eaace28 --- /dev/null +++ b/noturno/lab/Daniel_Esmeraldo/atividade_4/script.sh @@ -0,0 +1,28 @@ +#!/bin/bash + +cat > log.txt << EOF +2025-01-15 08:23:45 [INFO] Usuário admin fez login +2025-01-15 08:45:12 [ERROR] Falha de conexão com banco de dados +2025-01-15 09:02:30 [ERROR] Timeout na requisição API +2025-01-15 09:15:22 [INFO] Backup concluído +2025-01-15 09:30:17 [WARN] Uso de CPU acima de 80% +2025-01-15 09:45:08 [ERROR] Falha de conexão com banco de dados +2025-01-15 10:00:01 [INFO] Usuário jose fez logout +2025-01-15 10:22:44 [ERROR] Arquivo não encontrado: config.xml +2025-01-15 10:45:33 [WARN] Pouco espaço em disco (15% livre) +2025-01-15 11:05:19 [ERROR] Timeout na requisição API +2025-01-15 11:30:02 [INFO] Relatório gerado com sucesso +2025-01-15 11:55:48 [ERROR] Falha de conexão com banco de dados +2025-01-15 12:20:15 [INFO] Usuário admin fez logout +2025-01-15 12:45:33 [ERROR] Permission denied: /var/log/syslog +2025-01-15 13:10:22 [WARN] Conexão lenta detectada +2025-01-15 13:35:07 [ERROR] Timeout na requisição API +2025-01-15 14:00:44 [INFO] Sincronização completa +2025-01-15 14:25:16 [ERROR] Falha de conexão com banco de dados +2025-01-15 14:50:39 [CRITICAL] Serviço web caiu +2025-01-15 15:15:03 [INFO] Serviço web reiniciado +EOF + +grep "ERROR" log.txt +grep "ERROR" log.txt | cut -d' ' -f4- | sort | uniq -c +grep "ERROR" log.txt | cut -d' ' -f4- | sort | uniq -c | sort -rn | head -5 > relatorio_erros.txt From 027892607f53de5572f2cf7181702ed33fc2cfe3 Mon Sep 17 00:00:00 2001 From: Daniel Esmeraldo Date: Tue, 28 Apr 2026 17:58:54 -0300 Subject: [PATCH 05/11] atividade_5 --- .../Daniel_Esmeraldo/atividade_5/config.sh | 31 +++++++++++++++++++ .../atividade_5/editor_exercicios.md | 9 ++++++ .../atividade_5/perguntas_resposta.txt | 10 ++++++ 3 files changed, 50 insertions(+) create mode 100644 noturno/lab/Daniel_Esmeraldo/atividade_5/config.sh create mode 100644 noturno/lab/Daniel_Esmeraldo/atividade_5/editor_exercicios.md create mode 100644 noturno/lab/Daniel_Esmeraldo/atividade_5/perguntas_resposta.txt diff --git a/noturno/lab/Daniel_Esmeraldo/atividade_5/config.sh b/noturno/lab/Daniel_Esmeraldo/atividade_5/config.sh new file mode 100644 index 0000000..24c6329 --- /dev/null +++ b/noturno/lab/Daniel_Esmeraldo/atividade_5/config.sh @@ -0,0 +1,31 @@ +#!/bin/bash +# Script de configuração do sistema +# Autor: Atividade V - Estudos Linux + +# Configureções de rede +SERVIDOR="localhost" +PORTA="8080" +PROTOCOLO="http" + +# Configurações de banco de dados +DB_HOST="localhost" +DB_USER="admin" +DB_PASS="senha123" +DB_NAME="meubanco" + +# Configurações de logging +LOG_DIR="/var/log/myapp" +LOG_LEVEL="INFO" +MAX_LOG_SIZE="10MB" + +# Configurações de timeout +CONNECTION_TIMEOUT=30 +READ_TIMEOUT=60 +WRITE_TIMEOUT=30 + +# Configurações de cache +CACHE_ENABLED="true" +CACHE_TTL=3600 +CACHE_SIZE="256MB" + +echo "Configurações carregadas com sucesso!" diff --git a/noturno/lab/Daniel_Esmeraldo/atividade_5/editor_exercicios.md b/noturno/lab/Daniel_Esmeraldo/atividade_5/editor_exercicios.md new file mode 100644 index 0000000..5939437 --- /dev/null +++ b/noturno/lab/Daniel_Esmeraldo/atividade_5/editor_exercicios.md @@ -0,0 +1,9 @@ + # Diferenças entre nano e vim + nano: Apenas um modo, baixa curva de aprendizado, atalhos mostrados na tela, boa para edições simples, personalização limitada, mais leve. + vim: Multiplos modos, alta curva de aprendizado, maior produtividade quando dominada, personalização altamente configurável, mais pesado, porém mais poderoso. + # Quando usar cada um + nano: Edição rápida, primeiro contato com o terminal, está sem internet e não lembra comandos (atalhos visíveis) + vim: Prgramar/ desenvolver código, edição complexa (muito arquivos seguidos), fazer substituições complexas em texto. + # Atalhos mais úteis + nano: Ctrl + 0 salva; Ctrl + X sai; Ctrl + W busca; Ctrl + K corta linha inteira; Alt + A inicia seleção de texto; Alt + 6 copia texto selecionado; Ctrl + G Ajuda (Help). + vim: :w salva; :q sai; :wq salva e sai; /busca busca; dd deleta linha; u desfaz (undo); Ctrl + r refaz (redo); diff --git a/noturno/lab/Daniel_Esmeraldo/atividade_5/perguntas_resposta.txt b/noturno/lab/Daniel_Esmeraldo/atividade_5/perguntas_resposta.txt new file mode 100644 index 0000000..865f3cb --- /dev/null +++ b/noturno/lab/Daniel_Esmeraldo/atividade_5/perguntas_resposta.txt @@ -0,0 +1,10 @@ +- Qual editor é melhor para editar configs do sistema? + Depende da situação, se for uma edição muito rápida, usa o nano. + Agora se for uma edição complexa, que demora, usa o vim. +- Como usar vim em modo não-interativo (via `sed`)? + Basta utiliza o sed -i 's/old/new/' nome_arquivo para alterar o arquivo original. +- Por que `visudo` é importante? + É uma das ferramentas de segurança mais críticas do Linux. + Se você cometer um erro de digitação no arquivo de permissões usando um editor comum e salva, você pode perder o acesso ao root. O visudo verifica se há um erro de digitação antes de salva. + Ele também impede que duas pessoas editem as permissões ao mesmo tempo, evitando que uma sobrescreva a alteração da outra. + O visudo também garante que o arquivo mantenha as permissões de leiturea corretas, impedindo que usuários comuns vejam regras e privilégios. From c454b4bdb3659573b723bfebbf6d1ddee59ba447 Mon Sep 17 00:00:00 2001 From: Daniel Esmeraldo Date: Wed, 29 Apr 2026 14:44:16 -0300 Subject: [PATCH 06/11] atividade_6 --- .../atividade_6/perguntas_resposta.txt | 23 ++++++++ .../Daniel_Esmeraldo/atividade_6/script.sh | 55 +++++++++++++++++++ 2 files changed, 78 insertions(+) create mode 100644 noturno/lab/Daniel_Esmeraldo/atividade_6/perguntas_resposta.txt create mode 100644 noturno/lab/Daniel_Esmeraldo/atividade_6/script.sh diff --git a/noturno/lab/Daniel_Esmeraldo/atividade_6/perguntas_resposta.txt b/noturno/lab/Daniel_Esmeraldo/atividade_6/perguntas_resposta.txt new file mode 100644 index 0000000..ad3f5be --- /dev/null +++ b/noturno/lab/Daniel_Esmeraldo/atividade_6/perguntas_resposta.txt @@ -0,0 +1,23 @@ +- Qual é a diferença entre permissões de arquivo e permissões de diretório? + Os símbolos são iguais, mas o significado muda. + Permissões de Arquivo: + r: Permite ler o conteúdo do arquivo. + w: Permite alterar o conteúdo do arquivo. + x: Permite executar o conteúdo do arquivo. + Permissões de diretório: + r: Permite listar os arquivos do diretório. + w: Permite adicionar ou remover arquivos no diretório. + x: Permite acessar o diretório. +- O que é setuid, setgid e sticky bit? + São permissões especiais para casos específicos: + setuid (4): Quando aplicado a um arquivo executável, ele executa com as permissões do dono do arquivo. + setgid (2): Em arquivos, roda com permissões do grupo dono. Em diretórios, fazem com que os novos arquivos criados alí herdem o grupo da pasta pai. + sticky bit (1): Usado em pastas públicas (como /tmp). Garante que apenas o dono do arquivo possa deletá-lo, mesmo que outros usuários tenham acesso de escrita. +- Como o umask afeta as permissões padrão? + O umask (user mask) é um "filtro" que retira permissões no momento da criação de um arquivo. + Se o seu umask for 022 e o sistema tentar criar permissões 666 para arquivos e 777 para diretórios: + Arquivo: 666 - 022 = 644 (Dono Lê e escreve, o resto só lê). + Diretório: 777 - 022 = 755 (Dono faz tudo, o resto lê e entra). +- Por que não usar 777 em produção? + Usar 777 para um projeto em grupo é um grande erro de segurança. Qualquer usuário teria como deletar/modificar arquivos. + Utilizando dessa forma, facilitaria para um invasor fazer o que quisesse, como injetar códigos maliciosos. diff --git a/noturno/lab/Daniel_Esmeraldo/atividade_6/script.sh b/noturno/lab/Daniel_Esmeraldo/atividade_6/script.sh new file mode 100644 index 0000000..0962ef0 --- /dev/null +++ b/noturno/lab/Daniel_Esmeraldo/atividade_6/script.sh @@ -0,0 +1,55 @@ +#!/bin/bash + +mkdir -p /testes && cd /testes + +useradd -m -s /bin/bash Usuario1 +useradd -m -s /bin/bash Usuario2 +useradd -m -s /bin/bash Usuario3 + +groupadd adm +groupadd dev +groupadd rh + +usermod -aG adm Usuario1 +usermod -aG dev,rh Usuario2 +usermod -aG dev Usuario3 + +touch arquivo1.txt arquivo2.txt arquivo3.txt arquivo4.txt +chmod 644 arquivo1.txt +chmod 755 arquivo2.txt +chmod 600 arquivo3.txt +chmod 700 arquivo4.txt + +su -c "cat arquivo1.txt" Usuario1 >> test_results.txt 2>&1 +su -c "cat arquivo2.txt" Usuario1 >> test_results.txt 2>&1 +su -c "cat arquivo3.txt" Usuario1 >> test_results.txt 2>&1 +su -c "cat arquivo4.txt" Usuario1 >> test_results.txt 2>&1 +su -c "echo 'teste' >> arquivo1.txt" Usuario1 >> test_results.txt 2>&1 +su -c "echo 'teste' >> arquivo2.txt" Usuario1 >> test_results.txt 2>&1 +su -c "echo 'teste' >> arquivo3.txt" Usuario1 >> test_results.txt 2>&1 +su -c "echo 'teste' >> arquivo4.txt" Usuario1 >> test_results.txt 2>&1 + +su -c "cat arquivo1.txt" Usuario2 >> test_results.txt 2>&1 +su -c "cat arquivo2.txt" Usuario2 >> test_results.txt 2>&1 +su -c "cat arquivo3.txt" Usuario2 >> test_results.txt 2>&1 +su -c "cat arquivo4.txt" Usuario2 >> test_results.txt 2>&1 +su -c "echo 'teste' >> arquivo1.txt" Usuario2 >> test_results.txt 2>&1 +su -c "echo 'teste' >> arquivo2.txt" Usuario2 >> test_results.txt 2>&1 +su -c "echo 'teste' >> arquivo3.txt" Usuario2 >> test_results.txt 2>&1 +su -c "echo 'teste' >> arquivo4.txt" Usuario2 >> test_results.txt 2>&1 + +su -c "cat arquivo1.txt" Usuario3 >> test_results.txt 2>&1 +su -c "cat arquivo2.txt" Usuario3 >> test_results.txt 2>&1 +su -c "cat arquivo3.txt" Usuario3 >> test_results.txt 2>&1 +su -c "cat arquivo4.txt" Usuario3 >> test_results.txt 2>&1 +su -c "echo 'teste' >> arquivo1.txt" Usuario3 >> test_results.txt 2>&1 +su -c "echo 'teste' >> arquivo2.txt" Usuario3 >> test_results.txt 2>&1 +su -c "echo 'teste' >> arquivo3.txt" Usuario3 >> test_results.txt 2>&1 +su -c "echo 'teste' >> arquivo4.txt" Usuario3 >> test_results.txt 2>&1 + +cat > permissoes_significado << EOF +Permissões: + r: O usuário poderá ler o arquivo + w: O usuário poderá alterar o arquivo + x: O usuário poderá executar o arquivo +EOF From 7c120982566bd34066956d870478730f5bf10b19 Mon Sep 17 00:00:00 2001 From: Daniel Esmeraldo Date: Wed, 29 Apr 2026 15:23:44 -0300 Subject: [PATCH 07/11] atividade_7 --- noturno/lab/Daniel_Esmeraldo/atividade_7/relatorio.txt | 2 ++ noturno/lab/Daniel_Esmeraldo/atividade_7/script.sh | 8 ++++++++ 2 files changed, 10 insertions(+) create mode 100644 noturno/lab/Daniel_Esmeraldo/atividade_7/relatorio.txt create mode 100644 noturno/lab/Daniel_Esmeraldo/atividade_7/script.sh diff --git a/noturno/lab/Daniel_Esmeraldo/atividade_7/relatorio.txt b/noturno/lab/Daniel_Esmeraldo/atividade_7/relatorio.txt new file mode 100644 index 0000000..07806cc --- /dev/null +++ b/noturno/lab/Daniel_Esmeraldo/atividade_7/relatorio.txt @@ -0,0 +1,2 @@ +Buscando arquivos com permissão 777... +Buscando arquivos com permissão setuid... diff --git a/noturno/lab/Daniel_Esmeraldo/atividade_7/script.sh b/noturno/lab/Daniel_Esmeraldo/atividade_7/script.sh new file mode 100644 index 0000000..f4f219d --- /dev/null +++ b/noturno/lab/Daniel_Esmeraldo/atividade_7/script.sh @@ -0,0 +1,8 @@ +#!/bin/bash + +echo Buscando arquivos com permissão 777... > relatorio.txt +find /home -perm 777 >> relatorio.txt 2>/dev/null +echo Buscando arquivos com permissão setuid... >> relatorio.txt +find / -perm /4000 >> relatorio.txt 2>/dev/null +echo Buscando usuários com UID 0... >> relatorio.txt +awk -F: '$3 == 0 { print $1 }' /etc/passwd >> relatorio.txt 2>/dev/null From 784bea031ffcacb82767ec36290d2ccc3a1a43bd Mon Sep 17 00:00:00 2001 From: Daniel Esmeraldo Date: Wed, 29 Apr 2026 22:03:00 -0300 Subject: [PATCH 08/11] atividade_8 --- .../atividade_8/perguntas_resposta.txt | 12 ++++++++++++ noturno/lab/Daniel_Esmeraldo/atividade_8/script.sh | 12 ++++++++++++ 2 files changed, 24 insertions(+) create mode 100644 noturno/lab/Daniel_Esmeraldo/atividade_8/perguntas_resposta.txt create mode 100644 noturno/lab/Daniel_Esmeraldo/atividade_8/script.sh diff --git a/noturno/lab/Daniel_Esmeraldo/atividade_8/perguntas_resposta.txt b/noturno/lab/Daniel_Esmeraldo/atividade_8/perguntas_resposta.txt new file mode 100644 index 0000000..c55a77c --- /dev/null +++ b/noturno/lab/Daniel_Esmeraldo/atividade_8/perguntas_resposta.txt @@ -0,0 +1,12 @@ +- Qual é a diferença entre ext4, btrfs e xfs? + Esses são formatos diferentes para organizar dados no disco: + ect4: É o padrão do Linux. É extremamente estável, confiável e compatível com quase tudo. É a escolha segura para a maioria dos usuários domésticos. + xfs: Focado em performance e estabilidade. Lida muito com arquivos gigantes e grande volume de dados. Ele é o padrão em distribuições mepresariais como o Red Hat. + btrfs: Ele é o sistema "moderno". Ele traz varias funções como snapshots, compressão de dados nativa e suporte fácil a RAID. +- Como funciona um loop device? + Um loop device é um arquivo virtual que permite você a montar ele como se fosse um disco rígido. + Você criar um arquivo vazio com o dd, formata ele com o mkfs.ext4 e "engana" o sistema para que ele trate esse arquivo como uma partição real. +- O que é /etc/fstab e por que é importante? + O fstab é um arquivo que contem todos as partições que o Linux deve montar automaticamente durante a inicialização. + Sem ele, toda vez que você ligasse o computador, teria que digitar comandos manualmente para acessar seus arquivos ou seu disco de backup. + RISCO: um erro de digitação nesse arquivo pode fazer o Linux parar de iniciar, pois ele vai tentar montar um arquivo que não existe e travar no processo. diff --git a/noturno/lab/Daniel_Esmeraldo/atividade_8/script.sh b/noturno/lab/Daniel_Esmeraldo/atividade_8/script.sh new file mode 100644 index 0000000..4eab61f --- /dev/null +++ b/noturno/lab/Daniel_Esmeraldo/atividade_8/script.sh @@ -0,0 +1,12 @@ +#!/bin/bash + +df -h + +mkdir disco_diretorio + +dd if=/dev/zero of=disco_virtual.img bs=1M count=100 +mkfs.ext4 -F disco_virtual.img + +mount -o loop disco_virtual.img disco_diretorio +cp /etc/passwd /etc/group disco_diretorio +sudo umount disco_diretorio From 2793b0b09b9ce90b81d4c01091c5f52b9c4e5c52 Mon Sep 17 00:00:00 2001 From: Daniel Esmeraldo Date: Fri, 1 May 2026 00:48:09 -0300 Subject: [PATCH 09/11] atividade_9 --- .../atividade_9/documentacao.md | 69 ++++++++ .../Daniel_Esmeraldo/atividade_9/script.sh | 152 ++++++++++++++++++ 2 files changed, 221 insertions(+) create mode 100644 noturno/lab/Daniel_Esmeraldo/atividade_9/documentacao.md create mode 100644 noturno/lab/Daniel_Esmeraldo/atividade_9/script.sh diff --git a/noturno/lab/Daniel_Esmeraldo/atividade_9/documentacao.md b/noturno/lab/Daniel_Esmeraldo/atividade_9/documentacao.md new file mode 100644 index 0000000..d8b3128 --- /dev/null +++ b/noturno/lab/Daniel_Esmeraldo/atividade_9/documentacao.md @@ -0,0 +1,69 @@ +# Gerenciador de Arquivos - Atividade IX +**Autor:** Daniel Esmeraldo +**Data:** 01/05/2025 +**Versão:** 1.0 +**Descrição:** Sistema de gerenciamento de arquivos no terminal com logs e relatórios. + +## Pré-requisitos +- Sistema operacional Linux (ou WSL/container Docker) +- Bash 4.0 ou superior +- Permissão de leitura/escrita no diretório de trabalho + +## Funcionalidades +- Adicionar arquivo +- Listar arquivos +- Buscar arquivo (em todo o sistema) +- Deletar arquivo (com confirmação) +- Gerenciar permissões (chmod) +- Gerenciar proprietários (chown) +- Gerar relatório completo +- Log de todas as operações + +## Estrutura do Código +O script é organizado nas seguintes funções: +- `adicionar_arquivo()` - Cria um novo arquivo vazio +- `listar_arquivos()` - Lista todos os arquivos do diretório +- `buscar_arquivo()` - Busca arquivos em todo o sistema +- `deletar_arquivo()` - Remove arquivos com confirmação +- `gerenciar_permissoes()` - Altera permissões (chmod) +- `gerenciar_proprietarios()` - Altera dono/grupo (chown) +- `gerar_relatorio()` - Exibe estatísticas e log +- `sair()` - Encerra o programa registrando saída + +## Log de Operações +Todas as ações são registradas em `log.txt` no formato: +AAAA-MM-DD HH:MM:SS - usuário - ação + +## Exemplo de Uso +```bash +$ ./gerenciador.sh + +----------------------GERENCIADOR DE ARQUIVOS---------------------- +1) Adicionar arquivo +2) Listar arquivos +... +Escolha uma opção: 1 +Informe o nome do arquivo a adicionar: relatorio.txt +Arquivo relatorio.txt criado com êxito. + +Escolha uma opção: 7 +================================RELATÓRIO================================ +Quantidade de arquivos: 1 +Quantidade de diretórios: 0 +Espaço total usado: 4.0K +... + +## Troubleshooting +| Erro | Possível causa | Solução | +|------|----------------|---------| +| `Usuário X não existe!` | Usuário inválido no chown | Verifique com `id usuario` | +| `Grupo Y não existe!` | Grupo inválido | Verifique com `getent group grupo` | +| `Arquivo não encontrado` | Arquivo não existe | Use `ls -la` para listar arquivos | + +## Como executar +```bash +chmod +x script.sh +./script.sh + +## Licença +Este projeto é de uso acadêmico para a Oficina de Linux. diff --git a/noturno/lab/Daniel_Esmeraldo/atividade_9/script.sh b/noturno/lab/Daniel_Esmeraldo/atividade_9/script.sh new file mode 100644 index 0000000..96dd3f8 --- /dev/null +++ b/noturno/lab/Daniel_Esmeraldo/atividade_9/script.sh @@ -0,0 +1,152 @@ +#!/bin/bash + +USUARIO=${USER:-$(whoami)} +echo "----------------------GERENCIADOR DE ARQUIVOS----------------------" + +adicionar_arquivo() { + read -p "Informe o nome do arquivo a adicionar: " nome_arquivo + + if [ -f "$nome_arquivo" ]; then + echo "O arquivo $nome_arquivo já existe no diretório." + else + touch "$nome_arquivo" + echo "Arquivo $nome_arquivo criado com êxito." + echo "$(date '+%Y-%m-%d %H:%M:%S') - $USUARIO criou arquivo $nome_arquivo" >> log.txt + fi +} + +listar_arquivos() { + ls -la + echo "$(date '+%Y-%m-%d %H:%M:%S') - $USUARIO listou os arquivos" >> log.txt +} + +buscar_arquivo() { + read -p "Informe o nome do arquivo a buscar: " nome_arquivo + resultado=$(find / -type f -name "$nome_arquivo" 2>/dev/null) + + if [ -n "$resultado" ]; then + echo "$resultado" + else + echo "Arquivo não encontrado." + fi + + echo "$(date '+%Y-%m-%d %H:%M:%S') - $USUARIO procurou por arquivo $nome_arquivo" >> log.txt +} + +deletar_arquivo() { + read -p "Informe o nome do arquivo a deletar: " nome_arquivo + if [ -f "$nome_arquivo" ]; then + read -p "Você realmente deseja deletar o arquivo $nome_arquivo? (s/n): " confirm + if [ "$confirm" == "s" ]; then + rm "$nome_arquivo" + echo "Arquivo $nome_arquivo deletado." + echo "$(date '+%Y-%m-%d %H:%M:%S') - $USUARIO removeu o arquivo $nome_arquivo" >> log.txt + fi + else + echo "Arquivo não encontrado." + fi +} + +gerenciar_permissoes() { + read -p "Informe o nome do arquivo a gerenciar permissão: " nome_arquivo + read -p "Informe as permissões que o arquivo terá (Ex: 755): " permissoes + if [ -f "$nome_arquivo" ]; then + if [[ "$permissoes" =~ ^[0-7]{3,4}$ ]]; then + chmod "$permissoes" "$nome_arquivo" + echo "Permissão alterada com êxito." + echo "$(date '+%Y-%m-%d %H:%M:%S') - $USUARIO alterou a permissão do arquivo $nome_arquivo para $permissoes" >> log.txt + else + echo "Formato inválido. Use 755, 644, etc." + fi + else + echo "Arquivo não encontrado." + fi +} + +gerenciar_proprietarios() { + read -p "Informe o nome do arquivo/diretório: " nome + read -p "Informe o novo proprietário (usuário): " dono + read -p "Informe o novo grupo (opcional, Enter para pular): " grupo + + if ! id "$dono" &>/dev/null; then + echo "Usuário $dono não existe!" + return 1 + fi + + if [ -n "$grupo" ] && ! getent group "$grupo" &>/dev/null; then + echo "Grupo $grupo não existe!" + return 1 + fi + + if [ -e "$nome" ]; then + if [ -n "$grupo" ]; then + chown "$dono:$grupo" "$nome" + echo "Proprietário alterado para $dono:$grupo" + echo "$(date '+%Y-%m-%d %H:%M:%S') - $USUARIO alterou proprietário de $nome para $dono:$grupo" >> log.txt + else + chown "$dono" "$nome" + echo "Proprietário alterado para $dono" + echo "$(date '+%Y-%m-%d %H:%M:%S') - $USUARIO alterou proprietário de $nome para $dono" >> log.txt + fi + else + echo "Arquivo/diretório não encontrado." + fi +} + +gerar_relatorio() { + echo "================================RELATÓRIO================================" + echo "Quantidade de arquivos: $(ls -l | grep "^-" | wc -l)" + echo "Quantidade de diretórios: $(ls -l | grep "^d" | wc -l)" + echo "Espaço total usado: $(du -sh . 2>/dev/null | cut -f1)" + echo "" + echo "=== PERMISSÕES DOS ARQUIVOS ===" + ls -la + echo "" + echo "=== LOG DE OPERAÇÕES ===" + if [ -f "log.txt" ]; then + cat log.txt + else + echo "Nenhum log encontrado ainda." + fi + echo "" + read -p "Pressione ENTER para continuar..." +} + +sair() { + echo "$(date '+%Y-%m-%d %H:%M:%S') - $USUARIO ---------------Usuário encerrou o programa---------------" >> log.txt + exit 0 +} + +while true; do + PS3="Escolha uma opção: " + select opcao in "Adicionar arquivo" "Listar arquivos" "Buscar arquivo" "Deletar arquivo" "Gerenciar permissões" "Gerenciar proprietários" "Gerar relatório" "Sair"; do + case $opcao in + "Adicionar arquivo") + adicionar_arquivo + ;; + "Listar arquivos") + listar_arquivos + ;; + "Buscar arquivo") + buscar_arquivo + ;; + "Deletar arquivo") + deletar_arquivo + ;; + "Gerenciar permissões") + gerenciar_permissoes + ;; + "Gerenciar proprietários") + gerenciar_proprietarios + ;; + "Gerar relatório") + gerar_relatorio + ;; + "Sair") + sair + ;; + esac + + break + done +done From f753ea93a6b58f2f9274a745cde8cd73ef123025 Mon Sep 17 00:00:00 2001 From: Daniel Esmeraldo Date: Sat, 2 May 2026 19:50:09 -0300 Subject: [PATCH 10/11] =?UTF-8?q?Refatora=C3=A7=C3=A3o=20do=20GERENCIADOR?= =?UTF-8?q?=20DE=20ARQUIVOS=20atividade=5F9=20(Ainda=20abaixo=20de=20500?= =?UTF-8?q?=20linhas)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Daniel_Esmeraldo/atividade_9/script.sh | 146 +++++++++++++----- 1 file changed, 111 insertions(+), 35 deletions(-) diff --git a/noturno/lab/Daniel_Esmeraldo/atividade_9/script.sh b/noturno/lab/Daniel_Esmeraldo/atividade_9/script.sh index 96dd3f8..d96116f 100644 --- a/noturno/lab/Daniel_Esmeraldo/atividade_9/script.sh +++ b/noturno/lab/Daniel_Esmeraldo/atividade_9/script.sh @@ -15,14 +15,9 @@ adicionar_arquivo() { fi } -listar_arquivos() { - ls -la - echo "$(date '+%Y-%m-%d %H:%M:%S') - $USUARIO listou os arquivos" >> log.txt -} - buscar_arquivo() { read -p "Informe o nome do arquivo a buscar: " nome_arquivo - resultado=$(find / -type f -name "$nome_arquivo" 2>/dev/null) + resultado=$(find . -type f -name "$nome_arquivo" 2>/dev/null) if [ -n "$resultado" ]; then echo "$resultado" @@ -47,19 +42,64 @@ deletar_arquivo() { fi } +adicionar_diretorio() { + read -p "Informe o nome do diretorio a adicionar: " nome_diretorio + + if [ -d "$nome_diretorio" ]; then + echo "O diretório $nome_diretorio já existe no diretório." + else + mkdir "$nome_diretorio" + echo " $nome_diretorio criado com êxito." + echo "$(date '+%Y-%m-%d %H:%M:%S') - $USUARIO criou diretório $nome_diretorio" >> log.txt + fi +} + +buscar_diretorio() { + read -p "Informe o nome do diretório a buscar: " nome_diretorio + resultado=$(find . -type d -name "$nome_diretorio" 2>/dev/null) + + if [ -n "$resultado" ]; then + echo "$resultado" + else + echo "Diretório não encontrado." + fi + + echo "$(date '+%Y-%m-%d %H:%M:%S') - $USUARIO procurou por diretório $nome_diretorio" >> log.txt +} + +deletar_diretorio() { + read -p "Informe o nome do diretório a deletar: " nome_diretorio + if [ -d "$nome_diretorio" ]; then + echo "ATENÇÃO! TODOS OS ARQUIVOS DENTRO DE $nome_diretorio SERÃO DELETADOS" + read -p "Você realmente deseja deletar o diretório $nome_diretorio? (s/n): " confirm + if [ "$confirm" == "s" ]; then + rm -r "$nome_diretorio" + echo "Diretório $nome_diretorio deletado." + echo "$(date '+%Y-%m-%d %H:%M:%S') - $USUARIO removeu o diretório $nome_diretorio" >> log.txt + fi + else + echo "Diretório não encontrado." + fi +} + +listar() { + ls -la + echo "$(date '+%Y-%m-%d %H:%M:%S') - $USUARIO listou os arquivos/diretórios" >> log.txt +} + gerenciar_permissoes() { - read -p "Informe o nome do arquivo a gerenciar permissão: " nome_arquivo - read -p "Informe as permissões que o arquivo terá (Ex: 755): " permissoes - if [ -f "$nome_arquivo" ]; then + read -p "Informe o nome do arquivo/diretório a gerenciar permissão: " nome + read -p "Informe as permissões que o arquivo/diretório terá (Ex: 755): " permissoes + if [ -e "$nome" ]; then if [[ "$permissoes" =~ ^[0-7]{3,4}$ ]]; then - chmod "$permissoes" "$nome_arquivo" + chmod "$permissoes" "$nome" echo "Permissão alterada com êxito." - echo "$(date '+%Y-%m-%d %H:%M:%S') - $USUARIO alterou a permissão do arquivo $nome_arquivo para $permissoes" >> log.txt + echo "$(date '+%Y-%m-%d %H:%M:%S') - $USUARIO alterou a permissão do arquivo/diretório $nome para $permissoes" >> log.txt else echo "Formato inválido. Use 755, 644, etc." fi else - echo "Arquivo não encontrado." + echo "Arquivo/diretório não encontrado." fi } @@ -82,11 +122,11 @@ gerenciar_proprietarios() { if [ -n "$grupo" ]; then chown "$dono:$grupo" "$nome" echo "Proprietário alterado para $dono:$grupo" - echo "$(date '+%Y-%m-%d %H:%M:%S') - $USUARIO alterou proprietário de $nome para $dono:$grupo" >> log.txt + echo "$(date '+%Y-%m-%d %H:%M:%S') - $USUARIO alterou proprietário do arquivo/diretório $nome para $dono:$grupo" >> log.txt else chown "$dono" "$nome" echo "Proprietário alterado para $dono" - echo "$(date '+%Y-%m-%d %H:%M:%S') - $USUARIO alterou proprietário de $nome para $dono" >> log.txt + echo "$(date '+%Y-%m-%d %H:%M:%S') - $USUARIO alterou proprietário do arquivo/diretório $nome para $dono" >> log.txt fi else echo "Arquivo/diretório não encontrado." @@ -119,33 +159,69 @@ sair() { while true; do PS3="Escolha uma opção: " - select opcao in "Adicionar arquivo" "Listar arquivos" "Buscar arquivo" "Deletar arquivo" "Gerenciar permissões" "Gerenciar proprietários" "Gerar relatório" "Sair"; do - case $opcao in - "Adicionar arquivo") - adicionar_arquivo - ;; - "Listar arquivos") - listar_arquivos - ;; - "Buscar arquivo") - buscar_arquivo - ;; - "Deletar arquivo") - deletar_arquivo - ;; - "Gerenciar permissões") + select opcao in "Arquivo" "Diretório" "Listar" "Gerenciar permissões" "Gerenciar proprietários" "Gerar relatório" "Sair"; do + case $opcao in + "Arquivo") + PS3="Escolha uma opção: " + select opcao in "Adicionar arquivo" "Buscar arquivo" "Deletar arquivo" "Voltar"; do + case $opcao in + "Adicionar arquivo") + adicionar_arquivo + ;; + "Buscar arquivo") + buscar_arquivo + ;; + "Deletar arquivo") + deletar_arquivo + ;; + "Voltar") + break + ;; + esac + + break + done + ;; + "Diretório") + PS3="Escolha uma opção: " + select opcao in "Adicionar diretório" "Buscar diretório" "Deletar diretório" "Voltar"; do + case $opcao in + "Adicionar diretório") + adicionar_diretorio + ;; + "Buscar diretório") + buscar_diretorio + ;; + "Deletar diretório") + deletar_diretorio + ;; + "Voltar") + break + ;; + esac + + break + done + ;; + "Listar") + listar + ;; + "Gerenciar permissões") gerenciar_permissoes - ;; + ;; "Gerenciar proprietários") gerenciar_proprietarios ;; - "Gerar relatório") + "Gerar relatório") gerar_relatorio - ;; - "Sair") + ;; + "Sair") sair - ;; - esac + ;; + *) + echo "Opção inválida." + ;; + esac break done From f5843e1371984baa689b9716c67447322597bae4 Mon Sep 17 00:00:00 2001 From: Daniel Esmeraldo Date: Sun, 3 May 2026 21:23:33 -0300 Subject: [PATCH 11/11] =?UTF-8?q?Reformula=C3=A7=C3=A3o=20do=20script=20[+?= =?UTF-8?q?500=20linhas]=20e=20atualiza=C3=A7=C3=A3o=20da=20documenta?= =?UTF-8?q?=C3=A7=C3=A3o?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../atividade_9/documentacao.md | 387 +++++++++++++++--- .../Daniel_Esmeraldo/atividade_9/script.sh | 319 ++++++++++++++- 2 files changed, 632 insertions(+), 74 deletions(-) diff --git a/noturno/lab/Daniel_Esmeraldo/atividade_9/documentacao.md b/noturno/lab/Daniel_Esmeraldo/atividade_9/documentacao.md index d8b3128..d69f6a6 100644 --- a/noturno/lab/Daniel_Esmeraldo/atividade_9/documentacao.md +++ b/noturno/lab/Daniel_Esmeraldo/atividade_9/documentacao.md @@ -1,69 +1,328 @@ -# Gerenciador de Arquivos - Atividade IX -**Autor:** Daniel Esmeraldo -**Data:** 01/05/2025 -**Versão:** 1.0 -**Descrição:** Sistema de gerenciamento de arquivos no terminal com logs e relatórios. - -## Pré-requisitos -- Sistema operacional Linux (ou WSL/container Docker) +# Gerenciador de Arquivos + +Script de gerenciamento de arquivos e diretórios desenvolvido em Bash. Oferece uma interface interativa no terminal com menus de navegação, permitindo realizar operações comuns do sistema de arquivos sem precisar memorizar comandos manualmente. + +--- + +## Requisitos + +- Sistema operacional Linux ou macOS - Bash 4.0 ou superior -- Permissão de leitura/escrita no diretório de trabalho - -## Funcionalidades -- Adicionar arquivo -- Listar arquivos -- Buscar arquivo (em todo o sistema) -- Deletar arquivo (com confirmação) -- Gerenciar permissões (chmod) -- Gerenciar proprietários (chown) -- Gerar relatório completo -- Log de todas as operações - -## Estrutura do Código -O script é organizado nas seguintes funções: -- `adicionar_arquivo()` - Cria um novo arquivo vazio -- `listar_arquivos()` - Lista todos os arquivos do diretório -- `buscar_arquivo()` - Busca arquivos em todo o sistema -- `deletar_arquivo()` - Remove arquivos com confirmação -- `gerenciar_permissoes()` - Altera permissões (chmod) -- `gerenciar_proprietarios()` - Altera dono/grupo (chown) -- `gerar_relatorio()` - Exibe estatísticas e log -- `sair()` - Encerra o programa registrando saída - -## Log de Operações -Todas as ações são registradas em `log.txt` no formato: -AAAA-MM-DD HH:MM:SS - usuário - ação - -## Exemplo de Uso -```bash -$ ./gerenciador.sh - -----------------------GERENCIADOR DE ARQUIVOS---------------------- -1) Adicionar arquivo -2) Listar arquivos -... -Escolha uma opção: 1 -Informe o nome do arquivo a adicionar: relatorio.txt -Arquivo relatorio.txt criado com êxito. - -Escolha uma opção: 7 -================================RELATÓRIO================================ -Quantidade de arquivos: 1 -Quantidade de diretórios: 0 -Espaço total usado: 4.0K -... - -## Troubleshooting -| Erro | Possível causa | Solução | -|------|----------------|---------| -| `Usuário X não existe!` | Usuário inválido no chown | Verifique com `id usuario` | -| `Grupo Y não existe!` | Grupo inválido | Verifique com `getent group grupo` | -| `Arquivo não encontrado` | Arquivo não existe | Use `ls -la` para listar arquivos | +- Permissões adequadas para executar operações de `chmod` e `chown` (algumas funções podem exigir `sudo`) + +--- ## Como executar + ```bash -chmod +x script.sh -./script.sh +# Dê permissão de execução ao script +chmod +x gerenciador.sh + +# Execute o script +./gerenciador.sh +``` + +--- + +## Estrutura do Menu + +``` +GERENCIADOR DE ARQUIVOS +| +|-- Arquivo +| |-- Adicionar arquivo +| |-- Buscar arquivo +| |-- Visualizar conteudo +| | |-- Visualizar todo o conteudo +| | |-- Visualizar as N primeiras linhas +| | |-- Visualizar as N ultimas linhas +| | `-- Buscar por uma palavra +| `-- Deletar arquivo +| +|-- Diretorio +| |-- Adicionar diretorio +| |-- Buscar diretorio +| `-- Deletar diretorio +| +|-- Copiar item +|-- Mover/renomear item +|-- Listar +|-- Gerenciar permissoes +|-- Gerenciar proprietarios +|-- Compactar +|-- Descompactar +|-- Navegar +|-- Backup +|-- Gerar relatorio +|-- Ajuda +`-- Sair +``` + +--- + +## Funcoes + +### `adicionar_arquivo` + +Cria um novo arquivo vazio no diretorio atual. + +- Solicita o nome do arquivo ao usuario +- Verifica se ja existe um arquivo ou diretorio com o mesmo nome +- Cria o arquivo com `touch` caso o nome esteja disponivel +- Registra a operacao no `log.txt` + +--- + +### `buscar_arquivo` + +Busca um arquivo pelo nome a partir do diretorio atual. + +- Solicita o nome do arquivo ao usuario +- Utiliza `find` para localizar arquivos recursivamente +- Exibe o caminho completo caso encontrado +- Registra a operacao no `log.txt` + +--- + +### `deletar_arquivo` + +Remove um arquivo do sistema. + +- Solicita o nome do arquivo ao usuario +- Verifica se o arquivo existe +- Pede confirmacao antes de deletar (`s/n`) +- Remove o arquivo com `rm` apos confirmacao +- Registra a operacao no `log.txt` + +--- + +### `visualizar_conteudo` + +Exibe o conteudo de um arquivo com diferentes modos de visualizacao. + +- Solicita o nome do arquivo ao usuario +- Exibe um submenu com as opcoes abaixo: + +| Opcao | Descricao | +|------------------------------|--------------------------------------------------------| +| Visualizar todo o conteudo | Exibe o arquivo completo com `cat` | +| N primeiras linhas | Exibe as N primeiras linhas com `head` | +| N ultimas linhas | Exibe as N ultimas linhas com `tail` | +| Buscar por uma palavra | Busca um padrao no arquivo com `grep` | + +**Funcoes auxiliares de visualizacao:** + +- `visualizar_head [arquivo]`: usa `head -n N` para exibir as primeiras linhas. Padrao: 10 linhas. +- `visualizar_tail [arquivo]`: usa `tail -n N` para exibir as ultimas linhas. Padrao: 10 linhas. +- `visualizar_grep [arquivo]`: usa `grep -i -n --color=always` para busca case-insensitive com numeracao de linhas. + +--- + +### `adicionar_diretorio` + +Cria um novo diretorio no local atual. + +- Solicita o nome do diretorio ao usuario +- Verifica se ja existe algum item com o mesmo nome +- Cria o diretorio com `mkdir` +- Registra a operacao no `log.txt` + +--- + +### `buscar_diretorio` + +Busca um diretorio pelo nome a partir do diretorio atual. + +- Solicita o nome do diretorio ao usuario +- Utiliza `find -type d` para localizar diretorios recursivamente +- Exibe o caminho completo caso encontrado +- Registra a operacao no `log.txt` + +--- + +### `deletar_diretorio` + +Remove um diretorio e todo o seu conteudo. + +- Solicita o nome do diretorio ao usuario +- Exibe um aviso sobre a remocao permanente de todo o conteudo interno +- Pede confirmacao antes de deletar (`s/n`) +- Remove o diretorio com `rm -r` apos confirmacao +- Registra a operacao no `log.txt` + +--- + +### `listar` + +Lista todos os arquivos e diretorios do diretorio atual. + +- Executa `ls -la` para exibir permissoes, proprietarios, tamanho e data +- Registra a operacao no `log.txt` + +--- + +### `gerenciar_permissoes` + +Altera as permissoes de um arquivo ou diretorio. + +- Solicita o nome do item e o codigo de permissao (ex: `755`, `644`) +- Valida se o codigo esta no formato octal correto (3 ou 4 digitos de 0 a 7) +- Aplica a permissao com `chmod` +- Registra a operacao no `log.txt` + +**Exemplos de permissoes comuns:** + +| Codigo | Significado | +|--------|--------------------------| +| 644 | rw-r--r-- (arquivo padrao) | +| 755 | rwxr-xr-x (executavel) | +| 600 | rw------- (privado) | +| 700 | rwx------ (diretorio privado) | + +--- + +### `gerenciar_proprietarios` + +Altera o proprietario e/ou grupo de um arquivo ou diretorio. + +- Solicita o nome do item, o novo usuario e opcionalmente o novo grupo +- Valida se o usuario existe com `id` +- Valida se o grupo existe com `getent group` (quando informado) +- Aplica a alteracao com `chown` +- Registra a operacao no `log.txt` + +--- + +### `copiar_item` + +Copia um arquivo ou diretorio para um destino especificado. + +- Solicita a origem e o destino +- Detecta se a origem e arquivo (`cp -i`) ou diretorio (`cp -r -i`) +- O parametro `-i` solicita confirmacao em caso de sobrescrita +- Registra a operacao no `log.txt` + +--- + +### `mover_renomear_item` + +Move ou renomeia um arquivo ou diretorio. + +- Solicita a origem e o caminho/nome de destino +- Utiliza `mv -i` para evitar sobrescrita acidental +- Serve tanto para mover (caminho diferente) quanto para renomear (mesmo diretorio, nome diferente) +- Registra a operacao no `log.txt` + +--- + +### `compactar` + +Compacta um arquivo ou diretorio no formato `.tar.gz`. + +- Solicita o nome do item a compactar e o nome do arquivo de saida (sem extensao) +- Gera um arquivo `.tar.gz` com `tar -czf` +- Registra a operacao no `log.txt` + +--- + +### `descompactar` + +Extrai o conteudo de um arquivo `.tar.gz`. + +- Solicita o nome do arquivo (sem a extensao `.tar.gz`) +- Verifica se o arquivo existe e possui a extensao correta +- Solicita o diretorio de destino (Enter para o diretorio atual) +- Extrai com `tar -xzf` +- Registra a operacao no `log.txt` + +--- + +### `navegar` + +Muda o diretorio de trabalho atual do script. + +- Solicita o caminho do diretorio ao usuario +- Verifica se o diretorio existe +- Executa `cd` e exibe o novo caminho com `pwd` +- Registra a operacao no `log.txt` + +> **Observacao:** a navegacao afeta apenas o processo do script. O diretorio do terminal de onde o script foi chamado nao e alterado. + +--- + +### `backup` + +Cria uma copia de segurança de um arquivo ou diretorio com timestamp. + +- Solicita o nome do item a fazer backup +- Cria o diretorio `backup/` no local atual, se nao existir +- Gera a copia com nome no formato `_YYYYMMDD_HHMMSS` +- Registra a operacao no `log.txt` + +--- + +### `gerar_relatorio` + +Exibe um relatorio completo sobre o diretorio atual. + +O relatorio inclui: + +- Quantidade de arquivos +- Quantidade de diretorios +- Espaco total utilizado (`du -sh`) +- Listagem detalhada com permissoes (`ls -la`) +- Historico completo de operacoes do `log.txt` + +--- + +### `ajuda` + +Exibe uma tela de ajuda com o resumo de todas as funcionalidades e instrucoes de uso. + +--- + +### `sair` + +Encerra o programa. + +- Registra o encerramento no `log.txt` +- Executa `exit 0` + +--- + +## Log de Operacoes + +Todas as acoes realizadas sao registradas automaticamente no arquivo `log.txt`, no diretorio de trabalho atual do script. + +**Formato de cada entrada:** + +``` +YYYY-MM-DD HH:MM:SS - +``` + +**Exemplo:** + +``` +2025-05-03 14:32:10 - daniel criou arquivo relatorio.txt +2025-05-03 14:33:05 - daniel procurou por arquivo config.sh +2025-05-03 14:35:22 - daniel removeu o arquivo relatorio.txt +``` + +O inicio e o encerramento do programa tambem sao registrados com uma linha separadora para facilitar a leitura do historico. + +--- + +## Variaveis Globais + +| Variavel | Descricao | +|-----------|-----------------------------------------------------------------------| +| `USUARIO` | Nome do usuario atual. Obtido via `$USER` ou `whoami` como fallback | + +--- + +## Observacoes -## Licença -Este projeto é de uso acadêmico para a Oficina de Linux. +- O script utiliza o comando `select` do Bash para gerar os menus interativos, o que garante compatibilidade com terminais padrao. +- Operacoes de `chown` e alteracoes de permissoes em arquivos de sistema podem exigir privilegios de superusuario (`sudo`). +- A funcao `navegar` altera o diretorio apenas dentro do contexto de execucao do script. +- O arquivo `log.txt` e criado automaticamente na primeira operacao realizada, no diretorio de onde o script for executado. diff --git a/noturno/lab/Daniel_Esmeraldo/atividade_9/script.sh b/noturno/lab/Daniel_Esmeraldo/atividade_9/script.sh index d96116f..73c26f9 100644 --- a/noturno/lab/Daniel_Esmeraldo/atividade_9/script.sh +++ b/noturno/lab/Daniel_Esmeraldo/atividade_9/script.sh @@ -1,13 +1,12 @@ #!/bin/bash USUARIO=${USER:-$(whoami)} -echo "----------------------GERENCIADOR DE ARQUIVOS----------------------" adicionar_arquivo() { read -p "Informe o nome do arquivo a adicionar: " nome_arquivo - if [ -f "$nome_arquivo" ]; then - echo "O arquivo $nome_arquivo já existe no diretório." + if [ -e "$nome_arquivo" ]; then + echo "Há um arquivo/diretório já existente com o mesmo nome." else touch "$nome_arquivo" echo "Arquivo $nome_arquivo criado com êxito." @@ -42,14 +41,89 @@ deletar_arquivo() { fi } +visualizar_head() { + local nome_arquivo="$1" + read -p "Informe quantas linhas deseja visualizar [padrão 10]: " linhas + linhas=${linhas:-10} + head -n "$linhas" "$nome_arquivo" +} + +visualizar_tail() { + local nome_arquivo="$1" + read -p "Informe quantas linhas deseja visualizar [padrão 10]: " linhas + linhas=${linhas:-10} + tail -n "$linhas" "$nome_arquivo" +} + +visualizar_grep() { + local nome_arquivo="$1" + read -p "Informe a palavra ou padrão a buscar: " padrao + if [ -z "$padrao" ]; then + echo "Padrão não encontrado" + return 1 + fi + grep -i -n --color=always "$padrao" "$nome_arquivo" +} + +visualizar_conteudo() { + read -p "Informe o nome do arquivo: " nome_arquivo + if [ ! -f "$nome_arquivo" ]; then + echo "Arquivo não encontrado" + return 1 + fi + + while true; do + clear + PS3="Escolha uma opção: " + select opcao in "Visualizar todo o conteúdo" "Visualizar as N primeiras linhas" "Visualizar as N últimas linhas" "Buscar por uma palavra" "Voltar"; do + case $opcao in + "Visualizar todo o conteúdo") + clear + cat "$nome_arquivo" + echo "" + read -p "Pressione ENTER para continuar..." + ;; + "Visualizar as N primeiras linhas") + clear + visualizar_head "$nome_arquivo" + echo "" + read -p "Pressione ENTER para continuar..." + ;; + "Visualizar as N últimas linhas") + clear + visualizar_tail "$nome_arquivo" + echo "" + read -p "Pressione ENTER para continuar..." + ;; + "Buscar por uma palavra") + clear + visualizar_grep "$nome_arquivo" + echo "" + read -p "Pressione ENTER para continuar..." + ;; + "Voltar") + return 0 + ;; + *) + echo "Opção inválida." + echo "" + read -p "Pressione ENTER para continuar..." + ;; + esac + + break + done + done +} + adicionar_diretorio() { read -p "Informe o nome do diretorio a adicionar: " nome_diretorio - if [ -d "$nome_diretorio" ]; then - echo "O diretório $nome_diretorio já existe no diretório." + if [ -e "$nome_diretorio" ]; then + echo "Há um arquivo/diretório já existente com o mesmo nome." else mkdir "$nome_diretorio" - echo " $nome_diretorio criado com êxito." + echo "$nome_diretorio criado com êxito." echo "$(date '+%Y-%m-%d %H:%M:%S') - $USUARIO criou diretório $nome_diretorio" >> log.txt fi } @@ -148,8 +222,151 @@ gerar_relatorio() { else echo "Nenhum log encontrado ainda." fi - echo "" - read -p "Pressione ENTER para continuar..." +} + +copiar_item() { + read -p "Informe item de origem a copiar: " item_origem + read -p "Informe o destino: " destino + if [ -e "$item_origem" ]; then + if [ -f "$item_origem" ]; then + cp -i "$item_origem" "$destino" + elif [ -d "$item_origem" ]; then + cp -r -i "$item_origem" "$destino" + else + echo "Tipo de arquivo não suportado para cópia (ex: link, dispositivo)." + return 1 + fi + if [ $? -eq 0 ]; then + echo "Cópia concluída com êxito." + echo "$(date '+%Y-%m-%d %H:%M:%S') - $USUARIO copiou o item $item_origem para o destino $destino" >> log.txt + else + echo "Cópia fracassada." + fi + else + echo "Origem não encontrada." + fi +} + +mover_renomear_item() { + read -p "Informe o item de origem a mover/renomear: " item_origem + read -p "Informe o caminho [mover] ou nome [renomear]: " caminho_nome + if [ -e "$item_origem" ]; then + mv -i "$item_origem" "$caminho_nome" + if [ $? -eq 0 ]; then + echo "Processo concluído com êxito." + echo "$(date '+%Y-%m-%d %H:%M:%S') - $USUARIO moveu/renomeou o item $item_origem para $caminho_nome" >> log.txt + else + echo "Processo fracassado." + fi + else + echo "Origem não encontrada." + fi +} + +compactar() { + read -p "Informe o nome do arquivo/diretorio a compactar: " origem + if [ ! -e "$origem" ]; then + echo "Arquivo/diretório não encontrado." + return 1 + fi + read -p "Informe o nome do arquivo compactado (sem extensão): " saida + tar -czf "$saida.tar.gz" "$origem" + if [ $? -eq 0 ]; then + echo "Arquivo/diretório $origem compactado com êxito." + echo "$(date '+%Y-%m-%d %H:%M:%S') - $USUARIO compactou o arquivo/diretório $origem" >> log.txt + else + echo "Falha ao compactar arquivo/diretório $origem." + fi +} + +descompactar() { + read -p "Informe o nome do arquivo .tar.gz: " arquivo + if [ ! -e "$arquivo.tar.gz" ]; then + echo "Arquivo $arquivo não encontrado." + return 1 + fi + + if [[ ! "$arquivo" =~ \.tar\.gz$ ]] && [[ ! "$arquivo" =~ \.tgz$ ]]; then + echo "O arquivo não parece ser um .tar.gz ou .tgz. Verifique a extensão." + return 1 + fi + + read -p "Informe o diretório de destino (Enter para atual): " destino + if [ -z "$destino" ]; then + tar -xzf "$arquivo" + else + mkdir -p "$destino" + tar -xzf "$arquivo" -C "$destino" + fi + if [ $? -eq 0 ]; then + echo "Descompactado com êxito." + echo "$(date '+%Y-%m-%d %H:%M:%S') - $USUARIO descompactou o arquivo $arquivo" >> log.txt + else + echo "Falha ao descompactar o arquivo $arquivo." + fi +} + +navegar() { + read -p "Informe o caminho do diretório a navegar: " caminho + if [ -d "$caminho" ]; then + cd "$caminho" + echo "Agora você está em: $(pwd)" + echo "$(date '+%Y-%m-%d %H:%M:%S') - $USUARIO navegou para $caminho" >> log.txt + else + echo "Diretório não encontrado." + fi +} + +backup() { + read -p "Informe o arquivo/diretório a fazer backup: " origem + if [ ! -e "$origem" ]; then + echo "Arquivo/diretório não encontrado." + return 1 + fi + mkdir -p backup + data=$(date '+%Y%m%d_%H%M%S') + nome_base=$(basename "$origem") + destino="backup/${nome_base}_${data}" + if [ -f "$origem" ]; then + cp "$origem" "$destino" + elif [ -d "$origem" ]; then + cp -r "$origem" "$destino" + fi + if [ $? -eq 0 ]; then + echo "Backup concluído com êxito." + echo "$(date '+%Y-%m-%d %H:%M:%S') - $USUARIO fez o backup do arquivo/diretório $origem" >> log.txt + else + echo "Backup fracassado." + fi +} + +ajuda() { + cat << 'EOF' +================================ AJUDA ================================ +GERENCIADOR DE ARQUIVOS - Versão 1.0 + +FUNCIONALIDADES: + +- Arquivo: Adicionar, Buscar, Visualizar conteúdo, Deletar +- Diretório: Adicionar, Buscar, Deletar +- Copiar item (arquivos/diretórios) +- Mover/Renomear item +- Listar conteúdo do diretório atual +- Gerenciar permissões (chmod) - use códigos como 755, 644 +- Gerenciar proprietários (chown) - usuário e opcional grupo +- Gerar relatório (estatísticas + log) +- Compactar/Descompactar (.tar.gz) +- Navegar (mudar de diretório) +- Backup (cria cópia com timestamp) +- Ajuda (esta tela) + +COMO USAR: +- Navegue pelo menu usando números. +- Opção "Voltar" retorna ao menu anterior. +- Todas as ações são registradas em log.txt. +EOF + echo "" + read -p "Pressione ENTER para continuar..." } sair() { @@ -157,22 +374,40 @@ sair() { exit 0 } +echo "$(date '+%Y-%m-%d %H:%M:%S') - $USUARIO ---------------Usuário iniciou o programa---------------" >> log.txt + while true; do + clear + echo "----------------------GERENCIADOR DE ARQUIVOS----------------------" PS3="Escolha uma opção: " - select opcao in "Arquivo" "Diretório" "Listar" "Gerenciar permissões" "Gerenciar proprietários" "Gerar relatório" "Sair"; do + select opcao in "Arquivo" "Diretório" "Copiar item" "Mover/renomear item" "Listar" "Gerenciar permissões" "Gerenciar proprietários" "Compactar" "Descompactar" "Navegar" "Backup" "Gerar relatório" "Ajuda" "Sair"; do case $opcao in "Arquivo") + clear PS3="Escolha uma opção: " - select opcao in "Adicionar arquivo" "Buscar arquivo" "Deletar arquivo" "Voltar"; do + select opcao in "Adicionar arquivo" "Buscar arquivo" "Visualizar conteúdo" "Deletar arquivo" "Voltar"; do case $opcao in "Adicionar arquivo") + clear adicionar_arquivo + echo "" + read -p "Pressione ENTER para continuar..." ;; "Buscar arquivo") + clear buscar_arquivo + echo "" + read -p "Pressione ENTER para continuar..." ;; + "Visualizar conteúdo") + clear + visualizar_conteudo + ;; "Deletar arquivo") + clear deletar_arquivo + echo "" + read -p "Pressione ENTER para continuar..." ;; "Voltar") break @@ -183,17 +418,27 @@ while true; do done ;; "Diretório") + clear PS3="Escolha uma opção: " select opcao in "Adicionar diretório" "Buscar diretório" "Deletar diretório" "Voltar"; do case $opcao in "Adicionar diretório") + clear adicionar_diretorio + echo "" + read -p "Pressione ENTER para continuar..." ;; "Buscar diretório") + clear buscar_diretorio + echo "" + read -p "Pressione ENTER para continuar..." ;; "Deletar diretório") + clear deletar_diretorio + echo "" + read -p "Pressione ENTER para continuar..." ;; "Voltar") break @@ -203,23 +448,77 @@ while true; do break done ;; + "Copiar item") + clear + copiar_item + echo "" + read -p "Pressione ENTER para continuar..." + ;; + "Mover/renomear item") + clear + mover_renomear_item + echo "" + read -p "Pressione ENTER para continuar..." + ;; "Listar") + clear listar + echo "" + read -p "Pressione ENTER para continuar..." ;; "Gerenciar permissões") + clear gerenciar_permissoes + echo "" + read -p "Pressione ENTER para continuar..." ;; "Gerenciar proprietários") + clear gerenciar_proprietarios + echo "" + read -p "Pressione ENTER para continuar..." + ;; + "Compactar") + clear + compactar + echo "" + read -p "Pressione ENTER para continuar..." + ;; + "Descompactar") + clear + descompactar + echo "" + read -p "Pressione ENTER para continuar..." + ;; + "Navegar") + clear + navegar + echo "" + read -p "Pressione ENTER para continuar..." + ;; + "Backup") + clear + backup + echo "" + read -p "Pressione ENTER para continuar..." ;; "Gerar relatório") + clear gerar_relatorio + echo "" + read -p "Pressione ENTER para continuar..." + ;; + "Ajuda") + clear + ajuda ;; "Sair") sair ;; *) echo "Opção inválida." + echo "" + read -p "Pressione ENTER para continuar..." ;; esac