既存のディレクトリツリーの下にサブディレクトリを作成しようとしています。重要なサブディレクトリを作成するのがディレクトリの権限だけであるのか、親ディレクトリも作成されるディレクトリの権限に影響を与えるのだろうか。
私はこれをプログラム的に実行するので、広範なシナリオに対処していることを確認する必要があります。
答え1
はい、重要です。ディレクトリを作成するには、親ディレクトリに書き込める必要があります。ディレクトリを作成することはファイルを作成するのと同じです(結局、すべてがファイルです) したがって、親エントリに対する書き込み権限が必要です。また、親ディレクトリにアクセスできる必要があります。つまり、ツリー内のすべてのディレクトリにアクセスする必要があります。
$ sudo tree -pgu
.
└── [drwxr-xr-x terdon terdon] dir1
└── [drwx------ bob bob ] dir2
└── [drwxr-xr-x terdon terdon] dir3
上記の例では、dir2
に属しますbob
。つまり、cd
そのエントリまたはcd
そのサブディレクトリに入れることはできませんdir3
。
$ cd dir1/dir2/
bash: cd: dir1/dir2/: Permission denied
$ cd dir1/dir2/dir3
bash: cd: dir1/dir2/dir3: Permission denied
自分自身に実行アクセス権を付与すると、からdir2
移動できますが、まだ次の場所にファイル/ディレクトリを作成する権限がありません。dir2
dir2/dir3
dir2
$ sudo tree -pgu
.
└── [drwxr-xr-x terdon terdon] dir1
└── [drwx--x--x bob bob ] dir2
└── [drwxr-xr-x terdon terdon] dir3
$ cd dir1/dir2/
$ ls
ls: cannot open directory '.': Permission denied
$ touch file
touch: cannot touch 'file': Permission denied
上記のように、ディレクトリには入れることができますが、読み取りアクセス権がないためコンテンツを一覧表示できず、書き込みアクセス権がないため、何も作成できません。
したがって、ディレクトリ内に新しいファイルまたはディレクトリを作成するには、次の手順を実行する必要があります。
宛先ディレクトリの各親ディレクトリに対して権限を実行します。
宛先ディレクトリに対する実行および書き込み権限。