이해할 수 없는 이상한 행동이 있습니다. 디렉토리의 일부 파일을 나열하고 싶습니다.
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.txt
file2.txt
file3.txt
ls 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
.