Lin*_*eak 4 linux editors sudoedit
系统:Linux Mint 18.1 64 位 Cinnamon。
目标:定义Bash别名以在从模拟器以root模式打开文件时启动各种CLI和GUI文本编辑器。gnome-terminal
例如,以下别名似乎按预期工作:
alias sunano='sudo nano'
Run Code Online (Sandbox Code Playgroud)
alias suxed='sudo xed'
Run Code Online (Sandbox Code Playgroud)
他们都以root身份打开文件。
我有一个问题gksudo与sublime-text:
alias susubl='gksudo /opt/sublime_text/sublime_text'
Run Code Online (Sandbox Code Playgroud)
有时它有效。大多数时候它什么都不做。
我如何调试这种行为不一致的东西?它不输出任何东西。没有错误信息或类似信息。
gksudo 已在 Debian 中被弃用,也不再包含在 Ubuntu 18.04 Bionic 中,所以让我将这个问题重新表述为一个仍然有效的问题:
如何在 Linux 的 GUI(和 CLI)中正确编辑系统文件(以 root 身份)?
在这种情况下,我正确地定义为安全,例如,在文件编辑期间发生断电,另一个示例可能是 SSH 连接丢失等。
Ste*_*itt 10
除非绝对必要,否则不应以 root 身份运行编辑器;您应该使用sudoedit,或者您的桌面环境的管理功能。
sudoedit一旦sudoedit设置适当,您就可以执行
SUDO_EDITOR="/opt/sublime_text/sublime_text -w" sudoedit yourfile
Run Code Online (Sandbox Code Playgroud)
sudoedit 将检查您是否被允许执行此操作,制作您无需手动更改 id 即可编辑的文件的副本,启动您的编辑器,然后,当编辑器退出时,如果文件已更改,则将其复制回去。
我建议使用函数而不是别名:
function susubl {
export SUDO_EDITOR="/opt/sublime_text/sublime_text -w"
sudoedit "$@"
}
Run Code Online (Sandbox Code Playgroud)
尽管正如Jeff Schaller指出的那样,您可以使用env将其放在别名中并避免更改 shell 的环境:
alias susubl='env SUDO_EDITOR="/opt/sublime_text/sublime_text -w" sudoedit'
Run Code Online (Sandbox Code Playgroud)
该-w选项确保 Sublime Text 调用等待文件关闭,然后返回并让sudoedit复制文件回来。
在 GNOME(也许还有其他桌面环境)中,您可以使用任何支持 GIO/GVFS 的编辑器,admin://前缀为; 例如
gedit admin:///path/to/your/file
Run Code Online (Sandbox Code Playgroud)
这将提示使用 PolKit 进行适当的身份验证,如果身份验证成功,然后打开文件进行编辑。