ls /usr/bin
给出错误信息:
ls: reading directory '/usr/bin': Permission denied
。因此wbash.exe
,bash-completion 和 eshell-completion 会失败或给出不完整的结果。我希望它能正常工作。
确实有效的方法:
/usr/bin $ ls -l emacs
lrwxrwxrwx 1 root root 23 2017-07-31 17:16 emacs -> /etc/alternatives/emacs
/usr/bin $ ls -l gcc-5
-rwxr-xr-x 1 root root 915736 2017-09-14 06:01 gcc-5
/usr/bin $ ls -ld /usr/bin
drwxr-xr-x 0 root root 512 2017-12-19 09:45 /usr/bin
/usr/bin $ ls -ld /usr/sbin
drwxr-xr-x 0 root root 512 2017-12-19 09:45 /usr/sbin
/usr/bin $ ls -ld /
drwxr-xr-x 0 root root 512 2017-11-17 10:23 /
/usr/bin $ ls -ld /usr
drwxr-xr-x 0 root root 512 2017-03-30 11:55 /usr
Windows 版本为:Windows 10(64 位),版本 1703(内部版本 15063.786)
sbin
可以毫无问题地列出目录,并且通过 WindowsExplorer 可用的所有窗口设置与bin
的%USERPROFILE%\AppData\Local\lxss\rootfs\usr
相同sbin
。
命令icacls.exe bin
和icacls.exe sbin
给出%USERPROFILE%\AppData\Local\lxss\rootfs\usr
的答案完全相同(直到第一个单词bin
forbin
和sbin
for sbin
)。因此它似乎与额外属性无关。此外,命令icacls.exe bin /verify
和icacls.exe sbin /verify
不指示任何错误。
ubuntu 是否有一些与安全相关的功能(我不知道)禁止我列出 的目录内容/usr/bin
?(在这种情况下,如果它不禁止列出 ,那就很奇怪了/usr/sbin
。)
答案1
这看起来很像是权限问题。
由于您已验证问题不在于 Windows,因此该问题在于 WSL 内部设置,它模拟了 Windows 上本身不存在的 Linux 权限。
我不知道 WSL 究竟是如何模拟 Linux 权限的。如果它使用 Windows 的 ACL 机制,你可以通过以下方式重置它们:
icacls %localappdata%\lxss /reset /T /C
如果这没有帮助,并且不更好地了解如何实现这些权限,我建议重新安装 WSL:
备份您的数据
卸载 Ubuntu 环境但保留主文件夹,然后使用以下命令重新安装 WSL:
lxrun /uninstall lxrun /install
如果这没有帮助,请通过输入以下命令完全重新安装 Ubuntu 环境,包括删除主文件夹:
lxrun /uninstall /full lxrun /install
在上述两个命令之间,检查文件夹
%localappdata%\lxss
是否为空。如果不是,请将其内容移动到临时存储中,并在不再需要时删除。
答案2
在 cygwin 下没有权限问题$HOME/AppData/Local/lxss/rootfs/usr/bin
,并且我在 cygwin 下对 wsl 的 Playground 文件夹进行了一些测试。这让我找到了以下解决方案。
在 cygwin 的 bash 中我进入$HOME/AppData/Local/lxss/rootfs/usr
并运行以下命令:
find bin -mindepth 1 -maxdepth 1 -printf "cp -a %p fix/%p\n" > /temp/fix.sh
这会在 cygwin 和 wsl 通过符号链接共享的/temp/fix.sh
文件夹中创建了一个脚本。/temp
我wbash
进入/usr/
,创建文件夹fix
和fix/bin
,运行脚本,然后将目录移动fix/bin
到bin-fix
。
cd /usr
mkdir -p fix/bin
. /temp/fix.sh
mv fix/bin bin-fix
因此,wbash
它告诉我它有权限问题。好的,我接受了这一点,并作为此过程的最后一步bin/head
重新安装(见下文)。接下来,我关闭了所有应用程序和它本身,然后返回到 cygwin,文件夹仍然打开。coreutils
wbash
wbash
usr
我移开了那里bin
并将其重新命名bin-fix
为bin
。
mv bin bin.old
mv bin-fix bin
我重新启动wbash
后,一切运行正常ls /usr/bin
。
coreutils
正如我上面提到的,我最后一步重新安装了:
sudo aptitude reinstall coreutils