実際、私は「ディレクトリへの書き込み権限で正確に何ができますか?」というより一般的な質問をしたいと思いました。しかし、具体的な例を挙げて、この問題に対処します。
緊急の場合は質問が長くなります。太字で読む- 主要部分を覆う必要があります。
さまざまなソース(良い質問、もう一つ、グリマウル) ディレクトリ権限について次のように言います。
r、read - ディレクトリ内容の読み取り(内部ファイル名)
w、書き込み - ディレクトリの属性(変更時間など)を変更し、ディレクトリにエントリを作成/名前変更/削除します。
x、検索 - 内部のファイルにアクセスするには、ファイルのインデックスノードにアクセスできるため、実際のコンテンツにアクセスできます。
私の問題は説明にありますw
。どのディレクトリ属性にアクセスできますか?書き込み専用権限を持つディレクトリでは、ファイルを作成/名前変更/削除することはできません。:ディレクトリ(tdir/
)を生成し、その中にファイル()を生成しました。afile
,,,,, chmod -x-r tdir/
-- ディレクトリに対する権限も設定しないと、権限が拒否され、すべて失敗しました。mv tdir/afile tdir/af
rm tdir/afile
touch tdir/newfile
x
これだけでは、x
ディレクトリ内でファイルを作成/名前変更/削除する権限は付与されません。
これには以下が必要ですx
。w
。
ただし、touch tdir
ディレクトリの変更時間は変わりますw
。
質問に合わせて上記のソースをこのように変更します。ディレクトリを使用するとr
ファイル名を表示できますが、実際のファイル(inode)はx
ファイルのinodeへのアクセスを提供しません(つまり、その権限を表示できることを意味します)。 、これによりコンテンツにアクセスできますが、まだディレクトリ内のものを変更することはできません。ディレクトリは実際には一種のファイルなので、その内容を変更するには権限が必要ですw
。
したがって、ディレクトリの内容を変更するにはw
権限が必要です。変更にディレクトリ内のファイルのinodeが必要な場合は、x
それも必要です。
以下を使用してディレクトリ内のファイルを削除できない理由を説明しますw
。ファイルを削除するときは、inodeのリンク数を1つ減らす必要があります。 inodeを知る必要があります。したがって、x
ディレクトリが必要です。。
ところで、なぜx
ファイルを作成し(inodeを公開せずにファイルを生成するようにシステムに要求できますか?)、ファイルの名前を変更または移動する必要があります(ファイルを移動するときは、何も変更せずにレコードのみを変更します)。ディレクトリ内とそのinodeの数?)?
たぶんこれは単なる実装ですか?つまり、ファイル名を変更または生成するために実際にはinodeは必要ありません。ファイル名とw
権限のみが必要ですが、inodeとファイル名はディレクトリ内のレコードを構成するため、ファイル名の変更=レコードの変更=アクセス方法のiノード。
もしそうなら、ディレクトリには変更時間、権限、ファイル履歴に加えて他のどの属性がありますか?ディレクトリで変更できる他の項目は何ですかw
?
答え1
一部のコンテンツではw権限が必要です。
はい。
しかし、ファイルを作成し(システムにinodeを公開せずにファイルを生成するように要求できますか?)、ファイル名を変更または移動する(ファイルを移動するときに何も変更せずにファイル名のみを変更するにはxが必要です)理由は何ですか?)ディレクトリ内とそのinodeの数を記録しますか?
それ以外の場合は、x
ディレクトリ自体にのみ影響を与える可能性があります。外部からディレクトリを表示できます。それ以外の場合、x
ディレクトリエントリはユーザーの範囲外です。ディレクトリ内のエントリを追加、削除、または変更(名前の変更など)するには、そのエントリにアクセスできる必要があります。
ファイルの権限によって、ファイルの内容で実行できる操作が決まります。ディレクトリエントリはディレクトリの内容であるため、ディレクトリ権限はファイルのディレクトリエントリとして実行できる操作を決定します。
ディレクトリへの書き込み権限を使用すると、エントリを作成および削除できます。名前の変更は、1つのアイテムをアトミックに生成し、別のアイテムを削除すると見なされます。それ以外の場合、ディレクトリには通常のファイルと同じメタデータがあります。書き込み権限を使用すると、ディレクトリの最後の変更と最後のアクセスタイムスタンプを変更することもできます。ディレクトリの権限、グループ所有権、またはアクセス制御リスト(サポートされている場合)を変更するには、そのリストが必要です。ユーザーの所有権を変更するには、ほとんどのUNIXバリアントにはrootが必要です。