टार संग्रह के अंदर फ़ाइलों के लिए फ़ाइल स्वामित्व को संशोधित करें


10

मैं उपयोगकर्ता के रूप में काम कर रहा हूं, और मैं एक टार आर्काइव बनाना चाहूंगा, जिसे जब अनपैक (रूट करके) अपनी फाइलों को रूट ओनरशिप से निकाला जाएगा (अन्यथा रूट को फाइल के निकाले जाने के बाद प्रत्येक फाइल के लिए स्वामित्व को मैन्युअल रूप से बदलना होगा। अपने गंतव्य के लिए)।

मैंने पाया है fakerootजो वास्तव में ऐसा लगता है। लेकिन मैं अपने संग्रह को बनाने के लिए जिस वाक्यविन्यास का उपयोग करने की आवश्यकता है, वह मुझे नहीं मिल रहा है।

मैं एक tar.xz संग्रह कैसे बना सकता हूं, ताकि रूट द्वारा अनपैक किए जाने पर फ़ाइलों का स्वामित्व हो?

do something with fakeroot ...
tar cfpJ foo.tar.xz foo/

जवाबों:


12

मैं एक tar.xz संग्रह कैसे बना सकता हूं, ताकि रूट द्वारा अनपैक किए जाने पर फ़ाइलों का स्वामित्व हो?

यह जड़ तक है जो अनपैक करता है:

tar --no-same-owner -xf ...

यदि आप उन सभी को शुरू करने के लिए मूल बनाना चाहते हैं, तो आप उपयोग कर सकते हैं

tar --owner=root --group=root -cf ...

यह मेरे लिए काम नहीं करता है: tar --owner=root --group=root cfpJ files.tar.xz files/मुझे त्रुटि देता है tar: You must specify one of the -एडीकेट्रक्स 'या --test-label' options Try टारtar --usage' for more information.
हेल्प

आपको -अपने छोटे विकल्प स्ट्रिंग से पहले चाहिए : tar --owner=root --group=root -cfpJ ...Ie -cfpJ, नहीं cfpJ
गोल्डीलॉक्स

tar --owner=root --group=root -cfpJ files.tar.xz files/मुझे एक और त्रुटि देता है: tar: files.tar.xz: Cannot stat: No such file or directory tar: Exiting with failure status due to previous errorsऔर इसके अलावा, यह नामक एक फाइल बनाता है pJ
user1968963

3
ठीक है। मैं हमेशा fअंत में डालता हूं (क्योंकि यह अधिक समझदारी से, सहज रूप से) और कम और निहारता है, मुझे -cfpJBUT -cpJfकार्यों के साथ एक ही विफलता मिलती है ।
गोल्डीलॉक्स

@ user1968963: f हमेशा फ़ाइल नाम से ठीक पहले होना चाहिए, क्योंकि इसका अर्थ है "अगला पैरामीटर फ़ाइल नाम है"। यदि आप इसे फ़ाइल नाम से ठीक पहले नहीं रखते हैं, तो टार को लगता है कि फ़ाइल नाम "" है, और फिर यह एक "" फाइल खोलने की कोशिश करता है, जिसे वह (निश्चित रूप से) स्टेट नहीं कर सकता है।
ओलिवियर दुलक

8

Fakeroot

Fakeroot उपयोगिता, या नए उपयोगिता fakeroot-एनजी (एक ही उद्देश्य, विभिन्न कार्यान्वयन तकनीक) एक कार्यक्रम और कार्यक्रम का दिखावा है कि यह रूट के रूप में चल रहा है चलाता है और यह है कि प्रणाली इस तरह के कॉल के रूप में chownसफल रहा। केवल कार्यक्रम का मानना ​​है कि ये कॉल सफल रहे, कुछ भी वास्तव में फाइलसिस्टम में परिलक्षित नहीं होता (यह तब से नहीं हो सकता जब fakerootतक कोई अतिरिक्त विशेषाधिकार न हो )। हालाँकि, यदि प्रोग्राम किसी फ़ाइल का स्वामित्व बदलता है और फिर उस फ़ाइल के स्वामित्व के आधार पर कुछ कार्रवाई करता है, तो इससे प्रोग्राम का व्यवहार बदल सकता है।

फ़ेकरूट पर्यावरण से उपयोगी कार्य प्राप्त करने का एक विशिष्ट तरीका है, जहाँ निम्न प्रकार होता है:

  1. कुछ फाइलें बनाएँ, उन्हें इधर-उधर करें, उनका स्वामित्व और मोड बदलें, आदि।
  2. इन फ़ाइलों का एक संग्रह बनाएँ।

उदाहरण:

fakeroot sh -c '
    chown root:root usr/bin/foo
    tar cf foo.tar usr
'

आपको एकल आह्वान का उपयोग करने की आवश्यकता है fakeroot, क्योंकि मंगलाचरण के बीच कोई स्मृति नहीं है।

लिनक्स नाम स्थान

पूर्णता के लिए, मैं बताता हूं कि यदि आपके पास लिनक्स कर्नेल ,3.8 है, तो नाम स्थान एक दिखावा-मूल वातावरण बनाने का एक और तरीका है। उपयोगकर्ताभूमि समर्थन अभी तक काफी नहीं है इसलिए मैं अधिक विस्तार में नहीं जाऊंगा।

संग्रह माउंट करें

आपकी समस्या को हल करने का एक अलग तरीका संग्रह को एक निर्देशिका के रूप में माउंट करना है। आप उपयोग कर सकते हैं archivemount है, जो के माध्यम से कई संग्रह स्वरूपों को संशोधित करने के लिए सक्षम है libarchive संकुचित tar भी शामिल है।

mkdir mnt
archivemount foo.tar.xz mnt
chown root:root mnt/usr/bin/foo
fusermount -u mnt

के साथ अच्छी चाल archivemount, लेकिन इसके लिए अभी भी विशेषाधिकार उत्थान की आवश्यकता है, और भले ही उपयोगकर्ता एक विश्वसनीय समूह में है जिसे माउंट और अनमाउंट करने की अनुमति है, प्रक्रिया विफल रहती है chown, इसलिए कुछ प्रकार के तृतीय-पक्ष उपकरण जैसे fakerootया नामस्थान का उपयोग करने की आवश्यकता होती है , भी।
एंटोन सैमसनोव
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.