这可能是错误的论坛,但无论如何我都会尝试一下。我正在 Windows 10 企业版中运行 ubuntu 子系统:
root@hostname:/directory/stuff# cat /etc/*release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=20.04
DISTRIB_CODENAME=focal
DISTRIB_DESCRIPTION="Ubuntu 20.04.3 LTS"
ls
该文件位于存储库中,并通过和显示git status
,但不在 GUI 中(在资源管理器视图选项中选中“隐藏文件”)或在dir
cmd 中显示。这是一个“隐藏”文件,当您打开 Excel 电子表格时就会显示 - 仅电子表格关闭。即使我再次打开和关闭,它也无法移除。我可以使用chmod
and修改所有权和权限chown
,这很奇怪,我不能做任何其他事情:
root@hostname:/directory/stuff# ll
total 14600
...
-rwxrwxrwx 0 my_name my_name 165 Feb 14 13:25 '~$Copy of Full Compilation of Databases for Audit.xlsx'*
root@hostname:/directory/stuff# chown root: ~\$Copy\ of\ Full\ Compilation\ of\ Databases\ for\ Audit.xlsx
root@hostname:/directory/stuff# ll
total 14600
...
-rwxrwxrwx 0 root root 165 Feb 14 13:25 '~$Copy of Full Compilation of Databases for Audit.xlsx'*
我试过了:
root@hostname:/directory/stuff# ls -i
...
1688849860795414 '~$Copy of Full Compilation of Databases for Audit.xlsx'
....
root@hostname:/directory/stuff# find . -inum 1688849860795414 -exec rm {} \;
rm: cannot remove './~$Copy of Full Compilation of Databases for Audit.xlsx': No such file or directory
....
root@hostname:/directory/stuff# rm -i -- ./*
...
rm: remove regular file './~$Copy of Full Compilation of Databases for Audit.xlsx'? y
rm: cannot remove './~$Copy of Full Compilation of Databases for Audit.xlsx': No such file or directory
....
root@hostname:/directory/stuff# ls -1b
...
~$Copy\ of\ Full\ Compilation\ of\ Databases\ for\ Audit.xlsx
root@hostname:/directory/stuff# rm ~$Copy\ of\ Full\ Compilation\ of\ Databases\ for\ Audit.xlsx
rm: cannot remove '~ of Full Compilation of Databases for Audit.xlsx': No such file or directory
....
root@hostname:/directory/stuff# mv ~\$Copy\ of\ Full\ Compilation\ of\ Databases\ for\ Audit.xlsx just_a_file.xlsx
mv: cannot move '~$Copy of Full Compilation of Databases for Audit.xlsx' to 'just_a_file.xlsx': No such file or directory
任何人都可以添加的任何东西都会很棒!
更正:
上面,我说我看不到该文件指令管理系统with dir
,但我可以 with dir /a
-- 所以 Windows 在某种程度上可以看到它。然而,我仍然无法删除它,即使是从 CMD 中也是如此(奇怪的是它在这里确实是制表符完成的)。
C:\Users\me\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu20.04onWindows_79rhkp1fndgsc\LocalState\rootfs\directory\stuff>dir /a
Volume in drive C has no label.
...
2022-02-14 13:25 165 ~$Copy of Full Compilation of Databases for Audit.xlsx
...
C:\Users\me\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu20.04onWindows_79rhkp1fndgsc\LocalState\rootfs\directory\stuff>del "~$Copy of Full Compilation of Databases for Audit.xlsx"
Could Not Find C:\Users\me\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu20.04onWindows_79rhkp1fndgsc\LocalState\rootfs\directory\stuff\~$Copy of Full Compilation of Databases for Audit.xlsx
答案1
您很可能遇到某种 WSL 文件系统损坏。我不会这么快就得出这个结论,但是:
显然您使用的是 WSL 版本 1,因为您可以
rootfs
从 CMD 中看到该目录。这在 WSL2 中是不可能的,因为它将其文件系统存储在ext4.vhdx
无法从 CMD 访问的虚拟磁盘 ( ) 中。您正在
rootfs
从 Windows 应用程序(例如 CMD)访问该目录。如果您这样做是为了尝试删除该文件,我担心您使用相同的路径从 Excel 创建或编辑文件。访问该目录是已知会导致 WSL 文件系统损坏。引用该页面的内容:
在任何情况下,请勿
%LOCALAPPDATA%
使用 Windows 应用程序、工具、脚本、控制台等访问、创建和/或修改文件夹内的 Linux 文件。使用某些 Windows 工具打开文件可能会对打开的文件和/或文件夹进行读锁定,从而阻止更新文件内容和/或元数据,从而导致文件/文件夹损坏。
从 Windows 在 Appdata 文件夹中创建/更改 Linux 文件可能会导致数据损坏和/或损坏您的 Linux 环境,需要您卸载并重新安装发行版!
这听起来就像你正在经历的那样。
(旁注,尽管它不适用于您的情况:更准确的说法是“不要访问... Linux 文件rootfs
”,无论位置如何,因为您可以将 WSL1 实例放置在 之外AppData
。)
如果您在任何时候使用 Excel、Git for Windows 或任何其他 Windows 工具访问该路径,则很容易导致您看到的锁定。
请注意,如果您的用例(和计算机)支持使用 WSL2,那么 WSL2 的文件系统会更加健壮。
另请注意,正如 Microsoft 博客提到的那样,您能从 Windows 访问 WSL 文件。只是您需要使用该\\wsl$\<distroname>
路径才能安全地执行此操作。
对于“建议的解决方案”,我将复制/粘贴几天前我在 Ask Ubuntu 上提供的类似问题的答案,尽管我从未收到该海报的回复,询问他们是否成功恢复使用这些说明:
潜在的解决方案:
我假设您已经重新启动了电脑,但如果没有,请尝试一下,以防万一确保所有手柄/锁都已释放。它的工作机会相对较小,但值得一试。
如果这不起作用,我建议您尝试修复 WSL1 实例。
wsl --export
基本上通过/往返 WSL1 实例wsl --import
。tar
该进程执行的往返行程可能(希望)在归档或取消归档(其中之一)时删除损坏的文件(或至少锁定)。
来自 PowerShell:
# Confirm the distribution name
wsl -l -v
# Distribution name may be "Ubuntu" or "Ubuntu-20.04" - Adjust the following lines accordingly:
wsl --shutdown
cd ~\Documents
mkdir WSL\images
mkdir WSL\instances\UbuntuRecovery
wsl --export Ubuntu WSL\images\ubuntu.tar
wsl --import UbuntuRecovery WSL\instances\UbuntuRecovery WSL\images\ubuntu.tar --version 1
wsl -d UbuntuRecovery
查看该文件在该新实例中是否已消失或可删除。
如果是这样,并且新实例中的其他一切看起来都正常,那么:
/etc/wsl.conf
通过每个文件设置该实例中的默认用户名这个答案。- 退出实例
- 再次,来自 PowerShell:
wsl --terminate UbuntuRecovery wsl --set-default UbuntuRecovery
wsl
无论何时运行,新实例都将是默认实例。
最后,使用以下命令删除原始损坏的实例:
wsl --unregister Ubuntu
重要的: 这是一个破坏性的手术。确保一切都按预期进行。好的一面是,我们已经做了备份......
您还可以卸载当时从商店安装的 Ubuntu“应用程序”。
您将通过wsl
(如果您还没有)或 Windows 终端启动,因为ubuntu.exe
(或ubuntu2004.exe
) 命令将消失。
答案2
我不确定哪些星星对齐,但今天早上我能够删除该文件。可能是因为我关闭了电脑带回家并且锁被清除了,但我不知道我是否能确定。为了删除它,我只需将存储库拉入适当的 Linux 环境 - Linux Mint 在同一台计算机上的虚拟机上运行 - 不一定是虚拟机 - 或者在有问题的同一台 Windows 计算机上,但它确实是,就这样吧。因为它是一个合适的 Linux 环境,所以我能够在 nemo 中删除它。我本可以发誓昨天同步时这个特定文件没有被拉下来,但今天却拉下来了,我删除了这个小虫子。当我提交并推送,然后在 Windows 计算机上的 Ubuntu 子系统上拉取时,该文件被删除:
dir/to/file > master > git pull
01239e91..452981f2 master -> origin/master
Updating 01239e91..452981f2
Fast-forward
dir/to/file/All-Production.vsdx | Bin 1101177 -> 1100811 bytes
dir/to/file/~$Copy of Full Compilation of Databases for Audit.xlsx | Bin 0 -> 165 bytes
2 files changed, 0 insertions(+), 0 deletions(-)
create mode 100755 dir/to/file/~$Copy of Full Compilation of Databases for Audit.xlsx
..
### I deleted file in GIU (nemo) at this point ###
..
dir/to/file > master > git status
On branch master
Your branch is up to date with 'origin/master'.
Changes not staged for commit:
(use "git add/rm <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
deleted: ~$Copy of Full Compilation of Databases for Audit.xlsx
..
dir/to/file > master > git rm \~\$Copy\ of\ Full\ Compilation\ of\ Databases\ for\ Audit.xlsx
rm 'dir/to/file/~$Copy of Full Compilation of Databases for Audit.xlsx'
dir/to/file > master > git commit -a -m "fixing stupborn ghost "
[master b543cc14] fixing stupborn ghost
1 file changed, 0 insertions(+), 0 deletions(-)
delete mode 100755 dir/to/file/~$Copy of Full Compilation of Databases for Audit.xlsx
dir/to/file > master > git push
Enumerating objects: 9, done.
Counting objects: 100% (9/9), done.
Delta compression using up to 6 threads
Compressing objects: 100% (5/5), done.
Writing objects: 100% (5/5), 425 bytes | 425.00 KiB/s, done.
Total 5 (delta 4), reused 0 (delta 0)
remote: Resolving deltas: 100% (4/4), completed with 4 local objects.
To github.com:my/repo.git
452981f2..b543cc14 master -> master
....
me@wind_mach directory $ git pull
Enter passphrase for key '/home/me/.ssh/id_rsa':
...
452981f2..b543cc14 master -> origin/master
Updating 452981f2..b543cc14
Fast-forward
dir/to/file/~$Copy of Full Compilation of Databases for Audit.xlsx | Bin 165 -> 0 bytes
1 file changed, 0 insertions(+), 0 deletions(-)
delete mode 100755 Dir/to/file/~$Copy of Full Compilation of Databases for Audit.xlsx
所以你有它。