Updated: 1 year ago

WSL: لینوکس در پنجره‌ها! 🪟+🐧

🤔 این WSL چیه؟

WSL مخففِ Windows Subsystem for Linux یا «زیرسیستمِ ویندوز برای لینوکس»ـه!

به‌طورِ خلاصه، کارِش اینه‌که میاد هسته‌ی لینوکس رو به ویندوز اضافه می‌کنه تا ما بتونیم هم‌زمان، بدونِ نیاز به نصبِ ماشین مجازی یا بوتِ دوگانه، دستورات و پکیج‌های لینوکسی رو در ویندوز استفاده کنیم!

قبل از این‌که بریم سراغِ نصب و کار کردن با WSL، اگه دوست داشتین دو بخشِ بعدی که به توضیحِ لینوکس و چراییِ استفاده از اون و WSL می‌پردازه رو مطالعه کنین. پیش از ادامه هم بگم که این آموزش رو طوری نوشتم که حتی اگه جز روشن و خاموش کردن کامپیوتر هم چیزی بلد نباشین ولی کمی زبان انگلیسی بدونین، بازم می‌تونین انجامش بدین! از دور ممکنه پیچیده به‌نظر بیاد ولی همه‌چی‌و توضیح دادم و خیلی ساده‌ست!

🐧 لینوکس چیه و چرا لینوکس؟

برخلافِ ویندوز که یک سیستم عامل تجاریه و برای استفاده از اون باید لایسنسش‌و خریداری کنیم تا از کمپانی‌ش و برنامه‌نویس‌هاش حمایت کنیم (بهشون پول بدیم تا سیستم عامل بهتری بسازن!)، لینوکس یه سیستم عامل متن‌باز و کاملاً رایگانه که برنامه‌نویس‌های مختلفی از سرتاسر دنیا، امنیت و امکانات اون‌و بهبود می‌دن! به‌همین دلیل، تقریباً تمام دانشگاه‌ها و مراکز تحقیقاتی دنیا، از لینوکس استفاده می‌کنن تا هزینه بیشتری رو متحمل نشن!

در لینوکس، Distribution یا توزیع‌های مختلفی توسعه پیدا کردن که هرکدوم برای هدف خاصی طراحی شدن، مثلاً توزیعِ Ubuntu برای استفاده‌ی روزمره توسط تمام اشخاص و توزیعِ Kali برای اهداف هک و امنیت استفاده می‌شه. تقریباً تمام این توزیع‌ها روی WSL هم قابل نصب هستن ولی ممکنه محدودیت‌هایی داشته باشن.

چه برنامه‌نویس باشیم یا نه، لینوکس طیفِ گسترده‌ای از ابزارهای رایگان و متن‌باز رو در اختیارمون می‌ذاره! از ابزارهای ساده و روزمره اما قدرتمند مثلِ دستورات grep و sed که بهمون اجازه می‌دن جست‌وجوهایی رو درونِ فایل‌ها انجام بدیم و تغییرات مدنظرمون‌و اِعمال کنیم تا ابزارهای تحلیل داده‌های زیستی و ژنتیکی مثلِ SAMTools که فقط روی لینوکس نصب می‌شن! اگر هم که برنامه‌نویس باشی، لازم نیست بگم که ویندوز، خیلی از ابزارهای لازم‌و در اختیارمون نمی‌ذاره! شاید مهم‌ترینش Docker باشه اما خیلی از ابزارهای دیگه هم نسخه ویندوزی‌شون به خوبیِ لینوکس نیست! مخصوصاً توی عصرِ هوش مصنوعی و استفاده از پردازنده‌های گرافیکی، با ویندوز، اصلاً نمی‌تونیم از قدرت کاملِ برخی سخت‌افزارها استفاده کنیم...!

جالبه بدونین حتی جنگنده F-35 و پهپادها و ماهواره‌ها و دکل‌های مخابراتی و خودپردازها و ماشین‌های خودران هم از نسخه‌های شخصی‌سازی‌شده‌ای از لینوکس استفاده می‌کنن! درواقع، کُلِ دنیا حولِ محورِ لینوکس می‌چرخه و هیچ برنامه‌نویسِ حرفه‌ای وجود نداره که روزانه با دستوراتِ لینوکسی سر و کار نداشته باشه!

پس: اگه می‌خواین یه‌سری کارهاتون سریع پیش بره، توانایی‌های کامپیوتریِ خودتون‌و به کارفرما ثابت کنین، کار با سِرورهای لینوکسی رو یاد بگیرین، بتونین با یه سیستم عامل جهانی کار کنین و آماده باشین برای مهاجرت... یا حتی وارد حوزه‌ی هک و امنیت بشین و داده‌های اینترنت و وای‌فای‌های اطراف‌و آنالیز کنین! نیازه که با سیستم عامل لینوکس آشنا باشین!

وَ چی بهتر از این‌که بتونین تغییراتِ روی فایل‌های ویندوزی رو بدونِ دردسرها و پردازش‌های سنگین ماشین مجازی مثل VMWare، با یه خطِ فرمانِ لینوکسیِ متصل به ویندوز انجام بدین؟!

❔ چرا از WSL استفاده کنیم؟

یا پرسشِ دقیق‌تر: چرا از خطِ فرمانِ لینوکس در ویندوز استفاده کنیم؟!

به‌دلایلِ زیر:

  • سهولت نصب و استفاده
  • صرفه‌جویی در مصرف منابع سخت‌افزاری در مقایسه با ماشین‌های مجازی
  • دسترسی به فایل‌ها و پوشه‌های ویندوز
  • از پیش نصب‌بودن محیط برنامه‌نویسی پایتون
  • امکان استفاده از دستورات لینوکسی روی ویندوز مانند sed و grep و awk برای جستجو و ایجاد تغییرات در فایل‌ها
  • امکانِ استفاده از دستور قدرتمندِ wget به‌جایِ دانلودر مرورگر
  • امکان استفاده از دستورات قدرتمند nmap و traceroute برای آنالیز شبکه
  • امکان استفاده از ابزارهای حرفه‌ای حوزه‌ی کامپیوتر و برنامه‌نویسی مانند Docker و NixOS
  • امکان اجرای برنامه‌های گرافیکی لینوکسی درون ویندوز

🧑‍💻 نصب WSL

فعال‌سازی Virtualization در BIOS

برایِ نصبِ WSL، باید گزینه‌ی Virtualization رو از بخشِ BIOS کامپیوترت فعال کنی؛ اگه از VMware استفاده می‌کنی، احتمالاً این مورد واست فعاله؛ برای این‌که ببینیم این قابلیت فعاله یا نه کافیه یه ترمینالِ PowerShell با دسترسی Administrator باز کنی! (می‌تونی با فشردنِ کلیدهای ترکیبیِ Win + R و نوشتنِ powershell توی کادر، وَ بعدش زدنِ کلیدهای ترکیبیِ Ctrl + Shift + Enter و انتخابِ Yes ، این‌کارو انجام بدی)، کُد زیر رو بنویس و Enter بزن:

Get-ComputerInfo -property "HyperV*"

اگه خروجی شبیه زیر بود، فعاله:

HyperVisorPresent: True

اگه فعال نیست، باید متنِ زیر رو همراه با مدلِ مادِربُردِ کامپیوترت توی گوگل سرچ کنی و آموزشش‌و انجام بدی، می‌تونی از YouTube هم ببینی یا از هوش مصنوعی بپرسی:

Step-by-step guide with images to enable BIOS virtualization on ASUS Z890

مثلاً این سایت یه راهنمایی کلی نوشته و این هم راهنمایی فعال‌سازی Virtualization در سایت اصلی ASUS هست؛ همین‌طور سایت اصلی مایکروسافت که لینک آموزش در مادربردهای مختلف رو قرار داده. چون مدل مادبردها متفاوته، آموزش خاصی در این‌باره ننوشتم.

نصب WSL1

زیرسیستمِ ویندوز برای لینوکس، دو نسخه داره که نسخه دوم به‌روزتر و بهتره ولی فقط روی بعضی از نسخه‌های ویندوز جواب می‌ده! ابتدا نسخه اول رو نصب می‌کنیم و بعد ارتقاءش می‌دیم.

برای نصب WSL روی ویندوز، کافیه یه ترمینالِ PowerShell با دسترسی Administrator باز کنی! (مجدداً مثل بالا، می‌تونی با فشردنِ کلیدهای ترکیبیِ Win + R و نوشتنِ powershell توی کادر، وَ بعدش زدنِ کلیدهای ترکیبیِ Ctrl + Shift + Enter و انتخابِ Yes ، این‌کارو انجام بدی).

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

dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
Enable VMP and WSL Features

به‌جایِ اسکریپت، می‌تونی مورد زیر رو توی ویندوز جستجو و باز کنی و توی کادرِ بازشده، ببینی گزینه‌های Virtual Machine Platform و Windows Subsystem for Linux تیک خوردن یا نه!:

Turn Windows features on or off
Check windows features manually

حالا باید یک‌بار سیستم رو ری‌استارت کنی تا تغییرات اِعمال بشن.

Restart-Computer

وقتی کامپیوتر روشن شد، با روشی که بالاتر توضیح داده شد، مجدداً یه پنجره‌ی PowerShell با دسترسی Administrator باز کن و دستورِ زیر رو اجرا کن تا WSL نصب بشه (بدونِ دانلودِ توزیعِ پیش‌فرض که جدیدترین نسخه اوبونتو یا Ubuntu 24.04 هست):

wsl.exe --install --no-distribution

حالا باید یه توزیعِ لینوکسی روی WSL نصب کنیم، اما قبلش بهتره WSL رو به نسخه دوم ارتقاء بدیم!

ارتقاء به WSL2

نسخه ابتدایی WSL که نصب کردیم، یه‌سری کمبودها داره، مثلاً نمی‌تونه از systemd استفاده کنه و یه‌سری از برنامه‌ها مثل Docker نمی‌تونن ازش به‌خوبی استفاده کنن! البته برای نصبِ نسخه دوم هم، مراحل ابتدایی باید طی می‌شد. پس می‌ریم برای ارتقاء به نسخه دوم که این مشکلات رو برطرف کرده...

اول بذار چک کنیم ببینیم نسخه ویندوزت از WSL2 پشتیبانی می‌کنه یا نه!

برای این‌کار، کلیدهای ترکیبی Win + R رو بزن و داخل کادر بنویس winver و Enter رو بزن، توی پنجره باز شده، ببین شماره‌ی Build بیشتر از عددِ 18362.1049 هست یا نه، اگه همین یا بیشتر بود، می‌تونی WSL2 رو نصب کنی! 🎉 اگه نه، ویندوزت نیاز به آپدیت داره؛ چک کن ببین براش آپدیت اومده یا نه و دوباره امتحان کن. البته اگه سیستمت از WSL2 پشتیبانی نکرد هم می‌تونی با WSL1 که بالاتر نصب کردیم، همچنان با لینوکس در محیط ویندوز کار کنی! ادامه آموزش رو بخون.

Check Windows build number compatibility

برای فعال‌سازی WSL2 فقط کافیه متن زیرو توی پاوِرشِل با دسترسی ادمین اجرا کنی:

wsl.exe --set-default-version 2

وقتی فعال‌سازی WSL2 کامل شد، متنی مشابه متن زیر می‌بینی:

For information on key differences with WSL 2 please visit https://aka.ms/wsl2
The operation completed successfully.

نصب یک توزیع

بعد از نصب موفقیت‌آمیزِ WSL، حالا می‌تونیم لیستی از توزیع‌های مختلف لینوکس که WSL ازشون پشتیبانی می‌کنه رو ببینیم:

wsl.exe --list --online

این‌جا نسخه پیش‌فرض که Ubuntu 24.04 هست رو نصب می‌کنیم ولی می‌تونی هر توزیع و نسخه‌ای که دوست داشتی نصب کنی!:

wsl.exe --install -d Ubuntu

توزیع موردنظرمون با موفقیت نصب شد! 🎉

حالا باید وارد WSL بشیم و یه اکانت بسازیم، با اجرای دستور زیر، ابتدا باید یه نام کاربری و بعدش یه رمز عبور انتخاب کنیم:

wsl

دیگه تمومه! تبریک می‌گم، با موفقیت WSL رو نصب کردی! 😃🐧🎉

WSL Successfully installed

🌚 ترمینالِ بهتر برای ویندوز​

محیطِ قدیمیِ PowerShell و cmd و Ubuntu، امکانِ شخصی‌سازی چندانی بهمون نمی‌دن؛ بهتره ترمینالِ جدید ویندوز رو نصب کنی! (روی ویندوز 11 به‌صورت پیش‌فرض نصبه):

Windows Terminal - Free download and install on Windows | Microsoft Store

🐧🖥️ شروع کار با لینوکس در ویندوز

اینجا فقط به چند مورد ابتدایی و کارِ جالبی که می‌تونیم با لینوکس بکنیم اشاره می‌کنم و به‌جای توضیحِ کامل دستورات، موارد مهم لینوکس رو توضیح می‌دم و به جزئیات دستورات نمی‌پردازم؛ البته این دستورات امن هستن، می‌تونی دستور رو کپی کنی و از هوش مصنوعی بپرسی (اگه تازه‌واردی و به لینوکس علاقه داری، بهتره قبل از اجرای دستورها، به‌خصوص دستورات خطرناک مثل rm ، جزئیاتش‌و از هوش مصنوعی بپرسی!)...

برای مشاهده توضیحات هر دستور، می‌تونی manual اون‌و بخونی! مثلاً توضیحاتِ دستورِ touch (خروج با زدن دکمه q ):

man touch

برای لغو اجرای هر دستور، کافیه کلیدهای ترکیبیِ Ctrl + C رو فشار بدی.

توی لینوکس، دستورِ sudo برای اجرای دستورات حساس سیستمی استفاده می‌شه که به دستورِ root معروفه، مثلِ همون Administrator خودمون توی ویندوز؛ درواقع با این دستور، امکان دسترسی به تمام بخش‌های سیستم عامل فراهم می‌شه. با اجرای دستوری با دسترسی sudo ، سیستم از ما پسوردی که موقع ساخت اکانتمون گذاشتیم می‌خواد و موقع نوشتنش هم برای حفظ امنیت، نمی‌تونیم ببینیم چی می‌نویسیم! برای اجرای دستورات به‌ترتیب، از && (اجرای دستور بعدی نیاز به اجرای موفق دستور قبلی داره) یا ; (اجرای دستور بعدی حتی درصورت خطای دستور قبلی انجام می‌شه) استفاده می‌کنیم (وقتی می‌خوایم دو دستور بی‌ربط به همدیگه رو بلافاصله بعد از دستور قبلی اجرا کنیم).

فایل-سیستمِ WSL در ویندوز، با مسیرِ اصلی ویندوز متفاوته و درواقع یک درایوِ مَجازی برای خودش داره که سریع‌تر و بهینه‌تر از ویندوزه! یعنی اگه بخوایم توی محیط ویندوز، از طریقِ WSL کدنویسی کنیم، کُندتر از کدنویسی در محیط WSL انجام می‌شه (برای اسکریپت‌های ساده‌ای که در ادامه بهشون اشاره می‌کنم، این کُندی مشهود نیست).

ارتقاء کتابخانه‌های لینوکس

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

sudo apt update && sudo apt upgrade -y

تغییر مسیر به بخش‌های مختلف ویندوز و لینوکس

به‌صورت پیش‌فرض، WSL مسیرِ خودش رو در ویندوز داره! نامِ درایوهای ویندوزی قابل دسترسی توی WSL، از طریق اسکریپتِ زیر قابل مشاهده‌ست:

ls /mnt

مثلاً برای رفتن به درایو C:

cd /mnt/c/

برای رفتن به دسکتاپ ویندوز در WSL، باید اسکریپتِ زیر رو در WSL اجرا کنیم؛ این اسکریپت، میاد با کمکِ PowerShell، نام کاربری ویندوزی شما رو درمیاره و پاس می‌ده به لینوکس!:

cd /mnt/c/Users/$(powershell.exe '$env:USERNAME' | tr -d '\r')/Desktop

یا اگه نام کاربری ویندوزی خودتون رو می‌دونین:

cd /mnt/c/Users/MYUSERNAME/Desktop

تغییر مسیر به خانه WSL (علامتِ ~ به خانه اشاره داره):

cd ~

تغییر مسیر به ریشه‌ی سیستم (root) که با / بهش اشاره می‌شه (در این مسیر، اگه فایل یا فولدری رو نمی‌شناسین، تغییرش ندین!):

cd /

عملیات فایل‌ها

برای ساخت فایل و ذخیره‌سازیِ چیزی درون اون:

echo "Hello WSL! 😃🐧\nHow awesome you are! \nThank you @microsoft & ali! \nAli's channel: @TechNila\n6\n9\n4\n1\n1\n8\n2\n" > MYFILE.txt

مشاهده محتویات فایل درون ترمینال:

cat MYFILE.txt

تصحیح ترتیب شماره‌های ذکر شده درون فایل:

sed -n '/^[0-9]\+$/p' MYFILE.txt | sort -n | sed -i -e '/^[0-9]\+$/d' -e '${' -e 'r /dev/stdin' -e 'd' -e '}' MYFILE.txt && cat MYFILE.txt

استخراج نام‌های کاربری که با @ شروع شده‌اند از فایل:

awk '{for(i=1;i<=NF;i++) if ($i ~ /^@[a-zA-Z0-9_]+/) {gsub(/[^a-zA-Z0-9_]/,"",$i); print $i}}' MYFILE.txt

مشاهده محتویات فایل در برنامه Notepad ویندوز:

notepad.exe MYFILE.txt

جستجوی کلمه در فایل و نمایش شماره خطش:

grep -n "you" MYFILE.txt

حذف فایل (غیرقابل بازیابی):

rm MYFILE.txt

عملیات ابتدایی فولدرها

برای ساخت فولدر:

mkdir MyFolder

باز کردن مسیر کنونی در File Explorer ویندوز:

explorer.exe .

باز کردن فولدر ساخته شده در File Explorer:

explorer.exe MyFolder

حذف فولدر به‌صورت کامل:

rm -rf MyFolder

تست سرعت اینترنت

با نصب کتابخانه speedtest-cli :

sudo apt install speedtest-cli

و اجرای دستور زیر:

speedtest-cli --byte

دانلود فایل

با دستور زیر، حتی اگه وسطش اینترنتت قطع بشه، می‌تونی مطمئن بشی دانلود فایلت از اول شروع نمی‌شه! این کد برای تست نوشته شده و شروع به دانلود یه قسمت از انیمیشن ملوان زبل با حجم 2.9 گیگابایت می‌کنه!:

wget -c --timeout=60 --tries='inf' https://tile.loc.gov/storage-services/service/mbrs/ntscrm/00068306/00068306.mov

نمایش فایل‌هایی با حجم بالا

اسکریپتِ زیر، فایل‌هایی با حجم بیشتر از 100 مگابایت (+100M) در مسیرِ کنونی رو لیست می‌کنه!:

sudo find "$(pwd)" -type f -size +100M -exec sh -c 'du -h "$1" | sed "s/\t/: /"' _ {} \; 2>/dev/null

مشاهده دستگاه‌های متصل به شبکه

با نصب کتابخانه nmap می‌تونیم ببینیم چه تعداد دستگاه با چه آدرس‌هایی از وای‌فای‌مون استفاده می‌کنن:

sudo apt install nmap -y

و جستجوی شبکه:

nmap -sn 192.168.1.0/24

دستورات دیگر برای مطالعه بیشتر

کاربرد دستورات زیر رو از هوش مصنوعی بپرس و اگه به‌دردت می‌خوردن استفاده کن!

tree | traceroute | du | df | htop | ps | tmux | bg | rsync | curl | aria2

♻️ حذف WSL

⚠️ توجه کن که با این‌کار، تمام اطلاعات ذخیره‌شده روی WSL حذف می‌شه! اگه فقط می‌خوای موقتاً غیرفعالش کنی و اطلاعاتت باقی بمونه، فقط دو دستوری که با dism شروع می‌شن اجرا کن. یه پاوِرشِل با دسترسی ادمین باز کن! با دستور زیر، اطلاعات توزیع نصب‌شده‌ی لینوکس حذف می‌شه:

wsl --unregister Ubuntu

بعدش باید دو قابلیتی که برای WSL فعال کردی غیرفعال کنی و سیستم رو ری‌استارت کنی:

dism.exe /online /disable-feature /featurename:VirtualMachinePlatform /norestart
dism.exe /online /disable-feature /featurename:Microsoft-Windows-Subsystem-Linux /norestart

دیتای WSL معمولاً توی مسیر زیر ایجاد می‌شه و اول اسم فولدرش CanonicalGroupLimited.Ubuntu داره (متن زیرو وارد مسیر File Explorer ویندوزت بکن)، می‌تونی این فولدر هم حذف کنی:

%LOCALAPPDATA%\Packages\

Loading Giscus...