155 votes

Sous-système Windows-Linux - Accéder aux fichiers en dehors d'Ubuntu

Pourquoi, lorsque je crée un fichier à partir de Windows par exemple, je ne peux 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 l'explorateur Windows. Le dossier OMGBash a été créé à partir du sous-système Linux bash.exe

Lorsqu'un dossier OU un fichier est créé en dehors de bash.exe, je ne peux jamais le voir, quelles que soient les permissions et la propriété.

Pour montrer les informations, j'ai dû utiliser Cygwin pour montrer les permissions des fichiers, j'ai également modifié les permissions pour voir si le dossier apparaissait. (Les deux commandes Windows en bas)

Capture d'écran montrant les permissions du dossier, de bash.exe et de Cygwin :

enter image description here

J'essaie de déplacer tous mes scripts de Cygwin vers le sous-système Linux, mais Je n'ai pas envie de recréer chaque fichier, puis de devoir copier et coller en utilisant bash, puis de reformater et d'utiliser Dos2unix (très long).

J'ai trouvé ça sur GitHub pour le sous-système Linux :

copier directement dans le sous-système Linux à partir de Windows n'est pas supporté, selon la discussion sur d'autres tickets. Il existe une méthode répertoire sous AppData quelque part (je ne sais plus où) qui semble contenir les fichiers pour le système de fichiers WSL. Mais si vous mettez de nouveaux fichiers ou modifiez des fichiers existants, vos modifications ne sont pas reflétées correctement dans WSL. correctement dans WSL.

Je pense que Linux a besoin de stocker des métadonnées différentes (et plus d'informations sur la mise en cache, etc., puisque son modèle de tamponnage disque est également différent) sur ses fichiers que Windows, et que cela est et que ceci est actuellement implémenté en stockant la copie principale de la structure du du système de fichiers Linux dans une sorte de 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 serait d'écrire un fichier drag'n'drop .bat script ou quelque chose du genre qui fait bash.exe -c "mv %1 /home/$USER/". (Vous devrez faire un travail astucieux avec sed et tr, probablement, pour traduire %1 en un chemin WSL valide).

Alternativement, vous pourriez mettre vos fichiers dans un répertoire Windows et, et, dans WSL, faire "cd ~ ; ln -s /mnt/c/path/to/my/files" pour qu'ils apparaissent pour qu'ils apparaissent comme étant dans votre répertoire personnel WSL ?

0 votes

Est-il possible de monter le disque dur de Windows sous l'environnement Linux ? De cette façon, tous les fichiers devraient être affichés en temps réel... (ou même seulement le répertoire de la maison Cygwin).

3 votes

Bonne idée, mais malheureusement les fichiers ne sont pas visibles. Le moyen de contourner ce problème est de copier les fichiers du répertoire Windows vers le répertoire du sous-système Linux via Bash.exe. En procédant de cette manière, il faut cp -r --no-preserve=all Pour abandonner les permissions précédentes. Cependant, si vous voulez faire des changements importants, vous ne pouvez pas utiliser une application Windows pour éditer le fichier dans le sous-système Linux, vous devez l'éditer 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é dans Windows qu'un OS isolé.

0 votes

Vous pouvez suivre l'évolution de ce problème (traitement des fichiers entre Windows et WLS) à l'adresse suivante github.com/Microsoft/BashOnWindows/issues/1051

203voto

scottt732 Points 1914

Je ne sais pas si j'ai mal compris votre question, mais votre bash ubuntu (fenêtre en haut à droite) devrait avoir accès à vos disques Windows sous /mnt . Par exemple, sur ma machine /mnt/c/Users/Scott/Desktop est mon bureau Windows et je peux y lire/écrire des fichiers depuis vi par exemple. Je ne pense pas que le contraire soit vrai pour l'instant. C'est-à-dire que je ne pense pas que vous puissiez explorer votre monde bash depuis l'explorateur Windows.

Ce que j'ai fait en tant que développeur, c'est d'héberger des projets sur mon d : et de faire pointer les outils basés sur linux vers ce d :. /mnt/d/projects/someproject/ dossier.

Veillez à mettre à jour régulièrement vos builds Windows, car ils semblent corriger de nombreux problèmes à chaque build, notamment en ce qui concerne les liens symboliques et le franchissement des frontières FS entre Linux et Windows.

1 votes

Vous avez raison, je pense que j'ai un peu brûlé les étapes. Alors que Bash peut accéder aux fichiers Windows, Windows ne peut pas copier de fichiers dans le répertoire du sous-système Linux. (Il peut les copier, mais Bash ne peut pas les voir car il conserve les permissions des fichiers) Quand j'ai installé Bash, j'ai pensé que la chose la plus logique était de déplacer mes projets d'un environnement Linux à un autre (tentative de bin hors Cwygin), et c'est ce qui m'a mis sur la voie des maux de tête. J'ai configuré mon Bashrc maintenant pour avoir un répertoire de départ de mon environnement Linux précédent et je travaille à partir de là. Merci pour votre réponse.

0 votes

Attendez, comment faites-vous pour que /mnt/d s'affiche ? Par exemple, lorsque je connecte un téléphone via MTP, il s'affiche sous un chemin comme "Ce PC". \PhoneName "mais aucune lettre de lecteur ne lui est associée.

0 votes

Les liens symboliques fonctionnent si vous n'avez pas de barre oblique de fin. De plus, vous devez avoir des fichiers sur le côté Windows du système de fichiers pour faire des choses comme exécuter des projets Django localement et y accéder dans le navigateur.

36voto

Riz Points 501

@scottt732 a répondu magnifiquement.

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

Par exemple Si vous travaillez sur un projet en 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 dans le Bash de Linux.

Pour cela, vous devez utiliser ln comme ceci

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

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

0 votes

Il ne se synchronise pas vraiment... à moins que je doive redémarrer le serveur à chaque fois ?

0 votes

@Anthony son lien symbolique, donc vous ne devriez pas avoir besoin de redémarrer le serveur pour cela. En fait, il ne s'agit pas d'une synchronisation, mais d'un pointage vers ce dossier/chemin.

1 votes

J'ai trouvé le problème. C'était parce que le fichier CSS avait un tiret dans le nom comme, par exemple, css-file.css . J'ai publié un message à ce sujet aquí .

14voto

Richard Turner Points 1811

Nous vous recommandons de ne pas copier/créer/mettre à jour des fichiers Linux en utilisant des applications Windows .

Au lieu de cela, stockez les fichiers dans le système de fichiers Windows (par ex. c:\dev\project ) que vous souhaitez éditer des fichiers à l'aide d'outils Windows et/ou construire/tester/exécuter à l'aide d'outils/exécutions/plateformes Linux (par exemple, par le biais de /mnt/c/dev/project ).

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

HTH.

4voto

Stipa Points 938

\\WSL $

Dans l'Explorateur Windows, par exemple.

(Texte factice : le corps doit comporter au moins 30 caractères ; vous en avez saisi 5).

Edit : aha un slash a été supprimé. Cela a été corrigé. Deux barres obliques inversées.

0 votes

Non (encore 11 à faire...)

0 votes

Maintenant je comprends, quand j'utilise l'explorateur de fichiers de Windows, il devrait être \\WSL $ avec une double barre oblique inversée, comme dans une adresse réseau. C'est vraiment un moyen élégant d'accéder aux fichiers que j'ai générés ou modifiés avec mes outils WSL Linux. Merci.

0 votes

Cette réponse est à l'opposé de ce qui était demandé mais aujourd'hui très utile pour moi. Il semble que MS décourage les utilisateurs d'accéder aux fichiers de la WSL depuis l'extérieur (ou en d'autres termes, depuis l'installation principale de Windows). Mais il ne s'agit pas d'un piratage, il semble se comporter comme un véritable partage réseau et j'ai pu copier toute une structure de dossiers contenant quelque 3000 petits fichiers (une police au format .ufo) sans aucun problème. Ceci mériterait sa propre question et serait la réponse.

3voto

Abhay Shiro Points 111

Une manière simple de GUI pour ouvrir le chemin de dossier de Windows dans votre Shell Linux (WSL) est : (J'ai une entreprise Windows 10 avec Ubuntu WSL)

  1. Allez dans le dossier Windows (auquel vous voulez accéder depuis Ubuntu/Linux)
  2. Shift + Clic droit -> Si vous avez installé et configuré correctement WSL sous Windows, vous devriez voir apparaître l'écran suivant Ouvrir le Shell Linux ici option (comme indiqué dans l'image)

enter image description here

1 votes

Je suppose qu'il s'agit d'un ajout récent car je n'ai jamais vu ou entendu cela auparavant. Mais c'est vraiment très bien. En raison de mon travail, je dois utiliser Windows Native, mais les outils Unix / Linux sont trop puissants pour ne pas être utilisés quotidiennement. Travailler avec une structure de dossiers aussi importante me fera gagner BEAUCOUP de temps. Merci

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X