/etc/profile
केवल लॉगिन शेल के लिए आमंत्रित किया जाता है क्योंकि यह इसका विशिष्ट उद्देश्य है।
आप एक आदेश इंटरैक्टिव गोले कि कर रहे हैं के लिए चलाना चाहते हैं नहीं गोले के लिए लॉग इन करें, और आप उपयोग कर रहे हैं bash
, यह में डाल दिया ~/.bashrc
या /etc/bash.bashrc
।
"प्रोफ़ाइल" फ़ाइलों का उद्देश्य उन आदेशों को समाहित करना है जो केवल लॉगिन गोले के लिए चलाया जाना चाहिए। ये फाइलें हैं:
/etc/profile
, जब एक लॉगिन शेल के रूप में शुरू किया गया, सभी बॉर्न-संगत गोले (सहित bash
और dash
) द्वारा चलाया गया ।
में लिपियों /etc/profile.d
।
यह बॉर्न-शैली के गोले के लिए है, लेकिन यह स्वयं निष्पादन योग्य शेल में कोडित नहीं है। बल्कि, /etc/profile
उन्हें कॉल करने में कमांड करता है। उदाहरण के लिए, मेरे Ubuntu 12.04 सिस्टम पर, /etc/profile
इन पंक्तियों को शामिल किया गया है:
if [ -d /etc/profile.d ]; then
for i in /etc/profile.d/*.sh; do
if [ -r $i ]; then
. $i
fi
done
unset i
fi
.profile
उपयोगकर्ता के होम निर्देशिका में, बॉर्न-संगत शेल द्वारा चलाए जाते हैं जब एक लॉगिन शेल के रूप में शुरू किया जाता है (जब तक कि ओवरराइड नहीं किया जाता है, नीचे देखें)।
.bash_profile
या .bash_login
उपयोगकर्ता के घर निर्देशिका में। इनके अलावा अन्य गोले द्वारा अनदेखा किया जाता है bash
। लेकिन अगर .bash_profile
मौजूद है, bash
तो इसके बजाय इसे चलाता है .profile
। यदि .bash_profile
मौजूद नहीं .bash_login
है, लेकिन मौजूद है, इसके बजाय चलाया जाता है .profile
।
(लेकिन यह एक आम बात है .bash_profile
या .bash_login
, जब यह मौजूद है, लिखे जाने की इतनी के रूप में * स्पष्ट रूप से कॉल करने के लिए .profile
।)
शेल-विशिष्ट प्रोफ़ाइल फ़ाइलों का लाभ यह है कि उनमें कमांड या सिंटैक्स हो सकते हैं जो केवल उस शेल के लिए मान्य हैं। उदाहरण के लिए, मैं / [[
में मूल्यांकन ऑपरेटर का उपयोग कर सकता हूं, लेकिन अगर मैं इसका उपयोग करता हूं और फिर अपने शेल के रूप में लॉग इन करता हूं, तो यह विफल हो जाएगा।.bash_profile
.bash_login
.profile
dash
"प्रोफाइल" फाइलों में क्या जाना चाहिए
"प्रोफाइल" फाइलों में ऐसी कमांडें होनी चाहिए जो लॉगिन के शुरुआत में केवल एक बार चलें। (इसमें ग्राफ़िकल लॉगिन शामिल हैं, क्योंकि वे एक लॉगिन शेल के साथ शुरू करते हैं, भी।) यदि कोई शेल इंटरएक्टिव है, तो इसे चलाने वाला उपयोगकर्ता शायद लॉग ऑन है, और इसलिए इसका संभवतः एक पूर्वज है (जिसने इसे शुरू किया है, या इसे शुरू किया है, लॉग या शुरू किया है, आदि) जो एक लॉगिन शेल था।
आप केवल एक बार कमांड चलाना चाहते हैं क्योंकि:
- प्रति लॉगिन एक से अधिक बार चलाने का कोई कारण नहीं है, यह अक्षम होगा, या
- यह एक अवांछित परिणाम का उत्पादन करेगा, इसे लॉगिन के अनुसार एक से अधिक बार चलाने के लिए।
दूसरी स्थिति के उदाहरण के रूप में, जहां एक अवांछनीय परिणाम होगा, इन पंक्तियों पर विचार करें, जो प्रत्येक उपयोगकर्ता में डिफ़ॉल्ट रूप से दिखाई देते हैं ~/.profile
:
# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
PATH="$HOME/bin:$PATH"
fi
मान लें कि आप SSH'd में, एक और शेल (कहते हैं zsh
) चला गया, कुछ बिंदु पर पाया गया कि आप अस्थायी रूप से वापस जाना चाहते हैं, bash
लेकिन अपने पर्यावरण को बनाए रखें (इसलिए bash
फिर से भागे zsh
), और फिर एक प्रोग्राम चलाया जैसे mc
कि एक शेल भाग के रूप में इसके इंटरफ़ेस के। यदि bin
आपके होम फोल्डर में मौजूद है और आपका उपयोगकर्ता नाम है james
, तो आपका PATH
अंतरतम शेल कुछ इस प्रकार है:
/home/james/bin:/home/james/bin:/home/james/bin:/home/james/bin:/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
यह अक्षम है और (अधिक महत्वपूर्ण बात) यह कठिन है कि सामग्री को समझना मुश्किल है PATH
।
हालांकि यह किसी भी तरह से एक आपदा नहीं है। जहां तक मैं बता सकता हूं, अगर हर इंटरेक्टिव शेल "प्रोफाइल" फाइलों में खटकता है, तो डिफ़ॉल्ट कॉन्फ़िगरेशन में कुछ भी भयानक नहीं होगा । हालाँकि, चूंकि "प्रोफ़ाइल" फ़ाइलों का उद्देश्य लॉगिन के प्रति केवल एक बार चलने के लिए आदेशों को समाहित करना है , उपयोगकर्ता या व्यवस्थापक एक प्रोफ़ाइल में कमांड जोड़ सकते हैं जो केवल लॉगिन शेल शुरू करते समय ही चलना चाहिए ।
हर इंटरएक्टिव शेल को चलाने के लिए कमांड कहां रखें
यदि आप उपयोग कर रहे हैं bash
, तो हर इंटरेक्टिव शेल में चलने वाली कमांड्स के लिए फाइलें हैं:
/etc/bash.bashrc
.bashrc
उपयोगकर्ता के घर निर्देशिका में।
यह आमतौर पर आदेशों के लिए उपयोग किया जाता है
- शेल के केवल पर्यावरण को प्रभावित करते हैं जिसमें वे चलते हैं - बच्चे के गोले भी नहीं, या
- यह लॉगिन शेल नहीं होने पर भी चलना चाहिए।
उदाहरण के लिए, कमांड-लाइन टैब-समापन आम तौर पर सक्षम होना चाहिए कि bash
लॉगिन शेल था या नहीं । तो यह इसमें दिखाई देता है ~/.bashrc
:
if [ -f /etc/bash_completion ] && ! shopt -oq posix; then
. /etc/bash_completion
fi
वहां, 1 और 2 दोनों लागू होते हैं: यह इस एक के अंदर चलने वाले अन्य शेल पर नहीं ले जाता है, और टैब-पूरा होने पर bash
भी काम करना चाहिए , अगर मैं एक अलग शेल के साथ लॉग इन करता हूं।
लॉगइन शेल और इंटरएक्टिव नॉन-लॉगइन शेल के लिए कमांड कहां रखें
आप उपयोग कर रहे हैं bash
और एक कमांड लॉगिन गोले और इंटरैक्टिव गोले में चलाना चाहते हैं और उस के लिए लॉग इन गोले नहीं कर रहे हैं, यह आम तौर पर में यह डाल करने के लिए पर्याप्त है /etc/bash.bashrc
या~/.bashrc
। ऐसा इसलिए है, क्योंकि डिफ़ॉल्ट रूप से, /etc/profile
और ~/.profile
उन्हें स्पष्ट रूप से चलाएं। उदाहरण के लिए, ~/.profile
है:
# if running bash
if [ -n "$BASH_VERSION" ]; then
# include .bashrc if it exists
if [ -f "$HOME/.bashrc" ]; then
. "$HOME/.bashrc"
fi
fi
(इसी तरह, /etc/profile
सूत्रों के /etc/bash.bashrc
लिए bash
)
इस प्रकार "प्रोफ़ाइल" और "आरसी" दोनों फाइलें चलती हैं जब आप एक इंटरेक्टिव bash
शेल शुरू करते हैं (चाहे वह एक लॉगिन शेल हो या नहीं)।
नॉन-इंटरएक्टिव गोले में चलाने के लिए कमांड कहां रखें
आप शायद सभी गैर-संवादात्मक गोले चलाने के लिए कोई आदेश निर्दिष्ट नहीं करना चाहते हैं; वे हर बार एक स्क्रिप्ट चलाने के लिए चलाएंगे (बशर्ते कि स्क्रिप्ट आपके द्वारा चलाने के लिए कॉन्फ़िगर किए गए शेल द्वारा चलाई जाए)।
यह पर्याप्त टूटना पैदा कर सकता है। यदि आप ऐसा करने जा रहे हैं, और आपके द्वारा उपयोग किए जा रहे सिस्टम के अलावा सिस्टम पर कोई व्यवस्थापक खाता नहीं है, तो आप एक बनाना चाह सकते हैं; जो गलतियों को ठीक करना आसान बना सकता है।
में bash
, "आर सी" फ़ाइलें वास्तव में चलाए जा रहे हैं कि क्या खोल इंटरैक्टिव है या नहीं । हालांकि, सबसे ऊपर वे कहते हैं:
# If not running interactively, don't do anything
[ -z "$PS1" ] && return
इसलिए, यदि आपको स्क्रिप्ट्स को निष्पादित करने के लिए चलने वाले गैर-संवादात्मक गोले में भी स्वचालित रूप से चलने के लिए आदेशों की आवश्यकता है, तो आप उन पंक्तियों से पहले अपने आदेश जोड़ सकते हैं ।
लॉगिन शेल शुरू करना
लॉग इन एक लॉगिन शेल शुरू करता है। यदि आप चाहते हैं कि एक शेल उसके बाद शुरू हुआ, एक लॉगिन शेल के रूप में व्यवहार करने के लिए, इसे -l
ध्वज के साथ प्रारंभ करें ( l ogin के लिए खड़ा है )। उदाहरण के लिए:
जब तक आप किसी अन्य उपयोगकर्ता के रूप में एक शुरू नहीं करना चाहते, तब तक लॉगिन शेल (बिना लॉग इन किए) शुरू करना सबसे अच्छा तरीका है । फिर, उपयोग करें:
sudo -i
के लिए root
( sudo -s
एक गैर-लॉगिन, इंटरैक्टिव रूट शेल के लिए उपयोग करें )
sudo -u username -i
किसी भी उपयोगकर्ता के लिए
su - username
गैर- root
उपयोगकर्ताओं के लिए ( गैर-लॉगिन, इंटरेक्टिव रूट शेल के लिए उपयोग)su username
एक क्या है प्रारंभिक लॉगिन खोल?
एक प्रारंभिक लॉगिन खोल एक रूप में ही है लॉगिन खोल । हर जगह यह जवाब "लॉगिन शेल" कहता है कि यह "इनबिल्ट लॉगिन शेल" कह सकता है (इस खंड को छोड़कर, जो पहले से ही समझदारी को रोक देगा)।
इनबिल्ट लॉगिन शेल शब्द का एक कारण यह भी है कि लॉगिन शेल का उपयोग एक अलग अर्थ में भी किया जाता है - यह पहचानने के लिए कि किस प्रोग्राम को लॉग ऑन करके निष्पादित शेल के रूप में उपयोग किया जाता है। यह कहा जाता है कि लॉगिन शेल का अर्थ है :
आगे की पढाई