- লিনাক্স সিস্টেম এর স্টার্ট আপ ধাপসমূহ
১. সিস্টেম V (সিস্টেম ফাইভ)
২. বিএসডি (BSD)
এ দুটি প্রধান সিস্টেম এর পার্থক্য জানা এ জন্য জরুরী যে, এরা স্টার্টআপ ফাইলের জন্য ভিন্ন ভিন্ন ডিরেক্টরী স্ট্রাকচার ব্যবহার করে থাকে এবং স্টার্ট আপ প্রসেস এর জন্য যে ফাইলগুলি ব্যবহৃত হয় সেগুলি জানা থাকলে আপনি নির্দিষ্ট কোন প্রসেসকে স্বয়ংক্রিয়ভাবে চালু করার জন্য অপশন সেট করে দিতে পারেন।
ডেবিয়ান এবং বেশীরভাগ ডিস্ট্রো-ই সিস্টেম ফাইভ ফ্যামিলি এর অন্তর্ভুক্ত। এই তো কিছুদিন আগেও সান মাইক্রোসিস্টেমস তাদের সোলারিস অপারেটিং সিস্টেমকে পরিবর্তন করেছে যাতে সেটি সিস্টেম ফাইভ এর অন্তর্ভুক্ত হয়। তাই সিস্টেম ফাইভ এর স্টার্ট আপ ডিরেক্টরীর স্ট্রাকচার জানা থাকলে বেশীরভাগ লিনাক্স/ইউনিক্স সিস্টেমেই কাজ করতে পারবেন।
ডিরেক্টরীর নাম ডিস্ট্রোভেদে কিছুটা ভিন্ন ভিন্ন হতে পারে তবে ধারনাগত দিক থেকে সবই অভিন্ন প্রকৃতির।
যখন আপনি সিস্টেমে বুট করেন তখন সার্ভিস, প্রসেস সবই শেল স্ক্রিপ্টের সাহায্যে চালু হয়ে থাকে। সকল ধরনের শেল স্ক্রিপ্ট যা মেশিন বুট এর সময় চালু হতে পারে তার সবই /etc/init.d ডিরেক্টরীতে অবস্থিত। এখানে লক্ষ্যনীয় যে, ডিরেক্টরীর নামেও ফাইলের মত পিরিয়ড (init.d) থাকতে পারে।
এই বুট প্রসেস সম্পর্কে পরিচিত হতে হলে আপনাকে অবশ্যই রান লেভেল সম্পর্কে জানতে হবে। লিনাক্স/ইউনিক্স সিস্টেমকে ভিন্ন ভিন্ন মোডের ফাংশনে রান করানো যায়। এটিকে যেমন ডেস্কটপ সিস্টেম এর জন্য সিঙ্গেল ইউজার মোডে রান করানো যায় তেমনই সার্ভার হিসেবে কাজ করানোর জন্য মাল্টি ইউজার মোডেও রান করানো যায়। প্রতিটি রানলেভেলকে একটি নির্দিষ্ট সংখ্যা দ্বারা প্রকাশ করা হয়। এগুলি হলঃ
0 - সিস্টেম বন্ধ করার মোড
1 - একক ব্যবহারকারী মোড
2 - 5 - বহু ব্যবহারকারী মোড
6 - রিবুট/রিস্টার্ট এর মোড
ডেবিয়ান এ রানলেভেল ২ ডিফল্ট অবস্থায় থাকে। একাধিক মাল্টি ইউজার মোড থাকায় এদেরকে কাস্টমাইজ করে ব্যবহার করা যায়। উদাহরনস্বরূপঃ ইন্টারনেট সার্ভার হিসেবে মেশিনকে রান করলে সিকিউরিটির কথা বিবেচনা করে রানলেভেল ২ তে আপনি এনএফএস ফাইল শেয়ারিং মোড ডিজ্যাবল করে রাখতে পারেন। যদি আপনি ইন্টারনাল নেটওয়ার্ক এর জন্য ফাইল সার্ভার স্থাপন করতে চান তাহলে রানলেভেল ৩ তে মেশিনকে চালু করতে পারেন যেখান এনএফএস শেয়ারিং এর অনুমতি দেয়া আছে। প্রাথমিক ভাবে সবগুলি মাল্টি ইউজার মোডের মধ্যে কোন পার্থক্য থাকে না- তাদের সবার সেটআপ একই হয়ে থাকে অর্থাৎ বুটের সময় সবাই সমান সংখ্যক সার্ভিস স্টার্ট করে।
মেশিন চালু অবস্থায় আপনি যেকোন রান লেভেলে সুইচ করতে পারেন যার কমান্ড হচ্ছে নিম্নরূপঃ
init runlevel
উদাহরনস্বরূপঃ রিমোট স্থান হতে যদি মেশিন রিস্টার্ট করতে চান তাহলে এ অপশনটি বেশ কাজে লাগে। টেলনেট সেশন এর মাধ্যমে মেশিন এ লগইন করলে Ctrl-Alt-Del কি-ব্যবহার করে মেশিন রিস্টার্ট করা যায় না। এর বদলে আপনি init 6 কমান্ড দিয়েই কাজ করতে পারেন। অবশ্য মেশিন রিস্টার্ট দিলে আপনার টেলনেট সেশন বন্ধ হয়ে যাবে তবে মেশিন রিবুট করলে আবার কানেক্ট হতে পারবেন।
উপরের আলোচনার ফলে আমরা জানতে পারলাম যে, সিস্টেম স্টার্ট আপ এর সময়ে যে শেল স্ক্রিপ্টগুলি রান হয় সেগুলি /etc/init.d ডিরেক্টরীতে অবস্থিত। এ রান লেভেলগুলি ভিন্ন ভিন্ন স্ক্রিপ্টসমূহ রান করে থাকে যা এই ডিরেক্টরীতে অবস্থিত। মেশিন বুটের সময় /etc/inittab নামের একটি টেক্সট ফাইল এর নির্দেশগুলি প্রথম পালন করা শুরু করে। নিচের উল্লেখিত লাইনটির সাহায্যে এ ফাইলটি মেশিনকে কোন রানলেভেল এ বুট করতে হবে সে নির্দেশ প্রদান করে থাকেঃ
id:2:initdefault:
/etc/inittab ফাইলের এ লাইনটি পরিবর্তনের মাধ্যমে আপনি মেশিন এর ডিফল্ট রানলেভেলটি পরিবর্তন করতে পারবেন। বেশীরভাগ ডিস্ট্রোই রানলেভেল ৩ এ বুট করে থাকে যা ইন্টারনেট সার্ভার এর জন্য মোটেও সুরক্ষিত নয়।
প্রতিটি রান লেভেল এর জন্য /etc ডিরেক্টরীর অভ্যন্তরে একটি করে সাব-ডিরেক্টরী আছে এবং সাব-ডিরেক্টরীর নামটি রানলেভেল এর নামে হয়ে থাকে। সাবডিরেক্টরীর নামটি নিচের ফরম্যাটে হয়ে থাকেঃ
rcX.d
যেখানে X এর মান ০-৬ পর্যন্ত।
এই রানলেভেল সাবডিরেক্টরীগুলিতে আসলে কোন স্ক্রিপ্ট থাকে না। বরং /etc/init.d ডিরেক্টরীতে যে স্ক্রিপ্টগুলি আছে তাদের সিমবোলিক লিংকসমূহ-ই এখানে থাকে। এটির ফলে একই স্ক্রিপ্ট একাধিক রানলেভেলে কপি করার বদলে শুধুমাত্র শেয়ার করেই ব্যবহার করা যায়। তাই স্টার্ট আপ এর সময় যে স্ক্রিপ্টগুলি রান করে তার সবই /etc/init.d ডিরেক্টরীতে পাওয়া যায়।
প্রাথমিকভাবে সকল রানলেভেলের সাবডিরেক্টরীতে /etc/init.d এর স্ক্রিপ্টগুলির সমান সংখ্যক সিমবোলিক লিংক থাকে। এর ফলে, আপনি মাল্টি ইউজার রান লেভেল এর যেটিই পছন্দ করুন না কেন সবার কাজ মূলতঃ একই হয়ে থাকে। আপনি যেকোন রানলেভেল এর সাবডিরেক্টরীতে কোন নতুন কিছু সংযোজন অথবা বাদ দেয়ার মাধ্যমে একে কাস্টমাইজ করে নিতে পারেন।
উদাহরনস্বরূপ, আপনি যদি রানলেভেল ২ কে ইন্টারনেট সার্ভিস এর জন্য নির্ধারিত করতে চান তবে /etc/rc2.d ফোল্ডারটিতে গিয়ে এনএফএস(NFS) স্ক্রিপ্ট এর লিংকটি মুছে দিলেই হবে। তারপর রানলেভেল ৩ অর্থাৎ /etc/rc3.d ডিরেক্টরীতে গিয়ে সকল ইন্টারনেট সার্ভিসের স্ক্রিপ্ট যথা এ্যাপাচি, সেন্ডমেইল এবং আইনেটডি এর লিংকগুলি মুছে দিন যাতে রানলেভেল ৩ শুধুমাত্র নেটওয়ার্ক ফাইল শেয়ারিং এর জন্য ব্যবহার করতে পারেন।
রানলেভেল সাবডিরেক্টরীতে লিংক ব্যবহারের আরও একটি কারন নিহিত আছে। এ লিংকগুলির নামকরনের মাঝেই লুকায়িত আছে স্ক্রিপ্টগুলি কখন চালু হবে এবং কোন ক্রমিক-এ চালু হবে। যে লিংকগুলির নাম বড় হাতের অক্ষর-S দিয়ে শুরু তারা মেশিন স্টার্ট এর সময়ই চালু হয়ে থাকে। যে লিংকগুলির নাম বড় হাতের - K অক্ষর দিয়ে শুরু হয়েছে তারা রানলেভেল থেকে বের /এক্সিট হওয়ার সময় কোন সার্ভিস কে কিল করার জন্য রান করে থাকে। এ কারনেই কোন রানলেভেলকে কোন সার্ভিস কে বন্ধ করার জন্য ঐ সার্ভিসের লিংকটিকে না মুছে তার সামনে একটি আন্ডারস্কোর(_) অথবা ড্যাশ (-) ব্যবহার করে নতুন নামকরন করা হয়। ফলে পরবর্তীতে ঐ সার্ভিসটি আর কাজ করবে না। আবার যখন এটি চালু করার দরকার হবে তখন উক্ত আন্ডারস্কোর বা ড্যাশটিকে উঠিয়ে দিলেই চলে।
মাল্টিইউজার রান লেভেল এর ডিরেক্টরীসমূহে শুধুমাত্র S দিয়ে শুরু এমন লিংকগুলিই থাকে। যে সব রানলেভেল সিস্টেম শাট ডাউন/বন্ধ করা এবং কাজের উপর নিয়ন্ত্রন আরোপে ব্যবহৃত হয় (০, ১, ৬) কেবল সেগুলির ডিরেক্টরীতেই সার্ভিস কিল করার জন্য K দিয়ে শুরু এমন লিংকসমূহ থাকে।
S or K অক্ষরের পর যে নম্বরটি থাকে সেটি দিয়েই নির্ধারিত হয় একটি সার্ভিস কখন চালু হবে (এক্ষেত্রে যে নম্বরটি ছোট সবার আগে সেটি চালু হবে)। এটি প্রসেস সমূহ চালুর জন্য কাজে লাগে কারন একটি সার্ভিস অনেক সময় আরেকটি সার্ভিস এর উপর নির্ভর করতে পারে। উদাহরনস্বরূপঃ যদি নেটওয়ার্ক সার্ভিস চালু না হয় তাহলে আপনি সাম্বা সার্ভিস (যেটি উইন্ডোজ মেশিনের সাথে নেটওয়ার্কিং এর কাজে ব্যবহৃত হয়) চালু করতে চাইবেন না। নিচের কয়েকটি উদাহরন দেখিঃ
S20thisservice
S30thatservice
S40anotherservice
S80yetanother
- সিস্টেম বন্ধ করার প্রসেস
যদি আপনি মেশিনকে চালু রাখতে চান কিন্তু লগড্ ইন অবস্থায় থাকতে না চান তবে শেল প্রম্পটে টাইপ করুন exit - যেটি বেশীরভাগ সার্ভার এর ক্ষেত্রে হয়ে থাকে। এ কমান্ডটি আপনাকে লগ আউট করে পুনরায় লগইন স্ক্রিনে নিয়ে যাবে। একটি জিনিস অবশ্যই মনে রাখবেন, কোন ইন্টারনেট সার্ভারে কখনই রুট ইউজার হিসেবে লগইন করে থাকা উচিত নয়।
- সোর্স এবং বাইনারী কি?
লিনাক্স ও অন্যান্য অপারেটিং সিস্টেম যে ফাইলগুলি নিয়ে কাজ করে থাকে তারা এ দুটো ফাইলের যেকোন একটি ক্যাটাগরিতে পড়ে। একটি ফাইল সিপিইউ(প্রোগ্রাম) কর্তৃক পরিচালনার জন্য এর জন্য একসেট নির্দেশনা হতে পারে অথবা তাতে ব্যবহারকারীর জন্য কিছু তথ্য/ডাটা থাকতে পারে। প্রোগ্রাম বা এ্যাপ্লিকেশনগুলি অপারেটিং সিস্টেম এর কমান্ড থেকে শুরু করে ওয়ার্ড প্রসেসর জাতীয় যে কোন প্রোগ্রাম হতে পারে। অন্যদিকে ডাটা ফাইলে কোন প্রোগ্রামের জন্য তথ্য বা কনফিগারেশন অপশন থাকতে পারে অথবা তা আমাদের ব্যবহারযোগ্য কোন তথ্য যেমন ওয়ার্ড প্রসেসিং ডকুমেন্ট অথবা কোন ডাটাবেজ ফাইল ও হতে পারে।
উপরের তথ্যগুলি থেকে ফাইল এর প্রকারভেদ সম্পর্কে একটি মোটামুটি ধারনা পাওয়া যায় কারন এটি থেকে কোন ফাইল কি ধরনের তা শুরুতেই আমরা অনুমান করতে পারি এবং সেভাবে কাজ করতে পারি। তবে ফাইলের ধরন এবং প্রকারভেদ এর মধ্যে কোন সম্পর্ক আদতেই নেই। উপরে এতক্ষন যে আলোচনা করেছি সেগুলিকে কিছু পয়েন্ট আকারে এখন আমরা উল্লেখ করতে পারিঃ
- বাইনারী ফাইল যেকোন প্রোগ্রাম ফাইল ও হতে পারে (যেমন উইন্ডোজে .exe ফাইল)
- বাইনারী ফাইলে ডাটা ও থাকতে পারে (যেমন পেইন্ট ব্রাশ প্রোগ্রাম দিয়ে তৈরী কোন গ্রাফিক্স ফাইল)
- টেক্সট ফাইল ও প্রোগ্রাম হতে পারে (যেমন অপারেটিং সিস্টেম এর জন্য কোন স্ক্রিপ্ট/ব্যাচ ফাইল কমান্ডসমূহ)
- টেক্সট ফাইলগুলিতে ডাটা ও থাকতে পারে (যেমন লিনাক্স প্রোগ্রাম এর জন্য কনফিগারেশগুলিকে টেক্সট ফাইলে সেভ করে রাখে এবং এক্সেল এর প্রোগ্রাম ও টেক্সট ফাইলে ডাটা এক্সপোর্ট করতে পারে)
অধিকাংশ প্রোগ্রামার হয়ত প্রশ্ন করতে পারেন যে, টেক্সট ব্যাচ ফাইল কিভাবে প্রোগ্রাম হয়? কিন্তু বাস্তবে তারা কিছু কাস্টমাইজ কাজ সম্পন্ন করার জন্য সিপিইউ এর প্রতি একসেট নির্দেশ স্বরূপ।
ls কমান্ড দিয়ে কোন ফাইল এর ধরন কি তা জানা সম্ভব নয়। এজন্য file কমান্ড দিতে হয়ঃ
file /bin/ls
যদি ফাইলটি কোন বাইনারী ফাইল হয় তবে উক্ত কমান্ডটি কিছু ডাটা রিটার্ন করবে অথবা কিছু লম্বা লাইন প্রদর্শন করবে যার মাঝে ELF 32-bit কথাটি ও থাকবে (ELF এর অর্থ হচ্ছে Executable and Link Format)। যদি এটি কোন টেক্সট ফাইল হয় তবে এর অভ্যন্তরে text শব্দটি সহ কিছু লাইন প্রদর্শন করবে।
লিনাক্স অপারেটিং সিস্টেমটি সাধারনতঃ দু’ধরনের হয়ে থাকে। বাইনারী ফাইল হচ্ছে যারা আগে থেকেই কম্পাইল করা আছে অর্থাৎ উইন্ডোজ অপারেটিং সিস্টেম এর মত আপনার পিসিতে অপারেটিং সিস্টেমটি চালানোর জন্য প্রস্তুত। তাছাড়া লিনাক্স ওপেন সোর্স হওয়াতে প্রোগ্রামারগন যে কোডগুলি লিখে থাকেন অপারেটিং সিস্টেম এর জন্য সেগুলিও ফ্রি পাওয়া যায়। সোর্স কোড ফাইলগুলি হচ্ছে টেক্সট ফাইল। একজন প্রোগ্রামার একটি টেক্সট এডিটরের এই প্রোগ্রাম স্টেটমেন্ট সমূহ লিখে থাকেন, তারপর সেটিকে সেভ করেন এবং সর্বশেষে বাইনারী ফাইল তৈরীর জন্য এটিকে কম্পাইল করেন যেটি উইন্ডোজের .EXE ফাইলের সমতূল্য।
যিনি সি-প্রোগ্রামিং ল্যাংগুয়েজ জানেন (যেটি দ্বারা লিনাক্স তৈরী করা হয়েছে) তিনি এই সোর্স ফাইলগুলি কোন টেক্সট এডিটরে ওপেন করতে পারেন, এটিকে পরিবর্তন, পরিবর্ধন বা সংশোধন করতে পারেন নিজের চাহিদামত এবং পূনরায় ব্যবহারের জন্য এটিকে আবার কম্পাইল করতে পারেন । বিপরীতদিকে, উইন্ডোজের সোর্স কোড একটি টপ সিক্রেট বিষয় এবং মাইক্রোসফট থেকে যে উইন্ডোজের সিডি দেয়া হয় তাতে শুধুমাত্র বাইনারী ফাইল থাকে। এখন আপনি নিশ্চয়ই বুঝতে পারছেন লিনাক্সের ক্ষেত্রে কেন ওপেন সোর্স কথাটি ব্যবহার করা হয়। তাই লিনাক্স একটি কাস্টমাইজেবল অপারেটিং সিস্টেম। যদি লিনাক্সের কোন কিছু আপনার পছন্দ না হয় আপনি এর সোর্স কোডে পরিবর্তন করে সেটি নিজের পছন্দ মত কাস্টমাইজ ও রিকম্পাইল করে নিতে পারেন। এজন্যই ডিজিটাল ভিডিও রেকর্ডার বা এ রকম যন্ত্রপাতি পরিচালনার জন্য এম্বেডেড কাস্টমাইজড লিনাক্স দিয়ে দেয়া হয়।
লিনাক্সের এই ওপেন সোর্স নিঃসন্দেহে একটি বড় আশীর্বাদ আমাদের সবার জন্য কেননা এর ফলে আপনি লিনাক্স এবং তার সাথে যত প্রোগ্রাম আছে সবার সোর্স কোড দেখতে পারছেন ফলে তারা আসলে সত্যিকারভাবে কি কাজ করছে তার উপর চোখ রাখতে পারছেন যা ক্লোজড সোর্স অপারেটিং সিস্টেমে সম্ভব নয়। এটি আপনাকে বড় ধরনের সিকিউরিটি থ্রেট থেকে ও মুক্ত রাখছে। কারন উইন্ডোজে একটি প্রোগ্রাম ব্যাকগ্রাউন্ডে আপনার পাসওয়ার্ড বা ক্রেডিট কার্ডের নম্বর এর মালিকের কাছে পাচার করে দিচ্ছে কি না - তা জানার কোন সুযোগ নেই। যখন আপনি উইন্ডোজ আপডেটের জন্য microsoft.com এ যাচ্ছেন তখন সে আপনার মেশিনের কি কি তথ্য চেক করছে এবং আপনার মেশিন থেকে কি কি তথ্য নিচ্ছে তা জানার কোন সুযোগ নেই। শুধু মাইক্রোসফট এর নিজস্ব কিছু লোকই তা জানে।
সকল ধরনের সোর্স কোড ফাইলই কম্পাইল করার মাধ্যমে এক্সিকিউটেবল বাইনারীতে রূপান্তর করা যায়। লিনাক্স/ইউনিক্স এর জগতে তাই প্রোগ্রাম এর সোর্স কোড সহ (টেক্সট ফরম্যাট) বিতরন করাটা হরহামেশাই চোখে পড়ে। কারন লিনাক্স এর অনেক ফ্লেভার বাজারে পাওয়া যায় এবং তা বিভিন্ন প্লাটফরমে রান করে থাকে। তাই প্রতিটি প্লাটফরমের জন্য আলাদা বাইনারী তৈরীর চেয়ে সোর্স কোড দিয়ে দেয়া হয় যেন প্রত্যেকেই তার প্লাটফরমের জন্য বাইনারী তৈরী করে নিতে পারেন। এজন্যই আপনি ভিন্ন ভিন্ন প্লাটফরমের জন্য লিনাক্সের ভিন্ন ভিন্ন ডিস্ক সেট দেখে থাকবেন। যেমনঃ i386-Intel, m68K-Mac, Sparc-Sun, ppc-PowerPC। উইন্ডোজ শুধুমাত্র ইন্টেল /ইন্টেল কম্প্যাটিয়েবল প্লাটফরমের জন্যই কম্পাইল করা হয়। তাই লিনাক্স আপনাকে একই অপারেটিং সিস্টেম বিভিন্ন প্লাটফরমে চালানোর সুযোগ করে দিচ্ছে যে তালিকাতে এমনকি S/390 মেইন ফ্রেম কম্পিউটারও আছে।
সুতরাং কোন ব্যক্তি বা কোম্পানি যারা প্রোগ্রাম তৈরী করেন তাদের জন্য দুটো বিকল্প আছে। তাদেরকে হয় বিভিন্ন প্লাটফরমের জন্য ভিন্ন ভিন্ন বাইনারী তৈরী করতে হবে সকল লিনাক্স ডিস্ট্রোর জন্য (যা করতে হলে তাদের বিভিন্ন প্লাটফরমের মেশিন থাকতে হবে কম্পাইল করার জন্য) অথবা তারা এটির সোর্স কোডটি বিতরন করতে পারেন সবার জন্য যাতে প্রত্যেকেই তাদের নিজস্ব মেশিনের জন্য কম্পাইল করে নিতে পারেন। এজন্য বেশীরভাগ লিনাক্স ফ্লেভারেই একটি ‘সি’ কম্পাইলার দিয়ে দেয়া হয় এবং অনেক প্রোগ্রাম এবং ইউলিটি প্রোগ্রাম একমাত্র সোর্স কোডেই পাওয়া যায়। তবে ডেবিয়ান বিভিন্ন হার্ডওয়্যার প্লাটফরমের জন্য ভিন্ন ভিন্ন ডিস্ক সেট অফার করে এবং সেই সাথে এক সেট সোর্স কোড ডিস্ক সেট ও অফার করে থাকে যেখানে ডেবিয়ান এর সমস্ত প্যাকেজের সোর্স কোড দেয়া থাকে।
0 comments:
Post a Comment