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

本文介绍了一种在没有文件写入权限时,利用vim内置命令配合sudo和tee命令巧妙保存文件的方法。通过一个具体示例展示了如何在忘记使用sudo的情况下依然能够成功保存文件。

使用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,作完这个练习就把文件改回去吧。 





<think>好的,我现在需要回答用户关于在Linux中使用Vim保存修改后的文件的命令。首先,我得回想一下Vim的基本操作流程,因为用户可能刚接触Vim,对模式切换不太熟悉。 用户的问题明确是保存修改后的文件,所以重点在保存命令。根据引用的资料,引用[3]提到保存操作是正常情况下的ESC进入命令模式,然后输入:wq回车。同时,特殊情况可能需要加强制符号!,比如:wq!。另外,引用[2]和[4]也提到了保存并退出的基本命令,但需要区分不同情况。 接下来,我需要分步骤说明,因为用户可能需要详细指导。首先,必须确保用户知道Vim有不同的模式,编辑模式和命令模式。保存文件是在命令模式下进行的。因此,步骤应该是:1. 退出编辑模式按ESC,2. 输入保存命令,比如:wq。此外,如果文件是只读的或者权限不足,可能需要强制保存,这时候要用到:wq!。但需要注意权限问题,可能需要sudo。 还需要提到仅保存不退出的情况,比如:w,这样用户知道可以多次保存而不退出。同时,强制退出不保存的情况,比如:q!,虽然用户的问题是关于保存,但作为常见操作,可能也需要提及,以便用户对比。 另外,用户提供的引用中有提到安装Vim的部分,但用户的问题已经是在使用Vim保存文件,所以可能不需要涉及安装步骤,除非用户的环境没有安装Vim,但根据问题描述,用户已经进入编辑阶段,所以可以忽略安装部分。 需要检查是否有其他特殊情况,比如文件被锁定或者权限问题,引用[3]中提到如果出现“无法打开并写入文件”,可能需要检查权限,或者使用强制命令。这时候可能需要建议用户使用sudo或者在保存时加!,但要注意安全提示。 最后,总结常用命令,确保用户能清晰看到不同情况对应的命令,比如保存退出、强制保存退出、仅保存等。结构上分步骤,使用列表,并给出例子,比如具体命令格式,这样用户可以直接复制使用。 可能还需要注意用户是否混淆了保存和退出的命令,比如区分:wq和:x,或者:q和:q!。但根据引用资料,主要提到的是:wq和:wq!,所以应优先这些命令,避免混淆。 总之,回答需要结构清晰,步骤明确,涵盖正常和异常情况,并引用提供的资料来支持答案的正确性。</think>在Linux中使用Vim修改文件保存文件的命令步骤如下: ### 1. **进入命令模式** 完成编辑后,按`ESC`键退出编辑模式,进入**命令模式**(此时屏幕底部会显示`:`提示符)。 ### 2. **保存文件** - **仅保存不退出**:输入`:w`并按回车。 例如:修改后需要临时保存,但继续编辑使用此命令。 - **保存并退出**:输入`:wq`并按回车。 例如:完成所有修改后,保存文件并退出Vim。 - **强制保存(针对只读文件权限不足)**:输入`:wq!`并按回车[^3]。 注意:若文件权限不足,可能需要先使用`sudo vim <文件名>`打开文件。 ### 3. **特殊情况处理** - **放弃修改并退出**:输入`:q!`并按回车(不保存任何修改)。 - **文件权限问题**:若提示“无法写入文件”,可能需要通过`chmod`修改文件权限,或使用`sudo`提升权限后重新编辑。 --- ### 常用命令总结 | 命令 | 作用 | |------------|--------------------------| | `:w` | 保存文件但不退出 | | `:wq` | 保存并退出 | | `:wq!` | 强制保存并退出 | | `:q!` | 不保存强制退出 | --- ### 示例操作流程 1. 打开文件: ```bash vim example.txt ``` 2. 编辑内容:按`i`进入编辑模式,修改文本。 3. 保存退出:按`ESC` → 输入`:wq` → 按回车。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值