Sdílet prostřednictvím


Práce v systémech souborů s Windows a Linuxem

Při práci mezi systémy souborů s Windows a Linuxem je potřeba vzít v úvahu řadu aspektů. V této příručce jsme pro vás nastínili několik z nich, včetně některých příkladů podpory interoperability pro kombinování příkazů založených na Windows a Linuxu.

Úložiště souborů a výkon napříč systémy souborů

Nedoporučujeme pracovat s vašimi soubory v různých operačních systémech, pokud k tomu nemáte konkrétní důvod. Pokud pracujete na příkazovém řádku Linuxu (Ubuntu, OpenSUSE atd.), uložte soubory do systému souborů WSL, abyste měli nejrychlejší výkon. Pokud pracujete na příkazovém řádku Windows (PowerShell, příkazový řádek), uložte soubory do systému souborů Windows.

Například při ukládání souborů projektu WSL:

  • Použití kořenového adresáře systému souborů Linuxu: /home/<user name>/Project
  • Není kořenový adresář systému souborů Windows: /mnt/c/Users/<user name>/Project$ nebo C:\Users\<user name>\Project

Když se v cestě k souboru příkazového řádku WSL zobrazí /mnt/, znamená to, že pracujete na připojené jednotce. Takže systém souborů Windows C:\ jednotka (C:\Users\<user name>\Project) bude vypadat takto při připojení v příkazovém řádku WSL: /mnt/c/Users/<user name>/Project$. Soubory projektu je možné uložit na připojené jednotce, ale rychlost výkonu se zlepší, pokud je uložíte přímo na jednotku \\wsl$ .

Zobrazení aktuálního adresáře v Průzkumníku souborů Windows

Adresář, ve kterém jsou vaše soubory uložené, můžete zobrazit otevřením Průzkumníka souborů Windows z příkazového řádku pomocí:

explorer.exe .

Případně můžete použít také příkaz: powershell.exe /c start . Nezapomeňte přidat tečku na konec příkazu a otevřít aktuální adresář.

Pokud chcete zobrazit všechny dostupné distribuce Linuxu a jejich kořenové systémy souborů v Průzkumníku souborů Windows, zadejte na panelu Adresa: \\wsl$

Zobrazení souborů projektu v Průzkumníku souborů Windows

Citlivost na velikost písmen názvu souboru a adresáře

Rozlišování velkých a malých písmen určuje, jestli se velká písmena (FOO.txt) a malá písmena (foo.txt) zpracovávají jako odlišná (rozlišuje velká a malá písmena) nebo ekvivalentní (nerozlišuje velká a malá písmena) v názvu souboru nebo adresář. Souborové systémy Windows a Linux zpracovávají citlivost písmen různými způsoby – systém Windows nerozlišuje velikost písmen, zatímco v Linuxu se velikost písmen rozlišuje. Přečtěte si další informace o tom, jak upravit rozlišování velkých a malých písmen, zejména při připojování disků ve WSL, v článku s návodem na úpravu rozlišování velkých a malých písmen.

Interoperabilita mezi příkazy windows a Linuxu

Nástroje a příkazy pro Windows a Linux je možné použít zaměnitelně s WSL.

  • Spusťte nástroje Windows (tj. notepad.exe) z příkazového řádku Linuxu (tj. Ubuntu).
  • Spusťte linuxové nástroje (tj. grep) z příkazového řádku Windows (tj. PowerShell).
  • Sdílení proměnných prostředí mezi Linuxem a Windows. (Build 17063+)

Spuštění linuxových nástrojů z příkazového řádku Windows

Spuštění binárních souborů Linuxu z příkazového řádku Windows (CMD) nebo PowerShellu pomocí wsl <command> (nebo wsl.exe <command>).

Například:

C:\temp> wsl ls -la
<- contents of C:\temp ->

Binární soubory vyvolané tímto způsobem:

  • Použijte stejný pracovní adresář jako aktuální příkazový řádek CMD nebo PowerShellu.
  • Spusťte jako výchozího uživatele WSL.
  • Mají stejná práva pro správu Windows jako volající proces a terminál.

Následující příkaz wsl Linuxu (nebo wsl.exe) se zpracovává stejně jako jakýkoli příkaz spuštěný ve WSL. Věci jako sudo, piping a přesměrování souborů fungují.

Příklad použití sudo k aktualizaci výchozí linuxové distribuce:

C:\temp> wsl sudo apt-get update

Po spuštění tohoto příkazu se zobrazí vaše výchozí uživatelské jméno distribuce Linuxu a zobrazí se výzva k zadání hesla. Po správném zadání hesla bude vaše distribuce stahovat aktualizace.

Kombinování příkazů Pro Linux a Windows

Tady je několik příkladů kombinování příkazů pro Linux a Windows pomocí PowerShellu.

Pokud chcete použít příkaz ls -la Pro Linux k výpisu souborů a příkazu findstr PowerShellu k filtrování výsledků slov obsahujících "git", zkombinujte příkazy:

wsl ls -la | findstr "git"

Pokud chcete pomocí příkazu dir PowerShellu vypsat soubory a příkaz grep Linuxu k filtrování výsledků pro slova obsahující slovo "git", zkombinujte příkazy:

C:\temp> dir | wsl grep git

Pokud chcete pomocí příkazu ls -la Linuxu vypsat soubory a příkaz > out.txt PowerShellu, který tento seznam vytiskne do textového souboru s názvem "out.txt", zkombinujte příkazy:

C:\temp> wsl ls -la > out.txt

Příkazy předávané do wsl.exe procesu WSL se předávají beze změny. Cesty k souborům musí být zadány ve formátu WSL.

Pokud chcete pomocí příkazu ls -la Linuxu vypsat soubory v /proc/cpuinfo cestě k systému souborů Linuxu, použijte PowerShell:

C:\temp> wsl ls -la /proc/cpuinfo

Pokud chcete pomocí příkazu ls -la Linuxu vypsat soubory v C:\Program Files cestě k systému souborů Windows, použijte PowerShell:

C:\temp> wsl ls -la "/mnt/c/Program Files"

Spouštění nástrojů pro Windows z Linuxu

WSL může spouštět nástroje systému Windows přímo z příkazového řádku WSL pomocí [tool-name].exe. Například: notepad.exe.

Aplikace běží tímto způsobem, mají následující vlastnosti:

  • Zachovejte pracovní adresář jako aktuální adresář v příkazovém řádku WSL (ve většině případů — výjimky jsou vysvětleny níže).
  • Mají stejná oprávnění jako proces WSL.
  • Spusťte ho jako aktivní uživatel Windows.
  • Zobrazí se ve Správci úloh systému Windows, jako by byl přímo spuštěn z příkazového řádku CMD.

Spustitelné soubory Windows spouštěné ve WSL se zpracovávají podobně jako nativní spustitelné soubory Linuxu – piping, redirects a dokonce i práce na pozadí podle očekávání.

Pokud chcete spustit nástroj ipconfig.exepro Windows, použijte nástroj grep Pro Linux k filtrování výsledků IPv4 a pomocí linuxového nástroje cut odeberte pole sloupců z linuxové distribuce (například Ubuntu) zadejte:

ipconfig.exe | grep IPv4 | cut -d: -f2

Pojďme si vyzkoušet příklad kombinování příkazů pro Windows a Linux. Otevřete distribuci Linuxu (tj. Ubuntu) a vytvořte textový soubor: touch foo.txt. Teď pomocí příkazu ls -la Linuxu zobrazte přímé soubory a podrobnosti o jejich vytvoření a nástroj findstr.exe Windows PowerShell k filtrování výsledků, aby se ve výsledcích zobrazoval jenom váš foo.txt soubor:

ls -la | findstr.exe foo.txt

Nástroje systému Windows musí obsahovat příponu souboru, musí odpovídat případu souboru a musí být spustitelné. Nespustitelné soubory, včetně dávkových skriptů. Nativní příkazy CMD, jako dir je možné spustit pomocí cmd.exe /C příkazu.

Zadejte například seznam obsahu adresáře C:\ vašeho systému souborů Windows zadáním:

cmd.exe /C dir

Nebo pomocí ping příkazu odešlete žádost o odezvu na microsoft.com webu:

ping.exe www.microsoft.com

Parametry se předají binárnímu souboru Windows beze změny. Například následující příkaz otevře C:\temp\foo.txt v notepad.exe:

notepad.exe "C:\temp\foo.txt"

Bude to také fungovat:

notepad.exe C:\\temp\\foo.txt

Sdílení proměnných prostředí mezi Windows a WSL pomocí WSLENV

WSL a Windows sdílejí speciální proměnnou prostředí, WSLENV, vytvořenou pro propojení distribucí Windows a Linux spuštěných na WSL.

WSLENV Vlastnosti proměnné:

  • Je sdílena; existuje v prostředích Windows i WSL.
  • Jedná se o seznam proměnných prostředí, které se mají sdílet mezi Windows a WSL.
  • Může formátovat proměnné prostředí tak, aby dobře fungovaly ve Windows a WSL.
  • Může vám pomoci s propojením mezi WSL a Win32.

Poznámka:

Před verzí 17063 měla WSL přístup pouze k proměnné prostředí Windows PATH, takže bylo možné spouštět spustitelné soubory Win32 z pod WSL. Počínaje rokem 17063 se WSLENV začne podporovat. U wsLENV se rozlišují malá a velká písmena.

Příznaky WSLENV

K dispozici jsou čtyři příznaky ve WSLENV, které ovlivňují způsob překladu proměnné prostředí.

WSLENV vlajky:

  • /p – přeloží cestu mezi cestami stylu WSL/Linux a cestami Win32.
  • /l – označuje, že proměnná prostředí je seznam cest.
  • /u – označuje, že tato proměnná prostředí by měla být zahrnuta pouze při spuštění WSL z prostředí Win32.
  • /w – označuje, že tato proměnná prostředí by měla být zahrnuta pouze při spuštění Win32 z WSL.

Příznaky lze podle potřeby zkombinovat.

Přečtěte si více o WSLENV, včetně často kladených dotazů a příkladů, jak nastavit hodnotu WSLENV na zřetězení jiných předdefinovaných systémových proměnných. Každá z těchto proměnných je doplněna lomítkem a příznaky, které určují, jak má být hodnota přeložena a jak proměnné předat pomocí skriptu. Tento článek obsahuje také příklad nastavení vývojového prostředí pomocí programovacího jazyka Go, který je nakonfigurovaný ke sdílení cesty GOPATH mezi WSL a Win32.

Zakázat interoperabilitu

Uživatelé mohou zakázat možnost spouštět nástroje systému Windows pro jednu relaci WSL spuštěním následujícího příkazu jako uživatel root:

echo 0 > /proc/sys/fs/binfmt_misc/WSLInterop

Pokud chcete znovu povolit binární soubory Systému Windows, ukončete všechny relace WSL a znovu spusťte bash.exe nebo spusťte následující příkaz jako uživatel s právy administrátora:

echo 1 > /proc/sys/fs/binfmt_misc/WSLInterop

Zakázání vzájemné spolupráce nebude mezi relacemi WSL trvalé – při spuštění nové relace bude znovu povolena interoperabilita.