web-dev-qa-db-fra.com

Sous-système Windows Linux - Accès à des fichiers en dehors d'Ubuntu

Pourquoi, lorsque je crée un fichier à partir de Windows par exemple, ne puis-je pas le voir sous le sous-système Linux dans Windows 10 (bash.exe)

La capture d'écran devrait expliquer.

Dossier: OMG a été créé à partir de Windows Explorer. Le dossier OMGBash a été créé avec le sous-système Linux bash.exe

Lorsqu'un fichier de dossier OR est créé en dehors de bash.exe, je ne le vois jamais, quelles que soient les autorisations et la propriété.

Pour afficher les informations que j'ai eu à utiliser avec Cygwin pour afficher les autorisations de fichiers, j'ai également modifié les autorisations pour voir si le dossier apparaîtrait. (Les deux fenêtres de commande en bas)

Capture d'écran montrant les permissions sur les dossiers, les bash.exe et Cygwin:

 enter image description here

J'essaie de déplacer tous mes scripts Cygwin vers le sous-système Linux, mais je n'ai pas envie de recréer tous les fichiers, de devoir copier et coller à l'aide de bash, puis de reformater puis de Dos2unix (très long) .

Trouvé ceci sur GitHub pour le sous-système Linux:

la copie directement dans le sous-système Linux à partir de Windows n'est pas prise en charge, selon une discussion sur d'autres tickets. Il y a un répertoire quelque part sous AppData (j'oublie où) qui semble contenir les fichiers du système de fichiers WSL. Mais si vous y mettez de nouveaux fichiers ou modifiez des fichiers existants, vos modifications ne sont pas correctement reflétées dans WSL.

Ma meilleure hypothèse est que Linux a besoin de stocker différentes métadonnées (et plus d'informations de mise en cache, etc., car son modèle de mise en mémoire tampon du disque est également différent) de celles de Windows, et que cela est actuellement implémenté en stockant la copie principale de la structure. du système de fichiers Linux dans une base de données, et en utilisant simplement le système de fichiers Windows comme un magasin BLOB pratique pour cette base de données.

Si vous avez vraiment besoin de faire cela, une solution de contournement consisterait à écrire un script drag'n'drop .bat ou à faire en sorte que bash.exe -c "mv% 1/home/$ USER /". (Vous devrez probablement faire un travail intelligent avec sed et tr, probablement, pour convertir% 1 en un chemin WSL valide.)

Vous pouvez également placer vos fichiers dans un répertoire Windows et, dans WSL, effectuer "cd ~; ln -s/mnt/c/chemin/vers/mes/fichiers" pour les faire apparaître dans votre répertoire homologue WSL?

80
Dave Hamilton

Je ne suis pas sûr de comprendre votre question, mais votre ubuntu bash (fenêtre en haut à droite) devrait avoir accès à vos disques Windows sous /mnt. Par exemple, sur mon ordinateur, /mnt/c/Users/Scott/Desktop correspond à mon bureau Windows et je peux lire/écrire des fichiers depuis vi par ex. Je ne crois pas que le contraire soit vrai pour l'instant. Autrement dit, je ne pense pas que vous puissiez explorer votre monde bash à partir de l’explorateur Windows.

Ce que je faisais en tant que développeur, c’est d’héberger des projets sur mon d: et de pointer les outils Linux vers ce dossier /mnt/d/projects/someproject/.

Assurez-vous de mettre à jour périodiquement vos versions de Windows, car elles semblent résoudre de nombreux problèmes, notamment en ce qui concerne les liens symboliques et les intersections FS entre Linux/Windows.

89
scottt732

@ scottt732 a répondu magnifiquement.

Juste un conseil pour les développeurs qui travaillent sous Windows et souhaitent accéder très rapidement à ces fichiers du sous-système Linux. Vous pouvez utiliser liens symboliques .

Par exemple, si vous travaillez sur un projet dans d:/projects/web-project, vous pouvez créer un lien symbolique à l'emplacement /var/www/web-project et tous les fichiers que vous modifiez dans Windows seront facilement accessibles et accessibles dans Linux Bash.

Pour cela, vous utiliserez la commande ln comme ceci

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

Dans la ligne ci-dessus, /mnt/d était censé être votre lecteur d sous Windows. Configurez votre hôte virtuel Apache sur ce chemin et vous êtes prêt à partir.

19
Riz

Nous vous recommandons de ne pas copier/créer/mettre à jour des fichiers Linux à l'aide d'applications Windows .

Stockez plutôt les fichiers dans le système de fichiers Windows (par exemple, c:\dev\project) que vous souhaitez modifier à l'aide d'outils Windows et/ou créez/test/exécutez à l'aide d'outils/runtimes/plateformes Linux (par exemple, via /mnt/c/dev/project).

Dans votre scénario spécifique, si vous souhaitez copier vos fichiers Cygwin dans Bash, ouvrez Bash et copiez les fichiers de votre dossier Cygwin sur C: dans ~/, comme suit: cp /mnt/c/Users/dave/Documents/Cygwin/* ~/).

HTH.

9
Richard Turner

J'ai eu un besoin similaire de copier des fichiers entre WSL et Win10. J'ai fini par activer sshd sur l'installation Ubuntu afin de pouvoir utiliser ssh sous Linux à partir de win10. Ensuite, j'utilise Winscp pour copier des fichiers dans les deux sens. Pas optimal, mais je ne copie pas les fichiers très souvent. J'ai essayé de trouver le message que j'avais utilisé pour activer sshd mais je ne le trouve pas.

0
kometen