Answers:
Linux(与其他unices一样)本身不提供撤消功能。其哲学是,如果它消失了,它就消失了。如果它很重要,则应该对其进行备份。
有一个保险丝文件系统,可以自动保留旧版本的副本:copyfs,在所有良好的发行版中都可用。当然,那会占用很多资源。
防止此类事故的最佳方法是使用版本控制系统(cvs,bazaar,darcs,git,mercurial,subversion等)。它需要一点时间来学习,但是从中期和长期来看,它的回报是巨大的。
抱歉不行。
-i
选项rm
。我的Unix系统不应该帮助我。
命令行中没有撤消操作。但是,您可以使用rm -i
和运行命令mv -i
。这将提示您“确定吗?” 在执行命令之前询问。
也可以为其添加别名到启动脚本(例如~/.bashrc
或/etc/bash.bashrc
):
alias remove='rm -i'
alias move='mv -i'
编辑:通过以下建议,我删除了为默认命令添加别名的建议。相反,它现在引入了新命令)。
mv -i
仅在它将覆盖文件时提示(这使它有用且不令人讨厌)。同样,alias cp='cp -i'
。
Linux / Unix系统没有删除的原因是大多数文件系统存储其信息的方式。文件元信息全部存储在磁盘的前面,并引用了磁盘其余部分的索引节点。通常,大多数文件系统在此元区域中为文件分配10个块。前7个是指前7个inode。第8个和第9个转到inode列表(双向链接的块),第10个转到列表列表的列表(三重链接的块)。随文件系统(ext4,jfs,xfs等)的不同而不同,但是这些块列表通常可以处理从2GB到几TB的文件大小。
但是,由于所有这些信息都存储在磁盘的前端,因此,在删除文件时,无法引用磁盘上的索引节点所使用的元数据。相比之下,FAT32和NTFS实际上与文件本身一起存储一些头信息,从而使识别一组块所使用的文件更加容易(只要新文件尚未回收该空间)。在Linux工作中,删除某些内容时,几乎总是第一件事就是立即被新数据覆盖以提高效率。
如果您确实想要撤消功能,请使用源代码控制。 Subversion实际上在单用户计算机上运行良好。我用它来控制我的家庭系统上的所有个人文件。这似乎有点过头了,直到灾难发生,流氓脚本或命令行错字出现。
rm -r .
。;)
rm -r project.git
。幸运的是,如果您在远程服务器上保留不太可能发生的另一个版本
rm -r .
。我真是愚蠢。
我想添加到.bashrc中的一件事是复制和删除功能。就像是:
cprm(){
cp -p $1 ~/deleted/$1
rm $1
}
但是您必须养成键入cprm而不是rm的习惯。
显然,如果磁盘空间有限,则需要保持在已删除区域的顶部。
"$1"
。
GitFS是基于保险丝的文件系统,可以自动计算diff
版本之间的s,并允许在它们之间进行还原/浏览。