फ़ाइलों के स्वामी को बदले बिना मैं sudo के साथ कमांड का उपयोग कैसे कर सकता हूं?


12

जब मैं फ़ाइलों के साथ कुछ गतिविधियों को करने के लिए sudo का उपयोग करता हूं, तो ये फाइलें स्वामित्व बदल देती हैं। फ़ाइलों के स्वामी को बदले बिना मैं sudo के साथ कमांड का उपयोग कैसे कर सकता हूं?

उदाहरण फ़ाइल archivos35.sh अपाचे से है, लेकिन मैं sed का उपयोग करता हूं (usr admin sudo के साथ)

$ ls -l
-rwxr-xrw-. 1 apache apache 181 Aug 5 11:56 archivos35.sh

adminसुडो के साथ उपयोगकर्ता ---

sudo sed -i s/old/new/g archivos35.sh

लेकिन sudo के साथ उस कमांड को करने से फाइल का मालिक बदल जाता है

$ ls -l
-rwxr-xrw-. 1 admin apache 181 Aug 5 11:56 archivos35.sh

मैं फ़ाइल के स्वामी को बदलने के लिए sudo के साथ कमांड का उपयोग करने से कैसे बच सकता हूं? मैं बस इसके मालिक को संशोधित किए बिना फ़ाइल में परिवर्तन करना चाहता हूं।


आपकी स्क्रिप्ट विश्व-लेखन योग्य क्यों है?
जिम एल।

गलती से मैंने इसे 756 के साथ सेट किया। मुझे नहीं करना चाहिए
डॉक गस

जवाबों:


29

यदि आपको sudoफ़ाइल को संशोधित करने के लिए उपयोग करने की आवश्यकता है , तो इसे सही उपयोगकर्ता पर स्विच करने के लिए उपयोग करें। आपको रूट पर स्विच करने की आवश्यकता नहीं है , यह सिर्फ डिफ़ॉल्ट है। तो, आपके मामले में, आप करना चाहते हैं:

sudo -iu apache sed -i 's/old/new/g' archivos35.sh

जो sedयूजर के रूप में कमांड चलाएगा apache


2

आप वास्तव में फ़ाइल का स्वामित्व नहीं बदल रहे हैं, बल्कि आप पुरानी फ़ाइल को निकाल रहे हैं और एक नया बना रहे हैं। जब आप ऐसा करते हैं कि नई फ़ाइल को निर्माता के यूआईडी के स्वामित्व में बनाया गया है। इससे बचने के लिए आपको फाइल को जगह में बदलना होगा। मूल पाठ को अधिलेखित करके सहेजने वाले टेक्स्ट एडिटर का उपयोग करके इसे संपादित करें। या एक अस्थायी फ़ाइल के लिए उत्पादन के साथ अपने sed कमांड चलाने और फिर मूल फ़ाइल पर अस्थायी फ़ाइल की प्रतिलिपि बनाएँ।


1
आपको लगता है कि -iविकल्प उर्फ --in-placeवास्तव में inplace को संशोधित करेगा ...
JShorthouse

व्हॉट द @teldon प्रतिक्रिया, मैं वह करने में कामयाब रहा जो मुझे चाहिए। सीड के साथ मैं फाइल को खोले बिना जगह को संशोधित करता हूं।
डॉक गस

1
@ जोशहाउस आपको लगता होगा, लेकिन यह कम से कम हर जगह नहीं है।
काइल जोन्स

3
@JShorthouse सबसे तथाकथित 'इन-प्लेस' एडिट नहीं हैं, वे ज्यादातर एक अस्थायी फ़ाइल बदलते हैं और फिर इसे मूल (और इसमें सबसे अधिक, यदि सभी नहीं हैं, तो sed और पेरल के कार्यान्वयन) और अधिकांश अन्य प्रोग्राम शामिल हैं। एक "में जगह संपादित करें" विकल्प के साथ)। आप वास्तविक यथा-स्थान संपादन चाहते हैं, की तरह एक स्क्रिप्ट पाठ संपादक का उपयोग edया exया vi/ vim
कैस

1
यहां तक ​​कि कुछ पाठ संपादक फ़ाइल लिखते समय अस्थायी + नाम बदलने की विधि का उपयोग करते हैं, लिखते समय दुर्घटना की स्थिति में विफल-सुरक्षित के रूप में। उदाहरण के लिए Emacs डिफ़ॉल्ट रूप से ऐसा करता है, लेकिन आप इसे कॉन्फ़िगरेशन के साथ अधिलेखित कर सकते हैं।
बमर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.