You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

WSL Ubuntu中如何删除硬链接数为0的文件?

WSL Ubuntu中如何删除硬链接数为0的文件?

这情况确实挺闹心的!硬链接数为0的文件在正常Linux环境里本来就少见,还碰上删不掉的情况,尤其是在WSL这种Windows和Linux混合的环境下,大概率是文件系统的状态同步出问题了。给你几个可行的解决办法,按顺序试试:

  1. 通过inode直接删除
    你已经用stat拿到了文件的inode号(2814749767170024),直接用find命令定位inode并删除是最直接的方式:
    先cd到文件所在的目录,然后执行:

    sudo find . -inum 2814749767170024 -delete
    

    如果这个命令没反应,也可以试试遍历整个根目录(会慢一点):

    sudo find / -inum 2814749767170024 -delete
    
  2. 重启WSL重置文件系统状态
    有时候WSL的文件系统缓存会抽风,导致文件状态异常。先关闭WSL:
    在Windows的命令提示符或者PowerShell里执行:

    wsl --shutdown
    

    等个几秒再重新打开Ubuntu终端,然后再试试sudo rm -f something.php,大概率能解决。

  3. 从Windows侧删除(如果文件在挂载目录)
    如果这个文件是在/mnt/c之类的Windows挂载目录里,直接去Windows文件管理器里删可能更管用:
    打开文件管理器,地址栏输入\\wsl$\Ubuntu-20.04(对应你的WSL发行版名称),找到文件所在的路径,右键删除就行。Windows的文件系统处理有时候能绕过WSL里的权限或状态问题。

  4. 极端情况:修复文件系统
    如果上面的方法都不行,那可能是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

火山引擎 最新活动