فصل ۱: مبانی خط فرمان (CLI)
ابتدا یونیکس ایجاد شد تا همه حق استفاده از کامپیوتر را داشته باشند و هسته GNU Linux ایجاد شد و چند خانواده از آن مشتق شد. تمایز آنها در ریپازیتوری ها و نرم افزارهای آنها مثل میز کارشان است. ریپازیتوری محل جمع آوری نرم افزارهای قابل نصب روی سیستم عامل هستند. توزیع های فوق طیفی شامل چندین نوع سیستم عامل را تشکیل می دهند که مشهورترین آنها عبارتند از:
- Debian
- Ubuntu
- Kali Linux
- Redhat
- Fedora
- CentOS
- Slackware
- FreeBSD
- OpenSUSE
در سرورها معمولاً رابط گرافیکی (GUI) وجود ندارد و تمامی عملیات مدیریتی از طریق SSH و ترمینال انجام میشود. بنابراین CLI نه یک گزینه، بلکه تنها روش کار با سرور محسوب میشود.
۱.۱ ساختار یک دستور در لینوکس
هر دستور لینوکس از سه بخش تشکیل میشود:
command -options arguments
| | |
دستور سوییچها ورودیها
مثال:
ls -la /home
ls→ دستور (لیست کردن)-la→ سوییچها (l = long format, a = all files)/home→ آرگومان (مسیری که باید لیست شود)
سوییچها با - (کوتاه) یا -- (بلند) نوشته میشوند:
ls -a # کوتاه
ls --all # بلند
ls -la # چند سوییچ ترکیبی
۱.۲ ساختار فایلسیستم لینوکس
برخلاف ویندوز که درایوها (C:, D:) به صورت جداگانه تعریف میشوند، در لینوکس یک
درخت واحد وجود دارد که از / (ریشه) آغاز میشود.
| مسیر | کاربرد |
|---|---|
/ |
ریشه کل فایلسیستم |
/home |
دایرکتوری کاربران عادی |
/root |
دایرکتوری کاربر root |
/etc |
فایلهای تنظیمات |
/var |
لاگها و دادههای متغیر |
/tmp |
فایلهای موقت |
/bin, /usr/bin |
دستورات اجرایی |
/dev |
دستگاهها (دیسک، USB و غیره) |
/proc, /sys |
اطلاعات کرنل و سیستم |
مسیر مطلق در مقابل مسیر نسبی:
/etc/nginx/nginx.conf # مطلق (از / شروع میشود)
./config.txt # نسبی (از مسیر جاری)
../logs/ # نسبی (یک سطح بالاتر)
نمادهای خاص:
.→ دایرکتوری جاری..→ دایرکتوری والد~→ دایرکتوری خانگی کاربر (/home/username)
۱.۲.۱ دستورات پایه برای جابجایی
pwd — نمایش مسیر جاری
pwd
# /home/ali
ls — لیست کردن محتویات
ls # لیست ساده
ls -l # لیست با جزئیات
ls -a # نمایش فایلهای مخفی
ls -lh # حجم به صورت خوانا (KB, MB)
ls -la /etc # ترکیبی روی مسیر مشخص
ls -R # بازگشتی (recursive)
خروجی ls -l:
-rw-r--r-- 1 ali ali 4096 Sep 11 10:30 file.txt
│└┬┘└┬┘└┬┘ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ └─ نام فایل
│ │ │ │ │ │ │ │ └─ تاریخ
│ │ │ │ │ │ │ └─ حجم
│ │ │ │ │ │ └─ گروه
│ │ │ │ │ └─ مالک
│ │ │ │ └─ تعداد لینک
│ └──┴──┴─ دسترسیها
└─ نوع فایل (- فایل، d دایرکتوری، l لینک)
cd — تغییر مسیر
cd /etc # رفتن به مسیر مطلق
cd nginx # رفتن به دایرکتوری داخل مسیر جاری
cd .. # یک سطح بالاتر
cd ~ # دایرکتوری خانگی
cd - # بازگشت به دایرکتوری قبلی
cd # دایرکتوری خانگی
۱.۲.۲ مدیریت فایل و دایرکتوری
ایجاد
touch file.txt # ایجاد فایل خالی
mkdir mydir # ایجاد دایرکتوری
mkdir -p a/b/c # ایجاد دایرکتوریهای تودرتو
کپی
cp file.txt /tmp/ # کپی فایل
cp -r mydir /tmp/ # کپی بازگشتی دایرکتوری
cp -v file.txt backup.txt # نمایش جزئیات
انتقال و تغییر نام
mv file.txt /tmp/ # انتقال
mv old.txt new.txt # تغییر نام
حذف
rm file.txt # حذف فایل
rm -r mydir # حذف دایرکتوری
rm -rf mydir # حذف اجباری بدون تایید (خطرناک)
rm -i file.txt # حذف با تایید
هشدار: دستور
rm -rf /موجب نابودی کل سیستم میشود. هرگز این دستور را با sudo یا روی/اجرا نکنید. r یعنی recursive — بازگشتی، یعنی اگه mydir پوشه بود، محتویات داخلش رو هم حذف کن (فایلها، زیرپوشهها، همهچیز)
۱.۲.۳ مشاهده محتوای فایل
cat file.txt # نمایش کل فایل
less file.txt # نمایش صفحهبهصفحه (q برای خروج)
head file.txt # ده خط اول
head -n 20 file.txt # بیست خط اول
tail file.txt # ده خط آخر
tail -f /var/log/syslog # دنبال کردن زنده لاگ (Ctrl+C برای خروج)
۱.۲.۴ جستجو
find — جستجوی فایل
find /etc -name "*.conf" # فایلهای .conf
find / -type d -name "nginx" # دایرکتوری با نام nginx
find /var/log -size +10M # فایلهای بزرگتر از 10MB
find /home -mtime -7 # تغییر یافته در هفت روز اخیر
grep — جستجو در محتوا
grep "error" /var/log/syslog # خطوط شامل error
grep -i "error" file.txt # بدون حساسیت به بزرگی و کوچکی حروف
grep -r "localhost" /etc/ # جستجوی بازگشتی در دایرکتوری
grep -n "root" /etc/passwd # نمایش شماره خط
grep -v "comment" file.txt # خطوطی که شامل الگو نیستند
۱.۲.۵ Pipe و Redirection
Pipe (|) — انتقال خروجی یک دستور به ورودی دستور بعدی
ps aux | grep nginx # پروسههای nginx
cat /etc/passwd | wc -l # تعداد کاربران
ls -la | less # مشاهده لیست به صورت صفحهبهصفحه
history | grep "apt" # دستورات apt در تاریخچه
Redirection — هدایت ورودی و خروجی
ls > files.txt # نوشتن خروجی (بازنویسی)
ls >> files.txt # افزودن خروجی
cat < files.txt # ارسال فایل به عنوان ورودی
command 2> error.log # ذخیره فقط خطاها
command &> all.log # ذخیره خروجی و خطا
command > /dev/null # دور ریختن خروجی
۱.۲.۵.۱ اجرای زنجیرهای دستورات با && و ||
در لینوکس میتوان چند دستور را به صورت زنجیرهای اجرا کرد. عملگر
&& دستور دوم را
تنها در صورتی اجرا میکند که دستور اول با موفقیت پایان یافته باشد. عملگر || برعکس، دستور
دوم را تنها در صورت شکست دستور اول اجرا میکند.
cd /var/log && ls -lh # فقط اگر cd موفق بود، ls اجرا شود
apt update && apt upgrade # بهروزرسانی و سپس ارتقا
command1 || echo "failed" # اگر دستور اول شکست خورد، پیام چاپ شود
۱.۲.۶ ویرایشگر متن (nano)
برای کار روی سرور، nano سادهترین گزینه است:
nano /etc/hosts
کلیدهای میانبر nano:
Ctrl + O→ ذخیرهCtrl + X→ خروجCtrl + W→ جستجوCtrl + K→ برش خطCtrl + U→ چسباندن
برای کارهای حرفهایتر، یادگیری vim توصیه میشود؛ اما برای شروع nano کافی است.
۱.۲.۷ کمک گرفتن
man ls # راهنمای کامل
ls --help # راهنمای خلاصه
man -k "copy" # جستجو در راهنماها
apropos network # دستورات مرتبط با شبکه
در محیط man: با q خارج شوید، با / جستجو کنید و با n
به نتیجه بعدی بروید.
۱.۲.۸ ترفندهای ترمینال
| کلید | کارکرد |
|---|---|
Tab |
تکمیل خودکار دستور یا مسیر |
Ctrl + C |
قطع دستور در حال اجرا |
Ctrl + Z |
متوقف کردن موقت (suspend) |
Ctrl + L |
پاک کردن صفحه |
Ctrl + R |
جستجو در تاریخچه |
↑ / ↓ |
دستورات قبلی و بعدی |
history |
نمایش دستورات قبلی |
!! |
اجرای مجدد آخرین دستور |
Ctrl + A |
رفتن به ابتدای خط |
Ctrl + E |
رفتن به انتهای خط |
۱.۲.۹ تمرین عملی فصل ۱
در صورت دسترسی به یک سیستم Ubuntu (ماشین مجازی یا سرور)، تمرینهای زیر را انجام دهید:
# 1. رفتن به /var/log و لیست کردن محتویات
cd /var/log && ls -lh
# 2. ایجاد دایرکتوری تمرین
mkdir ~/practice && cd ~/practice
# 3. ایجاد سه فایل
touch file1.txt file2.txt file3.txt
# 4. افزودن محتوا
echo "hello linux" > file1.txt
echo "server admin" >> file1.txt
# 5. مشاهده محتوا
cat file1.txt
# 6. جستجو در تمام فایلها
grep "linux" *.txt
# 7. شمارش خطوط فایل passwd
wc -l /etc/passwd
# 8. مشاهده پنج کاربر آخر سیستم
tail -n 5 /etc/passwd
# 9. پاکسازی
cd ~ && rm -rf practice
۱.۲.۱۰ چکلیست یادگیری فصل ۱
- تفاوت مسیر مطلق و نسبی
- کار با
ls،cd،pwd،mkdir،touch،cp،mvوrm - مشاهده فایل با
cat،less،headوtail - جستجو با
findوgrep - استفاده از pipe (
|) و redirection (>،>>) - کار با ویرایشگر
nano - کمک گرفتن با
manو--help - میانبرهای صفحهکلید (Tab، Ctrl+C، Ctrl+R)
۱.۳ ابزارهای پایه و ضروری خط فرمان
در ادامه ابزارهایی معرفی میشوند که در مدیریت روزمره هر سرور لینوکسی به آنها نیاز خواهید داشت.
۱.۳.۱ ping — بررسی اتصال شبکه
ابزار ping برای بررسی دسترسی به یک میزبان و اندازهگیری زمان پاسخ استفاده میشود.
ping google.com # بررسی اتصال به میزبان
ping -c 4 8.8.8.8 # ارسال چهار بسته و توقف
۱.۳.۲ ip — مدیریت و بررسی شبکه
ابزار ip جایگزین مدرن ifconfig است و برای مشاهده و پیکربندی اینترفیسهای شبکه
استفاده میشود.
ip a # نمایش اینترفیسها و آدرسها
ip r # نمایش جدول مسیریابی
ip link # وضعیت لینکها
۱.۳.۳ ss — بررسی اتصالات و پورتها
ابزار ss جایگزین سریعتر netstat است و برای مشاهده پورتهای باز و اتصالات فعال
کاربرد دارد.
ss -tulnp # پورتهای باز و پروسههای مرتبط
ss -tan # اتصالات TCP
۱.۳.۴ curl و wget — انتقال داده از شبکه
این دو ابزار برای دانلود فایل، تست API و بررسی پاسخ سرورها استفاده میشوند.
curl https://example.com # دریافت محتوا
curl -I https://example.com # فقط هدرها
curl -o file.zip https://example.com/f.zip # ذخیره در فایل
curl -fsSL https://example.com/install.sh | bash # دریافت و اجرا
wget https://example.com/file.zip # دانلود فایل
wget -c https://example.com/file.zip # ادامه دانلود نیمهکاره
۱.۳.۵ رفع خطاهای نصب پکیج
در صورت بروز مشکل در نصب پکیجها، میتوان از دستورات زیر استفاده کرد:
sudo apt --fix-broken install # رفع وابستگیهای شکسته
sudo dpkg -i package.deb # نصب فایل deb دانلود شده
sudo apt install -f # تکمیل نصب پس از dpkg
۱.۳.۶ rsync — همگامسازی و پشتیبانگیری
ابزار rsync برای کپی و همگامسازی فایلها به صورت محلی یا از راه دور استفاده میشود و در
انتقالهای بزرگ بسیار بهینه عمل میکند.
rsync -avz /home/ /backup/home/
rsync -avz --delete /src/ /dst/
rsync -avz -e ssh /home/ user@server:/backup/
۱.۳.۷ tmux — مدیریت نشستها
با tmux میتوانید نشست SSH را حتی پس از قطع ارتباط زنده نگه دارید. این ویژگی برای اجرای
دستورات طولانی بسیار مهم است.
apt install tmux
tmux new -s work # ایجاد نشست جدید
tmux attach -t work # اتصال به نشست
tmux ls # لیست نشستها
میانبرهای مهم tmux (پس از فشردن Ctrl+B):
d→ جدا شدن از نشست (detach)c→ ایجاد پنجره جدیدn/p→ پنجره بعدی / قبلی"→ تقسیم افقی%→ تقسیم عمودی
فصل ۲: مدیریت کاربران و دسترسیها
در این فصل با نحوه ایجاد و مدیریت کاربران، گروهها و سطوح دسترسی فایلها آشنا میشوید.
۲.۱ مدیریت کاربران
useradd ali # ایجاد کاربر
useradd -m -s /bin/bash ali # ایجاد کاربر با دایرکتوری خانگی و شل
passwd ali # تنظیم رمز عبور
usermod -aG sudo ali # افزودن به گروه sudo
userdel -r ali # حذف کاربر و دایرکتوری خانگی
۲.۲ مدیریت گروهها
groupadd developers # ایجاد گروه
groupdel developers # حذف گروه
groups ali # نمایش گروههای کاربر
id ali # نمایش اطلاعات کامل کاربر
۲.۳ سطوح دسترسی فایلها
chmod 755 script.sh # تنظیم دسترسی
chmod u+x script.sh # افزودن دسترسی اجرا به مالک
chown ali:ali file.txt # تغییر مالک و گروه
فصل ۳: مدیریت پکیج با APT
اوبونتو از ابزار apt برای مدیریت پکیجها استفاده میکند.
۳.۱ دستورات پایه APT
apt update # بهروزرسانی لیست پکیجها
apt upgrade # بهروزرسانی پکیجهای نصبشده
apt install nginx # نصب پکیج
apt remove nginx # حذف پکیج
apt autoremove # حذف پکیجهای بیاستفاده
apt search nginx # جستجوی پکیج
۳.۲ مدیریت مخازن
cat /etc/apt/sources.list
add-apt-repository ppa:example/ppa
فصل ۴: مدیریت سرویسها با systemd
سیستمعامل اوبونتو از systemd برای مدیریت سرویسها استفاده میکند.
۴.۱ دستورات systemctl
systemctl start nginx # شروع سرویس
systemctl stop nginx # توقف سرویس
systemctl restart nginx # راهاندازی مجدد
systemctl enable nginx # فعالسازی در بوت
systemctl status nginx # مشاهده وضعیت
۴.۲ مشاهده لاگها با journalctl
journalctl -u nginx # لاگهای سرویس مشخص
journalctl -f # دنبال کردن زنده لاگها
journalctl --since "1 hour ago"
فصل ۵: پیکربندی شبکه
در نسخههای جدید اوبونتو، پیکربندی شبکه از طریق netplan انجام میشود.
۵.۱ فایل پیکربندی netplan
nano /etc/netplan/01-netcfg.yaml
network:
version: 2
ethernets:
eth0:
dhcp4: true
netplan apply # اعمال تنظیمات
۵.۲ ابزارهای بررسی شبکه
ip a # نمایش آدرسهای شبکه
ip r # نمایش جدول مسیریابی
ss -tulnp # نمایش پورتهای باز
ping google.com # تست اتصال
فصل ۶: فایروال با UFW
ابزار ufw یک رابط ساده برای مدیریت فایروال در اوبونتو است.
۶.۱ دستورات پایه UFW
ufw enable # فعالسازی فایروال
ufw status # مشاهده وضعیت
ufw allow 22 # اجازه به پورت SSH
ufw allow 80/tcp # اجازه به HTTP
ufw deny 23 # مسدود کردن پورت
ufw delete allow 80 # حذف قانون
فصل ۷: مدیریت Storage
مدیریت دیسکها، پارتیشنها و فایلسیستمها از مهارتهای ضروری مدیریت سرور است.
۷.۱ مشاهده دیسکها
lsblk # نمایش دیسکها و پارتیشنها
df -h # نمایش فضای مصرفی
du -sh /var/log # حجم دایرکتوری
۷.۲ پارتیشنبندی و mount
fdisk /dev/sdb # پارتیشنبندی
mkfs.ext4 /dev/sdb1 # ساخت فایلسیستم
mount /dev/sdb1 /mnt # اتصال
برای اتصال دائمی، ورودی مربوطه در /etc/fstab اضافه میشود.
فصل ۸: وبسرور و سرویسهای رایج
در این فصل نصب و پیکربندی سرویسهای پرکاربرد سرور بررسی میشود.
۸.۱ نصب Nginx
apt install nginx
systemctl enable --now nginx
۸.۲ تنظیم Virtual Host
nano /etc/nginx/sites-available/example.com
ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
nginx -t
systemctl reload nginx
۸.۳ گواهی SSL با Certbot
apt install certbot python3-certbot-nginx
certbot --nginx -d example.com
فصل ۹: کانتینر و مجازیسازی
کانتینرها روشی سبک برای اجرای سرویسها فراهم میکنند.
۹.۱ نصب Docker
apt install docker.io
systemctl enable --now docker
۹.۲ دستورات پایه Docker
docker run -d -p 80:80 nginx
docker ps
docker stop <container_id>
docker logs <container_id>
فصل ۱۰: اتوماسیون و امنیت
اتوماسیون وظایف تکراری و رعایت اصول امنیتی، بخش نهایی این راهنماست.
۱۰.۱ اسکریپتنویسی شل
#!/bin/bash
echo "Starting backup..."
tar -czf /backup/home-$(date +%F).tar.gz /home
echo "Backup completed."
۱۰.۱.۱ مبانی Bash — متغیرها، شرطها و حلقهها
Bash (Bourne Again Shell) پوسته پیشفرض اکثر توزیعهای لینوکس از جمله Ubuntu است. هر اسکریپتی که با
#!/bin/bash شروع شود، توسط Bash تفسیر میشود. در ادامه با مهمترین مفاهیم Bash آشنا
میشوید.
متغیرها در Bash
در Bash برای تعریف متغیر از علامت = بدون فاصله استفاده میشود. برای خواندن مقدار متغیر،
علامت $ قبل از نام آن قرار میگیرد. توجه کنید که در سمت چپ و راست = نباید
فاصله باشد.
#!/bin/bash
NAME="Ali"
AGE=30
CITY="Tehran"
echo "Name: $NAME"
echo "Age: $AGE"
echo "City: ${CITY}"
# متغیر فقطخواندنی (ثابت)
readonly PI=3.14
# متغیرهای ویژه
echo "اسکریپت: $0" # نام اسکریپت
echo "آرگومان اول: " # اولین آرگومان
echo "تعداد آرگومانها: $#" # تعداد آرگومانها
echo "همه آرگومانها: $@" # همه آرگومانها
echo "کد خروج آخرین دستور: $?" # وضعیت خروج
echo "PID اسکریپت: $" # شناسه پروسه
نکته: نام متغیرها به حروف بزرگ و کوچک حساس است. name و NAME دو متغیر متفاوت
هستند. برای محاسبات عددی از $(( )) استفاده کنید:
A=10
B=3
echo $((A + B)) # 13
echo $((A * B)) # 30
echo $((A / B)) # 3 (تقسیم صحیح)
echo $((A % B)) # 1 (باقیمانده)
شرطها در Bash
ساختار if در Bash به شکل زیر است. شرطها داخل [ ] (تست) یا
[[ ]] (تست پیشرفته) نوشته میشوند و باید دور آنها فاصله باشد.
#!/bin/bash
FILE="/etc/passwd"
if [ -f "$FILE" ]; then
echo "فایل وجود دارد"
elif [ -d "$FILE" ]; then
echo "دایرکتوری است"
else
echo "چیزی پیدا نشد"
fi
# مقایسه اعداد
NUM=10
if [ "$NUM" -gt 5 ]; then
echo "بزرگتر از ۵ است"
fi
# مقایسه رشتهها
NAME="Ali"
if [ "$NAME" = "Ali" ]; then
echo "سلام علی"
fi
عملگرهای پرکاربرد در شرطها:
| عملگر | معنی |
|---|---|
-f file |
فایل وجود دارد و فایل معمولی است |
-d dir |
دایرکتوری وجود دارد |
-e path |
مسیر وجود دارد |
-r / -w / -x |
قابل خواندن / نوشتن / اجرا |
-z str |
رشته خالی است |
-n str |
رشته غیرخالی است |
-eq / -ne |
برابر / نابرابر (اعداد) |
-gt / -lt |
بزرگتر / کوچکتر (اعداد) |
= / != |
برابر / نابرابر (رشتهها) |
&& / || |
و / یا منطقی |
ساختار case
برای انتخاب بین چند حالت، case بسیار خواناتر از زنجیره if/elif است:
#!/bin/bash
ACTION=""
case "$ACTION" in
start)
echo "شروع سرویس..."
;;
stop)
echo "توقف سرویس..."
;;
restart)
echo "راهاندازی مجدد..."
;;
*)
echo "استفاده: $0 {start|stop|restart}"
exit 1
;;
esac
حلقهها در Bash
حلقه for:
#!/bin/bash
# روی لیست
for FRUIT in apple banana orange; do
echo "میوه: $FRUIT"
done
# روی محدوده عددی
for i in {1..5}; do
echo "شماره: $i"
done
# روی فایلها
for FILE in /var/log/*.log; do
echo "پردازش $FILE"
done
# شبیه C
for ((i=0; i<10; i++)); do
echo "i=$i"
done
حلقه while:
#!/bin/bash
COUNT=1
while [ "$COUNT" -le 5 ]; do
echo "شمارش: $COUNT"
COUNT=$((COUNT + 1))
done
# خواندن خط به خط یک فایل
while IFS= read -r LINE; do
echo "خط: $LINE"
done < /etc/passwd
حلقه until: برعکس while عمل میکند و تا زمانی که شرط نادرست است اجرا میشود:
#!/bin/bash
COUNT=1
until [ "$COUNT" -gt 5 ]; do
echo "شمارش: $COUNT"
COUNT=$((COUNT + 1))
done
توابع در Bash
توابع باعث میشوند کد تمیزتر و قابل استفاده مجدد شود:
#!/bin/bash
# تعریف تابع
greet() {
local NAME="" # local: متغیر محلی
echo "سلام $NAME!"
}
# تابع با مقدار بازگشتی
add() {
echo $(( +
))
}
# تابع با بررسی خطا
check_root() {
if [ "$EUID" -ne 0 ]; then
echo "این اسکریپت نیاز به دسترسی root دارد"
exit 1
fi
}
# فراخوانی
greet "Ali"
RESULT=$(add 5 3)
echo "نتیجه: $RESULT"
check_root
ورودی و خروجی در Bash
#!/bin/bash
# خواندن ورودی از کاربر
read -p "نام خود را وارد کنید: " USER_NAME
echo "سلام $USER_NAME"
# خواندن رمز عبور (بدون نمایش)
read -sp "رمز عبور: " PASSWORD
echo
# خواندن با تایماوت
read -t 5 -p "سریع جواب بده: " ANSWER
# نوشتن در فایل
echo "متن جدید" >> /tmp/log.txt
# خواندن از فایل
while read -r LINE; do
echo "$LINE"
done < /tmp/log.txt
مدیریت خطا در Bash
در اسکریپتهای جدی، مدیریت خطا حیاتی است. set -e باعث میشود اسکریپت با اولین خطا متوقف شود:
#!/bin/bash
set -euo pipefail
# -e : توقف در صورت خطا
# -u : خطا در صورت استفاده از متغیر تعریفنشده
# -o pipefail : خطا در صورت شکست هر دستور در pipe
# اجرای دستور و بررسی خطا
if ! command -v nginx > /dev/null 2>&1; then
echo "nginx نصب نیست"
exit 1
fi
# trap: اجرای دستور در زمان خروج
cleanup() {
echo "پاکسازی..."
rm -f /tmp/tempfile
}
trap cleanup EXIT
مثال کامل: اسکریپت پشتیبانگیری
در ادامه یک اسکریپت کامل و کاربردی که مفاهیم بالا را ترکیب میکند:
#!/bin/bash
set -euo pipefail
# تنظیمات
BACKUP_DIR="/backup"
SOURCE_DIR="/home"
DATE=$(date +%F_%H-%M)
ARCHIVE="$BACKUP_DIR/home-$DATE.tar.gz"
KEEP_DAYS=7
# بررسی root
if [ "$EUID" -ne 0 ]; then
echo "لطفاً با sudo اجرا کنید"
exit 1
fi
# ایجاد دایرکتوری پشتیبان
mkdir -p "$BACKUP_DIR"
# گرفتن پشتیبان
echo "شروع پشتیبانگیری از $SOURCE_DIR ..."
tar -czf "$ARCHIVE" "$SOURCE_DIR"
echo "پشتیبان ساخته شد: $ARCHIVE"
# حذف پشتیبانهای قدیمی
echo "حذف پشتیبانهای قدیمیتر از $KEEP_DAYS روز..."
find "$BACKUP_DIR" -name "home-*.tar.gz" -mtime +$KEEP_DAYS -delete
# نمایش فضای مصرفی
echo "فضای فعلی پشتیبان:"
du -sh "$BACKUP_DIR"
این اسکریپت را در مسیری مثل /usr/local/bin/backup.sh ذخیره کنید، با
chmod +x اجرایی کنید و سپس در cron زمانبندی کنید (بخش بعدی را ببینید).
۱۰.۲ زمانبندی با Cron
crontab -e
# اجرای روزانه در ساعت ۳ بامداد
0 3 * * * /usr/local/bin/backup.sh
۱۰.۳ بهروزرسانیهای امنیتی خودکار
apt install unattended-upgrades
dpkg-reconfigure --priority=low unattended-upgrades
۱۰.۴ پشتیبانگیری با rsync
rsync -avz /home/ user@backup-server:/backup/
فصل ۱۱ (مطالعه اختیاری): ابزارهای تخصصی و تکمیلی
در این فصل ابزارهایی معرفی میشوند که دانستن آنها برای مدیریت سرور خالی از لطف نیست، اما بدون آنها نیز میتوان سرور را بهطور کامل مدیریت کرد. مطالعه این فصل برای توسعهدهندگان و کسانی که با سرویسهای مدرن کار میکنند توصیه میشود.
۱۱.۱ tree — نمایش درختی دایرکتوریها
ابزار tree ساختار پوشهها و فایلها را به صورت درختی نمایش میدهد و برای مرور سریع ساختار
پروژهها بسیار کاربردی است.
apt install tree # نصب ابزار
tree # نمایش درختی مسیر جاری
tree /etc # نمایش درختی یک مسیر خاص
tree -L 2 # فقط دو سطح اول
tree -d # فقط دایرکتوریها
tree -a # نمایش فایلهای مخفی
tree -h # نمایش حجم فایلها
tree -I "node_modules|.git" # نادیده گرفتن الگوها
۱۱.۲ htop — نمایش زنده پروسهها
ابزار htop نسخه پیشرفتهتر top است و نمای بهتری از مصرف CPU، حافظه و پروسهها
ارائه میدهد.
apt install htop
htop
کلیدهای مفید در htop:
F3→ جستجوF4→ فیلترF5→ نمایش درختی پروسههاF6→ تغییر ستون مرتبسازیF9→ ارسال سیگنال (kill)q→ خروج
۱۱.۳ ncdu — تحلیل مصرف دیسک
ابزار ncdu مصرف فضای دیسک را به صورت تعاملی و سریع نمایش میدهد و برای پیدا کردن
دایرکتوریهای حجیم بسیار مناسب است.
apt install ncdu
ncdu /var
ncdu /home
۱۱.۴ jq — پردازش خروجی JSON
ابزار jq برای خواندن، فیلتر و قالببندی دادههای JSON در خط فرمان استفاده میشود.
apt install jq
curl -s https://api.example.com/data | jq .
cat data.json | jq '.items[] | .name'
۱۱.۵ ابزارهای Node.js و npm
برای اجرای پروژههای جاوااسکریپت روی سرور، به Node.js و npm نیاز خواهید داشت:
node --version # نسخه Node.js
npm --version # نسخه npm
npm install # نصب وابستگیهای پروژه
npm install -g <package> # نصب سراسری یک پکیج
sudo npm install -g <package> # نصب سراسری با دسترسی مدیر
npx <command> # اجرای مستقیم پکیج بدون نصب دائمی
npm install # نصب وابستگیها
npm run <script> # اجرای اسکریپت تعریفشده در package.json
npm run build # ساخت نسخه تولید
npm start # اجرای پروژه
۱۱.۶ ابزارهای Docker
Docker برای اجرای سرویسها در محیطهای ایزوله استفاده میشود و مدیریت آن از مهارتهای مهم سرور است:
docker --version # نسخه Docker
docker ps # کانتینرهای در حال اجرا
docker ps -a # همه کانتینرها
docker images # لیست ایمیجها
docker volume ls # لیست والیومها
docker volume prune # حذف والیومهای بیاستفاده
docker system df # مصرف فضای Docker
docker system prune # پاکسازی منابع بیاستفاده
docker compose up # اجرای سرویسها
docker compose up -d # اجرای در پسزمینه
docker compose down # توقف و حذف سرویسها
docker compose ps # وضعیت سرویسها
docker compose logs # مشاهده لاگها
docker compose logs -f # دنبال کردن زنده لاگها
docker exec -it <name> bash # ورود به کانتینر
docker stop <name> # توقف کانتینر
docker start <name> # شروع کانتینر
docker restart <name> # راهاندازی مجدد
docker rm <name> # حذف کانتینر
۱۱.۷ ابزارهای Git
Git برای مدیریت نسخهها و انتشار کد روی سرور استفاده میشود:
git status # وضعیت مخزن
git branch # لیست شاخهها
git checkout <branch> # تغییر شاخه (روش قدیمی)
git switch <branch> # تغییر شاخه (روش جدید)
git add . # افزودن تغییرات
git commit -m "message" # ثبت تغییرات
git push # ارسال به مخزن دور
git pull # دریافت از مخزن دور
git log # تاریخچه کامیتها
git diff # نمایش تغییرات
git remote -v # لیست ریموتها
۱۱.۸ ابزارهای Cloudflare Wrangler
Wrangler ابزار خط فرمان Cloudflare برای مدیریت و انتشار پروژههای Serverless است:
npx wrangler # اجرای Wrangler
npx wrangler --help # راهنمای کلی
npx wrangler observability --help # راهنمای بخش observability
npx wrangler deploy # انتشار پروژه
۱۱.۹ ابزارهای Python و pip و uv
برای اجرای پروژههای پایتون و مدیریت پکیجها:
python3 --version # نسخه پایتون
python3 # ورود به مفسر پایتون
pip --version # نسخه pip
pip3 install <package> # نصب پکیج
uv --version # نسخه uv
uv run <script> # اجرای اسکریپت با uv
uv tool install <tool> # نصب ابزار سراسری با uv
۱۱.۱۰ سایر ابزارهای پرکاربرد
| ابزار | کاربرد |
|---|---|
duf |
نمایش زیبا و خوانا از فضای دیسک |
bat |
جایگزین cat با قابلیت هایلایت و شماره خط |
ripgrep (rg) |
جایگزین سریعتر grep |
fd |
جایگزین سادهتر و سریعتر find |
fzf |
جستجوی تعاملی در لیستها و فایلها |
lsof |
نمایش فایلها و پورتهای باز توسط پروسهها |
netstat / ss |
بررسی اتصالات شبکه |
htop / glances |
مانیتورینگ سیستم |
fail2ban |
مسدودسازی خودکار حملات SSH |