Linux নিয়ে কাজ করতে গেলে আমরা প্রায়ই কয়েকটি নাম বারবার শুনি—Linux Kernel, GNU, GNU Coreutils, GCC, glibc, Bash, Shell, Terminal, GNOME, KDE ইত্যাদি।
কিন্তু সমস্যা হচ্ছে, এগুলো আসলে কে কোথায় থাকে, কার কাজ কী, আর একজন user যখন Terminal-এ ls লিখে তখন সেই command কীভাবে শেষ পর্যন্ত Kernel এবং Hardware-এর কাছে পৌঁছায়—এটা পরিষ্কার না হলে Linux-এর পুরো architecture-টাই অনেকটা অস্পষ্ট থেকে যায়।
এই লেখায় সেই পুরো বিষয়টাকে ধাপে ধাপে বোঝার চেষ্টা করা হবে।
১. Linux আর Linux Distribution-এর পার্থক্য
Linux এবং Linux Distribution একই জিনিস নয়।
Linux মূলত Kernel-এর কথা বোঝায়, আর একটি সম্পূর্ণ Linux Distribution হলো Kernel-এর সঙ্গে আরও অনেক প্রয়োজনীয় component-এর সমন্বয়।
একটি পূর্ণাঙ্গ Linux distribution-এর মধ্যে শুধু Kernel থাকলেই হয় না। এর সঙ্গে বিভিন্ন ধরনের utilities, package manager, system services, desktop environment, tools এবং configuration প্রয়োজন হয়।
একটি conceptual structure:
Linux Distribution
│
├── Linux Kernel
├── GNU Utilities
├── Package Manager
├── System Services
├── Desktop Environment
├── Applications
└── Other Tools
২. GNU আসলে কী?
GNU বুঝতে হলে GNU project-এর ধারণাটি বুঝতে হবে।
GNU-এর পূর্ণরূপ GNU's Not Unix।
GNU project-এর উদ্দেশ্য ছিল Unix-এর মতো একটি free software ecosystem তৈরি করা, যেখানে operating system তৈরির জন্য প্রয়োজনীয় বিভিন্ন component free software হিসেবে পাওয়া যাবে।
GNU-কে শুধু একটি single software হিসেবে দেখলে ভুল হবে।
বরং এটাকে একটি বড় software ecosystem/project হিসেবে দেখা যায়।
Conceptually:
GNU Project
│
┌────────────┼────────────┐
│ │ │
GCC glibc Coreutils
│ │ │
Compiler C Library Commands
│ │
└────────────┬────────────┘
│
Bash
│
User Space
৩. GNU-এর গুরুত্বপূর্ণ component
GNU ecosystem-এর বিভিন্ন গুরুত্বপূর্ণ component-এর মধ্যে রয়েছে:
- GCC
- glibc
- GNU Coreutils
- Bash
- GDB
GCC
GCC বা GNU Compiler Collection source code compile করার জন্য ব্যবহৃত হয়।
Conceptually:
C Source Code
│
▼
GCC
│
▼
Executable / Machine Code
glibc
GNU C Library application এবং operating system-এর বিভিন্ন functionality ব্যবহারের জন্য গুরুত্বপূর্ণ library layer।
Conceptually:
C Program
│
▼
glibc
│
▼
System Calls
│
▼
Linux Kernel
৪. GNU Coreutils
এখন আসি এই আলোচনার অন্যতম গুরুত্বপূর্ণ অংশে:
GNU Coreutils
GNU Coreutils হলো অনেকগুলো fundamental command-line utility/program-এর collection।
এর মধ্যে আমরা প্রতিদিনের Linux কাজের সময় বিভিন্ন command ব্যবহার করি:
ls
cp
rm
cat
grep
সহজভাবে:
GNU Coreutils
│
├── ls
├── cp
├── rm
├── cat
└── grep
এখানে একটি গুরুত্বপূর্ণ বিষয় হলো—ls কোনো magical Linux keyword নয়। এটি একটি command-line utility/program।
৫. Terminal আসলে কী?
এখন প্রশ্ন:
আমি command লিখব কোথায়?
উত্তর:
Terminal-এ।
Terminal হচ্ছে এমন একটি user-facing program/interface যেখানে user command লিখতে পারে এবং output দেখতে পারে।
যেমন:
ls
লিখলে Terminal-এ current directory-এর files এবং directories-এর output দেখা যায়।
কিন্তু Terminal নিজে ls command-এর কাজ করে না।
এখানেই Shell-এর প্রয়োজন হয়।
৬. Terminal আর Shell এক জিনিস নয়
এটি Linux শেখার সময় সবচেয়ে common confusion-এর একটি।
Terminal ≠ Shell
Terminal হলো command input/output interface।
অন্যদিকে Shell হলো command interpreter।
Terminal user-এর input গ্রহণ করে, আর Shell সেই command interpret করে এবং প্রয়োজনীয় program execute করার workflow পরিচালনা করে।
সহজভাবে:
Terminal
│
▼
Shell
│
▼
Command / Program
৭. Bash কী?
Bash = Bourne Again SHell
Bash হলো একটি shell program।
যখন তুমি Terminal-এ লিখো:
ls
তখন Bash command-টি interpret করে এবং প্রয়োজনীয় executable program চালানোর workflow পরিচালনা করে।
Conceptually:
Terminal
│
│ command
▼
Bash
│
│ interpret
▼
Command / Program
│
▼
Kernel
Shell-এর কাজ হলো user-এর command এবং system-এর মধ্যে একটি গুরুত্বপূর্ণ interface হিসেবে কাজ করা।
৮. Shell অনেক ধরনের হতে পারে
শুধু Bash-ই একমাত্র shell নয়।
Linux/Unix ecosystem-এ বিভিন্ন shell পাওয়া যায়, যেমন:
shkshbashzshcsh
একটি গুরুত্বপূর্ণ বিষয় হলো:
Shell এবং Terminal একই জিনিস নয়।
একই Terminal application-এর মাধ্যমে বিভিন্ন shell ব্যবহার করা সম্ভব।
৯. ls দিলে আসলে কী হয়?
এখন পুরো architecture-এর সবচেয়ে গুরুত্বপূর্ণ অংশে আসি।
ধরো তুমি Terminal খুলে লিখলে:
ls
আমাদের চোখে মনে হয়:
User → ls → Output
কিন্তু ভিতরে আরও কয়েকটি layer কাজ করছে।
User
│
▼
Terminal
│
▼
Shell
│
▼
ls
│
▼
Linux Kernel
│
▼
File System / Storage
│
▼
Kernel
│
▼
ls
│
▼
Shell
│
▼
Terminal
│
▼
User
এটাই Linux command-line architecture বোঝার সবচেয়ে গুরুত্বপূর্ণ mental model।
১০. ls command-এর complete journey
ধাপে ধাপে দেখি।
Step 1 — User
User keyboard থেকে লিখল:
ls
Step 2 — Terminal
Terminal input গ্রহণ করল।
Step 3 — Shell
Command shell-এর কাছে গেল।
Step 4 — Shell interpretation
Shell বুঝল এটি ls command।
Step 5 — ls program
ls executable program চালু হলো।
Step 6 — Kernel interaction
ls প্রয়োজনীয় system functionality ব্যবহারের জন্য Kernel-এর সঙ্গে interact করে।
Step 7 — File System / Storage
Kernel filesystem/storage থেকে প্রয়োজনীয় information সংগ্রহ করে।
Step 8 — Result
Result আবার ফিরে আসে:
Kernel
↓
ls
↓
Shell
↓
Terminal
↓
User
শেষে Terminal screen-এ files এবং directories-এর list দেখা যায়।
১১. Kernel কী করে?
এখন প্রশ্ন:
Kernel কেন দরকার?
Computer-এর Hardware-এর মধ্যে রয়েছে:
- CPU
- RAM
- SSD/HDD
- Network devices
- Keyboard
- Mouse
- Display
এই Hardware resources সরাসরি সাধারণ user application পরিচালনা করে না।
এখানে Linux Kernel গুরুত্বপূর্ণ ভূমিকা পালন করে।
Conceptually:
USER
│
▼
User-space Software
│
▼
Linux Kernel
│
▼
Hardware
Kernel system-এর resources এবং hardware-এর সঙ্গে কাজ করে।
১২. User Space এবং Kernel Space
Linux architecture বোঝার জন্য User Space এবং Kernel Space-এর distinction গুরুত্বপূর্ণ।
┌──────────────────────────────┐
│ USER SPACE │
│ │
│ Applications │
│ Terminal │
│ Shell │
│ GNU Coreutils │
│ Libraries │
│ Other Utilities │
│ │
├──────────────────────────────┤
│ KERNEL SPACE │
│ │
│ Linux Kernel │
│ Process Management │
│ Memory Management │
│ File Systems │
│ Device Management │
│ │
├──────────────────────────────┤
│ HARDWARE │
│ │
│ CPU │ RAM │ Storage │ Devices│
└──────────────────────────────┘
User-space-এর program প্রয়োজন অনুযায়ী Kernel-এর services ব্যবহার করে।
১৩. Desktop Environment কেন দরকার?
এখন আরেকটি গুরুত্বপূর্ণ প্রশ্ন:
Terminal কোথা থেকে পেলাম?
Operating system install করার পর আমরা যে graphical desktop দেখি—windows, menus, file manager, panels, graphical applications ইত্যাদি—এসবের বড় অংশ Desktop Environment-এর মাধ্যমে পাওয়া যায়।
একটি Desktop Environment-এর মধ্যে থাকতে পারে:
- GUI
- Window Management
- File Manager
- Terminal
- Panels
- Menus
- Desktop tools
১৪. GNOME এবং KDE Plasma
Linux ecosystem-এ একাধিক Desktop Environment ব্যবহার করা যায়।
দুটি পরিচিত উদাহরণ:
GNOME
GNOME
├── GNOME Terminal
├── File Manager
├── GUI
└── Window Management
KDE Plasma
KDE Plasma
├── Konsole
├── File Manager
├── GUI
└── Window Management
অর্থাৎ:
Desktop Environment
│
┌────┴────┐
▼ ▼
GNOME KDE Plasma
│ │
Terminal Konsole
এখানে Desktop Environment পরিবর্তন করলেও underlying Linux Kernel একই থাকতে পারে।
১৫. পুরো Linux Architecture একসঙ্গে
এখন সবগুলো concept এক জায়গায় রাখলে:
USER
│
▼
┌──────────────────────┐
│ DESKTOP ENVIRONMENT │
│ GNOME / KDE │
└──────────┬───────────┘
│
▼
┌──────────────────────┐
│ TERMINAL │
│ GNOME Terminal │
│ Konsole │
└──────────┬───────────┘
│
▼
┌──────────────────────┐
│ SHELL │
│ Bash / Zsh / sh │
└──────────┬───────────┘
│
▼
┌──────────────────────┐
│ GNU COREUTILS │
│ ls / cp / rm / cat │
└──────────┬───────────┘
│
▼
┌──────────────────────┐
│ LINUX KERNEL │
│ Process / Memory / │
│ Filesystem / Devices │
└──────────┬───────────┘
│
▼
┌──────────────────────┐
│ HARDWARE │
│ CPU / RAM / Storage │
└──────────────────────┘
সবচেয়ে গুরুত্বপূর্ণ mental model:
User
↓
Terminal
↓
Shell
↓
Utility
↓
Kernel
↓
Hardware / Storage
↓
Result
১৬. Final Takeaway
Linux-এর command line বাইরে থেকে খুব simple মনে হয়।
তুমি শুধু লিখছো:
ls
কিন্তু এর পিছনে কাজ করছে একাধিক software layer:
User
↓
Terminal
↓
Shell
↓
GNU Utility
↓
Kernel
↓
Hardware / File System
↓
Result
আর Linux distribution-এর বড় picture:
Linux Distribution
│
├── Linux Kernel
├── GNU / User-space Tools
├── Libraries
├── Package Manager
├── System Services
├── Desktop Environment
└── Applications
এই relationship-গুলো পরিষ্কারভাবে বুঝে ফেলতে পারলে Linux command line, filesystem, processes এবং পরবর্তী Docker-related concepts শেখার foundation অনেক শক্ত হয়ে যায়।





Top comments (0)