回答:
ディレクトリのxビットは、検索ビットとも呼ばれます。実際には、フォルダー内にリストされているファイルのiノードにアクセスできます。したがって、/ home / user / foo / bar.txtにアクセスするには、bar.txtのすべての祖先に対する検索アクセス権が必要です。
ページから引用
ディレクトリは通常のファイルと同じようには使用されないため、アクセス許可の動作はわずかに(ただしわずかに)異なります。ディレクトリ内のファイルをリストするには、ディレクトリの読み取り権限が必要ですが、その中のファイルに対する権限は必要ありません。ファイルをディレクトリに追加したり、ディレクトリからファイルを削除したり、ファイルの名前を変更したりするには、ディレクトリへの書き込み権限が必要ですが、(おそらく驚くべきことに)内部のファイルに対する権限は必要ありません。実行許可はディレクトリに適用されません(ディレクトリをプログラムにすることはできません)。ただし、その許可ビットは、他の目的でディレクトリに再利用されます。
ディレクトリにcdできるようにする(つまり、一部のディレクトリを現在の作業ディレクトリにする)には、ディレクトリに対する実行権限が必要です。
ディレクトリ内のファイルのinode情報にアクセスするには、実行が必要です。これは、ディレクトリを検索してファイル内のiノードを読み取るために必要です。このため、ディレクトリの実行権限は、多くの場合、検索権限と呼ばれます。
多くの一般的な状況では、検索許可が必要です。コマンドcat / home / user / fooを検討してください。このコマンドには、明らかにファイルfooの読み取り許可が必要です。ただし、/、/ home、および/ home / userディレクトリーに対する検索許可がない限り、catはfooのiノードを見つけることができないため、読み取ることができません!任意のファイル(またはディレクトリ)のiノードにアクセスするには、すべての祖先ディレクトリの検索許可が必要であり、そのiノードに到達できない限り、ファイルを読み取ることはできません。
ファイル許可ディレクトリのセクションで詳細をお読みください。
更新:レオは非常に良い質問をした。iノードがわかっている場合、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
ディレクトリを要求しているため:
readの意味:内容を読む、つまりlsでリストする。
書き込み手段:ディレクターに書き込みます。すなわち、ファイルまたはサブディレクトリの作成。
実行手段:そのディレクトリに入る。
読み取りおよび実行の許可は、ディレクトリに対して少し注意が必要です。
たとえば、読み取り権限はあるが実行できない場合は、ディレクトリの内容をリストできますが、そこにドロップすることはできません。また、名前を知っていても、特定のファイルまたはディレクトリをリストすることはできません。
実行権限はあるが読み取り権限がない場合は、そこにドロップできますが、ファイルを直接リストすることはできません。ただし、ファイルまたはディレクトリの名前がわかっている場合は、それらをリストできます。
ディレクトリの実行許可は次のことを意味します。
このディレクトリにcdして、このディレクトリ内のファイルにアクセスする機能。
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