De 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 tem interface de 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 e o 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 era chamado de command.com
e poucas pessoas tentaram usar um diferente. No Unix, no entanto, há muito tempo há múltiplos shells que os 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. C shells usam a sintaxe do shell C original. Então existem shells não tradicionais que inventam sua própria sintaxe, ou emprestam uma de alguma linguagem de programação, e são geralmente muito menos populares que os dois primeiros tipos.
Um comando interno é simplesmente um comando que o shell executa em si, em vez de interpretá-lo como um pedido para carregar e executar algum outro programa. Isso tem dois efeitos principais. Primeiro, geralmente é mais rápido, porque carregar e executar um programa leva tempo. Naturalmente, quanto mais tempo o comando demora para ser executado, menos significativo o tempo de carregamento é comparado ao tempo de execução geral (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 incorporados para eficiência, mas não há razão intrínseca para que eles não possam ser comandos externos.
Quais comandos embutidos dependem do shell que você está usando. Você terá que consultar sua documentação para obter uma lista (por exemplo, os comandos internos de bash
estão listados em Capítulo 4 do seu manual ). O comando type
pode dizer se um comando está embutido (se o seu shell é compatível com POSIX), porque o POSIX requer que type
seja um built-in. Se which
não é um built-in em seu shell, provavelmente ele não saberá sobre os built-ins do seu shell, mas apenas procurará por programas externos.