web-dev-qa-db-fra.com

Déplacer préserve la propriété des fichiers source ne permettant pas d'écraser

Veuillez considérer:

$ 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

$

Mise à jour

$ 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. Comment la commande mv peut-elle déplacer le fichier et préserver le mode, la propriété, les horodatages pendant que nous ne pouvons pas faire la même chose avec cp ...?
  2. De plus, si vous n'avez pas accès en écriture à un fichier, comment est-il possible de modifier l'emplacement (métadonnées) du fichier utilisant mv; ou nous pouvons en regarder l'inverse ... Où mv _ _ _ _ _ _ _ va d'abord effectuer une copie du fichier, puis comment obtient-il les droits de définir le propriétaire/le groupe sur le fichier copié et supprimer le fichier source Il n'a pas d'autorisations d'écriture sur ..

Informations sur la version OS/BASH/Utility:

$ 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 _ N'atre pas une copie du fichier et retirez l'original, sauf si vous déplacez le fichier entre différents systèmes de fichiers. mv déplace le fichier.

Afin de déplacer un fichier, vous devez avoir la permission de le détacher dans le répertoire où il était précédemment et de l'attacher au répertoire où vous le mettez. En d'autres termes, vous avez besoin d'une autorisation d'écrire (et d'exécuter) à la fois au répertoire source et au répertoire de destination. Vous n'avez pas besoin d'avoir une autorisation particulière sur le fichier, car vous ne modifiez pas ou n'accédez pas au fichier lui-même. (Analogie: Vous pouvez déplacer une boîte verrouillée autour de même si vous n'avez pas la clé d'ouvrir la boîte.)

cp -p peut et préserve les autorisations du fichier, mais elle ne peut préserver la propriété du fichier en général. Puisque vous n'exécutant pas cp comme root, il ne peut pas créer de fichiers qui ne vous appartiennent pas ou qui n'appartiennent pas à un groupe à laquelle vous appartenez.