Linux (RHEL/Ubuntu/Kali) File System & Directory Structure
যখন আমরা উইন্ডোজ অপারেটিং সিস্টেম ইন্সটল করি তখন, আমাদের কে একটা পার্টিশন অবশ্যই করতে হয় সেটা হচ্ছে ‘C:\’ ড্রাইভ। এছাড়া একটা MBR পার্টিশন টেবিলে একটি রিজার্ভ পার্টিশন (System Reserverd) থাকে এবং GPT পার্টিশন টেবিলের ক্ষেত্রে ‘EFI’, ‘MSR’, এবং ‘Recovery’ নামে আরও কিছু পার্টিশন সিস্টেম নিজে থেকেই তৈরি করে নেয়। আর যদি অতিরিক্ত পার্টিশনের দরকার হয়, তাহলে আমরা ‘D:Documents’, ‘E\: Training’, ‘F\: Entertainment’ নামে বিভিন্ন পার্টিশন তৈরি করি। কারণ, ‘C\: System’ ড্রাইভ অনেক সময় ক্র্যাশ (Crush) করে, এজন্য ব্যাক্তিগত বা জরুরী ডাটা আলাদা করে রাখার জন্য আলাদা পার্টিশন করা হয়। উইন্ডোজ অপারেটিং সিস্টেমে ডেস্কটপ থেকে ‘This PC’ ওপেন করলে উক্ত পার্টিশন সমূহ দেখা যায়। আমরা নিচের স্ক্রিনসুট থেকে সেটা পরিষ্কার ধারনা পেতে পারিঃ

এখন আমরা যদি লিনাক্স ভিত্তিক অপারেটিং সিস্টেমে আসি, সেটা যে কোনো ডিস্ট্রিবিশন (RedHat, CentOS, Ubuntu, Debian) হতে পারে, লিনাক্স ইনস্টল করার সময় যে তিনটা পার্টিশনের দরকার হয়ঃ
- root পার্টিশন – /
- boot পার্টিশন – /boot বা – /boot/efi (GPT পার্টিশনের ক্ষেত্রে)
- swap পার্টিশন – swap
নোটঃ এখানে রুট (/) পার্টিশনকে আমরা উইন্ডোজ অপারেটিং সিস্টেমের ‘C:\’ সাথে তুলনা করতে পারি। ‘/boot’ পার্টিশনকে উইন্ডোজ অপারেটিং সিস্টেমের (System Reserverd) পার্টিশনের সাথে তুলনা করতে পারি এবং ‘swap’ পার্টিশনকে আমরা উইন্ডোজ অপারেটিং সিস্টেমের ভার্চুয়াল মেমরি (পেজ ফাইল) সিস্টেমের সাথে তুলনা করতে পারি।
লিনাক্স অপারেটিং সিস্টেমের (RedHat, CentOS, Ubuntu, Debian) ডিরেক্টরি স্টাকচার উইন্ডোজের চেয়ে একটু ভিন্ন। লিনাক্সের ডিরেক্টরি স্ট্রাকচার সাধারণত ট্রি (Tree/Hiaracial) আকৃতির হয়ে থাকে। লিনাক্সে সকল পার্টিশন বা মাউন্ট পয়েন্ট থাকে রুট (/) পার্টিশনের অধীনে। অর্থাৎ উইন্ডোজ অপারেটিং সিস্টেম থেকে ‘This PC’ ওপেন করলে যেমন অন্য পার্টিশন দেখা যায়, তেমনি লিনাক্সে রুট (/) পার্টিশনে ঢুকলে সিস্টেমের সকল মাউন্ট পয়েন্ট (Partition) দেখা যাবে।
আমরা যদি গ্রাফিক্যাল মোডে লিনাক্সের (RedHat/CentOS, Ubuntu, Kali) রুট (/) পার্টিশনে প্রবেশ করি তাহলে নিচের স্ক্রিনশুট অনুযায়ী দেখা যাবেঃ

Figure: Ubuntu Linux ‘root’ partition

Figure: RHEL/CentOS ‘root’ partition

Figure: Kali Linux ‘root’ partition Location
অর্থাৎ আমরা RHEL/Ubuntu/Kali যে কোনো লিনাক্স ডিস্ট্রিবিউশনের রুট (/) পার্টিশনেই প্রবেশ করি না কেন, নিচের মত ডিরেক্টরি স্ট্রাকচার দেখা যাবে অর্থাৎ সিস্টমের সকল ডিরেক্টরিই রুট (/) পার্টিশনের অধীনে। লিনাক্স ইন্সটলের সময়ে বা পরবর্তীতে যদি আরও কিছু অতিরিক্ত পার্টিশন তৈরি করা হয়, সেগুলার মাউন্ট পয়েন্ট (MAP) লোকেশন হিসেবে রুট (/) পার্টিশনের অধীনে দেওয়া হয়। কিন্ত, যদি কোনো কারণে রুট (/) পার্টিশন ক্র্যাশ করে তাহলে আলদা আলদা মাউন্ট পয়েন্ট বা পার্টিশন অক্ষত থাকবে।

Figure: Linux File File System and Directory Structure
যদি কমান্ড মোডে রুট (/) পার্টিশনে প্রবেশ করা হয়, তাহলে নিচের মত আউটপুট দেখতে পাবঃ
- প্রথমে ‘cd‘ কমান্ড দিয়ে রুট পার্টিশনে ( / ) প্রবেশ করব তারপর ‘ls‘ কমান্ড দিতে হবেঃ
[student@desktop ~]$ cd /
[student@desktop /]$ ls
boot etc lib media opt root sbin sys usr
bin dev home lib64 mnt proc run srv tmp var
বিভিন্ন লিনাক্স ডিস্ট্রিবিউশনের রুট (/) পার্টিশনের মধ্যে যে সকল ডিরেক্টরি/ফোল্ডার দেখা যায়, সেই গুলার কোনটার কি কাজ এবং কোন ডিরেক্টরির মধ্যে কি কি তথ্য থাকে এই বিষয়ে নিচে আলোচনা করা হয়েছেঃ
- ‘/root’ – এটা ‘root’ ইউজারের হোম ডিরেক্টরি অর্থাৎ ‘root’ ইউজার যখন তার ইউজার নাম এবং পাসওয়ার্ড দিয়ে সিষ্টেমে লগইন করে, তখন সে ‘/root’ ডিরেক্টরির মধ্যে অবস্থান করে। সিস্টেমে অন্য ইউজারদের এই ‘/root‘ ডিরেক্টরিতে ঢোকার পার্মিশন থাকে না।
- ‘/home‘ – সধারন ইউজারের (student, sumon, lucky) হোম ডিরেক্টরি। সধারন ইউজার, যারা ‘root’ ইউজার কর্তৃক তৈরি হয়, সেই সকল ইউজাররা সাধারনত ‘/home‘ ডিরেক্টরির মধ্যে থাকে। চাইলে আমরা অন্য যে কোনো ডিরেক্টরিকেও ‘/home‘ ডিরেক্টরি বানাতে পারি।
- ‘/etc’ – সিস্টেমের যাবতীয় কনফিগারেশন ফাইল, যেমনঃ সিস্টেম সকল কনফিগারেশন ফাইল, সার্ভার (DNS, FTP, Mail, HTTP, NFS, Proxy, Firewall, etc.) কনফিগারেশন ফাইল, সিকিউরিটি কনফিগারেশন ফাইল, ইউজার ডাটাবেস, গ্রূপ ডাটাবেস, ইউজার এবং গ্রূপের পাসওয়ার্ড সম্পর্কিত তথ্য থাকে।
- ‘/var’ – সিস্টেমের যাবতীয় ভ্যারিয়েবল ফাইল যেমনঃ সিস্টেম সকল লগ ফাইল (log message), প্রক্সি সার্ভারের cach/log/history, ডিফল্ট FTP সার্ভার ডাটা, ওয়েভ (HTTP) সার্ভারের হোস্টিং ডাটা, RPM ডাটাবেস, মেইল সার্ভারের SMTP ডাটা, ভার্চুয়াল মেশিন ইমেজ (VM) ইত্যাদি ‘/var’ ডিরেক্টরির মধ্যে থাকে।
- ‘/media’ – সিস্টেমের অটো মাউন্ট পয়েন্ট অর্থাৎ CD/DVD/USB বা অন্য কোনো ডিভাইস অটো মাউন্ট হলে ‘/media’ ডিরেক্টিরর ভিতরে মাউন্ট হয়।
- ‘/mnt’ – সিস্টেমের আরেকটি মাউন্ট (MAP) পয়েন্ট। এই জায়গায় আমরা ম্যানুয়ালি কোনো ডিভাইস DVD/USB/HDD/Network শেয়ার মাউন্ট (MAP) করতে পারি।
- ‘/bin‘ – এটাকে ইউজার বাইনারি (User Binary) ডিরেক্টরি বলে। সাধারন ইউজার কর্তৃক যে সকল কমান্ড এক্সিকিউট বা চালানো হয়, সেই কমান্ড গুলো ‘/bin‘ ডিরেক্টরির মধ্যে থাকে।
- ‘/sbin’ – এটা কে সিস্টেম বাইনারি (System Binary) ডিরেক্টরি বলে। অর্থাৎ ‘root’ ইউজার কর্তৃক যে সকল কমান্ড এক্সিকিউট বা চালানো হয় সেগুলো ‘/sbin‘ ডিরেক্টরির মধ্যে থাকে।
- ‘/tmp’ – অস্থায়ী (Temporary) ফাইলের জন্য ব্যবহার হয়। এটা উইন্ডোজ অপারেটিং সিস্টেমের ‘Temp‘ ফোল্ডারের মত কাজ করে। ‘/tmp’ ডিরেক্টরি থেকে ফাইল প্রতি দশ (১০) দিন অন্তর অন্তর আটমেটিক্যালি ডিলিট হয়ে যায়।
- ‘/dev’ – সিস্টেমের সকল ডিভাইস (Block/Character) ফাইল থাকে ‘/dev’ ডিরেক্টরির মধ্যে, যেমনঃ DVD/CD/USB/HDD/Soundcard/Keyboard/Mouse/Serial/tty/Printer পোর্ট ইত্যাদি।
- ‘/opt’ – এই ডিরেক্টরিটা সাধারনত ফাঁকা (Empty) থাকে। ‘/opt’ (Optional) হিসেবে ব্যবহার হয়ে থাকে। যেকোন ফাইল টেস্টিং বা অস্থায়ী ভাবে এখানে রাখতে পারি।
- ‘/proc’ – এটা মূলত ভার্চুয়াল ফাইল সিস্টেম (Virtual File System) হিসেবে কাজ করে। এটাকে বলা হয়ে থাকে ‘procfs’ এবং সিস্টেমের সকল প্রসেস, কার্নেল, কার্নেল মডিউল, ড্রাইভার, প্রসেসর, মেমেরি, ভার্চুয়াল মেমরি, ফাইল সিস্টেম এবং অন্য সকল সিস্টেম ইনফরমেশন পাওয়া যায়।
- ‘/run’ – লিনাক্স সিস্টেম রানিং অবস্থায় যে সকল প্রসেস চলে সেইগুলো এই লোকেশন পাওয়া যাবে। প্রতি রিবুট/রিস্টার্টের পরে ‘/run’ ডিরেক্টরির মধ্যে ফাইল/ফোল্ডার নতুন করে তৈরি হয়।
‘/lib’ – লিনাক্স সিস্টেমে ‘/lib’ এবং ‘/lib64′ নামে দুইটা Library (lib) ফাইলের ডিরেক্টরি থাকে। এই Library ফাইল উইন্ডোজ অপারেটিং সিস্টেমের DLL (.dll) ফাইলের মত কাজ করে। লিনাক্সে Library ফাইলের এক্সটেনশন হিসবে .so (shared object) ব্যাবহার হয়। এটা মূলত বিভিন কার্নেল মডিউল এবং ‘C’ প্রোগ্রামিং কোডের Library লোকেশন। সিস্টেম বুট (boot) হতে এবং ‘/bin’ ও ‘/sbin’ ডিরেক্টরির সকল কমান্ড চালাতে এই Library ফাইল ব্যাবহার হয়।
- ‘/usr‘ – সিস্টেম এডমিনিস্ট্রেটর কর্তৃক সকল ইন্সটলকৃত সফটওয়্যার, শেয়ারড লাইব্রেরী (shared Libraries) এবং সকল Read Only প্রোগ্রাম ডাটা (Program Data) থাকে ‘/usr‘ ডিরেক্টরির মধ্যে। এই ‘/usr‘ ডিরেক্টরির তিনটা (০৩) গুরুত্বপূর্ণ সাব-ডিরেক্টরি হচ্ছেঃ
- ‘/usr/bin‘ – রেগুলার ইউজার কর্তৃক রান কৃত সকল কমান্ড।
- ‘/usr/sbin‘ – সিস্টেম এডমিনিস্ট্রেটর কর্তৃক রান কৃত সকল কমান্ড।
- ‘/usr/local‘ – সকল ইন্সটলকৃত সফটওয়্যারের লোকেশন।
এখানে ‘/usr/bin‘ এবং ‘/usr/sbin‘ ডিরেক্টরির একটা করে লিংক ডিরেক্টরি (Soft Link) থাকে যথাক্রমে ‘/bin‘ ও ‘/sbin‘ ডিরেক্টরির সাথে।
নোটঃ বিভিন্ন লিনাক্স ডিস্ট্রিবিশনের মধ্যে যে ডিরেক্টরি সমূহ কমন সেইগুলাই শুধু এখানে উল্লেখ করা হয়েছে। কিছু কিছু লিনাক্স ডিস্ট্রিবিশনের ক্ষেত্রে কিছু অতিরিক্ত ডিরেক্টরি থাকে, সেইগুলা এখানে উল্লেখ করা হয়নি।
