在 Linux 上获取 vi 内文件的 root 权限
在很多情况下,我们认为我们使用root用户打开了一个文件并对其进行了更改,但是当我们实际尝试保存更改时,我们意识到该文件是由普通用户打开的,或者是由一个没有打开文件的用户打开的具有编辑文件的特定权限。在这种情况下,我们通常只有一种选择,那就是使用如下所示的命令关闭文件
q!
然后,使用下面显示的命令再次打开文件
sudo su vi file.txt
使用下面显示的命令进行更改并保存文件
wq!
虽然这很简单,但如果我们真的不想使用sudosu命令并且仍然能够编辑和保存不允许除root之外的其他用户访问的文件怎么办。
为了做到这一点,我们可以使用下面提到的命令
:w !sudo tee filename
上面的命令先理解起来有点复杂,我给你分解一下。的:(冒号)符号是什么开始的命令,然后我们写W¯¯它之后,它代表写权限,这通常接受文件路径要写入。
然后,我们有!sudo,其中sudo关键字很明显,它允许您以超级用户身份运行命令。这!符号被称为否定符号,它只是翻转值。然后在!sudo之后,我们有tee符号,它将stdin通过管道传输到给定文件,过程如下,:w将写入stdin,然后超级用户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
现在,我们将能够对文件进行任何我们想要的更改,而无需切换到超级用户。