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

時間 2021-05-06 18:34:19

1樓:醉臥沙場

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

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

2樓:switwitch

sudo是super user do的意思。意思就是說以管理員身份執行,當然引用的是管理員的變數,安裝到的是管理員的目錄下咯。。。

3樓:魯嚴波

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

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

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

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

預設env_reset是開啟的,sudo配置檔案(sudoers)中的env_check和env_keep選項可以設定保留哪些環境變數。(比如Fedora下,就不會保留HOME環境變數)

比如我一般會加上http_proxy:

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

預設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,得到的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的設定,都有可能對整個過程產生影響。

在此不一一贅述。

4樓:「已登出」

這是python和pip依賴管理的問題和sudo沒關係

另外有可能你自己的配置有alias python=python2之類的設定,而/usr/bin/python指向的是另乙個

你看npm和cargo從來沒有這種問題對吧……所以這是pip的問題。

5樓:

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

6樓:pansz

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

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

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

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

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

linux終端ls配色(淺色背景)推薦?

string consists of one or more of the following numeric codes Attribute codes 00 none 01 bold 04 underscore 05 blink 07 reverse 08 concealed Text colo...

linux下的終端與控制台還有偽終端,啞終端分別是什麼意思?求科普?

任皓 tty teletypewriter 電傳機,這邊按乙個按鍵,主機端接受到乙個資料,主機端傳出乙個資料,電傳機列印乙個字元。這個是一切終端 terminal 的祖先,輸入字元和列印字元是一體的,主機裡面執行的叫程式。我輸入乙個字元,主機上接受到乙個字元。那我想換行就麻煩了,因為這就是控制字元了...

Linux終端下如何進行游標定位?

張振 echo ne 033 6n read s d garbage read s d R foo echo n Current position echo foo DarryRing 我自己找到解決的辦法了,這個游標位置報告的vt100控制碼是 033 6n 他給出的方式是裝置終端報告,這個報告會...