`ls`は、WSLに存在しないシンボリックリンクをリストしようとします。

`ls`は、WSLに存在しないシンボリックリンクをリストしようとします。

Windows 10(ビルド1803)を新しくインストールしました。 Microsoft StoreからUbuntuをインストールし、Linuxサブシステムを有効にしました。私は過去にこれを何度も実行しましたが、cシンボリックリンクのために私のディレクトリがすべて混乱する問題を経験したことはありません。dirincmdlsin 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

dircmdの実行が確認されました。

これはそのようなことを確認しません。コマンド/aのオプションを使用してくださいdir。 Unix以外のLinux以外のオペレーティングシステムでこのコマンドを使用する方法は、dir実際にこの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で問題のあるエラーを検索してフィルタリングします。

これにより、人々の苦情が解消されることを願っています。

関連情報