我想知道是否有一种(简单的)可能性可以重做/撤消在 bash shell 中执行的命令?(使其撤消)
是否有类似于ctrl+z组合的东西可以重做任何操作(例如在 word 或 LibreOffice 中)?
答案1
你应该明白这bash
只是一个执行环境。它执行您调用的命令 - shell 不关心命令的作用,您可以调用任何您想要的可执行文件。在大多数情况下,甚至不清楚撤消会做什么 - 例如,您可以“取消播放”电影吗?您可以“取消发送”电子邮件吗?例如,“撤消正在运行的 Firefox”到底意味着什么?您可以关闭它,但书签、下载和历史记录将不一样。
如果您运行命令,无论它做什么,它都会被执行。由你决定你知道自己在做什么。请注意,这并不意味着单个命令没有“撤消”功能...它们可以 - 您甚至可以编写一个包装函数来保护您免受愚蠢错误的影响。
例如,mv
只需将文件移回原来的位置即可轻松逆转,除非您覆盖了某些内容。这就是-i
switch 存在的原因,在覆盖之前询问你。从技术上讲, cp
is的逆rm
,除非某些内容被覆盖(再次-i
询问您)。rm
更持久的是,要尝试取回文件,您必须实际进行一些较低级别的黑客攻击(有相应的工具)。如果您将文件系统视为黑匣子,那么它在技术上根本不可能(只有数据的逻辑和物理布局的细节允许您进行一些损坏控制)。rm
意味着rm
,如果您想要“垃圾”功能,实际上只是mv
进入一些预先安排的目录(可能还有一个计划的服务来维护或清空它) - 没有什么特别的。但您可以-i
在删除前使用提示。您可以使用函数或别名来始终包含-i
在这些命令中。
请注意,大多数应用程序都以不同的方式保护您免遭数据丢失。大多数(〜所有)文本编辑器都会在~
末尾创建备份文件,以防您想恢复旧版本。在某些发行版上,ls
默认情况下使用别名,以便隐藏它们 ( -B
),但它们确实存在。通过正确管理权限可以提供很多保护:除非需要,否则不要成为 root,如果不希望文件更改,请将文件设为只读。有时拥有“沙箱”环境很有用 - 您在副本上运行内容,看看是否正常,然后合并更改(或放弃更改)。chroot
或者lxc
可以防止您的脚本从目录中逃逸并造成损坏。
当您尝试批量执行操作时 - 例如,如果您有一个复杂的 find 命令、while 循环、长管道或类似的命令,最好首先只执行echo
将要执行的命令。然后,如果命令看起来合理,请删除echo
并实际运行它。当然,如果您真的不确定自己在做什么,请先复印一份。有时我只是创建当前目录的 tarball。
说到 tarball - tarbomb 和 zipbomb 很不幸(当人们在没有适当的子目录的情况下进行存档时,解压会将文件分散到各处,造成巨大混乱)。我习惯在解压之前自己创建一个子目录(我可以列出内容,但我很懒)。我正在考虑制作一个脚本,仅当内容在没有子目录的情况下存档时才会创建子目录。但当它确实发生时,ls -lrt
有助于找到最新的文件并将其放在所属的位置。我只是举个例子 - 一个程序可能有许多 shell 无法知道的副作用(怎么可能?这是一个不同的程序被调用!)避免错误的唯一可靠方法是小心(想想两次,运行一次)。
最危险的命令可能是处理文件系统的命令:mkfs、fdisk/gdisk 等。它们可以完全破坏文件系统(尽管使用适当的取证软件,至少可以进行部分逆向工程)。在运行命令之前,请务必仔细检查您正在格式化的设备和分区是否正确。
答案2
不,抱歉,Bash 中没有“撤消”这样的东西。这就是为什么您应该仔细检查您的命令或首先在不重要的文件上测试它们(如果可能的话)。并三次检查您是否以 root 身份执行操作;)
答案3
不,没有通用的撤销,但有些后果比其他后果更可逆转。举个例子rm
:它本质上有两个目的 - 避免混乱和为新文件释放空间。运气好的话,您可以使用类似的工具检索文件的内容extundelete
,因为只有指针运行时,到文件开头的内容将被覆盖rm
;这内容当操作系统重用该空间时(可能在几毫秒或几年后发生),该空间将被覆盖。由于此功能,rm
落在中间规模系统或多或少具有破坏性。一方面有垃圾系统,它提供了一种避免混乱的方法,并且没有立即丢失数据的风险(因为撤消是微不足道的)。更保守的是写一次,读多次(“WORM”)系统,其中数据无法删除或覆盖由系统随意写入。天平的另一端是切碎系统,覆盖文件内容(通常多次)除了指针之外。那时恢复数据的技术可能还不存在(并且可能永远不存在)。
因此,您可以看到最常用的特定工具 ( rm
) 并不是唯一的选择,但它提供了大多数人似乎都感到满意的权衡:
- 删除文件指针非常快,并且对磁盘损坏影响很小
- 高度自动化的系统不太可能出现空间不足的情况
- 提供非常适度但非零的隐私保护,以及相反的恢复保证
- 复杂性低,因此出现错误或意外行为的可能性低
如果您的工具所做的权衡让您无法接受,请四处看看。很可能有一些工具可以做出正确的决策你。
答案4
不,没有,但是如果,假设您搞乱了 root 特权目录并以某种方式搞砸了某些事情,那么您最好的选择是将所有文件保存到 USB 驱动器或 SD 卡,然后从ISO 文件(如果您还有它,如果没有,您可以离线获取另一个文件...)。如果您删除了某些内容,则可以,例如怨灵说,下载一个应用程序将文件数据重新链接到文件名并保存文件内容(请参阅此在这里提问)。为了获得更深入的答案,您能告诉我们您做错了什么吗?