যেখানে PATH ভেরিয়েবলটি ব্যাশে সেট করা হয়েছে তার সম্পূর্ণ দর্শন


17

আমি কয়েকটি স্থানে পড়েছি যেটি PATHসেট করা আছে /etc/profileবা যে .profileফাইলটি হোম ডিরের মধ্যে রয়েছে।

এইগুলি কি কেবলমাত্র সেই জায়গাগুলিতেই সেট করা আছে? আমি এটির আরও ভাল বোঝার চাই।

ইন /etc/profileফাইল নিচের মন্তব্য বলছেন যেমন "system-wide .profile file for the Bourne shell"। এর অর্থ কি এই যে প্রোফাইল ফাইলগুলি বাশের প্রধান কনফিগারেশন ফাইল?

সেই ফাইলটিতে আমি PATHভেরটি সেট করে দেখছি না । ইন .profilehome ডিরেক্টরিতে ফাইল এই লাইন আছে:

PATH="$HOME/bin:$PATH"

PATHএটি চেহারা অনুসারে পুনরায় সেট করা হচ্ছে কারণ এটি ইতিমধ্যে সেট $PATHস্ট্রিংটি $HOME/bin:ডান দিয়ে সংযুক্ত করছে? তবে etc/profileএবং যদি ~/.profileকেবলমাত্র সেটিংগুলিই কোডের সেই লাইন থেকে আসে PATHযেখানে $PATHএটি সংজ্ঞায়িত না করা হয় /etc/profile?

অভিজ্ঞ কেউ দয়া করে PATHভেরিয়েবলের একটি বিস্তৃত এবং বিস্তারিত ব্যাখ্যা দিতে পারেন ? ধন্যবাদ!

উত্তর:


20

অনেকগুলি জায়গা রয়েছে যেখানে PATHসেট করা যায়।

loginপ্রোগ্রাম ডিফল্ট মান তা সেট করে। এই ডিফল্ট মানটি কীভাবে কনফিগার করা হয়েছে তা সিস্টেম-নির্ভর। বেশিরভাগ এমবেডেড লিনাক্স সিস্টেমগুলিতে, এটি /etc/login.defsমূল থেকে এবং অন্যান্য ব্যবহারকারীর জন্য বিভিন্ন মান সহ নেওয়া হয় taken login(1)এটি কী করে তা জানতে আপনার সিস্টেমে ম্যানুয়ালটির পরামর্শ নিন ।

PAM ব্যবহার করে সিস্টেমগুলিতে , বিশেষত pam_envমডিউলটি, সিস্টেম ভেরিয়েবলগুলি সিস্টেম-ওয়াইড ফাইল /etc/environmentএবং প্রতি ব্যবহারকারী ফাইলে সেট করা যায় ~/.pam_environment

তারপরে লগ ইন করার বেশিরভাগ উপায়ে (তবে ক্রোন জব নয়) একটি লগইন শেল কার্যকর করে যা সিস্টেম-ব্যাপী এবং প্রতি ব্যবহারকারী কনফিগারেশন ফাইলগুলি পড়বে। এই ফাইলগুলি PATHসাধারণত এন্ট্রি যোগ করতে তবে কখনও কখনও অন্য উপায়ে মানটির সংশোধন করতে পারে। কোন ফাইলগুলি পড়া হয় তা লগইন শেল কী তার উপর নির্ভর করে। বোর্ন / পসিক্স-স্টাইলের শেলগুলি পড়ুন /etc/profileএবং ~/.profile। ব্যাশ সার্চ /etc/profileকিন্তু ব্যবহারকারী অনুসারে ফাইলের জন্য এটি শুধুমাত্র প্রথম বিদ্যমান ফাইল সার্চ ~/.bash_profile, ~/.bash_loginএবং ~/.profile। Zsh সার্চ /etc/zshenv, ~/.zshenv, /etc/zprofile, ~/.zprofile, /etc/zloginএবং ~/.zlogin। অনেক জিইআইআই সেশন লোড করার ব্যবস্থা করে/etc/profile এবং ~/.profileতবে এটি ডিসপ্লে ম্যানেজার, ডেস্কটপ পরিবেশ বা অন্যান্য সেশন সূচনা স্ক্রিপ্টে এবং প্রতিটি বিতরণ কীভাবে এটি সেট আপ করে তার উপর নির্ভর করে।


4

প্রাথমিক PATH ভেরিয়েবলটি সাধারণত সেট করা থাকে /etc/profile কখনও কখনও কোনও sys প্রশাসক PATH ভেরিয়েবলগুলিকে উত্স হিসাবে রাখে/etc/profile.d

এই সিস্টেমের PATH ভার্সেস যে প্রত্যেকে ডিফল্টরূপে উত্তরাধিকার সূত্রে লগইন করে (স্থানীয়ভাবে অতিরিক্ত চালিত না হয়ে)। এটি সাধারণত সুস্পষ্ট পথ নির্ধারণ করে, যেমন /usr/bin, যদিও আমার কাজটিতে আমরা /optব্যাপকভাবে কয়েকটি কাস্টম অবস্থান ব্যবহার করি , সুতরাং সেগুলিও সেখানে সেট করা থাকে।

প্রতি ব্যবহারকারীর লগইন ভিত্তিতে অ্যাকাউন্টগুলিতে, PATH এর মধ্যে সংজ্ঞা দেওয়া যেতে পারে ~/.profile। এটি এমন কিছু সংজ্ঞা দিতে পারে যা সমস্ত ব্যবহারকারীদের অ্যাক্সেস পায় না; হতে পারে বিভাগীয় প্রধানরা বাইনারি চালাতে পারেন /optতবে অন্যান্য ব্যবহারকারীরা সেই বাইনারিগুলি নিয়ে বিরক্ত হন না। ব্যবহারকারীরাও সেই ফাইলটি নিজেরাই সংশোধন করতে পারবেন এবং চমৎকার জিনিসটি .profileএটি শেল-নির্দিষ্ট নয়; আপনি যদি লগইন করেন তবে সেখানে পাঠাথ সেটটি উত্সাহিত হয়।

শেল-নির্দিষ্ট লগইন জন্য, পাথ সংজ্ঞায়িত করা যেতে পারে ~/.bash_profile, ~/.bashrcঅথবা .cshrc, অথবা অনুরূপ। ব্যবহারকারীরা নির্দিষ্ট শেলগুলির জন্য নির্দিষ্ট পাথ চাইলে বা সেখানে তাদের সমস্ত ব্যক্তিগত পছন্দ বজায় রাখার জন্য ঘটতে পারে তবে তারা এখানে পাঠ্যপথ সেট করতে পারবেন।

সংক্ষেপে: / ইত্যাদি / প্রোফাইল এবং /etc/profile.d হ'ল traditionতিহ্যগতভাবে ক্যাসকেডিং সেটিংস; তারা উত্তরাধিকার সূত্রে প্রাপ্ত হয় এবং সাধারণত ব্যক্তিগত ডট-ফাইলগুলিতে যুক্ত হয় (যদিও কোনও ব্যবহারকারী তাদের পরিবর্তে ওভাররাইড বেছে নিতে পারে)। ব্যক্তিগত ডট-ফাইলগুলি সাধারণত কোনও ব্যবহারকারী সেট করে থাকে।

অবশ্যই, একটি শেলের পরিবেশের ভেরিয়েবলগুলিও রয়েছে, সুতরাং একটি স্থানীয় পরিবেশের ভেরিয়েবল কোনও কনফিগারেশন ফাইলের মধ্যে ডিফল্ট PATH যোগ বা ওভাররাইড করতে পারে।


আপনি উল্লিখিত ফাইলগুলি কেবলমাত্র আমি যাচাই করেছি, ~ / .bash_profile এবং .cshrc তবে বিদ্যমান নেই। /Etc/profile.d dir: appmenu-qt5.sh, bash_completion.sh & vte.sh এ 3 স্ক্রিপ্ট ফাইলগুলি PATH ভেরিয়েবল সেট করে না। বাইনারি / বিন / ব্যাশ প্রোগ্রামে ডিফল্ট PATH সেট "শেলের একটি পরিবেশের ভেরিয়েবলও রয়েছে" এর অর্থ কী? আমি যখন টার্মিনাল প্রতিধ্বনিত করি $ পাঠ আমি পাই: / usr / স্থানীয় / এসবিন: / ইউএসআর / স্থানীয় / বিন: / ইউএসআর / এসবিন: / ইউএসআর / বিন: / এসবিন: / বিন: / ইউএসআর / গেমস: / ইউএসআর / স্থানীয় / গেমস তবে আমার ধারণা নেই যে সমস্ত কি সত্যিই সেট করা হচ্ছে।
ল্যারি ললেস

আমি মনে করি আমি আপনার প্রশ্নটি কিছুটা ভুলভাবে পড়েছি, আমি ভেবেছিলাম আপনি যে সমস্ত অবস্থান পাঠাথ সেট করতে পারেন তার জন্য জিজ্ঞাসা করছেন, তবে আমি মনে করি যে আপনি যেখানে শুরুতে পথ নির্ধারণ করেছেন সেখানে আপনি আরও আগ্রহী । তার জন্য, দেখুন /etc/bashrc। এটি BASH কীভাবে চালু হয় তা নির্ধারণ করে, যার মধ্যে সমস্ত প্রাথমিক পরিবেশের ভেরিয়েবল অন্তর্ভুক্ত করা উচিত। আমার সিস্টেমে, /etc/bashrcপড়ুন /etc/profile.dতবে মনে হচ্ছে আপনার কাছে কেবল 3 টি ফাইল রয়েছে /etc/profile.dযাতে আপনার ডিস্ট্রো এটি অন্যভাবে করছেন।
ক্লায়াতু ভন শ্ল্যাকার

1
আমি মূলত এর ইনস এবং আউটগুলি জানতে চাই। আমি আশা করি কেন থম্পসন আমার বাবা ছিলেন :)
ল্যারি ললেস

আপনি সেখানে পাবেন। বিশ্বাস করুন, আপনি কিছুদিনের জন্য প্রতিদিন এই জিনিসগুলি ব্যবহার করার পরে, এটি সমস্তই ডুবে যেতে শুরু করে এবং যতক্ষণ আপনি "কেন?" জিজ্ঞাসা করছেন? এবং উত্তরগুলির জন্য ডকগুলি পড়া, আপনি শেষ পর্যন্ত অনেক কিছু শিখেন!
ক্লায়াতু ভন শ্ল্যাকার

লিনাক্স মিন্টে 18 টি দারুচিনি অবশ্যই পরীক্ষা করে দেখুন /etc/profile.d/jdk_home.sh আমি এই ফাইলটির নাম পরিবর্তন করে jdk_home.sh.old রেখেছি এবং এখন আমার পথটি ওভাররাইড হচ্ছে না এবং আমি জাভা-রূপান্তর কল করতে এবং জাভা 9 হিসাবে দেখতে পারি প্রত্যাশিত। যদিও আমি সঠিকভাবে আপডেট-বিকল্পগুলির মধ্যে জাভা 9 নির্বাচন করেছি - কনফিগ জাভা এই jdk_home.sh ফাইলটি $ PATH
ফ্লাইংড্রাইফটার

3

অন্যান্য উত্তর যুক্ত করতে:

bashসেট হবে PATHএকটি হার্ড কোড ডিফল্ট মানে যদি এটি পরিবেশে সেট না। একটি উবুন্টু সার্ভার 16.04.2 মেশিনে, আমি পাই:

$ env -i bash -c 'echo $PATH'
/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:.

আমরা পরীক্ষা করতে পারি যে এই মানটি অবশ্যই হার্ড-কোডড, এবং stringsইউটিলিটিটি ব্যবহার করে পরিবেশ বা কোনও ফাইল থেকে পড়েনি :

$ strings /bin/bash | grep /usr/sbin
/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:.

তবে আমি আমার আর্চ লিনাক্স মেশিনে একটি আলাদা ফলাফল পেয়েছি:

$ env -i bash -c 'echo $PATH'
/usr/local/sbin:/usr/local/bin:/usr/bin

সুতরাং, দেখে মনে হচ্ছে bashবাইনারিটি তৈরি হওয়ার সময় এই ডিফল্টটি বেছে নেওয়া হয়েছিল, যা ব্যবহারে ওএস / বিতরণের উপর নির্ভর করে।


0

স্টাফ, যা আমি দেখতে পাই না:

কেন থম্পসনের ক্ষেত্রে আপনি তাঁর জন্য অবাক হতে পারেন: "লিনাক্সের উপর দৃষ্টিভঙ্গি"

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