टार फ़ाइल की सामग्री के लिए स्वामी और समूह को बाध्य करें?


21

मैं एक स्वामी से संबंधित सामग्री के साथ एक टार फ़ाइल बनाना चाहूंगा: समूह जोड़ी जो उस सिस्टम पर मौजूद नहीं है जिससे फ़ाइल बनाई जा रही है।

यहाँ मैंने कोशिश की दिशा है:

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

और इस कमांड को चलाने पर, मुझे निम्नलिखित त्रुटि मिलती है:

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

क्या स्वामी को स्वीकार करने के लिए टार के लिए मजबूर करने का एक तरीका है: समूह, भले ही उनमें से कोई भी उस सिस्टम पर मौजूद नहीं है जिससे फ़ाइल बनाई जा रही है?


1
ध्यान दें कि --owner टार द्वारा समर्थित विकल्प नहीं है। यह एक गैर-पोर्टेबल GNUism है। स्टार के साथ, आप उदाहरण के लिए अंतर्निहित खोज और निर्दिष्ट-उपयोगकर्ता नाम / userid -chgrp groupname / groupid का उपयोग करते हैं।
विद्वान

जवाबों:


19

लिनक्स आंतरिक रूप से मालिकों और समूहों के नामों का उपयोग नहीं करता है लेकिन संख्या - यूआईडी और जीआईडी। उपयोगकर्ता और समूह के नाम उपयोगकर्ता की सुविधा के लिए / etc / passwd और / etc / समूह फ़ाइलों की सामग्री से मैप किए जाते हैं। चूँकि आपके पास उन फ़ाइलों में से किसी में भी 'अन्य' एंट्री नहीं है, इसलिए लिनक्स वास्तव में यह नहीं जानता कि यूआईडी और जीआईडी ​​को किस फाइल को सौंपा जाना चाहिए। आइए इसके बजाय एक नंबर पास करने की कोशिश करें:

$ 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

यह काम करने लगता है।


दिलचस्प! तो टार कमांड को उन यूज़र और ग्रुप नंबरों के लिए सिस्टम को पोलिंग करना होगा जो मेरे द्वारा उपयोग किए जा रहे नामों से मेल खाते हैं। धन्यवाद!
डेविड

1
इस पर आने वाले अन्य लोगों के लिए एक नोट: टार झंडे का उपयोग करते समय उपयोगकर्ता / समूह के नामों को स्वचालित रूप से आउटपुट करता है -tvf। एक संग्रह में फ़ाइलों के लिए वर्तमान संख्याओं को देखने के लिए इस तरह से एक कमांड का उपयोग करें:$ tar --numeric-owner -tvf archive.tar
डेविड

वास्तव में मेरे टार संस्करण के साथ मैं अपने पसंद के किसी भी उपयोगकर्ता नाम को दर्ज कर सकता हूं और इसे टार फाइल में संग्रहीत कर सकता हूं (लेकिन डिफ़ॉल्ट रूप से मेरी संख्यात्मक उपयोगकर्ता आईडी के साथ)। सूचीबद्ध करते समय आप डिफ़ॉल्ट रूप से उपयोगकर्ता नाम प्राप्त करते हैं लेकिन उपयोगकर्ता आईडी का उपयोग करता है --numeric-owner। क्या अधिक दिलचस्प है कि आप दोनों का उपयोग करके सेट कर सकते हैं --owner=name:1234या --group=groupname:4711। स्रोत: टार सोर्स कोड का फ़ंक्शन parse_owner_group
Bluehorn

यह शायद ध्यान देने योग्य है कि ustar (BSD और Linux पर मानक) टार हैडर सांख्यिक यूआईडी / जीआईडी ​​मानों के साथ-साथ उपयोगकर्ता और समूह नामों दोनों को एन्कोड करता है। अनपैक करते समय, नाम पहले उपयोग किए जाते हैं, यदि वे हेडर में मौजूद हैं और सिस्टम पर परिभाषित उपयोगकर्ताओं और समूहों से मेल खाते हैं। संख्यात्मक यूआईडी और जीआईडी ​​का उपयोग केवल फॉलबैक के रूप में किया जाएगा।
kbolino

1

के --no-same-owner --no-same-permissionsसाथ परम जोड़ें tarडॉक्स पर एक नज़र डालें


2
उन विकल्पों का उपयोग केवल तब किया जाता है जब एक टार आर्काइव से फाइलें निकालते हैं - एक नहीं बना रहे।
एंथनी जी -

आप सही हैं @AnthonyGeoghegan!
ब्रूनो वीगो

-2

यहां उपयोगकर्ता / समूह को उड़ान भरने के लिए आईडी के साथ कोड का एक टुकड़ा दिया गया है:

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

5
नहीं। यदि आईडी कैसे नाम को हल करने में जानता है, टार भी जानता है। सवाल सिस्टम के लिए अज्ञात उपयोगकर्ता नाम के बारे में है।
डैनियल एस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.