WSL Ubuntu中如何删除硬链接数为0的文件?
这情况确实挺闹心的!硬链接数为0的文件在正常Linux环境里本来就少见,还碰上删不掉的情况,尤其是在WSL这种Windows和Linux混合的环境下,大概率是文件系统的状态同步出问题了。给你几个可行的解决办法,按顺序试试:
通过inode直接删除
你已经用stat拿到了文件的inode号(2814749767170024),直接用find命令定位inode并删除是最直接的方式:
先cd到文件所在的目录,然后执行:sudo find . -inum 2814749767170024 -delete如果这个命令没反应,也可以试试遍历整个根目录(会慢一点):
sudo find / -inum 2814749767170024 -delete重启WSL重置文件系统状态
有时候WSL的文件系统缓存会抽风,导致文件状态异常。先关闭WSL:
在Windows的命令提示符或者PowerShell里执行:wsl --shutdown等个几秒再重新打开Ubuntu终端,然后再试试
sudo rm -f something.php,大概率能解决。从Windows侧删除(如果文件在挂载目录)
如果这个文件是在/mnt/c之类的Windows挂载目录里,直接去Windows文件管理器里删可能更管用:
打开文件管理器,地址栏输入\\wsl$\Ubuntu-20.04(对应你的WSL发行版名称),找到文件所在的路径,右键删除就行。Windows的文件系统处理有时候能绕过WSL里的权限或状态问题。极端情况:修复文件系统
如果上面的方法都不行,那可能是WSL的虚拟文件系统出现了错误。可以试试导出再导入WSL发行版来修复:- 先导出当前发行版:
wsl --export Ubuntu-20.04 D:\ubuntu-backup.tar - 然后注销发行版:
wsl --unregister Ubuntu-20.04 - 最后重新导入:
wsl --import Ubuntu-20.04 D:\wsl-ubuntu D:\ubuntu-backup.tar
不过这个方法会重置你的用户配置,记得备份重要文件!
- 先导出当前发行版:
至于为什么会出现这种情况,大概率是WSL的文件系统层在和Windows交互时,出现了inode引用计数的同步错误,导致系统认为文件还被占用,但实际没有,所以普通的删除命令失效。
备注:内容来源于stack exchange,提问作者D.Mill




