在 Linux 上使用 vi 命令获取文件的 root 权限

linuxoperating systemopen source更新于 2026/1/11 22:37:17

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

q!

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

sudo su
vi file.txt

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

wq!

虽然这一切都很简单,但如果我们实际上不想使用 sudo su 命令,但仍然能够编辑和保存除 root 用户外不允许其他用户访问的文件,该怎么办呢?

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

:w !sudo tee filename

上面的命令首先有点难理解,让我来解释一下。:(冒号) 符号是命令的开头,紧接着是 w,代表 write 权限,通常接受要写入的文件路径。

然后,我们有 !sudo,其中 sudo 关键字很明显,它允许您以超级用户身份运行该命令。!符号称为否定符号,它只是将值翻转。然后在 !sudo 之后,我们有 tee 符号,它将标准输入通过管道传输到给定的文件,过程如下::w 将写入标准输入,然后超级用户 tee 将接收文件内容并写入文件,而不会创建新文件,而只是覆盖内容,并且文件的模式和属性也会保留。

示例

现在我们知道了该命令的实际作用,让我们在一个简单的文件上使用它,该文件只允许超级用户编辑。

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

/usr/local/go/src/runtime

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

:wq!

输出

然后我们将收到以下错误 −

"symtab.go" E212:无法打开文件进行写入

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

:w !sudo tee symtab.go

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


相关文章


有用资源