
たとえば、~ にディレクトリ (temp という名前) を作成し、その中にいくつかのファイルを作成したとします。現在、umask は 0002 ですが、練習のために ~/temp/ の権限を変更しました。
chmod 222 temp
私の知る限り、ディレクトリへの書き込み権限を持つということは、ディレクトリを開いたりその内容を読み取ったりすることはできないが、ディレクトリ内にファイルを追加したり削除したりすることはできるはずだということを意味します。たとえば、次のようにすれば問題なく動作すると思いました:
touch temp/new_file.txt
しかし、これを実行しようとすると、エラーが発生します:
touch: cannot touch 'temp/new_file.txt': Permission denied
なぜこれが期待通りに動作しないのかがわからなかったので、書き込み権限しかない場合にディレクトリで何ができるのか、また、試した方法で新しいファイルを作成しても動作しないのはなぜなのか疑問に思っています。
(上記のコマンドはすべて~で実行されました)
ご協力いただければ幸いです。
答え1
ディレクトリの権限は異なります。
これは完璧な説明ではありませんが、
chmod ( ) のマニュアルページによるとman chmod
:
文字rwxXstは、影響を受けるユーザーのファイルモードビットを選択します:読み取り(r)、書き込み(w)、実行(またはディレクトリを検索)(x)、ファイルがディレクトリであるか、すでに何らかのユーザーに実行権限がある場合にのみ実行/検索する (X)、実行時にユーザーまたはグループ ID を設定する (s)、削除制限フラグまたはスティッキー ビットを設定する (t)。これらの文字の 1 つ以上を使用する代わりに、文字 ugo の 1 つだけを指定することもできます。ugo は、ファイルを所有するユーザーに付与される権限 (u)、ファイルのグループのメンバーである他のユーザーに付与される権限 (g)、および前述の 2 つのカテゴリのどちらにも属さないユーザーに付与される権限 (o) です。
つまり、ディレクトリ内のファイルに書き込むには、まずディレクトリに変更する(実行権限)ファイルを作成する(書き込み権限)