通常在编辑配置文件时,我会用vi打开一个,然后当我保存它时,我意识到我没有输入

sudo vi filename

有没有办法给vi sudo特权来保存文件?我好像记得之前在查vi的时候看到过这个,但是现在找不到了。


当前回答

当您进入需要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)

当然,我不建议在您担心安全性的系统中使用这种方法,因为在几秒钟内任何人都可以在您不知情的情况下读取/更改文件。

一般来说,你不能改变vi进程的有效用户id,但是你可以这样做:

:w !sudo tee myfile

如果您正在使用Vim,有一个名为sudo.vim的脚本可用。如果您发现您打开了一个需要以root权限读取的文件,请键入:e sudo:%Vim将%替换为当前文件的名称,sudo:指示sudo。Vim脚本接管读写。

Ryan的建议通常是好的,但是,如果遵循步骤3,不要移动临时文件;它将拥有错误的所有权和权限。相反,sudoedit正确的文件并读入临时文件的内容(使用:r或类似的方法)。

如果执行步骤2,请使用:w!强制写入文件。

当您进入需要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

也许有一种不那么迂回的方法,但它确实有效。