`सुडो !!` में `` का क्या अर्थ है?


64

मैं उबंटू का उपयोगकर्ता हूं, जिसमें ज्यादा अनुभव नहीं है और मैं उपयोग कर रहा हूं sudo

क्या करता sudo !!है और कैसे करता है?


7
दूसरे पक्ष को छोड़कर, डुप्लिकेट: उसी कमांड को फिर से चलाएं लेकिन sudo के रूप में
एक CVn

6
@WarrenHill वह "कैसे" लेकिन "क्या" और "कैसे" नहीं चाहता है। वह !!कमांड के हिस्से के बारे में अधिक पूछते हैं ।
Braiam

1
@Nakilon नहीं होना चाहिए। यह सवाल पूछ रहा है कि क्या !!करें और कैसे करें। दूसरा ऐसा करने के लिए एक विधि चाहता है।
ब्रिअम

@ MichaelKjörling से आपका मतलब सही था?
ब्रिअम

2
@ ब्रायम दरअसल, मेरा मतलब था नक़ल; दो सबसे ज्यादा मत वाले जवाबों में से एक विशेष रूप से व्याख्या sudo !!करता है कि क्या करता है, और दो जवाब हैं जो वास्तव में विशेष रूप से बताते हैं कि क्या !!करता है।
बजे एक CVn

जवाबों:


74

!!बैश में पिछले कमांड के लिए एक उपनाम है ( इवेंट डिजाइनर्स देखें )। इसलिए यह sudoअनुमतियों के साथ पिछले कमांड को फिर से चलाता है ।


15
नोट: !कमांड आमतौर पर बैश स्क्रिप्ट में उपलब्ध नहीं होते हैं (केवल इंटरैक्टिव सत्र में)। उनके साथ अक्षम किया जा सकता है set +o histexpand
बेनोइट

64

sudo bang bang कमांड लाइन इंटरफेस में काम करते समय एक बहुत ही उपयोगी कमांड है।

कुछ लिनक्स डिस्ट्रोस ने आपको एक व्यवस्थापक के बजाय एक उपयोगकर्ता के रूप में लॉगिन किया है।

इसलिए, कुछ व्यवस्थापक-वार करने के लिए, आपको कमांड sudo(सुपर-यूज़र डीओ) के साथ आगे बढ़ना होगा , जो सिस्टम को बताता है "आप ऐसा करेंगे, क्योंकि मैंने ऐसा कहा था।" !! / बैंग-बैंग (=! बैंग) मूल रूप से एक शॉर्टकट है जिसका उपयोग आप पिछली कमांड को दोहराने के लिए कर सकते हैं।

इसलिए, विशिष्ट परिदृश्य यह है कि आप एक कमांड का प्रयास करते हैं, और यह कहकर एक संदेश वापस ले जाता है कि आपको ऐसा करने के लिए एक व्यवस्थापक बनना है। तो, आप टाइप कर सकते हैं या तो sudoसुपर उपयोगकर्ता / व्यवस्थापक के रूप में है कि आदेश को चलाने के लिए, या आप टाइप कर सकते हैं sudo !!जहां !!प्रणाली पिछला आदेश है कि प्रयास किया गया था उपयोग करने के लिए कहता है। UFH

कई अन्य बैंग-कमांड हैं। उनकी सूची और स्पष्टीकरण के लिए कि वे क्या हैं, लिनक्स बैंग कमांड्स देखें, बैश इतिहास और बैंग कमांड भी देखें


12
यह एक बहुत ही खतरनाक कमांड है यदि आप 100% निश्चित नहीं हैं कि आपकी पिछली कमांड क्या थी। यह लगभग हमेशा सुरक्षित रहता है ताकि ऊपर के तीर को मारा जा सके, फिर घर की चाबी, फिर टाइप करें sudoऔर कमांड लाइन को देखें।
शादुर

3
@ बहादुर आमतौर पर आपकी पिछली कमांड 1 सेकंड पहले की थी। सामान्य उपयोग का मामला उत्तर में वर्णित एक है: आप sudoकिसी चीज़ को भूल जाते हैं और एक त्रुटि प्राप्त करते हैं, इसलिए आप तुरंत sudoइसे चाहते हैं
माइकल Mrozek

1
@ ब्रायम: सीएलआई एक संक्षिप्त नाम है। सामुदायिक नियम का उल्लंघन! हमला! पुनः संपादित करें!
भारतीय

4
sudoमतलब यह नहीं है "सुपर उपयोगकर्ता करना" के रूप में, यह जाता है ऐसा करने के लिए एक कमांड के रूप में अगर मैं किया था su(सु अर्थ स्विच उपयोगकर्ता [और नहीं सुपर उपयोगकर्ता]); यानी, आप किसी भी उपयोगकर्ता के रूप में कमांड कर सकते हैं, न केवल रूट ( -uस्विच); वही साथ जाता हैsu [user] [-c command]
ssice

1
@ मिच को छोड़कर suऐसी बात नहीं है। Linux.die.net/man/1/su , gnu.org/software/coreutils/manual/html_node/su-invocation.html , linfo.org/su.html देखें । इसका मतलब उपयोगकर्ता को प्रतिस्थापित करना चाहिए ।
एसएससी

38

bang bang (!!)आदेश के लिए एक शॉर्टकट है दोहराने और पिछले आदेश चला है कि आप अपने टर्मिनल में प्रवेश किया। यह कमांड बहुत उपयोगी है जब आप भूल जाते हैं कि आपको एक निश्चित कार्रवाई करने के लिए व्यवस्थापक अधिकारों की आवश्यकता है, और आप इसे सुपर-उपयोगकर्ता अधिकारों के साथ टाइप करके दोहरा सकते हैं,

sudo !!

!! अंतिम रन कमांड पकड़ लेता है।

उदाहरण के लिए:

apt-get update

उत्पादन होगा,

E: लॉक फ़ाइल / var / lib / apt / सूचियों / लॉक को नहीं खोल सका - खुला (13: अनुमति अस्वीकृत)
E: निर्देशिका / var / lib / apt / सूचियों को लॉक करने में असमर्थ /
E: लॉक फ़ाइल / var / को नहीं खोल सका lib / dpkg / lock - open (13: अनुमति अस्वीकृत)
E: व्यवस्थापन निर्देशिका (/ var / lib / dpkg /) लॉक करने में असमर्थ, क्या आप रूट हैं?

उसके बाद, यदि हम sudo !!कमांड चलाते हैं , तो आउटपुट होगा

Hit http://extras.ubuntu.com saucy/main amd64 Packages
Get:3 http://mirror.sov.uk.goscomb.net saucy-updates Release.gpg [933 B]
Hit http://ppa.launchpad.net saucy Release                                  
Hit http://extras.ubuntu.com saucy/main i386 Packages 
Hit http://mirror.sov.uk.goscomb.net saucy Release                             
99% [Waiting for headers] [Waiting for headers] [Waiting for headers]

इसका मतलब !!हिस्सा पिछले रन कमांड पकड़ लेता है apt-get updateऔर पूर्ववर्ती sudoहिस्सा सुपर उपयोगकर्ता अधिकारों के साथ चलाने के लिए आदेश में आता है।

और कैसेsudo !! रन सुपर उपयोगकर्ता विशेषाधिकारों के साथ पिछला आदेश का मतलब है, आम तौर पर सभी आदेशों हम टर्मिनल पर दर्ज किया गया में जमा हो जाती command history.Run historyटर्मिनल पर आदेश, यह सब आदेशों आप entered.The से पता चलता !!में भाग sudo !!पकड़ लेता है पिछले आदेश संग्रहीत कमांड इतिहास में और पूरा sudo !!व्यवस्थापक विशेषाधिकारों के साथ अंतिम कमांड चलाता है।

इस ब्लॉग पोस्ट में कुछ अन्य धमाकेदार कमांड बताए गए हैं ।


3
मैं इसे 'बैंग बैंग' का फिर से उल्लेख करते हुए देखकर आश्चर्यचकित हूं। मुझे लगा कि एक बार काफी हो गया।
किरी

1
बैंग कमांड के अधिक उदाहरणों के लिए +1।
वर्नरसीडी

1
@ रमनो कम से कम बैश में, और मैं इतिहास समर्थन के साथ सभी बॉर्न-शैली के गोले की उम्मीद करता हूं, mkdir LongDirectoryNameऔर cd !$काम करने के लिए अलग से जारी किया जाना चाहिए, जब तक LongDirectoryNameकि पूर्ववर्ती आदेश का अंतिम शब्द न हो। शेल इतिहास उद्देश्यों के लिए, mkdir LongDirectoryName; cd !$एक आदेश है। साथ इतिहास बातचीत !!, !^, और !$पिछले आदेश खोल वास्तव में पूरी तरह से देखने से पहले संसाधित का उपयोग !यहाँ एक उदाहरण है। यदि आप चलाते हैं historyतो आप देखेंगे कि एक पंक्ति में शामिल ;कमांड को एक कमांड के रूप में याद किया जाता है।
एलियाह कगन

@EliahKagan तुम सही हो! गलत जानकारी दी गई ...
Rmano

13

उत्तर के दो भाग हैं: !!औरsudo

!!शेल की कार्यक्षमता का एक हिस्सा है (उबंटू के मामले में यह संभवतः बैश है, लेकिन अन्य गोले जैसे zsh या csh इसे भी सपोर्ट करते हैं) को "इतिहास विस्तार" कहा जाता है। यह उसी तरह से व्यवहार करता है जैसे अन्य विस्तार में कि खोल 'प्लेसहोल्डर' को शब्दों के एक समूह तक फैलाता है। जबकि foo*'फू' से शुरू होने वाली सभी फ़ाइलों की सूची में !!विस्तारित किया जाएगा, पिछली कमांड लाइन की सामग्री तक विस्तारित हो जाता है।

$ echo foobar
foobar
$ echo !!
echo foobar
$ !!
echo foobar

अन्य विस्तार की तरह, यह पूरी तरह से शेल द्वारा किया जाता है, इसलिए यदि आप !!किसी अन्य कमांड के बाद टाइप करते हैं, तो यह कमांड पता नहीं है कि वहाँ था !!, लेकिन केवल पिछले कमांड लाइन को देखेंगे। (अन्य विस्तार के विपरीत, इतिहास का विस्तार इतिहास में एक कमांड को सहेजे जाने से पहले होता है, इसके बजाय !!प्रतिस्थापित कमांड लाइन को इतिहास में सहेजा जाएगा।)


sudoआदेश किसी अन्य उपयोगकर्ता के रूप में आदेशों को क्रियान्वित करने की अनुमति देता है, अनुमतियाँ (डिफ़ॉल्ट में कॉन्फ़िगर किया गया है सुरक्षा नीति द्वारा दी गिरफ्तारी प्रदान की /etc/sudoers)।

डिफ़ॉल्ट रूप से रूट पासवर्ड उबंटू में परेशान रहता है। सिस्टम प्रशासन कार्यों को करने के लिए स्थापना के दौरान बनाए गए उपयोगकर्ता को sudo अधिकार दिए गए हैं। यह उपयोगकर्ता अब खोल पर किसी भी कमांड को रूट के रूप में निष्पादित कर सकता है, बस प्रीपेड करके sudo। कुछ GUI प्रोग्राम sudo तंत्र का उपयोग करते हैं, उदाहरण के लिए पैकेज प्रबंधन।

sudoअन्य कमांड को रूट (या किसी अन्य उपयोगकर्ता) के रूप में निष्पादित करने का कारण यह हो सकता है कि सुडो बाइनरी ( /usr/bin/sudo) में इसकी अनुमति में सेट बिट बिट है और रूट से संबंधित है। कोई भी (बाइनरी) सेट सेतु बिट के साथ निष्पादन योग्य है जो उसके मालिक की अनुमति से चलाया जाता है। इसका मतलब यह है कि sudo रूट अनुमतियों के साथ प्रभावी रूप से चलता है, कोई फर्क नहीं पड़ता कि उपयोगकर्ता वास्तव में इसे कहते हैं। केवल वह सूडो की आंतरिक सुरक्षा नीतियों का प्रबंधन करता है कि किस उपयोगकर्ता को अनुमति दी जाती है और उपयोगकर्ता को मनमानी चीजें करने से रोकें।


तो, sudo !!इस साधन के मामले में

$ mount /dev/sdb1 /mnt
mount: only root can do that
$ sudo !!

मूल रूप से समान है

$ mount /dev/sdb1 /mnt
mount: only root can do that
$ sudo mount /dev/sdb1 /mnt

बस कम टाइपिंग। दोनों ही मामलों में sudo बस देखता है mount /dev/sdb1 /mntऔर इसे रूट अनुमतियों के साथ चलाता है।


5

!!इतिहास विस्तार के लिए वाक्यविन्यास सबसे सरल और संभवतः सबसे सामान्य अभिव्यक्ति है ।

जैसा कि आपने देखा होगा कि अंतिम कमांड को प्रतिस्थापित करने के बाद !!, bash दो चीजें करता है (इसके डिफ़ॉल्ट कॉन्फ़िगरेशन में):

  1. प्रतिस्थापित पाठ के साथ पूर्ण कमांड आपको दिखाया गया है।

    उदाहरण के लिए, यदि आपकी कमांड थी lshw -c videoऔर आप sudo !!आगे चलते हैं , तो इतिहास विस्तार के बाद कमांड है sudo lshw -c video

  2. वह आदेश चलाया जाता है।

आम तौर पर ये दो चरण बिना किसी रुकावट के होते हैं और उपयोगकर्ता बातचीत के लिए कोई अवसर नहीं होता है, क्योंकि shopt histverifyडिफ़ॉल्ट रूप से परेशान होता है ( shopt -u histverify)।

हालाँकि, यदि आप सक्षम करते हैं shopt histverify( shopt -s histverify) तो इतिहास विस्तार अलग तरीके से काम करता है:

  1. आपको एक नया प्राथमिक संकेत मिलता है, जिस पर विस्तृत पाठ स्वतः प्रविष्ट हो जाता है। यह ऐसा है जैसे आपने उस पाठ को स्वयं टाइप किया था, अंत में कर्सर के साथ, लेकिन अभी तक कमांड नहीं चला है।
  2. आप, उपयोगकर्ता, तो Enterकमांड चलाने के लिए प्रेस करना होगा । या आप कमांड को संपादित कर सकते हैं, इसे रद्द कर सकते हैं ( Ctrl+ C), आदि ध्यान दें कि यह एक विशेष संकेत नहीं है, लेकिन एक नियमित प्राथमिक संकेत है। यह वास्तव में है जैसे कि आपने स्वयं पाठ टाइप किया है।

(ध्यान दें कि histverify शेल विकल्प तभी प्रभावी होता है जब रीडलाइन लाइब्रेरी का उपयोग किया जा रहा हो - लेकिन जब आप उबंटू या अन्य जीएनयू / लिनक्स सिस्टम पर इंटरैक्टिव रूप से बैश का उपयोग करते हैं, तो यह अनिवार्य रूप से हमेशा होता है।)

histverifyशेल विकल्प सक्षम है या नहीं , इतिहास विस्तार कई अन्य शेल विस्तारों से भिन्न है। अन्य शेल विस्तार आपको चलने से पहले विस्तारित कमांड नहीं दिखाते हैं। अन्य विस्तार के विपरीत, जिनका उद्देश्य अंतःक्रियात्मक और अनिर्वचनीय रूप से (उदाहरण के लिए, शेल स्क्रिप्ट में) दोनों का उपयोग किया जाना है, इतिहास विस्तार लगभग हमेशा संवादात्मक रूप से उपयोग किया जाता है।


3

! लिनक्स में इतिहास से संबंधित शॉर्टकट के लिए उपयोग किया जाता है। इसलिए, !! आपके द्वारा निष्पादित पिछली कमांड को बस चलाएगा।

यह उन मामलों में बहुत मददगार होता है जब आप या तो एक कमांड से पहले सूडो लगाना भूल जाते हैं जिसके लिए इसकी आवश्यकता होती है या आपको अनुमति अस्वीकृत या ऐसा कुछ मिलता है

सुडोल !!
और आपने कल लिया।


0

!! दोहराएगा और पिछली कमांड को चलाएगा, और सुडो के साथ यह कमांड को विशेषाधिकार प्रदान करेगा। (यह मैन पेज में नहीं है! मैं इसे वहां नहीं देख सकता।)


मैन पेज की तलाश में किसी के लिए:man --pager='less -p "Event Designators"' bash
सेबी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.