Примусити власника та групу до вмісту файлу tar?


21

Я хотів би створити файл tar із вмістом, що належить власнику: група груп, яких не існує в системі, з якої створюється файл.

Ось напрямок, який я спробував:

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

І при виконанні цієї команди я отримую таку помилку:

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

Чи є спосіб змусити tar прийняти власника: group, хоча жодна з них не існує в системі, з якої створюється файл?


1
Зауважте, що --owner - це не опція, підтримувана tar. Це портативний GNUism. Зіркою ви, наприклад, використовуєте вбудований пошук і вкажіть -chown ім'я користувача / userid -chgrp groupname / groupid.
шилі

Відповіді:


19

Linux не використовує внутрішньо імена власників і груп, а номери - UID та GID. Назви користувачів та груп відображаються із вмісту файлів / etc / passwd та / etc / group для зручності користувача. Оскільки в жодному з цих файлів у вас немає запису "інший", Linux насправді не знає, який UID та GID слід призначити файлу. Спробуємо замість цього передати число:

$ 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

Здається, працює.


Цікаво! Отже, команда tar повинна опитувати систему для користувачів та номерів груп, щоб відповідати іменам, які я намагався використовувати. Спасибі!
Девід

1
Примітка для інших, що стикаються з цим: tar автоматично виводить імена користувачів / груп під час використання -tvfпрапорів. Для перегляду поточних номерів для файлів в архіві скористайтеся такою командою:$ tar --numeric-owner -tvf archive.tar
David

Насправді, за допомогою моєї версії tar, я можу ввести будь-яке ім’я користувача, яке мені хотілося б, і зберігати його у файлі tar (але за допомогою мого цифрового ідентифікатора користувача за замовчуванням). Під час переліку ви отримуєте імена користувачів за замовчуванням, але користувач ідентифікує, використовуючи --numeric-ownerпрапор. Що цікавіше, що ви можете встановити як за допомогою, так --owner=name:1234і для --group=groupname:4711. Джерело: функція parse_owner_group вихідного коду tar
Bluehorn

Напевно, варто відзначити, що заголовок ustar (стандартний для BSD та Linux) tar зашифровує як числові значення UID / GID, так і імена користувачів та груп. При розпакуванні імена використовуються спочатку, якщо вони присутні у заголовку та відповідають користувачам та групам, визначеним у системі. Числові UID та GID використовуватимуться лише як резервний запас.
kbolino


-2

Ось фрагмент коду для заміни користувача / групи з ідентифікаторами на льоту:

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

5
Ні. Якщо ідентифікатор знає, як розв'язати ім'я, то тар теж знає. Питання стосується імені користувача, невідомого системі.
Daniel S
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.