Symlink

為什麼某些符號連結會影響程序行為?

  • February 5, 2011

讓我困惑一段時間的一件事是:

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

但是,執行sudo halt當然不會重新啟動系統。這是為什麼?

還有其他幾個程序以這種方式工作,例如pdflatex.

每個程序都可以看到用於執行它的完整命令行(shell 擴展的萬用字元和變數除外)。

在 C 程序中,命令行儲存在 中argv,它是參數向量的縮寫。

程序的名稱是 的第一個元素argv,即argv[0]

顯然,在 and 的情況下haltreboot程序正在基於 改變其行為argv[0]

在 bash 中,您可以看到用於使用ps -p <pid> -o cmd或執行程序的完整命令行cat /proc/<pid>/cmdline

請注意,還有另一種稱為硬連結的連結具有相同的效果。例如,在我的系統上,sudo並且sudoedit是具有兩個不同名稱和不同行為的同一個文件。

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如果您不熟悉硬連結,請參閱有關硬連結的更多詳細資訊。

引用自:https://unix.stackexchange.com/questions/6787