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.

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.


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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.