web-dev-qa-db-ja.com

移動はソースファイルの所有権を保持し、書き込みを許可しません

親切に検討してください:

$ id # Me
uid=100(user1) gid=200(group1) groups=200(group1)

$ ls -l tnsnames.ora # So user1 has only read permission on below file.
-rw-rw-r-- 1 Oracle dba 411024 Jul 28  2010 tnsnames.ora

$ cp tnsnames.ora tnsnames.ora_bak

$ cat tnsnames.ora_bak > tnsnames.ora # No write access
-bash: tnsnames.ora: Permission denied

$ cp -p tnsnames.ora tnsnames.ora_copy # Copy file and preserve mode, ownership, timestamps. Requires Sudo to succeed completely.

$ ls -l tnsnames.ora_copy # Mode and timestamps preserved; ownership not preserved.
-rw-rw-r-- 1 user1 group1 411024 Jul 28  2010 tnsnames.ora_copy

$ mv tnsnames.ora tnsnames.ora_move

$ ls -l tnsnames.ora_move # Move preserves mode, ownership, timestamps.
-rw-rw-r-- 1 Oracle dba 411024 Jul 28  2010 tnsnames.ora_move

$

更新

$ ls -l # As pointed out by @Gilles, the source (which is also the destination here) directory has r-x mode which allows mv to work.
drwxrwxrwx  3 Oracle dba  4096 Aug 11 20:38 Oracle

  1. どのようにmvコマンドを使用してファイルを移動し、モード、所有権、タイムスタンプを保持することができますが、cpで同じことを行うことはできませんか?
  2. また、ファイルへの書き込みアクセス権がない場合、changeの場所(メタデータ) mvを使用したファイルまたは、別の方法で確認することもできます... mvは最初にファイルのコピーを作成し、次に、コピーされたファイルに所有者/グループを設定してソースファイルを削除する権限をどのように取得しますか書き込み権限がありません。

OS/Bash /ユーティリティバージョン情報:

$ echo $Shell
/bin/bash
$ bash --version
GNU bash, version 3.2.25(1)-release (x86_64-redhat-linux-gnu)
...
$ uname -a
Linux server1 2.6.18-371.8.1.el5 #1 SMP Fri Mar 28 05:53:58 EDT 2014 x86_64 x86_64 x86_64 GNU/Linux
$ cp --version
cp (GNU coreutils) 5.97
...
$ mv --version
mv (GNU coreutils) 5.97
...
6
Kent Pawar

mvは、異なるファイルシステム間でファイルを移動しない限り、ファイルのコピーを作成して元のファイルを削除しません。 mvはファイルを移動します。

ファイルを移動するには、ファイルを以前のディレクトリからデタッチし、ファイルを配置するディレクトリにアタッチする権限が必要です。つまり、ソースディレクトリと宛先ディレクトリの両方に対する書き込み(および実行)権限が必要です。ファイル自体を変更したり、ファイルにアクセスしたりすることはないため、ファイルに対する特定の権限は必要ありません。 (アナロジー:キーがない場合でも、ロックされたボックスを移動できます。)

cp -pはファイルの権限を維持できますが、実際にはファイルの所有権を維持できません。ルートとしてcpを実行していないため、自分に属していないファイルや、自分が属しているグループに属していないファイルを作成することはできません。