我尝试删除“.”目录。我想我可以删除我的工作目录,而不必进入父目录。
我的问题的重点是寻找一些关于 Linux 系统如何删除文件的见解。
答案1
删除当前目录不会影响文件系统的完整性或其逻辑组织。防止.
删除是为了遵循 POSIX 标准,该标准在rmdir(2)
手册页:
如果路径参数引用的路径的最终组成部分是点或点-点,则 rmdir() 将失败。
可以在以下内容中找到一个基本原理:rm
手册页:
禁止 rm 实用程序删除名称 dot 和 dot-dot 以避免无意中执行以下操作的后果:
rm -r .*
另一方面,明确删除当前目录(即通过声明其完整或相对路径)是 Unix 下允许的操作,至少从 SVR3 开始是这样,因为在 SVR2 之前的 Unix 版本 7 中禁止这样做。这与删除正在读取或写入的文件时发生的情况非常相似。访问删除文件的进程继续其读写操作,就像什么都没发生一样。删除进程当前目录后,无法再通过其路径访问该目录,但其 inode 仍保留在文件系统上,直到进程终止或更改其自己的目录。
请注意,该进程将无法使用相对于其当前目录的路径来更改其 cwd(例如),因为其当前目录中cd ..
不再有条目。..
当某人键入 时rmdir .
,他们可能希望删除当前目录条目,但当删除目录(使用其路径)时,实际上会删除三个目录条目、.
、..
和目录本身。
仅删除.
而不删除此目录的目录条目将创建不兼容的目录,但如前所述,标准禁止这样做。
.
正如@Emmanuel 正确指出的那样,不允许删除还有第二个原因。至少有一种符合 POSIX 标准的操作系统(带有 HFS+ 的 Mac OS X)在严格限制下支持创建到现有目录的硬链接。在这种情况下,没有明确的方法从目录内部知道哪个硬链接是预期要删除的硬链接。
答案2
为了完整性,这样做是为了完整性,因为您当前位于该目录中,并且这.
只是一个自我引用。
您需要进入其父级或rmdir
使用其路径进行调用,这可以通过以下方式完成:
rmdir `pwd`
如果您经常需要它,您可以为其设置一个别名,例如:
alias rmc='rmdir `pwd`'
..可以rmc
单独调用它来删除当前目录。