Sottosistema Windows Linux - Accesso ai file al di fuori di Ubuntu


90

Perché, quando creo un file da Windows, ad esempio, non riesco a vederlo nel sottosistema Linux in Windows 10 (bash.exe)

Lo screenshot dovrebbe spiegare.

Cartella: OMG è stato creato da Esplora risorse. La cartella OMGBash è stata creata con il sottosistema Linux bash.exe

Quando un file OR di una cartella viene creato al di fuori di bash.exe non riesco mai a vederlo, indipendentemente dalle autorizzazioni e dalla proprietà.

Per mostrare le informazioni che ho dovuto usare Cygwin per mostrare le autorizzazioni dei file, ho anche modificato le autorizzazioni per vedere se la cartella sarebbe apparsa. (Le due finestre di comando in basso)

Schermata che mostra i permessi di cartella, bash.exe e Cygwin:

inserisci qui la descrizione dell'immagine

Sto cercando di spostare tutti i miei script Cygwin sul sottosistema Linux, ma non mi va di ricreare ogni file, quindi dover copiare e incollare usando bash, quindi riformattare e poi usare Dos2unix (molto lungo).

Trovato su GitHub per il sottosistema Linux:

la copia diretta nel sottosistema Linux da Windows non è supportata, in base alla discussione su altri ticket. C'è una directory sotto AppData da qualche parte (dimentico dove) che sembra contenere i file per il filesystem WSL. Ma se si inseriscono nuovi file lì o si modificano file esistenti lì, le modifiche non si riflettono correttamente in WSL.

La mia ipotesi migliore è che Linux debba archiviare metadati diversi (e più informazioni di memorizzazione nella cache, ecc., Poiché anche il suo modello di buffering del disco è diverso) sui suoi file rispetto a Windows, e che questo è attualmente implementato memorizzando la copia principale della struttura del filesystem Linux in un database di qualche tipo, e semplicemente usando il filesystem di Windows come conveniente archivio BLOB per quel database.

Se hai davvero bisogno di fare questo, una soluzione alternativa sarebbe quella di scrivere uno script .bat drag'n'drop o somesuch che fa bash.exe -c "mv% 1 / home / $ USER /". (Dovrai fare un lavoro intelligente con sed e tr, probabilmente, per tradurre% 1 in un percorso WSL valido.)

In alternativa, potresti mettere i tuoi file in una directory di Windows e, all'interno di WSL, fare "cd ~; ln -s / mnt / c / path / to / my / files" per farli apparire nel tuo homedir WSL?


È possibile montare l'HDD di Windows in ambiente Linux? In questo modo dovrebbe mostrare tutti i file in tempo reale ... (o anche solo la directory della casa Cygwin)
Hastur,

3
Ottima idea, ma purtroppo i file non sono visibili. Il modo per aggirare il problema è copiare i file dalla directory di Windows alla directory del sottosistema Linux tramite Bash.exe. In questo modo è necessario cp -r --no-preserve=all eliminare le autorizzazioni precedenti. Tuttavia, se si desidera apportare modifiche pesanti, non è possibile utilizzare un'applicazione Windows per modificare il file nel LinuxSubSystem, è necessario modificarlo nella directory di Windows e copiarlo. Ora lo so, è fattibile, ma avevo l'impressione che il sottosistema Linux fosse più nativo / integrato in Windows di un sistema operativo isolato
Dave Hamilton,

Puoi tenere il passo con l'avanzamento di questo problema (gestione dei file tra Windows e WLS) su github.com/Microsoft/BashOnWindows/issues/1051
Gaia

Se installi una distro dal Windows Store, il filesystem sarà su %LocalAppData%\Packages\<some-long-name-of-distro>\LocalState\rootfs.
Ian Kemp,

Risposte:


101

Non sono sicuro di aver frainteso la tua domanda, ma Ubuntu Bash (finestra in alto a destra) dovrebbe avere accesso ai dischi basati su Windows in /mnt. Ad esempio, sul mio computer /mnt/c/Users/Scott/Desktopè il mio desktop di Windows e posso leggere / scrivere file lì da vi per es. Non credo che sia vero il contrario. Cioè, non penso che tu possa esplorare il tuo mondo bash da Windows Explorer.

Quello che ho fatto come sviluppatore è ospitare progetti sul mio d: e indirizzare gli strumenti basati su Linux su quella /mnt/d/projects/someproject/cartella.

Assicurati di aggiornare periodicamente le build di Windows in quanto sembrano risolvere molti problemi con ciascuna build, in particolare per quanto riguarda i collegamenti simbolici e l'attraversamento dei confini FS tra Linux / Windows.


1
Hai ragione, penso di aver saltato un po 'la pistola. Mentre Bash può accedere ai file di Windows, Windows non può copiare file nella directory del sottosistema Linux. (può copiare quindi, ma Bash non riesce a vederli poiché conserva i permessi dei file) Quando ho installato bash, ho pensato che la cosa più logica fosse spostare i miei progetti da un ambiente Linux a un altro (tentare di eliminare Cwygin), e è questo che mi ha iniziato lungo il percorso del mal di testa. Ho configurato Bashrc ora per avere una directory iniziale del mio precedente ambiente Linux e lavorare da lì. Grazie per la vostra risposta.
Dave Hamilton,

Aspetta, come si ottiene / mnt / d per apparire? ad esempio, quando collego un telefono tramite MTP, viene visualizzato in un percorso come "This PC \ PhoneName" ma non è associata alcuna lettera di unità.
Michael,

I link simbolici funzionano se non hai una barra finale. Inoltre, devi avere dei file sul lato Windows del file system per fare cose come eseguire progetti Django localmente e accedervi nel browser
Zags,

ma i file di Linux non si aggiornano quando modifico i file di Windows?!?!
PrimitiveNom

20

@ scottt732 ha risposto magnificamente.

Solo un consiglio per gli sviluppatori che lavorerebbero su Windows e vorrebbero accedere a quei file nel sottosistema Linux molto velocemente. È possibile utilizzare collegamenti simbolici .

Ad esempio, se si sta lavorando a un progetto in d:/projects/web-project, è possibile creare un collegamento simbolico nella posizione /var/www/web-projecte tutti i file modificati in Windows saranno prontamente disponibili per l'accesso in Linux Bash.

Per questo userete il lncomando in questo modo

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

Nella riga sopra /mnt/ddoveva essere il tuo disco rigido su Windows. Configura il tuo host virtuale Apache su questo percorso e sei pronto per partire.


in realtà non si sincronizza ... a meno che non debba riavviare il server ogni volta?
PrimitiveNom

@Anthony è il suo link simbolico, quindi non dovresti aver bisogno di riavviare il server per questo. In realtà non si tratta di sincronizzazione, ma indica semplicemente quella cartella / percorso.
Riz,

1
Ho capito il problema. Era perché il file CSS aveva un trattino nel nome come, ad esempio css-file.css,. Ho pubblicato questo problema qui .
PrimitiveNom

9

Si consiglia di non copiare / creare / aggiornare i file Linux utilizzando le app di Windows .

Invece, archiviare i file nel filesystem di Windows (ad es. c:\dev\project) Che si desidera modificare i file usando gli strumenti di Windows e / o costruire / test / eseguire usando gli strumenti di Linux / runtime / piattaforme (ad es. Via /mnt/c/dev/project).

Nel tuo scenario specifico, se vuoi copiare i tuoi file Cygwin in Bash, quindi apri Bash e copia i file dalla tua cartella Cygwin su C: in ~/, in questo modo cp /mnt/c/Users/dave/Documents/Cygwin/* ~/:)

HTH.


1

Avevo bisogno di lavorare con PyCharm / eclipse su Windows 10 mentre per l'esecuzione / testind avevo bisogno di un ambiente Linux;

Ho avuto problemi per il check-out da git nel sottosistema Linux e la modifica con i file PyCharm non è stata vista immediatamente e ho avuto problemi;

devcode=/DevCode

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

Ho avuto quanto sopra nel mio .bashrc nell'area di Ubuntu. Funziona senza problemi. Potrei modificare Windows ed eseguire / testare su Ubuntu senza problemi.


0

Avevo un'analoga necessità di copiare i file tra WSL e win10. Ho finito per abilitare sshd sull'installazione di Ubuntu in modo da poter ssh su Linux da win10. Quindi uso winscp per copiare i file avanti e indietro. Non ottimale, ma non copio i file molto frequentemente. Ho provato a trovare il post che ho usato per abilitare sshd ma non riesco a trovarlo.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.