Bu neden oldu?
Geleneksel Unix dosya sistemleri Windows dosya sistemlerinden farklı çalıştığı için WSL , dosyaların Linux'a özgü özellikleri hakkında ek bilgileri , bunları temsil etmek için kullanılan Windows dosyalarının genişletilmiş özniteliklerinde depolar . Sıradan Windows programları bu öznitelikleri bilmez ve dosyayı düzenlediğinizde bunları korumaz. Bu olduğunda dosya hakkında önemli bilgiler kaybolur.
WSL bir dosyayı okumaya çalıştığında ve beklediği öznitelikleri bulamadığında, tıpkı yerel bir dosya sistemi bozulursa ne olacağı gibi bir hata bildirilir. Bir dosyadaki öznitelikleri asla ilk etapta görmezse, bu dosya sadece varolmayan olarak kabul edilir ve dosya listelerinde görünmez.
Resmi WSL tavsiyem ise
DEĞİL DO HERHANGİ koşulda Windows uygulamaları, araçlar, komut dosyaları, konsollar vb kullanarak Linux dosyaları oluşturmak ve / veya değiştirme
Windows'dan Linux dosyaları oluşturmak / değiştirmek, muhtemelen veri bozulmasına neden olabilir ve / veya dağıtım ortamınızı kaldırmanızı ve yeniden yüklemenizi gerektiren Linux ortamınıza zarar verir!
bu nedenle (ancak daha büyük ve daha kırmızı ve daha fazla alt çizgiyle). "Linux dosyaları" lxss
dizininizdeki herhangi bir şey anlamına gelir . Linux içinden normal Windows dosyalarını /mnt/c/...
DrvFS dosya sistemi aracılığıyla değiştirebilirsiniz , ancak bunun tersini yapamazsınız.
Ancak, 1903, Windows 10 sürüm yeni bir mekanizma tanıtır gelmez dosyaları Windows'tan güvenle düzenlenebilir izin bu konuda doğru yolu gitmek sürece. Bu, zaten bozuk dosyalar sorununu düzeltmeye yardımcı olmaz, ancak gelecekte bundan kaçınabilir.
Düzeltmek için ne yapabilirim?
Bir dosyayı zaten düzenlediyseniz ve şimdi dosyaya erişemiyorsanız, içeriği Windows'un kendisinden okumak ve dosyayı bu şekilde geri yüklemek hala mümkündür.
Bunu yapmak için yapmanız gerekenler:
AppData\Local\lxss
Dosya Gezgini'ni kullanarak dizinin içindeki dosyanın bulunduğu konuma gidin ve dosyayı sürücünüzde masaüstünüz gibi başka bir yere taşıyın.
- Bundan sonra WSL'yi yeniden başlatın, yalnızca tüm terminallerinizi kapatarak ve yeni bir tane açarak yapabileceğiniz dahili önbelleğini temizleyin. Arka planda çalışan sunucu işlemleriniz varsa, bunları da durdurmanız gerekir.
- Linux içinde yine bozuk dosyanın orijinal konumuna gidin. Dosyayı başarıyla kaldırdıysanız, artık hiç görünmeyecek.
ls
Kontrol etmek için çalıştırın .
Taşındığınız dosyayı kontrol edin: çalıştırın
cat /mnt/c/Users/.../Desktop/abc
dosyanın orijinal içeriğini görmek için.
Her şey şimdiye kadar çalıştıysa, artık bu dosyayı olmasını beklediğiniz yere kopyalayabilirsiniz:
cp /mnt/c/Users/.../Desktop/abc ~/alphabet/abc
cp
Komut dosyası üzerinde gerekli gizli özelliklerini geri wsl neden olacaktır.
Bu talimatlar normal veri dosyaları için çalışır, ancak önemli bir işletim sistemi dosyasıysa, tamamen yeniden yüklemeniz gerekebilir . Kritik olmayan birçok program için, bozuk dosyayı Windows'tan silmek ve paket yöneticisini kullanarak programı yeniden yüklemek yeterli olacaktır. Dosya bozulduktan sonra dosyayı Linux içinden silemezsiniz.
Gelecekte bundan nasıl kaçınabilirim?
lxss
Dizin içindeki hiçbir dosyayı Windows'tan asla değiştirmeyin . Yerine:
Hem Windows hem de Linux'tan erişmek istediğiniz bir dosyanız varsa, dosyayı dizinin dışında , lxss
Windows sisteminizde başka bir yerde saklayın . Otomatik DrvFS birlikte çalışabilirliğini kullanarak Windows dosyalarını Linux'tan açabilirsiniz : /mnt/c
dizin C: sürücünüzdeki tüm dosyaları içerir ve bunlar Linux'tan okunabilir ve yazılabilir.
1903 Windows sürümünden (Mart 2019) başlayarak WSL , dosyalarınızı tüm Windows uygulamaları için kullanılabilir hale getiren özel bir dosya sunucusu içerir . Eğer koşarsan
explorer.exe .
Dosya Gezgini geçerli Linux dizinini göstererek açılır - dosyaları o pencerenin içine veya dışına kopyalayabilir veya herhangi bir uygulama ile düzenleyebilirsiniz. Dizin yolu şuna benzer olacaktır \\wsl$\Ubuntu\var\www
: \\wsl$\
bölüm, alternatif, güvenli bir yol aracılığıyla dosya erişimi gönderir.
Eğer yapabiliyorsanız, bu en iyi yol olacaktır (veya bazen yukarıdaki nokta). Daha eski sürümler için okumaya devam edin.
Bir yapılandırma dosyası gibi belirli bir yerde olmanız gereken bir dosya varsa ve dosyayı Windows'tan düzenlemek istiyorsanız, Linux'un içinden dosyaya veya dizinin gerçek konumuna sembolik bir bağlantı yapabilirsiniz:
ln -s /mnt/c/.../abc ~/.config/xyz/abc
Bu, dosyanın Linux'ta belirli bir izin veya özniteliğe sahip olması gerekmediği sürece çalışır (yürütülebilir veya SSH anahtarı gibi).
Alternatif olarak ve belki de daha iyisi, terminal içindeki bir Linux düzenleyicisini kullanarak Linux dosyalarınızı düzenleyin. nano
,, vim
ve emacs
hepsi hazır ve WSL altında iyi çalışıyor, ancak hepsinin tuhaflıkları var.
Bir Windows programı ile bir dosyayı düzenlemeniz gerekiyorsa, yeterince yeni bir Windows sürümünüz yoktur ve bunu bir symlink yapamaz, düzenlemek ve /mnt/c
daha sonra tekrar kopyalamak için başka bir yere kopyalayamazsınız . yukarıdaki düzeltmeyi yapın veya düzenlemelerinizi birden çok konumda senkronize etmek için sürüm kontrolünü kullanın.
Bazı deneylerden, sıradan Not Defteri gerekli öznitelikleri koruyor gibi görünüyor, ancak Unix satır sonlarını anlamıyor, bu yüzden içeriği kendiniz bozmanız muhtemeldir ve her durumda bu davranışa güvenmem. Bu açıkça desteklenmeyen ve belgelenmemiş bir işlem olduğundan, Windows tabanlı herhangi bir düzenleyicinin güvenilir olması olası değildir.