Existe-t-il une différence intrinsèque entre une commande intégrée et une autre commande qui peut théoriquement faire la même chose ?
par exemple. Les builtins bénéficient-ils d'un traitement "spécial" ? … y a-t-il moins de frais généraux pour les faire fonctionner ? .. ou sont-ils simplement « intégrés » ; comme le tableau de bord de votre voiture ?
…et existe-t-il une liste définitive (actuelle) de ces fonctions intégrées ?
Réponse acceptée :
D'après vos commentaires, vous semblez confus quant à ce qu'est exactement un shell est. Le noyau est responsable de la gestion du système. C'est la partie qui charge et exécute les programmes, accède aux fichiers, alloue de la mémoire, etc. Mais le noyau n'a pas d'interface utilisateur; vous ne pouvez communiquer avec lui qu'en utilisant un autre programme comme intermédiaire.
Un shell est un programme qui imprime une invite, lit une ligne d'entrée de votre part, puis l'interprète comme une ou plusieurs commandes pour manipuler des fichiers ou exécuter d'autres programmes. Avant l'invention de l'interface graphique, le shell était la principale interface utilisateur d'un système d'exploitation. Sous MS-DOS, le shell s'appelait command.com
et peu de gens ont essayé d'en utiliser un autre. Sous Unix, cependant, il existe depuis longtemps plusieurs shells parmi lesquels les utilisateurs peuvent choisir.
Ils peuvent être divisés en 3 types. Les shells compatibles Bourne utilisent la syntaxe dérivée du shell Bourne d'origine. Les shells C utilisent la syntaxe du shell C d'origine. Ensuite, il existe des shells non traditionnels qui inventent leur propre syntaxe, ou en empruntent une à un langage de programmation, et sont généralement beaucoup moins populaires que les deux premiers types.
Une commande intégrée est simplement une commande que le shell exécute lui-même, au lieu de l'interpréter comme une demande de chargement et d'exécution d'un autre programme. Cela a deux effets principaux. Premièrement, c'est généralement plus rapide, car le chargement et l'exécution d'un programme prennent du temps. Bien sûr, plus la commande met du temps à s'exécuter, moins le temps de chargement est important par rapport au temps d'exécution global (car le temps de chargement est assez constant).
Deuxièmement, une commande intégrée peut affecter l'état interne du shell. C'est pourquoi des commandes comme cd
doit être intégré, car un programme externe ne peut pas modifier le répertoire courant du shell. D'autres commandes, comme echo
, peuvent être intégrés pour plus d'efficacité, mais il n'y a aucune raison intrinsèque pour qu'ils ne puissent pas être des commandes externes.
Les commandes intégrées dépendent du shell que vous utilisez. Vous devrez consulter sa documentation pour une liste (par exemple, bash
Les commandes intégrées de sont répertoriées dans le chapitre 4 de son manuel). Le type
La commande peut vous dire si une commande est intégrée (si votre shell est compatible POSIX), car POSIX nécessite ce type
être un intégré. Si which
n'est pas intégré à votre shell, il ne connaîtra probablement pas les éléments intégrés de votre shell, mais recherchera simplement des programmes externes.