是否可以在bash shell中反转命令?

Modified on: Sat, 30 Jun 2018 04:58:30 +0800

我想知道是否有(简单)可能重做/反转在bash shell中执行的命令? (使其撤消)

是否有与 ctrl + z 组合相似的东西来重做任何动作(例如在word或LibreOffice中)?

最佳答案

您应该明白bash只是一个执行环境。它执行你调用的命令 - 即使知道命令的作用也不是shell的业务,你可以调用你想要的任何可执行文件。在大多数情况下,甚至不清楚撤消会做什么 - 例如,你能“取消”一部电影吗?你能“发送”一封电子邮件吗?例如,“撤消运行firefox”甚至意味着什么?您可以关闭它,但书签,下载和历史记录将不相同。

如果你运行一个命令,它会被执行,无论它做什么。你应该知道自己在做什么。请注意,这并不意味着单个命令没有“撤消”......他们可以 - 您甚至可以编写一个包装函数来保护您免受愚蠢的错误。

例如,mv只需将文件移回原来的位置即可轻松实现,除非您覆盖了某些内容。这就是-i开关存在的原因,在覆盖之前问你。从技术上讲,cp的逆是rm,除非被覆盖的东西(再次,-i询问你)。 rm更持久,为了尝试恢复文件,你必须实际做一些低级别的黑客攻击(有工具)。如果您将文件系统视为黑盒子,那么技术上根本就不可能(只有数据的逻辑和物理布局的细节允许您进行一些损坏控制)。 rm表示rm,如果你想要“垃圾”功能,那实际上只是mv到一些预先安排好的目录中(可能是一个预定的服务)保持或清空它 - 没什么特别的。但您可以使用-i在删除之前提示您。您可以使用函数或别名在这些命令中始终包含-i

请注意,大多数应用程序都以不同方式保护您免受数据丢失。大多数(〜所有)文本编辑器最后使用~创建备份文件,以防您想要恢复旧版本。在某些发行版中,ls默认为别名,以便隐藏它们(-B),但它们就在那里。通过正确管理权限可以获得很多保护:除非您需要,否则不要是root用户,如果您不希望文件更改,请将文件设置为只读。有时候有一个“沙盒”环境是有用的 - 你在副本上运行东西,查看它是否正常,然后合并更改(或放弃更改)。 chrootlxc可以防止脚本从目录中逃脱并造成损坏。

当你尝试批量执行时 - 例如,如果你有一个复杂的find命令,while循环,一个长管道或类似的东西,那么首先只需echo将要执行的命令。然后,如果命令看起来合理,请删除echo并将其运行为real。当然,如果你真的不确定自己在做什么,请先复制一份。我有时只是创建当前目录的tarball。

说到tarball - 遗憾的是tarbombs和zipbombs很常见(当人们在没有合适的子目录的情况下进行存档时,解压缩会将文件分散开来,造成巨大的混乱)。在解压缩之前我习惯于自己制作一个子目录(我可以列出内容,但我很懒)。我正在考虑制作一个脚本,只有在没有子目录的情况下存档内容时才会创建子目录。但是当它发生时,ls -lrt有助于找到最新的文件放在它们所属的位置。我只是举了几个例子 - 一个程序可以有许多副作用,shell无法知道(怎么可能呢?这是一个不同的程序被调用!)唯一可靠的避免错误的方法是要小心(想想两次,跑一次)。

可能最危险的命令是处理文件系统的命令:mkfs,fdisk / gdisk等。他们可以完全破坏文件系统(尽管使用适当的取证软件,至少可以进行部分逆向工程)。在运行命令之前,请务必仔细检查要格式化的设备并进行分区。

作者:,orion

相关问答

添加新评论