Warum beeinflussen einige symbolische Links das Programmverhalten?

7

Eine Sache, die mich seit einiger Zeit verwirrt, ist folgende:

% which halt
/sbin/halt
% file /sbin/halt
/sbin/halt: symbolic link to `reboot'

Beim Ausführen sudo haltwird das System jedoch natürlich nicht neu gestartet. Warum ist das so?

Es gibt zum Beispiel mehrere andere Programme, die auf diese Weise funktionieren pdflatex.

Christoph Wurm
quelle

Antworten:

13

Jedes Programm kann die vollständige Befehlszeile sehen, mit der es ausgeführt wurde (mit Ausnahme von Platzhaltern und Variablen, die die Shell erweitert).

In einem C-Programm wird die Befehlszeile gespeichert argv, die für Argumentvektor steht .
Der Name des Programms ist das erste Element von argv, dh argv[0].

Im Fall von haltund rebootändert das Programm eindeutig sein Verhalten basierend auf argv[0].

In Bash sehen Sie die vollständige Befehlszeile, mit der ein Programm mit ps -p <pid> -o cmdoder ausgeführt wird cat /proc/<pid>/cmdline.

Beachten Sie, dass es einen anderen Verbindungstyp gibt, der als fester Link bezeichnet wird und den gleichen Effekt hat. Auf meinem System zum Beispiel sudound sudoeditsind die gleiche Datei mit zwei verschiedenen Namen und unterschiedlichen Verhaltensweisen.

ls -i kann Ihnen helfen, diese Befehle zu finden, z.

$ ls -il | awk '$3 != 1 { print }'
total 156872
2491111 -rwsr-xr-x 2 root   root     127560 2011-01-20 05:03 sudo
2491111 -rwsr-xr-x 2 root   root     127560 2011-01-20 05:03 sudoedit

Sehen Sie man lnfür weitere Informationen über Hard - Links , wenn Sie nicht mit ihnen vertraut sind.

Mikel
quelle
Interessanterweise wusste ich nicht, dass sich Symlinks so verhalten.
Christoph Wurm
6
@legate, Symlinks nicht, Anwendungen können. Das beste Beispiel für ein Programm, das anhand seines Namens definiert, wie es ausgeführt wird, ist busybox. Symlinks sind nur die erste Möglichkeit, das 0. Argument für eine Anwendung zu definieren. Ein einfaches Umbenennen einer Datei würde ebenfalls ausreichen.
Xenoterracide
Ich konnte dieses nicht analysieren: Beachten Sie, dass es auch einen harten Link gibt, der den gleichen Effekt hat.
Tshepang
Ich habe diesen Satz neu geschrieben. Hoffentlich ist es jetzt klarer.
Mikel