저는 Linux Application Server 3.2.0-4-amd64 #1 SMP Debian 3.2.41-2+deb7u2 x86_64 GNU/Linux를 사용하고 있습니다. name1.php
, name1.html
, 등이라는 이름의 여러 파일이 포함된 name2.php
디렉토리 로 이동하여 다음을 입력합니다.
$ sudo ls *.*
나는 얻다:
ls: cannot access *.*: No such file or directory
나는 같은 문제를 가지고있다 grep
:
$ grep "TOS.html" *.*
grep: *.*: No such file or directory
왜 그런 겁니까? 이 문제를 어떻게 해결할 수 있나요?
편집 #1:
$ shopt | grep glob
+ grep glob
+ shopt
dotglob off
extglob on
failglob off
globstar off
nocaseglob off
nullglob off
편집 #2:
$ ls -ld;echo --;sudo ls -ld
+ ls --color=auto -ld
drwxr-x--x 16 www-data root 12288 Oct 10 17:08 .
+ echo --
--
+ sudo ls -ld
drwxr-x--x 16 www-data root 12288 Oct 10 17:08 .
답변1
배경
귀하의 문제는 궁극적으로 디렉토리에 대한 다음 권한으로 인해 발생한다고 생각합니다.
drwxr-x--x 16 www-data root 12288 Oct 10 17:08 .
소유자( www-data
)와 그룹( root
) 에는 각각 rwx
및 가 있습니다 r-x
. 하지만 다른 권한은 으로만 설정되어 있으니 참고하세요 --x
.
즉, 이 디렉터리에서 명령을 실행할 수 있지만 이 디렉터리의 내용 목록을 읽거나 실행할 수는 없습니다.
당신의 시나리오
이 디렉터리에서 명령을 실행하면 www-data
다른 사용자가 됩니다. sudo
이 사용자를 UserX라고 부르겠습니다.
쉘이 이 명령을 UserX로 호출하는 경우:
$ sudo ls *.*
그리고 다음을 반환합니다:
ls: cannot access *.*: No such file or directory
UserX의 셸은 모든 파일로 확장을 시도 *.*
하지만 UserX는 이 디렉터리의 내용을 읽을 수 없으므로 아무것도 반환하지 않습니다. 그런 다음 이름이 어떤 텍스트 파일과도 일치할 수 없는 *.*
텍스트를 보냅니다 .sudo ls *.*
*.*
명령 을 실행하려고 하면 grep
동일한 문제가 발생합니다 . 마찬가지로 UserX는 어떤 파일도 읽을 수 없으므로 grep
텍스트 파일을 검색하도록 지시 *.*
하지만 해당 이름의 파일을 찾을 수 없습니다. 따라서 메시지는 다음과 같습니다.
접근 불가.: 해당 파일이나 디렉터리가 없습니다.
그리고
.: 해당 파일이나 디렉터리가 없습니다.
예
귀하와 마찬가지로 다음과 같은 설정이 있다고 가정해 보겠습니다.
$ sudo chown nginx.root /tmp/afolder
$ sudo chmod 751 /tmp/afolder/
$ sudo ls -ld /tmp/afolder/
drwxr-x--x 2 nginx root 4096 Nov 23 04:10 /tmp/afolder/
$ sudo touch /tmp/afolder/fakefile.txt
이제 내 경우에는 "UserX"로 만들어 보겠습니다 saml
.
$ id
uid=500(saml) gid=501(saml) groups=501(saml)
다음 디렉토리로 CD를 이동할 수 있습니다.
$ pwd
/tmp/afolder
하지만 해당 디렉토리의 파일을 나열하려고 하면 다음과 같습니다.
$ ls *
ls: cannot access *: No such file or directory
같은 질문 sudo
:
$ sudo ls -l *.*
ls: cannot access *.*: No such file or directory
작은따옴표로 보호된 확장을 사용하여 셸을 호출하면 *
원하는 결과를 얻을 수 있습니다.
$ sudo bash -c 'ls -l *.*'
-rw-r--r-- 1 root root 0 Nov 23 04:14 fakefile.txt
답변2
이것은 작동합니다:
sudo sh -c 'ls -l *.*'