8 min read
Day 02: Linux File System & Commands (Hands-on) লিনাক্স ফাইল সিস্টেম ও ব্যাসিক কমান্ডস

লিনাক্স ফাইল সিস্টেম কি? (What is Linux File System?)

উইন্ডোজের যেমন C: ড্রাইভ থাকে, লিনাক্সে সবকিছু শুরু হয় Root (/) থেকে। লিনাক্স ফাইল সিস্টেম হলো একটি হায়ারার্কিকাল (Hierarchical) কাঠামো যেখানে ফাইল, ফোল্ডার, এমনকি হার্ডওয়্যার ডিভাইসও একটি ট্রি-এর মতো সাজানো থাকে।

Linux File System

লিনাক্স ডিরেক্টরি হায়ারার্কি (Hierarchy Overview)

/
├── bin     (Essential binary commands)
├── boot    (Static files of the boot loader)
├── dev     (Device files like hard drives, USB)
├── etc     (System configuration files)
├── home    (User personal directories)
├── lib     (Essential shared libraries)
├── opt     (Optional add-on software packages)
├── root    (Root user's home directory)
├── tmp     (Temporary files)
├── usr     (User binaries and read-only data)
└── var     (Variable files: logs, mail, database)

১. ব্যাসিক নেভিগেশন কমান্ডস (Navigation Commands)

টার্মিনালে চলাফেরা করার জন্য এই কমান্ডগুলো সবার আগে শিখতে হবে:

কমান্ডকাজউদাহরণ
pwdবর্তমান লোকেশন দেখা (Print Working Directory)pwd
lsফাইলের লিস্ট দেখাls or ls -l (ডিটেইল লিস্ট)
cdডিরেক্টরি পরিবর্তন করাcd /etc
cd ~সরাসরি নিজের হোম ডিরেক্টরিতে ফিরে যাওয়াcd ~
mkdirনতুন ফোল্ডার তৈরি করাmkdir test_folder
touchনতুন খালি ফাইল তৈরি করাtouch file.txt
rmফাইল ডিলিট করাrm file.txt
rmdirখালি ফোল্ডার ডিলিট করাrmdir test_folder
rm -rfফোল্ডার এবং তার ভেতরের সব ফাইল ডিলিট করাrm -rf data

২. ফাইল দেখা ও এডিট করা (Viewing & Editing Files)

ফাইলের ভেতরের কন্টেন্ট দেখার জন্য কয়েকটি জনপ্রিয় কমান্ড:

  • cat: ছোট কোনো ফাইলের সব লেখা একবারে দেখতে।
    • cat /etc/os-release
  • less: বড় ফাইল স্ক্রল করে দেখার জন্য (বড় লগের ক্ষেত্রে উপকারী)।
    • less /var/log/syslog
  • head / tail: ফাইলের প্রথম ১০ লাইন বা শেষ ১০ লাইন দেখতে।
    • tail -n 20 error.log (শেষ ২০ লাইন দেখাবে)
  • vi / nano: ফাইল এডিট করার জন্য।
    • vi testfile.txt (Vi এডিটরে ওপেন হবে)

৩. ইউজার ও গ্রুপ ম্যানেজমেন্ট (Users & Groups)

ডেভঅপস ইঞ্জিনিয়ার হিসেবে আপনাকে প্রায়ই নতুন ইউজার তৈরি করতে হবে এবং তাদের এক্সেস কন্ট্রোল করতে হবে।

ইউজার তৈরি ও পাসওয়ার্ড সেট করা:

sudo adduser user1    # user1 নামে নতুন ইউজার তৈরি
sudo passwd user1     # পাসওয়ার্ড সেট বা পরিবর্তন

ইউজার ডিলিট করা:

userdel user1         # ইউজার ডিলেট হবে কিন্তু হোম ফোল্ডার থাকবে
userdel -r user1      # ইউজার এবং তার সব ডেটা ডিলিট হবে

Sudo এক্সেস দেওয়া (Power User):

কোনো ইউজারকে অ্যাডমিন পাওয়ার দিতে চাইলে:

sudo usermod -aG sudo user1  # Ubuntu/Debian ভিত্তিক সিস্টেমে

এরপর লগআউট ছাড়াই গ্রুপ আপডেট করতে: newgrp sudo


৪. ফাইল পারমিশন ও ওনারশিপ (Permissions & Ownership)

লিনাক্সে তিন ধরনের মানুষের জন্য তিন ধরনের পারমিশন থাকে: Owner, Group, Others

ls -l দিয়ে পারমিশন বোঝা:

-rwxr-xr--

  • r = Read (4)
  • w = Write (2)
  • x = Execute (1)
সেকশনপারমিশনকার জন্য?
১-৩ ক্যারেক্টারrwxOwner (ফাইল যে তৈরি করেছে)
৪-৬ ক্যারেক্টারr-xGroup (একটি নির্দিষ্ট টিমের জন্য)
৭-৯ ক্যারেক্টারr--Others (পাবলিক বা অন্য সবাই)

পারমিশন পরিবর্তন করা (chmod):

  • Symbolic Mode: chmod u+x script.sh (ওনারকে এক্সিকিউট পারমিশন দেওয়া)
  • Numeric Mode: chmod 755 script.sh (Owner: rwx, Group: rx, Others: rx)

ওনারশিপ পরিবর্তন করা (chown):

sudo chown user:group file.txt
sudo chown devops:team1 sample.txt

৫. নেটওয়ার্কিং ও কানেক্টিভিটি (Networking & Connectivity)

ডেভঅপস ইঞ্জিনিয়ারদের প্রায়ই চেক করতে হয় সার্ভার বা অ্যাপ্লিকেশন ঠিকমতো কানেক্টেড কি না।

কমান্ডকাজউদাহরণ
pingহোস্ট সার্ভার বা আইপি কানেক্টেড কি না দেখাping google.com
curl / wgetইউআরএল থেকে কন্টেন্ট বা ফাইল ডাউনলোড করাcurl -I https://google.com
nslookup / digডিএনএস (DNS) রেকর্ড চেক করাdig example.com
ip addrনিজের সার্ভারের আইপি অ্যাড্রেস দেখাip addr show
telnet / ncনির্দিষ্ট পোর্ট খোলা কি না তা চেক করাnc -zv 127.0.0.1 80
ss / netstatলিসেনিং পোর্ট এবং কানেকশন দেখাss -tuln

৬. সার্ভিস ও প্রসেস ম্যানেজমেন্ট (Service & Process Management)

সার্ভারে কোনো অ্যাপ্লিকেশন চালানো বা বন্ধ করার জন্য:

  • systemctl: সার্ভিস ম্যানেজ করা।
    • sudo systemctl start nginx (স্টার্ট করা)
    • sudo systemctl stop nginx (বন্ধ করা)
    • sudo systemctl status nginx (অবস্থা দেখা)
    • sudo systemctl restart nginx (রিস্টার্ট করা)
  • journalctl: সিস্টেম লোগ দেখা।
    • journalctl -u nginx (নির্দিষ্ট সার্ভিসের লগ)
  • ps aux: বর্তমানে রানিং সব প্রসেস একবারে দেখতে।
  • top / htop: রিয়েল-টাইম সিপিইউ ও র‍্যাম ইউসেজ মনিটর করা।
  • kill -9 [PID]: কোনো হ্যাং হওয়া প্রসেস জোরপূর্বক বন্ধ করে দেওয়া।
  • free -m: মেমোরি (RAM) কতটুকু ফাঁকা আছে তা মেগাবাইটে দেখা।

৭. রিমোট এক্সেস ও ফাইল ট্রান্সফার (Remote Access & SCP)

এক সার্ভার থেকে অন্য সার্ভারে কাজ করার জন্য এই কমান্ডগুলো অপরিহার্য:

  • ssh user@ip: রিমোট সার্ভারে সিকিউর লগইন করা।
  • scp file.txt user@ip:/path: এক কম্পিউটার থেকে অন্য কম্পিউটারে ফাইল কপি করা।
  • rsync: অনেক বড় ফোল্ডার বা ফাইল সিঙ্ক (Sync) করার জন্য।
  • ssh-keygen: SSH কি তৈরি করা (পাসওয়ার্ড ছাড়া লগইনের জন্য)।

৮. টেক্সট প্রসেসিং ও অটোমেশন (Text Processing & Automation)

লগ ফাইল থেকে তথ্য বের করতে এই কমান্ডগুলো জাদুর মতো কাজ করে:

  • grep: নির্দিষ্ট প্যাটার্ন বা টেক্সট খুঁজে বের করা।
    • grep "ERROR" app.log
  • sed: ফাইলে থাকা টেক্সট অটোমেটিক খুঁজে পরিবর্তন করা।
    • sed -i 's/old-ip/new-ip/g' config.yaml
  • awk: ফাইলের নির্দিষ্ট কলাম থেকে ডাটা বের করা।
    • awk '{print $1}' access.log (প্রথম কলামটি প্রিন্ট করবে)
  • cut: নির্দিষ্ট সিলেক্টর দিয়ে টেক্সট কাটা।
    • echo "dev:ops:team" | cut -d':' -f2 (আউটপুট: ops)

৯. ইনপুট/আউটপুট অপারেটর (Piping & Redirection)

লিনাক্সের আসল শক্তি হলো আউটপুট এক কমান্ড থেকে অন্য কমান্ডে পাঠানো।

  1. | (Pipe): এক কমান্ডের আউটপুট অন্য কমান্ডের ইনপুট হিসেবে পাঠানো।
    • ls -l | grep ".log" (শুধু লোগ ফাইলগুলো দেখাবে)
  2. > (Redirect): আউটপুট একটি ফাইলে সেভ করা (আগের ডেটা মুছে যাবে)।
    • echo "Hello" > test.txt
  3. >> (Append): আউটপুট ফাইলের শেষে যোগ করা (আগের ডেটা থাকবে)।
    • date >> logs.txt

১০. সিস্টেম ইনফরমেশন ও প্যাকেজ ম্যানেজমেন্ট (System Info & Packages)

  • uname -a: কার্নেল ভার্সন এবং সিস্টেমের তথ্য।
  • df -h: ডিস্ক স্পেস কতটুকু ফাঁকা আছে দেখা।
  • history: আগে রান করা সব কমান্ডের লিস্ট দেখা।
  • apt (Debian/Ubuntu) / yum (CentOS/RHEL): প্যাকেজ ইনস্টল করা।
    • sudo apt update && sudo apt install docker.io
  • tar -czvf: ফাইল বা ফোল্ডার কম্প্রেস করা।
    • tar -czvf backup.tar.gz /var/www/html

১১. বিবিধ প্রয়োজনীয় কমান্ড (Miscellaneous Daily Utilities)

কিছু ছোট কিন্তু অত্যন্ত দরকারী কমান্ড যা প্রতিদিন কাজে লাগে:

  • du -sh *: বর্তমান ফোল্ডারের প্রতিটি ফাইল বা ফোল্ডার কতটুকু জায়গা দখল করে আছে তা দেখা।
  • lsof -i :8080: পোর্ট ৮০৮০ কোন প্রসেস ব্যবহার করছে তা দেখা।
  • watch -n 1 "date": প্রতি ১ সেকেন্ড পর পর একটি কমান্ড অটোমেটিক রান করা।
  • env / printenv: সিস্টেমের সব এনভায়রনমেন্ট ভ্যারিয়েবল দেখা।
  • alias: বড় কোনো কমান্ডের শর্টকাট তৈরি করা।
    • alias ll='ls -la'
  • history: আগে রান করা সব কমান্ডের লিস্ট দেখা।
  • whoami: বর্তমানে কোন ইউজার হিসেবে লগইন করা আছেন তা দেখা।

পাসওয়ার্ড ছাড়া Sudo ব্যবহার:

অটোমেশন স্ক্রিপ্টের জন্য পাসওয়ার্ড প্রম্পট ছাড়া sudo রান করতে sudo visudo কমান্ড দিয়ে নিচের লাইনটি যোগ করুন: username ALL=(ALL) NOPASSWD: ALL


সারাংশ (Summary Checklist)

কমান্ডকাজক্যাটাগরি
ls -lপারমিশন দেখাFile System
chmod 755পারমিশন পরিবর্তনPermissions
systemctlসার্ভিস ম্যানেজমেন্টService
curl -Iহেডার চেক করাConnectivity
ps auxপ্রসেস লিস্ট দেখাMonitoring
grepটেক্সট সার্চ করাSearch
sshরিমোট লগইনRemote
sed / awkটেক্সট প্রসেসিংAutomation