한 명령은 작동하고 다른 명령은 작동하지 않는 이유는 무엇입니까? 원격으로 관련된 기사를 찾았지만 이해할 수 없습니다.
$ sudo ls -la /tmp/restricted
total 12
drwxr-x---. 2 root root 42 Mar 17 17:40 .
drwxrwxrwt. 12 root root 12288 Mar 17 17:37 ..
-rwxrwxr-x. 1 root tms 0 Mar 17 17:22 foo1
-rwxrwxr-x. 1 root tms 0 Mar 17 17:22 foo2
-rwxrwxr-x. 1 root tms 0 Mar 17 17:22 foo3
$ sudo ls -a /tmp/restricted/foo*
ls: cannot access /tmp/restricted/foo*: No such file or directory
/tmp/restricted에 대한 권한을 750이 아닌 755로 변경하면 두 명령이 모두 성공합니다.
$ sudo chmod 755 /tmp/restricted/
$ sudo ls -la /tmp/restricted
total 12
drwxr-xr-x. 2 root root 42 Mar 17 17:40 .
drwxrwxrwt. 12 root root 12288 Mar 17 17:37 ..
-rwxrwxr-x. 1 root tms 0 Mar 17 17:22 foo1
-rwxrwxr-x. 1 root tms 0 Mar 17 17:22 foo2
-rwxrwxr-x. 1 root tms 0 Mar 17 17:22 foo3
$ sudo ls -a /tmp/restricted/foo*
/tmp/restricted/foo1 /tmp/restricted/foo2 /tmp/restricted/foo3
답변1
을 실행할 때 sudo ls -la /tmp/restricted
루트 ls
로 실행하고 에 액세스할 수 있습니다 /tmp/restricted
.
을 실행하면 sudo ls -a /tmp/restricted/foo*
셸(루트로 실행되지 않음)이 확장을 시도합니다 /tmp/restricted/foo*
. 귀하의 경우에는 주장을 무시할 수 없습니다. ls
인수를 사용하여 루트로 실행하면 /tmp/restricted/foo*
해당 이름의 파일이 존재하지 않으므로 표시되는 오류 메시지와 함께 실패합니다.
쉘이 glob을 사용하지 않도록 강제하면 동일한 오류가 나타날 수 있습니다( 현재 디렉토리에 ls "*"
실제로 이름이 지정된 파일이 없는 경우).*