Di mana direktori root sistem file Ubuntu di Windows Subsystem untuk Linux dan sebaliknya?

389

Saya telah menginstal subsistem Ubuntu pada Windows 10 (setelah mengaktifkan fitur di pengaturan), tetapi di mana direktori root sistem file Ubuntu terletak di drive?

Juli
sumber
24
PLEASE NOTE Kami (tim WSL) SANGAT menyarankan Anda untuk tidak melakukan spelunk ke dalam folder data distro Linux . Jika Anda melakukannya, kehilangan data dan / atau korupsi SANGAT mungkin Kami sedang berupaya memperbaiki skenario interop ini dan akan mengumumkan kemajuan apa pun di blog kami: blogs.msdn.microsoft.com/commandline
Rich Turner
@RichTurner Saya menemukan ada alasan yang sangat spesifik (dan menjengkelkan) - kebijakan perusahaan menandai folder .ssh dengan izin yang salah berulang kali berarti perlu menandai struktur sebagai "terlarang" pada skrip perusahaan. Tapi secara umum - saya setuju dengan Anda.
Danny Staple
Meskipun terlihat seperti pada kotak dengan pembaruan yang lebih baru - ini tidak lagi terjadi.
Danny Staple
2
@DannyStaple Jika Anda perlu mengubah hak akses pada file / folder dalam distro Linux dari Windows, penggunaan wsl.exe, misalnya wsl chmod 600 ~/.ssh/id*- jangan tidak menyalin file ke dalam folder tersebut melalui filesystem Windows.
Rich Turner
@ RichTurner: Mengapa kalian tidak melakukan tunnel Linux metadata seperti bagaimana Anda sudah tunnel NTFS metadata?
Mehrdad

Jawaban:

421

Untuk Ubuntu yang diinstal dari Windows store:

Setiap distribusi yang Anda instal melalui toko diinstal ke direktori appdata aplikasi itu. Misalnya: C:\Users\<username>\AppData\Local\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\LocalState - benhillis

Dalam iterasi sebelumnya dari Subsistem Windows untuk Linux, sistem file Ubuntu berada di %localappdata%\Lxss(misalnya, C:\Users\Username\AppData\Local\Lxss- ganti Username dengan Username Anda pada Windows). Lihat posting blog WSL di Dukungan Sistem File :

Sistem file utama yang digunakan oleh WSL adalah VolF. Ini digunakan untuk menyimpan file sistem Linux, serta konten direktori home Linux Anda. Dengan demikian, VolF mendukung sebagian besar fitur yang disediakan VFS Linux, termasuk izin Linux, tautan simbolis, FIFO, soket, dan file perangkat.

VolF digunakan untuk me-mount direktori root VFS, menggunakan %LocalAppData%\lxss\rootfssebagai backing storage. Selain itu, ada beberapa titik pemasangan VolF tambahan, terutama /rootdan /homeyang dipasang menggunakan masing %LocalAppData%\lxss\root- %LocalAppData%\lxss\homemasing. Alasan untuk mount terpisah ini adalah bahwa ketika Anda menghapus WSL, direktori home tidak dihapus secara default, sehingga file pribadi yang disimpan di sana akan dipertahankan.

PERINGATAN

Membuat / memodifikasi file apa pun dalam subsistem Linux menggunakan aplikasi & alat Windows dapat menyebabkan korupsi Data dan kehilangan data dalam subsistem Ubuntu! (Terima kasih kepada Rich Turner karena menyarankan kata-kata hati-hati ini!) Ini sama sekali tidak didukung. Dari posting blog yang sama:

Interoperabilitas dengan Windows

Sementara file VolF disimpan dalam file biasa di Windows di direktori yang disebutkan di atas, interoperabilitas dengan Windows tidak didukung. Jika file baru ditambahkan ke salah satu direktori ini dari Windows, itu tidak memiliki EA yang dibutuhkan oleh VolF, sehingga VolF tidak tahu apa yang harus dilakukan dengan file tersebut dan mengabaikannya. Banyak editor juga akan menghapus EA saat menyimpan file yang ada, lagi-lagi membuat file tidak dapat digunakan di WSL.


Sistem file Windows Anda terletak di /mnt/cdalam lingkungan Bash shell.

masukkan deskripsi gambar di sini

Sumber: blog Dustin Kirkland , howtogeek

souravc
sumber
14
Lxss disembunyikan di sistem file saya ... menyebabkan sedikit goresan kepala selama satu atau dua menit yang menyebalkan. Sekarang saya telah membuat jalan pintas, tetapi saya masih belum bisa menyembunyikannya.
Ogaday
3
@ Om, Anda tidak dapat menyembunyikannya menggunakan jendela properti karena ditandai sebagai direktori sistem. Anda dapat menyembunyikannya menggunakan attrib -s -h lxssyang akan menghapusnya sebagai direktori sistem juga.
developerbmw
3
Sepertinya lokasi telah berubah atau berbeda antara sistem karena tambang berada di lokasi yang berbeda. Saya telah memposting di bawah ini dengan lokasi saya.
NicholasJohn16
8
@souravc Bisakah Anda menambahkan catatan penting ke bagian atas jawaban Anda, SANGAT merekomendasikan untuk tidak membuat / memodifikasi file dalam LXSS menggunakan aplikasi & alat Windows: Korupsi dan kehilangan data sangat mungkin terjadi jika Anda melakukannya!
Rich Turner
5
Silakan baca posting yang disebutkan di atas: blogs.msdn.microsoft.com/commandline/2016/11/17/… . Aman untuk mengakses sistem file Windows dari WSL yang merupakan alasan kami memasang drive Anda di bawah /mnt/<drive>/, tetapi TIDAK aman (belum) untuk mengakses sistem file Linux dari Windows yang mengapa kami tidak menyediakan akses mudah ke sistem file distro.
Rich Turner
51

Ini tampaknya telah berubah sejak Bash awalnya diperkenalkan, dan tidak berlaku untuk distribusi dari Windows Store, atau mungkin tidak konsisten untuk semua sistem karena direktori home saya terletak di lokasi lain:

%localappdata%\lxss\home\{username}

atau:

C:\Users\{user}\AppData\Local\lxss\{username}

Di mana {user}Nama Pengguna Windows Anda dan {username}Nama Pengguna UNIX Anda disetel saat menginstal.

Jadi direktori root adalah:

%localappdata%\lxss

Perhatikan bahwa direktori root mungkin tidak terlihat di Windows Explorer dari %localappdata%direktori. Anda harus dapat mengaksesnya dengan mengetiknya di 'bilah alamat' Explorer.

Nicholas John16
sumber
Mesin saya tidak dapat menemukan: "C: \ Users \ {user} \ AppData \ Local \ Lxss \ {username}" atau "% localappdata% \ Lxss \ home \ {username}" tetapi "C: \ Users \ {user } \ AppData \ Local \ lxss \ {username} "berfungsi. IE menggunakan "lxss" TIDAK "Lxss"
Joe Codeswell user601770
Sistem saya memiliki subdirektori rootfs, tetapi rootfs / home kosong sementara ./home memiliki akun dan file pengguna saya. Tampaknya paling aman untuk hanya pergi ke% localappdata% \ lxss dan kemudian menjelajah dari sana untuk melihat tata letak yang Anda miliki, plus langsung meramban ke alamat itu menghindari masalah dengan direktori lxss disembunyikan.
jla
1
@ JoeCodeswelluser601770 Aneh. Sistem file Windows biasanya tidak sensitif huruf besar / kecil. Saya dapat memasukkan% localappdata% \ Lxss atau% localappdata% \ lxss dan keduanya menuju ke% HOMEPATH% \ AppData \ Local \ lxss
jla
8
Perhatikan bahwa folder ini (lxss) tidak muncul di windows explorer saya daftar folder di AppData \ Local, bahkan dengan tampilan folder tersembunyi diaktifkan. Saya harus secara manual menempelkan menambahkan folder lxss ke bilah explorer untuk mendapatkan file di sini misalnya mengedit folder "url" ke sana
Colin D
Atau, Anda dapat pergi ke Desktop, klik kanan "New-> Shortcut" dan rekatkan path seperti C: \ Users \ yourname \ AppData \ Local \ lxss \ home \ yourname
Colin D
13

Jika Anda menginstal Linux dari MS Market:

mereka menempatkan distro di bawah:

$ cat /proc/registry/HKEY_CURRENT_USER/Software/Microsoft/Windows/CurrentVersion/Lxss/\{861c29b4-ebe2-49a5-8a22-7e53a27934a0\}/BasePath
C:\Users\user\AppData\Local\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\LocalState

Distro default ditentukan oleh:

bash# cat /proc/registry/HKEY_CURRENT_USER/Software/Microsoft/Windows/CurrentVersion/Lxss/DefaultDistribution
{861c29b4-ebe2-49a5-8a22-7e53a27934a0}

Root Linux lebih dalam:

c:/Users/user/AppData/Local/Packages/46932SUSE.openSUSELeap42.2_022rs5jcyhyac/LocalState/rootfs

PS. Saya menggunakan Cygwin untuk mengeksplorasi kunci registri.

Jika menggunakan PowerShell untuk tujuan yang sama, perintahnya adalah:

# obtain the value of the ID of the default Linux distribution (and store it in a variable to avoid escaping characters issues):
$DEFAULT_LXSS_ID = (Get-ItemPropertyValue -Path REGISTRY::HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Lxss\ -name DefaultDistribution)

# which will have a value like:
echo  $DEFAULT_LXSS_ID
{bde539d6-0c87-4e12-9599-1dcd623fbf07}

# display the directory containing the rootfs Windows directory (mapped to the / Linux directory)
Get-ItemPropertyValue -Path REGISTRY::HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Lxss\$DEFAULT_LXSS_ID -name BasePath | Format-List -property "BasePath"
%LocalAppData%\Packages\CanonicalGroupLimited.Ubuntu18.04onWindows_79rhkp1fndgsc\LocalState

PPS. https://blogs.msdn.microsoft.com/commandline/2016/11/17/do-not-change-linux-files-using-windows-apps-and-tools/

gavenkoa
sumber
5

Satu-satunya hal yang berhasil bagi saya adalah %localappdata%\lxss\home\{username}, di mana itu {username}adalah nama pengguna BASH yang Anda berikan saat instalasi. Untuk beberapa alasan, setelah menunjukkan folder tersembunyi's lxss menolak untuk muncul C:\Users\WINDOWS-USER\AppData\Local\, dan juga memberikan C:\path lengkap dengan windows dan nama pengguna BASH juga tidak berfungsi.

Dan tolong buat pintasan desktop untuk apa yang berhasil.

dianggap biasa
sumber
wow tip yang bagus, punya masalah yang sama
Nicolas Mommaerts
4

Anda dapat dengan cepat membuka Bash dari jendela File Explorer di folder yang dibuka dengan mengetikkan bashbilah lokasi.

Itu cukup.

Anda juga dapat menambahkan item menu konteks. Saya pribadi tidak merekomendasikannya jika tidak diperlukan, karena menambahkan pintasan ke menu konteks menggunakan lebih banyak RAM.

https://www.howtogeek.com/270810/how-to-quickly-launch-a-bash-shell-from-windows-10s-file-explorer/

Kanguru
sumber
Tidak bekerja untuk saya. Ini membuka command prompt dan meluncurkan bash.
blablatros
@blablatros ya tetapi dalam folder di bash di penyihir Anda memiliki explorer terbuka saat menulis di bash explorer bar dan menekan enter. Coba di folder My Documents membuka folder Windows Explorer dan di bilah lokasi tulis bash dan itu akan membuka bash ubuntu di folder itu :)
Kangarooo
1
@ Kangarooo: Saya ingin mengakses file melalui windows 10 gui dan juga sebaliknya. Dalam jawaban saya di atas, saya menemukan cara menemukan direktori bash melalui Windows 10 file explorer, jadi saya melanjutkan untuk menyalin beberapa file dari hard drive eksternal saya ke direktori itu. Namun, ketika saya membuka terminal bash dan menekan ls -a, itu tidak menunjukkan file yang saya tambahkan. Bash tidak mengenali file yang saya singgahi melalui windows explorer file, yang bagi saya telah sepenuhnya mengalahkan tujuan menginstal bash di windows.
Thinkinbinary