使用vim保存没有编辑权限的文件

使用vim编辑文件非常方便,vim也是修改系统配置最常用的工具。但有时我们会顾着方便而忘了自己有没有权限编辑文件。 往往会在写完文件内容保存时才发现自己没有权限。怎么办?     将文件使用:w <newname>的方式另存为新文件,再用新文件替换就文件的虽然可行(还需要注意修改文件操作权限),但还是麻烦了点。下面将使用一条命令保存没有权限的文件。

先上命令:

:w !sudo tee % > /dev/null

这里“:”表示在vim的命令行模式下。注意 w 和!之间隔着一个空格。

下面首先介绍:w  !<cmd>命令

:w !<cmd> 用于将当前缓冲区内容作为标准输入送给cmd命令。  比如 :w !sh  就是将缓冲区的每一行视为shell命令然后执行。为了便于理解,这里再介绍一个r命令。: r !<cmd>用于将<cmd>命令的执行结果读入到当前缓冲区。如:.r!date就是将当前时间写入到当前行(.)。

接下来是tee命令

博主初学unix时,感觉ls、cp等命令很容易发现就是对应单词的缩写。但tee命令很难理解,也很少用得到。 tee是这样工作的,将前一个命名的标准输出(即输出到屏幕)作为标准输入,然后再输出到标准输出,同时保存为对应文件。将这个流程画出来,刚好就是字母T,这应该就是RMS等人将该命令命名为tee的原因。

举个例子:

ls |tee out.txt

ls 将输出当前目录列表,这个输出被管道送入tee命令,tee将该输入内容直接输出的同时,备份到out.txt文件。

最后一个是sudo,这个用过*nix的都应该知道,就是以superviser执行命令。

预备知识就这么多,接下来我们看看本文开头的那条命名是如何工作的。

首先w !sudo tee 这一部分将缓冲区内容送给tee命令。sudo 确保tee命令是以supervisor来执行的,这样就能保证有写入权限。

现在tee 已经获得了我们的文件内容,接下来就要将内容另存为其他文件了。这里我们将文件保存为它自己。 输入%以代表文件路径名(%是vim中保存当前文件路径名的专用寄存器,在命令行下会自动替换为完整路径)。 到了这里我们实际就能借助tee命令保存文件内容了,但tee命令还有标准输出,为了避免重复显示,我们将其丢到黑洞,即/dev/null。

看完命令,我们实际执行以看效果。

执行vi /etc/hostname 。编辑之后执行:w!会弹出错误警告。这里我们使用开头的命令重新保存。 执行完命令后,vim会弹出内容已经改变的确认提示。注意这时,tee已经帮我们把文件内容写入原文件件了。 我们按O确认。然后像往常一样退出。这次我们在编辑文件时忘记了sudo,但确实成功修改了文件。 最后提醒一下,如果你不是真的想修改hostname,作完这个练习就把文件改回去吧。

时间: 2024-11-09 06:07:53

使用vim保存没有编辑权限的文件的相关文章

以普通用户启动的Vim如何保存需要root权限的文件

在Linux上工作的朋友很可能遇到过这样一种情况,当你用Vim编辑完一个文件时,运行:wq保存退出,突然蹦出一个错误: E45: 'readonly' option is set (add ! to override) 这表明文件是只读的,按照提示,加上!强制保存::w!,结果又一个错误出现: "readonly-file-name" E212: Can't open file for writing 文件明明存在,为何提示无法打开?这错误又代表什么呢?查看文档:help E212:

vim保存只读文件时获得sudo权限

有时使用vim时忘记输入sudo,导致编辑了一大堆文字,最后保存时发现是只读文件,无法保存,每次保存都会提示read only.这时可以使用如下命令代替原有的 :wq 命令 :w !sudo tee % 命令:w !{cmd},让 vim 执行一个外部命令{cmd},然后把当前缓冲区的内容从 stdin 传入. tee 是一个把 stdin 保存到文件的小工具. %是vim当中一个只读寄存器的名字,总保存着当前编辑文件的文件路径. 所以执行这个命令,就相当于从vim外部修改了当前编辑的文件. 参

在vim保存时获得sudo权限

在维护线上服务的时候,经常要编辑一些不属于操作用户的文件,就是只有r权限的那种,每次保存都会提示read only.只能先记下来改了什么,然后再退出,然后 sudo vim 再做保存. 下面的命令可以不退出vim进程,直接用vim命令获取sudo权限,然后直接保存文件. 1 :w ! sudo tee % 命令:w !{cmd},让 vim 执行一个外部命令{cmd},然后把当前缓冲区的内容从 stdin 传入. tee 是一个把 stdin 保存到文件的小工具. 而 %,是vim当中一个只读寄

文件编辑、文件权限以及文件搜索 04

本文将阐述linux当中的文件编辑.权限查看以及修改.文件查找以及内容搜索等命令. 1.操作环境 vmware 14.1 centos7 64 putty或者xshell 2.前提约束 已安装vmware vmware中已安装centos[注意,也可以直接就是一台linux机子,使用vmware是一个选项而已] 在本机能访问到centos[注意,本文中所涉及的linux服务器的ip是 192.168.100.192,请读者根据实际设置] 熟练使用putty 3.操作 3.1 vi.vim #新建

vim 编辑多个文件

从一个文件转到另一个文件 在不同文件之间复制粘贴 编辑另一个文件 :edit foo.txt 关闭当前文件,打开指定文件,当前文件未保存会出现错误信息 :e! foo.txt 缩写,强制打开指定文件 错误有对应的 ID 号, :help E37 查看错误帮助 同时打开多个文件 vi a.ts main.lisp :files 查看打开所有的文件 :wn 保存在进入下一个文件 :wN 保存在进入上一个文件 :2n 向后移动2个文件 :args 当前处于哪个文件 a.ts [main.lisp] :

vim 以16进制进行文件编辑

用 vim中二进制文件的编辑是先通过外部程序xxd来把文件dump成其二进制的文本形式,然后就可以按通常的编辑方式对文件进行编辑,编辑完成后再用xxd 转化为原来的形式即可. 可分如下几步进行: (1) 首先以二进制方式编辑这个文件: vim -b datafile (2) 现在用 xxd 把这个文件转换成十六进制: :%!xxd 文本看起来像这样: 0000000: 1f8b 0808 39d7 173b 0203 7474 002b 4e49 ....9..;..tt.+NI 0000010

标准I/O与管道;用户、组和权限;文件处理工具及正则表达式总结

四.标准I/O与管道标准输入和输出程序:指令+数据读入数据:Input输出数据:Output?打开的文件都有一个fd: file descriptor (文件描述符)?Linux给程序提供三种I/O设备?标准输入(STDIN)-0 默认接受来自键盘的输入?标准输出(STDOUT)-1 默认输出到终端窗口?标准错误(STDERR)-2 默认输出到终端窗口?I/O重定向:改变默认位置把输出和错误重新定向到文件?STDOUT和STDERR可以被重定向到文件命令 操作符号 文件名支持的操作符号包括: 把

linux下非root用户如何修改root权限的文件

在linux下会出现把一些配置文件参数配错.root密码忘记等导致系统无法启动或进入root的窘迫境地,本文以redhat  enterprise linux server 6.4为例介绍root身份修改root权限配置文件的参数后,root无法登录,然后通过linux的rescue模式改回配置文件,巧妙以非root身份修改了root权限的文件的解决方案. 首先,插入linux安装盘重启系统,等到引导进入安装会话,上下移动方向键,选rescue installed system: 第二,进入修复

2.2 Vim文档编辑

2.2 Vim文档编辑 2.2.1 Vim编辑模式 Vim具有多种工作模式,常用的工作模式有:普通模式.插入模式.命令模式.普通模式可以实现基本的光标移动与大量的快捷键操作,插入模式可实现文本的基本编辑功能,命令模式通过输入特定的指令实现特定的功能,如保存与退出等. Vim编辑器会默认进入普通模式,插入模式可以通过以下按键进入(表2-1). 表2-1 按键 功能描述 a 后续输入的内容将插入至当前光标的后面 A 后续输入的内容将插入至当前段落的段尾 i 后续输入的内容将插入至当前光标的前面 I