
در دنیای امروز، تسلط بر خط فرمان لینوکس دیگر یک مهارت اختیاری نیست؛ بلکه بهعنوان سنگبنای فعالیتهای حرفهای در حوزههای شبکه، امنیت سایبری، DevOps و مدیریت سرور شناخته میشود. این مقاله با هدف ارائه یک مرجع جامع و عملی برای دانشجویان سطح متوسط تا پیشرفته تدوین شده است. در هر فصل، پس از معرفی دستورات پایه و ساختار کلی، مثالهای واقعی و تمرینهای کوتاه ارائه میشود تا یادگیری صرفاً تئوریک نباشد و توانایی بهکارگیری در شرایط واقعی را نیز تقویت کند.
فصل اول: مبانی شل و مدیریت پوسته
فصل دوم: مدیریت فایل و دایرکتوری
فصل سوم: مجوزها، مالکیت و امنیت فایل
فصل چهارم: پردازش متن و ابزارهای خط لوله
فصل پنجم: مدیریت بسته و بهروزرسانی
فصل ششم: شبکه و عیبیابی ارتباطات
فصل هفتم: سرویسها و مدیریت سیستم
فصل هشتم: اسکریپتنویسی با Bash
فصل نهم: ابزارهای امنیتی اصلی
فصل دهم: پیکربندی فایروال و iptables/nftables
توضیح تفاوتهای اصلی Bash، Zsh و Fish
فایلهای پیکربندی (~/.bashrc، ~/.profile)
نحوه بارگذاری تنظیمات و تفاوت Login vs Non-login Shell
تعریف و نمایش متغیر (VAR=value، echo $VAR)
متغیرهای محیطی مهم (PATH، HOME، SHELL)
پایداری متغیر با export و ذخیره در فایلهای شل
فهرست دستورات قبلی (history)
جستجوی تعاملی در History (Ctrl+R)
ترفندهای تکرار دستور (!n، !grep)
متغیر MYNAME را تعریف کرده و مقدارش را در فایل ~/.bashrc ذخیره کنید.
با استفاده از History، پنجمین دستور قبلی را اجرا کنید.
ls با گزینههای -l, -a, -h, --color
تغییر دایرکتوری با cd و برگشت سریع (cd -)
نمایش مسیر جاری با pwd
mkdir -p برای ایجاد چند لایه پوشه
touch برای ساخت فایل خالی
cp و mv با گزینههای -r, -i, -v
حذف ایمن با rm -i, حذف پوشه با rm -rf (مواظب باشید!)
tar czf و tar xzf
zip و unzip
تفاوت فرمتهای gz, bz2, xz
bash
mkdir -p ~/backup/{docs,configs,logs} tar czf ~/backup/docs_$(date +%F).tar.gz ~/Documents
دایرکتوری project را در مسیر خانه بسازید، سه فایل خالی در آن ایجاد کنید، سپس همه را در یک آرشیو tar.bz2 فشرده کنید.
آرشیو را در پوشهی ~/restore بازکنید.
نمایش مجوزها با ls -l
مفهوم خواندن، نوشتن و اجرا (r, w, x) برای owner، group و others
دستور chown user:group filename
کاربرد chown -R برای دایرکتوریها
مد دهی عددی (chmod 755 file)
مد نمادی (chmod u=rwx,g=rx,o= file)
بیتهای ویژه: Setuid, Setgid, Sticky bit
فعال کردن Setuid روی فایلهای ناآشنا میتواند مسیر نفوذ هکرها را هموار کند.
فایلی بسازید و با chmod 4711 به آن مجوزهای Setuid بدهید.
مالکیت یک دایرکتوری با زیرشاخهها را به کاربر alice واگذار کنید.
مفهوم pipe (|) برای انتقال خروجی یک دستور به ورودی دستور بعدی
کاربردهای زنجیرهای با grep, awk, cut
bash
cat access.log | grep "Accepted" | awk '{print $NF}' | sort | uniq
grepgrep برای جستجو در فایلها
پارامترهای کاربردی:
-i (بدون توجه به حروف بزرگ/کوچک)
-r (جستجوی بازگشتی در پوشهها)
--color=auto (نمایش رنگی)
cut, awk و sedcut: برش فیلدها با دلیمتر خاص
awk: پردازش خطبهخط فایل و استخراج فیلدهای دلخواه
sed: ویرایش متن و جایگزینی الگوها (sed 's/old/new/g')
فایلی بسازید که شامل اطلاعات کاربری باشد و با awk نام همه کاربران را استخراج کنید.
با sed شماره تلفنها را با فرمت استاندارد تبدیل کنید.
نصب بسته با apt install
حذف با apt remove و apt purge
بهروزرسانی سیستم با:
bash
sudo apt update && sudo apt upgrade -y
استفاده از yum و dnf:
bash
sudo dnf install nginx
نصب با pacman -S، بهروزرسانی با pacman -Syu
dpkg -l و rpm -qa برای لیست بستهها
جستجو با apt-cache search یا dnf search
بسته curl را نصب کرده و نسخه آن را بررسی کنید.
یک بسته را نصب و سپس با dpkg -L مسیر فایلهای آن را بررسی کنید.
ip a برای مشاهده آدرسهای IP
ip r یا route -n برای بررسی روتها
ping برای تست اتصال
traceroute و mtr برای مسیر اتصال
بررسی resolv.conf
استفاده از dig و nslookup برای تست دامنهها
شبیهسازی پاسخهای DNS
netstat -tulpn (پورتهای باز)
ss بهجای netstat در توزیعهای جدیدتر
nmap برای اسکن شبکه و کشف میزبانها
curl -I website.com برای بررسی پاسخ سرور
wget برای دانلود تستی
نصب ابزار iperf3 برای تست پهنای باند بین دو نقطه
پورت باز سرور google.com را با nmap بررسی کنید.
از dig برای دریافت رکوردهای MX یک دامنه استفاده کنید.
بیشتر توزیعهای مدرن از systemd برای مدیریت سرویسها استفاده میکنن.
مشاهده وضعیت سرویس:
bash
systemctl status nginx
فعالسازی سرویس هنگام بوت:
bash
systemctl enable apache2
توقف یا راهاندازی:
bash
systemctl stop ssh systemctl start mysql
ابزاری حیاتی برای اجرای خودکار وظایف دورهای:
ویرایش کرون کاربر:
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"
اسکریپتی بنویس که بعد از بررسی اتصال شبکه، بهصورت خودکار سرویسهای لازم را راهاندازی کند.
اسکریپتی بنویس که از هر پوشه پشتیبان بگیره و با نام تاریخ ذخیره کنه.
chkrootkit و rkhunterاین ابزارها فایلها و کتابخانهها را از نظر وجود rootkit بررسی میکنند:
bash
sudo chkrootkit sudo rkhunter --check
Lynisابزار تست امنیتی برای سرورهای لینوکسی:
bash
sudo apt install lynis sudo lynis audit system
AppArmor و SELinuxمثال در Ubuntu:
bash
sudo aa-status
auditdابزار مانیتورینگ برای ثبت فعالیتهای مشکوک:
bash
sudo auditctl -w /etc/passwd -p wa
بررسی auth.log برای تلاشهای ورود:
bash
sudo tail -f /var/log/auth.log
ابزار Lynis را اجرا کرده و گزارش آن را تحلیل کن.
مسیر /var/www/html را با auditd مانیتور کن.
فایروال نقش دروازهی کنترل بستههای ورودی، خروجی و عبوری رو ایفا میکنه.
هر بستهی شبکه با مجموعهای از قوانین مقایسه میشه تا مجاز یا مسدود بشه.
فایروالهای لینوکسی مبتنی بر جدول، زنجیره و قانون هستند.
Tables: مجموعه قوانین با کاربرد خاص
filter: فیلتر بستهها
nat: تغییر مسیر آدرس و پورت
mangle: تغییر بستهها
Chains: مسیر پردازش بستهها
INPUT, OUTPUT,
ایجاد جدول:
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
ویژگیiptablesnftablesساختارپراکنده و چندجدولییکپارچه و مدولارسرعت اجرامعمولیبهینه و سریعترخوانایینسبتاً پیچیدهقابل فهمترپشتیبانی مدرنکمتر در سیستمهای جدیدتوصیهشده توسط سیستمعاملهاابزار گرافیکیفراوانهنوز محدودتر
10.5 مدیریت حالت اتصال (Stateful Firewall)
بررسی وضعیت اتصال با ماژول conntrack
bash
sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
این خط یعنی بستههایی که قبلاً مجاز بودن، بدون بررسی مجدد عبور میکنن.
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 رو تست و بررسی کن.