web-dev-qa-db-ja.com

Linuxのパーミッションと所有者はcpで保持されます

次の動作を理解できません。
/opt/com/internal/someFileの下にsomeFileという名前のファイルがあります
ls -all /opt/com/internal/someFileを実行すると、権限は700 user:userGroupになります

私はルートであり、cp /root/folder/someFile /opt/com/internal/someFileを行います

  1. 上書きするプロンプトが表示されません。何故なの?

  2. 権限は変更されていません。しかし、cp /root/folder/someFile /opt/com/internal/someFileを実行し、ファイルsomeFileが存在しない場合、ファイルはrootではなく、userによって所有されます。どうして?

5
Jim

上書きするプロンプトが表示されません。何故なの?

あなたは自分が何をしているのかを知っているはずだからです。特にrootとしては、ほとんど何でも上書きできるので注意してください。

cp-iオプションを使用して、既存のファイルを上書きする前にプロンプ​​トを取得します。これを常に思い出させたい場合は、cpからcp -iの-​​ エイリアスの作成 を検討してください。

権限は変更されていません。ただし、[…]ファイルsomeFileが存在しない場合、それはrootによって所有され、userによって所有されません。どうして?

コピー先のファイルはすでに存在しているためです。削除されたり、書き直されたりすることはありません。それはまだuserによって所有されています。

ただし、cp-pオプションを確認してください。ソースファイルの属性、つまりモード、所有権、タイムスタンプが保持されます。それ以外の場合、ターゲットファイルのモード属性と所有権属性は残ります(変更を示すタイムスタンプを除く)。

ターゲットファイルがない場合は、ソースファイルの属性をコピーする必要があります。ターゲットファイルから継承できないためです。基本的には新しいファイルを作成するだけで、この場合はrootが所有します。

10
slhck

1)cpは、-i引数が使用されない限り、上書きを要求しません。これは、最初のUNIX以降のデフォルトの動作です。

2) ウィキペディアから :既存のファイルへのファイルの上書きは、既存のファイルを更新モードで開くことによって実行されます。これにより、ファイルのiノードが保持されます。これには書き込みアクセスが必要であり、ターゲットファイルは元々持っていた権限。

2
Sibster