天天看點

sudo cd為什麼不能夠執行以及解決辦法

問題描述

我想要cd到/etc/docker,但是它給我一個權限不夠的錯誤,然後,我想到使用sudo cd /etc/docker時,它告訴我sudo: cd:找不到指令。

于是,郁悶的我就去上網找了下原因。

問題分析

shell

shell是一個指令解析器

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

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

sudo

sudo 是一種程式,用于提升使用者的權限,在linux中輸入sudo就是調用sudo這個程式提升權限

sudo的意思是,以别人的權限叉起一個程序,并運作程式。

cd

cd是shell的内部指令。

也就是說,是直接由shell運作的,不叉子程序。

你在目前程序裡當然不能提升程序的權限(其實也可以,不過得程式設計的時候寫到代碼裡,然後再編譯,而我們的 shell沒有這個功能,否則豈不是太危險了?​​

​黑客.sh​

​cd​

​​不是一個應用程式而是Linux内建的指令,而​

​sudo​

​僅僅隻對應用程式起作用。

​sudo foo​

​隻意味着以root權限運作foo程式

是以,​

​sudo cd /etc/docker​

​​會報​

​sudo: cd:找不到指令。​

驗證

> type cd
cd is a shell builtin      
注意,關于cd是不是内建指令,OS X 10.8中cd不是内建指令(可以參考what-is-the-point-of-the-cd-external-command),具體其他的版本的OS X我就不清楚了,大部分的Linux系列(Ubuntu、CentOS和ArchLinux)中cd都是内建指令

解決方法

  • 使用​

    ​sudo -i​

    ​指令提升使用者權限
> sudo -i
> cd /etc/docker      
  • 使用​

    ​sudo -s​

    ​指令打開特殊shell
> sudo -s
> cd /etc/docker      

繼續閱讀