しばらく私を悩ませてきた一つは次のとおりです。
% which halt
/sbin/halt
% file /sbin/halt
/sbin/halt: symbolic link to `reboot'
しかし、実行sudo halt
はもちろんいいえシステムを再起動します。なぜそんなことですか?
たとえば、このように動作する他の多くのプログラムがありますpdflatex
。
ベストアンサー1
各プログラムは、プログラムの実行に使用されたコマンドライン全体をチェックします(シェル拡張ワイルドカードと変数を除く)。
Cプログラムでは、コマンドラインはに保存されますargv
。パラメータベクトル。
プログラム名はの最初の要素ですargv
。argv[0]
つまり、
halt
明らかに、およびの場合、reboot
プログラムはに従って動作を変更しますargv[0]
。
ps -p <pid> -o cmd
Bashでは、プログラムを使用または実行するための完全なコマンドラインを表示できます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
ハードリンクに慣れていない場合は、ハードリンクの詳細については参考資料をご覧ください。