Eigentümer und Gruppe für den Inhalt einer TAR-Datei zwingen?

21

Ich möchte eine TAR-Datei mit Inhalten eines Eigentümers erstellen: Gruppenpaares, die auf dem System, auf dem die Datei erstellt wird, nicht vorhanden sind.

Hier ist die Richtung, die ich versucht habe:

tar ca --owner='otherowner' --group='othergroup' mydata.tgz mydata

Und wenn ich diesen Befehl ausführe, erhalte ich die folgende Fehlermeldung:

tar: otherowner: Invalid owner
tar: Error is not recoverable: exiting now

Gibt es eine Möglichkeit, tar zu zwingen, den Eigentümer zu akzeptieren: group, obwohl keiner von beiden auf dem System vorhanden ist, auf dem die Datei erstellt wird?

David
quelle
1
Beachten Sie, dass --owner keine von tar unterstützte Option ist. Dies ist ein nicht portierbarer GNUism. Bei star verwenden Sie z. B. den integrierten Befehl find und geben -chown username / userid -chgrp groupname / groupid an.
Schily

Antworten:

19

Linux verwendet keine internen Eigentümer- und Gruppennamen, sondern Nummern - UIDs und GIDs. Benutzer- und Gruppennamen werden aus den Inhalten der Dateien / etc / passwd und / etc / group zur Vereinfachung des Benutzers zugeordnet. Da Sie in keiner dieser Dateien den Eintrag "otherowner" haben, weiß Linux nicht, welche UID und GID einer Datei zugewiesen werden sollen. Versuchen wir stattdessen eine Zahl zu übergeben:

$ tar cf archive.tar test.c --owner=0 --group=0
$ tar -tvf archive.tar 
-rw-rw-r-- root/root        45 2013-01-10 15:06 test.c
$ tar cf archive.tar test.c --owner=543543 --group=543543
$ tar -tvf archive.tar 
-rw-rw-r-- 543543/543543    45 2013-01-10 15:06 test.c

Es scheint zu funktionieren.

Nykakin
quelle
Interessant! Der Befehl tar muss also das System nach den Benutzer- und Gruppennummern abfragen, die mit den Namen übereinstimmen, die ich verwenden wollte. Vielen Dank!
David
1
Ein Hinweis für die anderen über diese kommen: tar automatisch Ausgänge Benutzer / Gruppen - Namen , wenn die Verwendung von -tvfFahnen. Verwenden Sie folgenden Befehl, um die aktuellen Nummern für Dateien in einem Archiv anzuzeigen :$ tar --numeric-owner -tvf archive.tar
David
Tatsächlich kann ich mit meiner tar-Version einen beliebigen Benutzernamen eingeben und in der tar-Datei speichern lassen (standardmäßig jedoch mit meiner numerischen Benutzer-ID). Während der Auflistung erhalten Sie standardmäßig die Benutzernamen, aber die Benutzer-IDs mit dem --numeric-ownerFlag. Interessanter ist, dass Sie mit --owner=name:1234oder beides einstellen können --group=groupname:4711. Quelle: Funktion parse_owner_group des Tar-Quellcodes
Bluehorn
Es ist wahrscheinlich erwähnenswert, dass der tar-Header von ustar (Standard unter BSD und Linux) sowohl numerische UID / GID-Werte als auch Benutzer- und Gruppennamen codiert. Beim Entpacken werden die Namen zuerst verwendet, wenn sie in der Kopfzeile vorhanden sind und mit den auf dem System definierten Benutzern und Gruppen übereinstimmen. Die numerische UID und GID werden nur als Fallback verwendet.
kbolino
1

Fügen Sie die Parameter --no-same-owner --no-same-permissionsmit hinzu tar. Schauen Sie sich die Dokumente an .

Bruno Wego
quelle
2
Diese Optionen werden nur beim Extrahieren von Dateien aus einem Tar-Archiv verwendet, nicht beim Erstellen von Dateien.
Anthony G - Gerechtigkeit für Monica
Du hast recht @AnthonyGeoghegan!
Bruno Wego
-2

Hier ist ein Teil des Codes, um den Benutzer / die Gruppe im laufenden Betrieb durch IDs zu ersetzen:

tar ca --owner="$(id -u ***otherowner***)" --group="$(id -g ***othergroup***)" mydata.tgz mydata
poussma
quelle
5
Nein. Wenn id weiß, wie der Name aufgelöst wird, weiß es auch tar . Die Frage bezieht sich auf einen dem System unbekannten Benutzernamen.
Daniel S