पहले कमांड पर && और sudo का उपयोग करते समय, दूसरी कमांड को sudo के रूप में भी चलाया जाता है?


64

अगर मैं एक कमांड चलाता हूं।

sudo some-command && some-other-command

क्या दूसरी कमान sudoभी प्रबलता के साथ चलाई जा रही है ?

जवाबों:


110

टीएल; डीआर: नहीं


पहला कमांड है

sudo some-command

दूसरी आज्ञा है

some-other-command

कमांड sudoनिम्न कमांड लेता है और इसे उन्नत विशेषाधिकार के साथ निष्पादित करता है। &&बहरहाल, एक आदेश से संबंधित नहीं है और पहले आदेश को क्रियान्वित करने से पहले, खोल से व्याख्या की है। यह पहले आदेश को निष्पादित करने के लिए बैश बताता है, और दूसरी सफलता पर।

तो के sudoबारे में पता नहीं है && some-other command। जब एलिवेटेड प्रक्रिया समाप्त हो जाती है, तो बैश अपना रिटर्न वैल्यू लेता है, और फिर दूसरे कमांड को निष्पादित करता है, जो फिर से पहले के बारे में नहीं जानता है।

यह आसानी से प्रदर्शित किया जा सकता है:

$ sudo whoami && whoami
root
username

आप जो चाहते हैं, उस तक पहुंचने के लिए, आप एक उन्नत बैश शुरू कर सकते हैं, और इसे दोनों कमांड निष्पादित कर सकते हैं:

$ sudo bash -c 'whoami && whoami'
root
root

तो अब, दोनों कमांड को रूट के रूप में निष्पादित किया जाता है, जैसा कि ऊपर वर्णित पूरी प्रक्रिया को एक उन्नत प्रक्रिया में निष्पादित किया जाता है, यानी बैश सत्र इस कमांड के साथ शुरू हुआ, जो परिष्करण के तुरंत बाद बाहर निकलता है। फिर भी, दोनों whoamiको एक दूसरे के अस्तित्व का पता नहीं है।

यह किसी भी उद्देश्य के अनुरूप नहीं है, लेकिन इस प्रदर्शन के लिए, आसान तरीका बस करना है

sudo some-command && sudo some-other-command

29
whoamiउदाहरण के लिए +1 ।
कार्ल एच।


यह प्रदर्शन वास्तव में अच्छा है! अगली बार दूसरों को सुडोल सिखाने की कोशिश करने के बारे में सोचें!
Fragmentation की जरूरत

20

नहीं। कुछ उदाहरण जो ऐसा करते हैं:

sudo some-command && sudo some-other-command 
sudo sh -c "some-command && some-other-command"

या यदि आप घोंसला आदेश चाहते हैं तो आप भी कर सकते हैं:

sudo bash <<"EOF"
some-command
some-other-command
sudo bash <<"EOF2"
    some-command2
    some-other-command2
EOF2
EOF
  • दूसरा एक और शेल का उपयोग करता है।
  • मन करें कि जब आप दूसरे संस्करण में 'या "का उपयोग करते हैं, तो आपको उस कमांड के कमांड या पैरामीटर (यानी। \' या \" से बचने की आवश्यकता होती है) ताकि वे बहुत जल्दी जटिल हो सकें।

तीसरा तरीका काम नहीं करता है: $ sudo -s -- whoami && whoamiदेता हैroot username
बार्टेकचोम

@BartekChom खेद है कि मैं उस पर एक उद्धरण याद किया
Rinzwind

sudo -s -- "whoami && whoami"लगता है कि कमांड नहीं मिली है, कमोबेश वही है जो कमांड के रूप में मिलता है "whoami && whoami"। && के साथ इस निर्माण का उपयोग कैसे करें? मुझे लगता है कि sudo -s cd ..विरोध के रूप में कोई त्रुटि नहीं देता है sudo cd ..
बार्टेकचोम

मैंने आज कुछ नया सीखा है sudo bash <<"EOF":! धन्यवाद! :-)
फेबी

4

नहीं, या तो आपको दो बार सुडोल लिखना होगा, या कुछ करना होगा

sudo bash -c 'foo && bar'

2

&&इसका मतलब है कि सही पक्षीय (दूसरा) कमांड केवल तभी चलेगा, जब लेस्ट साइडेड (पहला) कमांड सफल हो यानी एक्जिट कोड $?हो 0

दोनों कमांड एक दूसरे से अलग हैं और अपने स्वयं के वातावरण में चलेंगे इसलिए दूसरी कमांड sudoविशेषाधिकार प्राप्त नहीं होगी ।

यह आपको स्पष्ट कर देगा:

$ sudo whoami && whoami 
root
foobar

1

नहीं, और निम्नलिखित एक बार बहुत व्यापक था।

sudo reboot && exit

बस हर किसी को कम से कम एक बार ऐसा करना चाहिए था

sudo apt-get update && sudo apt-get upgrade

इस प्रकार यह एक महान "मिक्की माउस" साक्षात्कार प्रश्न है।

यह इतनी आसानी से परीक्षण किया जाता है कि प्रश्न को एक स्टेट पेडिंग अभ्यास के लिए संदेह हो सकता है।


0

कमांड लाइन पर, जब आप देखते हैं

$ command one && command two

सामान्य आशय उस कमांड को निष्पादित करना है जो केवल पहले कमांड के सफल होने पर && का अनुसरण करता है।

क्या अन्य कमांड भी सूडो के रूप में चलती है?

बिल्कुल नहीं, यह सिर्फ दो लगातार कमांड लिखने के रूप में है, यह && एक कमांड में कोई अतिरिक्त विशेषाधिकार नहीं देता है। यह सिर्फ एक सेपरेटर है

यह साबित करने के लिए कि हम एक उदाहरण लें।

touch fileA fileB 

मैंने दो फाइलें fileA और fileB बनाईं। अब मैं कमांड चलाऊंगा

sudo chown test:test fileA && chown test:test fileB

मैं इन फ़ाइलों के उपयोगकर्ता और समूह स्वामी को उपयोगकर्ता और समूह नाम परीक्षण में बदल रहा हूं। अब पहला कमांड चलना चाहिए जबकि दूसरे के बारे में क्या?

आउटपुट है:

chown: changing ownership of `fileB': Operation not permitted

इसलिए कमांड तब से नहीं चला, जब तक इसकी जरूरत नहीं है sudoऔर हालांकि हम यह निष्कर्ष निकाल सकते हैं कि && दूसरे का प्रतिस्थापन नहीं हैsudo

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