सवाल बिना लॉग आउट किए लिनक्स उपयोगकर्ता के समूह असाइनमेंट को दोबारा लोड करें


उपयोगकर्ता का द्वितीयक समूह सूची निर्दिष्ट करते समय:

# usermod -G <grouplist> <user>

क्या इस समूह असाइनमेंट को सभी चल रहे सत्रों को लॉग आउट किए बिना प्रभावी होने के लिए मजबूर करना संभव है?

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

मुझे लगता है कि मैं उपयोगकर्ता के प्राथमिक समूह को एक रनिंग खोल में बदल सकता हूं newgrp आदेश - क्या कोई विकल्प है जो माध्यमिक समूहों के लिए काम करेगा?

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


266
2018-04-17 19:50


मूल


मुझे पता है कि कम से कम कुछ खिड़की / सत्र प्रबंधकों के लिए ऐसा करना संभव है कि सत्र नए समूह को उठाता है और यह मेनू, पैनल बटन या जो भी हो, से शुरू की गई किसी भी नई प्रक्रिया के लिए उपलब्ध है। मैं अभी यहां फिर से ढूंढने के लिए देख रहा था, इसलिए अभी यह नहीं कह सकता कि यह कैसे करें, और यह शायद विंडो प्रबंधक के लिए विशिष्ट है। - mc0e


जवाब:


बहुत हैकी, लेकिन आप दो परतों का उपयोग कर सकते हैं newgrp किसी विशेष समूह के लिए इसे प्राप्त करने के लिए:

id -g

... आपको वर्तमान प्राथमिक समूह आईडी देगा। हम इसे कॉल करेंगे orig_group इस उदाहरण के प्रयोजनों के लिए। फिर:

newgrp <new group name>

... आपको उस समूह में प्राथमिक के रूप में बदल देगा और इसे वापस समूहों की सूची में जोड़ देगा groups या id -G। अब, एक और:

newgrp <orig_group>

... आपको एक खोल मिलेगा जिसमें आप नया समूह देख सकते हैं और प्राथमिक मूल है।

यह भयानक है और केवल एक ही समय में आपको एक समूह जोड़ा जाएगा, लेकिन इसने मुझे अपने पूरे एक्स सत्र में लॉग आउट किए बिना समूहों को जोड़ने के लिए दो बार मदद की है (उदाहरण के लिए उपयोगकर्ता को समूह के रूप में जोड़ा गया फ्यूज प्राप्त करना ताकि एसएसएफएस काम करेगी)।

संपादित करें: आपको अपने पासवर्ड को टाइप करने की आवश्यकता नहीं है, जो su मर्जी।


164
2017-10-10 17:36



अच्छा चाल, मुझे यह पसंद है - Simon
फेडोरा पर मुझे करना था newgrp $USER के बजाय newgrp <orig_group>। इसका मतलब है कि मुझे अपनी मूल प्राथमिक समूह आईडी नहीं ढूंढनी पड़ी, इसलिए यह इस समाधान से भी आसान है। - Richard Turner
मैंने पाया कि यह करने के लिए पर्याप्त था newgrp <new group name>। यह उबंटू 14.04 था - Edward Falk
@EdwardFalk सही है, लेकिन आप (समूह नहीं) उस समूह को अपने प्राथमिक के रूप में छोड़ना चाहते हैं ... - mimoralea
ध्यान दें कि प्रत्येक newgrp एक नया खोल बनाता है, इसलिए जब आपको अपने सत्र से पूरी तरह से बाहर निकलने की आवश्यकता होती है तो आपको सभी तरह से बाहर निकलने के लिए "बाहर निकलने के बाहर निकलने" की आवश्यकता होती है (: - jwd


एक खोल के अंदर से, आप निम्न आदेश जारी कर सकते हैं

su - $USER

आईडी अब नए समूह की सूची देगा:

id

269
2017-11-06 15:28



मुझे लगता है कि यह कई मामलों में सबसे अच्छा तरीका है, लेकिन मूल पोस्टर स्क्रीन सत्र के भीतर कई शैल अपडेट करना चाहता था। यह समाधान प्रत्येक खोल से किया जाना चाहिए। - Adrian Ratnapala
अच्छा चाल, महान काम करता है! - genpfault
मूल समाधान स्क्रीन में केवल एक एकल खोल सत्र को ठीक करेगा। मैंने बस इसका परीक्षण किया। इस समाधान का कारण यह है कि आप मूल वातावरण से विरासत के बजाय एक पूर्ण नया सत्र तैयार कर रहे हैं। - Dror
यह वास्तव में स्वीकार्य जवाब होना चाहिए। अच्छा चाल, धन्यवाद! - dotancohen
इसके लिए आपको पासवर्ड टाइप करने की आवश्यकता है, हालांकि यदि आप कई सत्रों में ऐसा करने की कोशिश कर रहे हैं तो यह अजीब / अवांछित हो सकता है। - Legooolas


यह निफ्टी चाल से यह लिंक बहुत अच्छा काम करता है!

exec su -l $USER

मैंने सोचा कि मैं इसे यहां पोस्ट करूंगा क्योंकि हर बार जब मैं भूल जाता हूं कि यह कैसे करना है, यह पहला लिंक है जो Google में आता है।


124
2018-06-18 16:27



उपयोगकर्ता को सबहेल में डालने के लिए +1; आप इसके साथ सामान्य रूप से लॉगआउट / बाहर निकल सकते हैं। इसके अलावा, अगर NOPASSWD: / etc / sudoers में सेट है, तो आप इसके बजाय उपयोग कर सकते हैं exec sudo su -l $USER पासवर्ड के लिए संकेत मिलने से बचने के लिए। - Ivan X
सलाह दीजिए: आपको एक सूडो पासवर्ड के लिए कहा जाएगा। यदि आपको यह गलत लगता है, तो आपका टर्मिनल बंद हो जाएगा। - Tyler Collier
@ टायलर कॉलियर इवान किया था उल्लेख NOPASSWD: - pepoluan


1. लॉग आउट किए बिना नए समूह के साथ एक खोल प्राप्त करना

यदि आप केवल एक समूह जोड़ रहे हैं, तो मैंने निम्न का उपयोग किया:

exec sg <new group name> newgrp `id -gn`

यह लेगोलास की दो परत वाली नई ट्रिप पर एक भिन्नता है, लेकिन यह एक पंक्ति में है और आपको अपने प्राथमिक समूह को मैन्युअल रूप से दर्ज करने की आवश्यकता नहीं है।

sg newgrp है लेकिन नए समूह आईडी के साथ निष्पादित करने के लिए कमांड स्वीकार कर रहा है। exec इसका मतलब है कि नया खोल मौजूदा खोल को बदल देता है, इसलिए आपको दो बार "लॉगआउट" करने की आवश्यकता नहीं है।

Su का उपयोग करने के विपरीत, आपको अपना पासवर्ड टाइप करने की आवश्यकता नहीं है। यह आपके पर्यावरण को रीफ्रेश नहीं करता है (समूह जोड़ने के अलावा), ताकि आप अपनी वर्तमान कार्यशील निर्देशिका आदि को बरकरार रख सकें।

2. सत्र में सभी स्क्रीन विंडो में कमांड निष्पादित करना

at स्क्रीन में कमांड आपके द्वारा निर्दिष्ट जो भी विंडो में एक कमांड चलाता है (ध्यान दें कि यह एक स्क्रीन कमांड है, शेल कमांड नहीं)।

आप सभी मौजूदा स्क्रीन सत्रों को कमांड भेजने के लिए निम्न आदेश का उपयोग कर सकते हैं:

screen -S <session_name> -X at \# stuff "exec sg <new_group_name> newgrp \`id -gn\`^M"

पाने के लिए बैकटिक्स से बचने की जरूरत पर ध्यान दें id स्क्रीन सत्र में चलाने के लिए, और ^ एम को अपने आदेश के अंत में 'एंटर' हिट करने के लिए स्क्रीन प्राप्त करने के लिए।

ध्यान दें कि स्क्रीन भी है stuff कमांड बस आपकी तरफ से कमांड टेक्स्ट टाइप करता है। इसलिए कुछ अजीब हो सकता है यदि स्क्रीन विंडो में से एक को कमांड प्रॉम्प्ट पर अर्ध-लिखित कमांड होता है या एक खोल के अलावा एक एप्लीकेशन चला रहा है (उदा। Emacs, top)। यदि यह एक मुद्दा है, तो मेरे पास कुछ विचार हैं:

  • किसी भी आधा लिखित कमांड से छुटकारा पाने के लिए, आप कमांड की शुरुआत में "^ सी" जोड़ सकते हैं।
  • एक emacs विंडो, आदि में कमांड को चलाने से बचने के लिए, आप विंडो शीर्षक आदि पर फ़िल्टर करने के लिए 'एट' पूछ सकते हैं (ऊपर दिए गए उदाहरण में, मैं "#" का उपयोग करता हूं, जो सभी विंडोज़ से मेल खाता है, लेकिन आप विंडो शीर्षक, उपयोगकर्ता द्वारा फ़िल्टर कर सकते हैं , आदि)।

एक विशिष्ट विंडो (विंडो संख्या द्वारा पहचाना गया) में कमांड चलाने के लिए, निम्न का उपयोग करें:

screen -S <session_name> -p 0 -X stuff "exec sg <new_group_name> newgrp \`id -gn\`^M"

20
2017-12-17 21:33



बहुत बढ़िया एक लाइनर, जो कि अन्य साइड इफेक्ट्स प्रतीत नहीं होता है, धन्यवाद! - Cyril Duchon-Doris


तुम यह केर सकते हो।

आप जितना चाहें उतने समूह जोड़ें usermod -G। फिर, चल रहे सत्र वाले उपयोगकर्ता के रूप में, चलाएं newgrp - केवल '-' तर्क के साथ।

यह समूह आईडी को डिफ़ॉल्ट रूप से पुन: प्रारंभ करता है, लेकिन यह माध्यमिक समूहों को भी सेट करेगा। आप इसे चलाकर सत्यापित कर सकते हैं groups वर्तमान सत्र से पहले और बाद में usermod और यह newgrp

इसे प्रत्येक खुले सत्र से चलाया जाना है - मुझे स्क्रीन के बारे में ज्यादा जानकारी नहीं है। हालांकि, यदि सभी खुले सत्रों और रनों पर पुन: प्रयास करना संभव है newgrp, आपको अच्छा होना चाहिए। आपको समूह या समूह आईडी जानने के बारे में चिंता करने की आवश्यकता नहीं होगी।

तुम्हारे लिऐ शुभकामना।


13
2018-01-30 16:17



एक एक्स सत्र के भीतर xterm पर कोशिश की लेकिन यह काम नहीं किया - dwery
टीएमयूक्स में एक सत्र में कोशिश की और यह वहां भी काम नहीं किया - Michael
अमेज़ॅन लिनक्स 2 पर कोशिश की, यह काम नहीं किया - Cyril Duchon-Doris
newgrp - एक नई खोल प्रक्रिया शुरू करता है - Piotr Findeisen


समूह आमतौर पर लॉगिन पर गणना किए जाते हैं, मुझे कोई रास्ता नहीं है कि मैं इसे फिर से लॉग आउट किए बिना समूह गणना को फिर से करने के लिए मजबूर करने के लिए मजबूर करता हूं।

यहां दिए गए कई उत्तर एक ऐसे कामकाज का उपयोग करते हैं जो नए वातावरण के साथ एक नए खोल को आमंत्रित करता है (जैसा कि फिर से लॉगिंग के समान होता है)। अभिभावक खोल और अन्य सभी लगातार चल रहे कार्यक्रमों को आम तौर पर स्वच्छ लॉगआउट और लॉगिन के बाद ताज़ा खोल से फिर से बुलाए जाने तक नई समूह सदस्यता प्राप्त नहीं होती है।


12
2018-04-25 17:56



सच में, मुझे पूरा यकीन है कि यह सच नहीं है - मुझे लिनक्स बॉक्स पर पहले ऐसा करने का कोई तरीका मिला। हालांकि, मेरे जीवन के लिए, मुझे याद नहीं है कि आदेश क्या था। अगर मुझे लगता है, तो मैं इसे पोस्ट करूंगा। संपादित करें: बस इसे मिला, मैं इसे एक उत्तर के रूप में पोस्ट कर रहा हूं। - lunchmeat317


का उपयोग करते हुए newgrp आदेश मेरे लिए समस्या हल हो गई:

newgrp <GroupName>

यह ब्लॉग पोस्ट विस्तृत स्पष्टीकरण है।


10
2017-10-07 04:53



सुपर उपयोगकर्ता में आपका स्वागत है! इस क्यू एंड साइट पर हम प्रदान करने का प्रयास करते हैं अच्छे जवाब लोगों को पोस्ट करने के लिए सवाल। इसका एक हिस्सा आपकी पोस्ट में उत्तर सहित है, बस किसी अन्य पृष्ठ पर एक लिंक प्रदान करने के बजाय जो प्रश्न का उत्तर दे सकता है। पोस्ट किए गए प्रश्न के वास्तविक समाधान को शामिल करने के लिए कृपया अपना उत्तर संपादित करें। - cascer1
यह मेरी राय में सबसे अच्छा तरीका है और इसे नए स्वीकृत उत्तर के रूप में चिह्नित किया जाना चाहिए। - Dakatine


संक्षेप में:

exec newgrp <newlyaddedgroupname1>
exec newgrp <newlyaddedgroupname2>
...
exec newgrp -

'Exec' का उपयोग करना मौजूदा शेल को newgrp कमांड द्वारा शुरू किए गए नए खोल के साथ प्रतिस्थापित करना है (इसलिए नए शैल लॉग से बाहर निकलना)।

अंतिम newgrp - अपने सामान्य प्राथमिक समूह को पुनर्स्थापित करने के लिए आवश्यक है, इसलिए बाद में बनाई गई फ़ाइलों के पास उनके समूह के स्वामी के रूप में होगा।

नोट: मूल पोस्टर का सवाल यह था कि मौजूदा प्रक्रियाओं में नए जोड़े गए समूह कैसे दिखें। gpasswd तथा usermod आदेश मौजूदा प्रक्रियाओं को प्रभावित नहीं करते हैं; नए जोड़े गए (या हटाए गए!) समूह आपके खाते में गायब हो जाते हैं, यानी / etc / group और / etc / gshadow फ़ाइलों में, लेकिन मौजूदा प्रक्रियाओं के लिए अनुमतियां नहीं बदली गई हैं। सेवा मेरे हटाना अनुमतियाँ आपको किसी भी चल रही प्रक्रियाओं को मारना है; newgrp - पुन: पढ़ा नहीं जाएगा / आदि / समूह और समूह सूची रीसेट; इसके बजाय, ऐसा लगता है कि पहले प्रक्रिया से जुड़े समूहों का उपयोग करना है।


4
2018-02-10 23:21



वैसे, exec su - <username> समूह सेट के साथ एक नया लॉगिन खोल प्राप्त करने के लिए उपयोग किया जा सकता है, लेकिन यह स्क्रिप्ट में काम नहीं करेगा क्योंकि एक नया खोल टर्मिनल से कमांड पढ़ेगा। आप उपयोग कर सकते हैं su -c "command ..." <myusername> अपनी स्क्रिप्ट को पुनरारंभ करने के लिए, लेकिन परिणामी प्रक्रिया में कोई नियंत्रण टर्मिनल नहीं है और इसलिए एक स्क्रीन संपादक या अन्य इंटरैक्टिव कमांड का प्रयास करने पर एक त्रुटि उत्पन्न होगी। - jimav
यह क्यों गिराया गया था? क्या कोई इस बारे में बता सकता है कि इसके बारे में क्या बुरा है, क्योंकि यह मेरे साथ हुआ और मुझे लगता है कि मुझे यह सबसे अच्छा लगता है? - jasonmp85
गह, मैंने परीक्षण से पहले इसे वोट दिया। newgrp - कर देता है नहीं "प्राथमिक समूह" को प्रतिस्थापित करें। पैट्रिक कोंहेडी का जवाब यहां सबसे अच्छा है, क्योंकि यह न तो कांटा और न ही प्राथमिक समूह को बदलता है। - jasonmp85


मेरे पास समान समस्या थी लेकिन लॉग-इन उपयोगकर्ताओं के लिए भी नहीं। एनएससीडी के पुनरारंभ करने में मदद नहीं मिली, लेकिन इस आदेश को निष्पादित करने से: nscd -i group। समूह समूह को पुनः लोड करने के लिए उसे एनएससीडी (कैशिंग डेमॉन) को निर्देश देना चाहिए।


1
2017-11-13 16:07