1. 程式人生 > >sudo: cd: command not found

sudo: cd: command not found

中文 交互式 解決辦法 net num and shell 什麽 man

事件起因


今天在aws ubutun上忽然發現的一個問題,執行sudo cd 時出現

sudo: cd: command not found

技術分享

原因


shell

shell是一個命令解析器

所謂shell是一個交互式的應用程序。

shell執行外部命令的 時候,是通過fork/exec叉一個子進程,然後執行這個程序。

sudo


sudo 是一種程序,用於提升用戶的權限,在linux中輸入sudo就是調用sudo這個程序提升權限
sudo的意思是,以別人的權限叉起一個進程,並運行程序。

cd


cd是shell的內部命令。
也就是說,是直接由shell運行的,不叉子進程。
你在當前進程裏當然不能提升進程的權限(其實也可以,不過得編程的時候寫到代碼裏,然後再編譯,而我們的 shell沒有這個功能,否則豈不是太危險了?黑客.sh

解決辦法


但是有一些目錄我們普通用戶是沒有權限進入該目錄的,比如/root
技術分享

對目錄來說x 可執行權限就是用戶擁有進入該目錄、復制其中文件的權限

技術分享

那麽我們該怎麽辦呢,
一個有限的辦法就是為該目錄增加當前用戶的可執行權限,但是對我們來說這樣並不是很安全
那麽還有沒有解決辦法呢,當然有,Linux下沒有什麽問題是解決不了的,那就是獲取root權限或者文件夾所屬用戶的權限
使用su 命令即可獲取用戶的權限,但是root權限怎麽獲取呢,sudo已經不行了

技術分享

那就是sudo su 或者sudo -sH 默認缺省為獲取root 用戶
技術分享

sudo: cd: command not found