सूडो एक पर्यावरण चर बनाता है "SUDO_USER" जिसका उपयोग आप उस उपयोगकर्ता का पता लगाने के लिए कर सकते हैं जिसने लॉग इन किया था (वास्तव में जो सुडो भाग गया था)।
आपको सूडो को रूट करने के लिए (अन्य उपयोगकर्ताओं को भी एक्सेस करने के लिए सूडो का उपयोग करना संभव है) मानकर, आप निम्न दो चरणों को स्वचालित करने के लिए एक स्क्रिप्ट लिख सकते हैं।
cp source target
chown $SUDO_USER target
(यह तब काम नहीं करेगा जब आप एक गैर रूट उपयोगकर्ता को sudo करते हैं क्योंकि केवल रूट ही फाइलों को दे सकता है।)
इसे स्वचालित करना थोड़ा काम होगा। यदि स्रोत एक एकल फ़ाइल है और लक्ष्य एक निर्देशिका नहीं है, तो आपका काम पूरा हो गया है। मुझे लगता है कि आपने सवाल पूछा था क्योंकि समस्या अधिक जटिल स्थितियों में केवल एक वास्तविक मुद्दा है, जैसे कुछ करते समय:
cp /path/source/some*files /path/target/directory/
एक जटिल स्क्रिप्ट यह पता लगाने के लिए कि कौन सी फाइलें और क्या निर्देशिकाएं पारित की गई हैं, जो पहले से मौजूद थीं, जिन्हें वास्तव में ओवरराइट किया गया था, और केवल सफलतापूर्वक कॉपी की गई फ़ाइलों के स्वामित्व को बदलने के लिए लिखा जा सकता था।
यह काम पहले ही हो चुका है। आप उपयोग कर सकते हैं cpio
- sudo to root करने के बाद, फ़ाइलों को कॉपी करने के लिए cpio का उपयोग करें। cpio को कॉपी करने के लिए फ़ाइलों की एक सूची की आवश्यकता होती है, इसलिए यह एक दो चरण की प्रक्रिया है। नीचे मैं ls
कॉपी करने के लिए फ़ाइलों की सूची उत्पन्न करने के लिए उपयोग करता हूं ।
ls /path/source/some*files | cpio -pdm --owner $SUDO_USER /path/target/directory/
-pdm
इसका मतलब है "पासथ्रू मोड, निर्देशिका रूप में की जरूरत बनाएँ, बनाए रखें फ़ाइल संशोधन समय"
--owner $SUDO_USER"
निर्दिष्ट उपयोगकर्ता फ़ाइलों का मालिक है।
अंतिम ऑपरेंड निर्देशिका है जहाँ cpio को फ़ाइलों को संग्रहित करना चाहिए।
Cpio awesomeness के बारे में अधिक जानने के लिए, यहाँ CPIO मैनुअल पेज पर जाएँ
एकल सूडो कमांड में ऐसा करना भी संभव है। यह मानते हुए कि आपके उपयोगकर्ता के पास फ़ाइलों को एक्सेस करने के अधिकार हैं, केवल sudo को cpio भाग के लिए उपयोग करें, जैसे:
ls /path/source/some*files | cpio -pdm --owner $USER /path/target/directory/
उपरोक्त मामले में मैं $ SUDO_USER के स्थान पर US USER का उपयोग कर रहा हूं क्योंकि इसका मूल्यांकन सूडो के चलने से पहले किया जाता है। वैकल्पिक रूप से, यदि उपयोगकर्ता के पास फ़ाइलों को सूचीबद्ध करने के लिए पहुंच नहीं है, तो इसे एक आवरण स्क्रिप्ट में डालें और आवरण को चलाने के लिए sudo का उपयोग करें। यह कठिन हो सकता है, लेकिन सबसे सरल मामले में रैपर दो तर्क, एक स्रोत और एक लक्ष्य लेता है।
यह "cp_as_user" आवरण में जाता है:
ls $1 | cpio -pdm --owner $SUDO_USER $2
फिर इस तरह से रैपर का उपयोग करें:
sudo cp_as_user "/ path / to / some * files" / path / to / target / directory
sudo cat /etc/foo.txt > ~/foo.txt
। फ़ाइलें एक कारण से केवल पठनीय होती हैं, इसलिए गैर-रूट उपयोगकर्ताओं द्वारा प्रतियों को पठनीय बनाते समय उस कारण को ध्यान में रखना याद रखें।