Windows Linux Subsystem - Mengakses File di luar Ubuntu

90

Mengapa, ketika saya membuat file dari dalam Windows misalnya, saya tidak dapat melihatnya di bawah sub sistem Linux di Windows 10 (bash.exe)

Tangkapan layar harus menjelaskan.

Folder: OMG dibuat dari dalam Windows Explorer. Folder OMGBash dibuat dari dengan sub sistem Linux bash.exe

Ketika folder ATAU file dibuat di luar bash.exe, saya tidak akan pernah melihatnya, terlepas dari izin dan kepemilikan.

Untuk menunjukkan informasi yang saya harus menggunakan Cygwin untuk menunjukkan izin file, saya juga telah mengubah izin untuk melihat apakah folder tersebut akan muncul. (Dua jendela perintah di bagian bawah)

Tangkapan layar yang memperlihatkan izin folder, bash.exe, dan Cygwin:

masukkan deskripsi gambar di sini

Saya mencoba untuk memindahkan semua skrip Cygwin saya ke subsistem Linux, tetapi saya tidak suka membuat ulang setiap file, kemudian harus menyalin dan melewati menggunakan bash, kemudian memformat ulang kemudian menggunakan Dos2unix (sangat panjang lebar).

Temukan ini di GitHub untuk subsistem Linux:

menyalin langsung ke subsistem Linux dari Windows tidak didukung, menurut diskusi pada tiket lainnya. Ada direktori di bawah AppData di suatu tempat (saya lupa di mana) yang tampaknya berisi file-file untuk sistem file WSL. Tetapi jika Anda meletakkan file baru di sana, atau memodifikasi file yang ada di sana, perubahan Anda tidak tercermin dengan benar di dalam WSL.

Dugaan terbaik saya adalah bahwa Linux perlu menyimpan metadata yang berbeda (dan lebih banyak informasi caching, dll, karena model disk-buffering juga berbeda) tentang file-file tersebut daripada Windows, dan bahwa ini saat ini diimplementasikan dengan menyimpan salinan utama struktur. dari sistem file Linux dalam suatu database, dan hanya menggunakan sistem file Windows sebagai BLOB-store yang nyaman untuk database itu.

Jika Anda benar-benar perlu melakukan ini, solusinya adalah dengan menulis skrip drag'n'drop .bat atau semacam itu yang melakukan bash.exe -c "mv% 1 / home / $ USER /". (Anda harus melakukan beberapa pekerjaan pintar dengan sed dan tr, mungkin, untuk menerjemahkan% 1 ke jalur WSL yang valid.)

Atau - dapatkah Anda meletakkan file Anda di direktori Windows dan, di dalam WSL, lakukan "cd ~; ln -s / mnt / c / path / ke / my / files" untuk membuatnya tampak berada di homedir WSL Anda?

Dave Hamilton
sumber
Apakah mungkin untuk memasang HDD windows di lingkungan Linux? Dengan cara itu ia akan menampilkan semua file secara realtime ... (atau bahkan hanya direktori rumah Cygwin)
Hastur
3
Ide bagus, Tapi sayangnya file tidak terlihat. Cara mengatasinya, adalah dengan Menyalin file dari Direktori Windows ke Direktori Sistem Sub Linux melalui Bash.exe Melakukannya dengan cara ini perlu cp -r --no-preserve=all Untuk membatalkan izin sebelumnya. Namun, jika Anda ingin membuat perubahan besar, Anda tidak dapat menggunakan aplikasi windows untuk mengedit file di LinuxSubSystem, Anda harus mengeditnya, di Direktori windows Anda dan kemudian salin. Sekarang saya tahu ini, ini bisa diterapkan, TETAPI saya mendapat kesan bahwa Sistem Sub Linux lebih asli / terintegrasi ke dalam windows daripada OS Terisolasi
Dave Hamilton
Anda dapat mengikuti perkembangan masalah ini (penanganan file antara Windows dan WLS) di github.com/Microsoft/BashOnWindows/issues/1051
Gaia
Jika Anda menginstal distro dari Windows Store, sistem file akan berada di %LocalAppData%\Packages\<some-long-name-of-distro>\LocalState\rootfs.
Ian Kemp

Jawaban:

101

Saya tidak yakin apakah saya salah mengerti pertanyaan Anda, tetapi bash ubuntu Anda (jendela kanan atas) harus memiliki akses ke cakram berbasis Windows di bawah /mnt. Sebagai contoh, pada komputer saya /mnt/c/Users/Scott/Desktopadalah desktop Windows saya dan saya dapat membaca / menulis file dari vi untuk ex. Saya tidak percaya yang sebaliknya itu benar dulu. Artinya, saya tidak berpikir Anda dapat menjelajahi dunia bash Anda dari Windows explorer.

Apa yang saya lakukan sebagai pengembang adalah meng-host proyek pada d: dan mengarahkan alat berbasis linux ke /mnt/d/projects/someproject/folder itu.

Pastikan Anda memperbarui Windows build Anda secara berkala karena mereka tampaknya memperbaiki banyak masalah dengan masing-masing build, terutama di sekitar sym-link dan melintasi batas FS antara Linux / Windows.

scottt732
sumber
1
Anda benar, saya pikir saya sedikit melompati pistol. Sementara Bash dapat mengakses file windows, Windows tidak dapat menyalin file ke direktori Linux Sub System. (dapat menyalin kemudian, tetapi Bash tidak dapat melihatnya karena menjaga izin file) Ketika saya menginstal bash, saya pikir hal yang paling logis adalah memindahkan proyek-proyek saya dari satu Lingkungan Linux ke yang lain (Mencoba untuk mematikan Cwygin), Dan ini yang membuatku sakit kepala. Saya telah mengkonfigurasi Bashrc saya sekarang untuk memiliki direktori awal dari lingkungan Linux saya sebelumnya sekarang dan bekerja dari sana. Terima kasih atas tanggapan Anda.
Dave Hamilton
Tunggu, bagaimana Anda membuat / mnt / d muncul? misalnya, ketika saya menghubungkan ponsel melalui MTP itu muncul di bawah jalur seperti "This PC \ PhoneName" tetapi tidak ada huruf drive yang terkait dengannya.
Michael
Symlinks berfungsi jika Anda tidak memiliki garis miring. Juga, Anda perlu memiliki file di sisi Windows dari sistem file untuk melakukan hal-hal seperti menjalankan proyek Django secara lokal dan mengaksesnya di browser
Zags
tetapi file linux tidak diperbarui ketika saya memodifikasi file windows?!?!
PrimitiveNom
20

@ scottt732 menjawab dengan indah.

Hanya tip untuk pengembang yang akan bekerja di Windows dan ingin mengakses file-file di Subsistem Linux sangat cepat. Anda dapat menggunakan tautan simbolis .

Misalnya Jika Anda sedang mengerjakan proyek d:/projects/web-project, Anda dapat membuat symlink di lokasi /var/www/web-projectdan semua file yang Anda ubah di windows akan tersedia untuk diakses di Linux Bash.

Untuk ini, Anda akan menggunakan lnperintah seperti ini

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

Pada baris di atas /mnt/ddimaksudkan untuk menjadi drive Anda di windows. Siapkan host virtual Apache Anda ke jalur ini dan Anda siap berangkat.

Riz
sumber
itu sebenarnya tidak disinkronkan ... kecuali saya harus me-restart server setiap waktu?
PrimitiveNom
@Anthony tautan simbolisnya, jadi Anda tidak perlu me-restart server untuk ini. Sebenarnya ini bukan sinkronisasi, hanya menunjuk ke folder / path itu.
Riz
1
Saya menemukan masalahnya. Itu karena file CSS memiliki tanda hubung dalam nama seperti, misalnya css-file.css,. Saya telah memposting tentang masalah ini di sini .
PrimitiveNom
9

Kami menyarankan Anda untuk tidak menyalin / membuat / memperbarui file Linux menggunakan aplikasi Windows .

Sebagai gantinya, simpan file dalam sistem file Windows (misalnya c:\dev\project) yang ingin Anda edit file menggunakan alat Windows dan / atau build / test / run menggunakan alat Linux / runtime / platform (misalnya via /mnt/c/dev/project).

Dalam skenario spesifik Anda, jika Anda ingin menyalin file Cygwin Anda ke Bash, kemudian buka Bash dan salin file dari folder Cygwin Anda di C: ke ~/, seperti ini cp /mnt/c/Users/dave/Documents/Cygwin/* ~/:)

HTH.

Richard Turner
sumber
1

Saya memiliki kebutuhan untuk bekerja dengan PyCharm / eclipse pada Windows 10 sementara untuk menjalankan / testind saya membutuhkan lingkungan Linux;

Saya memiliki masalah untuk memeriksa dari git ke dalam Sub Sistem Linux dan mengedit dengan file PyCharm tidak terlihat dengan segera dan memiliki masalah;

devcode=/DevCode

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

Saya memiliki yang di atas di .bashrc saya di daerah Ubuntu. Ini bekerja dengan mulus. Saya dapat mengedit Windows dan menjalankan / menguji di Ubuntu tanpa masalah.

Narayanaa
sumber
0

Saya memiliki kebutuhan serupa untuk menyalin file antara WSL dan win10. Saya akhirnya mengaktifkan sshd pada instalasi Ubuntu sehingga saya bisa ssh ke Linux dari win10. Lalu saya menggunakan wincp untuk menyalin file bolak-balik. Tidak optimal, tetapi saya tidak sering menyalin file. Saya mencoba menemukan posting yang saya gunakan untuk mengaktifkan sshd tetapi tidak dapat menemukannya.

kometen
sumber