web-dev-qa-db-ja.com

ファイルの名前を変更するために親ディレクトリで実行権限が必要なのはなぜですか

Linux/Unixファイルシステムでは、ファイルの読み取りまたは書き込みに親フォルダーの実行権限が必要な理由を理解しています。実行権限を使用すると、ファイルのiノードにアクセスできます。これがないと、アクセスできません。ファイルの内容。

ただし、ファイルの名前を変更する(実際には削除する)場合は、リスト内のファイルの名前を変更するだけで済みます。これにより、iノードにアクセスする必要はありません。では、ファイルの名前を変更するために実行ビットが必要なのはなぜですか。書き込み権限で十分なはずです。

これは、読み取りアクセスと対称的ではないようです:with r--アクセス許可、ディレクトリでlsを実行し、そのディレクトリ内のファイル名のリストにアクセスできます。 iノードにアクセスしていないため、実行する必要はありません。同様に、-w-、ファイル名のリストを変更できるはずです(iノードにもアクセスする必要はありません)が、できないのはなぜですか?

6
Flavien

ディレクトリの実行権限の意味は、そのディレクトリ内のファイル名を検索する機能です。もちろん、ファイル名を正常に検索すると、iノード番号への参照が生成されますが、実行権限はiノード自体とは関係ありません。

ディレクトリに対する実行権限がないと、そのディレクトリ内のサブディレクトリに統計、オープン、名前変更、削除、または下降することはできません。実行できる唯一のことは、存在するファイル名のリストを確認することです。次に、読み取り権限がある場合に限ります(読み取りは実行できませんが、ディレクトリに対して持つ奇妙な権限のセットです)。

ディレクトリにrw-があるかどうかを検討してください。ファイル名fooがこのディレクトリ内に存在することを知っています。それを削除するには、それを検索する必要があり、iノードにアクセスする必要もあります(リンク数を減らすため)。さらに言えば、それがディレクトリであるかどうかを判断するには、iノードにアクセスする必要があります(ディレクトリの場合、unlinkは失敗し、rmdirは成功するはずであり、逆の場合はその逆です。ディレクトリではありません)。しかし、あなたはそれを調べることはできません。

4
Celada

T実行ビットを使用すると、影響を受けるユーザーが入力し、ファイルとディレクトリの属性と内部のディレクトリにアクセスして変更できます。他のファイルシステムのLinuxコマンドを実行する権限が必要な場合がありますサブディレクトリとファイルで「実行」されるかどうかは、「実行ビット」によって決定されます。実行可能ファイルの実行と混同しないように、iノードファイル番号へのリンクまたはファイル名とシンボリックリンクに関連付けられたメタデータを編集するための「実行可能な意思決定」特権を与えたことを意味します。

機能のバリエーションには、書き込みを無効にして実行することが含まれます。つまり、ファイルの名前を変更することはできますが、内容を編集することはできません。または、書き込みは有効ですが、無効を実行します。その逆も同様です。

「各ディスクドライブには、いくつかのファイルシステムが含まれています。ファイルシステムは、いくつかのシリンダーグループで構成されています。各シリンダーグループには、inodesとデータがあります。

 A file system is described by its super-block, which in turn describes
 the cylinder groups.  The super-block is critical data and is replicated
 in each cylinder group to protect against catastrophic loss.  This is
 done at file system creation time and the critical super-block data does
 not change, so the copies need not be referenced further unless disaster
 strikes.

 Addresses stored in inodes are capable of addressing fragments of
 `blocks'. File system blocks of at most size MAXBSIZE can be optionally
 broken into 2, 4, or 8 pieces, each of which is addressable; these pieces
 may be DEV_BSIZE, or some multiple of a DEV_BSIZE unit."

その他の興味深い詳細; http://linux.about.com/library/cmd/blcmdl2_stat.htm

「ディレクトリに対する実行(書き込みではない)権限があり、その中にあるファイルに対する書き込み権限がある場合、ファイルを削除することはできません(リストから削除する必要があるため)。ただし、その内容を消去することはできます。これは、viを使用して開いてすべてを削除できるテキストファイルです。ファイルは引き続き存在しますが、空になります。」 ...ボールドリック

stat -f "%Sp-> owner =%SHp group =%SMp other =%SLp"を使用して、ACL統計を表示します