লগ-ইন শেলগুলির জন্য কেন / ইত্যাদি / প্রোফাইলকে অনুরোধ করা হচ্ছে না?


51

লগইন এবং অ-লগইন শেল হিসাবে সংজ্ঞায়িত:

su - $USER # will give you a login shell
bash # will give you a non-login shell

/ ইত্যাদি / প্রোফাইল লগ-ইন শেলগুলির জন্য অনুরোধ করা হয় না, যেমন আপনি যখন কনসোল (কেডি) শুরু করেন। / ইত্যাদি / প্রোফাইল কেবল লগইন শেলগুলির জন্য আমন্ত্রিত।

তা কেন? দয়া করে ব্যাখ্যা করুন, কারণ আমি এর যৌক্তিকতা বুঝতে পছন্দ করি।

উত্তর:


100

/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

"প্রোফাইল" ফাইলগুলিতে কী করা উচিত

"প্রোফাইল" ফাইলগুলিতে লগ-ইনের শুরুতে কমান্ড থাকা উচিত যা কেবল একবার চালানো উচিত। (এটিতে গ্রাফিক্যাল লগইনগুলিও অন্তর্ভুক্ত রয়েছে, যেমন তারা লগইন শেল দিয়ে শুরু করে)) যদি শেলটি ইন্টারেক্টিভ হয় তবে এটি চালিত ব্যবহারকারীর বোধহয় লগইন থাকে এবং তাই সম্ভবত এটির কোনও পূর্বপুরুষ রয়েছে (যা এটি শুরু করেছে, বা এটি কী শুরু করেছিল, বা এটি শুরু করে) এটি লগইন শেল ছিল।

আপনি কেবল একবার কমান্ড চালাতে চাইতে পারেন কারণ:

  1. এটি লগইন প্রতি একাধিকবার চালানোর কোনও কারণ নেই, এটি অদক্ষ হবে, বা
  2. এটি লগইন প্রতি একাধিকবার চালানোর জন্য একটি অনাকাঙ্ক্ষিত ফলাফল আনবে।

দ্বিতীয় অবস্থার উদাহরণ হিসাবে, যেখানে একটি অনাকাঙ্ক্ষিত ফলাফল ঘটবে, এই লাইনগুলি বিবেচনা করুন, যা প্রতিটি ব্যবহারকারীর ডিফল্টরূপে প্রদর্শিত হয় ~/.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 ব্যবহারকারীর হোম ডিরেক্টরিতে।

এটি কমান্ডগুলির জন্য সবচেয়ে বেশি ব্যবহৃত হয়

  1. তারা যে শেলটি চালায় কেবল তার পরিবেশকেই প্রভাবিত করে - এমনকি শিশু শেলও নয়, বা
  2. এটি লগইন শেল না হলেও চালানো উচিত।

উদাহরণস্বরূপ, 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 লগ-ইন শেল যে লগ-ইন শেল শনাক্ত করতে - একটি ভিন্ন অর্থে ব্যবহৃত হয় কোন প্রোগ্রাম শেল যে লগ ইন করে মৃত্যুদন্ড কার্যকর করা হয় হিসেবে ব্যবহৃত হয়। এটি বলার জন্য লগইন শেলটির ধারণাটি ছিল :

আরও পড়া


4
যে কোনও স্ট্যাক এক্সচেঞ্জ সাইটে যে কোনও প্রশ্নের সেরা উত্তর।
মার্ক ই। হাজেস

1
> "প্রোফাইল" ফাইলগুলিতে লগ-ইনের শুরুতে কমান্ড থাকা উচিত যা কেবল একবার চালানো উচিত। (এটিতে গ্রাফিকাল লগইনগুলিও অন্তর্ভুক্ত রয়েছে যেমন তারা লগইন শেল দিয়ে শুরু করে)) না না না না না! এটা একেবারে না! সমস্ত বোর্নের মতো শেলগুলি কেবল ইন্টারেক্টিভ লগইন শেল সেশনগুলিতে প্রোফাইলে পড়েন , অর্থাত্ - -i বিকল্পটি দিয়ে শুরু করা হয়েছে, বা একটি নিয়ন্ত্রণকারী টার্মিনালের সাথে সংযুক্ত রয়েছে (কোনটি শেল যদি ডিসপ্লে ম্যানেজার দ্বারা শুরু করা হত তবে সত্য নয়)। এটি সত্য হওয়ার কারণ হ'ল এই ফাইলটির পয়েন্টটি কেবল তাদের পরিবেশ নয়, ব্যবহারকারীর টার্মিনাল সেটআপ করা । যদি কোনও ডিসপ্লে ম্যানেজার ট্র

এলিয়াহ, আমি ডেরেকের বাকী মন্তব্যগুলি এখানে পুনরুত্পাদন করেছি তবে উপরের স্টাম্পটি রেখে গিয়েছি যাতে সে আপনার জবাব বিজ্ঞপ্তিটি পাবে, যদিও খ্যাতির প্রয়োজনীয়তার কারণে সে তাতে সাড়া দিতে সক্ষম হবে না। আমি ওকে উপরের চ্যাটরুমে লেখার অ্যাক্সেস দিয়েছি।
শেঠ

1
In bash, the "rc" files are actually run whether the shell is interactive or not. ভুল. /etc/bash.bashrc /etc/bash.profile দ্বারা ট্রিগার করা হয়।
ওক্যাপ করুন

okwap, ডান, RC ফাইল নন-ইন্টারেক্টিভ শেল আবাহন পেতে না এই যে এটি আরো সংক্ষিপ্ত এবং সঠিক।
নিক অ্যালেন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.