읽기 권한이있는 디렉토리를 나열 할 수없는 이유는 무엇입니까? 디렉토리 d와 파일을 만들었

나는 그 안에 디렉토리 d와 파일을 만들었 f습니다. 그런 다음 해당 디렉토리에 대한 읽기 권한 만 부여했습니다. 나는 이것이 파일을 나열 할 수 있다는 것을 이해해야 하지만 (예 : here ) 할 수는 없습니다.

will@wrmpb /p/t/permissions> ls -al
total 0
drwxr-xr-x   3 will  wheel  102  4 Oct 08:30 .
drwxrwxrwt  16 root  wheel  544  4 Oct 08:30 ..
dr--------   3 will  wheel  102  4 Oct 08:42 d
will@wrmpb /p/t/permissions> ls d
will@wrmpb /p/t/permissions>

쓰기 및 실행 권한을 변경하면 파일을 볼 수 있습니다.

will@wrmpb /p/t/permissions> chmod 500 d
will@wrmpb /p/t/permissions> ls d
f
will@wrmpb /p/t/permissions>

왜 이런거야? MacOS를 사용하고 있습니다.

편집 : @ccorn의 답변과 관련하여 물고기를 type ls사용하고 다음을 제공하는 것이 관련이 있습니다 .

will@wrmpb /p/t/permissions> type ls
ls is a function with definition
function ls --description 'List contents of directory'
    command ls -G $argv
end



답변

몇 가지 준비 사항만으로도 ls더 많은 것을 시도하지 않아야합니다.

$ unalias ls 2>/dev/null
$ unset -f ls
$ unset CLICOLOR

r디렉토리 권한 시연 :

$ ls -ld d
dr--------  3 ccorn  ccorn  102  4 Okt 14:35 d
$ ls d
f
$ ls -l d
ls: f: Permission denied
$ ls -F d
ls: f: Permission denied

전통적인 유닉스 파일 시스템에서 디렉토리는 단순히 (이름, 아이 노드 번호) 쌍의 목록이었습니다. inode 번호는 파일 메타 데이터의 나머지 부분이 저장되는 파일 시스템의 inode 테이블에 대한 색인으로 사용되는 정수입니다.

r디렉토리에 권한이 있습니다 목록 등 파일 형식, 파일 길이, 파일 사용 권한을 얻고, 또는 파일을 여는 인 아이 노드 테이블에 저장된 정보를 그 안에 이름이 있지만 액세스 할 수 있습니다. 이를 위해서는 x디렉토리에 대한 권한 이 필요합니다 .

이유입니다 ls -l, ls -F, ls색상 코드 출력 등으로하지 않고 실패 x의 허가 단순한는 반면, ls성공합니다.

x권한 만, 그 디렉토리 내에서 명시 적으로 이름이 지정됩니다 아이 노드 액세스를 허용 x의 아이 노드 및 디렉토리 항목의 메타 데이터에 대한 액세스를 조회 할 수 있습니다 :

$ chmod 100 d
$ ls -l d/f
-rw-r--r--  1 ccorn  ccorn  0  4 Okt 14:35 d/f
$ ls d
ls: d: Permission denied

따라서, 파일을 열 수 /a/b/c/f또는 메타 데이터, 디렉토리 목록 /, /a, /a/b, 및 /a/b/c부여해야합니다 x권한.

당연히 디렉토리 항목을 작성하려면 wx권한 이 모두 필요합니다 .

$ chmod 100 d
$ touch d/g
touch: d/g: Permission denied
$ chmod 200 d
$ touch d/g
touch: d/g: Permission denied
$ chmod 300 d
$ touch d/g
$

Wikipedia는 파일 시스템 사용 권한 에 대한 기사를 간략하게 소개 합니다 .


답변

디렉토리를 읽으려면 디렉토리를 탐색 할 수 있어야합니다 (x 비트). 따라서 최소한 어떤 방식 으로든 디렉토리에 액세스하려면 rx가 필요합니다.


답변