如何使用sudo在没有root权限的情况下在Vim/Vi中保存文件
时间:2020-01-09 10:44:07 来源:igfitidea点击:
我以普通用户身份登录,并开始在vim/vi文本编辑器中编辑httpd.conf或者lighttpd.conf或者named.conf。
但是,由于权限问题,我无法保存更改(所有配置文件均由root拥有)。
如何在不创建临时文件(/tmp/httpd.conf)的情况下保存文件,然后使用vim/vi本身将其作为root用户移动(mv /tmp/httpd.conf/etc/httpd)?
您可以使用sudo命令的组合(假设为您的帐户配置了sudo)来保存文件,而无需在/tmp中创建第三个文件。
这对于使用sudo命令写入特权文件很有用。
例如,使用此技巧可以保存在vim和vi中编辑的只读文件。
在没有root权限的情况下使用sudo在Vim中保存文件的语法
在此示例中,您将以普通用户身份编辑一个名为/etc/apache2/conf.d/mediawiki.conf的文件:
$ vi /etc/apache2/conf.d/mediawiki.conf
进行一些更改,然后按:w尝试保存,请执行:
Vim无法打开文件(权限问题)
要保存文件,只需执行以下命令:
:w !sudo tee %
使用sudo和tee保存文件
vim和shell命令的作用是:
:w
写一个文件(实际上是缓冲区)。!sudo
用sudo命令调用shell。- tee使用tee重定向了write(vim:w)命令的输出。
%``%
就是当前文件名。在此示例中,它是/etc/apache2/conf.d/mediawiki.conf。换句话说,tee命令以root身份运行,它接受标准输入(或者缓冲区)并将其写入由%表示的文件中。但是,这将提示您再次重新加载文件(按L加载vim本身的更改):
再次在Vim中保存和加载文件而无需登录为根
更新~/.vimrc文件
打开/编辑~/.vimrc文件,并添加以下代码:
" " Sample command W " command W :execute ':silent w !sudo tee % > /dev/null' | :edit!
保存并关闭文件。
打开vim/vi并尝试使用以下命令编辑特权文件:
$ vi /etc/hosts
现在,只需执行W
,即可使用自定义命令编写一个特权文件:
VIM写一个自定义W命令的特权文件
现在,sudo要求您使用密码对自己进行身份验证
关于sudo config的说明
确保将自己添加到sudo文件。
这是我的配置(运行sudo visudo
或者su -
和visudo
):
# User privilege specification root ALL=(ALL) ALL %admin ALL=(ALL) ALL
确保将自己添加到管理组:
# usermod -a -G admin Hyman # id Hyman
输出示例:
uid=501(veryv) gid=20(staff) groups=20(staff),80(admin),81(_appserveradm),98(_lpadmin),33(_appstore),100(_lpoperator),204(_developer)
尝试使用vim插件写入/编辑特权文件或者只读文件
- 用户Unix命令,包括sudo,chmod等,无需离开vim!
- 该插件使vim可以使用sudo或者su或者任何其他可用于更改用户身份验证的工具来读取文件。