我发现自己处于需要连接(使用 ssh)到未安装文本编辑器(没有ed
、ex
或)的远程计算机vi
的情况nano
。这是在正在运行的生产服务器上。我们不安装(也不允许)文本编辑器,基本上是因为以下信念:
- 你并不真的需要它们。
- 将它们排除在外可能也会增加安全性。
但是,您仍然需要不时地进行调试和故障排除。
外壳是 Bash。我能看到编辑文本文件的唯一方法是使用echo
和cat
。
您能否分享一下在这种情况下如何编辑文本文件的经验?也许有一种方法可以将文件传输到本地vim
?
更新:澄清一下,这个问题只是一个理论案例。有几次我不得不使用非常少的设置来调试 k8 集群中的 pod。因此您可能需要更新一些配置。
答案1
在这种情况下,我会尝试将文件传出并在另一台计算机上编辑它们,然后将它们传回。如果你有ssh
,你应该有scp
(我希望),所以你应该能够将文件推入和推出。如果没有,您还可以寻找ftp
传入和传出文件。
如果没有,那么我认为最好的选择是尝试使用cat
、grep
、sed
、echo
和 I/O 重定向(尤其是附加>>
)。还有很多临时文件。
答案2
正如 Faxeyo 提到的,编辑文件的最简单方法是远程编辑。本地计算机上的 Vim 通常能够通过 SFTP 编辑文件,如果您使用其他编辑器,它也可能能够远程工作。
但是,也许您正在编辑的文件只能以其他用户的身份进行修改,并且该文件不起作用。如果远程系统是Linux系统,则可能有busybox,某些版本的busybox包括vi
和ed
。它的vi
功能并不完整,但它的功能足以编辑文件。您可以使用busybox vi FILE
或调用它们busybox ed file
。您也可以scp
通过静态链接的二进制文件。busybox
您的系统在其他地方可能有一个功能更强大的ed
二进制文件。它是一个行编辑器,很像vi
(ex
命令)的冒号命令。虽然在许多 Linux 发行版上是可选的,但它通常用于 的一些更深奥的功能patch
,因此它可能存在。 ed
并且该ex
模式vi
还具有无需 TTY 即可工作的愉快特点。
一些非常老的 Debian 系统有ae
,它可以在模式下运行vi
。我所知道的所有其他非 Linux 开源操作系统在基本系统中都有vi
、ex
或之一ed
,并且不允许通过包管理器删除它们。
如果确实没有文本编辑器,我会使用cat
和 heredocs 将数据块写入临时文件,并使用sed
.我还会向系统管理员(当然是从另一个系统)发送一封友好的电子邮件,询问他们是否可以安装一两个编辑器。
答案3
如果zsh
安装了,您可以使用 zsh 行编辑器编辑文件:
zmodload zsh/mapfile
vared 'mapfile[myfile.txt]'
甚至:
autoload zed
zed myfile.txt
答案4
这不是您问题的答案,但它仍然可能对有相同问题的人有所帮助。我寻找了此问答的解决方法,但最终不需要它们。我想在浪费了一些时间之后分享这一点。
我没有看到房间里的大象。只需安装 vim: apt-get install vim
.在我的容器中,这有效,无需将安装程序添加到映像中。这应该适用于您有权安装的任何其他地方。