在 Linux 上使用 vi 命令获取文件的 root 权限
在很多情况下,我们以为自己已经以 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
现在,我们无需切换到超级用户就可以对文件进行任何更改。
相关文章
有用资源
linux 参考教程 - 该教程包含有关 linux 的更多信息:https://www.cainiaomax.com/linux/

