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

90

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 dossier ou un fichier 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 les Cygwin:

entrez la description de l'image ici

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 d'utiliser Dos2unix (à très longue vitesse).

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 doit stocker sur ses fichiers 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) sont similaires à celles de Windows. 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?

Dave Hamilton
la source
Est-il possible de monter le disque dur Windows dans l'environnement Linux? De cette façon, il devrait afficher tous les fichiers en temps réel ... (ou même seulement le répertoire de la maison Cygwin)
Hastur
3
Excellente idée, mais malheureusement, les fichiers ne sont pas visibles. La solution consiste à copier des fichiers du répertoire Windows dans le répertoire du sous-système Linux via Bash.exe. Cette procédure nécessite de cp -r --no-preserve=all supprimer les autorisations précédentes. Néanmoins, si vous souhaitez apporter des modifications importantes, vous ne pouvez pas utiliser une application Windows pour modifier le fichier dans le système de sous-système Linux. Vous devez le modifier dans votre répertoire Windows, puis le copier. Maintenant, je sais que c'est faisable, MAIS j'avais l'impression que le sous-système Linux était plus natif / intégré à Windows qu'un système d'exploitation isolé
Dave Hamilton.
Vous pouvez suivre l'évolution de ce problème (traitement des fichiers entre Windows et WLS) à l' adresse github.com/Microsoft/BashOnWindows/issues/1051
Gaia
Si vous installez une distribution à partir du Windows Store, le système de fichiers sera à %LocalAppData%\Packages\<some-long-name-of-distro>\LocalState\rootfs.
Ian Kemp

Réponses:

101

Je ne suis pas sûr de bien comprendre votre question, mais votre Ubuntu bash (fenêtre en haut à droite) devrait avoir accès à vos disques Windows /mnt. Par exemple, sur mon /mnt/c/Users/Scott/Desktopordinateur se trouve mon bureau Windows et je peux y lire / écrire des fichiers à partir de vi par exemple. 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 /mnt/d/projects/someproject/dossier d: et de pointer les outils Linux sur ce dossier.

Assurez-vous de mettre à jour régulièrement vos versions de Windows, car elles semblent résoudre beaucoup de problèmes avec chaque version, en particulier en ce qui concerne les liens symboliques et le franchissement des limites entre les systèmes de fichiers entre Linux / Windows.

scottt732
la source
1
Vous avez raison, je pense avoir un peu sauté le flingue. Bien que Bash puisse accéder aux fichiers Windows, Windows ne peut pas copier de fichiers dans le répertoire Linux Sub System. (il peut copier alors, mais Bash ne peut pas les voir car il conserve les permissions sur les fichiers) Quand j’ai installé bash, j’ai pensé que le plus logique était de déplacer mes projets d’un environnement Linux à un autre (tentative de suppression de Cwygin), Et c’est cela qui m’a entrainé dans la voie des maux de tête. J'ai maintenant configuré mon Bashrc pour avoir un répertoire de démarrage de mon environnement Linux précédent et à partir de là. Merci pour votre réponse.
Dave Hamilton
Attendez, comment obtenez-vous / mnt / d pour apparaître? Par exemple, lorsque je connecte un téléphone via MTP, il apparaît sous un chemin du type "This PC \ PhoneName" mais aucune lettre de lecteur n'y est associée.
Michael
Les liens symboliques fonctionnent si vous n'avez pas de barre oblique finale. De plus, vous devez avoir des fichiers du côté Windows du système de fichiers pour pouvoir exécuter des
tâches
mais les fichiers linux ne sont pas mis à jour lorsque je modifie les fichiers Windows?!?!
PrimitiveNom
20

@ 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 des 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. Tous les fichiers que vous modifiez dans Windows seront facilement accessibles et accessibles dans Linux Bash.

Pour cela, vous utiliserez une lncommande comme celle-ci

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

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

Riz
la source
cela ne synchronise pas réellement ... sauf si je dois redémarrer le serveur à chaque fois?
PrimitiveNom
@Anthony son lien symbolique, vous n'avez donc pas besoin de redémarrer le serveur pour cela. En réalité, ce n’est pas une synchronisation, c’est juste pointer vers ce dossier / chemin.
Riz
1
J'ai compris le problème. C'était parce que le fichier CSS avait un tiret dans le nom comme, par exemple css-file.css,. J'ai posté à propos de cette question ici .
PrimitiveNom
9

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

À la place, stockez dans le système de fichiers Windows (par exemple c:\dev\project) les fichiers que vous souhaitez modifier à l’aide des outils Windows et / ou créez / test / run à l’aide des outils / runtimes / plates-formes Linux (par exemple, via /mnt/c/dev/project).

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

HTH.

Richard Turner
la source
1

J'avais besoin de travailler avec PyCharm / eclipse sur Windows 10, alors que pour exécuter / testind, j'avais besoin d'un environnement Linux.

J'ai eu des problèmes pour vérifier de git dans Linux Sub System et l'édition avec les fichiers PyCharm n'a pas été vue immédiatement et avait des problèmes;

devcode=/DevCode

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

J'ai eu ce qui précède dans mon .bashrc dans la région d'Ubuntu. Cela fonctionne parfaitement. Je pourrais éditer Windows et exécuter / tester sous Ubuntu sans aucun problème.

Narayanaa
la source
0

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.

kometen
la source