রোডম্যাপ

শূন্য থেকে লিনাক্স শেখার উপায়: প্রথম কমান্ড থেকে সার্ভার প্রশাসন পর্যন্ত পরিকল্পনা

হালনাগাদ: · Skillaria.Top

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

শূন্য থেকে লিনাক্স শেখা মনে হয় তার চেয়ে সহজ, যদি সঠিক ক্রমে চলেন এবং সঙ্গে সঙ্গে অনুশীলন করেন। নতুনদের সবচেয়ে বড় ভুল হলো কমান্ড নিয়ে পড়ে যাওয়া কিন্তু না লেখা, অথবা প্রসেস ও অধিকার কী তা না বুঝে Docker ও Kubernetes-এ লাফ দেওয়া। নিচে নয়টি ধাপের পরিকল্পনা: কী শিখবেন, কী অনুশীলন করবেন এবং কীভাবে বুঝবেন যে ধাপটি শেষ হয়েছে।

সময়ের হিসাব: প্রতিদিন এক ঘণ্টা শিখলে দুই থেকে চার মাস, তবে সবার গতি আলাদা। গতির চেয়ে বেশি গুরুত্বপূর্ণ এটি যে প্রতিটি ধাপের পর আপনি নিজের হাতে কিছু করতে পারেন।

ধাপ ০. পরিবেশ তৈরি করুন

লিনাক্স শেখা হয় লিনাক্সে। বিকল্পগুলো, সহজ থেকে বাস্তবসম্মত পর্যন্ত:

  • Windows-এ WSL2 — কয়েক মিনিটে Ubuntu টার্মিনাল। কমান্ড ও স্ক্রিপ্টের জন্য ভালো, কিন্তু systemd ও নেটওয়ার্ক সার্ভারের মতো আচরণ করে না।
  • ভার্চুয়াল মেশিন (VirtualBox, VMware, Mac-এ UTM) এবং Ubuntu Server বা Debian। এখানে ভেঙে ফেললেও ক্ষতি নেই, স্ন্যাপশটে ফিরে যাওয়া যায়।
  • সস্তা VPS কোনো ক্লাউড প্রদানকারী থেকে। পাবলিক IP-সহ আসল সার্ভারই নেটওয়ার্ক ও নিরাপত্তার ধাপের সেরা মাঠ।

শুরু করার ডিস্ট্রিবিউশন হলো Ubuntu Server বা Debian: এদের ডকুমেন্টেশন ও উত্তর সবচেয়ে বেশি। গ্রাফিক্যাল ইন্টারফেস দরকার নেই: সার্ভার টার্মিনালে চালানো হয়, এই অভ্যাস প্রথম দিন থেকেই শুরু হোক।

ধাপ ১. টার্মিনাল ও ফাইল সিস্টেম

লক্ষ্য: মাউস ছাড়া সিস্টেমে আত্মবিশ্বাসের সঙ্গে চলাফেরা করা এবং ফাইল নিয়ে কাজ করা।

  • নেভিগেশন: pwd, ls -la, cd, অ্যাবসোলিউট ও রিলেটিভ পাথ, ~, . ও ..।
  • ফাইল: cp, mv, rm, mkdir -p, touch, দেখা cat, less, head, tail -f দিয়ে।
  • খোঁজা: find, which, locate।
  • সাহায্য: man, --help। man পড়তে পারা এমন একটি দক্ষতা যা সারাজীবন কাজে লাগে।
  • ডিরেক্টরি কাঠামো: /etc, /var/log, /home, /usr, /proc, /dev-এ কী থাকে; মাউন্ট ও inode কী।
  • টার্মিনালের টেক্সট এডিটর: শুরুতে nano, তারপর vim-এর মৌলিক কমান্ড — প্রায় প্রতিটি সার্ভারে এটি থাকে।

অনুশীলন: /etc-এর ভেতরে গত এক সপ্তাহে পরিবর্তিত সব .conf ফাইল খুঁজুন (find /etc -name "*.conf" -mtime -7)। /etc/os-release খুলে আপনার সিস্টেমের সংস্করণ জানুন। /var/log-এ সিস্টেম কী লিখছে দেখুন।

ধাপ ২. ব্যবহারকারী, গ্রুপ ও অধিকার

অধিকার লিনাক্সের নিরাপত্তার ভিত্তি এবং "Permission denied" ত্রুটির অর্ধেকের উৎস।

  • ls -l-এর আউটপুট পড়া: ধরন, অধিকার, মালিক, গ্রুপ।
  • chmod প্রতীক ও সংখ্যা রূপে, chown, umask।
  • বিশেষ বিট: SUID, SGID, sticky bit — এবং কেন /tmp-এ সবাই লিখতে পারে কিন্তু অন্যের ফাইল মুছতে পারে না।
  • ব্যবহারকারী ও গ্রুপ: useradd, usermod -aG, passwd, ফাইল /etc/passwd, /etc/shadow, /etc/group।
  • sudo, sudoers-এর নিয়ম এবং visudo দিয়ে সম্পাদনা।

অনুশীলন: দুজন ব্যবহারকারী ও একটি শেয়ার্ড প্রজেক্ট ডিরেক্টরি বানান, যেখানে দুজনেই ফাইল তৈরি করতে পারবে, আর বাকিরা কিছুই দেখতে পাবে না। ইঙ্গিত: একটি গ্রুপ, chmod 2770 এবং গ্রুপ উত্তরাধিকারের জন্য SGID।

ধাপ ৩. Bash ও টেক্সট ইউটিলিটি

অ্যাডমিনিস্ট্রেশন অনেকটাই টেক্সট প্রসেসিং: লগ, কনফিগ ও কমান্ডের আউটপুট। এই ধাপে টার্মিনাল কমান্ডের সেট থেকে কাজের যন্ত্রে পরিণত হয়।

  • রিডাইরেকশন ও পাইপলাইন: >, >>, 2>&1, |, xargs।
  • ফিল্টার: grep (রেগুলার এক্সপ্রেশনসহ), sort, uniq -c, wc, cut, sed, awk।
  • কনসোল থেকে JSON ও HTTP: curl ও jq।
  • স্ক্রিপ্ট: shebang, ভেরিয়েবল, উদ্ধৃতি, if ও [[ ]] শর্ত, লুপ, ফাংশন, এক্সিট কোড, set -euo pipefail।

অনুশীলন: এক লাইনের কমান্ড দিয়ে ওয়েব সার্ভারের লগে সবচেয়ে বেশি অনুরোধ পাঠানো দশটি IP-র সংখ্যা বের করুন:

awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head

তারপর একটি ব্যাকআপ স্ক্রিপ্ট লিখুন, যা একটি ডিরেক্টরিকে তারিখযুক্ত নামে আর্কাইভ করে, সাত দিনের পুরোনো আর্কাইভ মোছে এবং ত্রুটি হলে শূন্য-নয় এক্সিট কোড দেয়।

ধাপ ৪. প্যাকেজ, পরিবেশ ও শিডিউলিং

  • প্যাকেজ ম্যানেজার: apt update, apt install, apt remove, apt search, dpkg -l। RHEL-ভিত্তিক সিস্টেমে dnf। রিপোজিটরি কী এবং স্বাক্ষর-কী কেন দরকার তা বুঝুন।
  • এনভায়রনমেন্ট ভেরিয়েবল: env, export, PATH, ফাইল ~/.bashrc, ~/.profile, /etc/environment — কোনটি কখন পড়া হয়।
  • শিডিউলিং: crontab -e, পাঁচ ঘরের সিনট্যাক্স, এবং কেন টার্মিনালে যা চলে, cron-এ তা "চলে না" (ভিন্ন পরিবেশ ও PATH)।

অনুশীলন: রিপোজিটরি থেকে nginx ইনস্টল করুন, আপনার স্ক্রিপ্ট ডিরেক্টরিকে PATH-এ যোগ করুন, এবং ধাপ ৩-এর ব্যাকআপ স্ক্রিপ্টটি cron দিয়ে প্রতি রাতে চালান, আউটপুট লগে লিখে।

ধাপ ৫. প্রসেস ও systemd

এখানে আপনি বুঝতে শুরু করেন সিস্টেমের ভেতরে আসলে কী ঘটছে।

  • প্রসেস: ps aux, top/htop, PID ও PPID, অবস্থা, অগ্রাধিকার (nice), সিগন্যাল ও kill।
  • লোড: load average, মেমরি ও swap (free -h), D অবস্থায় প্রসেসের অর্থ।
  • ডিবাগিং: lsof — প্রসেস কোন ফাইল ও পোর্ট খুলেছে; strace — প্রসেস কোন system call করছে এবং কোথায় আটকে আছে।
  • systemd: unit, systemctl status/start/enable, Restart=on-failure-সহ নিজের unit ফাইল, cron-এর বদলে timer।
  • লগ: journalctl -u, -f, -b, -p err, রোটেশন, rsyslog; sysstat দিয়ে পারফরম্যান্স পরিসংখ্যান (sar, iostat)।

অনুশীলন: একটি ছোট অ্যাপ (অন্তত python3 -m http.server) আলাদা ব্যবহারকারীর অধীনে systemd সার্ভিস বানান, kill -9 দিয়ে প্রসেস মারুন এবং নিশ্চিত হোন systemd সেটি আবার চালু করেছে। জার্নালে পুনরায় চালুর লগ খুঁজে বের করুন।

ধাপ ৬. ডিস্ক, LVM ও RAID

  • ডিভাইস ও পার্টিশন: lsblk, blkid, fdisk বা parted, ফাইল সিস্টেম ext4 ও XFS, mkfs।
  • মাউন্ট: mount, UUID দিয়ে /etc/fstab, mount -a দিয়ে যাচাই।
  • জায়গা: df -h, df -i, du -sh, কী ডিস্ক খাচ্ছে তা খোঁজা।
  • LVM: ফিজিক্যাল ভলিউম, ভলিউম গ্রুপ, লজিক্যাল ভলিউম এবং সার্ভিস বন্ধ না করে পার্টিশন বড় করা।
  • mdadm দিয়ে সফটওয়্যার RAID — স্তর 0, 1, 5, 10 বোঝা এবং RAID যে ব্যাকআপ নয় তা জানা।

অনুশীলন: ভার্চুয়াল মেশিনে দুটি ডিস্ক যোগ করুন, তার ওপর LVM বানান, একটি ভলিউম তৈরি করে fstab দিয়ে মাউন্ট করুন, তারপর lvextend -r দিয়ে বড় করুন।

ধাপ ৭. নেটওয়ার্ক

  • ডায়াগনসিসের জন্য যথেষ্ট পরিমাণে TCP/IP মডেল: IP, সাবনেট মাস্ক, গেটওয়ে, পোর্ট, TCP ও UDP।
  • কমান্ড: ip a, ip r, ss -tlnp, ping, traceroute/mtr, curl -v, nc।
  • DNS: রেজোলিউশন কীভাবে চলে, /etc/hosts, /etc/resolv.conf, dig, resolvectl।
  • আপনার ডিস্ট্রিবিউশনে নেটওয়ার্ক কনফিগ (Ubuntu-তে netplan, অন্যগুলোতে NetworkManager)।
  • অন্য সব ব্যর্থ হলে tcpdump দিয়ে ট্রাফিক ক্যাপচার।

অনুশীলন: আপনার সার্ভারের প্রতিটি খোলা পোর্ট কোন প্রসেস শুনছে তা বের করুন। বুঝুন কেন 127.0.0.1-এ শোনা সার্ভিস বাইরে থেকে পৌঁছায় না, এবং সেটি ঠিক করুন।

ধাপ ৮. দূরবর্তী কাজ: SSH ও ফাইল স্থানান্তর

  • SSH: কী (ssh-keygen -t ed25519, ssh-copy-id), ~/.ssh/config ফাইল, ssh-agent, পোর্ট ফরওয়ার্ডিং (ssh -L), ProxyJump-এ বাস্টন।
  • কপি: scp এবং rsync -avz --delete — সিঙ্ক্রোনাইজেশনে rsync কেন ভালো।
  • নেটওয়ার্ক ফাইল সিস্টেম: লিনাক্স সার্ভারের মধ্যে NFS, Windows-এর সঙ্গে বিনিময়ের জন্য SMB (Samba)।

অনুশীলন: VPS-এ শুধু কী দিয়ে লগইন সেটআপ করুন, ~/.ssh/config-এ ছোট নামে বর্ণনা করুন, এবং rsync দিয়ে একটি ডিরেক্টরির প্রতিদিনের সিঙ্ক সার্ভারে চালু করুন।

ধাপ ৯. সার্ভার নিরাপত্তা

  • ফায়ারওয়াল: "অনুমোদিত নয় এমন সবকিছু বন্ধ" নীতি, সহজ ক্ষেত্রে ufw, আর ভেতরের কাজ বুঝতে nftables।
  • fail2ban: কয়েকবার ব্যর্থ লগইনের পর IP ব্লক করা, fail2ban-client status sshd দিয়ে যাচাই।
  • sshd কনফিগ: পাসওয়ার্ড ও root লগইন নিষিদ্ধ করা।
  • নিরাপত্তা আপডেট ও এর স্বয়ংক্রিয় ইনস্টল (Debian ও Ubuntu-তে unattended-upgrades)।
  • GPG: প্যাকেজ ও ফাইলের স্বাক্ষর যাচাই, ব্যাকআপ এনক্রিপ্ট করা।

অনুশীলন: ফায়ারওয়ালে শুধু ২২, ৮০ ও ৪৪৩ পোর্ট খুলুন, fail2ban চালু করুন, এবং এক দিন পর এর স্ট্যাটাস দেখুন কতগুলো ঠিকানা ইতিমধ্যে ব্লক হয়েছে।

চূড়ান্ত প্রকল্প: পুরো সার্ভার গড়ুন

লিনাক্স সত্যিই শিখেছেন কি না, তার সেরা পরীক্ষা হলো কোনো সাহায্য ছাড়া শূন্য থেকে সার্ভার তৈরি করা:

  1. নতুন VPS, নিজের sudo-সহ ব্যবহারকারী, SSH কী দিয়ে লগইন, পাসওয়ার্ড ও root বন্ধ।
  2. ফায়ারওয়াল ও fail2ban, স্বয়ংক্রিয় নিরাপত্তা আপডেট।
  3. ওয়েব সার্ভার ও অ্যাপ্লিকেশন systemd সার্ভিস হিসেবে, স্বয়ংক্রিয় পুনরায় চালুসহ।
  4. ডেটার জন্য আলাদা ডিস্ক বা ভলিউম, fstab দিয়ে মাউন্ট।
  5. নির্ধারিত সময়ে ব্যাকআপ (cron বা systemd timer) rsync দিয়ে অন্য মেশিনে, লগ ও পুনরুদ্ধার পরীক্ষাসহ।
  6. সংক্ষিপ্ত নির্দেশিকা: সবকিছু আবার কীভাবে তৈরি করতে হয়।

এই তালিকা পার করে প্রতিটি ধাপ ব্যাখ্যা করতে পারলে সিস্টেম অ্যাডমিন বা DevOps ইঞ্জিনিয়ার হিসেবে কাজের ভিত্তি আপনার আছে। এরপর স্বাভাবিক পরবর্তী ধাপ কন্টেইনার, কনফিগারেশন অটোমেশন ও মনিটরিং।

আরও কার্যকরভাবে শেখার উপায়

  • কমান্ড নিজে টাইপ করুন। প্রবন্ধ থেকে কপি করলে মনে থাকে না; টাইপ করা ও ভুল করাই মনে থাকে।
  • ভাঙুন, তারপর ঠিক করুন। ভার্চুয়াল মেশিনে fstab বা ~/.ssh-এর অধিকার নষ্ট করে সিস্টেম ফিরিয়ে আনুন। ইন্টারভিউয়ে এমন অভিজ্ঞতার মূল্য আছে।
  • নিজের নোট রাখুন। উদাহরণসহ নিজের কমান্ড-নোট যেকোনো অন্যের চিট শিটের চেয়ে বেশি কাজে আসে।
  • লগ পড়ুন। লিনাক্সের প্রায় প্রতিটি সমস্যা লগে ব্যাখ্যা করা থাকে — প্রথমে সেখানে তাকানোর অভ্যাস করুন।

সংক্ষেপে

শূন্য থেকে লিনাক্স শেখার উত্তর হলো স্তর ধরে এগোনো: টার্মিনাল ও ফাইল, অধিকার, Bash, প্যাকেজ, প্রসেস ও systemd, ডিস্ক, নেটওয়ার্ক, SSH, তারপর নিরাপত্তা — এবং প্রতিটি ধাপে নিজের পরিবেশে একটি বাস্তব কাজ সমাধান করা। চূড়ান্ত লক্ষ্য হলো নিজে একটি সার্ভার চালু ও সুরক্ষিত করে তাতে একটি সার্ভিস চালানো। প্রাথমিক পাঠ থেকে চূড়ান্ত প্রকল্প পর্যন্ত এই পথেই লিনাক্স কোর্সটি সাজানো হয়েছে।

সাধারণ প্রশ্ন

শূন্য থেকে লিনাক্স শিখতে কতদিন লাগে?

প্রতিদিন প্রায় এক ঘণ্টা করে কয়েক মাসে সার্ভারের সঙ্গে কাজ করার মৌলিক দক্ষতা সাধারণত অর্জিত হয়। আত্মবিশ্বাস আসে বাস্তব কাজে অনুশীলন থেকে, তাই মোট ঘণ্টার চেয়ে নিয়মিততা বেশি জরুরি।

লিনাক্স শিখতে কি প্রোগ্রামিং জানা লাগে?

না, এ ছাড়াই শুরু করা যায়। তবে Bash স্ক্রিপ্টের ধাপে আপনি আসলে প্রোগ্রামিং শুরু করে দেবেন, আর সেই দক্ষতা পরে অটোমেশনে কাজে লাগবে।

Windows-এ থেকে কি লিনাক্স শেখা যায়?

হ্যাঁ, WSL2 বা ভার্চুয়াল মেশিনের মাধ্যমে। systemd, ডিস্ক ও নেটওয়ার্কের বিষয়ের জন্য পূর্ণ ভার্চুয়াল মেশিন বা VPS ব্যবহার করা ভালো।

শেখার জন্য কম্পিউটারে লিনাক্সকে মূল সিস্টেম বানানো কি দরকার?

উপকারী, তবে বাধ্যতামূলক নয়। প্রশাসনের জন্য গুরুত্বপূর্ণ হলো টার্মিনালে সার্ভার-লিনাক্সের সঙ্গে কাজ করা, গ্রাফিক্যাল ডেস্কটপ ব্যবহার নয়।

নতুনদের জন্য কোন ডিস্ট্রিবিউশন ভালো?

Ubuntu Server বা Debian: এদের ডকুমেন্টেশন প্রচুর, এবং দক্ষতা সহজেই অন্য ডিস্ট্রিবিউশনে নেওয়া যায়। RHEL-ভিত্তিক সিস্টেমের প্রধান পার্থক্য হলো প্যাকেজ ম্যানেজার dnf।

ভিডিওতে বিষয়টি শিখুন

“Linux: с нуля до уверенного администрирования” কোর্সে বিষয়টি অনুশীলনসহ বিস্তারিত শেখানো হয়েছে।

কোর্সে যান