いくつかのシンボリックリンクがプログラムの動作に影響を与えるのはなぜですか?

いくつかのシンボリックリンクがプログラムの動作に影響を与えるのはなぜですか?

しばらく私を悩ませてきた一つは次のとおりです。

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

しかし、実行sudo haltはもちろんいいえシステムを再起動します。なぜそんなことですか?

たとえば、このように動作する他の多くのプログラムがありますpdflatex

ベストアンサー1

各プログラムは、プログラムの実行に使用されたコマンドライン全体をチェックします(シェル拡張ワイルドカードと変数を除く)。

Cプログラムでは、コマンドラインはに保存されますargvパラメータベクトル
プログラム名はの最初の要素ですargvargv[0]つまり、

halt明らかに、およびの場合、rebootプログラムはに従って動作を変更しますargv[0]

ps -p <pid> -o cmdBashでは、プログラムを使用または実行するための完全なコマンドラインを表示できますcat /proc/<pid>/cmdline

同じ効果を持つハードリンクと呼ばれる別のタイプのリンクがあります。たとえば、私のシステムでは、とはsudo同じsudoeditファイルですが、2つの名前と動作が異なります。

ls -i次のコマンドを見つけるのに役立ちます。

$ 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

man lnハードリンクに慣れていない場合は、ハードリンクの詳細については参考資料をご覧ください。

おすすめ記事