我想知道是否有(简单)重做/撤消在bash shell中执行的命令的可能性?(使其撤消)
是否有类似于ctrl+ z组合的东西来重做任何操作(例如在word或LibreOffice中)?
undo
命令,因此对整个操作系统进行最新备份确实很有用。当出现问题时,您只需恢复以前的状态即可。看看rsnapshot例如
shutdown
命令大声笑..不敢相信这样的问题一天也可以得到8票!!
我想知道是否有(简单)重做/撤消在bash shell中执行的命令的可能性?(使其撤消)
是否有类似于ctrl+ z组合的东西来重做任何操作(例如在word或LibreOffice中)?
undo
命令,因此对整个操作系统进行最新备份确实很有用。当出现问题时,您只需恢复以前的状态即可。看看rsnapshot例如
shutdown
命令大声笑..不敢相信这样的问题一天也可以得到8票!!
Answers:
您应该了解这bash
只是一个执行环境。它执行您调用的命令-甚至不知道命令的用途与Shell无关,您都可以调用所需的任何可执行文件。在大多数情况下,甚至还不清楚撤消操作的内容-例如,您可以“取消播放”电影吗?您可以“取消发送”电子邮件吗?例如,“撤消运行Firefox”甚至意味着什么?您可以关闭它,但书签,下载和历史记录将不同。
如果运行命令,则无论执行什么命令,该命令都会被执行。取决于您自己在做什么。请注意,这并不意味着单个命令没有“撤消” ...它们可以-您甚至可以编写包装器函数来保护您免受愚蠢错误的影响。
例如,mv
只要将文件移回原始位置即可轻松实现可逆性,除非您覆盖了某些内容。这就是为什么-i
存在开关,要在覆盖之前询问您的原因。从技术上讲,的反转cp
是rm
,除非某些内容被覆盖(再次-i
询问您有关此内容的信息)。rm
更永久,要尝试取回文件,您实际上必须进行一些较低级别的黑客攻击(有相应的工具)。如果您将文件系统视为黑匣子,从技术上讲是根本不可能的(只有数据逻辑和物理布局的详细信息才能使您进行一些损害控制)。rm
意味着rm
,如果您想要“垃圾桶”功能,那实际上就是mv
进入一些预先安排的目录(可能还有一个安排好的服务来维护或清空它)-没什么特别的。但是您可以-i
在删除前使用提示来提示您。您可以使用函数或别名始终包含-i
在这些命令中。
请注意,大多数应用程序都以不同的方式保护您免受数据丢失的影响。多数(〜全部)文本编辑器会~
在最后创建备份文件,以防您想将旧版本带回。在某些发行版中,ls
默认情况下使用别名别名,以便将其隐藏(-B
),但是它们在那里。通过适当地管理权限可以提供很多保护:除非需要,否则不要为root用户;如果不想更改文件,则将它们设置为只读。有时,拥有一个“沙盒”环境很有用-在副本上运行事物,看看它是否还好,然后合并更改(或放弃更改)。chroot
或lxc
可以防止您的脚本从目录中逸出并造成损害。
当您尝试批量执行事务时(例如,如果您有一个复杂的find命令,while循环,较长的管道或类似的操作),最好先仅echo
执行将要执行的命令。然后,如果命令看起来合理,请删除echo
并运行它。当然,如果您不确定自己在做什么,请先制作一份副本。有时我只是创建当前目录的tarball。
说到tarball,不幸的是,tarbomb和zipbombs很普遍(当人们没有适当的子目录进行归档时,解压缩会使文件散落在周围,从而造成极大的混乱)。我习惯于在解包之前自己制作一个子目录(我可以列出内容,但我很懒)。我正在考虑制作一个仅在内容没有子目录的情况下创建子目录的脚本。但是,当确实发生这种情况时,ls -lrt
有助于查找最新文件以放置它们所属的位置。我只是以一个例子为例-一个程序可能有很多副作用,而Shell对此是一无所知的(怎么可能呢?这是另一个与众不同的程序!)避免错误的唯一肯定方法是要小心(考虑一下)两次,运行一次)。
可能最危险的命令是处理文件系统的命令:mkfs,fdisk / gdisk等。它们会彻底破坏文件系统(尽管使用适当的取证软件,至少可以进行部分反向工程)。在运行命令之前,请始终仔细检查要格式化和分区的设备是否正确。
不,对不起,在Bash中没有“撤消”之类的事情。这就是为什么您应该仔细检查命令或首先在不重要的文件上测试它们的原因(如果可能的话)。并三重检查您是否以root用户身份进行操作;)
rm
,则该文件已消失,已逝世,已故,不再存在,它是一个前文件(Monty Python警报)。现在,它的亲戚们在悲伤中哭泣,你无法撤消你的行为。您正在谈论的是撤消键入或删除字符,我怀疑这是终端仿真器的功能。我刚刚在《终结者》中尝试过,并且可以正常工作。切换到其他控制台(在我的情况下为Ctrl + Alt + F1)将使其无法正常工作。
不,没有通用撤消,但是某些后果比其他后果更可逆。例如rm
:它本质上有两个用途-避免混乱,并释放新文件的空间。幸运的是,您可以使用诸如之类的工具来检索文件的内容extundelete
,因为在运行时,只有指向文件开头的指针会被覆盖rm
;当操作系统重用该空间时,内容将被覆盖(这可能会在数毫秒或数年后发生)。因为这个功能的,rm
落在中间规模的系统或多或少破坏性的。一方面有垃圾系统,它提供了一种避免混乱的方法,而不会立即丢失数据(因为撤消很简单)。更为保守的是一次写入,多次读取(“ WORM”)系统,在这些系统中,系统对其进行写入不能随意删除或覆盖数据。另一方面,是切碎系统,该系统除指针外还覆盖文件内容(通常是多次)。到那时,用于恢复数据的技术可能甚至不存在(可能永远不存在)。
因此,您可以看到使用最多的特定工具(rm
)并不是唯一的选择,但它为大多数人似乎很满意的产品提供了一个折衷方案:
如果您的工具无法做出的取舍,请环顾四周。可能有一些工具可以做出适合您的决策。
提供“撤消”功能的应用程序通过维护已执行操作的历史记录以及恢复操作或对象状态的快照以恢复先前状态的方法来做到这一点。在Shell中执行的命令执行直接动作或执行命令以执行动作。
Shell本身无法撤消已运行的任何命令或程序所导致的操作。如果命令或程序保留了历史记录并具有撤消功能,则可以使用该功能,但Shell本身不能。
例如,如果您运行rm important_file.txt
,它将告诉文件系统驱动程序“取消链接”文件系统上的文件。外壳程序不执行操作,仅调用执行操作rm
。
如果要取消删除丢失的文件,则可能会这样做,因为通常删除文件并不会真正删除它,而只会删除对其的引用。一段时间后,文件的内容将被覆盖,因为其他数据已保存到磁盘,但是一段时间后,可以使用可以找到并“重新链接”该文件的实用程序来还原原始文件。
就像其他好的答案所说的那样:shell中没有“撤消”。但是在您的特定用例中,要撤消a shutdown
,您可以终止关机过程:请参阅/programming//a/526330