🤔 این 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 /norestartdism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
بهجایِ اسکریپت، میتونی مورد زیر رو توی ویندوز جستجو و باز کنی و توی کادرِ بازشده، ببینی گزینههای Virtual Machine Platform و Windows Subsystem for Linux تیک خوردن یا نه!:
Turn Windows features on or off
حالا باید یکبار سیستم رو ریاستارت کنی تا تغییرات اِعمال بشن.
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 که بالاتر نصب کردیم، همچنان با لینوکس در محیط ویندوز کار کنی! ادامه
آموزش رو بخون.

برای فعالسازی WSL2 فقط کافیه متن زیرو توی پاوِرشِل با دسترسی ادمین اجرا کنی:
wsl.exe --set-default-version 2وقتی فعالسازی WSL2 کامل شد، متنی مشابه متن زیر میبینی:
For information on key differences with WSL 2 please visit https://aka.ms/wsl2The operation completed successfully.نصب یک توزیع
بعد از نصب موفقیتآمیزِ WSL، حالا میتونیم لیستی از توزیعهای مختلف لینوکس که WSL ازشون پشتیبانی میکنه رو ببینیم:
wsl.exe --list --onlineاینجا نسخه پیشفرض که Ubuntu 24.04 هست رو نصب میکنیم ولی میتونی هر توزیع و نسخهای که دوست داشتی نصب کنی!:
wsl.exe --install -d Ubuntuتوزیع موردنظرمون با موفقیت نصب شد! 🎉
حالا باید وارد WSL بشیم و یه اکانت بسازیم، با اجرای دستور زیر، ابتدا باید یه نام کاربری و بعدش یه رمز عبور انتخاب کنیم:
wslدیگه تمومه! تبریک میگم، با موفقیت WSL رو نصب کردی! 😃🐧🎉

🌚 ترمینالِ بهتر برای ویندوز
محیطِ قدیمیِ 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 /norestartdism.exe /online /disable-feature /featurename:Microsoft-Windows-Subsystem-Linux /norestartدیتای WSL معمولاً توی مسیر زیر ایجاد میشه و اول اسم فولدرش CanonicalGroupLimited.Ubuntu
داره (متن زیرو وارد مسیر File Explorer ویندوزت بکن)، میتونی این فولدر هم حذف کنی:
%LOCALAPPDATA%\Packages\