Підсистема Windows Linux - доступ до файлів за межами Ubuntu


90

Чому, наприклад, коли я створюю файл із Windows, я не можу бачити його під підсистемою Linux у Windows 10 (bash.exe)

Скріншот повинен пояснювати.

Папка: OMG створений з Windows Explorer. Папка OMGBash створена з підсистемою Linux bash.exe

Коли файл папки АБО створений за межами bash.exe, я його ніколи не бачу, незалежно від дозволів та прав власності.

Щоб показати інформацію, яку мені довелося використовувати Cygwin для показу дозволів на файли, я також змінив дозволи, щоб побачити, чи з’явиться папка. (Два командні вікна внизу)

Знімок екрана із дозволами на папки, bash.exe та Cygwin:

введіть тут опис зображення

Я намагаюсь перенести всі свої скрипти Cygwin на підсистему Linux, але я не думаю, що відтворювати кожен файл, потім потрібно копіювати та пропускати за допомогою bash, потім переформатувати, а потім використовувати Dos2unix (дуже довго намотується).

Знайдено це на GitHub для підсистеми Linux:

копіювання безпосередньо в підсистему Linux з Windows не підтримується, відповідно до обговорення інших квитків. Десь у AppData є каталог (я забуваю, де), який, схоже, містить файли для файлової системи WSL. Але якщо ви розмістили там нові файли або змінили існуючі файли там, ваші зміни не відображаються правильно у WSL.

Моя найкраща здогадка полягає в тому, що Linux повинен зберігати різні метадані (і більше інформації про кешування тощо), оскільки його дискова буферизаційна модель також відрізняється) щодо своїх файлів, ніж це робить Windows, і що це в даний час реалізовано, зберігаючи головну копію структури файлової системи Linux у якійсь базі даних та просто використанні файлової системи Windows як зручного магазину BLOB для цієї бази даних.

Якщо вам дійсно потрібно це зробити, вирішенням проблеми буде написати сценарій drag'n'drop .bat або щось таке, що робить bash.exe -c "mv% 1 / home / $ USER /". (Вам доведеться виконати якісь розумні роботи з sed і tr, певно, щоб перевести% 1 на дійсний шлях WSL.)

Як альтернатива - чи можете ви помістити свої файли в каталог Windows, а в межах WSL зробити "cd ~; ln -s / mnt / c / шлях / до / мій / файлів", щоб вони виявилися у вашому WSL homedir?


Чи можливо встановити жорсткий диск Windows в середовищі Linux? Таким чином він повинен показувати всі файли в режимі реального часу ... (або навіть лише каталог будинку Cygwin)
Hastur

3
Чудова ідея, але, на жаль, файлів не видно. Шляхом його вирішення є копіювання файлів із каталогу Windows у каталог підсистем Linux через Bash.exe. Для цього потрібно скасувати cp -r --no-preserve=all попередні дозволи. Тим не менш, якщо ви хочете внести якісь серйозні зміни, ви не можете використовувати програму Windows для редагування файлу в LinuxSubSystem. Ви повинні відредагувати його у своєму каталогу Windows, а потім скопіювати його. Тепер я знаю це, його працездатність, Але я був під враженням, що підсистема Linux була більш рідною / інтегрованою у windows, ніж ізольована ОС
Дейв Гамільтон

Ви можете бути в курсі просування цієї проблеми (обробка файлів між Windows та WLS) за адресою github.com/Microsoft/BashOnWindows/isissue/1051
Gaia

Якщо ви встановите дистрибутив із магазину Windows, файлова система буде в %LocalAppData%\Packages\<some-long-name-of-distro>\LocalState\rootfs.
Ян Кемп

Відповіді:


101

Я не впевнений, чи я не розумію вашого питання, але ваш ubuntu bash (верхнє праве вікно) повинен мати доступ до ваших дисків на базі Windows /mnt. Наприклад, на моїй машині /mnt/c/Users/Scott/Desktopзнаходиться мій робочий стіл Windows, і я можу читати / записувати файли з vi for ex. Я не вірю, що навпаки це справедливо. Тобто, я не думаю, що ви можете досліджувати свій світ bash з Windows Explorer.

Те, що я робив як розробник, - це розміщення проектів на моєму d: і наведення інструментів на базі linux у цю /mnt/d/projects/someproject/папку.

Переконайтеся, що ви періодично оновлюєте свої версії Windows, оскільки вони, як видається, виправляють багато проблем з кожною збіркою, особливо навколо символьних посилань та перетину меж FS між Linux / Windows.


1
Ви маєте рацію, я думаю, я трохи стрибнув пістолет. Хоча Bash може отримати доступ до файлів Windows, Windows не може копіювати файли в каталог підсистеми Linux. (він може скопіювати тоді, але Bash не може їх побачити, оскільки він зберігає дозволи на файли) Коли я встановив bash, я, хоча, найбільш логічним було те, щоб перемістити свої проекти з одного середовища Linux в інше (спроба відірвати Cwygin), і це це, що почало мене вниз від головних болів. Я налаштував свій Bashrc зараз, щоб він мав стартовий каталог мого попереднього середовища Linux і зараз працював звідти. Спасибі за вашу відповідь.
Дейв Гамільтон

Зачекайте, як змусити / mnt / d з’явитися? Наприклад, коли я підключаю телефон через MTP, він відображається під таким способом, як "Цей ПК \ PhoneName", але з ним немає літери диска.
Майкл

Символьні посилання працюють, якщо у вас немає останньої косої риски. Крім того, вам потрібно мати файли з боку Windows у файловій системі, щоб робити такі речі, як запускати проекти Django локально та отримувати доступ до них у браузері
Zags

але файли Linux не оновлюються, коли я змінюю файли Windows?!?!
BugWhisperer

20

@ scottt732 прекрасно відповів.

Лише порада для розробників, які б працювали в Windows і хотіли реально отримати доступ до цих файлів у підсистемі Linux. Можна використовувати символічні посилання .

Наприклад, якщо ви працюєте над проектом в d:/projects/web-project, ви можете створити симпосилання за адресою, /var/www/web-projectі всі файли, які ви змінюєте у Windows, будуть легко доступні для доступу до Linux Bash.

Для цього ви скористаєтеся lnтакою командою

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

У верхньому рядку /mnt/dмав бути ваш d диск на Windows. Налаштуйте свій віртуальний хост Apache на цей шлях, і ви готові йти.


він насправді не синхронізується ... хіба що мені доведеться кожен раз перезавантажувати сервер?
BugWhisperer

@Anthony є його символічним посиланням, тому вам не потрібно буде перезапускати сервер для цього. Насправді це не синхронізація, а просто вказівка ​​на цю папку / шлях.
Різ

1
Я вирішив питання. Це сталося через те , що файл CSS мав тир в назві , як, наприклад, css-file.css. Я опублікував про це питання тут .
BugWhisperer

9

Ми рекомендуємо не копіювати / створювати / оновлювати файли Linux за допомогою програм Windows .

Натомість зберігайте файли у файловій системі Windows (наприклад c:\dev\project), яку ви бажаєте редагувати файли за допомогою інструментів Windows та / або будувати / перевіряти / запускати за допомогою інструментів Linux / runtimes / platforms (наприклад, через /mnt/c/dev/project).

Якщо у вашому конкретному сценарії ви хочете скопіювати файли Cygwin у Bash, відкрийте Bash та скопіюйте файли зі своєї папки Cygwin на C: в ~/, як це cp /mnt/c/Users/dave/Documents/Cygwin/* ~/:)

HTH.


1

У мене була потреба в роботі з PyCharm / eclipse в Windows 10, а для запуску / testind мені потрібне середовище Linux;

У мене виникли проблеми з перевірки з git в підсистемі Linux та редагування файлів PyCharm, які не були помічені одразу і виникли проблеми;

devcode=/DevCode

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

У мене було сказане вище в моєму .bashrc в районі Ubuntu. Це працює безперебійно. Я міг редагувати Windows і запускати / тестувати в Ubuntu без проблем.


0

У мене була схожа потреба копіювати файли між WSL та win10. У результаті я ввімкнув sshd в установці Ubuntu, щоб я міг ssh в Linux з Win10 Тоді я використовую wincp для копіювання файлів вперед і назад. Не оптимально, але я не копіюю файли дуже часто. Я намагався знайти публікацію, яку я використовував для включення sshd, але не можу її знайти.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.