cp + möchte Berechtigungen nicht überschreiben

23

Wie können Sie den cpBefehl verwenden, ohne die Berechtigungen der Zieldatei zu ändern? Beispielsweise:

cp /tmp/file   /home/file

Ich will mich nicht ändern chownund chgrpweiter /home/file.

David
quelle
3
Es ist nicht klar, ob Sie die Quell- oder Zielberechtigungen beibehalten möchten. Sie haben auch Cross-Site-Spam an SuperUser gesendet.
Tom Shaw
Für die Aufzeichnung beziehen sich die "Erhaltungs" -Optionen auf die Quelle . cp -pLässt die Zielattribute mit den Quellattributen übereinstimmen (wodurch sie erhalten bleiben).
mpersico
1
Ich bin gerade auf diese Seite gestoßen. cp sollte standardmäßig die Berechtigungen für Zieldateien und user: group beibehalten, da es das Ziel im Aktualisierungsmodus öffnet und seinen Inode beibehält. Deshalb ist mir nicht klar, warum die Antworten dies nicht anzeigen.
Bulldozer

Antworten:

30

Wenn Sie nur das Handbuch fürcp ...

Der nächste überschreibt nicht die Dateiberechtigungen und Eigentumsrechte + Gruppenmitgliedschaft:

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

Beachten Sie, dass Root-Rechte erforderlich sind, wenn Sie Eigentümer und Gruppenmitgliedschaft beibehalten möchten.

Ein Auszug aus dem Handbuch:

  --preserve[=ATTR_LIST]
      preserve   the   specified   attributes   (default:  mode,owner-
      ship,timestamps), if possible  additional  attributes:  context,
      links, xattr, all
Lekensteyn
quelle
Nicht genau das, was der Autor wollte. --no-preservemacht Sinn, wenn es nach --preserve(oder seinen Aliasen) verwendet wird, sonst hat es keinen Einfluss auf das Verhalten von cp. Der Autor wollte den Dateimodus einer vorhandenen Zieldatei beibehalten und nur deren Inhalt überschreiben
Becken
Beispiel: Ersetzen Sie die SSH-Host-Schlüssel cp --no-preserve=mode,ownership ssh* /etc/ssh/. Dadurch sind die geheimen Schlüssel weltweit lesbar.
Becken
Die Manpage --preserve Erklärung ist meiner Meinung nach unsinnig, da es nicht klar macht, was zu bewahren: Die Quell- oder
Zielattribute
10

cat wird auch funktionieren:

cat /tmp/file > /home/file
Cakemox
quelle
0

Oder Sie können ein noch besseres Installationsprogramm von GNU coreutils verwenden, das für diesen speziellen Zweck erstellt wurde. Bitte beachten Sie, dass es nicht wiederkehren kann (keine Option -R oder -r).

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

lzap
quelle
1
Ich habe keinen Schalter dafür gesehen, um die Blüte oder Gruppe des Ziels zu erhalten. Erzwinge es einfach auf einen neuen Wert.
Pete
0

Verwenden Sie überhaupt keine berechtigungsbezogenen Schalter, insbesondere --no-preserve, weil sie sich seltsam verhalten:

gut:

[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

Schlecht:

[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
Becken
quelle
0

Der cp überschreibt standardmäßig keine Berechtigungen. Wenn Sie sicherstellen möchten, dass die Berechtigung nicht überschrieben wird, verwenden Sie

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