/etc/profile শুধুমাত্র লগইন শেলগুলির জন্য অনুরোধ করা হয় কারণ এটির নির্দিষ্ট উদ্দেশ্য।
আপনি যদি একটি কমান্ড ইন্টারেক্টিভ শেল যে জন্য চালাতে চান তাহলে না শাঁস লগইন করবেন, এবং আপনি ব্যবহার করছেন bash, এটা রাখা ~/.bashrcবা /etc/bash.bashrc।
"প্রোফাইল" ফাইলগুলির উদ্দেশ্য হ'ল আদেশগুলি কেবল লগইন শেলগুলির জন্য চালানো উচিত contain এই ফাইলগুলি হ'ল:
/etc/profile, লগইন শেল হিসাবে শুরু করার সময় সমস্ত বোর্ন-সামঞ্জস্যপূর্ণ শেল (সহ bashএবং dash) চালিত ।
স্ক্রিপ্ট ইন /etc/profile.d।
এটি বোর্ন-স্টাইলের শেলগুলির জন্য, তবে এটি নিজেই চালানো শেলের মধ্যে কোড করা হয়নি। বরং কমান্ডগুলি /etc/profileতাদের কল করে। উদাহরণস্বরূপ, আমার উবুন্টু 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.profiledash
"প্রোফাইল" ফাইলগুলিতে কী করা উচিত
"প্রোফাইল" ফাইলগুলিতে লগ-ইনের শুরুতে কমান্ড থাকা উচিত যা কেবল একবার চালানো উচিত। (এটিতে গ্রাফিক্যাল লগইনগুলিও অন্তর্ভুক্ত রয়েছে, যেমন তারা লগইন শেল দিয়ে শুরু করে)) যদি শেলটি ইন্টারেক্টিভ হয় তবে এটি চালিত ব্যবহারকারীর বোধহয় লগইন থাকে এবং তাই সম্ভবত এটির কোনও পূর্বপুরুষ রয়েছে (যা এটি শুরু করেছে, বা এটি কী শুরু করেছিল, বা এটি শুরু করে) এটি লগইন শেল ছিল।
আপনি কেবল একবার কমান্ড চালাতে চাইতে পারেন কারণ:
- এটি লগইন প্রতি একাধিকবার চালানোর কোনও কারণ নেই, এটি অদক্ষ হবে, বা
- এটি লগইন প্রতি একাধিকবার চালানোর জন্য একটি অনাকাঙ্ক্ষিত ফলাফল আনবে।
দ্বিতীয় অবস্থার উদাহরণ হিসাবে, যেখানে একটি অনাকাঙ্ক্ষিত ফলাফল ঘটবে, এই লাইনগুলি বিবেচনা করুন, যা প্রতিটি ব্যবহারকারীর ডিফল্টরূপে প্রদর্শিত হয় ~/.profile:
# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
PATH="$HOME/bin:$PATH"
fi
ধরুন আপনি এসএসএইচ করতেন, অন্য শেলটি চালিয়েছিলেন (বলুন 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, "RC" ফাইল আসলে চালানো হয় কিনা শেল ইন্টারঅ্যাকটিভ বা না । তবে শীর্ষে তারা বলে:
# If not running interactively, don't do anything
[ -z "$PS1" ] && return
সুতরাং, যদি স্ক্রিপ্টগুলি সম্পাদন করতে চালিত চালকের মতো অ-ইন্টারেক্টিভ শেলগুলিতে স্বয়ংক্রিয়ভাবে চালনার জন্য আপনার যদি কমান্ডের প্রয়োজন হয় তবে আপনি এই লাইনের আগে আপনার কমান্ড যুক্ত করতে পারেন ।
একটি লগইন শেল শুরু করা হচ্ছে
লগ ইন একটি লগইন শেল শুরু। আপনি যদি লগিন শেল হিসাবে আচরণ করতে তার পরে শেল শুরু করতে চান তবে এটি -lপতাকা দিয়ে শুরু করুন ( l ওগিনের জন্য দাঁড়িয়ে )। উদাহরণ স্বরূপ:
লগইন শেলটি শুরু করার সেরা উপায় (লগ ইন না করে) যদি না আপনি অন্য একজন ব্যবহারকারী হিসাবে শুরু করতে চান । তারপরে, ব্যবহার করুন:
sudo -iজন্য root(ব্যবহারের sudo -sএকটি অ লগইনের জন্য, ইন্টারেক্টিভ রুট শেল)
sudo -u username -i যে কোনও ব্যবহারকারীর জন্য
su - usernameঅ- rootব্যবহারকারীদের জন্য ( অ-লগ-ইন, ইন্টারেক্টিভ রুট শেল ব্যবহার করুন)su username
একটি কী প্রাথমিক লগ-ইন শেল?
একটি প্রাথমিক লগ-ইন শেল একটি হিসাবে একই লগ-ইন শেল । এই উত্তরটি যেখানেই "লগইন শেল" বলেছে এটি "ইনটিনাল লগইন শেল" বলতে পারে (এই বিভাগটি বাদে, যা ইতিমধ্যে বোধগম্যতা বন্ধ করে দিয়েছিল)।
মেয়াদে একটি কারন inital লগ-ইন শেল যে লগ-ইন শেল শনাক্ত করতে - একটি ভিন্ন অর্থে ব্যবহৃত হয় কোন প্রোগ্রাম শেল যে লগ ইন করে মৃত্যুদন্ড কার্যকর করা হয় হিসেবে ব্যবহৃত হয়। এটি বলার জন্য লগইন শেলটির ধারণাটি ছিল :
আরও পড়া