在 Linux 的 vi 编辑器中获取文件的 root 权限


在许多情况下,我们认为自己已经以 root 用户身份打开了一个文件进行修改,但当我们实际尝试保存更改时,却发现该文件是以普通用户或没有特定编辑权限的用户打开的。在这种情况下,我们通常只有一个选择,那就是使用以下命令关闭文件:

q!

然后,使用以下命令再次打开文件:

sudo su
vi file.txt

进行更改并使用以下命令保存文件:

wq!

虽然这些都很简单,但如果我们实际上不想使用 **sudo su** 命令,而仍然能够编辑和保存只允许 root 用户编辑的文件,该怎么办呢?

为了做到这一点,我们可以使用以下命令:

:w !sudo tee filename

上面的命令一开始可能有点复杂,让我来解释一下。**: (冒号)** 符号是命令的开头,然后我们紧跟其后写 **w**,代表 **写入** 权限,它通常接受要写入的文件路径。

然后,我们有 **!sudo**,其中 sudo 关键字很明显,它允许您以超级用户身份运行命令。! 符号称为否定符号,它简单地反转值。然后,在 !sudo 后面是 **tee** 符号,它将标准输入 (stdin) 传输到指定的文件,过程是这样的:**:w** 将写入标准输入,然后超级用户 **tee** 将接收文件内容并写入文件,不会创建新文件,只需覆盖内容,并且文件模式和属性将被保留。

示例

既然我们知道了该命令的实际作用,让我们在一个只有超级用户才能编辑的简单文件中使用它。

假设我们在 ** /usr/local/go/src ** 中有一个文件,这是 Go 源代码的默认路径。文件名是 **symtab.go**,可以在此位置找到。

/usr/local/go/src/runtime

如果我们使用任何没有超级用户权限的用户打开此文件,然后尝试更改内容并使用以下命令保存文件:

:wq!

输出

然后我们将得到以下错误:

"symtab.go" E212: Can't open file for writing

这是因为我们没有权限更改文件,解决方法是使用上面提到的命令或更改用户,由于我们不想更改用户,最好在终端中使用以下命令:

:w !sudo tee symtab.go

现在,我们可以对文件进行任何我们想要的更改,而无需切换到超级用户。

更新于:2021年7月29日

620 次浏览

开启您的 职业生涯

通过完成课程获得认证

开始学习
广告