O Que É um Shell? bash, zsh e o Kernel

O Que É um Shell? bash, zsh e o Kernel

O que você vai conseguir fazer

  • Explicar a diferença entre o shell e o kernel
  • Distinguir o que são bash, zsh e sh

Pré-requisitos (leia estes primeiro)

O Que É um Shell, Afinal?

"bash," "zsh," "shellUm programa interativo que interpreta os comandos digitados e os executa. script" — assim que você começa a aprender comandos, essas palavras aparecem em todo lugar. Mas o que um shell realmente é muitas vezes fica sem explicação.

Este guia desvenda o que é um shell, como bash, zsh e sh diferem, e como o shell e o kernelO programa central de um sistema operacional. Faz a ponte entre hardware e software. trabalham juntos — tudo por meio de uma conversa entre Lina e o veterano Linny.

O Que Você Vai Aprender

1. O Que É um Shell?

Conclusão: Um shell é um programa tradutor — ele pega os comandos que você digita, passa ao núcleo do sistema operacional (o kernel) e retorna o resultado.

Lina: Veterano Linny, o que é um "shell"? Fico ouvindo nomes como bash e zsh...
Veterano Linny: Boa pergunta. Um shell é um programa tradutor. Ele pega os comandos que você digita e os passa para o "kernel" no centro do sistema operacional.
Lina: Um tradutor...?
Veterano Linny: Exato. Você digita ls. Mas o kernel não entende o texto ls diretamente. O shell interpreta esse texto e pede ao kernel: "execute o programa que lista arquivos." Depois repassa o resultado para você em um formato legível.
Lina: Então ele fica entre mim e o sistema operacional!
Veterano Linny: Exatamente. O nome "shell" vem de ser a camada externa que envolve o kernel (kernel significa "núcleo").

Um shell é um interpretador de comandos

A função formal do shell é ser um "interpretador de comandos": ele lê o texto que você digita e inicia o programa correspondente. É útil lembrar que o terminal (a tela) e o shell (o interpretador) são duas coisas diferentes.

2. Como o Shell e o Kernel se Relacionam?

Conclusão: O kernel é o "núcleo" que gerencia o hardware diretamente; o shell é a camada externa de "recepção" que conecta esse núcleo aos humanos.

Lina: Você continua falando em kernel — o que é exatamente?
Veterano Linny: O kernel é a parte mais interna do sistema operacional. Ele gerencia o hardware diretamente: memória, CPU, disco. É realmente o "núcleo".
Lina: Então não podemos falar com o kernel diretamente?
Veterano Linny: Isso é difícil de fazer com segurança. O kernel é tão poderoso que um movimento errado pode quebrar o sistema inteiro. Por isso colocamos um shell no meio, para nos comunicarmos com segurança e em linguagem compreensível para humanos.
Lina: Como falar com alguém importante por meio de uma recepcionista.
Veterano Linny: Essa é a imagem perfeita. Veja o fluxo aqui.
Você → Terminal → Shell → Kernel → Hardware
(entrada) (exibição) (interpretar) (executar) (CPU/memória/disco)

Três atores

  • Terminal: a "tela" onde você digita e lê o texto
  • Shell: o "tradutor" que interpreta os comandos e os passa ao kernel
  • Kernel: o "núcleo" do sistema operacional que controla o hardware

3. Como bash, zsh e sh Diferem?

Conclusão: sh é a base original, bash é seu sucessor amplamente usado, e zsh é compatível com bash e tem recursos mais ricos. Todos fazem parte da mesma família "shell".

Lina: Então o que são bash e zsh? São todos shells, certo?
Veterano Linny: Sim, todos são "tipos de shell". O mesmo tradutor, mas cada um tem pontos fortes ligeiramente diferentes. Vamos ver os três principais.
Lina: Por favor!
Veterano Linny: Primeiro, o sh. É o shell original, mais básico — "sh" é a abreviação de shell. Hoje em dia, em muitos ambientes, é apenas um link (alias) para um shell mais recente.
Lina: E o bash?
Veterano Linny: O bash significa "Bourne Again SHell", um sucessor aprimorado do sh. É o shell padrão na maioria dos sistemas Linux e o mais usado hoje em dia. Na dúvida, use bash.
Lina: E o zsh?
Veterano Linny: O zsh (Z Shell) é amplamente compatível com bash, mas tem autocompletar poderoso e temas. Também é o shell padrão no macOS. Popular entre quem gosta de personalizar o ambiente.
Shell Lê-se como Características Posição
sh "S-H" Mais básico, mínimo Clássico, base para scripts
bash "bash" Sucessor do sh, mais comum Padrão na maioria do Linux
zsh "Z shell" Compatível com bash + recursos ricos Padrão no macOS, favorito dos que personalizam

Na dúvida, use bash

bash é mais do que suficiente para iniciantes. A maioria dos tutoriais online e exemplos de comandos assume bash, então seu aprendizado fluirá bem. Quando estiver confortável, você pode considerar trocar para zsh.

Para uma comparação mais aprofundada de cada shell, veja bash vs zsh vs fish.

4. Como Verificar Qual Shell Estou Usando?

Conclusão: echo $SHELL mostra seu shell de login, e ps -p $$ mostra o shell que está realmente em execução agora.

Lina: Nem sei qual shell estou usando...
Veterano Linny: Tem um comando para isso. Primeiro, vamos verificar seu shell de login — o que inicia quando você faz login.
echo $SHELL
/bin/bash

$SHELL armazena o caminhoUma sequência de texto que descreve a localização de um arquivo ou diretório. do shell iniciado no login. No exemplo acima, você está usando bash.

Para verificar o shell que está realmente em execução agora, use este comando.

ps -p $$
  PID TTY          TIME CMD
 2451 pts/0    00:00:00 bash

$$ é uma variável especial que guarda "o ID do processo do próprio shell em execução". Com ps -p $$, você pode confirmar diretamente se o shell é bash ou zsh. Pode ser diferente de echo $SHELL (seu shell configurado), então é bom conhecer os dois.

Você pode listar os shells instalados com este comando.

cat /etc/shells
/bin/sh
/bin/bash
/usr/bin/bash
/bin/zsh
/usr/bin/zsh

A página Como Usar o Terminal permite praticar a digitação de comandos do zero. Experimente esses comandos de verificação lá também.

5. Como Alterar Meu Shell de Login?

Conclusão: Use chsh -s para alterar. Especifique apenas um shell que esteja listado em /etc/shells.

Lina: Quero tentar trocar de bash para zsh! Como faço?
Veterano Linny: Use o comando chsh (change shell). Mas há algumas coisas a observar antes.

Primeiro, confirme se o shell desejado está listado em /etc/shells (não é possível especificar um shell que não esteja listado). Após confirmar, troque assim.

chsh -s /bin/zsh

A mudança entra em vigor no próximo login.

Dicas para experimentar com segurança

  • Não especifique um caminho que não esteja em /etc/shells (pode impedir que você faça login)
  • Em vez de trocar de imediato, apenas digite zsh para iniciá-lo temporariamente e experimentar
  • Para voltar, execute chsh -s /bin/bash para retornar ao bash
Lina: Entendi. Primeiro digitar zsh para experimentar, depois oficializar com chsh se gostar!
Veterano Linny: Ordem perfeita. Agora você pode escolher o shell na sua máquina com confiança.

Lina Tropeça no echo

Conclusão: $SHELL diferencia maiúsculas de minúsculas. Digite $shell em minúsculas, e a variável não é encontrada. Nada é exibido.

Lina: Vou verificar meu shell como você me mostrou! echo $shell... ué, não aparece nada.
echo $shell

Lina: A tela ficou vazia... o que aconteceu?
Veterano Linny: Quase! A variável certa é $SHELL, em maiúsculas. $shell não existe, por isso não retornou nada.
echo $SHELL
/bin/bash
Lina: Ah, com maiúsculas funcionou! Tenho que digitar o nome da variável exatamente certo.
Veterano Linny: Exatamente. O shell lê seus comandos exatamente como digitados. Por isso, a caixa das letras importa.

Exercícios Rápidos

Conclusão: Experimente você mesmo os comandos de hoje no Penguin Gym Linux para fixar o conteúdo.

Veterano Linny: Vamos tentar alguns exercícios para verificar o que você aprendeu hoje.

Exercício 1: Verifique Seu Shell de Login

Tarefa: Rode um comando para ver o caminho do seu shell de login.

Ver Dica 1 (Direção)

Uma variável especial guarda o shell que inicia no login. Exiba essa variável.

Ver Dica 2 (Nome do comando)

Use echo para exibir a variável $SHELL.

Ver Resposta
echo $SHELL
/bin/bash

Exercício 2: Verifique o Shell em Execução pelo Processo

Tarefa: Mostre as informações do processo do shell em execução agora.

Ver Dica 1 (Direção)

Lembre-se do comando que mostra dados de processo. A pista é a variável que guarda o ID do processo do shell atual.

Ver Dica 2 (Nome do comando)

Execute ps com a opção -p $$.

Ver Resposta
ps -p $$
  PID TTY          TIME CMD
 2451 pts/0    00:00:00 bash

Exercício 3: Liste os Shells Disponíveis

Tarefa: Exiba a lista de shells instalados neste sistema.

Ver Dica 1 (Direção)

Existe um arquivo que lista os shells disponíveis. Veja o conteúdo dele.

Ver Dica 2 (Nome do comando)

Use cat para exibir o arquivo /etc/shells.

Ver Resposta
cat /etc/shells
/bin/sh
/bin/bash
/usr/bin/bash
/bin/zsh
/usr/bin/zsh

Resumo em 3 Linhas

Conclusão: Os pontos-chave de hoje são a relação shell-kernel, as diferenças entre bash/zsh/sh e os comandos de verificação/alteração.

  1. O shell é o tradutor do kernel - ele lê seus comandos, os passa ao kernel (o núcleo) e traz de volta o resultado
  2. sh, bash e zsh são tipos de shell - sh é a base, bash é o sucessor mais usado, zsh é compatível com bash e rico em recursos
  3. Verifique com echo $SHELL / ps -p $$, altere com chsh -s - só é possível especificar um shell listado em /etc/shells

Próximas Leituras