ทำไมสิ่งนี้จึงเกิดขึ้น
เนื่องจากระบบไฟล์ Unix ทั่วไปทำงานแตกต่างจากระบบไฟล์ Windows WSL จึงจัดเก็บข้อมูลเพิ่มเติมเกี่ยวกับคุณสมบัติเฉพาะของ Linux ของไฟล์ในแอตทริบิวต์เพิ่มเติมของไฟล์ Windows ที่ใช้เพื่อเป็นตัวแทนของพวกเขา โปรแกรม Windows ทั่วไปไม่รู้เกี่ยวกับคุณสมบัติเหล่านี้และจะไม่เก็บไว้เมื่อคุณแก้ไขไฟล์ ข้อมูลสำคัญเกี่ยวกับไฟล์จะหายไปเมื่อเกิดขึ้น
เมื่อ WSL พยายามอ่านไฟล์และไม่สามารถหาคุณลักษณะที่คาดว่าจะเกิดข้อผิดพลาดจะรายงานเช่นเดียวกับสิ่งที่จะเกิดขึ้นหากระบบไฟล์ดั้งเดิมเสียหาย หากไม่เคยเห็นแอตทริบิวต์ของไฟล์ในตอนแรกไฟล์นั้นจะถือว่าเป็นไฟล์ที่ไม่มีอยู่จริงและจะไม่ปรากฏในรายชื่อไฟล์
คำแนะนำ WSL อย่างเป็นทางการคือ
ไม่ได้อยู่ภายใต้สถานการณ์ใด ๆ ที่สร้างและ / หรือแก้ไขไฟล์ Linux ใช้ปพลิเคชันของ Windows เครื่องมือสคริปต์คอนโซล ฯลฯ
การสร้าง / เปลี่ยนไฟล์ Linux จาก Windows อาจทำให้ข้อมูลเสียหายและ / หรือเกิดความเสียหายกับสภาพแวดล้อม Linux ของคุณซึ่งคุณต้องถอนการติดตั้งและติดตั้ง distro ใหม่!
ด้วยเหตุนี้ (แต่ใหญ่กว่าและแดงกว่าและมีการขีดเส้นใต้มากกว่า) "ไฟล์ Linux" หมายถึงทุกสิ่งในlxss
ไดเรกทอรีของคุณ คุณสามารถแก้ไขไฟล์ Windows ปกติจากภายใน Linux ผ่าน/mnt/c/...
ระบบไฟล์ DrvFSแต่ไม่สามารถย้อนกลับได้
อย่างไรก็ตาม 1903 วินโดวส์ 10 การเปิดตัวแนะนำกลไกใหม่ที่ไม่อนุญาตให้ไฟล์ที่จะแก้ไขได้อย่างปลอดภัยจาก Windowsตราบเท่าที่คุณไปเกี่ยวกับเรื่องวิธีการที่เหมาะสม ไม่ได้ช่วยแก้ไขปัญหาไฟล์ที่เสียหายแล้ว แต่สามารถหลีกเลี่ยงได้ในอนาคต
ฉันจะแก้ไขได้อย่างไร
หากคุณแก้ไขไฟล์แล้วและตอนนี้คุณไม่สามารถเข้าถึงไฟล์ได้คุณยังสามารถอ่านเนื้อหาจาก Windows เองและเรียกคืนไฟล์ด้วยวิธีดังกล่าวได้
ในการทำเช่นนั้นคุณจะต้อง:
- นำทางกลับไปยังตำแหน่งภายใน
AppData\Local\lxss
ไดเรกทอรีที่ไฟล์นั้นใช้งาน File Explorer และย้ายไฟล์ออกไปที่อื่นบนไดรฟ์เช่นเดสก์ท็อปของคุณ
- รีสตาร์ท WSL หลังจากนั้นเพื่อล้างแคชภายในซึ่งคุณสามารถทำได้เพียงแค่ปิดเทอร์มินัลทั้งหมดของคุณและเปิดใหม่ หากคุณมีกระบวนการเซิร์ฟเวอร์เบื้องหลังทำงานอยู่คุณจะต้องหยุดกระบวนการเหล่านั้นด้วย
- ภายใน Linux อีกครั้งให้ไปที่ตำแหน่งเดิมของไฟล์ที่เสียหาย มันจะไม่ปรากฏขึ้นเลยหากคุณย้ายไฟล์ออกไปเรียบร้อยแล้ว เรียกใช้
ls
เพื่อตรวจสอบ
ตรวจสอบไฟล์ที่คุณย้ายออกแล้ว: รัน
cat /mnt/c/Users/.../Desktop/abc
เพื่อดูเนื้อหาต้นฉบับของไฟล์
หากทุกอย่างทำงานได้ดีคุณสามารถคัดลอกไฟล์นั้นกลับไปยังตำแหน่งที่คุณคาดว่าจะเป็น:
cp /mnt/c/Users/.../Desktop/abc ~/alphabet/abc
cp
คำสั่งจะทำให้เกิด WSL ที่จะเรียกคืนคุณลักษณะที่ซ่อนอยู่ที่จำเป็นที่ไฟล์
คำแนะนำเหล่านี้จะทำงานให้ไฟล์ข้อมูลปกติ แต่ถ้าหากมันเป็นไฟล์ระบบปฏิบัติการที่สำคัญคุณอาจต้องติดตั้งทั้งหมด สำหรับโปรแกรมที่ไม่สำคัญหลายอย่างการลบไฟล์ที่เสียหายจาก Windows และติดตั้งโปรแกรมใหม่โดยใช้ตัวจัดการแพ็กเกจจะเพียงพอ คุณจะไม่สามารถลบไฟล์จากใน Linux ได้เมื่อไฟล์นั้นเสียหาย
ฉันจะหลีกเลี่ยงสิ่งนี้ในอนาคตได้อย่างไร
ห้ามใช้ไฟล์ใด ๆ ในlxss
ไดเรกทอรีจาก Windows แทน:
หากคุณมีไฟล์ที่คุณต้องการที่จะเข้าถึงได้จากทั้ง Windows และ Linux เก็บไว้นอกlxss
ไดเรกทอรีทุกที่อื่นในระบบ Windows ของคุณ คุณสามารถเปิดไฟล์ Windows จาก Linux โดยใช้การทำงานร่วมกันอัตโนมัติของ DrvFS : /mnt/c
ไดเรกทอรีนี้มีไฟล์ทั้งหมดจากไดรฟ์ C: และสามารถอ่านและเขียนได้จาก Linux
เริ่มต้นในรุ่น Windows 1903 (มีนาคม 2019) WSL มีไฟล์เซิร์ฟเวอร์พิเศษที่ทำให้ไฟล์ของคุณพร้อมใช้งานสำหรับแอปพลิเคชัน Windows ทั้งหมด ถ้าคุณวิ่ง
explorer.exe .
จากนั้น File Explorer จะเปิดขึ้นเพื่อแสดงไดเรกทอรี Linux ปัจจุบัน - คุณสามารถคัดลอกไฟล์เข้าหรือออกจากหน้าต่างนั้นหรือแก้ไขด้วยแอปพลิเคชันใดก็ได้ เส้นทางไดเรกทอรีจะเป็นเช่น\\wsl$\Ubuntu\var\www
: \\wsl$\
ส่วนที่ส่งการเข้าถึงไฟล์ผ่านทางเลือกที่ปลอดภัยเส้นทาง
หากคุณสามารถทำได้สิ่งนี้จะเป็นเส้นทางที่ดีที่สุดไปข้างหน้า (หรือบางครั้งก็เป็นจุดด้านบน) สำหรับรุ่นเก่าอ่านต่อ
หากมีไฟล์ที่คุณต้องอยู่ในสถานที่เฉพาะเช่นไฟล์กำหนดค่าและคุณต้องการแก้ไขจาก Windows คุณสามารถสร้างลิงก์สัญลักษณ์จากภายใน Linux ไปยังไฟล์หรือตำแหน่งจริงของไดเรกทอรี:
ln -s /mnt/c/.../abc ~/.config/xyz/abc
สิ่งนี้จะทำงานได้ตราบใดที่ไฟล์ไม่จำเป็นต้องมีสิทธิ์เฉพาะหรือคุณลักษณะใด ๆ ในลินุกซ์ (เป็นไฟล์ปฏิบัติการหรือคีย์ SSH)
อีกวิธีหนึ่งและอาจจะดีกว่าแก้ไขไฟล์ Linux ของคุณโดยใช้โปรแกรมแก้ไข Linux ภายใน terminal nano
, vim
และemacs
ทั้งหมดพร้อมใช้งานและทำงานได้ดีภายใต้ WSL แม้ว่าพวกเขาทั้งหมดจะมีนิสัยใจคอของพวกเขา
หากคุณต้องแก้ไขไฟล์ด้วยโปรแกรม Windows คุณไม่มี Windows เวอร์ชันล่าสุดและคุณไม่สามารถสร้าง symlink ทำสำเนาที่อื่นเพื่อแก้ไขและคัดลอกกลับมาได้ใน/mnt/c
ภายหลังเช่นเดียวกับ แก้ไขด้านบนหรือใช้การควบคุมเวอร์ชันเพื่อซิงโครไนซ์การแก้ไขของคุณในหลาย ๆ ที่
จากการทดลองบางอย่าง Notepad ธรรมดาดูเหมือนจะรักษาคุณสมบัติที่จำเป็น แต่มันไม่เข้าใจการจบบรรทัดของ Unix ดังนั้นคุณน่าจะทำให้เนื้อหาเสียหายด้วยตัวคุณเองและฉันจะไม่พึ่งพาพฤติกรรมนั้นในทุกกรณี เนื่องจากนี่เป็นการดำเนินการที่ไม่ได้รับการสนับสนุนและไม่มีเอกสารอย่างชัดเจนจึงไม่น่าเป็นไปได้ที่เครื่องมือที่ใช้ Windows จะเชื่อถือได้