Qual é a diferença entre Terminal, Console, Shell e Linha de Comando?
Qual é a diferença entre Terminal, Console, Shell e Linha de Comando?
Respostas:
Resposta curta:
Resposta longa:
Console e terminal 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, um terminal é um tipo específico de arquivo de dispositivo que implementa vários comandos adicionais ( ioctls ) além da leitura e gravação. Alguns terminais 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 texto, ou com a entrada e saída transmitidas através de uma linha serial. Outros terminais, às vezes chamados de pseudo-terminais ou pseudo-ttys, são fornecidos (através de uma fina camada de kernel) por programas chamados emuladores de terminal . Alguns tipos de emuladores de terminal incluem:
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 terminal (implementado pelo kernel). Em alguns sistemas, como Linux e FreeBSD, o console aparece como vários terminais (ttys) (combinações especiais de teclas alternam entre esses terminais); apenas para confundir as coisas, o nome dado a cada terminal 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"? .
Uma linha de comando é uma interface na qual o usuário digita um comando (que é expresso como uma sequência de caracteres - geralmente um nome de comando seguido por alguns parâmetros) e pressiona a Returntecla para executar esse comando.
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 (com a notável exceção recente do Gnome Shell) geralmente 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. O shell padrão do Ubuntu é Bash (como a maioria das outras distribuições Linux). Alternativas populares incluem zsh (que enfatiza poder e capacidade de personalização) e peixe (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. No Ubuntu, /bin/sh
é o Dash , uma variante ash (escolhida porque é mais rápida e usa menos memória que o 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.
\e[D
). O shell converte seqüências de controle em comandos (por exemplo, \e[D
→ backward-char
).M-x shell
no Emacs.foo
”, “alterne a cor do primeiro plano para verde”, “mova o cursor para a próxima linha”, etc. O terminal atua nessas instruções.Reciclado a partir de Unix e Linux
CONFIG_TTY
. O suporte para emuladores de terminal (mais propriamente chamados pseudo terminais - “emulador de terminal” nem sempre inclui telnetd, tela, espera, ...) é controlado por CONFIG_UNIX98_PTYS
. O suporte para o modo de texto do PC e o teclado ou similares são controlados por CONFIG_VT
. Veja drivers/tty/Kconfig
na fonte do kernel.
Uma representação visual.
Algo em que você pode sentar e trabalhar como um chefe.
Algum hardware que faz um monte de coisas.
Outro exemplo de console, seria um console de videogame, como um Super Nintendo [onde você pode jogar Actraiser]
Basicamente, um aplicativo para executar comandos.
Basicamente, qualquer coisa que você insira comandos.
No projeto de informações do Linux :
Terminal : tecnicamente, uma janela de terminal, também chamada de emulador de terminal, é uma janela somente de texto em uma interface gráfica do usuário (GUI) que emula um console.
Em nossas palavras, um aplicativo GUI, de onde podemos acessar o console de um usuário.
Console : um painel de instrumentos contendo os controles para um computador
Shell : Um shell é um programa que fornece a interface do usuário tradicional somente em texto para Linux e outros sistemas operacionais semelhantes ao Unix
Linha de comando: uma linha de comando é o espaço à direita do prompt de comando em um modo de exibição de texto em um monitor de computador (geralmente um painel CRT ou LCD) no qual um usuário insere comandos e dados
As respostas aqui parecem muito boas. No entanto, eles são muito secos e técnicos para o meu gosto, então eu darei uma chance.
Terminal é o fim de algo - onde termina. Por exemplo, se você pegar o metrô em alguma cidade, a estação onde você descer é o seu terminal. Ou em um aeroporto, o local onde as pessoas saem quando chegam ao país de destino é considerado o terminal. A razão pela qual o terminal no aeroporto é hoje em dia tanto o local de embarque de pessoas quanto o local de embarque das pessoas é por razões econômicas óbvias.
O objetivo de um computador é obter dados, fazer algo com eles e cuspir o resultado. Assim, o terminal é qualquer dispositivo de onde você pode obter o resultado da computação (uma tela, por exemplo). Aconteceu que, nos primeiros computadores, você geralmente tinha a entrada (teclado) e a saída (tela) como um único dispositivo. Por isso, hoje em dia os terminais são considerados dispositivos de entrada / saída. Um mouse, teclado, tela, câmera, são todos terminais.
Shell é uma coisa do sistema operacional. Em um computador, você tem o kernel, que no Ubuntu, por exemplo, é a parte do Linux. Agora, como o kernel é realmente de baixo nível, é fornecido um shell - um programa que permite ao usuário interagir com o kernel de maneira fácil. É isso que é o BASH, por exemplo.
Console é (de um dicionário)
uma superfície plana que contém os controles de uma máquina, de um equipamento elétrico etc.
É por isso que na indústria da música o quadro com todos os botões, ou em um ônibus espacial a mesa de comando, todos são considerados consoles. Super Nintendo e PS2 também são chamados de consoles historicamente, já que os primeiros dispositivos de entretenimento pareciam caixas com um monte de botões.
A linha de comando é apenas uma interface - o oposto da GUI. Ou seja, existem dois tipos de interfaces em um computador; CLI (interface da linha de comandos) e GUI (interface gráfica do usuário). A principal diferença é que o primeiro obtém entrada do teclado enquanto o segundo recebe do mouse.
Para resumir minha resposta:
O Shell é um programa que processes
comanda e gera returns
saída, como o bash no Linux.
Terminal é um programa que run
um shell , no passado, era um dispositivo físico (antes dos terminais serem monitores com teclados, eram teletipos ) e, em seguida, seu conceito era transferido para software , como o Gnome-Terminal .
Então eu abro o Gnome-Terminal , uma janela preta aparece executando o Shell para que eu possa executar meus comandos.
Console é um tipo especial de terminal , também era um dispositivo físico. exemplo no Linux, temos o virtual console
que eu posso acessá-los através da combinação de Ctrl+ Alt+ F1 to F7.
Às vezes, console significa o teclado e o monitor conectados fisicamente a este computador.
Esses termos geralmente andam juntos, então as pessoas usam um dos termos para se referir à coleção. (ou seja, geralmente é óbvio no contexto que eles significam uma janela de terminal fornecendo uma interface para um shell de linha de comando).
Para evitar que isso aconteça, eu vou dizer o xterm como um substituto para o XTerm / Gnome Terminal / Konsole / mrxvt / etc / etc. O mesmo para o bash.
O console tem vários outros significados específicos, então deixe isso de lado por enquanto.
Terminal : algo que fornece interação humana com programas por meio de um fluxo bidirecional de caracteres ASCII / UTF8 / outros, geralmente com VT100 ou processamento de código de escape semelhante. (Por exemplo, backspace, excluir, teclas de seta, etc. geram códigos de escape. Os programas podem imprimir códigos de escape para mover o cursor pela tela do terminal, alternar para texto em negrito e / ou cor, limpar ou rolar a tela, etc.) antigamente, esse era frequentemente um dispositivo dedicado com tela, teclado e porta serial. Agora, geralmente é um programa como o xterm.
Existem arquivos de dispositivo para programas de leitura / gravação de / para terminais, e os terminais virtuais também têm o outro lado acessível como um arquivo de dispositivo. É aqui que o xterm grava sua entrada para que o bash possa lê-la.
Cada terminal, incluindo os virtuais, fornece edição básica de linha quando está no modo cozido (em oposição ao bruto). Isso é tratado pelo código do kernel. É o bash que fornece a edição de linha que você pode fazer com as teclas de seta. (Tente executar cat
e digitar se você quiser ver como é a edição de linha básica fornecida pelo kernel. O backspace funciona e algumas outras coisas de acordo com suas configurações stty.)
Embora exista muito código de kernel por trás dos dispositivos de terminal, ele seria referido como código de manipulação de terminal, não como um terminal em si.
Edit: Gilles me convenceu de que se referir a um tty como um terminal é o uso adequado. Emuladores de terminal e programas interativos executados conectados a um terminal, todos dependem da semântica do terminal implementada pelo kernel. (A maior parte desse comportamento é padronizado pelo POSIX e é o mesmo no Linux / * BSD / outro Unix.) Um editor de texto em tela cheia depende do comportamento do material tty do Unix, bem como da manipulação do código de escape do movimento do cursor, e muitos outros recursos do emulador de terminal.
No entanto, um VT100 físico com uma tela, teclado e porta serial é uma instância de um terminal. Ele não requer que um kernel Unix na outra extremidade de sua porta serial esteja completo. Algo completamente diferente pode estar enviando códigos de escape e texto ASCII e recebendo o mesmo. Seria apenas um VT100, não um terminal Unix. Um emulador de terminal e a semântica tty do Unix compõem o pacote completo de um terminal Unix em que um programa como o bash normalmente roda.
A linha de comando é um estilo de interface do usuário, onde você digita algo e, em seguida, pressione retornar para que algo aconteça. Também é usado como atalho para um shell de linha de comando, como o bash ou o MS-DOS, mas você também pode dizer "é uma ferramenta de linha de comando" sobre algo como o fdisk. Considerando apenas programas que usam um terminal para sua interface do usuário, as duas famílias principais são linha de comando e texto em tela cheia (por exemplo, um editor como vi ou emacs -nw
).
Os programas de linha de comando que normalmente executam nos terminais quase sempre ainda funcionam com suas entradas e saídas redirecionadas para arquivos, mas os programas de tela cheia baseados em terminal, como editores ou clientes de email, são apenas interativos e não funcionam.
Um shell é um programa para iniciar outros programas. Em um contexto Unix, é comum significar shell de linha de comando (por exemplo, shell Bourne ou equivalente em shell C). Os shells Unix também podem ler suas entradas de arquivos, ou seja, scripts de shell. São linguagens de programação completas, com variáveis, loops e condicionais, e muitos programas são escritos em bash (ou apenas com os /bin/sh
recursos de shell POSIX, para maior portabilidade). Também é fácil escrever rapidamente for i in *.something; do some_program "$i";done
em um shell interativo.
Juntando tudo, um shell como o bash (ou qualquer outro programa que você iniciou executando um comando shell) receberá caracteres do /dev/pts/N
dispositivo terminal após o xterm gravar sua entrada na lateral do pseudo-terminal. Se você executar cat
e pressionar ^c
, o código tty do kernel atuará no ^c
e enviará um SIGINT
para o processo em primeiro plano naquele terminal. (Observe o uso do terminalneste contexto, para significar o Unix tty, não um emulador de terminal ou algo conectado a uma porta serial.) Isso acontece porque o shell coloca o terminal no modo "cozido" antes de iniciar qualquer programa, o que significa que o kernel age com algum controle. sequências. (O código tty ainda não tem nada a ver com a manipulação de códigos de escape do VT100, apenas alguns códigos de controle com baixo ASCII.) Se, em vez de um xterm, você estiver usando o terminal de texto do console Linux, o kernel estará fazendo a emulação do VT100 e lidar com todas essas coisas. O Linux pode ser compilado sem o suporte ao terminal de texto do console virtual, mas não sem o suporte a tty.
Às vezes, o console é usado como sinônimo de terminal (o KDE ainda possui um emulador de terminal chamado Konsole).
Como 0xSheepdog aponta, ele também tem outro significado: hardware de interação humana conectado localmente.
Em um contexto de kernel, console tem outro significado específico: é o terminal onde as mensagens de inicialização são gravadas. Esta pode ser uma porta serial. Normalmente, é claro, é o console de texto implementado pelo kernel na parte superior dos drivers para hardware gráfico e teclados USB / ps2 / AT. Se você inicializar o Linux console=tty0 console=ttyS0,115200n8
na linha de comando, receberá mensagens do kernel na tela E na porta serial.
O Linux implementa consoles virtuais ( /dev/tty1
para N ). Você pode trocar qual tela / teclado físico está controlando com Ctrl+ Alt+ . As distros típicas do Linux criam 6 e iniciam em todas elas; portanto, mesmo que você não possa ou não queira iniciar o X11, você pode efetuar login 6 vezes e alternar entre um comando, uma página de manual e qualquer outra coisa, sem executando um programa como tela. O Linux (o kernel) inclui um emulador de terminal no estilo VT100 para fornecer uma interface de terminal através da tela e do teclado nos consoles virtuais.FNgetty
Os 6 terminais virtuais padrão com avisos de login é o motivo pelo qual o Ctrl+ Alt+ F7retorna à sua sessão X11: o servidor X pega o próximo console virtual disponível. (O servidor X abre /dev/input/...
diretamente, em vez de pressionar as teclas /dev/tty7
.)
Portanto, "trocar para um console de texto" significa pressionar Ctrl+ Alt+ F1e usar esse terminal. Quando os computadores eram lentos e não tinham muita RAM, algumas pessoas passavam muito tempo nos consoles de texto, pois eram rápidos, você podia definir uma fonte legal e até alterar o tamanho do terminal para ter caracteres menores, mas mais na tela de uma só vez. Alt+ Lefte Alt+ Righttrocam para o console anterior / seguinte. (O X11 desativa isso para seu console, é claro, deixando apenas o combo Ctrl+ Alt+ .)FN
Portanto, console é o único desses termos que não tem um único significado técnico bem definido. Tem alguns diferentes. (Dependendo de como você se sente sobre o terminal adequado versus o terminal e o manuseio de tty, você pode dizer que o terminal também tem vários significados.)
/dev/console
. O console não é particularmente ambíguo - embora seja usado ocasionalmente no sentido mais geral de terminal , isso é muito raro (mais raro do que o terminal sendo usado para significar especificamente um console).
Penso que, nos primeiros dias dos computadores com compartilhamento de tempo, todo usuário tinha um terminal (quando podia obter um!), Mas apenas os operadores do sistema tinham um console. O console pode ser usado para tarefas como reiniciar a máquina ou obter diagnósticos do sistema que não eram possíveis nos terminais do usuário. O console estava na sala de máquinas, uma parte intrínseca do computador, enquanto os terminais podiam ser remotos. O console também incluiria luzes e interruptores de hardware, não apenas entrada e saída de texto.
Eu diria que a linha de comando é uma área em que um usuário pode digitar um comando, enquanto o shell é o programa que interpreta / obedece a esse comando. O termo "shell" é muito particular para derivados do Unix; "linha de comando" é mais uma tradição do Windows / DOS. O equivalente em mainframes é geralmente chamado de "linguagem de controle de tarefas".
Claramente, essas distinções originais tornaram-se borradas ao longo do tempo à medida que a tecnologia muda.
Tentativa resposta curta centrada no usuário:
linha de comando - a linha em que você insere comandos. Geralmente, costumava dizer que você precisa executar algo na janela de modo de texto (interface da linha de comandos) fornecida pelo seu sistema operacional.
shell - o programa real executado pelo sistema operacional para processar as coisas em que você entra command line
. Daí o nome - shell amigável para o núcleo do SO não amigável. Ele fornece prompt de comando, como $
ou >
, executa seus próprios comandos e aplicativos. Você sempre trabalha com o shell
programa e nunca opera diretamente com o console ou terminal.
console - é uma janela na qual seus programas em modo texto estão em execução. Esta janela processa pressionamentos de teclas, sabe que é largura e altura. Pode ser em tela cheia.
terminal - é um dispositivo com tela para humanos que aceita o fluxo de caracteres de entrada e os mostra. Não há comentários para o usuário sobre altura ou largura (apenas hacks) ou pressionamentos de teclas do teclado - apenas caracteres estão viajando para ele. O terminal processa sequências especiais nesse fluxo para tornar as coisas coloridas, limpar a tela e fazer outras coisas desagradáveis. Os terminais são esquisitos, porque é fácil mexer nas coisas se o arquivo que você está canalizando para a saída contiver seqüências especiais. Eles são populares nas interfaces de rede e de depuração de dispositivos, porque você só precisa de um único fluxo para enviar saída e controlar o dispositivo de saída e pode tap
entrar em conversação sem a necessidade de inicializar ou criar uma janela.
console serial - é um console que processa o fluxo de entrada como um terminal.
Este é um tópico vago, porque os termos são muito ambíguos. Eu recomendo fortemente a leitura dos links que forneci ao longo desta resposta, que também são minhas fontes para esta resposta.
Um shell é a camada acima do kernel:
Um terminal tem muitos significados:
Um console tem muitos significados:
Geralmente, os sistemas operacionais permitem executar vários consoles em um console físico (definição de console 2). Estes são chamados de consoles virtuais , também conhecidos como terminais virtuais , e podem ser acessados através das combinações ctrl+ alt+ Fx. Por exemplo, se você deseja abrir o terceiro console virtual, use a combinação ctrl+ alt+ F3.
Os consoles (definição 3) podem parecer um anacronismo, mas os especialistas devem se sentir confortáveis em usá-los, pois existem muitos sistemas operacionais que não suportam GUIs. Além disso, se uma GUI parar de responder, o console ainda poderá funcionar.
Atualmente, a maioria dos terminais são emuladores de terminal . É um tipo de função no funcionamento de um sistema semelhante ao UNIX e, ao mesmo tempo, a interface básica oferecida pelos sistemas. De fato, tudo, incluindo a GUI, se baseia em cima disso.
Coloquialmente "terminal" também pode se referir a pontos finais em uma rede de computadores com uma topografia em estrela.
Console refere-se às interfaces (de hardware) dos terminais. Ou seja, existem consoles seriais e hoje em dia são principalmente virtuais .
A janela denominada coloquialmente como "console" - janela é um shell, conectado a um terminal do sistema, através de um console virtual.
Na época em que os computadores eram caros, uma instalação poderia ter um computador real e vários terminais conectados a ele, através de cabos seriais ("console serial"). O SO, operações, etc. foram realizados no computador físico, a entrada e a saída aconteciam no (s) console (s).
Você pode alternar entre terminais virtuais pressionando CTRL+ ALT+ F1(até F6): sobra desses tempos.
Hoje, o conceito de "thin clients" volta nessa direção, centralizando grandes quantidades de recursos e fornecendo hardware suficiente para fornecer uma interface avançada no local de trabalho real.
shell é o "mecanismo" que você vê no terminal. Ele fornece interoperabilidade com o próprio sistema e adiciona recursos interessantes, como preenchimento automático, variáveis etc.
É traduzido entre o sistema operacional / kernel real que usa você e as chamadas do sistema. As chamadas de sistema sem shell são um pouco como codificação assembler
e pelo menos uma shell fornece C
.
linha de comando refere-se ao método de troca de entrada e saída através de uma janela de texto. A rigor, a linha na qual você digita é a linha de comando (atual). O método em geral é mais corretamente chamado de interface da linha de comandos ou CLI.