تسلط بر خط فرمان لینوکس: راهنمای عملی برای متخصصان شبکه، امنیت و DevOps

مقدمه
در دنیای امروز، تسلط بر خط فرمان لینوکس دیگر یک مهارت اختیاری نیست؛ بلکه به عنوان سنگ بنای فعالیت های حرفه ای در حوزه های شبکه، امنیت سایبری، DevOps و مدیریت سرور شناخته می شود. این مقاله با هدف ارائه یک مرجع جامع و عملی برای دانشجویان سطح متوسط تا پیشرفته تدوین شده است. در هر فصل، پس از معرفی دستورات پایه و ساختار کلی، مثال های واقعی و تمرین های کوتاه ارائه می شود تا یادگیری صرفا تئوریک نباشد و توانایی به کارگیری در شرایط واقعی را نیز تقویت کند.
فهرست مطالب
- فصل اول: مبانی شل و مدیریت پوسته
- فصل دوم: مدیریت فایل و دایرکتوری
- فصل سوم: مجوزها، مالکیت و امنیت فایل
- فصل چهارم: پردازش متن و ابزارهای خط لوله
- فصل پنجم: مدیریت بسته و به روزرسانی
- فصل ششم: شبکه و عیب یابی ارتباطات
- فصل هفتم: سرویس ها و مدیریت سیستم
- فصل هشتم: اسکریپت نویسی با Bash
- فصل نهم: ابزارهای امنیتی اصلی
- فصل دهم: پیکربندی فایروال و iptables/nftables
فصل اول: مبانی شل و مدیریت پوسته
1.1 ساختار کلی شل
- توضیح تفاوت های اصلی Bash، Zsh و Fish
- فایل های پیکربندی (
~/.bashrc،~/.profile) - نحوه بارگذاری تنظیمات و تفاوت Login vs Non-login Shell
1.2 متغیرها و محیط
- تعریف و نمایش متغیر (
VAR=value،echo $VAR) - متغیرهای محیطی مهم (
PATH،HOME،SHELL) - پایداری متغیر با
exportو ذخیره در فایل های شل
1.3 History و مدیریت دستورات
- فهرست دستورات قبلی (
history) - جستجوی تعاملی در History (
Ctrl+R) - ترفندهای تکرار دستور (
!n،!grep)
تمرین
- متغیر
MYNAMEرا تعریف کرده و مقدارش را در فایل~/.bashrcذخیره کنید. - با استفاده از History، پنجمین دستور قبلی را اجرا کنید.
فصل دوم: مدیریت فایل و دایرکتوری
2.1 فهرست و ناوبری
lsبا گزینه های-l,-a,-h,--color- تغییر دایرکتوری با
cdو برگشت سریع (cd -) - نمایش مسیر جاری با
pwd
2.2 ایجاد، حذف و جابجایی
mkdir -pبرای ایجاد چند لایه پوشهtouchبرای ساخت فایل خالیcpوmvبا گزینه های-r,-i,-v- حذف ایمن با
rm -i, حذف پوشه باrm -rf(مواظب باشید!)
2.3 فشرده سازی و آرشیو
tar czfوtar xzfzipوunzip- تفاوت فرمت های gz, bz2, xz
مثال عملی
bash
mkdir -p ~/backup/{docs,configs,logs}
tar czf ~/backup/docs_$(date +%F).tar.gz ~/Documents
تمرین
- دایرکتوری
projectرا در مسیر خانه بسازید، سه فایل خالی در آن ایجاد کنید، سپس همه را در یک آرشیوtar.bz2فشرده کنید. - آرشیو را در پوشه ی
~/restoreبازکنید.
فصل سوم: مجوزها، مالکیت و امنیت فایل
3.1 ساختار مجوزها
- نمایش مجوزها با
ls -l - مفهوم خواندن، نوشتن و اجرا (r, w, x) برای owner، group و others
3.2 تغییر مالکیت و گروه
- دستور
chown user:group filename - کاربرد
chown -Rبرای دایرکتوری ها
3.3 تنظیم مجوزها با chmod
- مد دهی عددی (
chmod 755 file) - مد نمادی (
chmod u=rwx,g=rx,o= file) - بیت های ویژه: Setuid, Setgid, Sticky bit
نکته امنیتی
فعال کردن Setuid روی فایل های نا آشنا می تواند مسیر نفوذ هکرها را هموار کند.
تمرین
- فایلی بسازید و با
chmod 4711به آن مجوزهای Setuid بدهید. - مالکیت یک دایرکتوری با زیرشاخه ها را به کاربر
aliceواگذار کنید.
فصل چهارم: پردازش متن و ابزارهای خط لوله
4.1 خط لوله (Pipes) و انتقال داده
- مفهوم pipe (
|) برای انتقال خروجی یک دستور به ورودی دستور بعدی - کاربردهای زنجیره ای با
grep,awk,cut
مثال: استخراج آی پی ها از لاگ
bash
cat access.log | grep "Accepted" | awk '{print $NF}' | sort | uniq
4.2 استفاده از grep
grepبرای جستجو در فایل ها- پارامترهای کاربردی:
-i(بدون توجه به حروف بزرگ/کوچک)
-r(جستجوی بازگشتی در پوشه ها)
--color=auto(نمایش رنگی)
4.3 استفاده از cut, awk و sed
cut: برش فیلدها با دلیمتر خاصawk: پردازش خط به خط فایل و استخراج فیلدهای دلخواهsed: ویرایش متن و جایگزینی الگوها (sed 's/old/new/g')
تمرین
- فایلی بسازید که شامل اطلاعات کاربری باشد و با
awkنام همه کاربران را استخراج کنید. - با
sedشماره تلفن ها را با فرمت استاندارد تبدیل کنید.
فصل پنجم: مدیریت بسته و به روزرسانی
5.1 توزیع های Debian/Ubuntu
- نصب بسته با
apt install - حذف با
apt removeوapt purge - به روزرسانی سیستم با:
bash
sudo apt update && sudo apt upgrade -y
5.2 توزیع های RHEL/CentOS
- استفاده از
yumوdnf:
bash
sudo dnf install nginx
5.3 توزیع های Arch و مشتقات
- نصب با
pacman -S، به روزرسانی باpacman -Syu
5.4 بررسی وابستگی ها و فایل های نصبی
dpkg -lوrpm -qaبرای لیست بسته ها- جستجو با
apt-cache searchیاdnf search
تمرین
- بسته
curlرا نصب کرده و نسخه آن را بررسی کنید. - یک بسته را نصب و سپس با
dpkg -Lمسیر فایل های آن را بررسی کنید.
فصل ششم: شبکه و عیب یابی ارتباطات
6.1 بررسی تنظیمات شبکه
ip aبرای مشاهده آدرس های IPip rیاroute -nبرای بررسی روت هاpingبرای تست اتصالtracerouteوmtrبرای مسیر اتصال
6.2 DNS و تست نام دامنه
- بررسی
resolv.conf - استفاده از
digوnslookupبرای تست دامنه ها - شبیه سازی پاسخ های DNS
6.3 ابزارهای مانیتورینگ شبکه
netstat -tulpn(پورت های باز)ssبه جایnetstatدر توزیع های جدیدترnmapبرای اسکن شبکه و کشف میزبان ها
6.4 تست سرعت و اتصال
curl -I website.comبرای بررسی پاسخ سرورwgetبرای دانلود تستی- نصب ابزار
iperf3برای تست پهنای باند بین دو نقطه
تمرین
- پورت باز سرور
google.comرا باnmapبررسی کنید. - از
digبرای دریافت رکوردهای MX یک دامنه استفاده کنید.
فصل هفتم: سرویس ها و مدیریت سیستم
7.1 آشنایی با systemd
بیشتر توزیع های مدرن از systemd برای مدیریت سرویس ها استفاده می کنن.
مشاهده وضعیت سرویس:
bash
systemctl status nginx
فعال سازی سرویس هنگام بوت:
bash
systemctl enable apache2
توقف یا راه اندازی:
bash
systemctl stop ssh
systemctl start mysql
7.3 زمان بندی و cron jobs
ابزاری حیاتی برای اجرای خودکار وظایف دوره ای:
ویرایش کرون کاربر:
bash
crontab -e
مثال: اجرای اسکریپت هر روز ساعت ۲ صبح:
bash
0 2 * * * /home/user/backup.sh
بررسی کرون های فعال:
bash
crontab -l
فصل هشتم: اسکریپت نویسی با Bash
8.1 ساختار کلی یک اسکریپت
هر اسکریپت Bash با #!/bin/bash شروع می شه:
bash
#!/bin/bash
echo "سلام Meysam!"
شرط if:
bash
if [ $NAME == "Meysam" ]; then
echo "مدیر اجرایی!"
fi
حلقه for:
bash
for i in {1..5}; do
echo "مرحله $i"
done
8.3 آرگومان ها و پارامترها
- آرگومان خط فرمان:
$1,$2
بررسی تعداد آرگومان:
bash
if [ $# -lt 1 ]; then
echo "حداقل یک آرگومان لازم است"
fi
8.4 استفاده از توابع
bash
function greet() {
echo "درود، $1!"
}
greet "Meysam"
تمرین
- اسکریپتی بنویس که بعد از بررسی اتصال شبکه، به صورت خودکار سرویس های لازم را راه اندازی کند.
- اسکریپتی بنویس که از هر پوشه پشتیبان بگیره و با نام تاریخ ذخیره کنه.
فصل نهم: ابزارهای امنیتی اصلی
9.1 بررسی امنیت فایل ها با chkrootkit و rkhunter
این ابزارها فایل ها و کتابخانه ها را از نظر وجود rootkit بررسی می کنند:
bash
sudo chkrootkit
sudo rkhunter --check
9.2 اسکن آسیب پذیری با Lynis
ابزار تست امنیتی برای سرورهای لینوکسی:
bash
sudo apt install lynis
sudo lynis audit system
9.3 کنترل دسترسی با AppArmor و SELinux
مثال در Ubuntu:
bash
sudo aa-status
9.4 مانیتورینگ تغییرات فایل با auditd
ابزار مانیتورینگ برای ثبت فعالیت های مشکوک:
bash
sudo auditctl -w /etc/passwd -p wa
9.5 مشاهده لاگ های امنیتی
بررسی auth.log برای تلاش های ورود:
bash
sudo tail -f /var/log/auth.log
تمرین
- ابزار
Lynisرا اجرا کرده و گزارش آن را تحلیل کن. - مسیر
/var/www/htmlرا باauditdمانیتور کن.
فصل دهم: پیکربندی فایروال با iptables و nftables
10.1 مفاهیم پایه فایروال در لینوکس
- فایروال نقش دروازه ی کنترل بسته های ورودی، خروجی و عبوری رو ایفا می کنه.
- هر بسته ی شبکه با مجموعه ای از قوانین مقایسه می شه تا مجاز یا مسدود بشه.
- فایروال های لینوکسی مبتنی بر جدول، زنجیره و قانون هستند.
10.2 iptables: فایروال سنتی اما قدرتمند
ساختار کلی
- Tables: مجموعه قوانین با کاربرد خاص
filter: فیلتر بسته ها
nat: تغییر مسیر آدرس و پورت
mangle: تغییر بسته ها - Chains: مسیر پردازش بسته ها
INPUT,OUTPUT,
نمونه قوانین پایه با nft
ایجاد جدول:
bash
sudo nft add table inet firewall
ایجاد زنجیره:
bash
sudo nft add chain inet firewall input { type filter hook input priority 0; }
اجازه دادن به پورت 80:
bash
sudo nft add rule inet firewall input tcp dport 80 accept
10.4 مقایسه سریع iptables و nftables
ویژگیiptablesnftablesساختارپراکنده و چندجدولییکپارچه و مدولارسرعت اجرامعمولیبهینه و سریع ترخوانایینسبتا پیچیدهقابل فهم ترپشتیبانی مدرنکمتر در سیستم های جدیدتوصیه شده توسط سیستم عامل هاابزار گرافیکیفراوانهنوز محدودتر
10.5 مدیریت حالت اتصال (Stateful Firewall)
- بررسی وضعیت اتصال با ماژول
conntrackbashsudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
- این خط یعنی بسته هایی که قبلا مجاز بودن، بدون بررسی مجدد عبور می کنن.
10.6 راه اندازی سریع فایروال ایمن (مثال عملی)
bash
sudo iptables -P INPUT DROP
sudo iptables -P FORWARD DROP
sudo iptables -P OUTPUT ACCEPT
sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
این مجموعه قوانین، همه چیز رو می بنده به جز اتصال های مجاز و SSH.
تمرین پایانی
- یک اسکریپت Bash بنویس که در بوت سیستم فایروال nftables رو فعال کنه و فقط پورت های 22، 80 و 443 رو باز بذاره.
- تفاوت اجرای همین قواعد با iptables رو تست و بررسی کن.