暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

:w !sudo tee % 你用过这个神奇的命令吗?

蒲东平 2023-12-21
590

在 Linux 世界中,Vim 编辑器是一个广受欢迎的文本编辑器,它强大的功能和丰富的命令集合赋予了它无与伦比的生命力。今天我们要来探讨的是 Vim 中的一个很常用但可能初学者易于忽略的命令——:w !sudo tee %
。这个命令整体上的含义是当你打开一个需要 root 权限才能修改的文件,而你修改文件后又不想退出 Vim 编辑器,然后再使用 sudo 命令来启动 Vim,这时你就可以使用这个命令来获取临时的权限,保存你的更改。

我们首先拆分这个命令的每一个部分来理解它是如何工作的。

  1. :
    :这在 Vim 中意味着我们将要输入一条命令。在命令模式下,你可以在标题栏中用:
    来开始。

  2. w
    :":w" 是一个常见的 Vim 命令,代表着 “write”。这个命令单独使用的话,会将你在 Vim 中所做的改动写入到文件中。这里的写入并不直接涉及文件系统,而是写入给 Vim 的缓冲区。

  3. !
    :在 Vim 中,感叹号('!')表示我们要在 shell 环境下执行接下来的命令。它告诉 Vim 去调用一个外部的程序。

  4. sudo
    :在 Linux 命令中,sudo
    命令(Su"do"(superuser; substitute user; switch user do))通常表示位"以超级用户身份去做"的意义。之所以需要 sudo
    是因为原本你可能没有写入这个文件需要的权限。

  5. tee
    tee
    是一个标准的 UNIX 命令,它可以接受输入,并将结果重定向到文件和屏幕(stdout)。

  6. %
    :在 Vim 中,'%' 符号表示当前正在编辑的文件。

所以,这个命令的整体含义就代表着:把当前的缓冲区内容输出到屏幕,并以超级用户的身份通过 tee
命令写入到当前正在编辑的文件中

主要用于:在没有文件写入权限却需要保存的情况下,赋予用户以超级用户的身份保存正在编辑的文件。

事实上,这个命令背后的原理更为高深。当你在命令行界面中输入一条带有管道(|)的命令,Shell 会按照顺序一一处理你的命令。在我们的这个命令中,首先它被:
解释为 Vim 命令,此时的 w
 指定我们将缓冲区的数据写出。而参数 !sudo tee %
被构造为一个传给 Shell 的命令并被执行。%
在 Shell 语境下又被 Vim 具体化为当前编辑的文件名,于是 Shell 会执行 tee
命令,将缓冲区的数据简单复制到指定的文件和控制台。

这个在 Vim 中绝妙的命令背后的原理包含了多个琐碎的信息,每个都是程序员在日复一日的操作中形成的最佳实践。

掌握了这个命令,也就是说我们对 Vim,对 Shell,对 Linux 文件权限管理有了更深一层的理解。这也是 Vim 为何如此迷人的原因之一,在 Vim 中,有着无数这样的小技巧等你去发掘,正如一位大师曾经说过,“Vim就像一个无尽宝藏,总有你未曾发现的新世界。” 是的,这是我刚刚说的,哈哈……



最后说个事
公号算法变了,为防止看不到我的更新
大家帮忙加个星标
点击上方的公众号卡片
再点右上角三个点
就能看到设为星标
算我跪下来求你们

往期精选:

微信,看看你的另一半跟谁聊天频繁!

让你的微信“拍一拍”有趣且不失风度

微信年度账单来了,不敢看!

张万林,下雪了……我用编程带你看场纷飞大雪

还在使用默认的微信图标?赶紧换个吧!

我的微信和你们的不一样!?

文章转载自蒲东平,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论