এই উত্তরের জন্য কিছু শেল স্ক্রিপ্টিং অভিজ্ঞতা এবং জ্ঞান প্রয়োজন ভেরিয়েবল, মান, পরিবর্তনশীল বিকল্প, প্রম্পট, প্রতিধ্বনি, কার্নেল, শেল, ইউটিলিটি, সেশন এবং প্রক্রিয়া সহ।
একটি এনভায়রনমেন্ট ভেরিয়েবল (envar) গ্লোবাল সংজ্ঞায়িত ভেরিয়েবল যে ভাবে একটি প্রদত্ত প্রক্রিয়া একটি কম্পিউটারের অপারেটিং সিস্টেমে আচরণ করবে প্রভাবিত করতে পারেন এমন একটি সেট।
1. একটি অনুকরণীয় ভূমিকা:
আমরা এনভের্সকে একটি $
এবং মূলধনযুক্ত অক্ষর দিয়ে প্রতিস্থাপন করি । উদাহরণস্বরূপ: $PS1
।
আমরা এইভাবে একটি এনভর প্রিন্ট করতে পারি:
echo $PS1
$PS1
ইউনিক্স প্রম্পটের মান ধারণ করে। বলুন এর স্থানীয় মান হয় \u
\w
$
।
\u
(বর্তমান) ব্যবহারকারী,
\w
ওয়ার্কিং ডিরেক্টরি বোঝায়,
$
প্রম্পট সীমানা হয়।
সুতরাং, যদি আমরা একটি করুন: echo $PS1
আমরা মান দেখতে \u
, \w
প্লাস শেষ ডলার সাইন ইন করুন।
আমরা যদি সেই এনভেরের মানগুলি পরিবর্তন করি তবে আমরা সেই প্রসঙ্গে ইউনিক্সের আচরণটি পরিবর্তন করতে পারি। উদাহরণ স্বরূপ:
PS1="\w >"
এখন প্রম্পটটি দেখতে এরকম দেখাচ্ছে (ধরে নিই যে কাজের ডিরেক্টরিটির নাম দেওয়া হয়েছে "জন"):
John >
আমরা একইভাবে করতে পারি PS1="Hello, I'm your prompt >"
, তাই echo $PS1
এনে দেবে:
Hello, I'm your prompt >
বাশ ৪.০ এক্সএক্সে, আমরা env
কমান্ডের সাহায্যে সিস্টেমে সমস্ত এনভর প্রিন্ট করতে পারি । আমি env
টার্মিনালটিতে নির্বাহ করার পরামর্শ দিচ্ছি এবং আউটপুটটি কিছুটা দেখুন।
২. এই ডেটাগুলি কীভাবে দেখানো এবং হেরফের করা হয়:
একটি অধিবেশন টার্মিনাল আসুন আসুন envars যে বাশ সঙ্গে আসছে কাস্টমাইজ করতে।
পূর্বোক্ত পরিবর্তনগুলি সাধারণত অস্থায়ী এবং এখানে কেন:
প্রতিটি অধিবেশন (যা একটি উপ-অধিবেশন নয়) অনন্য এবং একাধিক প্রক্রিয়া একই সময়ে (প্রতিটি নিজস্ব এনভর্সের সেট সহ) অনন্যভাবে চলতে পারে তবে সাধারণত সেশন 0 থেকে অধিবেশন 1 এবং তারপরের দিকে উত্তরাধিকার থাকে।
আমরা একটি প্রক্রিয়াতে যে পরিবর্তন করি তা এটির জন্য অনন্য এবং যদি আমরা এগুলি কোনও উপায়ে সংরক্ষণ না করে বন্ধ করি তবে তা বন্ধ হয়ে যাবে।
সুতরাং আমরা কীভাবে এই পরিবর্তনগুলি সংরক্ষণ করতে পারি:
এনভর পরিবর্তনগুলি সংরক্ষণ করার জন্য বিভিন্ন ধরণের উপায় রয়েছে যা আমরা বেছে নেওয়ার সুযোগের উপর নির্ভর করে। এই জাতীয় পরিবর্তনের জন্য এখানে বিভিন্ন স্কোপ (স্তর) রয়েছে:
- প্রক্রিয়া স্তর: এনভরগুলি কেবলমাত্র বর্তমান সেশনে প্রোগ্রামগুলির জন্য উপলব্ধ।
- রফতানির স্তর: এনভরগুলি বর্তমান সেশনে বা তার সমস্ত উপ-সেশনে প্রোগ্রামগুলির জন্য উপলব্ধ ।
- গ্লোবাল স্তর: পরিবর্তনগুলি সমস্ত সেশনের জন্য (প্রাথমিক এবং সমস্ত সাবস) সংরক্ষণ করা হবে।
এনভর ডেটা কোথায় সংরক্ষণ করা হয়:
ইউনিক্স 3 টি প্রধান স্তর দ্বারা নির্মিত: কার্নেল, শেল এবং ইউটিলিটিস। প্রতিটি শেলের নিজস্ব এনভর রয়েছে এবং এগুলি শেলটিতে প্রাথমিক বা একচেটিয়াভাবে নির্মিত হয়।
বিশ্বব্যাপী এগুলিকে পরিবর্তন করতে হবে সেই নির্দিষ্ট অবস্থানটি সাধারণত /etc/profile
যদিও আমরা .bashrc
অবশ্যই এটি করতে পারি ।
৩. নতুন এনভর তৈরি করা:
আমরা নতুন এনভর তৈরি করতে পারি এবং এখানে একটি উপায়; বাশ ৪.৪ xxx এর নাম অনুসারে কোনও নেটিভ এনভার নেই MESSAGE
(যেমন বলা হয়েছে, এনভাররা সাধারণত বড়হীন হয়)।
MESSAGE="Hello world!"
এটি আমাদের জন্য তৈরি করবে এবং এখন যদি আমরা প্রতিধ্বনি টাইপ করি তবে $MESSAGE
আমরা পাই hello world!
।
যদি আমরা bash
আমাদের বর্তমান কার্য অধিবেশন (উইন্ডো) এ কার্যকর করি, আমরা একটি নতুন বাশ সাব-সেশন শুরু করব এবং আমরা কার্যকর না করে মূল প্রক্রিয়াটিতে আর কাজ করব না exit
।
দ্রষ্টব্য: টার্মিনাল এমুলেটর (যেমন উবুন্টু ডেস্কটপ) সহ অপারেটিং সিস্টেমগুলিতে, একটি উপ-অধিবেশন সাধারণত একই উইন্ডোতে চলতে থাকে, তবে অন্য উইন্ডোতে একটি নতুন অধিবেশনটি বর্তমানের উপ-অধিবেশন নয় (এটি একটি সংলগ্ন প্রক্রিয়া) ।
দ্রষ্টব্য: এনভর মানগুলিতে বিশেষ লক্ষণ ব্যবহার করবেন না! বা তারা সংরক্ষণ করা হবে না।
মূল সেশন থেকে সমস্ত উপ-অধিবেশনে এনভর রফতানি করা হচ্ছে:
আমরা এখনও প্রথম সেশনে তৈরি এনভরটিকে ব্যবহারকারীর বা বৈশ্বিক স্তরের কনফ ফাইলগুলিতে নিবন্ধভুক্ত না করে দ্বিতীয় সেশনে ব্যবহার করতে পারি (নিম্নলিখিত ডেটা দেখুন)। এটি কীভাবে করা যায় তা এখানে:
আসল সেশনে যান (বর্তমান উইন্ডো বা অন্য কোনওটি হোক) এবং সম্পাদন করুন:
export MESSAGE
রফতানি করার সময়, একটি $
চিহ্ন ব্যবহার করবেন না ।
এটি এখন সমস্ত উপ-সেশনে রফতানি করা হয়। আপনি যদি echo $MESSAGE
কোনও উপ-অধিবেশনটি করেন, তবে তা আপনার ব্যবহারকারীর বা অন্য কোনও, এটি মুদ্রিত হবে।
মনে রাখবেন যে শেলের অভ্যন্তরীণ ভেরিয়েবলগুলি যেমন PS1
রফতানি করা উচিত নয়, তবে আপনি যদি কোনও কারণেই সেগুলি রপ্তানি করতে চান এবং সেগুলি উপস্থিত না bash
হয় export
, তবে পরে কার্যকর করবেন না bash –norc
।
৪ $ পাঠ এনভায়ার:
$PATH
ব্যবহারকারীরা সাধারণত সর্বাধিক পরিবর্তন করবে এমন এনভর।
যদি আমরা echo $PATH
, আমরা এই স্ট্রিমটি দেখতে যাচ্ছি:
/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
এই এনভেরের মুদ্রিত মানগুলি এখানে কলোন দ্বারা পৃথক করা হয়েছে (:) তবে এখানে সম্ভাব্যতর আরামদায়ক উপায় রয়েছে (এগুলি একই মান):
/usr/local/bin
/usr/bin
/bin
/usr/local/games
/usr/games
এগুলি অনুসন্ধানের জন্য নির্দেশিকা, যখন আমরা কোনও ইউটিলিটি চালাই।
নির্বাহের মাধ্যমে which echo
আমরা এর ফাইলের অবস্থানটি পেয়ে যাব - উদাহরণস্বরূপ, আমরা দেখতে পাব এটি এতে বিদ্যমান /bin/echo
।
এর ভিত্তিতে এভনার এর মানগুলি দেখতে আমাদের ইকো এনভার টাইপ করতে হবে না। আমরা এটিও করতে পারি:
/bin/echo $ENVAR
Envar এখনও কার্যকর করা হবে, উদাহরণস্বরূপ:
/bin/echo $HOME
আমাদের দেয়
/home/User || /root
এই রকম:
echo $HOME
আমাদের দেয়
/home/User || /root
নোট: $HOME
যেমন সংক্ষিপ্ত করা হয় ~
।
সিস্টেম- AT PATH সম্পর্ক এবং একটি সম্ভাব্য ব্যবহারকারীর মিথস্ক্রিয়া:
বাশ ৪.৪ এক্সএক্স-এ, যখন আমরা কোনও ইউটিলিটিটিকে তার সম্পূর্ণ পথ ছাড়াই ব্যবহার করি, সিস্টেমটি $PATH
এনভরের উপরোক্ত বর্ণিত সমস্ত 6 টি মান ব্যবহার করবে । সুতরাং, এটি থেকে শুরু /user/local/bin
হবে এবং echo
এক্সিকিউটেবলের জন্য এটির সমস্ত সামগ্রী অনুসরণ করবে ।
/bin/echo
এক্ষেত্রে এটি থামবে , যার ক্ষেত্রে এই ক্ষেত্রে এক্সিকিউটেবল থাকতে পারে।
সুতরাং, $PATH
এনভরকে অনুকূলিতকরণের মূল কারণ হ'ল এক্সিকিউটেবলগুলি ইনস্টল করা যা তার কোনও মূল মানের অধীন নয়।
এই জাতীয় নির্বাহযোগ্য ইনস্টল করার পরে, আমাদের $PATH
সেই অনুযায়ী তাদের মান নির্ধারণ করা উচিত এবং তারপরে আমরা তাদের সাথে কাজ করতে সক্ষম হব।
5. পরিশিষ্ট - প্রসারিত $PATH
:
আমরা export $PATH
উপ-সেশনগুলিকে বাশ করতে পারি (এতে ওয়ার্ডপ্রেসের জন্য ডাব্লুপি-সিএমআই বা দ্রুপালের জন্য ড্রাশের মতো ব্যাশ এক্সটেনশন রয়েছে):
export PATH="/home/John:$PATH"
এটি একটি নতুন মান যোগ হবে /home/John
থেকে $PATH
, এবং তারপর ডান পরে, এটা কোনো নেটিভ মান এটি, যা সিনট্যাক্স অধীনে সংরক্ষণ করা হয় (ডান কোলন পরে) অ্যানেক্স হবে $PATH
।
এ জাতীয় স্থায়ী পরিবর্তন সাধারণত স্ক্রিপ্টে করা যেতে পারে, সাধারণত /etc/profile
নামের অধীনে এবং নামে .bashrc
।
exec(3)
পরিবারের কিছু সদস্য (যেমনগুলি এক্সিকিউটিভ * ভিয়ের সাথে মেলে না) ** পরিবেশের নীচে পরিবেশ পাস করে।