Linux için Windows Alt Sistemini kullanırken bir Linux dosyasını bir Windows programıyla düzenledim ve artık ona erişemiyorum


12

Ben kullanıyorum Windows üzerinde Ubuntu Bash veya içindeki başka Linux dağıtımı Linux Windows Subsystem ve içimde bir Linux dosya kaydetmiştiniz lxssWindows editörü ile dizine.

Şimdi ben veya bir program Linux'tan erişmeye çalıştığında, bir hata "girdi / çıktı hatası" alıyorum veya Dosya Gezgini'nde kesinlikle orada görememe rağmen dosya tamamen kayboluyor.

cat abc
cat: abc: Input/output error

Bu neden oldu? Düzeltmek için ne yapabilirim? Gelecekte nasıl önleyebilirim?

Yanıtlar:


13

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ı" lxssdizininizdeki 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:

  1. AppData\Local\lxssDosya 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.
  2. 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.
  3. Linux içinde yine bozuk dosyanın orijinal konumuna gidin. Dosyayı başarıyla kaldırdıysanız, artık hiç görünmeyecek. lsKontrol etmek için çalıştırın .
  4. 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.

  5. 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
    

    cpKomut 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?

lxssDizin 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 , lxssWindows sisteminizde başka bir yerde saklayın . Otomatik DrvFS birlikte çalışabilirliğini kullanarak Windows dosyalarını Linux'tan açabilirsiniz : /mnt/cdizin 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,, vimve emacshepsi 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/cdaha 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.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.