在某些UNIX风格中,rm的手册页将其指定为取消链接文件的命令。
在UNIX中,文件是文件系统中称为Inodes的对象,除了文件系统中的ID外,没有名称或位置。它们的名称是在各个目录中对它们的引用,这些目录是一种文件类型,用于索引其中列出的文件(或目录,因为它们是文件)。
取消链接文件时,文件的引用计数会减少,当文件的引用计数达到0时,实际上已被删除,因为文件系统将其标记为空闲,并且其块/范围也被标记为空闲。
如果您有能力在不先取消链接目录的情况下对目录进行rm管理,则将达到在文件系统中引用了inode但无法通过任何常规方式进行访问的位置。
由于根据引用计数对它们进行引用,因此它们不会被标记为已删除并成为丢失的文件。
当丢失的“文件”是目录时,这变得更加复杂,因此增加了文件系统中潜在的丢失存储量。
因此,添加了rm -r以减轻UNIX用户的生命,该功能以标准的“ UNIX精神”为代价,因为它比传统的UNIX实用程序更复杂,因为它降级到目录并删除其中的文件,
另外,在UNIX的早期,系统没有太多的内存,并且映射目录的递归结构确实会降低性能,并且有时不分割工作是不可能的。
cp,读取文件并逐块复制它。如果要复制与文件相同的目录,则会在不增加引用计数的情况下在其中添加对文件的引用,这可能导致数据不一致(如果读取/写入的inode的块自标记为空闲原始inode已删除),数据丢失-因为删除文件的最后一个(已知)引用可能导致其inode编号被回收。
对于tl人群:
UNIX中的目录是一种文件,的确如此,但是由于其中的信息被系统以不同的方式对待(因为它是文件系统的元数据),所以在没有目录的情况下操作文件的命令将无法在目录中工作。改变他们的行为以操纵相关的元数据。
rm
至少,如果你希望它忽略的文件和目录之间的差异,你可以把你的~/.bashrc
文件:alias rm='rm -r'
。