Como o poweroff (ou parada, reinicialização etc) funciona quando linkado com sylink para systemctl?

0

Estou executando o Debian Stretch. Quando eu faço file /sbin/reboot (ou qualquer comando relacionado) ele diz que ele é linkado com symlink para /bin/systemctl sem qualquer tipo de parâmetro, até onde eu sei.

Como o systemctl sabe que quero reinicializar? Ele verifica argv[0] e faz um switch / case no código?

Ele também funciona quando eu o executo em outro lugar ( ln --symbolic /bin/systemctl ~/bin/reboot , por exemplo).

    
por Pacha 25.08.2017 / 06:17

1 resposta

1

Does it check argv[0] and does a switch/case in the code?

Estude o código e descubra você mesmo. Mas tenho certeza que a resposta geral é: sim, algo assim.

Este é um truque conhecido. Tome BusyBox como um exemplo. De Wikipedia :

Typical computer programs have a separate binary (executable) file for each application. BusyBox is a single binary, which is a conglomerate of many applications, each of which can be accessed by calling the single BusyBox binary with various names (supported by having a symbolic link or hard link for each different name) in a specific manner with appropriate arguments.

Bash é outro exemplo. De man bash :

If bash is invoked with the name sh, it tries to mimic the startup behavior of historical versions of sh as closely as possible, while conforming to the POSIX standard as well.

Verifique o /bin/sh no seu Debian Stretch. É um link simbólico para (provavelmente) ... dash . Este site explica:

Up to Debian Lenny, the default /bin/sh shell was bash. Starting with Debian Squeeze, the default shell will be dash.

    
por 25.08.2017 / 09:14