Skip to content

DerickBessa/DuckShell

Repository files navigation

quack

                __
            ___( o)>
            \ <_. )
             `---'

Uma shell simplificada em C, feita para a disciplina de Sistemas Operacionais, com foco em processos, chamadas de sistema e manipulacao de arquivos no ambiente Linux/WSL.

O que e a quack

A quack e uma mini-shell inspirada no fluxo classico apresentado no Tanenbaum:

  1. mostrar o prompt
  2. ler o comando do usuario
  3. verificar se ele e interno
  4. criar processo filho quando necessario
  5. executar comandos externos
  6. esperar o filho terminar
  7. repetir o ciclo

O projeto foi personalizado com identidade visual no terminal, comandos internos proprios e arquivos de teste para demonstracao.

Destaques

  • shell escrita em C puro
  • execucao de comandos externos com fork() + execvp()
  • sincronizacao com waitpid()
  • comandos internos para diretorios e arquivos
  • leitura e escrita com chamadas de sistema
  • prompt colorido com diretorio atual
  • banner ASCII personalizado
  • suporte a historico e navegacao com setas do teclado
  • arquivos prontos para teste

Conceitos de Sistemas Operacionais praticados

  • processo pai e processo filho
  • criacao de processos com fork()
  • substituicao de imagem do processo com execvp()
  • espera por termino com waitpid()
  • mudanca de diretorio com chdir()
  • criacao e remocao de arquivos e diretorios
  • leitura e escrita usando descritores de arquivo

Comandos internos

Comando Funcao
ajuda / help Mostra a ajuda da shell
clear / cls Limpa a tela e redesenha o banner
cd <diretorio> Muda o diretorio atual
mkdir <nome> Cria um diretorio
touch <arquivo> Cria um arquivo vazio
move <origem> <destino> Move ou renomeia arquivo/diretorio
recorte <origem> <destino> Alias de move
rm <arquivo> Remove um arquivo
rmdir <diretorio> Remove um diretorio vazio
pinfo Mostra PID e PPID da shell
leitura <arquivo> Le e imprime o conteudo de um arquivo
escrever <arquivo> <texto> Escreve texto em um arquivo
exit / quit Encerra a shell

Comandos externos

A quack tambem executa comandos externos do sistema, como:

  • ls
  • pwd
  • echo
  • cat

Isso acontece via execvp(), que procura o executavel no PATH.

Estrutura do projeto

.
├── minishell.c
├── Makefile
├── README.md
├── RELATORIO_MINISHELL.md
├── RELATORIO_MINISHELL.html
├── TESTES_QUACK.md
└── arquivos_teste/
    ├── README_TESTES.txt
    ├── anotacoes.txt
    ├── ola.txt
    └── subpasta/
        └── info.txt

Como rodar no WSL

1. Instalar o WSL no Windows

No PowerShell como administrador:

wsl --install

Depois reinicie o computador, se o Windows pedir.

2. Abrir o Ubuntu / WSL

Voce pode abrir pelo menu iniciar ou rodar:

wsl

3. Instalar compilador e make

No terminal do WSL:

sudo apt update
sudo apt install build-essential make

4. Entrar na pasta do projeto

cd /mnt/c/Users/deric/trabalho-1

5. Compilar

make

Ou manualmente:

gcc -Wall -Wextra -o quack minishell.c

6. Executar

./quack

Como usar sem ./

Se quiser rodar apenas com quack:

make install

Depois adicione o diretorio de instalacao ao PATH.

Para usuario comum:

export PATH="$HOME/.local/bin:$PATH"

Para root:

export PATH="/root/.local/bin:$PATH"

Se quiser deixar isso permanente:

echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc

No caso de root, troque pelo caminho /root/.local/bin.

Exemplo rapido

ajuda
pinfo
mkdir teste
cd teste
touch arquivo.txt
escrever arquivo.txt ola mundo
leitura arquivo.txt
cd ..
ls
rm teste/arquivo.txt
rmdir teste
quit

Navegacao com teclado

A shell suporta edicao basica da linha:

  • e para navegar pelo historico
  • e para mover o cursor
  • Backspace para apagar
  • Ctrl+D em linha vazia para encerrar

Arquivos de teste

O projeto inclui arquivos prontos para demonstracao:

  • TESTES_QUACK.md
  • arquivos_teste/ola.txt
  • arquivos_teste/anotacoes.txt
  • arquivos_teste/subpasta/info.txt

Uma sequencia simples de teste:

leitura arquivos_teste/ola.txt
cd arquivos_teste
ls
touch novo.txt
escrever novo.txt teste da quack
leitura novo.txt
move novo.txt renomeado.txt
recorte renomeado.txt subpasta/renomeado.txt
rm subpasta/renomeado.txt
quit

Limitacoes

Por ser uma shell simplificada, a quack nao implementa:

  • pipes
  • redirecionamento
  • execucao em background
  • autocomplete completo
  • tratamento avancado de aspas

Documentacao complementar

  • RELATORIO_MINISHELL.md
  • RELATORIO_MINISHELL.html

Autor

Projeto desenvolvido por Derick Bessa para estudo e pratica dos conceitos de Sistemas Operacionais com programacao em C.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors