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?


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.


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


-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

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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.