`ls`는 WSL에 존재하지 않는 기호 링크를 나열하려고 시도합니다.

`ls`는 WSL에 존재하지 않는 기호 링크를 나열하려고 시도합니다.

Windows 10(빌드 1803)을 새로 설치했습니다. Microsoft Store에서 Ubuntu를 설치하고 Linux 하위 시스템을 활성화했습니다. 나는 과거에 이 작업을 여러 번 수행했지만 c심볼릭 링크로 인해 내 디렉토리가 모두 엉망이 되는 문제를 겪은 적이 없습니다. dirin cmdlsin 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에서 문제가 있는 오류를 검색하여 필터링합니다.

이를 통해 사람들의 불만이 해소되기를 바랍니다.

관련 정보