使用 gedit 使用“sudo -H gedit”编辑系统文件时会不会有任何问题?

shi*_*ody 10 gedit command-line sudo

我对 Ubuntu 比较陌生,我注意到在这个站点的答案中,当人们建议编辑系统文件时,他们给出的命令总是sudo nanosudo vi. 因为我不喜欢使用基于终端的文本编辑器,所以我通常使用

sudo -H gedit
Run Code Online (Sandbox Code Playgroud)

相反,到目前为止它工作得很好。

使用gedit编辑系统文件会不会有任何问题,还是文本编辑器的选择完全取决于个人的喜好?编辑这些文件时有什么我应该记住的事情(比如编码)?

Eli*_*gan 10

只要您正确运行它,这就是您的喜好问题。

除了功能上的差异之外,您使用的文本编辑器确实几乎是您的偏好。即使您的文本编辑器是像Gedit这样的图形程序也是如此。这并不是说没有充分的理由nano并且vim经常被推荐。基于终端的文本编辑器vim(或至少是一个vi命令)并且nano即使在没有 GUI 的情况下也可用,甚至在大多数非常小的和损坏的系统上也是如此;他们背后有一些传统(如果你偏爱那种东西);它们可以在执行其他任务的同一终端中运行;它们自动集成到终端多路复用器用户的工作流程中;他们比任何人都更有可能获得特定的图形文本编辑器,甚至 Gedit,甚至在 Ubuntu(有多种风格)上。

那不是全部。如果您要编辑系统文件,一种方法是以 root 身份运行您的编辑器。这不是唯一的方法,也有一些反对它的论据(见下文),但它是一种常见的方法。如果采取这种方法,并使用图形程序为您的编辑器,那么你需要照顾以这样的方式运行它认为$HOME是root的主目录,而不是你自己的,这增加了麻烦和复杂性的另一层。但你已经在这样做了;你在跑步sudo -H gedit,这是合理的方式之一。尽管如此,这种复杂性是人们倾向于推荐非图形编辑器的另一个原因。

图形程序通常比非图形程序更复杂。以 root 身份运行更多的东西通常是不好的,因为有更多的方式可能会出错,包括可能的错误,包括意外。(不过,非图形文本编辑器vim也非常复杂,通常配置为运行大量外部程序来执行各种任务。)

除了以 root 身份运行编辑器之外,另一种通用方法是编辑一个即使在以您的(非 root)用户身份运行时编辑器也能够修改的文件,这样对文件的更改就会传播到您希望的 root 拥有的文件中改变。这听起来很抽象,因为具体情况差异很大。下面是两种主要的具体方法。

sudoedit

一种相当长期的方法sudoedit(记录在与 相同的手册页中sudo)。默认情况下,sudoedit使用默认的文本编辑器,它通常不是——也不应该是——一个图形程序。但你可以告诉它使用经过任何编辑SUDO_EDITORVISUALEDITOR 环境变量,它的顺序进行磋商。因此你可以运行:

VISUAL=gedit sudoedit filename
Run Code Online (Sandbox Code Playgroud)

替换filename为文件的相对或绝对路径。

这会生成您要编辑的文件的临时副本。该副本归您所有,而不是由 root(或任何原始所有者)拥有。它会打开文本编辑器,您可以编辑临时副本。当您关闭文本编辑器时,请sudoedit检查您是否确实进行了更改。如果这样做,它会将修改后的临时副本复制原始副本。

虽然sudoedit适用于图形编辑器,但它对于基于终端的编辑器也很有用。在这两种情况下,文本编辑器都会像您一样运行,因此它具有您的配置,并且您在其中执行的除对该文件所做的修改之外的其他操作由您执行,这提供一些防止某些类型错误的保护。

如果您愿意,您可以永久设置这些环境变量之一SUDO_EDITOR也许是最好的,因为它用于较少的其他事情。但是,如果您将其设置为gedit,请记住,当没有 GUI 可用时,像这样的命令将不起作用,这在虚拟控制台或通过SSH 中经常(尽管并非总是如此)。sudoedit filename

GVFS 管理后端

另一种较新的方法是通过其 GVFSadmin://路径而不是其传统的 Unix 样式路径打开文件。感谢 pomsky 教我这个。正如用于编辑文件的 GVFS 路径在其他方面并不适合编辑一样——例如,因为它们位于您通过 SSH 连接的远程计算机上——GVFS 支持admin://用于编辑文件的路径你不拥有。

这在概念上类似于sudoedit您自己运行编辑器,并且编辑器看到的文件是允许编辑的。尝试打开文件需要您进行身份验证;这不是规避通常的安全限制的神奇方法。

gedit admin:///path/to/filename
Run Code Online (Sandbox Code Playgroud)

在那里,/path/to/filename必须是文件的绝对路径,以/. 所以/后面有三个字符admin:

理论上受编辑器配置影响的编码和其他内容

您使用的编辑器是否为图形编辑器并不会真正影响文件的编码。某些编辑器,例如vim,甚至可以以图形方式(gvim命令)或非图形方式(vim命令)进行操作。您关于编码的问题的简单答案是您不必担心。这与事实非常接近,您实际上不必阅读本答案的其余部分。

在当前(和过去)的 Ubuntu 版本中,命令喜欢sudo nanosudo 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 filenamesudo vim filenameVISUAL=vim sudoedit filename

  • 如果您的编辑器配置被破坏并且使您无法轻松编辑文件,那么修复它可能会更加麻烦,因为它也适用于 root。这只是一个麻烦,而不是一个很难解决的问题。

  • sudo vim这样命令与(不明智的!)命令有一些相同的问题sudo gedit 如果你像vimroot一样运行一个编辑器但没有重置$HOME(就像sudo -Hsudo -i会做的那样),并且它为自己创建配置文件,这些配置文件将驻留在你的主目录中,但它们将由 root 拥有,并且你的配置可能会有些破坏当您以后以自己的身份运行编辑器时。

    嗯,这听起来很像那个问题!它不像图形应用程序那么重要的原因是编辑器通常仍会启动,错误消息通常更容易理解,您通常可以更容易地找出哪些特定文件受到影响,并且损坏通常仅限于那个节目。(图形程序在更多地方使用配置文件。)此外,与图形编辑器不同的是,那些只是随意使用文本编辑器而不刻意更改其配置的用户不太可能遇到此问题。

同样,您可以使用自己的用户帐户的编辑器配置,同时通过使用sudoedit或从桌面正常启动编辑器但通过admin://路径访问文件来避免权限问题。

最后,请注意,实际上计划在未来版本的 Ubuntu 中更改sudo何时-H或被-i传递的上述行为(就像几年前在大多数使用 的类 Unix 操作系统中一样sudo)。Ubuntu 19.10 中的行为已经发生了变化,这是撰写本文时的开发版本。

  • `sudo -H` 的另一个问题是 100 或 1000 次中有 1 次你会忘记 `-H` 并且文件的所有权***可能***从用户转移到 `$HOME` 某处的 root。 (2认同)

归档时间:

查看次数:

1415 次

最近记录:

6 年,1 月 前