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