在Vim中无需权限即可保存编辑的文件:使用 ‘:w !sudo tee %‘ 命令的技巧

news/2024/11/28 20:42:55/

在vim编辑器中,你可能会遇到一个问题:你打开并编辑了一个文件,但在保存时才发现你没有必要的权限。这通常发生在你忘记使用sudo命令打开一个需要管理员权限的文件时。幸运的是,有一个简单的解决方案,那就是使用命令“:w !sudo tee %”。

这个命令的工作原理是这样的:在vim中,“%”代表当前编辑的文件名。":w !{cmd}“是一个vim命令,它会执行{cmd}命令,并将当前编辑的文件内容作为标准输入传入。在这个例子中,{cmd}是"sudo tee %”,这意味着它会以超级用户的权限将当前编辑的文件内容保存到当前文件中。

这个技巧在Debian和Ubuntu的用户中可能更常用,因为这些用户通常直接使用root用户,而不是使用sudo。他们可能会直接使用vim编辑/etc目录下的文件,然后在保存时才发现没有权限。一种解决方法是先保存到一个临时文件,然后退出vim,再使用sudo cp命令将临时文件复制回原来的位置。但实际上,你可以直接在vim中完成这个过程,只需使用":w !sudo tee %"命令即可。

总的来说,":w !sudo tee %"命令是一个非常有用的技巧,它可以帮助你在没有足够权限的情况下保存在vim中编辑的文件。


当你在Vim中执行:w !sudo tee %命令时,实际上发生了以下几个步骤:

  1. :w命令:这是Vim的写入(write)命令,它通常用于将当前缓冲区的内容保存到文件。但是,当w命令后面跟着一个!时,Vim会将当前缓冲区的内容写入到一个外部命令的标准输入,而不是写入到文件。这就是为什么这个命令可以在没有写入权限的情况下保存文件。

  2. !sudo tee %:这是一个外部命令,Vim会将当前缓冲区的内容写入到这个命令的标准输入。这个命令由两部分组成:

    • sudo:这是一个Unix命令,它允许用户以超级用户(root)的权限运行命令。在这个例子中,它使得tee命令可以以root的权限运行,从而可以写入到没有写入权限的文件。

    • tee %tee是一个Unix命令,它从标准输入读取数据,并将数据写入到一个或多个文件中。在这个例子中,%是一个Vim的特殊符号,代表当前编辑的文件名。所以,tee %命令会将从Vim传来的数据写入到当前编辑的文件中。

总的来说,:w !sudo tee %命令的工作原理是:Vim将当前缓冲区的内容写入到sudo tee %命令的标准输入,sudo tee %命令以root的权限将这些数据写入到当前编辑的文件中,从而实现了在没有写入权限的情况下保存文件。


http://www.ppmy.cn/news/105014.html

相关文章

本地搭建CFimagehost私人图床【公网远程访问】

文章目录 1.前言2. CFImagehost网站搭建2.1 CFImagehost下载和安装2.2 CFImagehost网页测试2.3 cpolar的安装和注册 3.本地网页发布3.1 Cpolar临时数据隧道3.2 Cpolar稳定隧道(云端设置)3.3.Cpolar稳定隧道(本地设置) 4.公网访问测…

对比 RS232,RS422,RS485

对比 RS232,RS422,RS485 首先, 串口、UART口、COM口、RJ45网口、USB口是指的物理接口形式(硬件)。TTL、RS-232、RS-485、RS-422是指的电平标准(电信号)。 RS232,RS422,RS485 对比表格 通信标准RS-232RS-422RS-485工作方式单端差分差分通信线数量4 地线52 地线3节…

编程语言是什么

世界上存在许多种语言,包括汉语、英语、日语、俄语等等,每种语言都有固定的格式,比如汉语(中国话),每个汉字代表着不同的意思,我们必须正确的表达,才能让对方理解。例如让父母给你10…

Socket(五)

文章目录 1. 日志2. 如何记录日志 1. 日志 服务器要在无人看管的情况下运行很长时间,通常需要在很久以后对服务器中发生的情况进行调试,这很重要。由于这个原因,建议在存储服务器日志,至少要存储一段时间的日志。日志中通常希望记…

mybatis中的一些使用

#{}与${}的区别 Delete("delete from emp where id #{id}") //生成预编译SQL语句,效率更高,将#{id}替换为“?”,也更安全,防止SQL注入,#不能出现在中,因此不能用于模糊查询 Delete(…

代码随想录算法训练营第五十六天 | 编辑距离2

583. 两个字符串的删除操作 文档讲解:代码随想录 (programmercarl.com) 视频讲解:动态规划之子序列,还是为了编辑距离做铺垫 | LeetCode:583.两个字符串的删除操作_哔哩哔哩_bilibili 状态:不会做。 思路 动态规划一 …

简单认识OSI(计算机网络分层)七层模型

前言 学校上课讲的太笼统啥也不是,自己学的太玄学似懂非懂突然在看到了一篇公众文文章。文章从初始到现在,步步为营的遇到一个解决一个前人的问题,有了细致入微的讲述,把之前学的死东西都连起来了。 如果让你来设计网络https://m…