cp + ne veut pas écraser les autorisations

23

Comment utilisez-vous la cpcommande sans modifier les autorisations du fichier cible? Par exemple:

cp /tmp/file   /home/file

Je ne veux pas changer chownet ainsi de chgrpsuite /home/file.

David
la source
3
Il n'est pas clair si vous demandez de conserver les autorisations source ou les autorisations cible. Vous avez également inter-sites spammé vers SuperUser.
Tom Shaw,
Pour mémoire, les options de "préservation" se réfèrent à la source . cp -pfait correspondre les attributs cibles (préservant ainsi) les attributs source.
mpersico
1
Je suis juste tombé sur cette page. cp par défaut devrait conserver les permissions des fichiers cibles et user: group car il ouvre la cible en mode mise à jour et conserve son inode. Donc, je ne comprends pas pourquoi les réponses ne l'indiquent pas.
bulldozer

Réponses:

30

Si vous n'avez ouvert le manuel que pourcp ...

Le suivant ne remplacera pas les autorisations de fichiers et la propriété + le groupe:

cp --no-preserve=mode,ownership /tmp/file /home/file

Notez que les privilèges root sont nécessaires si vous souhaitez conserver la propriété et le groupe.

Un extrait du manuel:

  --preserve[=ATTR_LIST]
      preserve   the   specified   attributes   (default:  mode,owner-
      ship,timestamps), if possible  additional  attributes:  context,
      links, xattr, all
Lekensteyn
la source
Pas exactement ce que l'auteur voulait. --no-preserveest logique s'il est utilisé après --preserve(ou ses alias), sinon il n'affecte pas le comportement de cp. L'auteur a voulu conserver le mode fichier d'un fichier cible existant et écraser uniquement son contenu
bassin
Ex: remplacer les clés d'hôte ssh cp --no-preserve=mode,ownership ssh* /etc/ssh/. Cela rend les clés secrètes lisibles dans le monde entier.
bassin
L'explication --preserve de la page de manuel est absurde à
mon humble avis
10

cat fonctionnera aussi:

cat /tmp/file > /home/file
Cakemox
la source
0

Ou vous pouvez utiliser un programme d' installation encore meilleur à partir de coreutils GNU qui a été conçu à cet effet particulier. Veuillez noter qu'il n'est pas en mesure de recurse (pas d'option -R ou -r).

http://www.gnu.org/software/coreutils/manual/html_node/install-invocation.html

lzap
la source
1
Je n'ai pas vu d'interrupteur pour cela pour préserver l'ower ou le groupe de la cible. Forcez-le simplement à une nouvelle valeur.
Pete
0

N'utilisez pas du tout de commutateurs liés aux autorisations, en particulier --no-preserve, car ils se comportent étrangement:

bien:

[il@localhost Downloads]$ sudo cp ssh_host_* /etc/ssh/
[il@localhost Downloads]$ ls -l /etc/ssh
total 604
-rw-r--r--  1 root root     581843 Oct 20  2017 moduli
-rw-r--r--  1 root root       2276 Oct 20  2017 ssh_config
-rw-------  1 root root       3907 Oct 20  2017 sshd_config
-rw-r-----. 1 root ssh_keys    227 Oct  2 12:26 ssh_host_ecdsa_key
-rw-r--r--. 1 root root        172 Oct  2 12:26 ssh_host_ecdsa_key.pub
-rw-r-----. 1 root ssh_keys    411 Oct  2 12:26 ssh_host_ed25519_key
-rw-r--r--. 1 root root        100 Oct  2 12:26 ssh_host_ed25519_key.pub
-rw-r-----. 1 root ssh_keys   1679 Oct  2 12:26 ssh_host_rsa_key
-rw-r--r--. 1 root root        392 Oct  2 12:26 ssh_host_rsa_key.pub

mauvais:

[il@localhost Downloads]$ sudo cp --no-preserve=mode,ownership ssh_host_* /etc/ssh/
[il@localhost Downloads]$ ls -l /etc/ssh
total 604
-rw-r--r--  1 root root     581843 Oct 20  2017 moduli
-rw-r--r--  1 root root       2276 Oct 20  2017 ssh_config
-rw-------  1 root root       3907 Oct 20  2017 sshd_config
-rw-r--r--. 1 root ssh_keys    227 Oct  2 12:27 ssh_host_ecdsa_key
-rw-r--r--. 1 root root        172 Oct  2 12:27 ssh_host_ecdsa_key.pub
-rw-r--r--. 1 root ssh_keys    411 Oct  2 12:27 ssh_host_ed25519_key
-rw-r--r--. 1 root root        100 Oct  2 12:27 ssh_host_ed25519_key.pub
-rw-r--r--. 1 root ssh_keys   1679 Oct  2 12:27 ssh_host_rsa_key
-rw-r--r--. 1 root root        392 Oct  2 12:27 ssh_host_rsa_key.pub
bassin
la source
0

Le cp ne remplace pas les autorisations par défaut. Si vous voulez vous assurer que l'autorisation ne sera pas remplacée, utilisez

cp --preserve=mode,ownership /tmp/file /target_dir_where_file_resides
rok
la source