Arch Linux, si je le fais ls -l
dans /sbin
, je peux voir que reboot
, shutdown
et poweroff
sont tous les liens symboliques à /usr/bin/systemctl
. Mais l' émission reboot
, shutdown
et des systemctl
commandes n'a évidemment pas tout le même comportement.
Ne ls -l
me montre pas toutes les informations concernant les liens symboliques? Comment puis-je, par exemple, savoir quel est le véritable lien symbolique reboot
?
Réponses:
De nombreux programmes utilisent cette technique lorsqu'il existe un seul exécutable qui modifie son comportement en fonction de la façon dont il a été exécuté.
Il existe généralement une structure à l'intérieur du programme appelée une instruction case / switch qui détermine le nom avec lequel l'exécutable a été appelé, puis appellera la fonctionnalité appropriée pour ce nom d'exécutable. Ce nom est généralement le premier argument reçu par le programme. Par exemple,
C
lorsque vous écrivez:argv[0]
contient le nom de l'exécutable appelé. Au moins, c'est le comportement standard pour tous les shells, et tous les exécutables qui utilisent des arguments doivent en être conscients.Exemple en Perl
Voici un exemple artificiel que j'ai mis en place en Perl qui montre également la technique.
Voici le script réel, appelez-le
mycmd.pl
:Voici la configuration du système de fichiers:
Maintenant, quand j'exécute mes commandes:
la source
ssh-argv0
main
sont inversés.argc
vient avantargv
.