Windows Linux Alt Sistemi - Ubuntu Dışındaki Dosyalara Erişim


90

Neden, örneğin Windows içinden bir dosya oluşturduğumda, Windows 10'daki (bash.exe) Linux alt sistemi altında göremiyorum

Ekran görüntüsü açıklamalıdır.

Klasör: OMG, Windows Gezgini içinden oluşturuldu. Klasör OMGBash, Linux alt sistem bash.exe ile oluşturuldu

Bir klasör OR dosyası bash.exe dışında oluşturulduğunda, izinler ve sahiplik ne olursa olsun, onu hiçbir zaman göremiyorum.

Dosya izinlerini göstermek için Cygwin'i kullanmak zorunda olduğum bilgileri göstermek için, klasörün görünüp görünmeyeceğini görmek için izinleri de değiştirdim. (Alttaki iki komut penceresi)

Ekran görüntüsü, bash.exe ve Cygwin izinlerini gösteren klasör:

görüntü tanımını buraya girin

Tüm Cygwin scriptlerimi Linux alt sistemine taşımaya çalışıyorum, ancak her dosyayı yeniden oluşturmayı, sonra bash kullanarak kopyalayıp geçmişe çevirmeyi, sonra yeniden biçimlendirmeyi ve ardından Dos2unix'i (çok uzun sargılı) kullanmayı sevmiyorum.

Bunu Linux alt sistemi için GitHub'ta buldum:

diğer biletlerle ilgili tartışmalara göre, doğrudan Windows alt sisteminden Windows’tan kopyalanması desteklenmiyor. AppData altında bir yerde (unutuyorum), WSL dosya sistemi için dosyaları içerdiği anlaşılan bir dizin var. Ancak oraya yeni dosyalar koyarsanız veya mevcut dosyaları değiştirirseniz, değişiklikleriniz WSL'ye doğru şekilde yansıtılmaz.

En iyi tahminim, Linux’un dosyaları için Windows’tan farklı bir meta veri (ve daha fazla önbellek bilgisi, vb.) Saklaması gerektiği, çünkü disk arabelleği modeli de Windows’tan farklıdır ve şu anda yapının ana kopyasını depolayarak uygulanmaktadır. Linux dosya sisteminin bir tür veritabanında ve sadece Windows dosya sistemini bu veritabanı için uygun bir BLOB mağazası olarak kullanmak.

Bunu gerçekten yapmanız gerekiyorsa, bir geçici çözüm bir drag'n'drop .bat komut dosyası veya bash.exe -c "mv% 1 / home / $ USER /" ifadesini yazmaktır. (Muhtemelen% 1 değerini geçerli bir WSL yoluna çevirmek için sed ve tr ile akıllıca bir çalışma yapmanız gerekecek.)

Alternatif olarak - dosyalarınızı bir Windows dizinine koyabilir ve WSL içinde, WSL homedir'inizde görünmelerini sağlamak için "cd ~; ln - s / mnt / c / yol / - / my / files" öğelerini kullanabilir misiniz?


Windows HDD'yi Linux ortamında kurmak mümkün müdür? Bu şekilde tüm dosyaları gerçek zamanlı olarak göstermelidir ... (hatta sadece Cygwin evinin dizini)
Hastur

3
Harika fikir, ama ne yazık ki dosyalar görünmüyor. Çevresindeki yol, dosyaları Windows Directory'den Linux Alt Sistem Dizinine Bash.exe aracılığıyla kopyalamaktır. Bu şekilde cp -r --no-preserve=all yapmak Önceki izinleri bırakmak gerekir . Yine de, herhangi bir ağır değişiklik yapmak istiyorsanız, dosyayı LinuxSubSystem'da düzenlemek için bir windows uygulamasını kullanamazsınız, Düzenlemeniz gerekir, Windows Directory'nizde kopyalayın ve kopyalayın. Şimdi, bunun uygulanabilir olduğunu biliyorum, ancak Linux Alt Sisteminin bir izole işletim sisteminden daha penceresi / birleşik olduğu izlenimini altındaydı
Dave Hamilton


Windows Mağazasından bir dağıtım kurarsanız, dosya sistemi de olacaktır %LocalAppData%\Packages\<some-long-name-of-distro>\LocalState\rootfs.
Ian Kemp,

Yanıtlar:


101

Sorunuzu yanlış anlayıp anlamadığımdan emin değilim, ancak ubuntu bash'ınızın (sağ üst pencere) altındaki Windows tabanlı disklerinize erişebilmesi gerekir /mnt. Örneğin /mnt/c/Users/Scott/Desktop, makinemde Windows masaüstüm ve orada vi'den ex için dosya okuyabilir / yazabilirim. Tam tersinin henüz doğru olduğuna inanmıyorum. Yani, bash dünyanızı Windows explorer'dan keşfedebileceğinizi sanmıyorum.

Bir geliştirici olarak yaptığım şey d: 'deki projeleri barındırmak ve linux tabanlı araçları bu /mnt/d/projects/someproject/klasöre yönlendirmektir.

Windows kurulumlarınızı düzenli aralıklarla güncellediğinizden emin olun, çünkü her bir derlemede, özellikle Linux / Windows arasındaki bağlantılarda ve FS sınırlarını geçerken birçok sorunu çözüyor gibi görünüyor.


1
Haklısın, sanırım silahı biraz atladım. Bash, Windows dosyalarına erişebilirken, Windows dosyaları Linux Alt Sistem dizinine kopyalayamaz. (sonra kopyalayabilir, ancak Bash dosya izinlerini koruduğu için bunları göremez) Bash yüklendiğinde, en mantıklı şey projelerimi bir Linux Ortamından diğerine taşımaktı (Cwygin'i boşaltmaya çalışıyorum), ve bu beni baş ağrılarından aşağı indirdi. Bashrc'imi şimdi önceki Linux ortamımın başlangıç ​​dizinini şimdi alacak ve buradan çalışacak şekilde yapılandırdım. Cevabınız için teşekkürler.
Dave Hamilton

Dur, nasıl ortaya çıkacak / mnt / d? örneğin, bir telefonu MTP üzerinden bağladığımda, "Bu PC \ TelefonAdı" gibi bir yolun altında görünüyor, ancak onunla ilişkilendirilmiş bir sürücü harfi yok.
Michael,

Symlinks takip eden bir eğiklik yoksa çalışır. Ayrıca, Django projelerini yerel olarak çalıştırmak ve tarayıcıda erişmek gibi şeyleri yapmak için dosya sisteminin Windows tarafında dosyalara sahip olmanız gerekir
Zags

ama windows dosyalarını değiştirdiğimde linux dosyaları güncellenmiyor?!?!
BugWhisperer,

20

@ scottt732 güzelce cevap verdi.

Windows'ta çalışan ve Linux Subsystem'daki bu dosyalara gerçekten hızlı bir şekilde erişmek isteyen geliştiriciler için bir ipucu. Sembolik linkleri kullanabilirsiniz .

Örneğin, içinde bir proje üzerinde çalışıyorsanız d:/projects/web-project, yerde bir sembolik bağlantı oluşturabilirsiniz /var/www/web-projectve pencerelerde değiştirdiğiniz tüm dosyalar Linux Bash'te kolayca erişilebilir durumda olacaktır.

Bunun için böyle bir lnkomut kullanacaksınız

ln -s  /mnt/d/projects/web-project  /var/www/web-project

Yukarıdaki satırda /mnt/dWindows'taki d sürücünüz olması gerekiyordu. Apache sanal sunucunuzu bu yola kurun ve gitmeye hazırsınız.


her seferinde sunucuyu yeniden başlatmam gerekmediği sürece aslında senkronize olmuyor mu?
BugWhisperer,

@Bir sembolik bağını atar, bunun için sunucuyu yeniden başlatmanıza gerek kalmaz. Aslında bu senkronizasyon değil, sadece o klasöre / yola işaret ediyor.
Riz,

1
Sorunu çözdüm. Bunun sebebi, CSS dosyasının adında bir çizgi gibi olmasıydı css-file.css. Bu konuyu burada yayınladım .
BugWhisperer,

9

Windows uygulamalarını kullanarak Linux dosyalarını kopyalamamanız / oluşturmamanız / güncellememenizi öneririz .

Bunun yerine, dosyaları c:\dev\projectWindows araçlarını kullanarak düzenlemek ve / veya Linux araçlarını / çalışma zamanları / platformlarını (örneğin üzerinden /mnt/c/dev/project) kullanarak derlemek / çalıştırmak / çalıştırmak istediğiniz Windows dosya sisteminde saklayın .

İçine: Belirli senaryoda, daha sonra, Bash içine açık Bash sizin Cygwin dosyaları kopyalamak ve C üzerinde Cygwin klasörden dosya kopyalamak istiyorsanız ~/bu gibi: cp /mnt/c/Users/dave/Documents/Cygwin/* ~/)

HTH.


1

Windows 10'da PyCharm / eclipse ile çalışmaya ihtiyaç duyuyordum. Çalışırken / testind için Linux ortamına ihtiyacım vardı;

Git'ten Linux Alt Sistemine göz atmakla ilgili sorunlarım vardı ve PyCharm dosyalarıyla düzenleme hemen görülmedi ve sorunları vardı;

devcode=/DevCode

if [ ! -L $devcode ]; then
     ln -s /mnt/c/DevCode /DevCode 
fi

Yukarıdakileri Ubuntu bölgesindeki .bashrc'de aldım. Sorunsuz çalışıyor. Herhangi bir sorun olmadan Windows'u düzenleyebilir ve Ubuntu'da çalıştırabilir / test edebilirim.


0

WSL ve win10 arasında dosya kopyalamak için de benzer bir ihtiyaç vardı. Ubuntu kurulumunda sshd'yi etkinleştirmekle bitirdim böylece win10'dan Linux'a ssh yapabildim. Sonra dosyaları ileri geri kopyalamak için winscp kullanıyorum. En uygun değil, ancak dosyaları çok sık kopyalamıyorum. Ben sshd etkinleştirmek için kullanılan yazıyı bulmaya çalıştım ama bulamıyorum.

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.