我已经全新安装了 Windows 10(内部版本 1803)。我已从 Microsoft Store 安装了 Ubuntu 并启用了 Linux 子系统。我过去曾多次这样做过,但从未遇到过以下问题:c
由于符号链接,我的目录全部搞乱了。以dir
incmd
和ls
in WSL的输出为例:
C:\Users\username>dir
Volume in drive C has no label.
Volume Serial Number is BC00-A6D5
Directory of C:\Users\username
05/25/2018 12:01 AM <DIR> .
05/25/2018 12:01 AM <DIR> ..
05/25/2018 12:01 AM <DIR> 3D Objects
05/25/2018 12:01 AM <DIR> Contacts
05/25/2018 01:19 AM <DIR> Desktop
05/25/2018 12:01 AM <DIR> Documents
05/25/2018 12:01 AM <DIR> Downloads
05/25/2018 12:01 AM <DIR> Favorites
05/25/2018 12:01 AM <DIR> Links
05/25/2018 12:01 AM <DIR> Music
05/25/2018 12:06 AM <DIR> OneDrive
05/25/2018 12:01 AM <DIR> Pictures
05/25/2018 12:01 AM <DIR> Saved Games
05/25/2018 12:01 AM <DIR> Searches
05/25/2018 12:01 AM <DIR> Videos
0 File(s) 0 bytes
15 Dir(s) 88,018,132,992 bytes free
name:/mnt/c/Users/username$ ls
ls: cannot read symbolic link 'Application Data': Permission denied
ls: cannot read symbolic link 'Cookies': Permission denied
ls: cannot read symbolic link 'Local Settings': Permission denied
ls: cannot read symbolic link 'My Documents': Permission denied
ls: cannot read symbolic link 'NetHood': Permission denied
ls: cannot read symbolic link 'PrintHood': Permission denied
ls: cannot read symbolic link 'Recent': Permission denied
ls: cannot read symbolic link 'SendTo': Permission denied
ls: cannot read symbolic link 'Start Menu': Permission denied
ls: cannot read symbolic link 'Templates': Permission denied
3D Objects NTUSER.DAT{c9e9d809-5fd7-11e8-a0cd-4e0bbe2b78ad}.TM.blf
AppData NTUSER.DAT{c9e9d809-5fd7-11e8-a0cd-4e0bbe2b78ad}.TMContainer00000000000000000001.regtrans-ms
Application Data NTUSER.DAT{c9e9d809-5fd7-11e8-a0cd-4e0bbe2b78ad}.TMContainer00000000000000000002.regtrans-ms
Contacts ntuser.dat.LOG1
Cookies ntuser.dat.LOG2
[...]
比较同一目录(左侧为 Ubuntu,右侧为 cmd),您会发现ls
尝试列出不存在的符号链接!我从未遇到过这个问题,也没有更改任何权限或任何内容,所以我不知道发生了什么。谁能帮我这个?
以下是一些可能有用的信息:
坐骑给出
mount
rootfs on / type lxfs (rw,noatime)
sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,noatime)
proc on /proc type proc (rw,nosuid,nodev,noexec,noatime)
none on /dev type tmpfs (rw,noatime,mode=755)
devpts on /dev/pts type devpts (rw,nosuid,noexec,noatime,gid=5,mode=620)
none on /run type tmpfs (rw,nosuid,noexec,noatime,mode=755)
none on /run/lock type tmpfs (rw,nosuid,nodev,noexec,noatime)
none on /run/shm type tmpfs (rw,nosuid,nodev,noatime)
none on /run/user type tmpfs (rw,nosuid,nodev,noexec,noatime,mode=755)
binfmt_misc on /proc/sys/fs/binfmt_misc type binfmt_misc (rw,noatime)
C: on /mnt/c type drvfs (rw,noatime,uid=1000,gid=1000)
然后,
id -u
1000
id -g
1000
我的/etc/wsl.conf
文件一开始不存在,所以我创建了一个;但是,我认为这不是解决问题的关键,因为mount
已经表明c
安装正确。现在是这个
[automount]
enabled = true
我的问题简而言之:在 cmd 中symlinks
运行确认,我的目录中似乎没有。dir
然而,Ubuntu 命令行显示符号链接。这是为什么?哦,另外,我无法删除它们(即使使用sudo rm
),因为权限被拒绝。这有点烦人!
答案1
dir
在 cmd 中运行已确认。
这并没有证实任何此类事情。使用命令/a
的选项dir
。如何dir
在非Unix非Linux操作系统上使用该命令确实超出了本WWW站点的范围。因此,在指出这个问题的基本前提是错误的之后,我将在此停止。
答案2
我注意到如果你使用:
ls --color=tty
在目录 /mnt/c 中,您将收到以下错误消息:
ls: cannot read symbolic link 'Documents and Settings': Permission denied
ls: cannot access 'hiberfil.sys': Permission denied
ls: cannot access 'pagefile.sys': Permission denied
ls: cannot access 'swapfile.sys': Permission denied
但如果您简单地使用/bin/ls
而不带任何参数,您将获得一个干净的目录列表。因此,该命令试图对目录中的文件类型进行着色,从而触发了这些错误消息。
如果将 stderr 重定向到 /dev/null,这也会抑制错误消息:
alias ls='ls --color=tty 2>/dev/null'
并不总是可取的,但它确实可以消除噪音。
答案3
我参加聚会迟到了,但还是想发表评论。看起来这里的问题是ls --color=tty
尝试访问符号链接来决定使用什么颜色,但该链接在 Windows 中无法访问。我可以忽略这些错误,但我想看到由此产生的其他错误,ls
所以简单地这样做alias ls='ls --color=tty 2>/dev/null'
并不能解决问题。相反,我建议使用这个别名:alias ls="ls --color=tty 2> >(grep -v 'ls: cannot read symbolic link.*Permission denied')"
这会在 stderr 中搜索有问题的错误并将其过滤掉。
希望这可以减轻人们的挫败感。