लॉग इन पर स्क्रिप्ट की अनुक्रम अनुक्रमित


41

मैं अपने सभी लॉगिन लॉगिन को अपने में केंद्रित करना चाहूंगा ~/.bash_profile~/.bashrcडिफ़ॉल्ट रूप से वहाँ था, लेकिन मैंने इसे एक के साथ बदल दिया ~/.bash_profile

हालाँकि, जब मैं लॉग इन करता हूं, तो मेरे बैठने से पहले कुछ ~/.bash_profileऔर निम्नलिखित प्रदर्शित करता है:

Linux ubnt10-dev1 2.6.32-38-server #83-Ubuntu SMP Wed Jan 4 11:26:59 UTC 2012 x86_64 GNU/Linux
Ubuntu 10.04.4 LTS

Welcome to the Ubuntu Server!
 * Documentation:  http://www.ubuntu.com/server/doc

  System information as of Fri May  9 12:17:39 EDT 2014

  System load:  0.01              Processes:           74
  Usage of /:   5.5% of 18.58GB   Users logged in:     0
  Memory usage: 4%                IP address for eth0: 123.x.x.x
  Swap usage:   0%

  Graph this data and manage this system at https://landscape.canonical.com/

New release 'precise' available.
Run 'do-release-upgrade' to upgrade to it.

Last login: Fri May  9 12:11:52 2014 from 123.x.x.x

मैं इसे हटा देना चाहूंगा ताकि मेरे अपने ~/.bash_profileप्रदर्शन में परिभाषित केवल छप-छप ग्रीटिंग प्रदर्शित हो लेकिन जब कोई उपयोगकर्ता लॉग इन करता है तो मुझे स्क्रिप्ट्स के तर्क / अनुक्रम के बारे में निश्चित नहीं है। क्या आप मुझे बता सकते हैं?

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

जवाबों:


53

यह एक तरह से जटिल है। सबसे पहले, विवरण इस बात पर निर्भर करता है कि आप किस प्रकार का शेल चला रहे हैं। खुद को ख़ुश करने के लिए :

  • जब आप एक टर्मिनल एमुलेटर खोलते हैं ( gnome-terminalउदाहरण के लिए), तो आप निष्पादित कर रहे हैं जिसे एक इंटरैक्टिव, गैर-लॉगिन शेल के रूप में जाना जाता है ।

  • जब आप कमांड लाइन से अपनी मशीन में लॉग इन करते हैं, या जैसे कमांड चलाते su - usernameहैं, तो आप एक इंटरेक्टिव लॉगिन शेल चला रहे हैं ।

  • जब आप ग्राफ़िकल रूप से लॉग इन करते हैं, तो आप कुछ पूरी तरह से अलग चल रहे हैं। विवरण आपके सिस्टम और चित्रमय वातावरण पर निर्भर करेगा लेकिन सामान्य तौर पर, यह ग्राफ़िकल शेल है जो आपके लॉगिन से संबंधित है। जबकि कई ग्राफिकल गोले (उबंटू डिफ़ॉल्ट सहित) पढ़ेंगे /etc/profileऔर ~/.profileउनमें से सभी नहीं करेंगे ।

  • अंत में, जब आप एक शेल स्क्रिप्ट चलाते हैं, तो यह एक गैर-इंटरैक्टिव, गैर-लॉगिन शेल में चलाया जाता है ।

लॉन्च होने पर बैश होने वाली फाइलें शेल के प्रकार पर निर्भर करती हैं। निम्नलिखित man bash(इस पर जोर) खंड के निवेश का एक अंश है :

जब बैश को एक इंटरेक्टिव लॉगिन शेल के रूप में या एक गैर-इंटरेक्टिव शेल के रूप में - एल्गिन विकल्प के रूप में लागू किया जाता है , तो यह पहले फ़ाइल / आदि / प्रोफाइल से कमांड को पढ़ता है और निष्पादित करता है , यदि वह फ़ाइल मौजूद है। उस फ़ाइल को पढ़ने के बाद, यह उस क्रम में ~ / .bash_profile, ~ / .bash_login और ~ / .profile की तलाश करता है, और पहले मौजूद से कमांड पढ़ता और निष्पादित करता है और पढ़ने योग्य होता है। जब इस व्यवहार को रोकने के लिए शेल शुरू किया जाता है - तो नोप्रोफाइल विकल्प का उपयोग किया जा सकता है।

जब एक इंटरेक्टिव शेल जो लॉगिन शेल नहीं है, तो bash पढ़ता है और /etc/bash.bashrc और ~ / .bashrc से कमांड निष्पादित करता है , अगर ये फाइलें मौजूद हैं। यह --norc विकल्प के उपयोग से बाधित हो सकता है। --Rcfile फ़ाइल विकल्प bet को /etc/bash.bashrc और ~ / .bashrc के बजाय फ़ाइल से कमांड को पढ़ने और निष्पादित करने के लिए बाध्य करेगा।

वे आरंभीकरण फ़ाइलें हैं। आपके पास /etc/environmentवह स्थान भी है जहां आप वैश्विक पर्यावरण चर सेट कर सकते हैं लेकिन यह खट्टा होने के बजाय पढ़ा जाता है (इसके अंदर कमांड निष्पादित नहीं होती हैं लेकिन चर परिभाषाएं सेट की जाती हैं)।

अब, आपके द्वारा देखा गया अभिवादन फिर से कुछ और है। इसके /etc/motdमाध्यम से सेट किया जाता है और प्रदर्शित किया जाता है pam_motd। जैसा कि समझाया गया है man motd:

/ Etc / motd की सामग्री एक सफल लॉगिन के बाद pam_motd (8) द्वारा प्रदर्शित की जाती है लेकिन लॉगिन शेल को निष्पादित करने से ठीक पहले।

संक्षिप्त नाम "motd" का अर्थ "दिन का संदेश" होता है, और इस फ़ाइल को पारंपरिक रूप से ठीक उसी के लिए उपयोग किया जाता है (इसमें सभी उपयोगकर्ताओं के लिए मेल की तुलना में बहुत कम डिस्क स्थान की आवश्यकता होती है)।

डेबियन जीएनयू / लिनक्स पर, /run/motd.dynamic की सामग्री भी प्रदर्शित की जाती है। यह फ़ाइल बूट पर /etc/init.d/motd द्वारा जनरेट की गई है।

संदेश को निकालने के लिए बस /etc/motdफ़ाइल को खाली करें और सुनिश्चित करें कि /etc/init.d/motdयदि मौजूद है तो कुछ भी उत्पन्न नहीं हो रहा है ।


वैसे भी, आपके द्वारा दिखाए जाने वाले आउटपुट के आधार पर, आपको लगता है sshकि आप लॉग इन कर रहे हैं, जिसका अर्थ है कि आप एक इंटरेक्टिव लॉगिन शेल चला रहे हैं , इसका मतलब है कि ऊपर देखें। तो, संक्षेप में, जब आप लॉग इन करते हैं (और इस क्रम में) तो आपको जिन चीज़ों की परवाह है, वे खट्टी हैं:

  1. एसएसएच डेमन, pam_motdपीएएम पुस्तकालय के मॉड्यूल के माध्यम से , की सामग्री को प्रदर्शित करता है /etc/motdpam_envमॉड्यूल के माध्यम से , यह /etc/environmentऔर से पर्यावरण चर सेट करता है ~/.pam_environment
  2. एक लॉगिन शेल शुरू किया गया है, और निम्न फाइलें क्रम में पढ़ी जाती हैं:
    1. /etc/profile
    2. /etc/bash.bashrc(डिफ़ॉल्ट उबंटू /etc/profileस्रोत /etc/bash.bashrc)।
    3. ~/.bash_profile। अन्य फ़ाइलें जो यहां पढ़ी जा सकती थीं ( ~/.profileऔर ~/.bash_login) क्योंकि ~/.bash_profileमौजूद हैं उन्हें नजरअंदाज कर दिया गया है।

5
इस चीज़ की खोज करने के लिए एक अच्छा ट्रिक सेंटिनल चर को चारों ओर लगा रहा है। मेरा मतलब है, मैं डाल export SET_IN_ETC_PROFILE=yesमें /etc/profile, export SET_IN_HOME_ZSHRC=yesमें ~/.zhshrcरिबूट (मैं एक zsh उपयोगकर्ता हूँ), आदि ... तो फिर और एक अच्छा env|grep SET_INआप सभी कहानी सुनाता हूँ। यह देखने के लिए कि डेस्कटॉप एप्लिकेशन द्वारा कौन से चर देखे जाते हैं (जिन्हें आप डैश या WM से लॉन्च करते हैं, टर्मिनल का उपयोग किए बिना), askubuntu.com/a/356973/16395
Rmano

1
तो जब आप ssh, कि एक इंटरैक्टिव खोल, सही होगा?
उभयचर

@amphibient एक इंटरेक्टिव लॉगिन शेल है, हाँ। जब आप टूर लोकल मशीन पर एक टर्मिनल खोलते हैं, तो यह एक इंटरेक्टिव, नॉन लॉगइन शेल होता है।
terdon

@ रमनो I ने आपकी टिप्पणियों को बढ़ा दिया। लेकिन क्षणों के बाद envआदेश का निष्पादन के आदेश के साथ कोई संबंध नहीं है।
पेंघ गेंग

2
@xiaobai निश्चित रूप से, मुद्दा यह है कि SET_INआपको दिखाई देगा कि कौन सी फाइलें पढ़ी गई हैं, न कि किस क्रम में वे पढ़ी गई हैं। आदेश मानक है, यह वही है जो मेरे उत्तर में मैन पेज अंश में दिखाया गया है।
terdon

1

जब आप ssh के माध्यम से लॉगिन करते हैं, तो आप / आदि / प्रोफ़ाइल से पहले बनाई गई जानकारी देख रहे होते हैं। /Etc/update-motd.d में फ़ाइलों के अनुक्रम पर एक नज़र डालें। यह आपको दिखाएगा कि आपके द्वारा देखे जा रहे संदेश विभिन्न स्क्रिप्ट द्वारा उत्पन्न किए गए हैं।


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