Answers:
除了功能上的差异外,您实际上首选使用哪种文本编辑器。即使您的文本编辑器是Gedit之类的图形程序,也是如此。这并不是说没有充分的理由nano
,vim
并且经常被推荐。基于终端的文本编辑器,例如vim
(或至少是vi
命令),nano
即使在没有GUI的情况下,甚至在非常小巧且损坏的系统上,都可用。他们背后有一些传统(如果您偏爱那种事情);它们可以在执行其他任务的同一终端中运行;它们自动集成到终端多路复用器用户的工作流程中;而且它们比其他任何一种都更有可能特定的图形文本编辑器,甚至是Gedit,甚至在Ubuntu(具有多种风格)上也是如此。
那不是全部。如果要编辑系统文件,一种方法是以root身份运行编辑器。这不是唯一的方法,并且对此有一些反对意见(请参阅下文),但这是一种常见的方法。如果采取这种方法,并使用图形程序为您的编辑器,那么你需要照顾到以这样的方式运行它认为$HOME
是root的主目录,而不是你自己的,这增加了麻烦和复杂性的另一层。但是您已经在这样做了;你在跑步sudo -H gedit
,这是合理的方式之一。尽管如此,这种复杂性还是人们倾向于推荐非图形编辑的另一个原因。
图形程序通常比非图形程序复杂。以root身份运行更多的东西通常是不好的,因为有更多的方式可能出错,包括由于可能的错误(包括偶然的错误)。(不过,非图形文本编辑器vim
也非常复杂,并且通常配置为运行许多外部程序来执行各种任务。)
除了以超级用户身份运行编辑器之外,另一种通用方法是编辑一个文件,该编辑器即使以您的(非超级用户)用户身份运行时也可以修改该文件,从而将对文件的更改传播到您希望的拥有根文件中改变。这听起来很抽象,因为具体情况差异很大。有两种主要的具体方法。
sudoedit
实现此目的的一种相当长久的方法是sudoedit
(在与相同的手册页中进行了记录sudo
)。默认情况下,sudoedit
使用默认的文本编辑器,该文本编辑器通常不是(也不应是)图形程序。但你可以告诉它使用经过任何编辑SUDO_EDITOR
,VISUAL
或EDITOR
环境变量,它的顺序进行磋商。因此,您可以运行:
VISUAL=gedit sudoedit filename
用filename
文件的相对或绝对路径替换。
这将创建您想要编辑的文件的临时副本。该副本归您所有,而不是根用户(或原始所有者是谁)拥有。它会打开文本编辑器,您可以编辑临时副本。当您关闭文本编辑器,sudoedit
检查是否真正的改变。如果这样做了,它会将修改后的临时副本复制回原始副本。
当sudoedit
使用图形编辑器时,它对于基于终端的编辑器也很有用。在这两种情况下,文本编辑器运行作为你,所以你有你的配置,和其他行动,你在它执行其他比到文件所做的修改是由你执行,这得到一点对某些类型的错误的保护。
如果愿意,可以永久设置这些环境变量之一。SUDO_EDITOR
也许是最好的,因为它用于更少的其他事情。但是,如果将其设置为gedit
,请记住,当没有可用的GUI时,类似的命令将不起作用,这在虚拟控制台或通过SSH时经常(尽管并非总是如此)。sudoedit filename
另一种更新的方法是通过GVFS admin://
路径而不是传统的Unix样式路径打开文件。感谢pomsky教给我这方面的知识。就像存在用于编辑文件的GVFS路径(在其他方面)不在方便的位置(例如,由于它们位于您通过SSH连接的远程计算机上)一样,GVFS支持admin://
用于编辑文件的路径你不拥有。
这在概念上类似于sudoedit
您自己运行编辑器,并且编辑器看到的文件是可以编辑的文件。尝试打开文件要求您进行身份验证;这不是规避常规安全限制的神奇方法。
gedit admin:///path/to/filename
那里/path/to/filename
必须有一个以开头的文件的绝对路径/
。因此,之后有三个/
字符admin:
。
文件的编码实际上不受所使用的编辑器是否为图形的影响。有些编辑器(例如vim
)甚至可以图形方式(gvim
命令)或非图形方式(vim
命令)进行操作。关于编码问题的简单答案是,您不必担心。这与事实非常接近,您实际上不必阅读其余答案。
在当前(以及以前)的Ubuntu版本中,命令诸如root sudo nano
并sudo vim
以root用户身份运行这些编辑器,但$HOME
仍设置为您的主目录。这意味着默认情况下,编辑器将使用您的配置,而不是root用户的配置。如果您在这些编辑器的配置中(或在他们运行的程序中执行某些工作,例如git
)有关编码或行尾的内容,将遵循该内容。使用,则不会发生。sudo -H editor
有些人对编辑使用裸露的sudo
(即,不带-i
或-H
),因为他们想要这样。但实际上,您应该三思而后行。您不仅可以使用像这样的方法更清晰地实现该目标,而且sudoedit
像sudo nano
和这样的命令还有其他缺点sudo vim
:
如果您的编辑器配置导致某些内容要运行,则该内容将以root用户身份运行。对于像vim
这样的复杂编辑器,这可能会导致大量非平凡的代码以root身份运行。如上所述,以root身份运行较少的代码通常是好的,这是反对以root身份运行图形编辑器的理由之一。
如果您的vim
配置中包含许多插件(例如,在您键入源代码时对源代码执行静态分析),而root则没有,那么使用root进行运行的东西要少于。(使用root以root身份运行的次数更少,但是您的插件仍然可以使用!)这与您的编辑器是否为图形化有所不同。sudo -H vim filename
sudo vim filename
VISUAL=vim sudoedit filename
如果您的编辑器配置已损坏,使您无法轻松编辑文件,则修复该问题可能会更加麻烦,因为它也适用于root用户。这仅是麻烦,而不是难以解决的问题。
像sudo vim
这样的命令与(不建议使用!)命令有一些相同的问题sudo gedit
。 如果你运行一个编辑器,如vim
为根,但没有复位$HOME
(为sudo -H
和sudo -i
会做),它为自己创建的配置文件,这些配置文件将驻留在你的主目录,但他们会由root拥有,你的配置可能会有所打破当您以后以自己的身份运行编辑器时。
好吧,这听起来很像那个问题!与图形应用程序相比,它没什么大不了的原因是,编辑器通常仍会启动,错误消息通常更易于理解,您通常可以很容易地找出受影响的特定文件,并且损坏通常限于那个程序。(图形程序在更多地方使用配置文件。)此外,与图形编辑器不同,仅随便使用文本编辑器而不故意更改其配置的用户就不太可能遇到此问题。
同样,您可以使用自己的用户帐户的编辑器配置,同时通过使用sudoedit
或从桌面正常启动编辑器但通过admin://
路径访问文件来避免权限问题。
最后,请注意,上述计划的sudo
when -H
或pass行为-i
实际上计划在将来的Ubuntu版本中进行更改(就像几年前在使用的大多数Unix操作系统中一样sudo
)。该行为在本文撰写时的开发版本Ubuntu 19.10中已经更改。
sudo -H
是100或1000中有1次您会忘记的,-H
并且文件的所有权可能会从用户转移到$HOME
某个地方的根目录。
回答您的问题:通常,使用GUI编辑器不会gedit
因为处理大文件而变得缓慢。
但是对于GUI程序,您可以使用pkexec
或gksu
代替sudo
。您可能需要对其进行配置pkexec
才能生效。
pkexec gedit
或对于较旧的Ubuntu版本(例如16.04),您可以使用:
gksu gedit
(尽管您可以尝试使用更好的GUI编辑器,例如geany
;-))
gksu
被几乎丢弃了。
pkexec
......
pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY
-H
部分很重要,sudo
没有它,不要用来启动GUI应用程序。