web-dev-qa-db-ja.com

コピー先のディレクトリの権限を継承したファイル?

ユーザーの読み取り権限のみを持つホームディレクトリにファイルを作成しました(r-- --- ---)。このファイルを別のディレクトリにコピーしたい/etc/test/には、744(rwx r-- r--)。コピーしているファイルがコピー先のフォルダーの権限を継承できるようにする必要があります。これまでのところ、ファイルをコピーするときのファイル権限は同じです(r-- --- ---)。 setfaclコマンドを試しましたが、うまくいきませんでしたか?助けてください。

PS。 chmod -r /etc/test/時間の経過とともにこのフォルダーにコピーされるファイルが多く、ファイルがコピーされるたびにchmodコマンドを実行したくないためです。

9
LUUUUUUUUUUUUU

アクセス許可は通常、ファイルのコピー先のディレクトリによっては伝達されません。新しいアクセス許可は、ユーザーのumaskによって制御されます。ただし、ある場所から別の場所にファイルをコピーする場合、ユーザーのumaskは基本的に無視され、ファイルに対する既存のアクセス許可が保持されるという特別な場合があります。この概念を理解することは、あなたが望むものを得るための鍵です。

したがって、ファイルをコピーして現在の権限を「削除」するには、--no-preserve=allスイッチを使用してcpに「保持しない」ように指示できます。

あなたのような次のファイルがあるとしましょう。

$ 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)。

14
slm