โฮมไดเรกทอรีใน Windows Subsystem สำหรับ Linux คืออะไร


86

เมื่อฉันเริ่มbashระบบย่อย Windows สำหรับ Linux มันจะวางฉันลงในไดเรกทอรี

/mnt/c/Users/<username>

เมื่อฉันlsไดเรกทอรีนี้ผมเห็นไดเรกทอรีDesktop, Documentsฯลฯ ที่ฉันสามารถมองเห็นอยู่ในC:\Users\<username>การใช้ไฟล์ Windows Explorer ตั้งแต่นี้เป็นที่bashโปรแกรมเริ่มต้นที่ผมคาดไว้นี้เป็นไดเรกทอรีบ้านของฉัน แต่เมื่อฉันพิมพ์อย่างใดอย่างหนึ่งcdหรือcd ~ฉันกำลังนำไป

/home/<username>

ซึ่งมีฉัน.bashrc, .profileไฟล์อื่น ๆ ซึ่งผมคาดว่าจะพบในไดเรกทอรีบ้านของฉันในกล่อง Linux นอกจากนี้การป้อนcd ../..จากที่นี่ฉันสามารถดูไดเรกทอรีbin, etcและอื่น ๆ อีกตามที่คาดไว้ในกล่อง Linux

ฉันมีคำถามสองข้อเกี่ยวกับสิ่งนี้ทั้งหมด:

  1. /mnt/c/Users/<username>เปรียบเทียบอะไรกันแน่C:\Users\<username>? ดูเหมือนว่าพวกเขาจะเป็นหนึ่งเดียวกัน --- ดังนั้นคือ/mnt/c/อะไร
  2. ฉันจะดูไฟล์/home/<username>โดยใช้ Windows File Explorer ได้อย่างไร ไม่ใช่ว่าฉันอยากจะ --- จริงๆฉันแค่พยายามทำความเข้าใจว่า Windows จัดการกับระบบย่อยนี้สำหรับลีนุกซ์อย่างไร

คำตอบ:


102

สำหรับ 2: เส้นทางปัจจุบันเกี่ยวข้องกับการกระจายที่คุณติดตั้งจาก Microsoft Store มากกว่าหนึ่งเส้นทางทั่วโลก ดังนั้นสำหรับ Ubuntu ตอนนี้อยู่ที่:

%LOCALAPPDATA%\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\LocalState\rootfs

ฉันถือว่าการกระจายอื่น ๆ จะอยู่ในตำแหน่งที่คล้ายกันภายใต้โฟลเดอร์ที่เกี่ยวข้องภายใต้:

%LOCALAPPDATA%\Packages\

11
มีใครอีกไหมที่พบว่าการปฏิบัตินี้รบกวน? โฟลเดอร์ HOME ของฉันไม่ควรเป็นที่ที่ปลอดภัยสำหรับข้อมูลของฉันภายใน repo หรือไม่? ด้วยวิธีการนี้ repo ที่ใช้งานไม่ได้และติดตั้งใหม่จะลบข้อมูลของฉันโดยไม่พยายามปกป้องเลยและจะถูกซ่อนไว้เมื่อฉันมี REAL / home อยู่แล้ว ทำไมไม่มีข้อมูลยืนยันอยู่ที่นั่น ทั้งหมดนี้เป็นอันตรายมากกว่าเพราะตอนนี้เราได้รับการสนับสนุนให้ลอง / ใช้ / swap distros (WLinux) รู้สึกเหมือนมีคนไม่ได้คิดเรื่องทั้งหมดนี้ผ่าน
rainabba

ในกรณีของฉัน (1809) โฟลเดอร์เรียกว่า CanonicalGroupLimited.Ubuntu18.04onWindows_79rhkp1fndgsc
jao

2
หมายเหตุสำคัญ: คุณยังไม่ควรใช้ไฟล์ Linux โดยใช้เครื่องมือ Windows ดู: blogs.msdn.microsoft.com/commandline/2016/11/17/… (ดูที่บล็อกโพสต์เอง)
coltoneakins

น่าอัศจรรย์ อีกเหตุผลหนึ่งที่คอมไพล์สำหรับ windows / mingw ยังคงใช้งานได้ดีกว่า ... คิดมากกว่าเดิมเกี่ยวกับปริมาณงานจริงทุกวัน มีวิธีการแมปใหม่อย่างถูกต้องหรือไม่
enorl76

1
@rainabba ที่หน้าแดงฉันเห็นด้วย แต่หลังจากความคิดบางอย่างฉันยังคงเลือกที่จะใช้ Windows มากกว่า Ubuntu แบบเต็มเป่า ด้วยเหตุนี้ฉันจึงถือว่า WSL เป็นวิธีการเข้าถึงเครื่องมือ Linux แต่ยังคงรักษาระบบไฟล์ windows ของฉันในฐานะพลเมืองชั้นหนึ่ง ดังนั้น/mnt/c/ฉันจึงเก็บทุกอย่างไว้ใน WSL ฉันจะรักมันถ้า WSL กลับไปเป็น LWS; หมายความว่ามันจะยอดเยี่ยมถ้าเราทุกคนใช้ Ubuntu กับ Linux Subsystems สำหรับ Windows เพื่อใช้งาน Windows 10 ฉบับสมบูรณ์ที่รวมอยู่ใน Ubuntu ฉันรู้ว่ามันจะยากขึ้นมาก แต่ก็สามารถฝันได้
Chev

29
  1. /mnt/cเหมือนกันC:\ทุกประการ มันเป็นเพียงไวยากรณ์สำหรับการเข้าถึงจาก WSL
  2. C:\Users\<username>\AppData\Local\Lxss\rootfsดูใน

8
คำเตือน: blogs.msdn.microsoft.com/commandline/2016/11/17/…นั่นคือสถานที่ใช่ แต่อย่าเปลี่ยนแปลงอะไร
chx

6
ตั้งแต่ปี 2018 คำตอบนี้ไม่ถูกต้องอีกต่อไป ดูคำตอบของ @ MichaelBond
dr01

11
ตอนนี้มันหายไปC:\Users\[USERNAME]\AppData\Local\Packages\CanonicalGroupLimited.UbuntuonWindows_[CODE]\LocalState\rootfs\ คุณอาจรู้ว่าไม่ดีถ้าคุณแก้ไข/ด้วยตนเอง
ระลึก

สำหรับการเข้าถึงง่ายผ่านการคัดลอกพาสต้า, `% LOCALAPPDATA% \ Packages \ CanonicalGroupLimited.UbuntuonWindows_ [code] \ LocalState \ rootfs`
กิ่งไม้

โปรดทราบว่าโฟลเดอร์ lxss จะถูกซ่อนใน File Explorer เว้นแต่คุณจะยกเลิกการเลือก "ตัวเลือกโฟลเดอร์> ดู: การตั้งค่าขั้นสูง: ซ่อนไฟล์ระบบปฏิบัติการที่ได้รับการป้องกัน (แนะนำ)" แม้ว่ามันจะถูกซ่อนคุณยังสามารถเปิดโฟลเดอร์ใน File Explorer ได้หากคุณใส่ไว้ในพา ธ ของโฟลเดอร์
Daryn

17

เกี่ยวกับระบบไฟล์ที่ติดตั้ง /mnt/c

  1. อะไรคือ / mnt / c / ผู้ใช้ / เปรียบเทียบกับ C: \ Users \ ดูเหมือนว่าพวกเขาจะเป็นหนึ่งเดียวกัน --- ดังนั้นอะไรคือ / mnt / c /?

ตรงกันข้ามกับ Windows, Linux (และระบบอื่น ๆ ที่ใช้ Unix) ใช้โครงสร้างโฟลเดอร์เดียวโดยไม่ขึ้นกับจำนวนดิสก์ที่คุณมี หากคุณมีดิสก์หลายตัวดิสก์เหล่านี้ทั้งหมดต้องติดตั้งกับโครงสร้างโฟลเดอร์ในบางจุด

  • โดยทั่วไปแล้วดิสก์ทั้งหมด (แตกต่างจากที่ใช้ในการบูตระบบ) จะถูกติดตั้งในโฟลเดอร์ชื่อ/mntหรือ/media

WSL มีระบบไฟล์ชนิดพิเศษชื่อ DrvFS ที่ให้คุณเข้าถึงดิสก์ที่ใช้ใน windows คุณสามารถใช้ DrvFS เพื่อเมาท์ไม่เพียง แต่ระบบไฟล์ windows ของคุณ แต่ยังรวมถึงดิสก์เครือข่ายและสื่อประเภทอื่น ๆ

  • ใน WSL โดยค่าเริ่มต้นC:ดิสก์ใน windows จะถูกเมาท์ภายใต้/mnt/c
  • หากคุณมีดิสก์อื่นเช่นD:ดิสก์ใน windows ดิสก์นั้นจะถูกติดตั้งที่ด้านล่าง/mnt/d

ไฟล์ที่คุณสามารถเห็นในจะเหมือนกันที่คุณมีใน/mnt/c C:หากคุณแก้ไขไฟล์บางไฟล์คุณจะได้รับการเปลี่ยนแปลงในหน้าต่างด้วย

คุณสามารถใช้mountคำสั่งเพื่อเข้าถึงสื่อประเภทอื่น ๆ (เช่นไดรฟ์แบบถอดได้หรือแชร์เครือข่าย)


เกี่ยวกับที่ตั้งของ /home/<username>

  1. ฉันจะดูไฟล์ใน / home / โดยใช้ Windows File Explorer ได้อย่างไร ไม่ใช่ว่าฉันอยากจะ --- จริงๆฉันแค่พยายามทำความเข้าใจว่า Windows จัดการกับระบบย่อยนี้สำหรับลีนุกซ์อย่างไร

ใน WSL ระบบไฟล์ linux ทั้งหมดอยู่ภายใต้โฟลเดอร์ Windows ตำแหน่งของโฟลเดอร์ขึ้นอยู่กับรุ่นของ Windows และการกระจาย WSL ที่คุณใช้

  • WSL เวอร์ชันเริ่มต้นจัดเก็บระบบไฟล์ linux%LOCALAPPDATA%\Lxss\rootfs
  • กระจาย WSL ติดตั้งจาก Windows Store ได้เริ่มต้นใน Windows รูปร่าง 16215 (กลาง 2017) %LOCALAPPDATA%\Packages\...\LocalState\rootfsให้ใช้โฟลเดอร์เหมือน ชื่อของแพ็คเกจจะแตกต่างกันไปขึ้นอยู่กับการกระจาย (เช่นมันแตกต่างกันไปสำหรับ Ubuntu มากกว่า Debian)
  • การกระจาย Linux ที่ติดตั้งโดยใช้เครื่องมืออื่นเช่นlxRunOfflineหรือWSL-DistroLauncherอาจเก็บระบบไฟล์ linux ไว้ในตำแหน่งใดก็ได้

คุณสามารถตรวจสอบตัวเลือกมากมายให้ทราบตำแหน่งของโฟลเดอร์ WSL ที่ ตัวอย่างเช่นฉันคิดว่าตัวเลือกที่ง่ายที่สุดคือใช้lxRunOfflineเพื่อทราบโฟลเดอร์การติดตั้ง

## You can use lxrunoffline to check which WSL distributions have installed
## using:   lxrunoffline list

C:\> lxrunoffline list
backup
Ubuntu-18.04    

## And you can use it to get the location of any of these WSL installations
## using:   lxrunoffline get-dir -n <name of distribution>

C:\> lxrunoffline get-dir -n backup
c:\wsl\installed\backup

C:\> lxrunoffline get-dir -n Ubuntu
C:\Users\Jaime\AppData\Local\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\LocalState

เมื่อคุณรู้ว่าสถานที่ตั้งของโฟลเดอร์การติดตั้งที่อยู่ภายใต้การ/home/<username><installation folder>\rootfs\home\username

  • ตัวอย่างเช่นหากโฟลเดอร์การติดตั้งของคุณคือ c:\wsl\ubuntu
  • /home/<username>อยู่ในc:\wsl\ubuntu\rootfs\home\username

หมายเหตุ:ทั้ง Linux และ Windows จะเก็บการอนุญาตของไฟล์ในวิธีที่ต่างกัน ทุกวันนี้ WSL DrvFS เก็บสิทธิ์ Linux ไว้เป็น Streams (ข้อมูลเมตา) ที่แนบกับไฟล์ที่คุณเห็นใน Windows Microsoft ไม่แนะนำให้แก้ไขไฟล์ linux โดยใช้โปรแกรม Windows เป็นไปได้ว่า applcations ของ Windows บางตัวสร้างความเสียหายให้กับสิทธิ์ของ linuxโดยไม่ต้องแจ้งให้ทราบล่วงหน้า


5

ฉันคิดว่ามันอาจขึ้นอยู่กับว่าคุณใช้ Windows Build รุ่นใด แต่สำหรับฉันในปี 2018 ใน Windows 10 Pro 64 บิตรุ่น 1709 (OS Build 16299.522) และรุ่น 1803 (OS Build 17134.165) กำลังพิมพ์สิ่งนี้] ตำแหน่งยังคงอยู่:

C:\Users\<username>\AppData\Local\lxss

เคล็ดลับคือเมื่อคุณอยู่ที่C:\Users\<username>\AppData\Localคุณจะไม่เห็นlxssโฟลเดอร์ (เว้นแต่คุณจะไม่ได้เลือก "ซ่อนไฟล์ระบบปฏิบัติการที่ได้รับการป้องกัน (แนะนำ)" ในตัวเลือกโฟลเดอร์ของคุณ)

อย่างไรก็ตามเพียงแค่ผนวก\lxssในแถบที่อยู่ของ windows explorer และมันจะนำคุณไปยังโฟลเดอร์

(หมายเหตุผมไม่ได้มี%LOCALAPPDATA%\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgscหรืออะไรที่คล้ายกันที่ถูกกล่าวถึงในคำตอบของไมเคิลพันธบัตร)

ปรับปรุง

ปรากฎว่ามี WSL ดั้งเดิมซึ่งเป็นสิ่งที่ฉันติดตั้งไว้ ขณะนี้ WSL มีให้ผ่านทางแอพ Microsoft store มีเวอร์ชันสำหรับ Ubuntu 18.04 LTS และตอนนี้ก็มีลินุกซ์รสชาติอื่น ๆ (เช่น Debian) หากคุณต้องการที่จะขึ้นไปวันที่คุณอาจต้องการWSL มรดกถอนการติดตั้งและติดตั้งรุ่นร้านค้าไมโครซอฟท์

ที่โฟลเดอร์บ้านของคุณจะขึ้นอยู่กับ WSL ประเภทใดที่คุณติดตั้ง


4
  1. การใช้ WSL bash console ในโฮมไดเร็กตอรี่ของคุณสร้างไฟล์ที่มีชื่อเฉพาะเช่น "test_here.txt"
  2. จากนั้นใช้ Windows Explorer โดยใช้ช่องค้นหาค้นหาไฟล์ test_here.txt
  3. ในไฟล์ที่พบ> คลิกขวา> เปิดตำแหน่งไฟล์

ฉันลองสิ่งนี้ มันไม่ทำงาน ฉันไม่เห็นไฟล์ในการค้นหา อย่างไรก็ตามหากฉันวางไฟล์ใน / mnt / c / Users / <username> จะใช้งานได้อย่างชัดเจน
Eamonn Kenny

ฉันเกรงว่าฉันจะลอง WSL แล้ว แต่ฉันจะไม่ใช้อีกต่อไป ฉันไม่พบว่ามันมีประโยชน์มาก (ฉันใช้ cygwin ทุกวันแทนที่จะเป็น WSL และฉันคิดว่ามันมีประโยชน์มาก) ดังนั้นฉันจึงไม่สามารถยืนยันได้อีกต่อไปขอโทษด้วย)
Ellis

การค้นหา rootfs ทำงาน จากนั้นคุณสามารถนำทางระบบไฟล์ unbuntu ได้จากตรงนั้น
TIGR

2

สี่ขั้นตอนสำหรับ windows 10 pro เพื่อตรึง $ Debian / Ubuntu / OpenSUSE $ HOME ไปที่เมนูเริ่มต้นของ Windows:

  1. จากเมนูเริ่มให้เริ่ม File Explorer
  2. ในแถบที่อยู่ (ไม่ใช่แถบการค้นหา) พิมพ์% LOCALAPPDATA%
  3. ในแถบค้นหาค้นหาชื่อไดเรกทอรี $ HOME ของคุณในกรณีของฉันมันคือ ekenny จะมีรุ่นนี้ประมาณ 3 รุ่น แต่คุณต้องการรุ่นที่มีเส้นทางที่ยาวมาก ๆ
  4. คลิกขวาที่โฮมไดเร็กตอรี่ของคุณแล้วคลิก "ปักหมุดเพื่อเริ่ม"

ตอนนี้คุณมีไดเรกทอรีบ้านของคุณถูกตรึงไว้ที่เมนูเริ่มต้นของคุณ ฉันพยายามสร้างทางลัด แต่ไม่สามารถไปได้ทุกที่


0

ฉันแค่ต้องการค้นหา/etc/environmentโดยใช้ Ubuntu 16.04 ที่ดูในที่เก็บข้อมูล Windows 10 NTFS ฉันพบมันที่นี่:

C:\Users\USER_NAME\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu16.04onWindows_79rhkp1fndgsc\LocalState\rootfs\etc\environment
  • ฉันเปลี่ยน/mnt/c/เป็นC:\สำหรับระบบการตั้งชื่อของ Windows
  • ฉันเปลี่ยนทุกสิ่งที่เกิดขึ้น/เป็น\ด้วยเหตุผลเดียวกัน
  • คุณต้องแทนที่USER_NAMEด้วยชื่อผู้ใช้ Windows ของคุณ
  • ฉันต้องใช้sudo -H Nautilusเพื่อรับสิทธิ์ในการดูไฟล์ผู้ใช้ที่เก็บไว้ใน WSL
  • ไม่อัปเดตไฟล์ Linux ของคุณใน WSL โดยใช้แอปพลิเคชัน Windows มันจะทำลายข้อมูล Linux ของคุณ

จากด้าน Linux (Ubuntu 16.04) ระบบการตั้งชื่อจะเป็น:

$ sudo cat /mnt/c/Users/USER_NAME/AppData/Local/Packages/CanonicalGroupLimited.Ubuntu16.04onWindows_79rhkp1fndgsc/LocalState/rootfs/etc/environment

PATH="/mnt/e/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games"
export LIBGL_ALWAYS_INDIRECT=Yes
export DISPLAY=localhost:0.0

0

ด้วย Windows Insider ปัจจุบัน (วงแหวนเร็ว: Windows 10 build 19025.1) คุณสามารถติดตั้ง distro ของคุณเป็นไดรฟ์เครือข่าย WSL สามารถเข้าถึงได้เนื่องจากwls$พา ธ คือชื่อการแจกจ่ายของคุณ ( wsl -l -q)

ตัวอย่างเช่น net use Z: \\wsl$\Debian /PERSISTENT:YES


คุณแน่ใจหรือไม่ว่าสิ่งนี้ จำกัด อยู่ที่ WSL2 ฉันคิดว่าตั้งแต่ปี 1903 คุณสามารถสำรวจเนื้อหาของโครงสร้างไฟล์ WSL จากภายใน Windows การสร้างที่ตั้งเครือข่ายแผนที่อาจเป็นไปได้เมื่อมีการเปลี่ยนแปลงนั้น
Ramhound

ตามที่ฉันเขียนฉันไม่แน่ใจเกี่ยวกับ WSL2 มีสองจุดคือแนะนำ WSL2 (จาก build 18432) และการกระจายที่สนับสนุนโดย WSL 2 คุณลักษณะนี้จะปรากฏขึ้นพร้อมกับ WSL2 และฉันหวังว่ามันจะทำงานร่วมกับการแจกจ่ายใด ๆ
ลูก

1909 (WSL2) คือ 18363.476 ไม่ใช่ 18432 (Insider Preview 20H1) นอกเสียจากคุณจะพูดว่านี่เป็นเพียงการสร้าง 20H1 เท่านั้นหรือไม่
Ramhound

-1

ใน Bash หากต้องการดูไดเรกทอรีปัจจุบันใน Windows File Explorer ให้ป้อน:

explorer .

อย่าปล่อย "." ออก จะเป็นการเปิด windows explorer ที่โฟลเดอร์ปัจจุบันและคุณสามารถดูว่าทุกอย่างเกี่ยวข้องกับระบบ windows อื่น ๆ ของคุณได้อย่างไร


ขอบคุณสำหรับการสนับสนุน แต่ใช้งานได้เฉพาะใน Bash ไม่ใช่ใน WSL (ระบบย่อย WIndows สำหรับ Linux) ซึ่งเป็นสิ่งที่คำถามนี้เกี่ยวกับ ฉันอยากจะแนะนำให้คุณลบคำตอบของคุณหรืออาจได้รับการ downvoted
rmcsharry

สิ่งนี้ไม่ทำงานใน WSL
Nicolai Anton Lynnerup
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.