__
___( 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.
A quack e uma mini-shell inspirada no fluxo classico apresentado no Tanenbaum:
- mostrar o prompt
- ler o comando do usuario
- verificar se ele e interno
- criar processo filho quando necessario
- executar comandos externos
- esperar o filho terminar
- repetir o ciclo
O projeto foi personalizado com identidade visual no terminal, comandos internos proprios e arquivos de teste para demonstracao.
- 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
- 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
| 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 |
A quack tambem executa comandos externos do sistema, como:
lspwdechocat
Isso acontece via execvp(), que procura o executavel no PATH.
.
├── 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
No PowerShell como administrador:
wsl --installDepois reinicie o computador, se o Windows pedir.
Voce pode abrir pelo menu iniciar ou rodar:
wslNo terminal do WSL:
sudo apt update
sudo apt install build-essential makecd /mnt/c/Users/deric/trabalho-1makeOu manualmente:
gcc -Wall -Wextra -o quack minishell.c./quackSe quiser rodar apenas com quack:
make installDepois 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 ~/.bashrcNo caso de root, troque pelo caminho /root/.local/bin.
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
A shell suporta edicao basica da linha:
↑e↓para navegar pelo historico←e→para mover o cursorBackspacepara apagarCtrl+Dem linha vazia para encerrar
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
Por ser uma shell simplificada, a quack nao implementa:
- pipes
- redirecionamento
- execucao em background
- autocomplete completo
- tratamento avancado de aspas
- RELATORIO_MINISHELL.md
- RELATORIO_MINISHELL.html
Projeto desenvolvido por Derick Bessa para estudo e pratica dos conceitos de Sistemas Operacionais com programacao em C.