누군가 나에게 다음을 설명 할 수 있습니까?
$ 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 명령으로 시도했는데 “permission denied”가 아닌 “no such file”오류가 발생합니다 …
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
답변
*
와일드 카드 확장을 수행 하는 쉘은 입력하는 쉘입니다. 쉘이 디렉토리에있는 파일 목록을 읽을 수있는 권한이 있다면, 그것은 확장 /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/
대신 할 수 있지만 다른 패턴으로 일반화되지는 않습니다.
답변
드문 경우이지만 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
자세한 정보를 확인하십시오 .