通常在编辑配置文件时,我会用vi打开一个,然后当我保存它时,我意识到我没有输入
sudo vi filename
有没有办法给vi sudo特权来保存文件?我好像记得之前在查vi的时候看到过这个,但是现在找不到了。
通常在编辑配置文件时,我会用vi打开一个,然后当我保存它时,我意识到我没有输入
sudo vi filename
有没有办法给vi sudo特权来保存文件?我好像记得之前在查vi的时候看到过这个,但是现在找不到了。
当前回答
一个快速谷歌似乎给出了这样的建议:
如果它是只读的,不要尝试编辑。 您可以更改文件的权限。(它是否能让你省钱取决于试验。) 如果你仍然编辑,保存到一个临时文件,然后移动它。
http://ubuntuforums.org/showthread.php?t=782136
其他回答
如果您正在使用Vim,有一个名为sudo.vim的脚本可用。如果您发现您打开了一个需要以root权限读取的文件,请键入:e sudo:%Vim将%替换为当前文件的名称,sudo:指示sudo。Vim脚本接管读写。
一般来说,你不能改变vi进程的有效用户id,但是你可以这样做:
:w !sudo tee myfile
当您进入需要sudo访问权限来编辑的文件的插入模式时,您会得到一条状态消息
-- INSERT -- W10: Warning: Changing a readonly file
如果我错过了,通常我会错过
:w ~/edited_blah.tmp
:q
. .然后. .
sudo "cat edited_blah.tmp > /etc/blah"
…或…
sudo mv edited_blah.tmp /etc/blah
也许有一种不那么迂回的方法,但它确实有效。
您可以考虑的一个快速hack是对正在编辑的文件执行chmod,用vim保存,然后chmod到文件的原始状态。
ls -l test.file (to see the permissions of the file)
chmod 777 test.file
[This is where you save in vim]
chmod xxx test.file (restore the permissions you found in the first step)
当然,我不建议在您担心安全性的系统中使用这种方法,因为在几秒钟内任何人都可以在您不知情的情况下读取/更改文件。
%被替换为当前文件名,因此你可以使用:
:w !sudo tee %
(vim将检测到文件已被更改,并询问您是否希望重新加载该文件。选择[L]而不是OK,说yes。)
作为快捷方式,您可以定义自己的命令。在你的.vimrc中放入以下文件:
command W w !sudo tee % >/dev/null
在上面你可以输入:W<输入>保存文件。自从我写了这篇文章,我找到了一个更好的方法来做到这一点:
cmap w!! w !sudo tee >/dev/null %
这样你就可以输入:w!!它将展开到完整的命令行,将光标留在末尾,因此如果您愿意,可以用您自己的文件名替换%。