
答案1
在 Ubuntu 19.10 及更高版本中,警告那篇文章(在這個答案中)不再適用。看WinEunuuchs2Unix 的回答也這個問題。
圖形應用程式通常將設定和其他使用者特定資料儲存在寫入使用者內部的設定檔中。主資料夾。應用程式用來確定應使用什麼作為使用者主資料夾的主要機制是HOME
環境變數。 (您可以使用 自行檢查echo $HOME
)。
假設你正在跑步gedit
(圖形文字編輯器)為root
。如果你跑步sudo gedit
,HOME
將繼續指向你的主目錄,即使程式正在執行作為root
。因此,gedit
將編寫配置文件作為root
進入你的主目錄。這有時會導致在設定檔中是擁有的經過root
因此你無法訪問(當您稍後以您自己的身份而不是以 的身份運行該程式時root
)。這主要發生在應用程式必須建立新的設定檔時。預設情況下,新建立的檔案由建立它們的使用者擁有(在本例中是root
,而不是您)。
sudo
這就是為什麼您應該使用圖形前端而不是直接運行圖形應用程式的主要原因sudo
。在 Ubuntu 及其大多數衍生產品(包括 Xubuntu 和 Lubuntu)中,標準圖形前端是gksu
/gksudo
。在庫本圖是這樣的kdesudo
。 (這取決於桌面環境正在使用。
如果你想若要sudo
直接使用執行圖形應用程式(例如)gedit
,您可以執行:
sudo -H gedit
此-H
標誌設定sudo
為HOME
指向root
的主資料夾(即/root
)。
這仍然不會自動處理所有權.Xauthority
sudo
將其複製到臨時資料夾(這是圖形前端為您處理的另一件事)。但在罕見的無法存取的情況下.Xauthority
,您會收到錯誤訊息,說明它是這樣,然後您可以透過刪除它來解決問題 ( sudo rm ~/.Xauthority
),因為它會自動重新產生。因此,保護.Xauthority
的所有權和權限不如保護設定檔的所有權和權限重要。
root
與-owned相比.Xauthority
,當設定檔被歸屬為 時root
,問題並不總是那麼明顯(因為圖形程式通常會運行,但不能很好地工作,並向控制台輸出任何有用的錯誤)。有時修復起來會比較麻煩,尤其是如果您希望主目錄中的一個或多個檔案歸您以外的其他人所有(因為那樣你就不能簡單地透過遞歸地chown
將所有檔案回傳給你自己來修復它)。
因此,sudo
(至少沒有-H
)不應該用於運行圖形應用程式除非您非常熟悉該應用程式的內部工作原理,並且確信它不會嘗試編寫任何設定檔。
答案2
答案3
Ubuntu 19.10 更新
作為烏班圖19.10,sudo some_command
現在打字和打字的效果是一樣的sudo -H some_command
。這意味著所觸及的任何設定檔的目錄將位於/root
目錄下,而不是/home/regular_userID
目錄(也稱為$HOME
)下。
對於 Ubuntu 19.10 及更高版本的用戶來說,這使得整個問答在很大程度上變得毫無意義。
要查看是否像您的發行版sudo
一樣工作,請嘗試以下簡短測試:sudo -H
$ sudo printenv | grep HOME
HOME=/home/rick
$ sudo -H printenv | grep HOME
HOME=/root
正如您所看到的,sudo
上面的執行情況與sudo -H
此不同,因此使用 plainsudo
可能會損害您的使用者設定檔。
gksu nautilus
、gksu gedit
或 的替代方法sudo -H gedit
是使用nautilus-admin
外掛程式。它允許您瀏覽文件和目錄鸚鵡螺然後以 root(管理員)身份打開它們。
安裝非常簡單:
sudo apt install nautilus-admin
現在,當您在 Nautilus 中時,您將有一個額外的選項以管理員身份進行編輯:
gedit
因為 root 不允許首選項
當您gedit
以 root 身分執行時,您無法使用您作為普通使用者設定的製表位首選項、將製表符轉換為空格、字體名稱、字體大小、換行等。
為了解決這個問題,我編寫了腳本sgedit
來繼承使用者首選項並將其應用到 root:如何將我的根 gedit 與使用者 gedit 的首選項同步?
- 呼叫使用
sgedit filename1 filename2 ...
- 取得使用者的製表位、字型、換行等 gedit 設定。
- 提升為
sudo -H
保留檔案所有權,同時取得 root 權限。 sudo
如果上次逾時則請求密碼。- 取得 sudo 的 gedit 設置
- 比較使用者和 sudo gedit 設定之間的差異
- 僅針對差異運行 gsettings set(將 174 個設定命令減少到十幾個或更少。下次運行時可能只進行一兩個更改,但通常不會進行任何更改。
- 作為後台任務調用
gedit
,以便立即重新出現終端提示。