Paksa pemilik dan grup untuk konten file tar?

21

Saya ingin membuat file tar dengan konten milik pemilik: pasangan grup yang tidak ada di sistem dari mana file tersebut dibuat.

Inilah arahan yang saya coba:

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

Dan ketika menjalankan perintah ini, saya mendapatkan kesalahan berikut:

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

Apakah ada cara untuk memaksa tar untuk menerima pemilik: grup, meskipun tidak ada dari mereka yang ada di sistem dari mana file sedang dibuat?

David
sumber
1
Perhatikan bahwa --owner bukan opsi yang didukung oleh tar. Ini adalah GNUisme non-portabel. Dengan bintang, misalnya Anda menggunakan pencarian bawaan dan tentukan -chown username / userid -chgrp groupname / groupid.
schily

Jawaban:

19

Linux tidak menggunakan nama pemilik dan grup secara internal tetapi angka - UID dan GID. Nama pengguna dan grup dipetakan dari konten / etc / passwd dan / etc / group files untuk kenyamanan pengguna. Karena Anda tidak memiliki entri 'pemilik lain' di salah satu file itu, Linux tidak benar-benar tahu UID dan GID mana yang harus ditugaskan ke file. Mari kita coba memberikan nomor saja:

$ 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

Tampaknya berhasil.

Nykakin
sumber
Menarik! Jadi perintah tar harus polling sistem untuk pengguna dan nomor grup agar sesuai dengan nama yang saya coba gunakan. Terima kasih!
David
1
Catatan untuk orang lain yang menemukan ini: tar secara otomatis menampilkan nama pengguna / grup saat menggunakan -tvfflag. Untuk melihat angka saat ini untuk file dalam arsip, gunakan perintah seperti ini:$ tar --numeric-owner -tvf archive.tar
David
Sebenarnya dengan versi tar saya, saya dapat memasukkan nama pengguna yang saya inginkan dan menyimpannya di file tar (tetapi dengan id pengguna numerik saya secara default). Saat mendaftar, Anda mendapatkan nama pengguna secara default, tetapi pengguna menggunakan --numeric-ownerbendera. Yang lebih menarik adalah Anda bisa mengatur keduanya menggunakan --owner=name:1234atau --group=groupname:4711. Sumber: function parse_owner_group dari kode sumber tar
Bluehorn
Mungkin perlu dicatat bahwa header tar ustar (standar pada BSD dan Linux) mengkode nilai UID / GID numerik serta nama pengguna dan grup. Saat membongkar, nama-nama digunakan terlebih dahulu, jika ada di header dan cocok dengan pengguna dan grup yang ditentukan pada sistem. UID dan GID numerik hanya akan digunakan sebagai fallback.
kbolino
1

Tambahkan params --no-same-owner --no-same-permissionsdengan tar. Lihatlah dokumen .

Bruno Wego
sumber
2
Opsi-opsi itu hanya digunakan ketika mengekstraksi file dari arsip tar - bukan membuatnya.
Anthony G - keadilan untuk Monica
Anda benar @AnthonyGeoghegan!
Bruno Wego
-2

Berikut adalah sepotong kode untuk mengganti pengguna / grup dengan id on the fly:

tar ca --owner="$(id -u ***otherowner***)" --group="$(id -g ***othergroup***)" mydata.tgz mydata
poussma
sumber
5
Tidak. Jika id tahu cara menyelesaikan nama, tar juga tahu. Pertanyaannya adalah tentang nama pengguna yang tidak dikenal oleh sistem.
Daniel S