"ls"가 작동하는데도 "권한 거부" 오류가 발생합니까? [복사]

"ls"가 작동하는데도 "권한 거부" 오류가 발생합니까? [복사]

권한 비트가 있는 디렉토리가 있습니다 r.

dr-------- 3 robert robert 4096 2017-12-17 03:47 dir

이 디렉터리에는 두 개의 파일과 디렉터리가 있습니다.

file 1.txt  file 2.txt  subdir

ls dir계정에서 명령을 실행하면 robert디렉터리 내용 옆에 오류 메시지가 표시됩니다.

ls: cannot access dir/file 1.txt: Permission denied
ls: cannot access dir/file 2.txt: Permission denied
ls: cannot access dir/subdir: Permission denied
file 1.txt  file 2.txt  subdir

ls디렉토리 내용은 정상적으로 표시되는데 오류가 표시되는 이유는 무엇입니까 ?

답변1

ls디렉토리 자체에서 readdir()(또는 )를 호출하는 것은 디렉토리를 "읽는" 것과 같습니다. 일부 유닉스에서는 마치 디렉토리가 파일인 것처럼 getdents()에 대한 실제 호출로 이것을 구현한다고 생각합니다 . read()이는 디렉토리에 대한 읽기 액세스 권한이 있기 때문에 작동하지만 파일 이름만 제공합니다.

그 외에도 ls파일 유형을 찾고자 하는 경우가 많습니다(다른 유형을 다른 색상으로 표시하거나 뒤에 슬래시 및 별표를 추가하는 등 ls -F). 그러나 찾기 유형에는 일반적으로 stat()파일 자체 에 대한 호출이 필요하며 +x실제로 파일을 여는 데 필요한 것과 동일한 방식으로 디렉터리에 대한 access() 권한이 필요합니다. 그리고 당신은 그것을 가지고 있지 않습니다.

관련 정보