アクセス許可は通常、ファイルのコピー先のディレクトリによって伝達されませんumask
。新しいアクセス許可は、ユーザーのによって制御されます。ただし、ある場所から別の場所にファイルをコピーする場合、ユーザーのumask
ファイルは基本的に無視され、ファイルに対する既存のアクセス許可は保持されるという特別な場合があります。この概念を理解することは、あなたが望むものを得るための鍵です。
したがって、ファイルをコピーして現在の権限を「削除cp
」するには、--no-preserve=all
スイッチを使用して「保持しない」ように指示できます。
例
あなたのような次のファイルがあるとしましょう。
$ mkdir -m 744 somedir
$ touch afile
$ chmod 400 afile
$ ll
total 0
-r--------. 1 saml saml 0 Feb 14 15:20 afile
そして、あなたが確認したように、私cp
たちがそれを使って盲目的にコピーした場合、これは次のようになります:
$ cp afile somedir/
$ ls -l somedir/
total 0
-r--------. 1 saml saml 0 Feb 14 15:20 afile
これを繰り返しましょうが、今回はcp
「権限の削除」を指示します。
$ rm -f somedir/afile
$ cp --no-preserve=all afile somedir/
$ ls -l somedir/
total 0
-rw-rw-r--. 1 saml saml 0 Feb 14 15:21 afile
コピーされたファイルの権限は664に設定されましたが、どこで取得しましたか?
$ umask
0002
私umask
を別のものに変更した場合、このテストを3回繰り返しumask
て、保存されていないものに及ぼす影響を確認できますcp
。
$ umask 037
$ rm somedir/afile
$ cp --no-preserve=all afile somedir/
$ ls -l somedir/
total 0
-rw-r-----. 1 saml saml 0 Feb 14 15:29 afile
権限が664ではなく640になっていることに注意してください。これはによって決定されましたumask
。これは、ファイルを作成するコマンドに、権限の下位5ビットを無効にするよう指示していました...これらの人:(----wxrwx
)。
setfacl
コマンドを試しましたか?その出力は何でしたか?