Terminal, shell e emuladores
Esta aula explica a diferença entre terminal, shell e emuladores, detalha o prompt e as sessões, preparando o aluno para entender o ambiente de linha de comando no Linux.
Nesta aula, vamos esclarecer conceitos fundamentais para quem está começando no mundo do shell script: a diferença entre terminal e shell, o papel dos emuladores, a estrutura do prompt e o funcionamento das sessões. Compreender esses elementos é essencial para navegar e automatizar tarefas no Linux de forma eficiente.
Muitos iniciantes confundem os termos "terminal", "shell" e "emulador", mas cada um tem um papel específico. Vamos desvendar cada um deles com exemplos práticos.
O que é um terminal vs shell
O terminal (ou console) é um dispositivo físico que permite interagir com o computador. Antigamente, era um monitor e teclado conectados diretamente ao mainframe. Hoje, usamos emuladores de terminal que simulam esse hardware. O shell é o programa que interpreta os comandos que você digita. Ele é uma interface de usuário para os serviços do sistema operacional.
Existem vários shells: Bash, Zsh, Fish, etc. O Bash (Bourne Again Shell) é o mais comum no Linux. Quando você abre um emulador de terminal, ele inicia um shell dentro dele. O shell exibe um prompt (como $ ou #) e espera seus comandos. Exemplo:
$ echo "Olá, mundo!"
Olá, mundo!O terminal apenas exibe o que o shell produz. O shell processa o comando echo e envia a saída para o terminal.
Emuladores
Emuladores de terminal são programas que imitam um terminal físico. Exemplos populares: GNOME Terminal, Konsole, xterm, iTerm2 (macOS), Windows Terminal (WSL). Eles fornecem recursos como abas, rolagem, cores e suporte a Unicode.
O emulador se comunica com o sistema operacional através de um pseudo-terminal (PTY). O PTY é um par de dispositivos: um para o emulador e outro para o shell. O emulador envia as teclas digitadas para o PTY, o shell lê e processa, e a saída é enviada de volta ao emulador para exibição.
Você pode abrir vários emuladores ao mesmo tempo, cada um executando seu próprio shell. Exemplo de comando para ver o terminal atual:
$ tty
/dev/pts/0Isso mostra que estamos usando o pseudo-terminal /dev/pts/0.
Prompt
O prompt é a string exibida pelo shell indicando que está pronto para receber comandos. No Bash, o prompt padrão é definido pela variável PS1. Normalmente mostra usuário@hostname:diretório$.
Você pode personalizar o prompt. Exemplo de um prompt simples:
$ PS1='\u@\h:\w\$ '
user@host:~/docs$Os escapes comuns: \u (usuário), \h (hostname), \w (diretório atual), \$ ($ para usuário comum, # para root). O prompt também pode conter cores, data, etc.
O prompt pode ser alterado temporariamente ou permanentemente no arquivo ~/.bashrc. Exemplo de prompt colorido:
PS1='\[\e[0;32m\]\u@\h\[\e[0m\]:\[\e[0;34m\]\w\[\e[0m\]\$ 'Isso mostra o usuário em verde e o diretório em azul.
Sessões
Uma sessão de shell é o ambiente criado quando você faz login ou abre um terminal. Ela inclui variáveis de ambiente, processos filhos, diretório de trabalho, etc. Cada sessão é independente.
Você pode ter múltiplas sessões simultâneas, por exemplo, abrindo várias abas no emulador ou usando screen ou tmux. Esses programas permitem gerenciar sessões que persistem mesmo após desconexão.
Exemplo de criação de uma nova sessão com tmux:
$ tmux new-session -s minha-sessaoDentro do tmux, você pode desanexar (Ctrl+b d) e depois reanexar (tmux attach -t minha-sessao). Isso é útil para manter processos rodando em servidores remotos.
As sessões também podem ser aninhadas: um shell pode iniciar outro shell (subshell). Isso acontece quando você executa um script ou usa parênteses. Exemplo:
$ (cd /tmp && pwd)
/tmp
$ pwd
/home/userO comando dentro dos parênteses executa em um subshell, sem alterar o diretório do shell pai.
Boas práticas
- Sempre verifique em qual shell você está: echo $SHELL.
- Personalize seu prompt para incluir informações úteis, como branch do git.
- Use tmux ou screen para sessões remotas.
- Entenda a diferença entre shell interativo e não interativo (scripts).
- Evite usar exit em subshells sem necessidade.
Referências
- GNU Bash Manual
- Arch Wiki: Command-line shell
- Wikipedia: Terminal emulator
- Advanced Bash-Scripting Guide
- tmux Wiki
- GNU Screen
Exercícios
Qual a diferença entre terminal e shell? Explique com suas palavras.
✓ Resposta: O terminal é o dispositivo físico ou emulador que exibe a interface, enquanto o shell é o programa que interpreta comandos. O terminal apenas mostra a saída; o shell processa os comandos e gera a saída.Cite três emuladores de terminal populares no Linux.
✓ Resposta: GNOME Terminal, Konsole, xterm.O que significa o símbolo
$no prompt? E o símbolo#?✓ Resposta:$indica que o shell está sendo executado como um usuário comum.#indica que o shell está sendo executado como superusuário (root).Como criar uma nova sessão no tmux chamada "teste"?
✓ Resposta:tmux new-session -s testeQual comando exibe o caminho do terminal atual (pseudo-terminal)?
✓ Resposta:tty