Forzare il proprietario e il gruppo per il contenuto di un file tar?


21

Vorrei creare un file tar con contenuti appartenenti a un proprietario: coppia di gruppo che non esiste sul sistema da cui viene creato il file.

Ecco la direzione che ho provato:

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

E quando eseguo questo comando, ottengo il seguente errore:

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

C'è un modo per forzare tar ad accettare il proprietario: gruppo, anche se nessuno dei due esiste sul sistema da cui viene creato il file?


1
Si noti che --owner non è un'opzione supportata da tar. Questo è un GNUismo non portatile. Con star, ad esempio, usi la ricerca integrata e specifichi -chown username / userid -chgrp nome gruppo / groupid.
schily,

Risposte:


19

Linux non usa nomi di proprietari e gruppi interni ma numeri - UID e GID. I nomi di utenti e gruppi sono mappati dai contenuti di / etc / passwd e / etc / group per comodità dell'utente. Dal momento che non si dispone di una voce di "altro proprietario" in nessuno di questi file, Linux in realtà non sa quale UID e GID dovrebbero essere assegnati a un file. Proviamo invece a passare un numero:

$ 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

Sembra funzionare


Interessante! Quindi il comando tar deve eseguire il polling del sistema affinché l'utente e i numeri di gruppo corrispondano ai nomi che stavo cercando di usare. Grazie!
David,

1
Una nota per gli altri che si imbattono in questo: tar genera automaticamente nomi di utenti / gruppi quando si usano i -tvfflag. Per visualizzare i numeri correnti per i file in un archivio, utilizzare un comando come questo:$ tar --numeric-owner -tvf archive.tar
David

In realtà con la mia versione tar posso inserire qualsiasi nome utente che mi piacerebbe e averlo memorizzato nel file tar (ma con il mio ID utente numerico per impostazione predefinita). Durante la quotazione ottieni i nomi utente per impostazione predefinita ma gli ID utente utilizzano il --numeric-ownerflag. La cosa più interessante è che puoi impostare sia usando --owner=name:1234o --group=groupname:4711. Fonte: funzione parse_owner_group del codice sorgente tar
Bluehorn

Vale probabilmente la pena notare che l'intestazione tar ustar (standard su BSD e Linux) codifica sia i valori numerici UID / GID che i nomi utente e gruppo. Durante il disimballaggio, i nomi vengono utilizzati per primi, se sono presenti nell'intestazione e corrispondono agli utenti e ai gruppi definiti sul sistema. L'UID numerico e il GID verranno utilizzati solo come fallback.
kbolino,


-2

Ecco un pezzo di codice per sostituire l'utente / gruppo con ID al volo:

tar ca --owner="$(id -u ***otherowner***)" --group="$(id -g ***othergroup***)" mydata.tgz mydata

5
No. Se id sa come risolvere il nome, anche Tar lo sa. La domanda riguarda un nome utente sconosciuto al sistema.
Daniel S,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.