如何在 Gnu/Linux 的 GUI(和 CLI)中正確編輯系統文件(以 root 身份)?
目標:定義Bash別名以在從模擬器以root模式打開文件時啟動各種CLI和GUI文本編輯器。
gnome-terminal
進步
例如,以下別名似乎按預期工作:
alias sunano='sudo nano'
對於GUI,在這個例子中我使用了 Xed (維基百科文章):
alias suxed='sudo xed'
他們都以root身份打開文件。
問題
我有一個
gksudo
問題sublime-text
:alias susubl='gksudo /opt/sublime_text/sublime_text'
有時它會起作用。它只是在大多數時候什麼都不做。
如何調試這種行為不一致的東西?它不輸出任何東西。沒有錯誤資訊或類似資訊。
問題
gksudo
已在 Debian 中棄用,也不再包含在 Ubuntu 18.04 Bionic 中,所以讓我將這個問題重新表述為一個仍然有效的問題:如何在 Linux 的 GUI(和 CLI)中正確編輯系統文件(以 root 身份)?
在這種情況下,我正確地定義為安全,例如,在文件編輯期間發生斷電,另一個例子可能是失去 SSH 連接等。
除非絕對必要,否則不應以 root 身份執行編輯器;您應該使用
sudoedit
orsudo -e
或sudo --edit
,或您的桌面環境的管理功能。
sudoedit
一旦
sudoedit
設置得當,你可以做SUDO_EDITOR="/opt/sublime_text/sublime_text -w" sudoedit yourfile
sudoedit
將檢查您是否被允許這樣做,製作一個您可以在不手動更改所有權的情況下編輯的文件的副本,啟動您的編輯器,然後,當編輯器退出時,如果文件已更改,則將其複制回來。我建議使用函式而不是別名:
function susubl { export SUDO_EDITOR="/opt/sublime_text/sublime_text -w" sudoedit "$@" }
儘管正如Jeff Schaller指出的那樣,您可以使用
env
將其放在別名中並避免更改 shell 的環境:alias susubl='env SUDO_EDITOR="/opt/sublime_text/sublime_text -w" sudoedit'
請注意,如果或已經足夠好,則不需要使用
$SUDO_EDITOR
環境變數。$VISUAL``$EDITOR
該
-w
選項確保 Sublime Text 呼叫等到文件關閉後再返回並sudoedit
複製文件。桌面環境 (GNOME)
在 GNOME(可能還有其他桌面環境)中,您可以使用任何具有GIO/GVFS 功能的編輯器,以及該
admin://
方案;例如gedit admin:///etc/shells
這將提示使用 PolKit 進行適當的身份驗證,如果身份驗證成功,則打開文件進行編輯。