การแก้ไขไฟล์ในระบบย่อย Windows สำหรับการพัฒนา Linux


23

Windows Subsystem สำหรับ Linux (WSL) ทำงานได้ค่อนข้างดีสำหรับการสร้างเครื่องมือ Linux commandline ส่วนใหญ่ที่มีอยู่และทำงานบน Windows โดยไม่ต้องดัดแปลง อย่างไรก็ตามมันค่อนข้างยุ่งยากสำหรับการพัฒนาเมื่อเราต้องการ

  • สร้างโครงการโดยใช้toolchain ของ Linux ที่ไม่มี Windows เทียบเท่าที่รองรับ (Ruby, Node, etc)
  • แก้ไขไฟล์โดยใช้โปรแกรมแก้ไข GUI ที่ใช้Windowsเช่นรหัส Visual Studio

ปัญหาคือว่าปพลิเคชันของ Windows ไม่สามารถแก้ไขไฟล์ภายในระบบแฟ้ม lxss เสมือน การแก้ไขไฟล์เหล่านี้โดยตรงเป็นสาเหตุทำให้เกิดปัญหาทุกประเภท

ดังนั้นดูเหมือนจะมีเพียงสองตัวเลือกที่ไม่ดีเมื่อมันมาถึงการใช้ WSL เพื่อการพัฒนา:

  1. จัดเก็บโครงการภายใต้ lxss ( /home/foo) Toolchain ปกติทำงานอย่างถูกต้อง อย่างไรก็ตามการแก้ไขนั้น จำกัด ไว้เพียง Vim / Emacs หรือเทอร์มินัลใดก็ตามที่สามารถทำงานภายใต้เซิร์ฟเวอร์ janky Xซึ่งไม่ราบรื่นกว่าตัวแก้ไขดั้งเดิมที่ทำงานบน Windows

  2. จัดเก็บโครงการภายใต้ระบบไฟล์ Windows ( /mnt/c/Users/foo) ตอนนี้เครื่องมือแก้ไขใด ๆ ที่ใช้ Windows สามารถนำมาใช้เพื่อการพัฒนา อย่างไรก็ตาม toolchain Linux-based จะเปราะบางเป็นมันไม่ได้ออกแบบมาเพื่อใช้ใน "ไดรฟ์เครือข่าย" และอาจทำให้เกิดปัญหากับการดูไฟล์หรือฐานข้อมูล

มีวิธีใดบ้างที่จะทำให้ได้ทั้งสองโลกที่ดีที่สุดนั่นคือสามารถแก้ไขได้โดยใช้แอปพลิเคชัน Windows ดั้งเดิม แต่ยังคงใช้งาน toolchain ของ Linux ได้ตามปกติบนไดรฟ์ภายใน

คำตอบ:


4

Microsoft เพิ่งเพิ่มการสนับสนุนที่ครอบคลุมสำหรับสิ่งนี้และโดยทั่วไปควรจะมีให้ในการอัปเดตเมษายน 2019 (19H1) เมื่อพร้อมแล้วเซิร์ฟเวอร์ 9P จะทำงานในพื้นหลังเมื่อใดก็ตามที่ distro Linux ทำงานอยู่ เซิร์ฟเวอร์ 9P จะสามารถจัดการข้อมูลเมตาของระบบไฟล์ Linux และ Windows จะสามารถใช้เป็นไดรฟ์เครือข่ายเพื่อให้สามารถเข้าถึงได้อย่างปลอดภัย คุณสามารถอ่านเกี่ยวกับเรื่องที่https://blogs.msdn.microsoft.com/commandline/2019/02/15/whats-new-for-wsl-in-windows-10-version-1903/

ด้วยคุณสมบัติใหม่นี้คุณจะสามารถเข้าถึงไฟล์ระบบไฟล์ทั้ง Windows และ Linux จาก Windows ได้อย่างปลอดภัยตราบใดที่คุณผ่านเซิร์ฟเวอร์ 9P สิ่งนี้จะได้รับการจัดการจากภายใน WSL ตัวอย่างเช่นจากบรรทัดคำสั่ง WSL คุณจะสามารถพิมพ์code /mnt/c/Users/username/src/windows-file.txtเพื่อเปิดไฟล์ Windows ใน VS Code หรือพิมพ์code /home/username/src/linux-file.txtเพื่อเปิดไฟล์ Linux ใน VS Code

หากคุณไม่ได้เป็นส่วนหนึ่งของโปรแกรม Windows Insider คุณจะไม่สามารถเข้าถึงสิ่งนี้ได้ดังนั้นคุณจะต้องใช้วิธีการที่เก่ากว่าเช่น wslpath

wslpath จะแปลงระหว่างเส้นทางสไตล์ Windows และ Linux เพื่อให้คุณสามารถเปิดไฟล์ Windows ได้อย่างง่ายดายจากบรรทัดคำสั่ง WSL ตามhttps://github.com/Microsoft/WSL/issues/3146#issuecomment-388118689มันจะปฏิเสธที่จะแปลงเส้นทางระบบไฟล์ Linux (เช่น% AppData% \ lxss) เนื่องจากไม่มี 9P จึงไม่ปลอดภัยที่จะแก้ไขไฟล์เหล่านี้จาก Windows . หมายความว่าคุณไม่สามารถเปิดได้/home/username/src/linux-file.txtแต่คุณสามารถcode "$(wslpath -aw /mnt/c/Users/username/src/windows-file.txt)"ใช้ได้

ในอดีตมีเครื่องมือของบุคคลที่สามจำนวนหนึ่งที่ใช้ในการแปลงไฟล์เดียวกัน แต่ wslpath ใช้งานจริง - ในความเป็นจริงls -l /bin/wslpathแสดงให้เห็นว่าเป็นเพียงลิงก์ไปยัง / init


@alex wsltools สามารถแปลงพา ธ ของ Linux เป็น Windows ที่เทียบเท่าได้ ด้วยวิธีนี้คุณสามารถเปิดโปรแกรม Windows จากบรรทัดคำสั่ง Linux และบอกให้เปิดไฟล์บนระบบไฟล์ Windows
Shane Lawrence

อย่าคิดอย่างนั้น blogs.msdn.microsoft.com/commandline/2016/11/17/… . คุณสามารถให้การอ้างอิงใด ๆ ว่าปลอดภัยหรือไม่
อเล็กซ์

@alex ขอบคุณที่นำสิ่งนี้ขึ้นมา นี่เป็นจุดที่ดีที่จะชี้แจง ลิงค์ที่คุณแชร์ (ซึ่งอยู่ในคำถามของ OP) กำลังบอกคุณว่าอย่าเปิดไฟล์ในระบบไฟล์ Linux จาก Windows (เช่นไม่ใช้แอพ Windows เพื่อเปลี่ยนสิ่งต่าง ๆ ภายใต้% AppData% \ lxss) คำตอบและความคิดเห็นก่อนหน้าของฉันทั้งสองอธิบายวิธีเปิดไฟล์ Windows ภายในโปรแกรม Windows จากบรรทัดคำสั่ง WSL (เช่นเปิด "C: \ Users \ ชื่อผู้ใช้ \ src \ example.txt" จากพา ธ WSL "/ mnt / c / Users / ชื่อผู้ใช้ / src / example.txt ") นอกจากนี้ยังมีวิธีการใหม่ออกมา ฉันได้อัปเดตคำตอบเพื่อแสดงความแตกต่างและวิธีการใหม่แล้ว
Shane Lawrence

เชนจุดประสงค์ของการใช้ WSL คืออะไรถ้าคุณจะแก้ไขไฟล์ windows ด้วย windows ไบนารี? ทำไมไม่ใช้เพียง windows
Alex

ข่าวดี: ตอนนี้ WSL สามารถแก้ไขไฟล์ linux ได้โดยไม่มีปัญหากับ Win10 1903: devblogs.microsoft.com/commandline/ … "ในอดีตการสร้างและเปลี่ยนไฟล์ Linux จาก Windows ทำให้ไฟล์หรือข้อมูลที่เสียหายเสียหาย คุณลักษณะที่ต้องการอย่างสูงและคาดว่าจะยาวเราภูมิใจที่จะประกาศให้คุณสามารถเข้าถึงไฟล์ทั้งหมดใน Linux distros จาก Windows ได้อย่างง่ายดาย "
KERR

1

ฉันแน่ใจว่าคนที่ฉลาดกว่าฉันได้ดูคำถามนี้ แต่ฉันจะตอบมัน ฉันเชื่อโดยสุจริตว่าคำตอบคือไม่ มีวิธีที่ดีกว่าในการรับสิ่งที่ดีที่สุดของทั้งสองโลกนอกเหนือจากที่คุณพูดถึง (ที่ฉันรู้)

ฉันแน่ใจว่ามันไม่ใช่คำตอบที่ทุกคนต้องการ แต่ฉันคิดว่ามันเป็นคำตอบที่ถูกต้อง ฉันรู้ว่านี่เป็นสิ่งที่ Microsoft พยายามทำให้ราบรื่นขึ้น แต่ยังไม่มี


และมันก็ยังไม่เป็นเช่นนั้น
hugo der hungrige

0

ในช่วงครึ่งแรกของปี 2561 ไมโครซอฟท์เปิดตัวการปรับปรุง WSL ที่แก้ไขปัญหาเหล่านี้:

  • ใน Insider Build 17063 และใหม่กว่าการปรับปรุงระบบไฟล์ช่วยให้ยูทิลิตี้ Linux สามารถดูสิ่งที่พวกเขาคาดหวังในไฟล์ DrvF ได้มากขึ้น
  • นับตั้งแต่ช่วงปลายปี 2017 Visual Studio รหัสสามารถที่จะเรียกใช้รุ่น WSL ของโหนดโดยตรง

ทั้งสองนี้ไม่ได้แก้ปัญหาทั้งหมดในคำถามเดิมของฉัน แต่อาจปรับปรุงการใช้งานในบางกรณี


ขอบคุณ! อัพเดทอยู่เสมอ ฉันจะไม่เป็นไรถ้าให้ฉัน "ปลอดภัย" ใช้ตัวแก้ไข GUI รายการโปรดของฉันสำหรับไฟล์ที่เลือกฉันสามารถอยู่ได้โดยไม่มีการรวมเครื่องมือสร้างที่เหมาะสม (สามารถทำได้จากคอนโซล) แม้แต่ไฟล์ "rsync-ing" ชั่วคราวไปยังการคัดลอก windows ในเครื่องก็ยังใช้ได้อีกตราบใดที่มันยังทำโปร่งใส ฉันกำลังเข้าใกล้จุดที่น่ารำคาญนั่นมันยากเกินกว่าจะแก้ไขและติดตามไฟล์ทั้งหมดจาก CLI (อย่างน้อยสำหรับฉัน) และฉันแค่ต้องการให้ "ทำทุกอย่างบน windows" ส่ง / คัดลอก "รหัสไปยัง WSL เรียกใช้เครื่องมือที่นั่น
Dan M.

0

หากคุณต้องการรันคำสั่ง linux และแก้ไขด้วย windows editors คุณสามารถเก็บซอร์สโค้ดของคุณ (ที่คุณต้องการแก้ไขและทดสอบ) บางแห่งในระบบไฟล์ของคุณ (เช่น c: \ source \) และเข้าถึงที่ในคอนโซลลินุกซ์ผ่าน / mnt / c / source หวังว่านี่จะช่วยได้


0

ตอนนี้ Visual Studio Code รองรับ (ขณะที่ฉันใช้งานอยู่) "ส่วนขยาย WSL" ซึ่งช่วยให้คุณสามารถดำเนินการ CRUD (สร้างอ่านอัปเดตลบ) ไฟล์ / โฟลเดอร์จากตำแหน่ง Linux แม้ว่าฉันจะยังคงดิ้นรนในการรับเซ็ตอัพเดียวกันสำหรับ atom ซึ่งเป็นตัวเลือกของฉันสำหรับการพัฒนาแอพพลิเคชั่น Rails ที่แพลตฟอร์ม Linux

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.