লিনাক্স অপারেটিং সিস্টেম এর প্রাথমিক ধারনা-৩

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

আজ মূলত লিনাক্স এর মাল্টি ইউজার কনসেপ্ট, ফাইল সিস্টেম, সিমলিংকস, ফাইল সার্চিং ইত্যাদি নিয়ে আলোচনা করব।

মাল্টি ইউজার বা একাধিক ব্যবহারকারী ভিত্তিক

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

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

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

এমনকি আপনার যদি স্ট্যান্ড এলোন লিনাক্স সিস্টেম ও থাকে আপনি সেটিকে মাল্টি ইউজার সিস্টেম হিসেবে কাজে লাগাতে পারবেন। যখন মেশিন একটি লগইন প্রম্পটসহ প্রথমে বুট হয় তখন আসলে আপনি বেশ কয়েকটি টার্মিনাল সেশনের প্রথমটিই দেখতে পান। বাকিগুলি দেখতে হলে লগইন করার পর কি-বোর্ডের Alt Key চেপে রেখে F2 চাপুন। আপনি আর ও একটি লগইন প্রম্পট দেখতে পাবেন এবং এটি হচ্ছে দ্বিতীয় টার্মিনাল সেশন। এভাবে আপনি F3 থেকে F6 পর্যন্ত চাপলে পরপর লগইন প্রম্পটগুলি একের পর এক পেতে থাকবেন। F7 হচ্ছে বর্তমানে লগইন করা আপনার গ্রাফিক্যাল ইন্টারফেস। মেশিন যদি প্রথমে গ্রাফিক্যাল মোডে বুট হয় তবে Altএবং F7চাপলে এটি আবার পূনরায় আপনাকে গ্রাফিক্যাল মোডে নিয়ে আসবে। প্রতিটি টার্মিনাল সেশনেই আপনি ভিন্ন ভিন্ন নামে লগইন করতে পারবেন। এ ধরনের টার্মিনাল সেশনকে 'কনসোল' অথবা 'ভার্চুয়াল টার্মিনাল' বলা হয়ে থাকে। এ ধরনের একাধিক টার্মিনাল ব্যবহার বেশ সুবিধা জনক যখন আপনি কোন নির্দিষ্ট ফাইল বা ডিরেক্টরীর পারমিশন লেভেল সমন্বয় এর মত কাজ করবেন। এ ধরনের কাজে একটি টার্মিনাল এ রুট হিসেবে লগইন করে যাবতীয় পারমিশন সেট এর কাজ করতে পারেন এবং সেই সাথে অন্য আরেকটি কনসোলে সাধারন ব্যবহারকারী হিসেবে লগইন করে সেটিংসগুলি পরীক্ষা করে দেখতে পারেন।

এই একাধিক কনসোলগুলি শুধুমাত্র ভার্চুয়াল টার্মিনাল ব্যবহারের মধ্যেই সীমাবদ্ধ নয়। চাইলে আপনি একটি ডাম্ব টার্মিনাল (dumb terminal) এর সাহায্যে লিনাক্স পিসির সাথে সিরিয়াল পোর্টের মাধ্যমে কানেক্ট হতে পারেন এবং /etc/inittab ফাইলের কয়েকটি লাইন আনকমেন্ট করার মাধ্যমেই তাদের নিজস্ব টার্মিনাল সেশন ব্যবহারের সুযোগ করে দিতে পারেন। ডাম্ব টার্মিনাল ব্যবহারের বদলে আপনি সাধারন পিসি ও ব্যবহার করতে পারেন যেটি HyperTerm নামক প্রোগ্রামের সাহায্যে লিনাক্স মেশিনের সিরিয়াল পোর্টের মাধ্যমে কানেক্ট হবে। একটি পিসি টু পিসি কানেকশনের জন্য নাল-মডেম কেবল প্রয়োজন হয়ে থাকে। ডাম্ব টার্মিনাল এর ক্ষেত্রে এ ধরনের কেবল লাগতেও পারে আবার নাও লাগতে পারে যেটি মূলত ইন্টারফেস এর উপর নির্ভর করে থাকে। যেহেতু বেশিরভাগ পিসি-তেই দুটি সিরিয়াল পোর্ট থাকে তাই একই লিনাক্স সিস্টেম কমপক্ষে ৩ জন লোক একসাথে ব্যবহার করতে পারবে।

নির্দিষ্ট সার্ভিস প্রদানের জন্য কিছু ইউজার একাউন্ট স্বয়ংক্রিয়ভাবে সেট আপ/তৈরী হয়ে থাকে। উদাহরনস্বরূপ, আপনার লিনাক্স সিস্টেমকে যদি এফটিপি সার্ভার হিসেবে ব্যবহার করতে চান তবে ftp নামে একটি ইউজার একাউন্ট তৈরী হবে। এই ftp একাউন্ট এর সাহায্যে সাধারন যে কেউ সার্ভার এর সাথে যুক্ত হয়ে যাবতীয় কাজ করতে পারবে।

লিনাক্সের ফাইল সিস্টেম

লিনাক্স/ইউনিক্সে ফাইল নিয়ে কাজ করার আগে যেটি জানা সবচেয়ে গুরুত্বপূর্ন তা হচ্ছে -

লিনাক্স/ইউনিক্স সর্বদা কেস সেনসিটিভ!

অর্থাৎ বড় হাতের অক্ষর এবং ছোট হাতের অক্ষরকে সে আলাদা বিবেচনা করে থাকে।

নিচের প্রত্যেকটি ফাইল-ই লিনাক্সে ভিন্ন ভিন্ন ফাইল হিসেবে বিবেচিত হয়ঃ

README
readme
Readme
ReadMe

লিনাক্সে সবকিছুই ফাইল হিসেবে ধরা হয়। যখন স্ক্রিনে কোন কিছু লিখে আপনাকে দেখায় তখন এটি আসলে একটি ফাইলেই তা লিখে দেখায়। যখন এটি মডেম এর সাহায্যে কোন ডাটা পাঠায় তখন আসলে সে মনে করে যে, একটি ফাইলে সে লিখছে মাত্র – এর বেশী কিছু নয়। তাই আপনার মেশিনের যাবতীয় হার্ডওয়্যার সেই সাথে পোর্ট সমূহ, হার্ড ড্রাইভ, ভিডিও কার্ড ইত্যাদি যাই থাকুক না কেন সেগুলি লিনাক্সের ফাইল সিস্টেমের কোথা ও না কোথাও অবশ্যই ফাইল হিসেবে দেখানো হয়ে থাকে। ফাইল সিস্টেমের রুট পাথে ডিভাইসসমূহের জন্য একটি /dev নামে ডিরেক্টরী/ফোল্ডার আছে। এ ফোল্ডারে হার্ডওয়্যার এর সাথে সম্পর্কযুক্ত অসংখ্য ফাইল পাবেন। উইন্ডোজে যেমন ডিভাইস ড্রাইভার আছে ঠিক তেমনই লিনাক্সে ফাইলগুলি ডিভাইস ড্রাইভারের কাজ করে থাকে। এ ডিভাইস ড্রাইভার গুলিই প্রোগ্রামের সাথে সত্যিকারের হার্ডওয়্যার এর সাথে যোগাযোগ এবং ডাটা ট্রান্সফারের কাজ করে থাকে।

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

Primary Master- hda
Primary Slave- hdb
Secondary Master-hdc
Secondary Slave- hdd


বর্তমানে নতুন হার্ডড্রাইভসমূহ সাটা নির্ভর হওয়ার এগুলিকে hda, hdb, hdc ইত্যাদির বদলে sda, sdb, sdc ইত্যাদি হিসেবে দেখিয়ে থাকে। যদি হার্ডডিস্কে একাধিক পার্টিশন থাকে তবে প্রতিটি পার্টিশনকেই উপরে বর্নিত ড্রাইভের নামের শেষে একটি নম্বর দিয়ে চিহ্নিত করা হয়। উদাহরনস্বরূপঃ আপনার যদি একটি হার্ডডিস্ক থাকে এবং সেই সাথে তার তিনটি পার্টিশন থাকে তবে প্রথম ড্রাইভটি(c:) হবে hda1 অথবা sda1। তারপর প্রাইমারি পার্টিশন এর জন্য আরো তিনটি ড্রাইভ লেটার সংরক্ষিত থাকে বিধায় পরবর্তী ড্রাইভগুলি দেখাবে 5 নম্বর সিরিয়াল হতে। অর্থাৎ বাকি দুটি পার্টিশনকে দেখাবে hda5/sda5, hda6/sda6 হিসেবে। এ পার্টিশনগুলি একসেস করতে হলে অবশ্যই সেগুলি মাউন্ট করে নিতে হবে যদিও বর্তমানে বেশ কিছু ডিস্ট্রোতে এগুলি অটো মাউন্ট হয়ে থাকে। ইনস্টলেশনের সময় যে পার্টিশনগুলি তৈরী করবেন তা লিনাক্স বুটের সময় নিজে থেকেই মাউন্ট করে নিবে।

হার্ডডিস্কের পার্টিশনসমূহ দেখতে কমান্ড দিনঃ

fdisk -l

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

mount -t iso9660 /dev/hda /cdrom

উপরের কমান্ডটি প্রথমেই একটু অপরিচিত মনে হতে পারে কিন্তু এটি আসলে খুবই সহজ। আসুন এর অপশনগুলি এক নজরে দেখে নেই।

  • mount একটি ডিভাইসকে ফাইল সিস্টেম এর অংশে পরিনত করে
  • -t iso9660 মাউন্টকৃত ফাইল সিস্টেম এর ফরম্যাট কে নির্দেশ করে। (ডাটা সিডি এবং অধিকাংশ ডিভিডির জন্য স্ট্যান্ডার্ড ফরম্যাট হচ্ছে iso9660 কিন্তু যদি আমরা ফ্লপি ড্রাইভ মাউন্ট করি সেক্ষেত্রে এটি হবে msdos)
  • /dev/hda ডিভিডি/সিডিরম ড্রাইভের ডিভাইস ফাইলের পাথ। hda এর a দ্বারা এটি প্রথম হার্ডড্রাইভের প্রথম আইডিই চ্যানেল কে নির্দেশ করে। SCSI হার্ডড্রাইভের ক্ষেত্রে আমার মেশিনে ডিভিডি রম কে দেখায় scd.
  • /cdrom দ্বারা সিস্টেম এর একটি ডিরেক্টরী বা ফোল্ডারকে বোঝায় যেখানে এটি মাউন্ট করা হবে এবং একসেস করা হবে। এটি আগে থেকেই তৈরী করা থাকতে হবে কিন্তু এটি যেকোন নামে যেকোন জায়গাতেই তৈরী করতে পারেন। এ জন্য mkdir কমান্ডের মাধ্যমে একটি ফোল্ডার তৈরী করুন যেমনঃ yourname এবং উপরের কমান্ড এ /cdrom এর বদলে দিন /yourname - যেমনটি আপনি চান।

উপরে মাউন্ট কমান্ডের সাহায্যে /cdrom ডিরেক্টরীতে (যেটি মূলত ইনস্টলেশনের সময়ই তৈরী) ডিভিডি রম ড্রাইভটি ম্যাপ করা হবে। যে ডিরেক্টরীতে একটি ডিভাইসকে ম্যাপ করা হয় প্রবেশ করার জন্য তাকে মাউন্ট পয়েন্ট বলে। তাই একটি ডিভিডি রম মাউন্ট করা হলে যে মাউন্ট পয়েন্টে একে ম্যাপ করা হয় সেখানে প্রবেশের জন্য শুধুমাত্র নিচের কমান্ডটি দিনঃ

cd /cdrom

এবং ফাইলসমূহ প্রদর্শনের জন্য ls কমান্ডটি ব্যবহার করুন। যদি আপনি নিচের লাইনের মত বার্তা পানঃ

kernel does not recognize /dev/hda

তাহলে আপনার ডিভিডি-রমটি সম্ভবত স্লেভ হিসেবে প্রাইমারি আইডিই চ্যানেল এ যুক্ত আছে।(অর্থাৎ /dev/hdb)।
ডেবিয়ান সাধারনতঃ ইনস্টলেশনের সময়ই /cdrom ডিরেক্টরীটি তৈরী করে থাকে। অন্যান্য ডিস্ট্রিবিউশনে এটি সাধারনত /mnt ডিরেক্টরীর অধীনে থাকে। এ সব সিস্টেমে মাউন্ট করার জন্য টার্গেট ডিরেক্টরীটি পরিবর্তন করে দিলেই হল যা হবে নিম্নরূপঃ

mount -t iso9660 /dev/hda /mnt/cdrom

যেভাবে আপনি রিমুভেবল ড্রাইভগুলি প্রবেশের জন্য মাউন্ট করেন ঠিক একইভাবে কাজ শেষে এগুলিকে আনমাউন্ট করা হয। ইজেক্ট বাটন প্রেস করলে অনেক সময় ডিভিডি রম বের নাও হতে পারে সেজন্য আনমাউন্ট কমান্ড ব্যবহার করতে হবে। এজন্য টাইপ করুন umount এবং লিখুন ফাইল সিস্টেমের মাউন্ট পয়েন্টঃ

umount /mnt/cdrom

লিনাক্সের ফাইল সিস্টেমের একটি গুরুত্বপূর্ন বিষয় হলো যে, ফাইল এক্সটেনশন এখানে অপারেটিং সিস্টেম এর জন্য কিছুই নির্দেশ করে না। উইন্ডোজে সাধারনত ফাইলের নামের শেষে একটি পিরিয়ড(.) চিহ্ন দিয়ে যে তিনটি ক্যারেক্টর এর এক্সটেনশন থাকে সেটিই সাধারনত তার কাজকে নির্দেশ করে থাকে- উদাহরনস্বরূপ এটি কি একটি প্রোগ্রাম (.exe) নাকি একটি সাধারন এমএস ওয়ার্ড এর ফাইল(.doc)। লিনাক্স এ ধরনের কোন এক্সটেনশন এর ব্যবহার-ই নেই। ফাইল এর নামে পিরিয়ড (.) থাকতে পারে তবে সেটি লিনাক্সের কাছে কোন এক্সটেনশন হিসেবে বিবেচিত হয় না।
অবশ্য লিনাক্সের কিছু কিছু এপ্লিকেশনে তাদের ডাটা ফাইলকে এক্সটেনশন দিয়ে চিহ্নিত করতে পারে যেমন এ্যাপাচি ওয়েব সার্ভার .htm, .html, এবং .shtmlযুক্ত ফাইলগুলিকে খুঁজে থাকে এবং এগুলিকে মনে হতে পারে যে এক্সটেনশন। টেকনিক্যালি কিন্তু তারা তা মোটেও নয় এবং লিনাক্স/ইউনিক্স অপারেটিং সিস্টেমের কাছে তাদের কোন অর্থই নেই।

আপনার একটি ফাইলের নাম হতে পারে this.is.a.file-এ রকম যদি আপনি চান। অপারেটিং সিস্টেম এর কাছে সবই এক। সুতরাং কিভাবে লিনাক্স বুঝতে পারে যে, এ ফাইলটি একটি প্রোগ্রাম/এ্যাপ্লিকেশন? লিনাক্সের আছে প্রত্যেকটি ফাইলের জন্য একসেট পারমিশন যেগুলি হচ্ছে যথাক্রমে-read, writeএবং execute। আপনাকে শুধুমাত্র একটি ফাইল/স্ক্রিপ্টকে execute পারমিশন সেট করে দিলেই হবে তাহলে এটি যে একটি এক্সিকিউটেবল প্রোগ্রাম তা অপারেটিং সিস্টেম বুঝে নেবে। আপনি এক্ষেত্রে প্রোগ্রাম বা স্ক্রিপ্ট নয় এমন ফাইলকে ও execute পারমিশন দিতে পারেন কিন্তু সেক্ষেত্রে অপারেটিং সিস্টেম এটিকে শেল স্ক্রিপ্ট কমান্ড হিসেবে রান করার চেষ্টা করবে। তাই ফলস্বরূপ আপনি অনেকগুলি এরর মেসেজ পেতে পারেন -এমনকি ফাইলের ভিতরে লেখাগুলির কারনে মারাত্মক কোন ফলাফল হিসেবে একটি খালি হার্ডডিস্ক ও পেতে পারেন!!!

আমি এখানে ফাইল পারমিশন নিয়ে ব্যাপক আলোচনা টানতে চাই না। শুধুমাত্র কিছু বেসিক নিয়ে আলোচনা করতে চাই।

আপনি যদি ডসে কাজ করে থাকেন তাহলে নিচের কমান্ডটি শেল প্রম্পটে টাইপ করে লিনাক্সে কাজ করাকে আরেকটু সহজ করতে পারেনঃ

alias dir="ls -laF"

এটি ফাইল লিস্ট দেখার জন্য ডসে ব্যবহৃত dirকমান্ডকে লিনাক্সের ls কমান্ড এর বদলে ব্যবহারের সুযোগ করে দেয়। আমি অবশ্য লিনাক্সের ভার্সনটিতে বেশী অভ্যস্ত এজন্য মাঝে মাঝে উইন্ডোজেও ভুল করে ls কমান্ড দিয়ে বসি। কোন প্যারামিটার বাদে শুধুমাত্র ls কমান্ডটি একটি সাধারন লিস্ট প্রদান করে থাকে যেখানে এমনকি কোনটি ফাইল আর কোনটি ডিরেক্টরী তাও বোঝা যায় না। একটি ভাল লিস্ট দেখার জন্য তাই কমান্ড দিতে হবে ls -laF কিন্তু প্রতিবারই আপনাকে তা টাইপ করতে হবে। তাই উপরের কমান্ডটি দেয়ার পর আপনাকে শুধুমাত্র dir টাইপ করলেই চলবে।

drwxrwxrwx 3 keith web 4096 Aug 8 03:59 ./
dr-xr-sr-x 3 keith web 4096 Aug 6 13:56 ../
-rw-r--r-- 1 keith web 17181 Aug 6 16:04 bdl21dlx.zip
-rwxr-xr-x 1 keith web 15818 Aug 6 16:04 bdlogger.cgi*
-rw-r--r-- 1 keith web 1 Aug 6 16:04 history.log
-rw-r--r-- 1 keith web 1 Aug 6 16:04 pagehits.cnt
-rw-r--r-- 1 keith web 1 Aug 6 16:04 period.log
-rw-r--r-- 1 keith web 30586 Aug 6 16:04 readme.txt
-rw-r--r-- 1 keith web 1 Aug 6 16:04 trigger.dat
drwxrwxr-x 2 keith web 4096 Aug 8 03:59 zips/

“zips/” এর পর '/' দিয়ে এটি যে একটি ডিরেক্টরী তা নির্দেশ করে (ঠিক যেমনটি লাইনের শুরুতে পারমিশন ব্লকের বামেরd দিয়ে বোঝানো হয়)। bdlogger.cgi ফাইল এর পর * দিয়ে এটি যে একটি এক্সিকিউটেবল ফাইল তা নির্দেশিত হয়। bdlogger.cgi ফাইলের পারমিশন ব্লকে -rwxr-xr-x (যা মূলত অক্টেট হিসেবে 755) (x) ফ্লাগের সাহায্যে ও বোঝা যায় যে এটি একটি এক্সিকিউটেবল ফাইল।

এখানে একটি বিষয় লক্ষ্যনীয় যে, ফাইলের নামের ক্ষেত্রে লিনাক্স শুধুমাত্র একটি বিশেষ উদ্দেশ্যেই পিরিয়ড ব্যবহার করে থাকে। যে ফাইলগুলির নাম পিরিয়ড দিয়ে শুরু হয় সেটি সাধারনত কনফিগারেশন ফাইল হয়ে থাকে। লিনাক্স/ইউনিক্সে প্রত্যেক ব্যবহারকারীর হোম ফোল্ডারেই .profile নামে একটি ফাইল থাকে। একজন ব্যবহারকারীর এনভারোনমেন্ট সেটআপ করার জন্য এ ফাইলটি ব্যবহার হয়ে থাকে (যেমন ডিফল্ট শেল কোনটি, এনভারোনমেন্ট ভেরিয়েবলস সমূহ ইত্যাদি)। এটি খানিকটা ডসের config.sys ফাইলের মত কাজ করে থাকে। vi টেক্সট এডিরের নিজস্ব কনফিগারেশন ফাইল (.vimrc) আছে। এ রকম আরো আছে ক্যারেক্টার নির্ভর প্রোগ্রাম telnet এবং ftp এর জন্য এবং তাদের কনফিগারেশন ফাইলসমূহ ব্যবহারের মাধ্যমে এ প্রোগ্রামগুলিকে অটোমেট করা যায়। উদাহরনস্বরূপ, আপনি একটি এফটিপি এর প্রোফাইল সেট আপ করে cron শিডিউলার প্রোগ্রাম এর সাহায্যে প্রতি রাত্রে আপনার ওয়েব সাইট হতে একটি লগ ফাইল ডাউনলোড করার জন্য নির্দেশ দিয়ে রাখতে পারেন। যদি শুধুমাত্র ls কমান্ড দেয়া হয় তাহলে যে ফাইলগুলি পিরিয়ড(.)দিয়ে শুরু তাদের তালিকা দেখা যাবে না এজন্যই আমরা উপরের কমান্ডে ls -laF কমান্ড ব্যবহার করেছি।

হোম ডিরেক্টরী প্রসঙ্গে বলা যায় যে, প্রতিবার যখন একজন নতুন ব্যবহারকারী তৈরী করা হয় তার জন্য একটি ব্যক্তিগত হোম ডিরেক্টরী/ফোল্ডার ও একই সাথে তৈরী হয়ে থাকে। এ ফোল্ডারটির নাম ব্যবহারকারীর নামেই তৈরী হয়ে থাকে যা /home ডিরেক্টরী পাথে অবস্থিত। লিনাক্স ফাইল সিস্টেম এর যেকোন অবস্থান থেকে যদি হোম ডিরেক্টরীতে ফিরতে চান সরাসরি তবে টাইপ করুন cd এবং এন্টার কি প্রেস করুন।

এ প্রসঙ্গে বলা যায়, একটি এফটিপি সার্ভারে pub (public download files) নামে যে বিশেষ ফোল্ডারটি দেখা যায় সেটির অবস্থান আসলে /home/ftp ফোল্ডারে।

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

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

Bad command or file name

এর অর্থ হচ্ছে, ফাইলটি হয়তো ড্রাইভের অন্য কোথাও থাকতে পারে তবে এটি বর্তমান ডিরেক্টরীতে নেই অথবা পাথে যে ডিরেক্টরীর তালিকা আছে সেখানে কোথাও নেই তাই আপনি উপরের মেসেজটি পেয়েছেন।

লিনাক্স/ইউনিক্স এর ও নিজস্ব পাথ আছে। সত্যি বলতে কি, প্রত্যেক ব্যবহারকারীরই নিজস্ব পাথ থাকে যেটি সে নিজের প্রয়োজনমত কাস্টমাইজ করে নিতে পারে। এই পাথে যে ডিরেক্টরীর তালিকা থাকে সেগুলি মূলত প্রোগ্রামফাইল সমূহ সংরক্ষন করার জন্য স্ট্যান্ডার্ড লোকেশনসমূহ এর সমষ্টি মাত্র। এক্সিকিউটেবল বাইনারী ফাইলসমূহ সংরক্ষিত হবার স্ট্যান্ডার্ড ডিরেক্টরী/ফোল্ডারগুলি হচ্ছে যথাক্রমেঃ
• /bin
• /usr/bin
• /usr/sbin
whereis কমান্ডের সাহায্যে পাথে উল্লেখিত ডিরেক্টরীসমূহে কোন ফাইল আছে কিনা খুজে বের করা যায়।

whereis ls
উপরের কমান্ডটি দিলে তার ফলাফল হবেঃ

ls: /bin/ls

যার অর্থ ls ফাইলটি /bin ডিরেক্টরীতে অবস্থিত। যদি এটি কোন কিছু খুজে না পায় তবে নিচের ফলাফল প্রদান করবেঃ

ls:

whereis দিয়ে শুধুমাত্র পাথে উল্লেখিত ডিরেক্টরীতে কোন ফাইল (সাধারনত প্রোগ্রাম ফাইল সমূহ) আছে কিনা তা খুজে বের করা যায়। এটি ইউনিক্স মেশিনগুলিতে কাজ নাও করতে পারে (এর বদলে আপনি which ব্যবহার করুন)।

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

echo $PATH

প্রোগ্রাম ফাইলসহ যেকোন ধরনের ফাইল তা হার্ডডিস্কের যে কোন জায়গায়ই থাক না কেন(পাথ ছাড়া ও সব জায়গাতে) তা খোঁজার জন্য find কমান্ডটি ব্যবহার করুন। এ কমান্ডটিতে একটি শুরুর স্থান এবং যে ফাইলটি খুজবেন তার আংশিক বা পূর্ন নাম দিতে হয়। উদাহরনস্বরূপ, আপনি যদি পুরো হার্ডডিস্কে খুজতে চান সেক্ষেত্রে শুরুর স্থান দিতে হবে রুট(/) ডিরেক্টরী- ঠিক নিচের মতঃ

find / -name 'ls'

যে ডিরেক্টরীতে আছেন সেই ডিরেক্টরী এবং শুধুমাত্র তার সাবডিরেক্টরীতে যদি খুজতে চান তাহলে কমান্ড হবে নিম্নরূপঃ

find . -name 'ls'

. (একটি পিরিয়ড) দিয়ে লিনাক্স/ইউনিক্সে বর্তমান ডিরেক্টরীকে সংক্ষেপে বোঝানো হয়ে থাকে এবং এটি কমান্ড দেয়ার সময়ও ব্যবহার করা যেতে পারে। দুটি পিরিয়ড (..) দিয়ে এক লেভেল উপরের প্যারেন্ট ডিরেক্টরীকে বোঝানো হয়ে থাকে এবং এটিকেও কমান্ড দেয়ার সময় পুরো পাথ টাইপ না করে ব্যবহার করা যেতে পারে - ফলে আপনার মূল্যবান সময় কিছুটা সাশ্রয় হবে নিঃসন্দেহে।

আপনার ফাইলসমূহ হার্ডডিস্কে কতটুকু জায়গা দখল করে আছে তা জানতে কমান্ড দিনঃ

df

Use% কলামটিতে এ তথ্য পাবেন। গিগাবাইট বা এ রকম পরিচিত ইউনিটে ব্যবহৃত ও অব্যবহৃত জায়গার পরিমান দেখতে কমান্ড দিন df -h।

cat কমান্ডটি ডসের type কমান্ডের মতই কাজ করে থাকে। এটি দিয়ে একটি ফাইলের লেখাসমূহকে পর্দায় দেখা যায়। বাইনারি কোন ফাইলে এই cat কমান্ডটি নিশ্চয়ই ব্যবহার করতে চাইবেন না কারন এটি বাইনারি ফাইলকে ওপেন করতে গিয়ে অনেকগুলো গার্বেজ দেখাবে বিপ কমান্ডসহ। শুধুমাত্র টেক্সট ফাইলকে দেখার জন্যই এটি ব্যবহার করুন। যদি কোন ফাইল ২৫ লাইনের বেশী লম্বা হয় তবে আপনি শুধুমাত্র নিচের ২৫ লাইন দেখতে পাবেন এ কমান্ডের সাহায্যে। বাকি লাইনগুলি স্ক্রল হয়ে পর্দার উপর দিকে চলে যাবে। এজন্য more কমান্ড ব্যবহার করাই সব থেকে ভাল কারন এটি একই কাজ করে শুধুমাত্র প্রতি ২৫ লাইন করে পর্দায় দেখায় যাতে আপনি ফাইলে কি আছে তার সবটাই দেখতে পান। স্পেসবার চাপলে এক স্ক্রিন করে নিচের দিকে যাবে এবং এন্টার-কি চাপলে এক লাইন করে সামনের দিকে অগ্রসর হবে।

প্রোগ্রামগুলিকে চেইন করে এক্সিকিউট করা হচ্ছে অটোমোশন এর অন্যতম একটি সুবিধা। একটি প্রোগ্রাম এর আউটপুট অন্য আরেকটি প্রোগ্রামের ইনপুট হিসেবে প্রদানের জন্য পাইপিং করা হয়ে থাকে। একটি সাধারন উদাহরন দেইঃ

ls | more

যদি একটি ডিরেক্টরীতে অসংখ্য ফাইল থাকে তবে ls কমান্ড দিলে বেশীরভাগ ফাইল এর নামই দেখতে পাবেন না কিন্তু যদি পাইপিং করে উপরের মত করে কমান্ড দেন তাহলে এক স্ক্রিন দেখানোর পর থেমে যাবে এবং পরবর্তী তালিকা দেখানোর জন্য অপেক্ষা করবে। পাইপ ক্যারেক্টারটি(|) বেশীর ভাগ কি-বোর্ডের \ চিহ্নের উপরে অবস্থিত।

এটি খুব সাধারন একটি উদাহরন দিলাম। আপনি লিনাক্স কমান্ডে পারদর্শী হওয়ার পর এগুলির সাহায্যে অনেক বড়সড় অটোমোশনের কাজ করতে পারবেন । এজন্য grep এবং sort কমান্ড এর ম্যানুয়াল দেখতে পারেন যা দিয়ে আরো কিছু অটোমোশন এর ট্রিকস প্রয়োগ করা সম্ভব।

অটোমোশনের আরো একটি গুরুত্বপূর্ন টুলস হচ্ছে "রিডাইরেক্ট"। স্ক্রিনে সাধারনত যা দেখা যায় তার সবকিছুই কোন টেক্সট ফাইল অথবা প্রিন্টার ও মডেম এর মত ডিভাইসে রিডাইরেক্ট করা যায় যেখানে লিনাক্স সবকিছুকেই ফাইল হিসেবে বিবেচনা করে থাকে। এজন্য গ্রেটার (>) সাইন ব্যবহার করা হয়। উদাহরনস্বরূপ আপনি যদি কোন ফাইল তালিকা দেখার কমান্ডকে প্রিন্টার এ প্রিন্ট করতে চান তবে কমান্ড হবেঃ

ls > lp0

যদি কোন টেক্সট ফাইলে সেভ করতে চান এর আউটপুট তবে কমান্ড দিনঃ

ls /etc > output

এখানে output হচ্ছে ফাইলের নাম। ব্যস আপনার হোম ফোল্ডারে output নামে একটি ফাইল তৈরী হবে যেখানে /etc ফোল্ডারে যা আছে তা যেকোন টেক্সট এডিটরে ওপেন করে দেখতে পারেন।

পাইপিং ও রিডাইরেকশন এবং সেই সাথে লিনাক্সে ব্যবহৃত সমৃদ্ধ কমান্ডসমূহ এর সাহায্যে এমন একটি সিস্টেম দাড় করানো সম্ভব যা আপনার কফি খাওয়ার সময়েই সবকিছু নিজে নিজেই করতে থাকবে।

লিনাক্স/ইউনিক্স ফাইল সিস্টেম সিমবোলিক লিংকস নামের আরেক ধরনের ফাইল সাপোর্ট করে যাকে সাধারনভাবে সিমলিংকস বলা হয়। এটি উইন্ডোজে শর্টকার্টস এর মত কাজ করে থাকে। বাইনারী এক্সিকিউটেবল ফাইল এবং ডাটা ফাইলসমূহের জন্য সিমলিংক তৈরী করতে এটি ব্যবহার করা হয় যাতে এগুলিকে একইসাথে হার্ডডিস্কের অনেক জায়গায় আছে বলে মনে হয়। তবে আপনি একটি ডিরেক্টরীর জন্যও সিমলিঙ্ক তৈরী করতে পারেন যাতে ঐ ডিরেক্টরীটি ফাইল সিস্টেমের বিভিন্ন জায়গা থেকে একসেস করা যায়। এর সবচেয়ে বড় সুবিধা হচ্ছে যখন আপনি কোন একটি ফাইল অথবা ডিরেক্টরীতে পরিবর্তন করবেন তখন তার সাথে সম্পর্কযুক্ত সকল সিমলিঙ্কে সেই পরিবর্তনটি অটোমেটিকভাবেই আপডেট হয়ে যাবে। সব জায়গাতেই এক ফাইলের সব কপিতে পরিবর্তন করার প্রয়োজন পড়ে না।

আপনার হোম ফোল্ডার এর ভিতর ডকুমেন্ট ফোল্ডারের একটি সফট সিমলিংক তৈরি করি ডেস্কটপে নিচের কমান্ড দিয়েঃ

ln -s /home/zahid/Documents/ /home/zahid/Desktop/


এখন ডেস্কটপ থেকেই আপনি সরাসরি এ লিংকে ক্লিক করে ডকুমেন্ট ফোল্ডারে একসেস করতে পারবেন।

দুধরনের সিমবোলিক লিংক দেখতে পাওয়া যায় যথা- হার্ড এবং সফট – সফট সিমবোলিক লিংকই আমাদের সব থেকে পরিচিত ও বহুল ব্যবহৃত। উইন্ডোজের শর্টকার্টই হচ্ছে লিনাক্সের এই সফট সিমলিংকের সমতূল্য। অন্যদিকে হার্ড সিমলিংক একটি ফাইল/ডিরেক্টরীর সত্যিকারের একটি কপি তৈরী করে থাকে। যখন আপনি ls কমান্ড ব্যবহার করেন তখন -> চিহ্ন দেখে সহজেই বলে দেয়া যায় যে এটি একটি সিমলিংক কারন এ চিহ্নের মাধ্যমে অরিজিনাল ফাইলকে পয়েন্ট করে থাকে। সিমলিংক স্টার্টআপ ডিরেক্টরীতে বেশী ব্যবহৃত হয়ে থাকে। যখন সিস্টেম একটি নির্দিষ্ট রানলেভেলে চালু হয় তখন এটি স্টার্টআপ ডিরেক্টরীতে অবস্থিত বুট আপ শেল স্ক্রিপ্ট গুলো রান করে থাকে। প্রত্যেকটি রানলেভেলের জন্যই আলাদা ডিরেক্টরী আছে। অনেক স্ক্রিপ্ট রান লেভেল ছাড়াই চালু হয়ে থাকে। প্রত্যেকটি রান লেভেল স্টার্টআপ ডিরেক্টরীতে (যেমন, /etc/rc0.d, /etc/rc1.d, /etc/rc2.d ইত্যাদি) স্ক্রিপ্টগুলি আলাদাভাবে কপি করার বদলে সকল স্ক্রিপ্টগুলিকে একটি ডিরেক্টরীতে রাখা হয় (/etc/init.d) এবং নির্দিষ্ট রানলেভেলের (যেমন rc2.d) চাহিদা অনুযায়ী শুধুমাত্র স্ক্রিপ্টগুলির সিমলিংককে রাখা হয়ে থাকে।

উদাহরনস্বরূপঃ cron ব্যাকগ্রাউন্ড শিডিউলার এর জন্য শেল স্ক্রিপ্টগুলিকে cron বলা হয় এবং এটি সব রান লেভেলেই চালু হয়ে থাকে। এটি /etc/init.d ডিরেক্টরীতে অবস্থিত যেখানে সকল স্টার্টআপ স্ক্রিপ্ট থাকে। "init.d" হচ্ছে গ্রীক শব্দ "স্টার্ট ডেমন" এর সংক্ষিপ্ত রূপ। যদি ls কমান্ডের সাহায্যে রান লেভেল ২ এর স্টার্ট আপ ডিরেক্টরী /etc/rc2.d তে ফাইল লিস্ট দেখার কমান্ড দেন তাহলে cron স্টার্ট আপ এর জন্য সফট সিমলিংকটি দেখতে পাবেন নিচের মতঃ

S89cron -> ../init.d/cron

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

0 comments:

Post a Comment