رفتن به محتوا
LoopX

راه‌اندازی محیط تمرین

توی این درس یاد می‌گیری برای تمرین دستورهای لینوکس چه گزینه‌هایی داری و کدام برای تو مناسب‌تر است: WSL2 روی ویندوز، یک ماشین مجازی (یا Multipass) روی مک و ویندوز، یک سرور مجازی (VPS)، و یک کانتینر برای تمرین سریع. دستورهای نصب WSL (wsl --install، wsl -l -v، wsl --set-default-version 2) را می‌بینی، بعد از نصب با یک اسکریپت کوچک مطمئن می‌شوی همه‌چیز درست است، و اولین ترمینال را باز می‌کنی و می‌خوانی.

مسئله: برای یاد گرفتن لینوکس، باید لینوکس داشته باشی

Section titled “مسئله: برای یاد گرفتن لینوکس، باید لینوکس داشته باشی”

دستورهای لینوکس را با خواندن یاد نمی‌گیری؛ باید تایپ کنی، خطا بگیری و درستش کنی. پس اول یک لینوکس واقعی لازم داری که بتوانی روی آن بی‌ترس آزمایش کنی (اگر چیزی خراب شد، دوباره بسازی). خبر خوب: لازم نیست کامپیوترت را پاک کنی یا لینوکس را به‌جای سیستم‌عاملت نصب کنی. چند راه امن‌تر هست.

تشبیه: زمین تمرین، نه میدان مسابقه

Section titled “تشبیه: زمین تمرین، نه میدان مسابقه”

فوتبال را در زمین تمرین یاد می‌گیری، نه وسط فینال. محیط تمرین لینوکس هم زمین تمرین است: جایی که اشتباه کردن مجاز است. برخی زمین‌ها شبیه سالن سرپوشیده‌اند (WSL، سریع و راحت)، بعضی شبیه زمین واقعی‌اند (VPS، با همه‌ی خطرهای سرور واقعی).

هر گزینه یک لینوکس واقعی می‌دهد؛ فرقشان در سرعت راه‌اندازی، فاصله با سرور واقعی و هزینه است.
گزینه سیستم مزیت عیب
WSL2 ویندوز سریع، سبک، یکپارچه با ویندوز، رایگان فقط ویندوز؛ شبکه و systemd کمی فرق دارند
Multipass مک، ویندوز، لینوکس یک دستور = یک Ubuntu؛ مناسب سرور یک ابزار اضافه (مبتنی بر ماشین مجازی)
ماشین مجازی (UTM، VirtualBox، VMware، Parallels) مک، ویندوز محیط کامل و گرافیکی؛ کاملاً ایزوله نصب دستی و کندتر؛ حافظه‌ی بیشتر
VPS هر سیستمی (فقط ssh لازم است) شبیه سرور واقعی با IP عمومی هزینه، به اینترنت وابسته، خطر حمله
کانتینر (داکر) هر سیستمی که داکر دارد چند ثانیه؛ هر زمان پاک و دوباره بساز systemd ندارد؛ برای کار با سرویس‌ها محدودیت دارد

مثال ۱: ویندوز با WSL2 (نمونه)

Section titled “مثال ۱: ویندوز با WSL2 (نمونه)”

اگر ویندوز داری، ساده‌ترین راه WSL2 است. در PowerShell که با دسترسی Administrator باز کردی:

نمونه (اجرا نشده روی این سیستم)
wsl --install

این دستور (طبق مستندات مایکروسافت) هر چیزی که WSL لازم دارد را فعال می‌کند و Ubuntu را نصب می‌کند. بعد از ری‌استارت، پنجره‌ی Ubuntu باز می‌شود و یک username و password (مخصوص لینوکس) می‌خواهد. جزئیات کامل را (به‌همراه فایل‌ها و چند اشتباه رایج) در درس WSL2 برای داکر داری؛ اینجا فقط آنچه برای تمرین لینوکس لازم است.

مثال ۲: بررسی نسخه‌ی WSL (نمونه)

Section titled “مثال ۲: بررسی نسخه‌ی WSL (نمونه)”
نمونه (اجرا نشده)
wsl -l -v
خروجی (نمونه)
NAME STATE VERSION
* Ubuntu Running 2

سه ستون: NAME اسم توزیع، STATE (Running یا Stopped) و VERSION نسخه‌ی WSL. علامت * یعنی توزیع پیش‌فرض. تو نسخه‌ی ۲ می‌خواهی. اگر ۱ بود یا می‌خواهی همه‌ی توزیع‌های بعدی ۲ باشند:

نمونه (اجرا نشده)
wsl --set-default-version 2
خروجی (نمونه)
The operation completed successfully.

برای تبدیل یک توزیع موجود از ۱ به ۲: wsl --set-version Ubuntu 2. از این به بعد برای باز کردن لینوکس کافی است wsl را در PowerShell بزنی یا Ubuntu را از منوی Start باز کنی.

مثال ۳: مک، با Multipass (نمونه)

Section titled “مثال ۳: مک، با Multipass (نمونه)”

Multipass (از شرکت Canonical، سازنده‌ی Ubuntu) با یک دستور یک Ubuntu تازه می‌سازد. نصب (با Homebrew) و ساخت:

نمونه (اجرا نشده روی این سیستم)
brew install --cask multipass
multipass launch 24.04 --name lab --cpus 2 --memory 2G --disk 10G
multipass shell lab

دستور آخر تو را وارد ترمینال Ubuntu می‌کند. برای مدیریت: multipass list (فهرست ماشین‌ها)، multipass stop lab، و برای پاک کردن کامل multipass delete --purge lab. هر وقت لازم شد، ماشین را حذف و دوباره می‌سازی. جایگزین گرافیکی: UTM (مک) یا VirtualBox/VMware (ویندوز) با دانلود ISO اوبونتو و نصب مرحله‌به‌مرحله. روی مک‌های Apple Silicon باید تصویر ARM64 (aarch64) را بگیری، نه x86.

مثال ۴: سریع‌ترین راه، یک کانتینر (اجرای واقعی)

Section titled “مثال ۴: سریع‌ترین راه، یک کانتینر (اجرای واقعی)”

اگر داکر داری (در دوره‌ی داکر نصبش را یاد می‌گیری)، یک Ubuntu تمیز در چند ثانیه:

Terminal window
docker run --rm ubuntu:24.04 bash -c '. /etc/os-release; echo "توزیع: $PRETTY_NAME"; echo "کاربر: $(whoami)"; echo "نام ماشین: $(hostname)"; echo "پوشه‌ی فعلی: $(pwd)"'
خروجی
توزیع: Ubuntu 24.04.5 LTS
کاربر: root
نام ماشین: d6e7adce2510
پوشه‌ی فعلی: /

با --rm کانتینر بعد از خروج پاک می‌شود، یعنی هر بار یک سیستم تازه. در ترمینال معمولی خودت docker run -it --rm ubuntu:24.04 bash را می‌زنی تا یک شل تعاملی بگیری (-it یعنی تعاملی با ترمینال)؛ با exit خارج می‌شوی. محدودیتش این است که systemd ندارد، پس درس‌های سرویس‌ها و فایروال را در یک ماشین مجازی یا VPS هم تمرین کن.

⚡ بررسی سریع

دستور wsl --install را کجا می‌زنی؟

مثال ۵: سرور مجازی و اولین ورود (نمونه)

Section titled “مثال ۵: سرور مجازی و اولین ورود (نمونه)”

با اجاره‌ی یک VPS، ارائه‌دهنده یک آدرس IP و یک رمز یا کلید برای ورود به تو می‌دهد. ورود با ssh (درس‌های بعدی) از ترمینال خودت:

نمونه (اجرا نشده؛ آدرس 203.0.113.10 آدرس مستند‌سازی است)
ssh root@203.0.113.10

اگر VPS می‌خری، ارائه‌دهنده‌ای انتخاب کن که هم به آن دسترسی داری و هم پرداخت برایت ممکن است، و در همان روز اول بخش‌های فایروال و SSH را (در همین دوره) انجام بده: سرورهای تازه با IP عمومی ظرف چند دقیقه شروع به دریافت تلاش‌های ورود خودکار می‌کنند. برای یاد گرفتن، یک VPS ارزان با کم‌ترین مشخصات کافی است.

مثال ۶: بعد از نصب، مطمئن شو درست است (اجرای واقعی)

Section titled “مثال ۶: بعد از نصب، مطمئن شو درست است (اجرای واقعی)”

با هر روشی که لینوکس را آوردی، این اسکریپت کوچک را داخل آن اجرا کن تا مطمئن شوی محیط برای دوره آماده است. هر خط یک بررسی است:

Terminal window
check() { if eval "$2" >/dev/null 2>&1; then echo "✔ $1"; else echo "✘ $1"; fi; }
check "توزیع Ubuntu یا Debian است" '. /etc/os-release && echo "$ID $ID_LIKE" | grep -qE "ubuntu|debian"'
check "bash در دسترس است" 'command -v bash'
check "man و دستورهای پایه هست" 'command -v man ls cp grep find'
check "sudo دارم" 'sudo -n true'
check "مدیر بسته apt تنظیم است" 'apt-cache policy bash | grep -q Candidate'
check "پوشه‌ی خانه قابل‌نوشتن است" 'touch ~/.lx-test && rm ~/.lx-test'
echo "--- اطلاعات:"
echo "کاربر: $(whoami) | خانه: $HOME | شل: $SHELL"
echo "فضای خالی دیسک: $(df -h / | awk 'NR==2{print $4}')"
خروجی
✔ توزیع Ubuntu یا Debian است
✔ bash در دسترس است
✔ man و دستورهای پایه هست
✔ sudo دارم
✔ مدیر بسته apt تنظیم است
✔ پوشه‌ی خانه قابل‌نوشتن است
--- اطلاعات:
کاربر: ali | خانه: /home/ali | شل: /bin/bash
فضای خالی دیسک: 408G

علامت ✔ یعنی آماده‌ای. اگر ✘ دیدی (مثلاً sudo)، همان مورد را قبل از ادامه حل کن. این اسکریپت از دستورهایی استفاده می‌کند که در درس‌های بعد یاد می‌گیری (command -v، df، awk)؛ فعلاً فقط اجرایش کن.

مثال ۷: اولین ترمینال را بخوان

Section titled “مثال ۷: اولین ترمینال را بخوان”

وقتی ترمینال باز می‌شود، چیزی شبیه این می‌بینی:

ظاهر یک ترمینال (نمونه)
ali@pc:~$

هر بخش یک معنی دارد: ali نام کاربر، @، pc نام ماشین، ~ پوشه‌ی فعلی (علامت ~ یعنی پوشه‌ی خانه‌ی تو) و $ یعنی «آماده‌ام، دستور بنویس» (کاربر عادی؛ برای root علامت # است). همین سه چیز را با دستور می‌پرسیم:

Terminal window
echo "کاربر: $(whoami)"
echo "ماشین: $(hostname)"
echo "پوشه‌ی فعلی: $(pwd)"
echo "پوشه‌ی خانه: $HOME"
خروجی
کاربر: ali
ماشین: pc
پوشه‌ی فعلی: /home/ali
پوشه‌ی خانه: /home/ali

پشت پرده: WSL و ماشین مجازی چه فرقی دارند؟

Section titled “پشت پرده: WSL و ماشین مجازی چه فرقی دارند؟”

یک ماشین مجازی یک کامپیوتر نرم‌افزاری کامل با هسته‌ی خودش است که روی سخت‌افزار تو می‌چرخد (برنامه‌ی «مجازی‌ساز» آن را اجرا می‌کند). WSL2 هم از همین ایده استفاده می‌کند، ولی یک ماشین مجازی خیلی سبک با هسته‌ی لینوکس واقعی است که مایکروسافت آن را برایت مدیریت می‌کند و به ویندوز وصل است. کانتینر سبک‌تر هم هست و هسته را با میزبان مشترک می‌گیرد (دیدی در درس قبل که هسته‌ی چهار توزیع یکی بود).

برای یادگیری دستورها، هر سه رفتار مشابه دارند. برای یادگیری خدمات سیستمی (systemd)، فایروال و راه‌اندازی سرور، به یک ماشین مجازی کامل یا VPS نیاز داری. در این دوره دستورهایی که به systemd نیاز دارند (سرویس‌ها، cron، فایروال) را روی یک Ubuntu با systemd واقعی آزمایش کرده‌ام تا خروجی‌ها دقیقاً مثل چیزی باشد که روی سرور می‌بینی.

دستور کجا کار
wsl --install PowerShell (Administrator) نصب WSL و Ubuntu
wsl -l -v PowerShell فهرست توزیع‌ها با وضعیت و نسخه
wsl --set-default-version 2 PowerShell نسخه‌ی ۲ را پیش‌فرض کن
wsl --shutdown PowerShell خاموش کردن همه‌ی توزیع‌ها
multipass launch 24.04 --name lab ترمینال مک/ویندوز ساخت Ubuntu جدید
multipass shell lab ترمینال ورود به ماشین
multipass delete --purge lab ترمینال حذف کامل ماشین
docker run -it --rm ubuntu:24.04 bash ترمینال شل Ubuntu یک‌بارمصرف
ssh user@IP ترمینال ورود به VPS

۱) نصب لینوکس به‌جای ویندوز/مک

Section titled “۱) نصب لینوکس به‌جای ویندوز/مک”

برای شروع لازم نیست سیستم‌عاملت را عوض کنی؛ این کار خطر از دست رفتن داده دارد. راه‌حل: WSL2، ماشین مجازی یا کانتینر.

۲) انتخاب توزیع عجیب برای شروع

Section titled “۲) انتخاب توزیع عجیب برای شروع”

مقاله‌ها و این دوره روی Ubuntu (یا Debian) نوشته شده‌اند. راه‌حل: Ubuntu 24.04 LTS را بگیر تا دستورها دقیقاً یکی باشند.

۳) نوشتن دستور ویندوز در ترمینال لینوکس

Section titled “۳) نوشتن دستور ویندوز در ترمینال لینوکس”
Terminal window
wsl --install
خروجی
bash: wsl: command not found

دستور wsl مال PowerShell ویندوز است و در لینوکس وجود ندارد (command not found). راه‌حل: بدان هر دستور را کجا باید بزنی (ستون «کجا» در جدول بالا).

۴) وارد نکردن یا فراموش کردن رمز

Section titled “۴) وارد نکردن یا فراموش کردن رمز”

موقع تایپ رمز در ترمینال لینوکس هیچ چیز (حتی ستاره) نشان داده نمی‌شود و این عادی است. راه‌حل: رمز را بنویس و Enter بزن؛ رمز را جایی امن نگه دار.

۵) تمرین روی سرور واقعی (production) خودت

Section titled “۵) تمرین روی سرور واقعی (production) خودت”
Terminal window
rm --no-such-flag 2>&1 | head -2
خروجی
rm: unrecognized option '--no-such-flag'
Try 'rm --help' for more information.

گاهی یک دستور اشتباه یا flag اشتباه خطا می‌دهد؛ ولی اگر روی سرور مهم تمرین کنی، یک rm -rf اشتباه خسارت واقعی دارد. راه‌حل: اول در محیط تمرین، بعد روی سرور.

✎ تمرینآسان

بگو در سیستم تو (ویندوز یا مک یا لینوکس) کدام گزینه‌ی این درس مناسب‌تر است و دلیلش را در یک جمله بنویس. اگر داکر داری، یک Ubuntu یک‌بارمصرف بالا بیاور و نام توزیعش را چاپ کن.

دیدن جواب

پاسخ نمونه: «ویندوز دارم، پس WSL2، چون رایگان و سبک است و لینوکس واقعی می‌دهد.» و اگر داکر داری:

Terminal window
docker run --rm ubuntu:24.04 sh -c '. /etc/os-release; echo $PRETTY_NAME'
خروجی
Ubuntu 24.04.5 LTS
✎ تمرینمتوسط

تمرین اصلی: Ubuntu را نصب کن و اولین ترمینال را باز کن. بعد با اسکریپتی که در مثال ۶ دیدی مطمئن شو محیطت آماده است و سه چیز را چاپ کن: نام کاربر، نام ماشین و پوشه‌ی فعلی.

دیدن جواب
Terminal window
echo "کاربر: $(whoami) | ماشین: $(hostname) | پوشه‌ی فعلی: $(pwd)"
خروجی
کاربر: ali | ماشین: pc | پوشه‌ی فعلی: /home/ali

اگر همه‌ی بررسی‌های مثال ۶ ✔ شد، آماده‌ای.

✎ تمرینسخت

بنویس یک اسکریپت env-report.sh که گزارشی از محیط بدهد: توزیع، هسته، معماری، تعداد CPU، حافظه‌ی کل و فضای خالی دیسک، و اگر sudo در دسترس نیست هشدار بدهد. آن را ذخیره، اجرایی و اجرا کن.

دیدن جواب
cat > env-report.sh <<'LXEOF'
#!/bin/bash
. /etc/os-release
echo "توزیع: $PRETTY_NAME"
echo "هسته: $(uname -r) ($(uname -m))"
echo "CPU: $(nproc) هسته"
echo "حافظه: $(grep MemTotal /proc/meminfo | awk '{printf "%.1f GB", $2/1024/1024}')"
echo "دیسک: $(df -h / | awk 'NR==2{print $4}') آزاد"
sudo -n true 2>/dev/null && echo "sudo: در دسترس" || echo "هشدار: sudo در دسترس نیست"
LXEOF
chmod +x env-report.sh
./env-report.sh
خروجی
توزیع: Ubuntu 24.04.5 LTS
هسته: 7.0.14-linuxkit (aarch64)
CPU: 8 هسته
حافظه: 3.8 GB
دیسک: 408G آزاد
sudo: در دسترس
؟ آزمونک
  1. ساده‌ترین راه برای داشتن لینوکس واقعی روی ویندوز؟

  2. خروجی wsl -l -v ستون VERSION چه می‌گوید؟

  3. کدام گزینه برای تمرین فایروال و systemd بهتر است؟

  4. در پرامپت ali@pc:~$ علامت ~ یعنی…

  5. چرا نباید در شروع لینوکس را جای سیستم‌عاملت نصب کنی؟

  6. هنگام تایپ رمز در ترمینال لینوکس چه می‌بینی؟

  • برای تمرین به یک لینوکس واقعی نیاز داری؛ نه پاک کردن سیستم‌عاملت.
  • ویندوز: WSL2 (wsl --install، wsl -l -v، wsl --set-default-version 2). مک/ویندوز: Multipass یا ماشین مجازی. هر جا: کانتینر. برای شبیه‌سازی سرور واقعی: VPS.
  • Ubuntu 24.04 LTS را انتخاب کن تا دستورها با دوره یکی باشند.
  • بعد از نصب، با یک اسکریپت ساده (مثال ۶) درستی محیط را بسنج.
  • پرامپت ali@pc:~$ یعنی کاربر، ماشین، پوشه‌ی فعلی و علامت کاربر عادی.
  • دستورهای ویندوز (wsl ...) فقط در PowerShell‌اند، نه در لینوکس.
برگه‌ی تقلب این درس
دستورکاری که می‌کند
wsl --installنصب WSL و Ubuntu (PowerShell ادمین) — نمونه
wsl -l -vفهرست توزیع‌ها و نسخه‌ی WSL — نمونه
wsl --set-default-version 2نسخه‌ی ۲ پیش‌فرض — نمونه
multipass launch 24.04 --name labساخت Ubuntu با Multipass — نمونه
docker run -it --rm ubuntu:24.04 bashیک Ubuntu یک‌بارمصرف
whoamiنام کاربر فعلی
hostnameنام ماشین
pwdپوشه‌ی فعلی
echo $HOMEپوشه‌ی خانه