यदि व्यवस्थापक के रूप में साइबर मिनिट / बैश चलाया जाता है, तो कैसे जांचें?


16

समस्या कथन: यदि सिग्विन mintty bashसत्र "रन ऑफ़ द एडमिनिस्ट्रेटर" है तो परीक्षण करने का सबसे सुरुचिपूर्ण और मजबूत तरीका क्या है ?

क्यों, विशेष रूप से? minttyविंडोज का उपयोग करते समय मेरे पास आमतौर पर कई टर्मिनल खुले होते हैं ( minttyजिनमें टैब नहीं होते हैं)। सबसे अजीब तब होता है जब मुझे एक टर्मिनल विंडो खोजने की आवश्यकता होती है जिसे मैंने "व्यवस्थापक के रूप में चलाएं" पर राइट-क्लिक करके शुरू किया था, उदाहरण के लिए जब मैं pingएक या दूसरी प्रक्रिया चलाना चाहता हूं । मैं टर्मिनल सत्र के "प्रशासक के रूप में चलाने" को नेत्रहीन ( मेरी स्टार्ट-अप फ़ाइल में bashशेल प्रॉम्प्ट चर PS1को बदलकर) इंगित करना चाहूंगा ~/.bashrc

कुछ त्वरित संभावित समाधान:

  1. मैं कुछ पर्यावरण चर के मूल्य की तुलना कर सकता हूं। envआउटपुट के त्वरित रूप से काफी अंतर हैं। हालांकि यह बताना कठिन है कि किसी अन्य विंडोज मशीन (शायद विंडोज के विभिन्न संस्करण को चलाने) के लिए पोर्टेबिलिटी के संदर्भ में कौन सा विश्वसनीय है।
  2. id, id -Gnयदि प्रशासक के रूप में चलाया जाता है, तो विशेष रूप से विभिन्न समूहों को दिखाता है। मेरी विंडोज 7 मशीन में मेरे पास Administratorsऔर rootसमूह सूची में जोड़े गए हैं। फिर, मुझे यकीन नहीं है कि यह पोर्टेबल है।
  3. मैं एक ऐसे स्थान पर एक फ़ाइल लिखने की कोशिश कर सकता हूं जो सामान्य उपयोगकर्ता के रूप में विफल हो। लेकिन मैं किसी भी फाइल को अजीब जगहों पर नहीं लिखना चाहता हूं - यह कुछ कल्पित परिदृश्यों में संभावित विनाशकारी हो सकता है (जैसे भंडारण मीडिया को विफल करना) और यह मेरे स्वाद के लिए पूरी तरह से अयोग्य लगता है।
  4. कुछ विंडोज प्रोग्राम चलाना जो कि रिटर्न स्टेटस या आउटपुट द्वारा इंगित करेगा यदि कमांड "प्रशासक" के रूप में चलाया जाता है। सर्वश्रेष्ठ UNIX id(1)कमांड के अनुरूप उद्देश्य के साथ कुछ होगा (लेकिन मूल रूप से विंडोज में मौजूद है - या साइगविन, लेकिन बहुत दूर तक विंडोज सिस्टम कॉन्सेप्ट्स का POSIX एमुलेटेड कॉन्सेप्ट्स में अनुवाद किए बिना)।

कोई बेहतर या अधिक सुरुचिपूर्ण सुझाव? शायद साइबरविन इस उद्देश्य के लिए समर्पित कमांड उपयोगिता प्रदान करता है?

अपडेट: /programming/4051883/batch-script-how-to-check-for-admin-rights/ का 97% डुप्लिकेट - अंतर केवल bash(IMHO अजीब और पुरातन) विंडोज के बजाय यहाँ उपयोग कर रहा है cmd.exe। कृपया वहाँ उत्तर और टिप्पणियों की जाँच करें।


"व्यवस्थापक के रूप में चलाएं" का उपयोग करें जब तक कि आप ऐसा नहीं करते हैं, तब तक प्रक्रिया प्रशासक की अनुमति के लिए उन्नत नहीं है, भले ही एक व्यवस्थापक खाता प्रक्रिया शुरू करता हो। बस एक शॉर्टकट बनाएं ताकि यह हमेशा पूरा हो सके।
रामहाउंड

1
मैं ConEmu की कोशिश करने की सलाह देता हूं । इसमें टैब होते हैं, टैब को अलग-अलग आइकन द्वारा टैबबार में दर्शाए गए व्यवस्थापक के रूप में चला सकते हैं और सबसे महत्वपूर्ण रूप से पर्दे के पीछे कंसोल का उपयोग करता है ताकि देशी विंडो अनुप्रयोग मिनिट पर इसके विपरीत सही तरीके से काम करें।
Jan Hudec

2
@ रामदूत आप सही हैं कि मेरी मूल समस्या (एडमिनिस्ट्रेटर टर्मिनल विंडो को अलग करना) जिसे मैंने पहले ही इस सवाल में छोटा कर दिया था, उसके लिए शॉर्ट कट बनाकर हल किया जा सकता था mintty। १. एडमिनिस्ट्रेटर के रूप में चलता है, २.विभिन्न रंग के साथ अलग कॉन्फ़िगरेशन फ़ाइल का उपयोग करता है सेटिंग्स और 3. एक वैकल्पिक आइकन का उपयोग करता है। यदि आप आम जनता को इसका वर्णन करने का तरीका बताते हैं, तो मैं आपको एक उत्थान दूंगा (जब तक कि आप अपने उत्तर में यह नहीं कहेंगे कि यह स्क्रिप्ट के भीतर नहीं किया जा सकता है :-)।
FooF

1
@FooF - सिर्फ इसलिए कि आप एक प्रशासक स्तर के उपयोगकर्ता के साथ एक प्रक्रिया चलाते हैं इसका मतलब यह नहीं है कि प्रक्रिया ही आगे बढ़ गई है। डिफ़ॉल्ट रूप से विंडोज केवल एक प्रक्रिया से बच जाएगा यदि उपयोगकर्ता ऐसी कार्रवाई को मंजूरी देता है इसलिए विंडोज में "व्यवस्थापक के रूप में चलाएं" सुविधा। Fooयदि आप चाहते हैं तो उपयोगकर्ता समूह के लिए भी आप किसी भी समूह को सभी अनुमतियाँ प्रदान कर सकते हैं ।
रामहाउंड

1
@FooF - बस इसे ऐसा समझें, sudoजिसकी आवश्यकता तब भी है जब आप रूट यूजर के रूप में चल रहे हों।
रामहाउंड

जवाबों:


9

मैंने इस फ़ंक्शन को उसी कारण लिखा है। मैं कभी नहीं जानता कि किस शेल में व्यवस्थापक विशेषाधिकार हैं।

function isadmin()
{
    net session > /dev/null 2>&1
    if [ $? -eq 0 ]; then echo "admin"
    else echo "user"; fi
}

इस उत्तर से अनुकूलित किया गया है /programming//a/11995662/307968 विंडोज़ cmd शेल के लिए। यदि आप व्यवस्थापक हैं, तो नेट सत्र 0 स्थिति देता है।

अब मुझे बस अपना प्रॉम्प्ट बदलने की ज़रूरत है, या हो सकता है कि टाइटलबार का रंग…।


अच्छा लगा। यद्यपि ऐसा लगता है कि किनारे के मामले हैं, जहां यह बहुत विफल हो जाता है, अगर आप स्टैकओवरफ़्लो टिप्पणियों की जांच करते हैं।
FooF

फिर भी मैंने इस उत्तर को स्वीकार कर लिया क्योंकि यह बहुत व्यापक चर्चा (स्टैकओवरफ्लो प्रश्न और वर्तमान में स्वीकृत उत्तर के अंक क्रमशः 147 और 255 के स्कोर है)।
FooF

धन्यवाद! मैं अपने प्रॉम्प्ट में उपयोगकर्ता नाम को चुनिंदा रूप से रंगने के लिए इसका उपयोग करता हूं। यदि बिक्री बढ़ जाती है, तो मैं इसे लाल रंग देता हूं, अन्यथा हरा। यदि आपके पास कई टर्मिनल खिड़कियां खुली हैं, तो कौन से गोले ऊंचे हैं, इस पर नज़र रखने के लिए उपयोगी है।
HelloGoodbye

16

इस सवाल का निश्चित जवाब सिगविन मेलिंग सूची से आता है । एक प्रक्रिया प्रशासक के अधिकारों के साथ चल रही है यदि इसे शुरू करने वाला उपयोगकर्ता समूह 544 (प्रशासक) का हिस्सा है। इसके अलावा, नीचे दी गई टिप्पणी से, ऐसा लगता है कि समूह 114 (स्थानीय खाता और प्रशासक समूह का सदस्य) भी कभी-कभी मौजूद होता है। इन दो समूहों के लिए परीक्षण है

id -G | grep -qE '\<(114|544)\>'

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

id -G | grep -qE '\<(114|544)\>' && echo admin || echo user

अतीत में आपको समूह 0, रूट समूह में / etc / समूह के लिए जाँच करने की भी आवश्यकता थी। लेकिन / etc / group को अब Cygwin में इंस्टॉल नहीं किया गया है, और इसे आम तौर पर मौजूद होने पर हटा दिया जाना चाहिए, इसलिए अब इसे 0 ग्रुप के लिए भी जांचने की अनुशंसा नहीं की जाती है। सिर्फ समूह 544।


1
सिगविन मेलिंग सूची में पूछने के लिए धन्यवाद। :-) यह जानकर अच्छा लगा कि (आईडी / अनुवादित) समूह आईडी सिस्टम के बीच स्थिर रहता है।
FooF

ज़रूर ... मैं खुद को जानना चाहता था, और वहां के लोग जानते हैं
एंड्रयू शुल्मन

1
दुर्भाग्य से यह Mingw / Msys में काम नहीं करता है। स्टीवन का जवाब है, हालांकि केवल विंडोज 7 पर
स्पैरो

1
मैंने सिर्फ यह कोशिश की है कि (W7 पर) और यह काम नहीं किया, लेकिन मैंने देखा है, कि अगर विंडो के उपयोगकर्ता के रूप में लॉग इन किया जाता है, तो वह भी एक व्यवस्थापक है, तब जब Cygwin को व्यवस्थापक के रूप में चलाया जाता है, तो एक और समूह होता है जो idउत्पादन में चबूतरे , अर्थात् 114 (स्थानीय खाता और प्रशासक समूह के सदस्य)। तो regexp को अपडेट किया जाना चाहिए:id -G | grep -qE '\<(114|544)\>' && echo admin || echo user
20

धन्यवाद। मैंने खुद को नहीं देखा है, लेकिन मैं देखता हूं कि समूह 114 एक प्रशासक समूह प्रतीत होता है, इसलिए इसके लिए भी जांच करना उचित प्रतीत होता है। मैंने उत्तर को संशोधित किया।
एंड्रयू शुल्मन

7

मैं विंडोज प्रोग्राम के रिटर्न वैल्यू का उपयोग करता हूं at। मैंने विशेष चरित्र की कार्यक्षमता को फिर से बनाया है \$

# Set a white $ initially
eStyle='\[\e[0m\]$'

# If 'at' succeeds, use a red # instead
at &> /dev/null && eStyle='\[\e[0;31m\]#\[\e[0m\]'  # Use # in red

PS1='\n\[\e[0;32m\]\u@\h \[\e[0;33m\]\w\[\e[0m\]\n'"$eStyle "

उदाहरण


यह मानते हुए कि idविंडोज में UNIX कमांड के बराबर नहीं है , मैं इसे एक सही उत्तर के रूप में स्वीकार करता हूं। atबिना किसी तर्क के कम से कम चलने वाली कमांड का कोई दुष्प्रभाव नहीं दिखता है। मैं .bashrcअब से अपनी फ़ाइल में इस विधि का उपयोग करने जा रहा हूँ ! हैक के लिए धन्यवाद।
FooF

1
windows8.1 पर काम करने के लिए प्रतीत नहीं होता है
zzapper

1
@zzapper कृपया अधिक विशिष्ट बनें। क्या होता है / नहीं होता है? त्रुटि संदेश?
स्टीवन

4
आईडी समान मान लौटाता है, इसके बजाय उपयोग किए गए schtasks.exe का उपयोग किया जाता है, लेकिन यह काम करता है या नहीं
zzapper

2

id -G | grep -qE '\<(544|0)\>'मेरे लिए काम नहीं कर रहा था, क्योंकि मेरा उत्पादन न तो <> या 544 था जब भी ऊंचा हो गया। हालाँकि, लिखने के लिए ऊंचाई की आवश्यकता होती है %WINDIR%\system32, इसलिए मैंने इसका उपयोग शेल फ़ंक्शन के साथ ऊंचाई के लिए परीक्षण करने के लिए किया है:

is_elevated() { 
   [[ $(uname -o) -eq "Cygwin" ]] || return 1
   touch $WINDIR/system32/.cyg_elevated &> /dev/null
}

जब लाल हैश चरित्र के स्टीवन के उत्कृष्ट विचार पर लागू किया जाता है:

is_elevated && PS1='\[\e]0;\w\a\]\n\[\e[32m\]\u@\h \[\e[33m\]\w\[\e[0m\]\n\[\e[0;31m\]#\[\e[0m\] '

1

कुछ ऐसा करें जो केवल व्यवस्थापक ही कर सकता है और सफलता या असफलता के लिए परीक्षण कर सकता है: -

if touch c:/Users/.x ; then  echo 'ok'  ; fi

या

touch c:/Users/.x && echo ok

या

touch c:/Users/.x && \rm c:/Users/.x && echo ok

या

touch c:/Users/.x  &> /dev/null && \rm c:/Users/.x && echo you are admin

1

Windows पर Msys में यह कोशिश करो (मुझे लगता है कि स्वीकृत जवाब Msys में काम नहीं किया है)

at &> /dev/null && echo "Running as admin" || echo "NOT running as admin"

यह atकेवल व्यवस्थापक के रूप में चलने पर शून्य होने के रिटर्न कोड पर निर्भर करता है ।


1
यह वही विधि है जो @Steven ने पहले उत्तर में दी थी (जो कि टिप्पणी के अनुसार विंडोज 8.1 पर काम नहीं करता है - जब तक कि MSYS "किसी तरह" नहीं है)। जबकि सवाल Cygwin के बारे में था, समान MSYS के साथ तुलना करना दिलचस्प है। योगदान के लिए धन्यवाद।
FooF

बहुत समान हाँ। हालाँकि, मैं इस सवाल पर समाप्त हो गया, क्योंकि यह एक स्क्रिप्ट (Win7, Msys) को बैश प्रॉम्प्ट शैली को स्थापित करने के बजाय जांचने के लिए उपयोग करने की कोशिश कर रहा था, इसलिए मैंने सोचा कि यह किसी और के लिए भी हो सकता है
स्पैरो

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