답변:
디렉토리의 x 비트는 검색 비트라고도합니다. 실제로 폴더 안에 나열된 파일의 inode에 액세스 할 수 있습니다. 따라서 /home/user/foo/bar.txt에 액세스하려면 bar.txt의 모든 조상에 대한 검색 액세스 권한이 있어야합니다.
페이지에서 인용
디렉토리는 일반 파일과 같은 방식으로 사용되지 않으므로 권한은 약간 (그러나 약간만) 다르게 작동합니다. 디렉토리에있는 파일을 나열하려면 디렉토리에 대한 읽기 권한이 필요하지만 그 안에있는 파일에는 없습니다. 디렉토리에 파일을 추가하거나, 디렉토리에서 파일을 삭제하거나, 파일 이름을 바꾸려면 디렉토리에 대한 쓰기 권한이 필요하지만 파일에 포함되지 않은 파일에 대해서는 쓰기 권한이 필요하지 않습니다. 실행 권한은 디렉토리에 적용되지 않습니다 (디렉토리도 프로그램이 될 수 없음). 그러나 해당 권한 비트는 다른 목적으로 디렉토리에 재사용됩니다.
디렉토리에 CD를 넣으려면 (즉, 일부 디렉토리를 현재 작업 디렉토리로 만들려면) 디렉토리에서 실행 권한이 필요합니다.
디렉토리 내 파일의 inode 정보에 액세스하려면 디렉토리에서 실행이 필요합니다. 디렉토리 내에서 파일의 inode를 읽으려면 디렉토리를 검색해야합니다. 이러한 이유로 디렉토리에 대한 실행 권한을 종종 검색 권한이라고합니다.
많은 일반적인 상황에서 검색 권한이 필요합니다. cat / home / user / foo 명령을 고려하십시오. 이 명령에는 파일 foo에 대한 읽기 권한이 필요합니다. 그러나 /, / home 및 / home / user 디렉토리에 대한 검색 권한이 없으면 cat은 foo의 inode를 찾을 수 없으므로 읽을 수 없습니다! 파일 또는 디렉토리의 inode에 액세스하려면 모든 조상 디렉토리에 대한 검색 권한이 필요하며, inode에 도달 할 수 없으면 파일을 읽을 수 없습니다.
파일 권한 디렉토리 섹션 에서 자세한 내용을 읽으십시오 .
업데이트 : 레오는 매우 좋은 질문을 제기했습니다. inode를 알고 있다면 x 비트가 설정되지 않은 디렉토리에서 파일에 액세스 할 수 있습니까? 나는 그렇게 할 수 없어야한다고 믿는다. 나는 c 프로그램으로 테스트하지 않았지만 편리한 bash 명령을 사용하여 확인했다.
user@user-desktop:~/test$ ls -lart
total 12
drwxr-xr-x 49 user user 4096 2011-11-30 22:37 ..
drwxr-xr-x 3 user user 4096 2011-11-30 22:37 .
drwxr-xr-x 2 user user 4096 2011-11-30 22:38 level1
user@user-desktop:~/test$ ls -lart level1/
total 12
drwxr-xr-x 3 user user 4096 2011-11-30 22:37 ..
drwxr-xr-x 2 user user 4096 2011-11-30 22:38 .
-rw-r--r-- 1 user user 8 2011-11-30 22:38 file1
user@user-desktop:~/test$ stat level1
File: `level1'
Size: 4096 Blocks: 8 IO Block: 4096 directory
Device: 808h/2056d Inode: 95494 Links: 2
Access: (0755/drwxr-xr-x) Uid: ( 1000/ user) Gid: ( 1000/ user)
Access: 2011-11-30 22:46:16.576702105 +0530
Modify: 2011-11-30 22:38:12.386701913 +0530
Change: 2011-11-30 22:46:08.876702102 +0530
user@user-desktop:~/test$ stat level1/file1
File: `level1/file1'
Size: 8 Blocks: 8 IO Block: 4096 regular file
Device: 808h/2056d Inode: 60775 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 1000/ user) Gid: ( 1000/ user)
Access: 2011-11-30 22:38:19.846701917 +0530
Modify: 2011-11-30 22:38:16.366701915 +0530
Change: 2011-11-30 22:38:16.366701915 +0530
user@user-desktop:~/test$ chmod -x level1
user@user-desktop:~/test$ stat level1/file1
stat: cannot stat `level1/file1': Permission denied
user@user-desktop:~/test$ ls -lart level1/
ls: cannot access level1/..: Permission denied
ls: cannot access level1/.: Permission denied
ls: cannot access level1/file1: Permission denied
total 0
-????????? ? ? ? ? ? file1
d????????? ? ? ? ? ? ..
d????????? ? ? ? ? ? .
user@user-desktop:~/test$ cat level1/file1
cat: level1/file1: Permission denied
user@user-desktop:~/test$ find . -inum 95494
./level1
user@user-desktop:~/test$ find . -inum 60775
user@user-desktop:~/test$ find ./level -inum 60775
find: `./level': No such file or directory
user@user-desktop:~/test$ find ./level1 -inum 60775
디렉토리를 요청하기 때문에 다음을 수행하십시오.
읽기 의미 : 내용을 읽습니다 (예 : ls로 나열).
쓰기 수단 : 감독 에게 쓰기. 즉, 파일 또는 하위 디렉토리 생성
실행 수단 : 해당 디렉토리에 입력하십시오.
읽기 및 실행 권한은 디렉토리에 약간 까다로울 수 있습니다.
예를 들어 읽기 권한이 있지만 실행하지 않는 경우 디렉토리의 내용을 나열 할 수는 있지만 삭제할 수는 없습니다. 또한 이름을 알고 있어도 특정 파일이나 디렉토리를 나열 할 수 없습니다.
실행 권한이 있지만 읽을 수없는 경우에는 권한을 삭제하지만 파일을 직접 나열 할 수는 없습니다. 그러나 파일 또는 디렉토리의 이름을 알고 있으면이를 나열 할 수 있습니다.
디렉토리에 대한 실행 권한은 다음을 의미합니다.
이 디렉토리로 들어가서이 디렉토리의 파일에 액세스 할 수 있습니다.
x
디렉토리에 권한 이 없으면 다음을 수행 할 수 없습니다.
cd
)예:
$ ls -ld testdir
drw------- 2 xxxxxx xxxxxx 14 2011-11-29 19:38 testdir
$ cd testdir
bash: cd: testdir: Permission denied
$ cat testdir/a
cat: testdir/a: Permission denied
$ chmod 700 testdir
$ cat testdir/a
Some text.
이 주제에 대한 좋은 소개는 Linux File Permission Confusion pt 2 를 읽으십시오 .
x
권한이 막을 수없는 유일한 것은 해당 디렉토리의 파일 이름 에 액세스하는 것 입니다.
예:
$ ls -ld testdir
drw------- 2 xxxxxx xxxxxx 14 2011-11-29 19:38 testdir
$ ls testdir
ls: cannot access testdir/a: Permission denied
ls: cannot access testdir/b: Permission denied
a b