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