在vi中获取文件的root权限?
通常在编辑配置文件时,我会用vi打开一个文件,然后在保存时意识到我没有输入
sudo vi filename
有什么办法赋予vi sudo特权来保存文件?我似乎回想起不久前在查找有关vi的一些东西时看到了一些有关此的信息,但是现在找不到了。
解决方案:
一个快速的Google似乎提供了以下建议:
- 如果它是只读的,请不要尝试编辑。
- 我们也许可以更改文件的权限。 (是否让我们保存取决于实验。)
- 如果仍要进行编辑,请保存到临时文件,然后将其移动。
http://ubuntuforums.org/showthread.php?t=782136
Ryan的建议通常很好,但是,如果执行第3步,请不要移动临时文件。它将拥有错误的所有权和权限。而是使用sudoedit正确的文件并读入临时文件的内容(使用:r或者类似内容)。
如果执行第2步,则使用:w!
强制写入文件。
通常,我们不能更改vi进程的有效用户ID,但是可以执行以下操作:
:w !sudo tee myfile
我们可以考虑的一种快速破解方法是,对正在编辑的文件执行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)
当然,我不建议在担心安全性的系统中使用这种方法,因为有几秒钟的时间,任何人都可以在不知不觉中读取/更改文件。
当我们对文件进行插入模式时,我们需要使用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
可能有一种不太绕行的方式来做到这一点,但它确实有效。
%被当前文件名替换,因此我们可以使用:
:w !sudo tee %
(vim
将检测到文件已更改,并询问是否要重新加载该文件。)
作为快捷方式,我们可以定义自己的命令。将以下内容放入.vimrc
中:
command W w !sudo tee % >/dev/null
通过上面的命令,我们可以输入:W <Enter>
保存文件。自从我写这篇文章以来,我发现了一种更好的方法(我认为):
cmap w!! w !sudo tee >/dev/null %
这样,我们可以键入:w !!
,它将被扩展到完整的命令行,将光标留在末尾,因此我们可以根据需要用自己的文件名替换%%。
如果我们使用的是Vim,则有一个名为sudo.vim的脚本。如果发现我们已经打开了需要root用户访问权限才能读取的文件,请键入
:e sudo:%
Vim用当前文件的名称替换%,然后sudo:
指示sudo.vim脚本接管读写。
我的〜/ .bashrc中有这个:
alias svim='sudo vim'
现在,每当我需要编辑配置文件时,都可以使用svim打开它。
这是回答此问题以来出现的另一个插件,名为SudoEdit的插件提供SudoRead和SudoWrite函数,默认情况下,它将首先尝试使用sudo,如果失败则尝试使用su:http://www.vim.org/scripts/ script.php?script_id = 2709
对于GVim使用gksudo而不是sudo,即
cmap w!! w !gksudo tee >/dev/null %