Un peu de culture Linuxienne

Un peu de culture ça fait pas de mal (enfin si au crâne).

Commandes internes et commandes externes au shell

Certaines commandes sont internes au shell. Comment les lister toutes ? help. Comment accéder à l’aide de ces commandes ? Avec la commande help, help cd, help history. Voici quelques commandes internes au shell : cd, exit, history, pwd, time…

Le reste des commandes sont des commandes externes au shell, le shell les trouve en cherchant dans les répertoires du PATH (qu’on affiche avec echo $PATH). En voici quelques-unes : chmod, find, grep, ls, man…

Comment savoir si une commande est interne ou externe ? Avec la commande type, type cd, type man, type history, type chmod. Dans le cas d’une commande externe la commande type donnera le chemin de la commande (par exemple « chmod est /bin/chmod »), dans le cas d’une commande interne type répondra « cd est une primitive du shell ». La commande type (qui est une commande interne) affiche des informations sur le type de commande.

hash

Je vous invite déjà à faire help hash (c’est une commande interne), pour ma part je n’avais jamais entendu parlé de cette commande…

Une commande interne au shell est immédiatement appelée puisqu’elle est contenue dans le shell. En revanche une commande externe demande une recherche dans le PATH avant de pouvoir être lancée, c’est extrêmement court mais c’est bien réel. Pour éviter ce délai la commande hash stocke le chemin de la commande externe la première fois qu’elle est appelée.

Ouvrez un terminal faites man puis hash, vous verrez alors le chemin vers man stocké par hash. Faites maintenant type man, vous aurez le message bizarre « man est haché (/usr/bin/man) ». Cela veut dire que la commande hash a stocké le chemin de man.

Pour « purger » hash (vider la table de hachage), il suffit de faire hash -r. Faites maintenant type man qui vous répondra « man est /usr/bin/man ».

Tapez maintenant hash -p /usr/bin/man whoami dans le terminal puis whoami qui vous répondra « Quelle page de manuel voulez-vous ? ». Vous venez en fait d’appeler man. Tapez hash -r puis whoami.

Tapez hash -p /usr/bin/man whoami dans le terminal puis which whoami, pour rappel which permet de localiser une commande et affichera « /usr/bin/whoami ». Tapez whoami qui vous répondra « Quelle page de manuel voulez-vous ? ». Affichez le chemin de whoami dans la table de hachage avec hash -t whoami. Une simple sortie du shell (exit) efface la table de hachage. Un lien intéressant sur hash.

which, pwd, time

Tapez which history puis which eval, ce sont des commandes internes au shell vous n’aurez donc aucune réponse (commandes contenues dans le shell).

Tapez type pwd, c’est une commande interne au shell. Tapez which pwd qui vous répondra « /bin/pwd »… mais c’est une commande interne ? Tapez man pwd et constatez « Remarque : votre interpréteur de commandes peut avoir sa propre version de pwd, qui remplace en général la version décrite ici ».

Tapez type time qui vous répondra « time est un mot-clé du shell ». Tapez which time qui vous répondra « /usr/bin/time »… mais c’est une commande interne ? Tapez time, vous verrez une suite de chiffres. Tapez /usr/bin/time, vous aurez une explication de l’usage de la commande /usr/bin/time. Ce sont des commandes différentes…

pwd -P et cd -P

Je vous invite à faire help cd ainsi que help pwd et vous concentrer sur l’option -P. J’estime que c’est peu ou pas compréhensible, on va donner un exemple, c’est plus parlant.

On crée un répertoire mkdir rep, on crée un lien symbolique de ce répertoire ln -s rep repln, on liste le contenu dans le dossier courant ls -l on a donc rep et repln. On se déplace dans rep cd rep, on utilise la commande pwd pour afficher le nom du répertoire de travail actuel pwd, on remonte d’un niveau cd .., on se déplace dans repln cd repln, on utilise la commande pwd pour afficher le nom du répertoire de travail actuel pwd.

Maintenant on utilise la commande pwd -P… la commande vous affiche dans quel répertoire « physique » vous vous trouvez. On remonte d’un niveau cd .. puis on utilise la commande cd -P repln, vous arrivez dans le dossier rep.

Remarque : Je vous invite à faire man pwd, c’est le man de /bin/pwd (et pas le pwd commande interne au shell donc) et constater que « Si aucune option n’est indiquée, -P est assumé ». La commande pwd (interne au shell) ne fonctionne pas de la même façon que la commande /bin/pwd. Pour vous en convaincre placez-vous dans le dossier repln puis faites /bin/pwd puis pwd.

apt-rpm

La dernière version de apt-rpm est sortie le 12.01.2008. D’après Wikipédia apt-rpm est une version de APT modifiée afin de fonctionner avec RPM Package Manager… à connaître pour la culture.

Les commentaires sont fermés.