Quelles sont les commandes intégrées shell dans Linux?
J'ai commencé à utiliser Linux et je suis curieux de voir comment shell de commandes intégrées telles que cd
sont définis.
Aussi, je vous en serais reconnaissant si quelqu'un pouvait expliquer la façon dont ils sont mis en œuvre et exécuté.
source d'informationauteur user385201
Vous devez vous connecter pour publier un commentaire.
Si vous voulez voir comment bash objets internes sont défini ensuite, vous avez juste besoin de regarder L'article 4 de La Page de manuel de Bash.
Si, toutefois, vous voulez savoir comment bash bultins sont mis en œuvrevous aurez besoin de regarder à le code source de Bash parce que ces commandes sont compilés dans le bash exécutable.
Un moyen facile et rapide de voir si oui ou non une commande est un bash builtin est d'utiliser le
help
de commande. Exemple,help cd
va vous montrer comment le bash builtin de " cd " est défini. De même pourhelp echo
.La série de built-ins varie de shell shell. Il y a:
Vous permet de savoir si l'utilitaire est construit à l'aide de la
type
de commande, qui est pris en charge par la plupart des shells (même si sa production n'est pas normalisée). Un exemple dedash
:Re
cd
utilitaire, théoriquement il n'y a rien qui empêche un shell responsable de l'implémentation de l'appliquer comme commande externe.cd
ne peut pas changer la coque du répertoire courant directement, mais, par exemple,cd
pouvez communiquer à nouveau répertoire pour le processus du shell via une socket. Mais personne ne le fait car il n'y a pas de point. À l'exception de très vieilles coques (où il n'y a pas une notion de built-ins), oùcd
utilisé certains sale système de hack pour faire son travail.Comment est
cd
mis en œuvre à l'intérieur de la coquille? L'algorithme de base est décrite ici. Il peut aussi faire un peu de travail à l'appui de shell fonctionnalités supplémentaires.Manjari,
Vérifier le code source de bash shell à partir de ftp://ftp.gnu.org/gnu/bash/bash-2.05b.tar.gz
Vous trouverez que la définition de shell les commandes intégrées sont pas dans un autre fichier binaire exécutable, mais sa à l'intérieur de la coquille binaire lui-même (le nom de shell intégré clairement à penser cela).
Tous les Unix, shell a au moins quelques builtin commands. Ces builtin commandes sont partie de la coquille, et sont mis en œuvre dans le cadre de la coque du code source. Le shell reconnaît que la commande qu'il a été demandé de signer l'un de ses objets internes, et il effectue cette action sur son propre, sans faire appel à un exécutable séparé. Les différents interpréteurs ont différents objets internes, s'il y aura beaucoup de chevauchement dans le jeu de base.
Parfois, les objets internes sont intégrés pour des raisons de performances. Dans ce cas, il y a souvent aussi une version de cette commande dans
$PATH
(éventuellement avec un autre ensemble de fonctions, autre jeu de reconnu arguments de ligne de commande, etc), mais le shell a décidé de mettre en œuvre la commande intégrés en tant que bien de sorte qu'il peut sauver le travail de frai hors d'un processus à court terme pour faire un peu de travail qu'il pourrait le faire lui-même. C'est le cas pour bash et printf, par exemple:Noter que dans l'exemple ci-dessus, printf est à la fois une commande interne du shell (mis en œuvre dans le cadre de bash), ainsi que d'une commande externe (situé dans /usr/bin/printf). Remarque qu'ils se comportent différemment que si appelé sans arguments, le groupe builtin de la version et de la syntaxe de la commande d'impression des messages d'erreur différents. Notez également la
-v var
option (stocker les résultats de cette printf dans une variable d'environnement nomméevar
) ne peut être fait dans le cadre de la coquille - sous-processus comme /usr/bin/printf n'ont pas accès aux variables de la coquille qui les ont exécutés.Et cela nous amène à la 2ème partie de l'histoire: certaines commandes sont intégrés parce qu'ils ont besoin de l'être. Certaines commandes, comme
chmod
sont minces wrappers autour des appels système. Lorsque vous exécutez/bin/chmod 777 foo
la coque de la fourche, les execs /bin/chmod (passage du "777" et "foo") comme arguments, et les nouvelles chmodé processus s'exécute le code Cchmod("foo", 777);
et renvoie ensuite le contrôle de la coquille. Ce ne serait pas travailler pour lecd
de commande. Même sicd
ressemble le même cas quechmod
il a de se comporter différemment: si le shell donné naissance à un autre processus pour exécuter lechdir
appel système, il serait de changer le répertoire seulement pour que nouvellement généré processus, et non pas le shell. Puis, lorsque le processus est retourné, l'interpréteur de commandes devrait être laissé dans le même répertoire qu'il avait été dans le long - donccd
doit être mis en œuvre en tant que commande interne du shell.Une commande interne du Shell -- http://linux.about.com/library/cmd/blcmdl1_builtin.htm
pour eg. -
Pas une commande interne du shell, mais un binaire.
http://ss64.com/bash/ cela va vous aider.
et voici shell scripting guide
http://www.freeos.com/guides/lsst/