博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[Vim]以sudo权限来保存vim打开的readonly文件
阅读量:6445 次
发布时间:2019-06-23

本文共 1191 字,大约阅读时间需要 3 分钟。

  hot3.png

本文要说的命令如下:

:w ! sudo tee % > /dev/null
  •  

在做 linux 配置的時候,会改到只讀的文件,比如 /etc/profile

$ ls -al /etc/profile 

-rw-r–r– 1 root root 1139 Mar 14 17:30 /etc/profile

用 vim 打開該只文件 /etc/profile 修改后,保存會出錯:

:w 

E45: ‘readonly’ option is set (add ! to override)

按提示在命令结尾加一个叹号,然后再次执行,还是出错:

:w! 

“/etc/profile” E212: Can’t open file for writing

用以下命令可以解决。此时,Vim会有两次交互, 

一,输入密码:

:w ! sudo tee % > /dev/null 

[sudo] password for user:

二,警告文件已被修改了,并显示出一个选项菜单。 

这里按 L键重新将该文件载入缓冲区。

Press ENTER or type command to continue 

W12: Warning: File “/etc/profile” has changed and the buffer was changed in Vim as well 
See “:help W12” for more info. 
[O]K, (L)oad File:

该条命令如何工作: 

查阅vim 的文档(输入:help :w),会提到 :write !{cmd}。

:[range]w[rite] [++opt] !{cmd} 

Execute {cmd} with [range] lines as standard input 
(note the space in front of the ‘!’). {cmd} is 
executed like with “:!{cmd}”, any ‘!’ is replaced with 
the previous command :!.

该命令会把缓冲区的内容作为标准输入传给指定的{cmd}, {cmd} 可以是任何外部的命令或程序。這裡調用了外部命令tee以sudo 权限运行保存。命令中符号 % 是vim 当中一个只读寄存器的名字,总保存着当前编辑文件的文件路径,这里就会展开为当前文件的完整路径/etc/profile. 然后缓冲区的内容将当做标准输入,覆盖该编辑文件的内容。vim 检测到该文件被一个外部程序修改,就会跳出提示选择。然而这里的文件和缓冲区的内容是一致的。

这条命令怪模怪样,却经常用到。记在这里,加深理解,也有助于记住此命令。

转载于:https://my.oschina.net/zzyo/blog/676085

你可能感兴趣的文章
docker建立私有仓库
查看>>
python之匿名函数lambda
查看>>
默认值设置
查看>>
SourceTree超前一个版本,落后N个版本
查看>>
2.3-docker网络-如何让外部网络访问容器资源
查看>>
Innodb优化之修改页大小
查看>>
误设置所有程序都默认成一种方式打开
查看>>
ubuntu ctrl+c ctrl+z ctrl+d
查看>>
SpringMVC---Method
查看>>
css特效实现html表格显示部分内容,当鼠标移上去显示全部。
查看>>
oracle-rownum的理解
查看>>
我的友情链接
查看>>
使用cin.get()而不是system("pause")来避免c++程序一闪而过
查看>>
简单的交换两个变量的数值
查看>>
Linux服务器上配置2个Tomcat或者多个Tomcat
查看>>
学习计划书
查看>>
CentOS7安装过程中,磁盘大于2T的报错处理
查看>>
单例模式2014-12
查看>>
【算法学习笔记】54.约瑟夫问题 模拟、逆推动规 SJTU OJ 1038 二哥的约瑟夫
查看>>
python迭代器和生成器(3元运算,列表生成式,生成器表达式,生成器函数)
查看>>