その中にディレクトリd
とファイルを作成しました。f
その後、自分自身にディレクトリに対する読み取り権限のみを与えました。私はこれがファイルをリストできることを意味することを理解しています(例:ここ)、しかし私はできません。
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
答え1
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
従来のUnixファイルシステムでは、ディレクトリは(名前、inode番号)ペアのリストにすぎません。 inode番号は、残りのファイルメタデータが格納されているファイルシステムのinodeテーブルへのインデックスとして使用される整数です。
ディレクトリ権限のr
許可リスト名前はありますが、inodeテーブルに格納されている情報(ファイルの種類、ファイルの長さ、ファイルの権限などを取得したり、ファイルを開くなど)にはアクセスしません。これを行うには、x
ディレクトリに対する権限が必要です。
そのためls -l
、、ls -F
色ls
で区切られた出力などは許可なく失敗x
してただls
成功します。
このx
権限はinodeアクセスのみを許可します。つまり、ディレクトリに明示的な名前が与えられたら、x
そのinodeを見つけてディレクトリエントリのメタデータにアクセスできます。
$ 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
当然、ディレクトリエントリを作成するには、次w
のx
権限が必要です。
$ 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には記事に簡単な概要があります。ファイルシステム権限。
答え2
ディレクトリを読むには、ディレクトリを参照することもできます(xビット)。したがって、任意の方法でディレクトリにアクセスできるようにするには、少なくともrxが必要です。