Linux 終端加 sudo 與否有什麼區別?pansz2019-03-27 17:24:36

這個與具體發行版有關係。

不同發行版配置的sudo預設配置不同,結果就是sudo環境中的環境變數不同。

有的sudo,使用當前使用者的環境,僅僅只更改PATH等極少數的環境,同時具有管理員許可權,尤其是HOME仍然指向當前使用者的HOME而不是root使用者的HOME。

有的sudo,是直接把當前環境改為root的環境,當前使用者名稱以及很多相關的環境變數都改變了,HOME變成了root的HOME,所以會安裝到完全不同的路徑。

兩種sudo各有各的用途,我個人是傾向於保持環境的做法的。當然如果你不希望完全依賴發行版來決定其行為,那麼就自己改一下sudo的配置檔案,以確認這個行為是你想要的那種樣子。

Linux 終端加 sudo 與否有什麼區別?匿名使用者2019-03-27 17:38:43

這時候一般我都是加一個 ——user 而不是加sudo,除非不起作用那我再用sudo

Linux 終端加 sudo 與否有什麼區別?知乎使用者2019-03-27 18:48:50

有些Linux下sudo之後Home目錄會定位到root下面,所以用pip裝東西的時候儘量別用sudo,而是用——user引數

Linux 終端加 sudo 與否有什麼區別?RobertLu2019-05-04 20:11:54

這個問題和sudo沒什麼關係,倒是和python有很大的關係。

關於sudo

首先,sudo確實可以提升許可權,讓你以不同使用者的身份執行一個命令。

但是sudo之後環境變數的變化,就比較複雜了:

由於環境變數確實能影響程式的行為,所以需要處理環境變數

預設

env_reset

是開啟的,sudo配置檔案(sudoers)中的

env_check

env_keep

選項可以設定保留哪些環境變數。(比如Fedora下,就不會保留HOME環境變數)

比如我一般會加上http_proxy:

Defaults env_keep += “http_proxy https_proxy”

所以,有答主提到的sudo -H pip install,其實這個-H選項就是多傳遞了HOME環境變數。

關於PIP

預設pip install的時候,會安裝到全域性的包路徑,比如 /usr/local/lib/python2。7/dist-packages

所以如果直接用非root使用者執行pip install的話,會報錯沒有許可權。不知道題主是怎麼裝的。

如果用sudo安裝,那就安裝到 /usr/local/lib/python2。7/dist-packages 目錄下。

如果是pip ——user install的話,那麼就會安裝到

~/。local/lib/python2。7/site-packages/

目錄。

關於Python包載入

一般來說,用普通使用者直接執行python,得到的sys。path如下:

[‘’,

‘/usr/local/lib/python2。7/dist-packages‘,

’/path/to/home/。local/lib/python2。7/site-packages/‘,

’/usr/local/lib/python2。7/site-packages‘]

而用sudo執行的話,得到的sys。path如下:

[’‘,

’/usr/local/lib/python2。7/dist-packages‘,

‘/root/。local/lib/python2。7/site-packages/’,

‘/usr/local/lib/python2。7/site-packages’]

所以,我覺得題主的問題簡單回答是:

你把包裝到了~/.local/lib/python2.7/site-packages/目錄,sudo載入的時候,去/root/.local/lib/python2.7/site-packages/ 載入,當然載入不到了。

另外,題主給的資訊實在是太不全了,我只能這麼猜了。如果要深究的話,sudoer檔案的配置、HOME環境變數的傳遞、pip的

——root

——prefix

等選項,Python的PYTHONPATH環境變數的設定、sys。path_hooks的設定,都有可能對整個過程產生影響。在此不一一贅述。

參考資料:

pip install - pip 19。1 documentation

Sudoers Manual

sys - System-specific parameters and functions - Python 3。7。3 documentation

Linux 終端加 sudo 與否有什麼區別?醉臥沙場2019-05-05 22:23:10

因為sudo是一個帶有s位屬主是root的程式,執行它會使程序的euid變成0,也就是程序會以root身份來執行,而不是以你當前登入的那個使用者來執行。如下圖:

Linux 終端加 sudo 與否有什麼區別?

在不使用sudo的情況下程序的id是當前使用者,如果使用sudo執行,程序的id變為root使用者。也就是說當前程序以root身份執行sudo後面的程式。當然,這和你登入root後以root身份執行程式是有一些環境上的區別的,但是程序id變為root也會影響很多程式的執行效果。