73

Почему, например, когда я создаю файл из 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 /path /to /my /files», чтобы они оказались в вашем домашнем каталоге WSL?

4 ответа4

76

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

Как разработчик я занимаюсь размещением проектов на моем d: и указанием инструментов на основе linux в этой папке /mnt/d/projects/someproject/ .

Убедитесь, что вы периодически обновляете свои сборки Windows, так как они, похоже, решают множество проблем с каждой сборкой, особенно вокруг символических ссылок и пересечения границ FS между Linux/Windows.

16

@ scottt732 прекрасно ответил.

Просто совет для разработчиков, которые будут работать в Windows и хотели бы получить быстрый доступ к этим файлам в подсистеме Linux. Вы можете использовать символические ссылки.

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

Для этого вы будете использовать команду ln как это

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

В приведенной выше строке /mnt/d должен был быть вашим диском d на windows. Настройте виртуальный хост Apache по этому пути, и вы готовы к работе.

9

Мы рекомендуем вам не копировать / создавать / обновлять файлы Linux с помощью приложений Windows.

Вместо этого храните файлы в файловой системе Windows (например, c:\dev\project), в которую вы хотите редактировать файлы с помощью инструментов Windows и / или собирать / тестировать / запускать с помощью инструментов Linux / runtime / platform (например, через /mnt/c/dev/project).

В вашем конкретном сценарии, если вы хотите скопировать файлы Cygwin в Bash, откройте Bash и скопируйте файлы из папки Cygwin на C: в ~/ , например: cp /mnt/c/Users/dave/Documents/Cygwin/* ~/)

НТН.

0

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .