ls는 "해당 파일이 없습니다"라고 말하지만 왜 그럴까요? [복사]

ls는 "해당 파일이 없습니다"라고 말하지만 왜 그럴까요? [복사]

이해할 수 없는 이상한 행동이 있습니다. 디렉토리의 일부 파일을 나열하고 싶습니다.

sudo find /home/vsts/work/_temp/tmp.Q8K2bSeNVV/root/home/root생산하다:

/home/vsts/work/_temp/tmp.Q8K2bSeNVV/root/home/root/
/home/vsts/work/_temp/tmp.Q8K2bSeNVV/root/home/root/.gnupg
/home/vsts/work/_temp/tmp.Q8K2bSeNVV/root/home/root/.gnupg/trustdb.gpg
/home/vsts/work/_temp/tmp.Q8K2bSeNVV/root/home/root/.gnupg/private-keys-v1.d
/home/vsts/work/_temp/tmp.Q8K2bSeNVV/root/home/root/.gnupg/S.gpg-agent
/home/vsts/work/_temp/tmp.Q8K2bSeNVV/root/home/root/.gnupg/S.gpg-agent.extra
/home/vsts/work/_temp/tmp.Q8K2bSeNVV/root/home/root/.gnupg/pubring.kbx~
/home/vsts/work/_temp/tmp.Q8K2bSeNVV/root/home/root/.gnupg/S.gpg-agent.browser
/home/vsts/work/_temp/tmp.Q8K2bSeNVV/root/home/root/.gnupg/pubring.kbx
/home/vsts/work/_temp/tmp.Q8K2bSeNVV/root/home/root/.gnupg/S.gpg-agent.ssh

그래서 나는 .gnupg 디렉토리가 존재하고 그 안에 파일이 있다는 것을 알고 있습니다.

sudo ls -la /home/vsts/work/_temp/tmp.Q8K2bSeNVV/root/home/root생산하다:

total 12
drwx------ 3 root root 4096 Sep 21 14:54 .
drwxr-xr-x 3 root root 4096 Aug 24 18:30 ..
drwxr-xr-x 3 root root 4096 Sep 21 14:54 .gnupg

따라서 디렉토리 자체에는 rwx 권한이 있습니다.

그러나 명령은 다음을 sudo ls -la /home/vsts/work/_temp/tmp.Q8K2bSeNVV/root/home/root/.gnupg/*제공합니다.

ls: cannot access '/home/vsts/work/_temp/tmp.Q8K2bSeNVV/root/home/root/.gnupg/*': No such file or directory

흔적을 계속해서 확인했지만 아무런 문제가 없었습니다. rwx 권한과 루트 수준 액세스 권한이 있습니다. 이 디렉토리를 나열하지 못하게 하는 또 다른 요인은 무엇입니까?

나의 최종 목표는 하나를 만드는 것이었지만 chmod 600 /home/vsts/work/_temp/tmp.Q8K2bSeNVV/root/home/root/.gnupg/*그것 역시 실패했습니다. 하지만 지금은 ls를 선택하고 싶습니다.

편집 : 방금 나에게 충격을 받았습니다. 이것은 파일 글로빙과 관련이 있습니까? * sudo 전에 확장하면 루트 액세스가 불가능합니까?

답변1

올바르게 지적했듯이 확장 순서가 문제의 원인입니다. 파일 이름과 전체적으로 관련된 단계는 "파일 이름 확장"입니다. 확장 측면에서는 상당히 늦었지만(참조:여기예를 들어) 실행됩니다.앞으로실제로 명령이 호출됩니다. 이는 예를 들어 , 및 가 ls *포함된 디렉토리에서 실제로 호출된다는 것을 의미합니다 .file1.txtfile2.txtfile3.txtls file1.txt file2.txt file3.txt

.gnupg이제 문제는 호출 사용자에게 디렉터리에 들어가는 데 필요한 권한이 없다는 것입니다 . 따라서 파일 이름 glob의 확장이 *실패합니다. 이 경우가 아니면특정 셸 옵션 설정, *유지됩니다단어ls쉘이 파일에 대한 명령 실행을 시도하도록 명령줄에서문자 그대로*. 따라서 오류 메시지

cannot access '/home/vsts/work/_temp/tmp.Q8K2bSeNVV/root/home/root/.gnupg/*'

*보시다시피, inside라는 이름의 파일에 액세스하려고 합니다 /home/vsts/work/_temp/tmp.Q8K2bSeNVV/root/home/root/.gnupg/.

대신 관련 작업을 수행하는 셸 스크립트를 작성한 root다음 sudo. 어디에서나 액세스할 수 있는 경로(예: )에 스크립트를 배치해야 합니다 /usr/local/bin.

관련 정보