最近有朋友問我,為什麼sudo cd 和sudo ll登錄命令有如下提示:
sudo: ll: command not found sudo: cd: command not found
而運行其他命令,如sudo ls等即可正常運行。
簡單的來說,可以這樣理解,sudo只能執行系統自帶命令,而不能執行其他程序所帶的命令。如ll、cd等均是shell所帶的。
sudo 是一種程序,用於提升用戶的權限,在linux中輸入sodu就是調用這個程序提升權限,shell是一個命令解析器,sudo cd是錯誤的,因為cd是shell內置的,不是系統裡面的,sudo可以運行系統帶的命令,但無法用系統中一個軟件中的命令。
cd是shell的內部命令。所謂shell是一個交互式的應用程序。shell執行外部命令的 時候,是通過fork/exec叉一個子進程,然後執行這個程序。sudo的意思是,以別人的權限叉起一個進程,並運行程序。而cd是內部命令,也就是說,是直接由shell運行的,不叉子進程。你在當前進程裡當然不能提升進程的權限(其實也可以,不過得編程的時候寫到代碼裡,然後再編譯,而我們的 shell沒有這個功能,否則豈不是太危險了?)
另外,如果要對sudo命令進行配置,可以在root用戶下使用visudo進行配置。