Nos seus comentários, você parece estar confuso sobre exatamente o que é um shell . O kernel é responsável por gerenciar o sistema. É a parte que realmente carrega e executa programas, acessa arquivos, aloca memória, etc. Mas o kernel não possui interface com o usuário; você só pode se comunicar com ele usando outro programa como intermediário.
Um shell é um programa que imprime um prompt, lê uma linha de entrada sua e depois a interpreta como um ou mais comandos para manipular arquivos ou executar outros programas. Antes da invenção da GUI, o shell era a principal interface do usuário de um sistema operacional. No MS-DOS, o shell foi chamado command.com
e poucas pessoas tentaram usar outro. No Unix, no entanto, há muito tempo que vários usuários podem escolher.
Eles podem ser divididos em 3 tipos. Os shells compatíveis com Bourne usam a sintaxe derivada do shell Bourne original . Os shells C usam a sintaxe do shell C original . Depois, existem shells não tradicionais que inventam sua própria sintaxe ou emprestam uma de alguma linguagem de programação e geralmente são muito menos populares que os dois primeiros tipos.
Um comando interno é simplesmente um comando que o shell executa sozinho, em vez de interpretá-lo como uma solicitação para carregar e executar outro programa. Isso tem dois efeitos principais. Primeiro, geralmente é mais rápido, porque carregar e executar um programa leva tempo. Obviamente, quanto mais tempo o comando leva para executar, menos significativo é o tempo de carregamento comparado ao tempo geral de execução (porque o tempo de carregamento é razoavelmente constante).
Em segundo lugar, um comando interno pode afetar o estado interno do shell. É por isso que comandos como cd
devem ser integrados, porque um programa externo não pode alterar o diretório atual do shell. Outros comandos, como echo
, podem ser integrados para eficiência, mas não há razão intrínseca para que eles não possam ser comandos externos.
Quais comandos estão embutidos dependem do shell que você está usando. Você terá que consultar sua documentação para obter uma lista (por exemplo, bash
os comandos internos estão listados no Capítulo 4 deste manual ). O type
comando pode dizer se um comando está embutido (se o seu shell for compatível com POSIX), porque o POSIX exige que type
seja embutido. Se which
não estiver embutido no seu shell, provavelmente não saberá sobre os embutidos do seu shell, mas apenas procurará programas externos.