जवाबों:
अपने आप को यह समझाने के तरीके के रूप में कि sudoकेवल पहली कमांड का उपयोग करके ही इसे प्रदान किया जाता है, और पहली पाइप के चालू होने के बाद बाकी सब कुछ आपकी मूल उपयोगकर्ता आईडी के रूप में आप इसे देखने के लिए आदेशों की इस बेकार श्रृंखला का उपयोग कर सकते हैं।
$ sudo whoami > file1 | whoami > file2 | whoami > file3
जब आप catउन फ़ाइलों को देखेंगे तो आपको निम्नलिखित उपयोगकर्ता नाम दिखाई देंगे:
$ cat file{1..3}
root
saml
saml
हालाँकि यदि आप एक सब-रन चलाते हैं:
$ sudo sh -c 'whoami > file4 | whoami > file5 | whoami > file6'
जब आप catइन फ़ाइलों को देखेंगे तो आपको निम्न उपयोगकर्ता नाम दिखाई देंगे:
$ cat file{4..6}
root
root
root
के बारे में आपकी टिप्पणी sudo foo1 | sudo foo2 ...कभी काम नहीं करेगी, क्योंकि इससे आउटपुट को sudo foo1खिलाया जाएगा sudo foo2। मेरे whoamiउदाहरणों का उपयोग करने से पता चलता है कि आदेशों की श्रृंखला कुछ नहीं करती है।
$ sudo whoami | sudo whoami | sudo whoami
root
पहले 1 भाग गया, लेकिन दूसरा और तीसरा कुछ भी नहीं करते क्योंकि वे इनपुट लेने के लिए सुसज्जित नहीं हैं। बल्कि मुझे लगता है कि आप कुछ इस तरह से लिखना चाहते हैं:
$ sudo whoami;sudo whoami;sudo whoami
root
root
root
जो इसे 3 अलग-अलग कमांड प्रॉम्प्ट पर 3 बार चलाने के बराबर है। या यह:
$ sudo whoami && sudo whoami && sudo whoami
root
root
root
लेकिन कभी भी ऐसा न करें। यह अगले भाग में है।
ये मेरा सबसे अच्छा काम नहीं हैं, लेकिन अन्य तरीके हैं जो आपने मुझे कई कमांड का उपयोग करते हुए देखे होंगे sudo। मैं उन्हें यहाँ केवल यह सिखाने के लिए दिखाता हूँ ताकि अन्य लोग उन्हें करना ज़रूरी न समझें!
$ echo "echo 1 > /proc/sys/vm/drop_caches" | sudo sh
यह काम किस प्रकार करता है?
सूडो के कारण डबल कोट्स के अंदर इको प्रोग्राम रूट के रूप में चल रहा है, लेकिन शेल जो रूट-ओनली फ़ाइल में इको के आउटपुट को रीडायरेक्ट कर रहा है, वह अभी भी आपके अनुसार चल रहा है। आपका वर्तमान शेल sudoप्रारंभ होने से पहले पुनर्निर्देशन करता है ।
$ sudo tee /proc/sys/vm/drop_caches <<<1
यह काम किस प्रकार करता है?
यह विधि teeप्रोग्राम को रूट के रूप में चलाती है और यहां एक स्ट्रिंग से इनपुट लेती है जो कमांड को sudoलागू करने से पहले चलती है tee।
# this way
$ sudo -s -- 'whoami'
# or this way
sudo -s -- sh -c 'whoami;whoami'
यह काम किस प्रकार करता है?
ये अलग दिख सकते हैं लेकिन वे वास्तव में एक ही काम कर रहे हैं। -sस्विच का उपयोग करते समय , sudoएकल कमांड चलाएगा। अगर यह बच निकलने का कोई रास्ता होता तो मैं कभी पता नहीं लगा सकता। ऐसा कुछ भी काम नहीं करेगा।
# this
$ sudo -s -- 'whoami;whoami'
# or this
$ sudo -s -- 'whoami\;whoami'
लेकिन मैन पेज को देखते हुए, -sस्विच कहता है कि यह /etc/passwdफ़ाइल के उपयोगकर्ता के प्रवेश में परिभाषित शेल के लिए एक एकल कमांड पास करेगा । तो हम दूसरे रूप में एक चाल का उपयोग करते हैं, मुख्य रूप से शेल को पारित करने के लिए, एक और शेल ( sh -c) जिसमें हम "पिछले दरवाजे" को चलाने के लिए कमांड के हमारे स्ट्रिंग।
और भी हैं लेकिन मैं यहां रुकूंगा। ये केवल आपको यह दिखाने के लिए हैं कि यदि आप चीजों को समझते हैं तो आप क्या कर सकते हैं, लेकिन जरूरी नहीं कि चेन जंक ही एक साथ हो क्योंकि आप कर सकते हैं, आपको कोशिश करनी चाहिए और अपने कोड को तार्किक स्तर पर रखना चाहिए जो समझ में आता है ताकि दूसरों को समझ और समर्थन दोनों मिल सकें भविष्य में उन्हें।