Linux 'ls' 명령 및 디렉터리 권한 - "/tmp/restricted/foo*에 액세스할 수 없습니다: 해당 파일이나 디렉터리가 없습니다."

Linux 'ls' 명령 및 디렉터리 권한 - "/tmp/restricted/foo*에 액세스할 수 없습니다: 해당 파일이나 디렉터리가 없습니다."

한 명령은 작동하고 다른 명령은 작동하지 않는 이유는 무엇입니까? 원격으로 관련된 기사를 찾았지만 이해할 수 없습니다.

$ 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 "*"실제로 이름이 지정된 파일이 없는 경우).*

관련 정보