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