Bir tar dosyasının içeriğini ve grubunu içerik için zorla?


21

Dosyanın yapıldığı sistemde bulunmayan bir sahip: grup çifti ait içeriklerle bir tar dosyası oluşturmak istiyorum.

İşte denediğim yön:

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

Ve bu komutu çalıştırırken aşağıdaki hatayı alıyorum:

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

Her ikisi de dosyanın oluşturulduğu sistemde mevcut olmasa da, tar: owner: grubunu kabul etmeye zorlamanın bir yolu var mı?


1
--Owner'ın tar tarafından desteklenen bir seçenek olmadığını unutmayın. Bu taşınabilir olmayan bir GNUizmdir. Yıldızla, örneğin yerleşik bulma ve belirtme -chown kullanıcı adı / userid -chgrp grupadı / grupkimliği kullanırsınız.
schily

Yanıtlar:


19

Linux dahili sahipler ve gruplar adları değil, numaralar - UID'ler ve GID'ler kullanır. Kullanıcılar ve grup adları, kullanıcının rahatlığı için / etc / passwd ve / etc / group dosyalarının içeriğinden eşleştirilir. Bu dosyalardan hiçbirinde 'otherowner' girişi olmadığından, Linux aslında bir dosyaya hangi UID ve GID'nin atanması gerektiğini bilmiyor. Bunun yerine bir sayı geçirmeye çalışalım:

$ 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

İşe yarıyor gibi görünüyor.


İlginç! Bu nedenle, tar komutunun, kullanmaya çalıştığım isimlerle eşleşmesi için kullanıcı ve grup numaralarının sistemi çağırması gerekir. Teşekkürler!
David

1
Karşılaşılan diğer kişiler için bir not: tar , bayrakları kullanırken kullanıcı / grup adlarını otomatik olarak verir -tvf. Bir arşivdeki dosyaların geçerli numaralarını görüntülemek için aşağıdaki gibi bir komut kullanın:$ tar --numeric-owner -tvf archive.tar
David

Aslında tar sürümü ile istediğim herhangi bir kullanıcı adını girebilir ve tar dosyasında saklayabilirim (ancak varsayılan olarak sayısal kullanıcı kimliğimle). Listeleme sırasında kullanıcı adlarını varsayılan olarak alırsınız, ancak kullanıcı --numeric-ownerbayrağı kullanarak kimlikleri kullanır . Daha ilginç olan şey, --owner=name:1234veya tuşunu kullanarak ayarlayabilmenizdir --group=groupname:4711. Kaynak: katran kaynak kodunun işlevi parse_owner_group
Bluehorn

Ustar'ın (BSD ve Linux'ta standart) tar başlığının hem sayısal UID / GID değerlerini hem de kullanıcı ve grup adlarını kodladığını belirtmek gerekir. Paketi açarken, başlıkta varsa ve sistemde tanımlanan kullanıcı ve gruplarla eşleşiyorsa, ilk önce adlar kullanılır. Sayısal UID ve GID yalnızca yedek olarak kullanılır.
kbolino


-2

Kullanıcıyı / grubu anında kimlikleriyle değiştirmek için bir kod parçası:

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

5
Hayır. İd , adın nasıl çözüleceğini biliyorsa , tar da bilir. Soru, sistem tarafından bilinmeyen bir kullanıcı adıyla ilgilidir.
Daniel S
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.