<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>WSL2 on kenji.blog</title><link>http://kenji.blog/hi/tags/wsl2/</link><description>Recent content in WSL2 on kenji.blog</description><generator>Hugo -- gohugo.io</generator><language>hi</language><copyright>kenjinote</copyright><lastBuildDate>Sun, 13 Sep 2026 07:00:00 +0900</lastBuildDate><atom:link href="http://kenji.blog/hi/tags/wsl2/index.xml" rel="self" type="application/rss+xml"/><item><title>Hyper-V vs WSL2: Windows पर वर्चुअलाइजेशन तकनीक की तुलना</title><link>http://kenji.blog/hi/p/hyper-v-vs-wsl2-windows-virtualization/</link><pubDate>Sun, 13 Sep 2026 07:00:00 +0900</pubDate><guid>http://kenji.blog/hi/p/hyper-v-vs-wsl2-windows-virtualization/</guid><description>&lt;img src="http://kenji.blog/p/hyper-v-vs-wsl2-windows-virtualization/img/eyecatch.jpg" alt="Featured image of post Hyper-V vs WSL2: Windows पर वर्चुअलाइजेशन तकनीक की तुलना" />&lt;h2 id="1-परचय-windows-म-वरचअलइजशन-क-वकस">1. परिचय: Windows में वर्चुअलाइजेशन का विकास
&lt;/h2>&lt;p>Windows प्लेटफॉर्म में वर्चुअलाइजेशन तकनीक ने पिछले कुछ दशकों में नाटकीय विकास देखा है। पहले, थर्ड-पार्टी टाइप 2 हाइपरवाइज़र (जैसे VMware Workstation या VirtualBox) मुख्यधारा में थे, लेकिन जब से Microsoft ने Windows Server 2008 में &amp;ldquo;Hyper-V&amp;rdquo; पेश किया है, तब से टाइप 1 हाइपरवाइज़र को डेस्कटॉप OS जैसे Windows 10/11 में भी शामिल किया जाने लगा है।&lt;/p>
&lt;p>और हाल के वर्षों में, डेवलपर्स के बीच सबसे ज्यादा ध्यान &amp;ldquo;WSL2 (Windows Subsystem for Linux 2)&amp;rdquo; पर दिया गया है। जबकि WSL1 सिस्टम कॉल ट्रांसलेशन पर निर्भर था, WSL2 ने Hyper-V की तकनीक को लागू करते हुए एक &amp;ldquo;लाइटवेट यूटिलिटी VM (Lightweight Utility VM)&amp;rdquo; अपनाया है, जिससे पूर्ण Linux संगतता और प्रदर्शन में भारी सुधार हुआ है।&lt;/p>
&lt;p>इस लेख में, हम इन दो शक्तिशाली वर्चुअलाइजेशन तकनीकों - पूर्ण विशेषताओं वाले &amp;ldquo;Hyper-V&amp;rdquo; और डेवलपर अनुभव पर केंद्रित &amp;ldquo;WSL2&amp;rdquo; - के आर्किटेक्चर, प्रदर्शन (CPU, मेमोरी, डिस्क I/O), नेटवर्क कॉन्फ़िगरेशन और सर्वोत्तम उपयोग के मामलों (यूज़ केस) की गहराई से तकनीकी जानकारी के साथ पूरी तरह से तुलना और व्याख्या करेंगे।&lt;/p>
&lt;hr>
&lt;h2 id="2-हइपरवइजर-क-बनयद-सदधत-और-आरकटकचर-क-तलन">2. हाइपरवाइज़र का बुनियादी सिद्धांत और आर्किटेक्चर की तुलना
&lt;/h2>&lt;p>वर्चुअलाइजेशन तकनीक को समझने के लिए हाइपरवाइज़र (वर्चुअल मशीन मॉनिटर: VMM) के प्रकार का वर्गीकरण बहुत आवश्यक है।&lt;/p>
&lt;h3 id="21-type-1-और-type-2-हइपरवइजर-क-बच-अतर">2.1. Type 1 और Type 2 हाइपरवाइज़र के बीच अंतर
&lt;/h3>&lt;p>हाइपरवाइज़र एक सॉफ़्टवेयर लेयर है जो हार्डवेयर एक्सेस को एब्स्ट्रेक्ट करती है और कई OS (गेस्ट OS) को एक साथ एक ही भौतिक मशीन पर चलाने की अनुमति देती है।&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Type 1 (बेयर-मेटल प्रकार)&lt;/strong>: सीधे हार्डवेयर पर चलता है। इसमें होस्ट OS की कोई अवधारणा नहीं होती (हालांकि कभी-कभी विशेषाधिकार प्राप्त एक मैनेजमेंट OS हो सकता है), इसका ओवरहेड बहुत कम होता है, और यह उच्च प्रदर्शन और सुरक्षा प्रदान करता है। उदाहरण: Hyper-V, VMware ESXi, Xen।&lt;/li>
&lt;li>&lt;strong>Type 2 (होस्ट प्रकार)&lt;/strong>: होस्ट OS (जैसे Windows या macOS) के ऊपर एक एप्लिकेशन के रूप में चलता है। सभी हार्डवेयर एक्सेस होस्ट OS के माध्यम से होते हैं, जिससे ओवरहेड बढ़ जाता है। उदाहरण: VMware Workstation, Oracle VirtualBox।&lt;/li>
&lt;/ul>
&lt;p>Windows का Hyper-V एक पूर्ण &lt;strong>Type 1 हाइपरवाइज़र&lt;/strong> है। जब आप Hyper-V को सक्षम करते हैं, तो वास्तव में जो Windows OS आप उपयोग कर रहे हैं वह भी &amp;ldquo;रूट पार्टीशन (Root Partition)&amp;rdquo; नामक एक विशेष वर्चुअल मशीन के अंदर चलने लगता है।&lt;/p>
&lt;h3 id="22-hyper-v-क-आरकटकचर-ववरण">2.2. Hyper-V का आर्किटेक्चर विवरण
&lt;/h3>&lt;p>Hyper-V का आर्किटेक्चर एक माइक्रो-कर्नेल डिज़ाइन को अपनाता है और पार्टीशन (Partition) नामक लॉजिकल अलगाव इकाइयों पर आधारित होता है।&lt;/p>
&lt;pre class="mermaid">
graph TD
A[&amp;#34;हार्डवेयर (CPU, RAM, Disk, NIC)&amp;#34;] --&amp;gt; B[&amp;#34;Windows हाइपरवाइज़र (Ring -1)&amp;#34;]
B --&amp;gt; C[&amp;#34;रूट पार्टीशन (Windows OS)&amp;#34;]
B --&amp;gt; D[&amp;#34;चाइल्ड पार्टीशन 1 (Windows VM)&amp;#34;]
B --&amp;gt; E[&amp;#34;चाइल्ड पार्टीशन 2 (Linux VM)&amp;#34;]
C --&amp;gt; F[&amp;#34;VMBus (वर्चुअल मशीन बस)&amp;#34;]
D --&amp;gt; F
E --&amp;gt; F
C --&amp;gt; G[&amp;#34;VID (वर्चुअलाइजेशन इंफ्रास्ट्रक्चर ड्राइवर)&amp;#34;]
C --&amp;gt; H[&amp;#34;VMWP.exe (वर्कर प्रोसेस)&amp;#34;]
&lt;/pre>
&lt;ul>
&lt;li>&lt;strong>Windows Hypervisor&lt;/strong>: CPU के सबसे उच्च विशेषाधिकार प्राप्त स्तर (Ring -1 या VMX Root Mode) में चलता है, और केवल मेमोरी आवंटन और CPU शेड्यूलिंग को संभालता है। इसमें डिवाइस ड्राइवर शामिल नहीं होते हैं।&lt;/li>
&lt;li>&lt;strong>Root Partition&lt;/strong>: वह पार्टीशन जिसमें होस्ट Windows OS चलता है। इसमें सभी डिवाइस ड्राइवर होते हैं और यह सीधे हार्डवेयर को नियंत्रित करता है। यह चाइल्ड पार्टीशन के प्रबंधन के लिए कार्य (जैसे WMI प्रोवाइडर और VMWP.exe) भी प्रदान करता है।&lt;/li>
&lt;li>&lt;strong>Child Partition&lt;/strong>: वह पार्टीशन जिसमें गेस्ट OS चलता है। इसे सीधे हार्डवेयर तक पहुंचने की अनुमति नहीं है, और यह I/O रिक्वेस्ट (सिंथेटिक I/O) को रूट पार्टीशन में &amp;ldquo;VMBus&amp;rdquo; नामक लॉजिकल मेमोरी-शेयर्ड बस के माध्यम से भेजता है।&lt;/li>
&lt;/ul>
&lt;h3 id="23-wsl2-और-lightweight-utility-vm-क-कम-करन-क-तरक">2.3. WSL2 और Lightweight Utility VM का काम करने का तरीका
&lt;/h3>&lt;p>WSL2 उसी Type 1 हाइपरवाइज़र बेस तकनीक का उपयोग करता है जिसका Hyper-V करता है, लेकिन यह पूर्ण-सुविधा वाले Hyper-V वर्चुअल मशीन के बजाय &amp;ldquo;वर्चुअल मशीन प्लेटफ़ॉर्म (Virtual Machine Platform: VMP)&amp;rdquo; नामक एक सबसेट सुविधा का उपयोग करता है।&lt;/p>
&lt;p>WSL2 में उपयोग किए जाने वाले &amp;ldquo;लाइटवेट यूटिलिटी VM (Lightweight Utility VM)&amp;rdquo; में पारंपरिक VM के लेगेसी हार्डवेयर एमुलेशन (जैसे वर्चुअल BIOS और वर्चुअल मदरबोर्ड) को पूरी तरह से हटा दिया गया है।&lt;/p>
&lt;pre class="mermaid">
graph TD
A[&amp;#34;Windows होस्ट OS (यूज़र स्पेस)&amp;#34;]
B[&amp;#34;NTFS फाइल सिस्टम&amp;#34;]
C[&amp;#34;9P प्रोटोकॉल सर्वर (Plan 9)&amp;#34;]
D[&amp;#34;लाइटवेट यूटिलिटी VM (Linux कर्नेल)&amp;#34;]
E[&amp;#34;ext4.vhdx (वर्चुअल डिस्क)&amp;#34;]
F[&amp;#34;Linux यूज़र स्पेस (WSL2 डिस्ट्रिब्यूशन)&amp;#34;]
A --&amp;gt; C
C --&amp;gt;| क्रॉस-OS फाइल शेयरिंग | D
D --&amp;gt; E
D --&amp;gt; F
&lt;/pre>
&lt;p>WSL2 की सबसे बड़ी विशेषता इसकी &lt;strong>स्टार्टअप गति&lt;/strong> और &lt;strong>होस्ट OS के साथ निर्बाध एकीकरण&lt;/strong> है। Linux कर्नेल कुछ सेकंड से भी कम समय में बूट हो जाता है और Plan 9 के &lt;code>9P&lt;/code> नेटवर्क फाइल सिस्टम प्रोटोकॉल के माध्यम से Windows फ़ाइल सिस्टम (NTFS) तक पहुंचता है।&lt;/p>
&lt;hr>
&lt;h2 id="3-परदरशन-क-सपरण-वशलषण-गणन-ससधन-और-io">3. प्रदर्शन का संपूर्ण विश्लेषण: गणना संसाधन और I/O
&lt;/h2>&lt;p>वर्चुअल मशीन के प्रदर्शन को CPU, मेमोरी और डिस्क I/O घटकों में ओवरहेड के योग के रूप में दर्शाया जाता है।&lt;/p>
&lt;h3 id="31-cpu-और-कनटकसट-सवच-ओवरहड">3.1. CPU और कॉन्टेक्स्ट स्विच ओवरहेड
&lt;/h3>&lt;p>Hyper-V और WSL2 दोनों हार्डवेयर-असिस्टेड वर्चुअलाइजेशन (Intel VT-x / AMD-V) का उपयोग करते हैं। CPU निर्देश मूल रूप से नेटिव गति से निष्पादित होते हैं, लेकिन जब विशेषाधिकार प्राप्त निर्देश या I/O ऑपरेशन निष्पादित होते हैं, तो &amp;ldquo;VM Exit&amp;rdquo; नामक एक इंटरप्ट उत्पन्न होता है, जो हाइपरवाइज़र पर कॉन्टेक्स्ट स्विच करता है।&lt;/p>
&lt;p>इस समय CPU ओवरहेड $T_{overhead}$ को निम्नलिखित गणितीय मॉडल द्वारा दर्शाया जा सकता है:&lt;/p>
$$ T_{overhead} = \sum_{i=1}^{N} (t_{vm\_exit} + t_{hypercall\_process} + t_{vm\_entry}) $$&lt;p>जहाँ:&lt;/p>
&lt;ul>
&lt;li>$N$: प्रति यूनिट समय में VM Exit होने की संख्या&lt;/li>
&lt;li>$t_{vm\_exit}$: गेस्ट से हाइपरवाइज़र तक का ट्रांज़िशन समय&lt;/li>
&lt;li>$t_{hypercall\_process}$: VMBus के माध्यम से I/O प्रोसेसिंग या इंटरप्ट का प्रोसेसिंग समय&lt;/li>
&lt;li>$t_{vm\_entry}$: हाइपरवाइज़र से गेस्ट तक वापसी का समय&lt;/li>
&lt;/ul>
&lt;p>चूँकि WSL2 में लेगेसी एमुलेशन नहीं है, इसलिए $t_{hypercall\_process}$ अत्यधिक अनुकूलित और बहुत छोटा है। इसलिए, शुद्ध CPU गणनाओं (जैसे कर्नेल को संकलित करना या मशीन लर्निंग मॉडल इनफेरेंस) में, बेयर-मेटल वातावरण की तुलना में प्रदर्शन में गिरावट कुछ प्रतिशत के भीतर ही रहती है।&lt;/p>
&lt;h3 id="32-ममर-आवटन-क-ततर">3.2. मेमोरी आवंटन का तंत्र
&lt;/h3>&lt;p>जब मेमोरी प्रबंधन के तरीकों की बात आती है, तो दोनों के बीच स्पष्ट रूप से अलग-अलग डिज़ाइन दर्शन होते हैं।&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Hyper-V (Dynamic Memory)&lt;/strong>: गेस्ट VM की मेमोरी मांग के अनुसार, रूट पार्टीशन गतिशील रूप से मेमोरी आवंटित और पुनर्प्राप्त (रीक्लेम) करता है। हालाँकि, जब तक सिस्टम में मेमोरी की कमी नধি न हो, गेस्ट OS के भीतर पेज कैशे के रूप में सुरक्षित मेमोरी आसानी से रिलीज़ नहीं होती है।&lt;/li>
&lt;li>&lt;strong>WSL2 (डायनेमिक मेमोरी रिक्लेम)&lt;/strong>: WSL2 का अपना अनूठा तंत्र है, जो नियमित रूप से अनावश्यक मेमोरी (कैशे सहित) को Linux VM के भीतर से Windows होस्ट को वापस (Reclaim) कर देता है। शुरुआती WSL2 में एक समस्या थी जहाँ Linux पेज कैशे Windows मेमोरी की खपत कर लेता था (Vmmem प्रक्रिया का फूलना), लेकिन इसे अब कर्नेल पैच के माध्यम से सुधार दिया गया है।&lt;/li>
&lt;/ul>
&lt;h3 id="33-डसक-io-क-वशषतए-vhdx-vs-ext4vhdx">3.3. डिस्क I/O की विशेषताएं (VHDX vs ext4.vhdx)
&lt;/h3>&lt;p>वर्चुअल मशीन के प्रदर्शन में डिस्क I/O सबसे आसानी से बॉटलनेक (अड़चन) बन सकता है।&lt;/p>
&lt;p>I/O लेटेंसी $L_{total}$ की गणना इस प्रकार की जाती है:&lt;/p>
$$ L_{total} = L_{guest\_fs} + L_{vmbus} + L_{host\_fs} + L_{physical\_disk} $$&lt;p>&lt;strong>Hyper-V के मामले में&lt;/strong>:
सामान्य Hyper-V गेस्ट &lt;code>VHDX&lt;/code> फॉर्मेट वर्चुअल डिस्क का उपयोग करते हैं। गेस्ट OS (ext4 या NTFS) के अंदर फाइल सिस्टम से जारी I/O रिक्वेस्ट VMBus के ब्लॉक डिवाइस स्टोरेज ड्राइवर (storvsc) से होकर गुजरती है और Windows पर NTFS पर VHDX फाइल तक एक्सेस के रूप में प्रोसेस होती है।&lt;/p>
&lt;p>&lt;strong>WSL2 के मामले में&lt;/strong>:
WSL2 के Linux डिस्ट्रिब्यूशन एक समर्पित &lt;code>ext4.vhdx&lt;/code> फाइल के भीतर निर्मित नेटिव ext4 फाइल सिस्टम पर चलते हैं। Linux के भीतर फाइल संचालन (जैसे &lt;code>~&lt;/code> डायरेक्टरी में) उपरोक्त Hyper-V के समान नेटिव प्रदर्शन प्रदान करते हैं।
हालाँकि, &lt;strong>जब WSL2 Linux से Windows साइड फाइलों (जैसे &lt;code>/mnt/c/&lt;/code>) तक पहुँचते हैं&lt;/strong>, या इसके विपरीत, तो प्रक्रिया काफी अलग होती है। इस क्रॉस-OS एक्सेस के लिए &lt;code>9P (Plan 9 File System Protocol)&lt;/code> का उपयोग किया जाता है।&lt;/p>
$$ L_{cross\_os} = L_{9p\_client} + L_{socket\_transfer} + L_{9p\_server} + L_{ntfs} $$&lt;p>इस 9P प्रोटोकॉल के माध्यम से एक्सेस करने पर सीरियलाइज़ेशन का बड़ा ओवरहेड होता है, और ऐसे उपयोगों के लिए जहाँ बड़ी संख्या में छोटी फ़ाइलों को पढ़ा और लिखा जाता है (उदाहरण के लिए: Windows-साइड डायरेक्टरी में स्थित Node.js प्रोजेक्ट पर &lt;code>npm install&lt;/code> या Git संचालन), प्रदर्शन में काफी गिरावट आती है (कभी-कभी 10 गुना से अधिक देरी)।
इसलिए, &lt;strong>WSL2 का उपयोग करते समय, यह सुनिश्चित करना एक मूल नियम है कि प्रोजेक्ट फाइलें Linux के नेटिव फाइल सिस्टम (जैसे &lt;code>~/&lt;/code> के तहत) में रखी जाएँ&lt;/strong>।&lt;/p>
&lt;hr>
&lt;h2 id="4-नटवरक-सरचन-nat-default-switch-bridged">4. नेटवर्क संरचना: NAT, Default Switch, Bridged
&lt;/h2>&lt;p>नेटवर्क क्षमताओं का लचीलापन Hyper-V और WSL2 के बीच सबसे बड़े अंतरों में से एक है।&lt;/p>
&lt;h3 id="41-wsl2-क-नटवरक-nat-आधरत">4.1. WSL2 का नेटवर्क (NAT-आधारित)
&lt;/h3>&lt;p>WSL2 का नेटवर्क डिफ़ॉल्ट रूप से Hyper-V की वर्चुअल स्विच तकनीक का उपयोग करके &amp;ldquo;NAT (Network Address Translation)&amp;rdquo; कॉन्फ़िगरेशन में सेट होता है।
Linux VM को स्वचालित रूप से एक निजी IP एड्रेस (जैसे: &lt;code>172.20.x.x&lt;/code>) सौंपा जाता है जो Windows होस्ट से अलग होता है। एक बिल्ट-इन तंत्र है जो Windows होस्ट से &lt;code>localhost&lt;/code> को WSL2 के भीतर शुरू की गई सेवाओं (पोर्ट्स) पर फॉरवर्ड करता है, जिससे डेवलपर्स नेटवर्क के बारे में चिंता किए बिना वेब सर्वर आदि का परीक्षण कर सकते हैं।&lt;/p>
&lt;p>हाल के वर्षों में, WSL2 के प्रीव्यू वर्जन में &amp;ldquo;Mirrored मोड&amp;rdquo; नामक एक नया नेटवर्क मोड पेश किया गया है। इससे IPv6 के लिए सपोर्ट और VPN कनेक्शन के साथ अनुकूलता में सुधार होता है (इसे &lt;code>.wslconfig&lt;/code> में सेट किया जा सकता है)।&lt;/p>
&lt;h3 id="42-hyper-v-क-वरचअल-सवच-virtual-switch">4.2. Hyper-V का वर्चुअल स्विच (Virtual Switch)
&lt;/h3>&lt;p>Hyper-V उन्नत एंटरप्राइज़-स्तरीय नेटवर्क बनाने में सक्षम है। यह &amp;ldquo;वर्चुअल स्विच मैनेजर&amp;rdquo; के माध्यम से मुख्य रूप से तीन मोड प्रदान करता है:&lt;/p>
&lt;ol>
&lt;li>&lt;strong>बाहरी (External)&lt;/strong>: होस्ट मशीन के फिजिकल NIC को वर्चुअल स्विच से बांधता है, जिससे गेस्ट VM सीधे फिजिकल नेटवर्क से जुड़ सकता है (ब्रिज कनेक्शन)। VM को DHCP सर्वर से उसी सबनेट का IP मिलता है जो फिजिकल नेटवर्क का है।&lt;/li>
&lt;li>&lt;strong>आंतरिक (Internal)&lt;/strong>: केवल होस्ट OS और VM के बीच, और VMs के बीच संचार की अनुमति देता है। यह सीधे बाहरी नेटवर्क तक नहीं पहुंच सकता।&lt;/li>
&lt;li>&lt;strong>निजी (Private)&lt;/strong>: केवल VMs के बीच संचार की अनुमति देता है, और होस्ट OS के साथ संचार को अवरुद्ध करता है। इसका उपयोग आइसोलेटेड (अलग-थलग) परीक्षण वातावरण बनाने के लिए किया जाता है।&lt;/li>
&lt;/ol>
&lt;h3 id="43-powershell-क-सथ-उननत-hyper-v-नटवरक-क-नरमण">4.3. PowerShell के साथ उन्नत Hyper-V नेटवर्क का निर्माण
&lt;/h3>&lt;p>डेवलपमेंट या टेस्टिंग वातावरण में, यदि आप VM के लिए एक कस्टमाइज़्ड NAT नेटवर्क बनाना चाहते हैं, तो आप PowerShell का उपयोग करके विस्तृत नियंत्रण प्राप्त कर सकते हैं। यहाँ एक स्क्रिप्ट का उदाहरण दिया गया है जो एक इंटरनल वर्चुअल स्विच बनाता है, उस पर NAT कॉन्फ़िगर करता है, और VM को इंटरनेट एक्सेस प्रदान करता है।&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;span class="lnt">14
&lt;/span>&lt;span class="lnt">15
&lt;/span>&lt;span class="lnt">16
&lt;/span>&lt;span class="lnt">17
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-powershell" data-lang="powershell">&lt;span class="line">&lt;span class="cl">&lt;span class="c"># 1. इंटरनल वर्चुअल स्विच बनाना&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">$SwitchName&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="s2">&amp;#34;HyperV-NatSwitch&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">New-VMSwitch&lt;/span> &lt;span class="n">-SwitchName&lt;/span> &lt;span class="nv">$SwitchName&lt;/span> &lt;span class="n">-SwitchType&lt;/span> &lt;span class="n">Internal&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c"># 2. होस्ट-साइड वर्चुअल NIC पर IP एड्रेस सेट करना (IP जो गेटवे के रूप में काम करेगा)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">$GatewayIP&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="s2">&amp;#34;192.168.100.1&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">$NetPrefix&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="mf">24&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">$InterfaceAlias&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="s2">&amp;#34;vEthernet (&lt;/span>&lt;span class="nv">$SwitchName&lt;/span>&lt;span class="s2">)&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">New-NetIPAddress&lt;/span> &lt;span class="n">-IPAddress&lt;/span> &lt;span class="nv">$GatewayIP&lt;/span> &lt;span class="n">-PrefixLength&lt;/span> &lt;span class="nv">$NetPrefix&lt;/span> &lt;span class="n">-InterfaceAlias&lt;/span> &lt;span class="nv">$InterfaceAlias&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c"># 3. NAT नेटवर्क को कॉन्फ़िगर करना&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">$NatName&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="s2">&amp;#34;HyperV-NatNetwork&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">$NatSubnet&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="s2">&amp;#34;192.168.100.0/24&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">New-NetNat&lt;/span> &lt;span class="n">-Name&lt;/span> &lt;span class="nv">$NatName&lt;/span> &lt;span class="n">-InternalIPInterfaceAddressPrefix&lt;/span> &lt;span class="nv">$NatSubnet&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c"># वेरिफिकेशन कमांड&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">Get-NetNat&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>इस कॉन्फ़िगरेशन के साथ, आप निर्दिष्ट Hyper-V गेस्ट पर मैन्युअल रूप से IP &lt;code>192.168.100.x&lt;/code> और गेटवे &lt;code>192.168.100.1&lt;/code> सेट करके एक कस्टम NAT सेगमेंट बना सकते हैं, जो होस्ट के माध्यम से बाहरी दुनिया के साथ संवाद कर सकता है।&lt;/p>
&lt;hr>
&lt;h2 id="5-उपयग-क-ममल-यज-कस-और-वयवहरक-चयन-मरगदरशक">5. उपयोग के मामले (यूज़ केस) और व्यावहारिक चयन मार्गदर्शिका
&lt;/h2>&lt;p>अब तक आर्किटेक्चर और प्रदर्शन में अंतर को देखते हुए, हम परिभाषित करेंगे कि किस स्थिति में कौन सी तकनीक अपनाई जानी चाहिए।&lt;/p>
&lt;h3 id="51-परदशय-सनरय-जह-wsl2-चन-जन-चहए">5.1. परिदृश्य (सिनेरियो) जहाँ WSL2 चुना जाना चाहिए
&lt;/h3>&lt;p>WSL2 विशेष रूप से &amp;ldquo;डेवलपर्स की उत्पादकता में सुधार&amp;rdquo; के लिए डिज़ाइन किया गया है। यह निम्नलिखित उपयोगों के लिए आदर्श है:&lt;/p>
&lt;ul>
&lt;li>&lt;strong>वेब डेवलपमेंट और क्लाउड-नेटिव डेवलपमेंट&lt;/strong>: Docker Desktop (WSL2 बैकएंड) या Podman का उपयोग करके कंटेनर डेवलपमेंट।&lt;/li>
&lt;li>&lt;strong>Linux-विशिष्ट टूल का उपयोग&lt;/strong>: अगर आप रोज़ाना bash, grep, awk, sed, या Linux के लिए GCC और Clang कंपाइलर का उपयोग करते हैं।&lt;/li>
&lt;li>&lt;strong>GUI एप्लिकेशन (WSLg)&lt;/strong>: यदि आप Windows डेस्कटॉप पर Linux X11/Wayland एप्लिकेशन को निर्बाध (सीमलेस) रूप से चलाना चाहते हैं।&lt;/li>
&lt;li>&lt;strong>मशीन लर्निंग और AI डेवलपमेंट&lt;/strong>: GPU पास-थ्रू फीचर (NVIDIA CUDA on WSL) का उपयोग करके TensorFlow या PyTorch में तेज़ ट्रेनिंग।&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>ध्यान दें&lt;/strong>: यदि आप कर्नेल को बारीक रूप से कस्टमाइज़ करना चाहते हैं या ऐसी जटिल सेवाएँ बनाना चाहते हैं जो systemd पर बहुत अधिक निर्भर करती हैं (हालांकि systemd अब समर्थित है, डिफ़ॉल्ट रूप से यह अक्षम या सीमित हो सकता है), तो आपको प्रतिबंधों का सामना करना पड़ सकता है।&lt;/p>
&lt;h3 id="52-परदशय-सनरय-जह-hyper-v-चन-जन-चहए">5.2. परिदृश्य (सिनेरियो) जहाँ Hyper-V चुना जाना चाहिए
&lt;/h3>&lt;p>Hyper-V का उद्देश्य &amp;ldquo;इंफ्रास्ट्रक्चर वर्चुअलाइजेशन और पूर्ण अलगाव (आइसोलेशन)&amp;rdquo; है। यह निम्नलिखित उपयोगों के लिए आवश्यक है:&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Windows VM चलाना&lt;/strong>: यदि आप परीक्षण वातावरण के रूप में Windows के विभिन्न संस्करणों (जैसे Windows Server या पुराने Windows 10) को चलाना चाहते हैं।&lt;/li>
&lt;li>&lt;strong>नेस्टेड वर्चुअलाइजेशन&lt;/strong>: यदि आप वर्चुअल मशीन के अंदर एक और वर्चुअल मशीन (Hyper-V या KVM) चलाना चाहते हैं। यह इंफ्रास्ट्रक्चर इंजीनियरों के परीक्षण वातावरण के लिए अनिवार्य है।&lt;/li>
&lt;li>&lt;strong>उन्नत नेटवर्क आवश्यकताएँ&lt;/strong>: यदि नेटवर्क कॉन्फ़िगरेशन को सख्ती से नियंत्रित करना आवश्यक है, जैसे कि एक्सटर्नल ब्रिजिंग (एक ही LAN से जुड़ना), VLAN टैगिंग, या कई NIC असाइन करना।&lt;/li>
&lt;li>&lt;strong>स्नैपशॉट (चेकपॉइंट्स)&lt;/strong>: VM को किसी विशिष्ट समय की स्थिति में सहेजने और उसे तुरंत रोलबैक (वापस पलटने) की क्षमता। यह सॉफ़्टवेयर के विनाशकारी परीक्षण या मैलवेयर विश्लेषण के लिए बेहद उपयोगी है।&lt;/li>
&lt;li>&lt;strong>निश्चित संसाधन आवंटन&lt;/strong>: यदि आप CPU कोर की संख्या और मेमोरी की मात्रा को सख्ती से फिक्स करना चाहते हैं ताकि होस्ट OS पर प्रभाव कम से कम हो।&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h2 id="6-गणतय-मडल-क-मधयम-स-io-थरपट-क-अधययन-परशषट">6. गणितीय मॉडल के माध्यम से I/O थ्रूपुट का अध्ययन (परिशिष्ट)
&lt;/h2>&lt;p>एक सिस्टम इंजीनियर के रूप में, दोनों की I/O प्रदर्शन सीमाओं का आकलन करते समय थ्रूपुट $S$ और ब्लॉक साइज़ $B$ के बीच के संबंध को सैद्धांतिक रूप से समझना महत्वपूर्ण है।&lt;/p>
&lt;p>डेटा ट्रांसफर थ्रूपुट $S$, प्रति यूनिट समय में ट्रांसफर किए गए डेटा की मात्रा है, और इसे इस प्रकार मॉडल किया जा सकता है:&lt;/p>
$$ S(B) = \frac{B}{L_{setup} + \frac{B}{R_{max}}} $$&lt;ul>
&lt;li>$B$: ब्लॉक साइज़ (Bytes)&lt;/li>
&lt;li>$L_{setup}$: I/O अनुरोध को सेट अप करने और कॉन्टेक्स्ट स्विच से जुड़ी निश्चित लेटेंसी&lt;/li>
&lt;li>$R_{max}$: कॉपी या डिवाइस ट्रांसफर में हार्डवेयर की अधिकतम बैंडविड्थ&lt;/li>
&lt;/ul>
&lt;p>WSL2 में 9P प्रोटोकॉल के माध्यम से फाइल एक्सेस करते समय, यह $L_{setup}$ बहुत बड़ा होता है (सॉकेट संचार और प्रोटोकॉल के सीरियलाइज़ेशन/डी-सीरियलाइज़ेशन के कारण)। इसलिए, जब ब्लॉक साइज़ $B$ छोटा होता है (जैसे कुछ KB की छोटी फाइलों का बड़े पैमाने पर पढ़ना/लिखना), तो डिनॉमिनेटर (हर) में $L_{setup}$ का प्रभाव हावी हो जाता है, और थ्रूपुट $S$ में भारी गिरावट आती है।
इसके विपरीत, Hyper-V के VMBus के माध्यम से VHDX एक्सेस में, $L_{setup}$ को हार्डवेयर इंटरप्ट के स्तर के करीब अनुकूलित किया जाता है, जिससे यह छोटे ब्लॉकों के साथ भी उच्च IOPS बनाए रख सकता है।&lt;/p>
&lt;p>यही गणितीय वास्तविकता उस सर्वोत्तम अभ्यास (बेस्ट प्रैक्टिस) का तार्किक आधार है कि &amp;ldquo;WSL2 में प्रोजेक्ट फाइलों को Windows साइड पर नहीं रखा जाना चाहिए&amp;rdquo;।&lt;/p>
&lt;hr>
&lt;h2 id="7-नषकरष-द-सह-असततव-वल-वरचअलइजशन-तकनक">7. निष्कर्ष: दो सह-अस्तित्व वाली वर्चुअलाइजेशन तकनीकें
&lt;/h2>&lt;p>यह कहना सही नहीं होगा कि Hyper-V या WSL2 में से कोई एक दूसरे से बेहतर है; बल्कि ये &lt;strong>&amp;ldquo;अलग-अलग उद्देश्यों वाले दो समाधान&amp;rdquo;&lt;/strong> हैं।&lt;/p>
&lt;ul>
&lt;li>&lt;strong>WSL2&lt;/strong> Windows OS की सीमाओं को तोड़ता है और Linux इकोसिस्टम को Windows उपयोगकर्ताओं तक निर्बाध और तेज़ी से पहुँचाने के लिए &amp;ldquo;सर्वोत्तम एकीकरण उपकरण (इंटीग्रेशन टूल)&amp;rdquo; है। इसे डेवलपर्स के लिए अंतिम CLI वातावरण कहना कोई अतिशयोक्ति नहीं होगी।&lt;/li>
&lt;li>&lt;strong>Hyper-V&lt;/strong> एक &amp;ldquo;पूर्ण-विकसित हाइपरवाइज़र&amp;rdquo; है जो एंटरप्राइज़ डेटा सेंटरों में विकसित मजबूत अलगाव (आइसोलेशन) और प्रबंधन क्षमताओं को डेस्कटॉप पर लाता है। नेटवर्क निर्माण, Windows OS परीक्षण, और इंफ्रास्ट्रक्चर वातावरण सिमुलेशन के मामले में यह बेजोड़ है।&lt;/li>
&lt;/ul>
&lt;p>आधुनिक Windows वातावरण में, ये दोनों तकनीकें आपस में प्रतिस्पर्धा करने के बजाय एक ही VM प्लेटफॉर्म पर खूबसूरती से सह-अस्तित्व में हैं। अपने उपयोग के आधार पर सही जगह पर सही तकनीक का उपयोग करके, Windows दुनिया में सबसे शक्तिशाली और लचीला इंजीनियरिंग वर्कस्टेशन बन जाएगा।&lt;/p></description></item><item><title>WSL2 (Windows Subsystem for Linux) का अल्टीमेट डेवलपमेंट एनवायरनमेंट सेटअप गाइड</title><link>http://kenji.blog/hi/p/wsl2-ultimate-development-setup-guide/</link><pubDate>Sat, 12 Sep 2026 23:00:00 +0900</pubDate><guid>http://kenji.blog/hi/p/wsl2-ultimate-development-setup-guide/</guid><description>&lt;img src="http://kenji.blog/p/wsl2-ultimate-development-setup-guide/img/eyecatch.jpg" alt="Featured image of post WSL2 (Windows Subsystem for Linux) का अल्टीमेट डेवलपमेंट एनवायरनमेंट सेटअप गाइड" />&lt;p>Windows पर Linux-नेटिव डेवलपमेंट एनवायरनमेंट प्रदान करने वाला &amp;ldquo;WSL2 (Windows Subsystem for Linux 2)&amp;rdquo; आधुनिक सॉफ्टवेयर डेवलपमेंट में एक अनिवार्य टूल बन गया है। हालाँकि, इसे डिफ़ॉल्ट स्थिति में उपयोग करने बनाम इसके आर्किटेक्चर को समझने और इसे ठीक से ट्यून करने के बीच परफॉरमेंस और डेवलपमेंट अनुभव में एक बड़ा अंतर है।&lt;/p>
&lt;p>इस लेख में, हम WSL2 के मूल आर्किटेक्चर की व्याख्या से शुरू करेंगे और &amp;ldquo;अल्टीमेट डेवलपमेंट एनवायरनमेंट&amp;rdquo; बनाने के लिए सभी चरणों को विस्तार से (10,000 से अधिक वर्णों में) समझाएंगे जिसकी पेशेवर इंजीनियरों को आवश्यकता होती है। इसमें परफॉरमेंस को अधिकतम करने के लिए सेटिंग्स, एक आरामदायक टर्मिनल एनवायरनमेंट का निर्माण, Docker और VS Code के साथ सहज एकीकरण और उन्नत नेटवर्क कॉन्फ़िगरेशन शामिल हैं।&lt;/p>
&lt;hr>
&lt;h2 id="1-wsl2-क-आरकटकचर-और-wsl1-स-इसक-वकस">1. WSL2 का आर्किटेक्चर और WSL1 से इसका विकास
&lt;/h2>&lt;p>WSL2 की क्षमता को पूरी तरह से अनलॉक करने के लिए, सबसे पहले इसके आंतरिक ढांचे को समझना महत्वपूर्ण है। पहली पीढ़ी के WSL (WSL1) और WSL2 के बीच Windows पर Linux बायनेरिज़ को चलाने का दृष्टिकोण मौलिक रूप से अलग है।&lt;/p>
&lt;h3 id="wsl1-ससटम-कल-टरसलशन-लयर">WSL1: सिस्टम कॉल ट्रांसलेशन लेयर
&lt;/h3>&lt;p>WSL1 ने एक तंत्र अपनाया जो Linux सिस्टम कॉल को वास्तविक समय में Windows NT API में अनुवाद (ट्रांसलेट) करता था। इसका फायदा यह था कि रिसोर्स का ओवरहेड बहुत कम था क्योंकि यह वर्चुअल मशीन (VM) का उपयोग नहीं करता था। हालाँकि, फ़ाइल सिस्टम I/O संचालन जैसे जटिल सिस्टम कॉल का पूरी तरह से अनुकरण करना मुश्किल था, जिससे विशेष रूप से बड़ी संख्या में छोटी फ़ाइलों को संभालने वाले ऑपरेशंस, जैसे Node.js के &lt;code>npm install&lt;/code> या Git रिपॉजिटरी ऑपरेशंस में परफॉरमेंस में भारी गिरावट आई।&lt;/p>
&lt;h3 id="wsl2-लइटवट-यटलट-vm-और-परण-linux-करनल">WSL2: लाइटवेट यूटिलिटी VM और पूर्ण Linux कर्नेल
&lt;/h3>&lt;p>WSL2 में, आर्किटेक्चर को पूरी तरह से नया रूप दिया गया था, और Microsoft द्वारा निर्मित एक वास्तविक Linux कर्नेल अब सीधे &lt;strong>Hyper-V आर्किटेक्चर के सबसेट का उपयोग करके &amp;ldquo;लाइटवेट यूटिलिटी VM&amp;rdquo;&lt;/strong> पर चलता है। यह सिस्टम कॉल के साथ 100% अनुकूलता सुनिश्चित करता है, और Linux-नेटिव ext4 फ़ाइल सिस्टम का उपयोग करने वाले वर्चुअल डिस्क (VHDX) का उपयोग करके फ़ाइल I/O परफॉरमेंस में WSL1 की तुलना में नाटकीय रूप से सुधार हुआ है।&lt;/p>
&lt;p>नीचे दिया गया Mermaid डायग्राम WSL1 और WSL2 के बीच संरचनात्मक अंतर दिखाता है।&lt;/p>
&lt;pre class="mermaid">
flowchart TD
subgraph &amp;#34;Windows OS Environment&amp;#34;
A[&amp;#34;Windows NT कर्नेल&amp;#34;]
A --&amp;gt; F[&amp;#34;NTFS फ़ाइल सिस्टम (C: ड्राइव)&amp;#34;]
end
subgraph &amp;#34;WSL2 Architecture&amp;#34;
B[&amp;#34;Hyper-V हाइपरवाइज़र&amp;#34;]
B --&amp;gt; C[&amp;#34;लाइटवेट यूटिलिटी VM&amp;#34;]
C --&amp;gt; D[&amp;#34;Linux कर्नेल (Microsoft)&amp;#34;]
D --&amp;gt; E[&amp;#34;Ubuntu यूज़र स्पेस (glibc, bash, आदि)&amp;#34;]
D --&amp;gt; G[&amp;#34;ext4 वर्चुअल डिस्क (.vhdx)&amp;#34;]
end
A -.-&amp;gt;|&amp;#34;Plan 9 (9P) प्रोटोकॉल नेटवर्क फ़ाइल शेयर&amp;#34;| D
style B fill:#f9f,stroke:#333,stroke-width:2px
style D fill:#bbf,stroke:#333,stroke-width:2px
&lt;/pre>
&lt;p>इस संरचना से सबसे महत्वपूर्ण सबक यह है कि &lt;strong>&amp;ldquo;Linux की तरफ (VHDX के अंदर) फ़ाइलों तक पहुंच बहुत तेज़ है, लेकिन Windows की तरफ (&lt;code>/mnt/c/&lt;/code>) फ़ाइलों तक पहुंच बहुत धीमी है क्योंकि यह 9P प्रोटोकॉल के माध्यम से जाती है।&amp;rdquo;&lt;/strong> इसलिए, प्रोजेक्ट के सोर्स कोड को हमेशा WSL के होम डायरेक्टरी (&lt;code>~&lt;/code>) के अंतर्गत रखा जाना चाहिए।&lt;/p>
&lt;hr>
&lt;h2 id="2-परफरमस-क-गणतय-वशलषण-wsl2-इतन-तज-कय-ह">2. परफॉरमेंस का गणितीय विश्लेषण: WSL2 इतना तेज़ क्यों है?
&lt;/h2>&lt;p>आइए एक गणितीय मॉडल का उपयोग करके WSL2 के परफॉरमेंस सुधार का मात्रात्मक मूल्यांकन करें। सॉफ्टवेयर डेवलपमेंट में सबसे अधिक समय लेने वाले ऑपरेशंस में से एक भारी फ़ाइल I/O (जैसे: लाइब्रेरी इंस्टॉलेशन या बिल्ड) है।&lt;/p>
&lt;p>किसी भी प्रक्रिया का कुल निष्पादन समय $T_{total}$, CPU की गणना के समय $T_{compute}$ और डिस्क I/O में लगने वाले समय $T_{io}$ के योग के रूप में व्यक्त किया जा सकता है।&lt;/p>
$$ T_{total} = T_{compute} + T_{io} $$&lt;p>WSL1 के मामले में, Linux ऑपरेशंस को NTFS ऑपरेशंस में बदलने का ओवरहेड होता है, इसलिए I/O समय को इस प्रकार मॉडल किया जाता है। यहाँ, $n$ फ़ाइल ऑपरेशंस की संख्या है, $t_{ntfs\_syscall}$ Windows का सिस्टम कॉल निष्पादन समय है, और $t_{trans}$ ट्रांसलेशन लेयर का ओवरहेड है।&lt;/p>
$$ T_{wsl1\_io} = \sum_{i=1}^{n} (t_{ntfs\_syscall_i} + t_{trans_i}) $$&lt;p>दूसरी ओर, WSL2 में, कर्नेल सीधे ext4 फ़ाइल सिस्टम को I/O जारी करता है, इसलिए ओवरहेड केवल वर्चुअलाइजेशन के कारण होने वाली बहुत मामूली देरी $t_{virt}$ है।&lt;/p>
$$ T_{wsl2\_io} = \sum_{i=1}^{n} (t_{ext4_i} + t_{virt_i}) $$&lt;p>सामान्य फ़ाइल सिस्टम में, $t_{ext4} \ll t_{ntfs\_syscall} + t_{trans}$ होता है, इसलिए जब $n$ बहुत बड़ा होता है (हज़ारों से लाखों फ़ाइल ऑपरेशंस), WSL1 और WSL2 के I/O समय के बीच का अंतर घातीय (exponentially) रूप से बढ़ता है।&lt;/p>
&lt;p>इसके अलावा, यदि वर्चुअलाइज्ड एनवायरनमेंट में CPU गणना ओवरहेड अनुपात $\rho$ है, तो नवीनतम हार्डवेयर-असिस्टेड वर्चुअलाइजेशन (Intel VT-x / AMD-V) के साथ, यह $\rho \approx 0.01 \sim 0.03$ (1-3%) तक सीमित रहता है। इसलिए, यहां तक कि शुद्ध कंप्यूटेशनल कार्यों में, यह एक नेटिव Linux एनवायरनमेंट के बराबर $97\% \sim 99\%$ परफॉरमेंस देता है।&lt;/p>
&lt;hr>
&lt;h2 id="3-इसटलशन-और-फउडशन-सटअप">3. इंस्टॉलेशन और फाउंडेशन सेटअप
&lt;/h2>&lt;p>Windows 10/11 पर WSL2 को इंस्टॉल करना बहुत आसान हो गया है। बस एडमिनिस्ट्रेटर अधिकारों के साथ PowerShell खोलें और निम्नलिखित कमांड चलाएँ:&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;span class="lnt">5
&lt;/span>&lt;span class="lnt">6
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-powershell" data-lang="powershell">&lt;span class="line">&lt;span class="cl">&lt;span class="c"># WSL2 और Ubuntu डिफ़ॉल्ट रूप से इंस्टॉल हो जाएंगे&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">wsl&lt;/span> &lt;span class="p">-&lt;/span>&lt;span class="n">-install&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c"># यदि कोई विशिष्ट डिस्ट्रिब्यूशन चुनना हो&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c"># आप इसे wsl --list --online से देख सकते हैं&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">wsl&lt;/span> &lt;span class="p">-&lt;/span>&lt;span class="n">-install&lt;/span> &lt;span class="n">-d&lt;/span> &lt;span class="n">Ubuntu&lt;/span>&lt;span class="p">-&lt;/span>&lt;span class="mf">24.04&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>इंस्टॉलेशन के बाद, सिस्टम रीबूट होता है, और पहले बूट पर, आपको UNIX यूज़रनेम और पासवर्ड सेट करने के लिए कहा जाएगा। यह यूज़र Windows यूज़र से स्वतंत्र होता है और केवल WSL के भीतर मान्य होता है।&lt;/p>
&lt;p>यदि आप पहले से ही WSL1 का उपयोग कर रहे हैं, तो आप इसे निम्न कमांड के साथ WSL2 में बदल सकते हैं:&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;span class="lnt">5
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-powershell" data-lang="powershell">&lt;span class="line">&lt;span class="cl">&lt;span class="c"># मौजूदा डिस्ट्रिब्यूशन को WSL2 में बदलें&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">wsl&lt;/span> &lt;span class="p">-&lt;/span>&lt;span class="n">-set-version&lt;/span> &lt;span class="n">Ubuntu&lt;/span> &lt;span class="mf">2&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c"># भविष्य में जोड़े जाने वाले डिस्ट्रिब्यूशन के लिए डिफ़ॉल्ट को WSL2 पर सेट करें&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">wsl&lt;/span> &lt;span class="p">-&lt;/span>&lt;span class="n">-set-default-version&lt;/span> &lt;span class="mf">2&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;hr>
&lt;h2 id="4-रसरस-नयतरण-म-महरत-wslconfig-और-wslconf">4. रिसोर्स नियंत्रण में महारत: .wslconfig और wsl.conf
&lt;/h2>&lt;p>WSL2 की सबसे बड़ी कमियों में से एक &amp;ldquo;अनलिमिटेड मेमोरी की खपत (Vmmem प्रक्रिया का विस्तार)&amp;rdquo; है। चूँकि WSL2 Linux कर्नेल पेज कैश का उपयोग करता है, यह I/O करते समय बिना किसी सीमा के होस्ट (Windows) की मेमोरी की खपत करता रहता है। इसे रोकने के लिए, कॉन्फ़िगरेशन फ़ाइलों के माध्यम से रिसोर्स को सीमित करना अनिवार्य है।&lt;/p>
&lt;p>WSL2 की कॉन्फ़िगरेशन फ़ाइलों को दो भागों में विभाजित किया गया है: &lt;strong>&lt;code>.wslconfig&lt;/code> जो पूरे Windows को प्रभावित करता है&lt;/strong>, और &lt;strong>&lt;code>wsl.conf&lt;/code> जो प्रत्येक डिस्ट्रिब्यूशन के अंदरूनी हिस्से को प्रभावित करता है&lt;/strong>।&lt;/p>
&lt;h3 id="41-wslconfig-windows-सइड">4.1. .wslconfig (Windows साइड)
&lt;/h3>&lt;p>Windows यूज़र प्रोफ़ाइल डायरेक्टरी (&lt;code>C:\Users\&amp;lt;username&amp;gt;\.wslconfig&lt;/code>) में एक फ़ाइल बनाएँ और VM के रिसोर्स आवंटन को नियंत्रित करें।&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;span class="lnt">14
&lt;/span>&lt;span class="lnt">15
&lt;/span>&lt;span class="lnt">16
&lt;/span>&lt;span class="lnt">17
&lt;/span>&lt;span class="lnt">18
&lt;/span>&lt;span class="lnt">19
&lt;/span>&lt;span class="lnt">20
&lt;/span>&lt;span class="lnt">21
&lt;/span>&lt;span class="lnt">22
&lt;/span>&lt;span class="lnt">23
&lt;/span>&lt;span class="lnt">24
&lt;/span>&lt;span class="lnt">25
&lt;/span>&lt;span class="lnt">26
&lt;/span>&lt;span class="lnt">27
&lt;/span>&lt;span class="lnt">28
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-ini" data-lang="ini">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># C:\Users\&amp;lt;username&amp;gt;\.wslconfig&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">[wsl2]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># VM को आवंटित अधिकतम मेमोरी। होस्ट की कुल मेमोरी का लगभग 50% से 75% अनुशंसित है&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="na">memory&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">16GB&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># उपयोग किए जाने वाले CPU कोर की संख्या (यदि खाली छोड़ा गया तो सभी कोर उपयोग होंगे)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="na">processors&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">8&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># स्वैप फ़ाइल का आकार&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="na">swap&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">8GB&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># स्वैप फ़ाइल का स्थान (यदि आप C ड्राइव पर स्थान बचाना चाहते हैं)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># swapfile=D:\\wsl\\swap.vhdx&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># localhost फ़ॉरवर्डिंग सक्षम करें (Windows से localhost के माध्यम से WSL तक पहुँचने के लिए)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="na">localhostForwarding&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">true&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># स्वचालित रूप से मेमोरी मुक्त करें (केवल Windows 11)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># पेज कैश को डायनेमिक रूप से खाली करता है और Vmmem को बड़ा होने से रोकता है&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="na">autoMemoryReclaim&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">dropcache&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">[experimental]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># उन्नत नेटवर्क सुविधाएँ Windows 11 22H2 और बाद के वर्ज़न पर उपलब्ध हैं&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># यह IPv6 समर्थन और WSL और Windows के बीच एक ही IP एड्रेस साझा करने की अनुमति देता है&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="na">networkingMode&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">mirrored&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="na">dnsTunneling&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">true&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="na">firewall&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">true&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="na">autoProxy&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">true&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h3 id="42-wslconf-linux-सइड">4.2. wsl.conf (Linux साइड)
&lt;/h3>&lt;p>डिस्ट्रिब्यूशन-विशिष्ट व्यवहार को नियंत्रित करने के लिए WSL के भीतर &lt;code>/etc/wsl.conf&lt;/code> को संपादित करें।&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;span class="lnt">14
&lt;/span>&lt;span class="lnt">15
&lt;/span>&lt;span class="lnt">16
&lt;/span>&lt;span class="lnt">17
&lt;/span>&lt;span class="lnt">18
&lt;/span>&lt;span class="lnt">19
&lt;/span>&lt;span class="lnt">20
&lt;/span>&lt;span class="lnt">21
&lt;/span>&lt;span class="lnt">22
&lt;/span>&lt;span class="lnt">23
&lt;/span>&lt;span class="lnt">24
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-ini" data-lang="ini">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># /etc/wsl.conf (WSL के अंदर संपादित करें)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">[network]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># WSL स्टार्टअप पर स्वतः उत्पन्न होने वाले /etc/resolv.conf को अक्षम करें&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># यदि आप अपना स्वयं का DNS सेट करना चाहते हैं (उदा: 8.8.8.8) तो उपयोगी है&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="na">generateResolvConf&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">false&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># अपना खुद का होस्टनाम सेट करें&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="na">hostname&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">WSL-DevNode&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">[automount]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Windows ड्राइव को माउंट करने के लिए सेटिंग्स&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="na">enabled&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">true&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="na">options&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;metadata,uid=1000,gid=1000,umask=022&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># C ड्राइव के माउंट पॉइंट को /mnt/c से /c में बदलें (पथ को छोटा करने के लिए)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="na">root&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">/&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">[boot]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># systemd को सक्षम करें (WSL 0.67.6 या उच्चतर)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># यह snap और विभिन्न डेमन्स (Docker, आदि) को नेटिव रूप से चलाने की अनुमति देता है&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="na">systemd&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">true&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">[user]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># डिफ़ॉल्ट लॉगिन यूज़र&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="na">default&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">kenji&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>इन सेटिंग्स को लागू करने के लिए, आपको PowerShell में &lt;code>wsl --shutdown&lt;/code> चलाकर WSL VM को पूरी तरह से रोकना होगा और फिर इसे फिर से शुरू करना होगा।&lt;/p>
&lt;hr>
&lt;h2 id="5-अलटमट-टरमनल-एनवयरनमट-zsh--powerlevel10k">5. अल्टीमेट टर्मिनल एनवायरनमेंट: Zsh + Powerlevel10k
&lt;/h2>&lt;p>आप डिफ़ॉल्ट bash के साथ उत्पादकता नहीं बढ़ा सकते हैं। एक बेहतरीन प्रॉम्प्ट बनाने के लिए शक्तिशाली ऑटो-कम्प्लीट और उत्कृष्ट दृश्यता वाले Zsh को अति-तीव्र थीम &amp;ldquo;Powerlevel10k&amp;rdquo; के साथ संयोजित करें।&lt;/p>
&lt;h3 id="51-windows-terminal-सथपत-करन-और-कनफगर-करन">5.1. Windows Terminal स्थापित करना और कॉन्फ़िगर करना
&lt;/h3>&lt;p>Microsoft Store से &amp;ldquo;Windows Terminal&amp;rdquo; इंस्टॉल करें। JSON सेटिंग्स (&lt;code>settings.json&lt;/code>) खोलें, डिफ़ॉल्ट प्रोफ़ाइल को WSL (Ubuntu) पर सेट करें, और फ़ॉन्ट को डेवलपमेंट के अनुकूल Nerd Font (जैसे &lt;code>HackGen Console NF&lt;/code> या &lt;code>MesloLGS NF&lt;/code>) में बदलें।&lt;/p>
&lt;h3 id="52-zsh-और-oh-my-zsh-इसटल-करन">5.2. Zsh और Oh My Zsh इंस्टॉल करना
&lt;/h3>&lt;p>WSL टर्मिनल में निम्नलिखित कमांड चलाएँ:&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;span class="lnt">5
&lt;/span>&lt;span class="lnt">6
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># पैकेज अपडेट करें और Zsh इंस्टॉल करें&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sudo apt update &lt;span class="o">&amp;amp;&amp;amp;&lt;/span> sudo apt upgrade -y
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sudo apt install -y zsh git curl
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Oh My Zsh इंस्टॉलेशन स्क्रिप्ट चलाएँ&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sh -c &lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="k">$(&lt;/span>curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh&lt;span class="k">)&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h3 id="53-powerlevel10k-और-पलगइनस-इसटल-करन">5.3. Powerlevel10k और प्लगइन्स इंस्टॉल करना
&lt;/h3>&lt;p>Zsh को और बेहतर बनाने वाले प्लगइन्स (सिंटैक्स हाइलाइटिंग और ऑटो-कम्प्लीट) और Powerlevel10k थीम इंस्टॉल करें।&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;span class="lnt">5
&lt;/span>&lt;span class="lnt">6
&lt;/span>&lt;span class="lnt">7
&lt;/span>&lt;span class="lnt">8
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Powerlevel10k&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">git clone --depth&lt;span class="o">=&lt;/span>&lt;span class="m">1&lt;/span> https://github.com/romkatv/powerlevel10k.git &lt;span class="si">${&lt;/span>&lt;span class="nv">ZSH_CUSTOM&lt;/span>&lt;span class="k">:-&lt;/span>&lt;span class="nv">$HOME&lt;/span>&lt;span class="p">/.oh-my-zsh/custom&lt;/span>&lt;span class="si">}&lt;/span>/themes/powerlevel10k
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># zsh-autosuggestions&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">git clone https://github.com/zsh-users/zsh-autosuggestions &lt;span class="si">${&lt;/span>&lt;span class="nv">ZSH_CUSTOM&lt;/span>&lt;span class="k">:-&lt;/span>&lt;span class="p">~/.oh-my-zsh/custom&lt;/span>&lt;span class="si">}&lt;/span>/plugins/zsh-autosuggestions
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># zsh-syntax-highlighting&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">git clone https://github.com/zsh-users/zsh-syntax-highlighting.git &lt;span class="si">${&lt;/span>&lt;span class="nv">ZSH_CUSTOM&lt;/span>&lt;span class="k">:-&lt;/span>&lt;span class="p">~/.oh-my-zsh/custom&lt;/span>&lt;span class="si">}&lt;/span>/plugins/zsh-syntax-highlighting
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>थीम और प्लगइन्स को सक्षम करने के लिए &lt;code>~/.zshrc&lt;/code> संपादित करें।&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;span class="lnt">5
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># ~/.zshrc में बदलाव&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">ZSH_THEME&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s2">&amp;#34;powerlevel10k/powerlevel10k&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># प्लगइन्स सरणी (array) में जोड़ें&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">plugins&lt;/span>&lt;span class="o">=(&lt;/span>git zsh-autosuggestions zsh-syntax-highlighting&lt;span class="o">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>सहेजें और &lt;code>source ~/.zshrc&lt;/code> चलाएँ, और Powerlevel10k कॉन्फ़िगरेशन विज़ार्ड (&lt;code>p10k configure&lt;/code>) शुरू हो जाएगा। अपने पसंदीदा प्रॉम्प्ट (प्रॉम्प्ट शैली, आइकन, प्रदर्शित की जाने वाली जानकारी, आदि) को अनुकूलित करने के लिए ऑन-स्क्रीन निर्देशों का पालन करें। Git ब्रांच का नाम और स्थिति, Node.js वर्ज़न, कमांड निष्पादन समय आदि वास्तविक समय में प्रदर्शित किए जाएंगे, जिससे डेवलपमेंट दक्षता में नाटकीय रूप से सुधार होगा।&lt;/p>
&lt;hr>
&lt;h2 id="6-vs-code-remote---wsl-क-सहज-एककरण">6. VS Code Remote - WSL का सहज एकीकरण
&lt;/h2>&lt;p>WSL2 में डेवलपमेंट करते समय, &amp;ldquo;Remote - WSL&amp;rdquo; एक्सटेंशन वह तंत्र है जो आपको Windows पक्ष पर इंस्टॉल किए गए IDE (Visual Studio Code) से WSL के अंदर की फ़ाइलों तक सहजता से पहुंचने की अनुमति देता है।&lt;/p>
&lt;h3 id="आरकटकचर-क-वयखय">आर्किटेक्चर की व्याख्या
&lt;/h3>&lt;p>नीचे दिया गया अनुक्रम (sequence) आरेख दिखाता है कि VS Code कैसे WSL2 के साथ संचार करता है।&lt;/p>
&lt;pre class="mermaid">
sequenceDiagram
autonumber
participant U as &amp;#34;डेवलपर&amp;#34;
participant V as &amp;#34;VS Code UI (Windows)&amp;#34;
participant S as &amp;#34;VS Code सर्वर (WSL2)&amp;#34;
participant F as &amp;#34;ext4 फ़ाइल सिस्टम (WSL2)&amp;#34;
U-&amp;gt;&amp;gt;V: &amp;#34;WSL टर्मिनल में `code .` टाइप करें&amp;#34;
V-&amp;gt;&amp;gt;S: &amp;#34;Vsock के माध्यम से RPC कनेक्शन स्थापित करें&amp;#34;
Note over V,S: TCP/IP के बजाय Hyper-V सॉकेट का उपयोग करके संचार करें
S-&amp;gt;&amp;gt;F: &amp;#34;सोर्स फ़ाइलें पढ़ें / लिंटर चलाएँ&amp;#34;
F--&amp;gt;&amp;gt;S: &amp;#34;डेटा और विश्लेषण लौटाएं&amp;#34;
S--&amp;gt;&amp;gt;V: &amp;#34;UI पर लैंग्वेज सर्वर परिणाम स्ट्रीम करें&amp;#34;
V--&amp;gt;&amp;gt;U: &amp;#34;सिंटैक्स हाइलाइटिंग और त्रुटियां प्रदर्शित करें&amp;#34;
&lt;/pre>
&lt;p>Windows पक्ष पर VS Code सिर्फ एक &amp;ldquo;पतले क्लाइंट (UI)&amp;rdquo; के रूप में कार्य करता है, और लैंग्वेज सर्वर, डिबगर, टर्मिनल निष्पादन जैसे सभी भारी कार्य WSL पक्ष पर &amp;ldquo;VS Code Server&amp;rdquo; द्वारा नियंत्रित किए जाते हैं। इससे आप Windows पक्ष पर Node.js या Python इंस्टॉल किए बिना WSL एनवायरनमेंट को साफ रख सकते हैं।&lt;/p>
&lt;h3 id="आवशयक-vs-code-सटगस">आवश्यक VS Code सेटिंग्स
&lt;/h3>&lt;p>VS Code के &amp;ldquo;एक्सटेंशन&amp;rdquo; से &lt;strong>&amp;ldquo;WSL&amp;rdquo; (ms-vscode-remote.remote-wsl)&lt;/strong> इंस्टॉल करें। इसके बाद, बस WSL टर्मिनल में प्रोजेक्ट डायरेक्टरी में जाएं और &lt;code>code .&lt;/code> चलाएं, और Windows पक्ष का VS Code उस डायरेक्टरी को खोले हुए प्रारंभ हो जाएगा।&lt;/p>
&lt;p>&lt;strong>महत्वपूर्ण नोट (लाइन ब्रेक कोड समस्या):&lt;/strong>
Windows और Linux के लाइन ब्रेक कोड अलग-अलग होते हैं (Windows &lt;code>CRLF&lt;/code> है, Linux &lt;code>LF&lt;/code> है)। WSL पर डेवलप करते समय, सुनिश्चित करें कि Git की &lt;code>core.autocrlf&lt;/code> सेटिंग और VS Code की डिफ़ॉल्ट फ़ाइल सेटिंग दोनों को &lt;code>LF&lt;/code> पर सेट किया गया है। यदि आप ऐसा करने में विफल रहते हैं, तो शेल स्क्रिप्ट या Docker कंटेनर चलाते समय आपको अजीब त्रुटियों का सामना करना पड़ सकता है।&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># WSL पर Git के लिए लाइन ब्रेक कोड सेटिंग&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">git config --global core.autocrlf input
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>अपने VS Code &lt;code>settings.json&lt;/code> (रिमोट सेटिंग्स) में निम्न जोड़ें:&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-json" data-lang="json">&lt;span class="line">&lt;span class="cl">&lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;files.eol&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;\n&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;terminal.integrated.defaultProfile.linux&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;zsh&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;hr>
&lt;h2 id="7-docker-desktop-और-wsl2-एककरण-क-ऑपटमइजशन">7. Docker Desktop और WSL2 एकीकरण का ऑप्टिमाइज़ेशन
&lt;/h2>&lt;p>WSL2 एनवायरनमेंट में Docker का उपयोग करने के मुख्य रूप से दो तरीके हैं:&lt;/p>
&lt;ol>
&lt;li>&lt;strong>Docker Desktop for Windows&lt;/strong> इंस्टॉल करें और WSL2 एकीकरण सक्षम करें।&lt;/li>
&lt;li>&lt;strong>नेटिव Docker Engine&lt;/strong> को सीधे WSL2 के अंदर इंस्टॉल करें (जैसे Ubuntu में)।&lt;/li>
&lt;/ol>
&lt;h3 id="दषटकण-1-docker-desktop-अनशसत">दृष्टिकोण 1: Docker Desktop (अनुशंसित)
&lt;/h3>&lt;p>ज्यादातर मामलों में, इसकी अनुशंसा की जाती है क्योंकि GUI के माध्यम से इसे प्रबंधित करना आसान है और Windows/WSL के बीच कंटेनरों तक पारदर्शी पहुंच प्रदान करता है। Docker Desktop की सेटिंग्स से निम्न जांचें:&lt;/p>
&lt;ul>
&lt;li>&lt;code>General&lt;/code> -&amp;gt; &lt;code>Use the WSL 2 based engine&lt;/code> को चेक करें।&lt;/li>
&lt;li>&lt;code>Resources&lt;/code> -&amp;gt; &lt;code>WSL Integration&lt;/code> -&amp;gt; &lt;code>Enable integration with my default WSL distro&lt;/code> को चेक करें और जिस डिस्ट्रिब्यूशन का उपयोग करना है (Ubuntu) उसके लिए टॉगल चालू करें।&lt;/li>
&lt;/ul>
&lt;p>यह आपको सीधे WSL2 टर्मिनल से &lt;code>docker&lt;/code> कमांड चलाने की अनुमति देता है, और Docker डेमन के साथ संचार Docker Desktop द्वारा प्रबंधित समर्पित हल्के VM (&lt;code>docker-desktop&lt;/code> और &lt;code>docker-desktop-data&lt;/code>) के माध्यम से किया जाता है।&lt;/p>
&lt;h3 id="दषटकण-2-नटव-docker-engine-क-परतयकष-सथपन">दृष्टिकोण 2: नेटिव Docker Engine की प्रत्यक्ष स्थापना
&lt;/h3>&lt;p>यदि कॉर्पोरेट नेटवर्क प्रतिबंध (जैसे Docker Desktop के भुगतान से बचना) या यदि आप परफॉरमेंस ओवरहेड को पूरी तरह से समाप्त करना चाहते हैं, तो &lt;code>/etc/wsl.conf&lt;/code> में &lt;code>systemd&lt;/code> को सक्षम करें और Docker को एक शुद्ध Ubuntu सर्वर के रूप में इंस्टॉल करें।&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;span class="lnt">14
&lt;/span>&lt;span class="lnt">15
&lt;/span>&lt;span class="lnt">16
&lt;/span>&lt;span class="lnt">17
&lt;/span>&lt;span class="lnt">18
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># systemd के इनेबल होने पर WSL2 Ubuntu में Docker के आधिकारिक इंस्टॉलेशन चरणों का अंश&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sudo apt-get update
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sudo apt-get install ca-certificates curl gnupg
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sudo install -m &lt;span class="m">0755&lt;/span> -d /etc/apt/keyrings
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">curl -fsSL https://download.docker.com/linux/ubuntu/gpg &lt;span class="p">|&lt;/span> sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sudo chmod a+r /etc/apt/keyrings/docker.gpg
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># रिपॉजिटरी जोड़ना&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">echo&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> &lt;span class="s2">&amp;#34;deb [arch=&amp;#34;&lt;/span>&lt;span class="k">$(&lt;/span>dpkg --print-architecture&lt;span class="k">)&lt;/span>&lt;span class="s2">&amp;#34; signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2"> &amp;#34;&lt;/span>&lt;span class="k">$(&lt;/span>. /etc/os-release &lt;span class="o">&amp;amp;&amp;amp;&lt;/span> &lt;span class="nb">echo&lt;/span> &lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="nv">$VERSION_CODENAME&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="k">)&lt;/span>&lt;span class="s2">&amp;#34; stable&amp;#34;&lt;/span> &lt;span class="p">|&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> sudo tee /etc/apt/sources.list.d/docker.list &amp;gt; /dev/null
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sudo apt-get update
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># वर्तमान यूज़र को docker समूह में जोड़ें (ताकि बिना sudo के चलाया जा सके)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sudo usermod -aG docker &lt;span class="nv">$USER&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>रीबूट करने के बाद, &lt;code>systemctl start docker&lt;/code> बिल्कुल नेटिव Linux एनवायरनमेंट की तरह काम करेगा और उच्च प्रदर्शन प्रदान करेगा।&lt;/p>
&lt;hr>
&lt;h2 id="8-ssh-कज-keys-क-एककरण-windows-और-wsl-क-बच-सहज-परमणकरण">8. SSH कीज़ (Keys) का एकीकरण: Windows और WSL के बीच सहज प्रमाणीकरण
&lt;/h2>&lt;p>Git SSH क्लोन या रिमोट सर्वर से SSH कनेक्शन बनाते समय, Windows और WSL के लिए अलग-अलग SSH कुंजियों को प्रबंधित करना बहुत बोझिल होता है। सुरक्षा और सुविधा दोनों सुनिश्चित करने के लिए, आप Windows पर चलने वाले SSH एजेंट (या 1Password जैसे पासवर्ड मैनेजर) को WSL में ब्रिज कर सकते हैं।&lt;/p>
&lt;p>यहां, सबसे सुरक्षित और आधुनिक दृष्टिकोण के रूप में, हम &lt;strong>1Password की SSH एजेंट सुविधा&lt;/strong> या &lt;strong>Windows के OpenSSH ऑथेंटिकेशन एजेंट&lt;/strong> का उपयोग करने और &lt;code>npiperelay&lt;/code> या &lt;code>socat&lt;/code> का उपयोग करके इसे WSL2 के UNIX डोमेन सॉकेट पर फॉरवर्ड करने का तरीका बताएंगे।&lt;/p>
&lt;h3 id="ssh-agent-क-सकट-फरवरडग">ssh-agent का सॉकेट फॉरवर्डिंग
&lt;/h3>&lt;p>आमतौर पर, Windows के नेम्ड पाइप (Named Pipe) के रूप में प्रदान किए गए SSH एजेंट को WSL की तरफ एक सॉकेट फ़ाइल में परिवर्तित करने की आवश्यकता होती है। &lt;code>wsl-ssh-agent&lt;/code> या 1Password द्वारा प्रदान की गई सुविधाओं का उपयोग करना आसान है।&lt;/p>
&lt;p>1Password की सेटिंग्स स्क्रीन से, &amp;ldquo;Developer&amp;rdquo; -&amp;gt; &amp;ldquo;Use the SSH agent&amp;rdquo; सक्षम करें।
अगला, WSL में &lt;code>~/.zshrc&lt;/code> या &lt;code>~/.bashrc&lt;/code> में निम्न सेटिंग्स जोड़ें ताकि लॉगिन करते समय सॉकेट स्वतः बाइंड हो जाए।&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># ~/.zshrc में जोड़ें (1Password SSH एजेंट का उपयोग करने का उदाहरण)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">export&lt;/span> &lt;span class="nv">SSH_AUTH_SOCK&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="nv">$HOME&lt;/span>/.ssh/agent.sock
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># यदि WSL शुरू होने पर सॉकेट मौजूद नहीं है या प्रक्रिया बंधी नहीं है, तो फॉरवर्ड करने के लिए socat और npiperelay का उपयोग करें&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">ALREADY_RUNNING&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="k">$(&lt;/span>ps -aux &lt;span class="p">|&lt;/span> grep &lt;span class="s2">&amp;#34;[n]piperelay.exe -ei -s //./pipe/openssh-ssh-agent&amp;#34;&lt;/span> &lt;span class="p">|&lt;/span> wc -l&lt;span class="k">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">if&lt;/span> &lt;span class="o">[&lt;/span> &lt;span class="nv">$ALREADY_RUNNING&lt;/span> -eq &lt;span class="m">0&lt;/span> &lt;span class="o">]&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="k">then&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="o">[&lt;/span> -S &lt;span class="nv">$SSH_AUTH_SOCK&lt;/span> &lt;span class="o">]&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="k">then&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> rm &lt;span class="nv">$SSH_AUTH_SOCK&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">fi&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># socat को बैकग्राउंड में शुरू करें और Windows के Named Pipe को WSL के UNIX सॉकेट से कनेक्ट करें&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">(&lt;/span>setsid socat UNIX-LISTEN:&lt;span class="nv">$SSH_AUTH_SOCK&lt;/span>,fork EXEC:&lt;span class="s2">&amp;#34;npiperelay.exe -ei -s //./pipe/openssh-ssh-agent&amp;#34;&lt;/span>,nofork &lt;span class="p">&amp;amp;&lt;/span>&lt;span class="o">)&lt;/span> &amp;gt;/dev/null 2&amp;gt;&lt;span class="p">&amp;amp;&lt;/span>&lt;span class="m">1&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">fi&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;ul>
&lt;li>नोट: आपको Windows की तरफ &lt;code>npiperelay.exe&lt;/code> इंस्टॉल करना होगा और पहले से उसका पथ (path) सेट करना होगा।&lt;/li>
&lt;/ul>
&lt;p>एक बार यह सेटअप पूरा हो जाने पर, WSL टर्मिनल से &lt;code>ssh-add -l&lt;/code> चलाने पर 1Password या Windows में पंजीकृत SSH सार्वजनिक कुंजियों (public keys) की सूची दिखाई देगी। यह आपको निजी कुंजी (private key) फ़ाइल को WSL में कॉपी किए बिना प्रमाणीकरण (authentication) को सुरक्षित रूप से पास करने की अनुमति देता है।&lt;/p>
&lt;hr>
&lt;h2 id="9-रखरखव-फल-हए-vhdx-क-ऑपटमइजशन-सपडन">9. रखरखाव: फूले हुए VHDX का ऑप्टिमाइज़ेशन (संपीड़न)
&lt;/h2>&lt;p>WSL2 की सबसे बड़ी खामियों में से एक यह है कि &amp;ldquo;Docker इमेज को हटाने या फ़ाइलों को हटाने पर भी Windows की तरफ वर्चुअल डिस्क (.vhdx) का फ़ाइल आकार स्वचालित रूप से कम नहीं होता है।&amp;rdquo; यदि आप लंबे समय तक विकास करते हैं, तो ext4.vhdx फ़ाइल दसियों से लेकर सैकड़ों गीगाबाइट (GB) तक फूल सकती है।&lt;/p>
&lt;p>डिस्क स्पेस खाली करने के लिए, आपको समय-समय पर Windows की तरफ से VHDX को ऑप्टिमाइज़ (Compact) करना होगा।&lt;/p>
&lt;ol>
&lt;li>सबसे पहले, WSL को पूरी तरह से शट डाउन करें।
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-powershell" data-lang="powershell">&lt;span class="line">&lt;span class="cl">&lt;span class="n">wsl&lt;/span> &lt;span class="p">-&lt;/span>&lt;span class="n">-shutdown&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;/li>
&lt;li>एडमिनिस्ट्रेटर अधिकारों के साथ PowerShell खोलें और निम्न &lt;code>diskpart&lt;/code> कमांड या Hyper-V मॉड्यूल के &lt;code>Optimize-VHD&lt;/code> कमांड को चलाएं (बाद वाले का उपयोग केवल तभी किया जा सकता है जब Hyper-V इनेबल हो)।&lt;/li>
&lt;/ol>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-powershell" data-lang="powershell">&lt;span class="line">&lt;span class="cl">&lt;span class="c"># यदि Hyper-V मॉड्यूल उपलब्ध है&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">Optimize-VHD&lt;/span> &lt;span class="n">-Path&lt;/span> &lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="nv">$env:LOCALAPPDATA&lt;/span>&lt;span class="s2">\Packages\CanonicalGroupLimited.Ubuntu_79rhkp1fndgsc\LocalState\ext4.vhdx&amp;#34;&lt;/span> &lt;span class="n">-Mode&lt;/span> &lt;span class="n">Full&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c"># यदि diskpart का उपयोग कर रहे हैं&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">diskpart&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c"># निम्न प्रॉम्प्ट के भीतर इंटरैक्टिव रूप से दर्ज करें&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">DISKPART&lt;/span>&lt;span class="p">&amp;gt;&lt;/span> &lt;span class="nb">select &lt;/span>&lt;span class="n">vdisk&lt;/span> &lt;span class="n">file&lt;/span>&lt;span class="p">=&lt;/span>&lt;span class="s2">&amp;#34;C:\Users\&amp;lt;username&amp;gt;\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu_79rhkp1fndgsc\LocalState\ext4.vhdx&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">DISKPART&lt;/span>&lt;span class="p">&amp;gt;&lt;/span> &lt;span class="n">attach&lt;/span> &lt;span class="n">vdisk&lt;/span> &lt;span class="n">readonly&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">DISKPART&lt;/span>&lt;span class="p">&amp;gt;&lt;/span> &lt;span class="n">compact&lt;/span> &lt;span class="n">vdisk&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">DISKPART&lt;/span>&lt;span class="p">&amp;gt;&lt;/span> &lt;span class="n">detach&lt;/span> &lt;span class="n">vdisk&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">DISKPART&lt;/span>&lt;span class="p">&amp;gt;&lt;/span> &lt;span class="n">exit&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>नियमित रूप से यह ऑपरेशन करके, आप C ड्राइव का बर्बाद हुआ स्पेस वापस पा सकते हैं।&lt;/p>
&lt;hr>
&lt;h2 id="10-नषकरष">10. निष्कर्ष
&lt;/h2>&lt;p>WSL2 &amp;ldquo;Windows पर चलने वाले एक बोनस Linux&amp;rdquo; से कहीं आगे बढ़कर एक शक्तिशाली डेवलपमेंट प्लेटफ़ॉर्म के रूप में विकसित हो गया है जो MacOS और नेटिव Linux मशीनों के बराबर या उससे बेहतर है।&lt;/p>
&lt;p>यहां बताई गई सभी सेटिंग्स को लागू करके (&lt;code>.wslconfig&lt;/code> के माध्यम से रिसोर्स ऑप्टिमाइज़ेशन, Zsh + Powerlevel10k के साथ टर्मिनल एन्हांसमेंट, VS Code Remote के माध्यम से पारदर्शी पहुंच, और SSH एकीकरण और VHDX रखरखाव), एक तनाव-मुक्त, तेज़ और सुरक्षित &amp;ldquo;अल्टीमेट डेवलपमेंट एनवायरनमेंट&amp;rdquo; पूरा हो जाएगा।&lt;/p>
&lt;p>हालाँकि एनवायरनमेंट को सेट करने में कुछ प्रयास लगता है, एक बार सेटिंग्स पक्की हो जाने के बाद, इसमें कोई संदेह नहीं है कि भविष्य के इंजीनियरिंग कार्यों की उत्पादकता में नाटकीय रूप से सुधार होगा। कृपया इस गाइड को आधार के रूप में उपयोग करके अपने प्रोजेक्ट्स और प्राथमिकताओं के अनुरूप आगे के कस्टमाइज़ेशन का पता लगाने के लिए स्वतंत्र महसूस करें।&lt;/p></description></item></channel></rss>