En Arch Linux, si lo hago ls -l
en /sbin
, puedo ver que reboot
, shutdown
y poweroff
son todos los enlaces simbólicos a /usr/bin/systemctl
. Pero la emisión reboot
, shutdown
y systemctl
los comandos, obviamente, no todos tienen el mismo comportamiento.
¿ ls -l
No me muestra información completa sobre los enlaces simbólicos? ¿Cómo puedo, por ejemplo, saber cuál es el enlace simbólico real reboot
?
Respuestas:
Muchos programas hacen uso de esta técnica donde hay un solo ejecutable que cambia su comportamiento en función de cómo se ejecutó.
Normalmente hay una estructura dentro del programa llamada declaración de caso / interruptor que determina el nombre con el que se llamó al ejecutable y luego llamará a la funcionalidad apropiada para ese nombre ejecutable. Ese nombre suele ser el primer argumento que recibe el programa. Por ejemplo,
C
cuando escribes:argv[0]
contiene el nombre del ejecutable llamado. Al menos, este es el comportamiento estándar para todos los shells, y todos los ejecutables que usan argumentos deben tenerlo en cuenta.Ejemplo en Perl
Aquí hay un ejemplo artificial que preparé en Perl que muestra la técnica también.
Aquí está el guión real, llámelo
mycmd.pl
:Aquí está la configuración del sistema de archivos:
Ahora cuando ejecuto mis comandos:
fuente
ssh-argv0
main
se invierten.argc
viene antesargv
.