Subsistema de Windows Linux: acceso a archivos fuera de Ubuntu

90

¿Por qué, cuando creo un archivo desde Windows, por ejemplo, no puedo verlo bajo el subsistema Linux en Windows 10 (bash.exe)

La captura de pantalla debería explicar.

Carpeta: OMG se creó desde el Explorador de Windows. La carpeta OMGBash se creó con el subsistema Linux bash.exe

Cuando se crea una carpeta O un archivo fuera de bash.exe, nunca puedo verlo, independientemente de los permisos y la propiedad.

Para mostrar la información que tuve que usar Cygwin para mostrar los permisos de archivo, también modifiqué los permisos para ver si aparecería la carpeta. (Las dos ventanas de comando en la parte inferior)

Captura de pantalla que muestra los permisos de carpeta, bash.exe y Cygwin:

ingrese la descripción de la imagen aquí

Estoy tratando de mover todos mis scripts de Cygwin al subsistema de Linux, pero no me gusta recrear cada archivo, luego tener que copiar y pegar usando bash, luego reformatear y luego usar Dos2unix (sin aliento).

Encontré esto en GitHub para el subsistema Linux:

no se admite copiar directamente en el subsistema de Linux desde Windows, según se explica en otros tickets. Hay un directorio bajo AppData en alguna parte (no recuerdo dónde) que parece contener los archivos para el sistema de archivos WSL. Pero si coloca archivos nuevos allí o modifica archivos existentes allí, sus cambios no se reflejan correctamente dentro de WSL.

Mi mejor conjetura es que Linux necesita almacenar metadatos diferentes (y más información de almacenamiento en caché, etc., ya que su modelo de almacenamiento en disco también es diferente) sobre sus archivos que Windows, y que esto se implementa actualmente almacenando la copia maestra de la estructura del sistema de archivos de Linux en una base de datos de algún tipo, y simplemente usando el sistema de archivos de Windows como un conveniente BLOB-store para esa base de datos.

Si realmente necesita hacer esto, una solución sería escribir un script .bat o drag de drag'n'drop que haga bash.exe -c "mv% 1 / home / $ USER /". (Tendrá que hacer un trabajo inteligente con sed y tr, probablemente, para traducir% 1 a una ruta WSL válida).

Alternativamente, ¿podría colocar sus archivos en un directorio de Windows y, dentro de WSL, hacer "cd ~; ln -s / mnt / c / path / to / my / files" para que aparezcan en su homedir de WSL?

Dave Hamilton
fuente
¿Es posible montar el disco duro de Windows en el entorno Linux? De esa manera, debería mostrar todos los archivos en tiempo real ... (o incluso solo el directorio de la casa de Cygwin)
Hastur
3
Gran idea, pero desafortunadamente los archivos no son visibles. La forma de evitarlo es copiar archivos del directorio de Windows en el directorio del subsistema de Linux a través de Bash.exe. De esta manera, debe cp -r --no-preserve=all eliminar los permisos anteriores. Aún así, si desea realizar cambios importantes, no puede usar una aplicación de Windows para editar el archivo en LinuxSubSystem. Debe editarlo en su Directorio de Windows y luego copiarlo. Ahora sé esto, es viable, PERO tenía la impresión de que el subsistema Linux era más nativo / integrado en Windows que un sistema operativo aislado
Dave Hamilton
Puede seguir el progreso de este problema (manejo de archivos entre Windows y WLS) en github.com/Microsoft/BashOnWindows/issues/1051
Gaia
Si instala una distribución desde la Tienda Windows, el sistema de archivos estará en %LocalAppData%\Packages\<some-long-name-of-distro>\LocalState\rootfs.
Ian Kemp

Respuestas:

101

No estoy seguro si estoy malinterpretando su pregunta, pero su ubuntu bash (ventana superior derecha) debería tener acceso a sus discos basados ​​en Windows debajo /mnt. Por ejemplo, en mi máquina /mnt/c/Users/Scott/Desktopestá mi escritorio de Windows y puedo leer / escribir archivos desde vi por ejemplo. No creo que lo contrario sea cierto todavía. Es decir, no creo que pueda explorar su mundo bash desde el explorador de Windows.

Lo que he estado haciendo como desarrollador es alojar proyectos en mi d: y apuntar las herramientas basadas en Linux a esa /mnt/d/projects/someproject/carpeta.

Asegúrese de actualizar periódicamente sus compilaciones de Windows, ya que parecen estar solucionando muchos problemas con cada compilación, especialmente alrededor de enlaces simbólicos y cruzando los límites de FS entre Linux / Windows.

scottt732
fuente
1
Tienes razón, creo que salté un poco el arma. Si bien Bash puede acceder a los archivos de Windows, Windows no puede copiar archivos en el directorio del subsistema Linux. (se puede copiar, pero Bash no puede verlos, ya que conserva los permisos de los archivos) Cuando instalé bash, pensé que lo más lógico era mover mis proyectos de un entorno Linux a otro (intento de desconectar Cwygin), y Es esto lo que me inició en la ruta de los dolores de cabeza. He configurado mi Bashrc ahora para tener un directorio de inicio de mi entorno Linux anterior ahora y trabajando desde allí. Gracias por su respuesta.
Dave Hamilton
Espera, ¿cómo haces que aparezca / mnt / d? por ejemplo, cuando conecto un teléfono a través de MTP, aparece debajo de una ruta como "Esta PC \ Nombre del teléfono" pero no hay ninguna letra de unidad asociada.
Michael
Los enlaces simbólicos funcionan si no tienes una barra inclinada final. Además, debe tener archivos en el lado de Windows del sistema de archivos para hacer cosas como ejecutar proyectos de Django localmente y acceder a ellos en el navegador
Zags
pero los archivos de linux no se actualizan cuando modifico los archivos de windows?!?!
PrimitiveNom
20

@ scottt732 respondió maravillosamente.

Solo un consejo para los desarrolladores que trabajarían en Windows y les gustaría acceder a esos archivos en el Subsistema Linux de manera muy rápida. Puedes usar enlaces simbólicos .

Por ejemplo, si está trabajando en un proyecto en d:/projects/web-project, puede crear un enlace simbólico en la ubicación /var/www/web-projecty todos los archivos que cambie en Windows estarán fácilmente disponibles para acceder en Linux Bash.

Para esto usarás un lncomando como este

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

En la línea anterior /mnt/destaba destinado a ser su disco d en Windows. Configure su host virtual Apache en esta ruta y estará listo para comenzar.

Riz
fuente
en realidad no se sincroniza ... a menos que tenga que reiniciar el servidor cada vez?
PrimitiveNom
@Anthony es su enlace simbólico, por lo que no debería necesitar reiniciar el servidor para esto. En realidad, esto no es sincronización, solo apunta a esa carpeta / ruta.
Riz
1
Me di cuenta del problema. Fue porque el archivo CSS tenía un guión en el nombre como, por ejemplo css-file.css,. He publicado sobre este tema aquí .
PrimitiveNom
9

Recomendamos que no copie / cree / actualice archivos Linux utilizando aplicaciones de Windows .

En su lugar, almacene archivos en el sistema de archivos de Windows (p c:\dev\project. Ej. ) Que desea editar usando las herramientas de Windows y / o compile / pruebe / ejecute usando las herramientas / tiempos de ejecución / plataformas de Linux (p /mnt/c/dev/project. Ej., Vía ).

En su escenario específico, si quiere copiar los archivos en Cygwin Bash, a continuación, Bash abierta y copiar los archivos de la carpeta de Cygwin en C: en ~/, por ejemplo: cp /mnt/c/Users/dave/Documents/Cygwin/* ~/)

HTH.

Richard Turner
fuente
1

Necesitaba trabajar con PyCharm / eclipse en Windows 10 mientras que para ejecutar / testind necesitaba un entorno Linux;

Tuve problemas para retirar de git al subsistema Linux y la edición con archivos PyCharm no se vio de inmediato y tuve problemas;

devcode=/DevCode

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

Tenía lo anterior en mi .bashrc en el área de Ubuntu. Funciona a la perfección. Podría editar Windows y ejecutar / probar en Ubuntu sin ningún problema.

Narayanaa
fuente
0

Tenía una necesidad similar de copiar archivos entre WSL y win10. Terminé habilitando sshd en la instalación de Ubuntu para poder ingresar a Linux desde win10. Luego uso winscp para copiar archivos de un lado a otro. No es óptimo, pero no copio archivos con mucha frecuencia. Traté de encontrar la publicación que usé para habilitar sshd pero no puedo localizarla.

kometen
fuente