누군가 나에게 다음 사항을 설명해 줄 수 있나요?
$ ls -ld /temp/sit/build/
dr-xr-s--- 3 asdf qwer 4096 Jan 31 2012 /temp/sit/build/
$ ls -ld /temp/sit/build/*
ls: /temp/sit/build/*: Permission denied
분명히 여기서는 별표를 사용할 수 없습니다. sudo 명령을 사용해 보았지만 "권한이 거부되었습니다" 대신 "해당 파일 없음" 오류가 발생합니다...
sudo ls -l /temp/sit/build/*
ls: /temp/sit/build/batch*: No such file or directory
하지만 *를 사용하지 않으면 결국 작동합니다.
sudo ls -l /temp/sit/build/
total 4
dr-xr-s--- 11 asdf qwer 4096 Oct 3 23:31 file
답변1
와일드카드 확장을 수행하는 쉘은 *
와일드카드 문자를 입력하는 쉘입니다. 쉘에 디렉토리의 파일 목록을 읽을 수 있는 권한이 있는 경우 인수를 사용하여 /temp/sit/build/*
으로 확장 하고 를 실행합니다 . 셸이 일치하는 항목을 찾을 수 없는 경우 (일치 항목이 없거나 셸에 일치 항목을 볼 수 있는 권한이 없기 때문에) 패턴을 그대로 두고 인수 , 및 를 사용하여 호출합니다 ./temp/sit/build/file
sudo
ls
-l
/temp/sit/build/file
/temp/sit/build/*
sudo
ls
-l
/temp/sit/build/*
라는 이름의 파일이 없기 때문에 /temp/sit/build/*
해당 ls
이름을 파일에 전달하면 명령이 오류를 발생시킵니다. ls
와일드카드를 확장하는 것이 아니라 쉘의 작업이라는 점을 기억하세요 .
읽기 권한이 없는 디렉토리에서 와일드카드 확장을 수행하려면 sudo
호출이 아닌 에 의해 시작된 셸에서 확장이 발생해야 합니다 sudo
. sudo
셸은 자동으로 시작되지 않으며 이를 명시적으로 수행해야 합니다.
sudo sh -c 'ls -l /temp/sit/build/*'
물론 여기에서 그렇게 할 수 있지만 sudo ls -l /temp/sit/build/
다른 모드로 일반화되지는 않습니다.
답변2
드문 경우지만 쉘에 와일드카드가 비활성화되어 있는지 다시 확인해야 합니다. 이로 인해 No such file or directory
와일드카드( )를 사용하여 파일을 나열하려고 할 *
때 문제가 발생할 수 있습니다.
예를 들어:
$ ls /tmp/sit/build/*
/tmp/sit/build/file
$ set -f
$ ls /tmp/sit/build/*
ls: cannot access /tmp/sit/build/*: No such file or directory
$ set +f
$ ls /tmp/sit/build/*
/tmp/sit/build/file
자세한 내용을 확인하세요 help set
.