Zmusić właściciela i grupę do zawartości pliku tar?

21

Chciałbym utworzyć plik tar z zawartością należącą do właściciela: pary grup, które nie istnieją w systemie, z którego tworzony jest plik.

Oto kierunek, który próbowałem:

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

Podczas uruchamiania tego polecenia pojawia się następujący błąd:

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

Czy istnieje sposób zmuszenia tar do zaakceptowania właściciela: grupy, nawet jeśli żadne z nich nie istnieje w systemie, z którego tworzony jest plik?

David
źródło
1
Zauważ, że - właściciel nie jest opcją obsługiwaną przez tar. To jest nieprzenośny GNUism. W przypadku gwiazdy używasz np. Wbudowanego find i podaj -chown nazwa użytkownika / userid -chgrp nazwa_grupy / groupid.
schily

Odpowiedzi:

19

Linux nie używa wewnętrznie nazw właścicieli i grup, ale numery - UID i GID. Nazwy użytkowników i grup są mapowane z zawartości plików / etc / passwd i / etc / group dla wygody użytkownika. Ponieważ nie masz wpisu „inny właściciel” w żadnym z tych plików, Linux tak naprawdę nie wie, który UID i GID należy przypisać do pliku. Spróbujmy zamiast tego podać liczbę:

$ 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

Wydaje się, że działa.

Nykakin
źródło
Ciekawy! Zatem polecenie tar musi sondować system, aby numery użytkowników i grup odpowiadały nazwom, których próbowałem użyć. Dzięki!
David
1
Uwaga dla innych, którzy się z tym spotkają: tar automatycznie wyświetla nazwy użytkowników / grup podczas używania -tvfflag. Aby wyświetlić bieżące liczby plików w archiwum, użyj następującego polecenia:$ tar --numeric-owner -tvf archive.tar
David
W rzeczywistości z moją wersją tar mogę wprowadzić dowolną nazwę użytkownika, którą chcę, i zapisać ją w pliku tar (ale domyślnie z moim numerycznym identyfikatorem użytkownika). Podczas listowania domyślnie dostajesz nazwy użytkowników, ale identyfikatory użytkowników używają --numeric-ownerflagi. Co ciekawsze, możesz ustawić oba za pomocą --owner=name:1234lub --group=groupname:4711. Źródło: funkcja parse_owner_group kodu źródłowego tar
Bluehorn
Prawdopodobnie warto zauważyć, że nagłówek tar ustar (standard w BSD i Linux) koduje zarówno numeryczne wartości UID / GID, jak i nazwy użytkowników i grup. Podczas rozpakowywania najpierw używane są nazwy, jeśli występują w nagłówku i pasują do użytkowników i grup zdefiniowanych w systemie. Numeryczny UID i GID będą używane tylko jako rezerwowe.
kbolino
1

Dodaj parametry za --no-same-owner --no-same-permissionspomocą tar. Weź przyjrzeć docs .

Bruno Wego
źródło
2
Te opcje są używane tylko podczas wyodrębniania plików z archiwum tar - a nie tworzenia go.
Anthony G - sprawiedliwość dla Moniki
Masz rację @AnthonyGeoghegan!
Bruno Wego,
-2

Oto fragment kodu, który w locie zastępuje użytkownika / grupę identyfikatorami:

tar ca --owner="$(id -u ***otherowner***)" --group="$(id -g ***othergroup***)" mydata.tgz mydata
poussma
źródło
5
Nie. Jeśli id wie, jak rozwiązać nazwę, tar również wie. Pytanie dotyczy nazwy użytkownika nieznanej w systemie.
Daniel S