Qual é a diferença entre o bash e o terminal do ubuntu?

Um terminal está no final de um fio elétrico, uma concha é o lar de uma tartaruga, tty é uma abreviação estranha e um console é uma espécie de gabinete.

Bem, etimologicamente falando, de qualquer maneira.

Na terminologia unix, a resposta curta é que

  • terminal = tty = ambiente de entrada / saída de textoconsole = shell terminal físico = interpretador de linha de comando

Console, terminal e tty estão intimamente relacionados. Originalmente, eles se referiam a um equipamento através do qual você podia interagir com um computador: nos primeiros dias do unix, isso significava um dispositivo no estilo de teleprinter que se assemelha a uma máquina de escrever, às vezes chamada de teletypewriter, ou "tty", por abreviação. O nome “terminal” veio do ponto de vista eletrônico e o nome “console” do ponto de vista dos móveis. Muito cedo na história do unix, teclados e displays eletrônicos se tornaram a norma para terminais.

Na terminologia unix, tty é um tipo específico de arquivo de dispositivo que implementa vários comandos adicionais (ioctls) além da leitura e gravação. No seu significado mais comum, terminal é sinônimo de tty. Alguns ttys são fornecidos pelo kernel em nome de um dispositivo de hardware, por exemplo, com a entrada proveniente do teclado e a saída indo para uma tela de modo de texto, ou com a entrada e saída transmitidas através de uma linha serial. Outros ttys, às vezes chamados de pseudo-ttys, são fornecidos (através de uma fina camada do kernel) por programas chamados emuladores de terminal, como o Xterm (executando no X Window System), Screen (que fornece uma camada de isolamento entre um programa e outro terminal) ), Ssh (que conecta um terminal em uma máquina com programas em outra), Expect (para interações de terminal de script) etc.

A palavra terminal também pode ter um significado mais tradicional de um dispositivo através do qual se interage com um computador, normalmente com um teclado e um monitor. Por exemplo, um terminal X é um tipo de thin client, um computador para fins especiais cujo único objetivo é acionar um teclado, monitor, mouse e, ocasionalmente, outros periféricos de interação humana, com os aplicativos em execução em outro computador mais poderoso.

Um console geralmente é um terminal no sentido físico que, por alguma definição, é o terminal principal diretamente conectado a uma máquina. O console aparece no sistema operacional como um tty (implementado pelo kernel). Em alguns sistemas, como Linux e FreeBSD, o console aparece como vários ttys (combinações especiais de teclas alternam entre esses ttys); apenas para confundir as coisas, o nome dado a cada tty específico pode ser "console", "console virtual", "terminal virtual" e outras variações.

Veja também Por que um terminal virtual é "virtual" e o que / por que / onde é o terminal "real" ?.

Um shell é a interface principal que os usuários veem quando efetuam login, cujo objetivo principal é iniciar outros programas. (Não sei se a metáfora original é que o shell é o ambiente doméstico do usuário ou se o shell é o que outros programas estão executando.)

Nos círculos unix, shell se especializou em designar um shell de linha de comando, centrado em torno da inserção do nome do aplicativo que você deseja iniciar, seguido pelos nomes de arquivos ou outros objetos nos quais o aplicativo deve atuar e pressionando a tecla Enter. Outros tipos de ambientes não usam a palavra "shell"; por exemplo, os sistemas de janelas envolvem "gerenciadores de janelas" e "ambientes de desktop", não um "shell".

Existem muitas conchas unix diferentes. Os shells populares para uso interativo incluem Bash (o padrão na maioria das instalações Linux), zsh (que enfatiza o poder e a personalização) e fish (o que enfatiza a simplicidade).

Os shells da linha de comando incluem construções de controle de fluxo para combinar comandos. Além de digitar comandos em um prompt interativo, os usuários podem escrever scripts. Os shells mais comuns têm uma sintaxe comum com base no Bourne_shell. Ao discutir “programação de shell”, o shell quase sempre está implícito como um shell no estilo Bourne. Alguns shells geralmente usados ​​para script, mas sem recursos interativos avançados, incluem o shell Korn (ksh) e muitas variantes de ash. Praticamente qualquer sistema semelhante ao Unix possui um shell no estilo Bourne instalado como / bin / sh, geralmente ash, ksh ou bash.

Na administração do sistema unix, o shell de um usuário é o programa que é chamado quando eles efetuam login. Contas de usuário normais têm um shell de linha de comando, mas usuários com acesso restrito podem ter um shell restrito ou algum outro comando específico (por exemplo, para transferência de arquivos apenas contas).

A divisão do trabalho entre o terminal e a concha não é completamente óbvia. Aqui estão suas principais tarefas.

  • Entrada: o terminal converte as teclas em seqüências de controle (por exemplo, Esquerda → \ e [D). O shell converte seqüências de controle em comandos (por exemplo, \ e [D → backward-char). A edição da linha, o histórico de entrada e a conclusão são fornecidos pelo shell. O terminal pode fornecer sua própria edição, histórico e conclusão da linha e enviar apenas um linha para o shell quando estiver pronto para ser executado. O único terminal comum que funciona dessa maneira é o shell Mx no Emacs.Output: o shell emite instruções como “display foo”, “muda a cor do primeiro plano para verde”, “move o cursor para a próxima linha”, etc. O terminal atua apenas nessas instruções. O prompt é puramente um conceito de shell. O shell nunca vê a saída dos comandos que executa (a menos que seja redirecionado). O histórico de saída (rolagem) é puramente um conceito de terminal. A cópia e colagem no aplicativo é fornecida pelo terminal (geralmente com o mouse ou com as seqüências de teclas, como Ctrl + Shift + V ou Shift + Insert). O shell também pode ter seu próprio mecanismo interno de copiar e colar (por exemplo, Meta + W e Ctrl + Y). O controle do trabalho (iniciar programas em segundo plano e gerenciá-los) é executado principalmente pelo shell. No entanto, é o terminal que lida com combinações de teclas como Ctrl + C para eliminar o trabalho em primeiro plano e Ctrl + Z para suspendê-lo.