Bla*_*ack 7 command-line sudo nano
我正在使用纳米。
有时我对文件进行更改,然后在尝试保存后我意识到我需要 sudo 权限。然后我需要关闭该文件,以 sudo 重新打开它并再次进行更改......
到底有没有办法挽救呢?我记得一位同事没有保存就关闭了文件,然后执行了“sudo !!” 或其他东西,然后保存更改。
它是如何工作的?
sudo !!
诸如zsh
或 之类的 shell 中实现 csh 样式历史扩展的命令bash
将重新执行最近的命令,但在其前面加上sudo
. 如果最近的命令是打开文本编辑器,则这将以 root 用户身份完成。然后您可以继续重新进行更改并保存。但是,您第一次引入的更改将会丢失。
nano
假设您以非 root 用户身份使用编辑器,并且您发现自己需要将当前文件保存为 root 用户。然后,您可以通过过滤当前缓冲区的内容来完成此操作sudo tee some/file/path
。该命令将以tee
root 身份运行,并覆盖或创建位于 的文件some/file/path
。
在nano
编辑器中,您可以通过按^R^X
,即Ctrl+R+来调用此过滤器Ctrl+X,然后键入
|sudo tee some/file/path
Run Code Online (Sandbox Code Playgroud)
(初始|
信号表明nano
您要将当前文档传递给该命令。)
如果sudo
需要提示您输入密码,它会这样做。^L
这会使显示有点混乱,但您可以通过按( )重新绘制屏幕Ctrl+L。
请注意,必须小心指定要写入的文件的正确路径名,因为这会用编辑器缓冲区的内容不可逆地覆盖该文件。由于您以 root 身份编写,因此权限不会阻止您破坏数据。因此,这是一种可能值得了解的“黑客”,但您不想依赖它。
nano
版本 2.9.8(2018)中添加了从外部命令过滤文本的功能。
小智 5
尝试这个...
\n:w !sudo tee %\n
Run Code Online (Sandbox Code Playgroud)\n解释...
\n:w
\xe2\x80\x93 写入缓冲区的内容!sudo
\xe2\x80\x93 将其通过管道传输到 sudo 的标准输入tee %
\xe2\x80\x93 sudo 执行 tee 写入 \xe2\x80\x9c%\xe2\x80\x9d 文件%
\xe2\x80\x93 Vim 将 \xe2\x80\x9c%\xe2\x80\x9d 扩展为当前文件名sudo !!
将调用最后一个命令 ( !!
) sudo
。无论如何,您都必须重新进行更改(假设最后一个命令是编辑)。
根据文件大小和敏感性(机密信息、明文密码等),您可以将文件保存在临时位置,然后从sudo
.
会话中的示例代码vi
:
:w /tmp/file.txt
sudo vi /some/path/file.txt
:%d (this will delete all content of file.txt under sudo)
:r /tmp/file.txt (this will include from /tmp/file.txt )
:x (exit vi)
rm -f /tmp/file.txt (delete file)
Run Code Online (Sandbox Code Playgroud)
注意/tmp/file.txt
是暴露的。
归档时间: |
|
查看次数: |
1966 次 |
最近记录: |