.Bashrc এবং .bash_profile বোঝা


26

সার্ভারে যখন আমি রুট হিসাবে লগইন করি আমি দেখি .bashrc(উবুন্টু 10.10)।

আমার ম্যাক আমি একটি আছে .bash_profile

উবুন্টু কি সবসময় কেবল একটি থাকে? .bashrc ফাইল থাকে এবং না .bash_profile? (আমি কেবল বিভ্রান্ত হয়েছি, তাই জিজ্ঞাসা করছি, আমি বুঝতে পারি যে তারা আলাদা আলাদা আলাদা আলাদা তবে সম্ভবত কোনওরকম সম্পর্ক আছে?)

আমার সার্ভারে, আমি একটি উপনাম তৈরি করতে চাই, আমি এটি প্রবেশ করানো উচিত .bashrc ?

আমি যদি এই উরফটি প্রয়োগ করতে চাই যাতে সমস্ত ব্যবহারকারী এটি ব্যবহার করতে পারে?


1
সম্ভবত এর সদৃশ: Askubuntu.com/questions/1528/bashrc-or-bash-profile - আমি আপনাকে বিশ্বব্যাপী এলিয়াসগুলি কোথায় রাখবেন তা জিজ্ঞাসা করার জন্য আপনার প্রশ্নটি পরিবর্তন করার পরামর্শ দিচ্ছি।

উত্তর:


39

বাশ এলিয়াসগুলি পৃথক হোম ডিরেক্টরিগুলির ফাইল .bash_aliasesবা .bashrcফাইলগুলিতে যেতে হবে । যদি আপনার অবশ্যই গ্লোবাল বাশ এলিয়াস তৈরি করতে /etc/bash.bashrcহয় তবে সেগুলি প্রবেশ করতে পারে তবে এগুলি নতুনভাবে তৈরি হওয়া ব্যবহারকারীদের দ্বারা উত্তরাধিকার সূত্রে প্রাপ্ত ফাইলগুলিতে .bash_aliasesবা .bashrcফাইলগুলিতে যুক্ত করা সবচেয়ে ভাল /etc/skel

এটা কার্যত সবসময় ভুল মধ্যে উপনাম নির্ধারণ করতে .profile, .bash_profileঅথবা /etc/profile

কেন তা বোঝার জন্য, এই ফাইলগুলির প্রত্যেকটি থেকে কোন পরিস্থিতিতে কমান্ড পরিচালিত হয় তা বুঝতে হবে । এটি সম্পর্কে ভুল ধারণা রয়েছে, যা আমি নীচে সম্বোধন করছি।

যদিও আপনি একাধিক ব্যবহারকারীর জন্য উপকরণগুলি সংজ্ঞায়িত করতে চান তবে পৃথক ব্যবহারকারীদের জন্য কীভাবে সেগুলি সংজ্ঞায়িত করা উচিত সে সম্পর্কে আপনার জানা উচিত, যাতে আপনার যা প্রয়োজন তা করার সর্বোত্তম পদ্ধতির বিষয়ে সিদ্ধান্ত নিতে পারেন।

ব্যক্তিগত ব্যবহারকারীদের জন্য উপকরণ

বিশেষত আপনি যদি জিইউআই ব্যবহার করেন তবে আপনার বেশিরভাগ ইন্টারেক্টিভ শেলগুলি সম্ভবত নন-লগইন শেল। এমনকি আপনি যদি কখনও জিইউআই ব্যবহার না করেন তবে আপনি সম্ভবত কিছুটা ফ্রিকোয়েন্সি সহ নন-লগইন শেল ব্যবহার করেন । আপনি চাইবেন যে আপনার উপনামগুলি এই শেলগুলিতে কাজ করে।

বিশেষত আপনি যদি কখনও ভার্চুয়াল কনসোলে বা এসএসএইচ-এর মাধ্যমে অ-গ্রাফিকভাবে লগ ইন করেন তবে আপনি সম্ভবত কিছু সময় লগইন শেল ব্যবহার করেন। সুতরাং আপনি চান যে আপনার এলিয়াসগুলি ইন্টারেক্টিভ লগইন শেলগুলিতেও কাজ করবে।

যখন কোনও ইন্টারেক্টিভ, অ-লগইন শেলটি শুরু হয় , এটি .bashrcব্যবহারকারীর হোম ডিরেক্টরিতে উত্স । উবুন্টুতে ডিফল্টরূপে প্রতিটি ব্যবহারকারীর .bashrcনিজস্ব উত্স .bash_aliases, যদি তা বিদ্যমান থাকে।

  • করার উৎস একটি ফাইল এটির সামগ্রীগুলি চালানোর কারণ হতে হয় বর্তমান শেল। উত্সযুক্ত একটি ফাইলের শেল পরিবেশে পরিবর্তনগুলি ফাইলের সমস্ত কমান্ড চালানোর পরেও অব্যাহত থাকে।

উবুন্টুর ডিফল্ট মন্তব্যগুলি পড়লে .bashrcপ্রকাশিত হয় যে এটি আনুষ্ঠানিকভাবে উদ্দেশ্যে করা হয়েছিল যে এলিয়াসগুলি প্রবেশ করা যায় .bashrcবা হয় .bash_aliases.bashrcইতিমধ্যে কিছু উরফ সংজ্ঞা রয়েছে ( grep '^[[:blank:]]*alias' ~/.bashrcসেগুলি দেখার জন্য চালান ), এবং এই জাতীয় নতুন সংজ্ঞা কোথায় রাখবেন সে সম্পর্কে সুস্পষ্ট পরামর্শ দেয়:

# Alias definitions.
# You may want to put all your additions into a separate file like
# ~/.bash_aliases, instead of adding them here directly.
# See /usr/share/doc/bash-doc/examples in the bash-doc package.

if [ -f ~/.bash_aliases ]; then
    . ~/.bash_aliases
fi

তবে ইন্টারেক্টিভ লগইন শেলগুলি কী? পরিবর্তে .bashrcলগইন শেল উত্স .profile

  • ... .bash_loginঅস্তিত্ব না থাকলে তার পরিবর্তে এটি টক হয়ে যায়।
  • ... .bash_profileঅস্তিত্ব না থাকলে তার পরিবর্তে এটি টক হয়ে যায়।

যাইহোক, ভাল খবর হল যে উবুন্টু ডিফল্টরূপে হয় কমান্ড .bashrcহবে এছাড়াও ইন্টারেক্টিভ লগইন শাঁস চালানোর কারণ ডিফল্ট .profileচেক যদি বর্তমান শেল ব্যাশ (এবং যদি .bashrcবিদ্যমান), এবং যদি তাই হয়, উত্স .bashrc:

# if running bash
if [ -n "$BASH_VERSION" ]; then
    # include .bashrc if it exists
    if [ -f "$HOME/.bashrc" ]; then
        . "$HOME/.bashrc"
    fi
fi

আমি ব্যবহারকারীদের .bash_aliasesতাদের বাড়ির ডিরেক্টরিতে নতুন বাশ উপন্যাস সংজ্ঞায়িত করার পরামর্শ দিই (এটি ইতিমধ্যে উপস্থিত না থাকলে এটি তৈরি করে)। প্রতি ব্যবহারকারীর পর্যায়ে উরফ সংজ্ঞা স্থায়ী করার এটি একটি বিশেষ পরিষ্কার এবং সহজ উপায়।

এলিয়াসগুলি সংজ্ঞায়িত করা উচিত নয়.profile কারণ তারা লগ-ইন শেলগুলিতে অপরিজ্ঞাত থাকবে। বাশ শেলের বেশিরভাগ পরিবেশের বিপরীতে, উপাধিগুলি শিশু শেলগুলিতে রফতানি হয় না :

ek@Io:~$ alias hi='echo "Greetings, $USER!"'
ek@Io:~$ hi
Greetings, ek!
ek@Io:~$ bash
ek@Io:~$ hi
hi: command not found

বিশেষত, ডিফল্টরূপে বেশিরভাগ ডেস্কটপ এনভায়রনমেন্টগুলি .profileগ্রাফিকাল লগইনে উত্সাহিত করে তবে:

  1. এটি অগত্যা ব্যাশ শেল দ্বারা করা হয় না, তাই উরফ সংজ্ঞাগুলি এমনকি প্রক্রিয়াও করা যায় না এবং আরও গুরুত্বপূর্ণ
  2. এমনকি যদি ওরফে সংজ্ঞাগুলি প্রক্রিয়া করা হয় তবে সেগুলি শিশু প্রক্রিয়াগুলিতে প্রেরণ করা হয় না । বিশেষত, তারা টার্মিনাল উইন্ডো খোলার মাধ্যমে তৈরি শেলগুলিতে প্রেরণ করা হয় না!

.bash_profile.bash_loginখুব একই কারণে (বা ) এ্যালিয়াসগুলি সংজ্ঞায়িত করা উচিত নয় , তবে অন্য কোনও কারণেও। নির্লজ্জভাবে এই ফাইলগুলির মধ্যে একটি তৈরি করা এবং এটিতে কেবল উরফ সংজ্ঞা স্থাপন করা কোনও কোড .profileচালানো থেকে বাধা দেয় !

এমন পরিস্থিতিতে যেখানে .bash_profileবা .bash_loginসত্যই কার্যকর, .profileতাদের মধ্যে কোথাও একটি উত্স , যা এই সমস্যার সমাধান করে। (তারপরে কেবল অবশিষ্ট সমস্যাটি হ'ল, এর মতো বা এর .profileমধ্যেও এলিয়াসগুলি সংজ্ঞায়িত করা.bash_profile.bash_login কাজ করে না))

জন্য ওরফে নিউ স্বতন্ত্র ব্যবহারকারীরা স্বয়ংক্রিয়ভাবে

প্রকৃত মানুষের প্রতিনিধিত্ব করতে ইচ্ছুক ধরণের ব্যবহারকারীর অ্যাকাউন্ট তৈরি করা হলে, তাদের হোম ডিরেক্টরি হিসাবে পরিবেশন করার জন্য একটি নতুন ডিরেক্টরি সাধারণত তৈরি করা হয়। /etc/skelএরপরে সামগ্রীগুলি তাদের হোম ডিরেক্টরিতে অনুলিপি করা হয়। একাধিক ব্যবহারকারী তাদের বাড়ির ডিরেক্টরিতে অনুরূপ কিছু কনফিগারেশন ফাইল দিয়ে শুরু করেন। উবুন্টু, এই অন্তর্ভুক্ত .profile, .bashrcএবং কিছু অন্যান্য ফাইল।

নতুন ব্যবহারকারীর জন্য কী কী এলিয়াস সংজ্ঞায়িত হয়েছে তা পরিবর্তন করতে, আপনি কেবল এগুলিতে রাখতে পারেন /etc/skel/.bash_aliases(আপনাকে এটি তৈরি করতে হবে) বা/etc/skel/.bashrc

আপনি যদি ইতিমধ্যে বিদ্যমান ফাইলটি সম্পাদনা করেন /etc/skelতবে আপনি প্রথমে এটি ব্যাক আপ করতে চাইতে পারেন - তবে আপনার ব্যাকআপটি রাখা উচিত নয় /etc/skel, বা এটিও নতুন ব্যবহারকারীর হোম ডিরেক্টরিতে অনুলিপি করা হবে।

এটি সম্ভবত একাধিক ব্যবহারকারীর জন্য নতুন উপকরণ যুক্ত করার সর্বোত্তম উপায়। বিদ্যমান ব্যবহারকারীরা কেবলমাত্র তাদের নিজস্ব নামগুলি যুক্ত করতে পারেন। আপনি যদি এলিয়াসগুলি সংজ্ঞায়িত করেন তবে আপনি /etc/skel/.bash_aliasesকেবল তাদের সেই ফাইলটিতে সরাসরি পরিচালনা করতে পারেন, যা তারা তাদের হোম ডিরেক্টরিতে অনুলিপি করতে পছন্দ করতে পারে (বা তাদের নিজস্ব কাস্টম .bash_aliasesফাইলটিতে যুক্ত করতে পারেন)।

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

সমস্ত ব্যবহারকারীর জন্য গ্লোবাল এলিয়াস

যদিও আমি আপনাকে এই পদ্ধতির এড়াতে পরামর্শ দিচ্ছি, আপনি গ্লোবাল ফাইলে এলিয়াসগুলি সংজ্ঞায়িত করতে পারেন । এরপরে ইন্টারেক্টিভ অ-লগইন শেল এবং ইন্টারেক্টিভ লগইন শেলগুলির জন্য এগুলি উভয়ই সংজ্ঞায়িত করা হবে। কারণ হল, আগে ব্যবহারকারীর হোম ডিরেক্টরির মধ্যে ফাইল কোন sourced হয়: /etc/bash.bashrc

  • লগইন শেলগুলি (এবং কেবল লগইন শেল এবং লগইন শেলগুলির মতো আচরণকারী অন্যান্য প্রক্রিয়াগুলি) /etc/profileস্বয়ংক্রিয়ভাবে কমান্ড চালায় ।
  • শুধুমাত্র অ-লগইন শেলগুলি /etc/bash.bashrcস্বয়ংক্রিয়ভাবে কমান্ড চালায় , কিন্তু
  • /etc/profileচলমান শেলটি বাশ (এবং যদি /etc/bash.bashrcউপস্থিত থাকে) এবং যদি থাকে তবে উবুন্টুর ডিফল্ট পরীক্ষা করে /etc/bash.bashrc

এটি শেল বাশ থাকলে .profileপ্রতি ব্যবহারকারী-প্রতি ডিফল্ট কীভাবে ব্যবহারকারীকে উত্স দেয় তার অনুরূপ .bashrc(উপরে বর্ণিত বিবরণ) This

এটির জন্য আসল কোডটি ডিফল্টের মতো দেখতে এখানে রয়েছে /etc/profile:

if [ "$PS1" ]; then
  if [ "$BASH" ] && [ "$BASH" != "/bin/sh" ]; then
    # The file bash.bashrc already sets the default PS1.
    # PS1='\h:\w\$ '
    if [ -f /etc/bash.bashrc ]; then
      . /etc/bash.bashrc
    fi
  else
    if [ "`id -u`" -eq 0 ]; then
      PS1='# '
    else
      PS1='$ '
    fi
  fi
fi

এই ব্লকটি অন্যান্য কাজগুলিও সম্পাদন করে। বিশেষত, ifশেলটি ইন্টারেক্টিভ হওয়ার সম্ভাবনা থাকে কিনা (প্রম্পট পাঠ্যটি খালি নয় কিনা তা পরীক্ষা করে) তারপরে পরীক্ষা করে, তবে বর্তমান শেলটি যদি বশ এবং /etc/bash.bashrcযদি উত্স হয় তবে তা পরীক্ষা করে, এবং যদি ব্যাশের জন্য কিছু কাজ করে না , ইতিমধ্যে সম্পন্ন হয়েছে /etc/bash.bashrc

আপনি উচিত না বিশ্ব alias লেখা সংজ্ঞায়িত /etc/profileজন্য একই কারণে ব্যবহারকারীদের তা তাদের স্থানীয় মধ্যে সংজ্ঞায়িত করা উচিত নয় .profileS: যদি আপনি না তারা শুধুমাত্র লগ-ইন শেল জন্য তাদের সন্তান শাঁস জন্য নয় সংজ্ঞায়িত করা হবে, এবং।

পরিশেষে, দ্রষ্টব্য, প্রতি ব্যবহারকারীর ডিফল্টের বিপরীতে .bashrc, ডিফল্ট /etc/bash.bashrcফাইলে কোনও এলিয়াস সম্পর্কে কিছু থাকে না। ব্যবহারকারীদের এমন কোনও ফাইলের উপনাম দেওয়া কিছুটা অস্বাভাবিক, যেখানে তারা সম্পাদনা বা অক্ষম করতে পারে না। (অবশ্যই, তারা এখনও করতে পারেন যে কি, তাদের নিজস্ব স্থানীয় তাদের সংজ্ঞা অগ্রাহ্য দ্বারা .bashrc, .bash_aliasesঅথবা অন্য কোথাও।)

আরও পড়া


5

এটি এখানে কিছু সুন্দর পড়া । ".bash_profile লগইন শেলগুলির জন্য কার্যকর করা হয়, যখন .bashrc ইন্টারেক্টিভ নন-লগইন শেলগুলির জন্য কার্যকর করা হয়"

সুতরাং আপনার উপনামের জন্য, .বাশ_ প্রোফাইল ব্যবহার করুন


4
এলিয়াস স্থাপন .bash_profileকরা সঠিক নয়। উবুন্টুতে .profile(যা লগইন শেলগুলির জন্য চালিত হয়) উত্সগুলি .bashrcযখন এটি একটি ইন্টারেক্টিভ বাশ শেল। সুতরাং .bashrc(বা .bash_aliases, মধ্যে উত্সাহিত .bashrc) এ্যালিয়াস স্থাপন করা সমস্ত ইন্টারেক্টিভ বাশ শেলের মধ্যে তাদের সংজ্ঞা দেয় । মধ্যে ওরফে .bash_profileউৎপাদনের এই সমস্যা প্রমুখ। দেখুন এই , যে , আমার উত্তর এবং ডিফল্ট ~/.bashrc'র নির্বাণ alias লেখা সেখানে বা সুপারিশ মন্তব্য .bash_aliases
এলিয়াহ কাগান
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.