Udostępnij przez


Praca z systemami plików w środowiskach Windows i Linux

Podczas pracy między systemami plików z systemem Windows i Linux należy wziąć pod uwagę szereg zagadnień. W tym przewodniku przedstawiono kilka z nich, w tym kilka przykładów obsługi współdziałania na potrzeby mieszania poleceń opartych na systemach Windows i Linux.

Magazyn plików i wydajność w systemach plików

Nie zalecamy pracy w różnych systemach operacyjnych z plikami, chyba że masz określony powód. Aby uzyskać najszybszą szybkość wydajności, zapisz pliki w systemie plików WSL, jeśli pracujesz w wierszu polecenia systemu Linux (Ubuntu, OpenSUSE itp.). Jeśli pracujesz w wierszu polecenia systemu Windows (PowerShell, wiersz polecenia), zapisz pliki w systemie plików systemu Windows.

Na przykład podczas przechowywania plików projektu WSL:

  • Użyj katalogu głównego systemu plików systemu Linux: /home/<user name>/Project
  • Nie katalog główny systemu plików Windows: /mnt/c/Users/<user name>/Project$ lub C:\Users\<user name>\Project

Gdy widzisz /mnt/ w ścieżce pliku wiersza polecenia programu WSL, oznacza to, że pracujesz z zainstalowanego dysku. Tak więc dysk C:\ systemu Windows (C:\Users\<user name>\Project) będzie wyglądać następująco po instalacji w wierszu polecenia WSL: /mnt/c/Users/<user name>/Project$. Istnieje możliwość przechowywania plików projektu na zainstalowanym dysku, ale szybkość wydajności poprawi się, jeśli będą przechowywane bezpośrednio na \\wsl$ dysku.

Wyświetlanie bieżącego katalogu w Eksploratorze plików systemu Windows

Katalog, w którym są przechowywane pliki, można wyświetlić, otwierając Eksploratora plików systemu Windows z poziomu wiersza polecenia przy użyciu:

explorer.exe .

Możesz również użyć polecenia : powershell.exe /c start . pamiętaj, aby dodać kropkę na końcu polecenia, aby otworzyć bieżący katalog.

Aby wyświetlić wszystkie dostępne dystrybucje systemu Linux i ich główne systemy plików w Eksploratorze plików systemu Windows, na pasku adresu wprowadź: \\wsl$

Wyświetlanie plików projektu w Eksploratorze plików systemu Windows

Czułość na wielkość liter w nazwach plików i katalogach

Ważność wielkości liter określa, czy wielkie litery (FOO.txt) i małe litery (foo.txt) są obsługiwane jako odrębne (uwzględniana wielkość liter) lub równoważne (bez uwzględniania wielkości liter) w nazwie pliku lub katalogu. Systemy plików Windows i Linux obsługują wielkość liter na różne sposoby — system Windows nie uwzględnia wielkości liter, a w systemie Linux jest rozróżniana wielkość liter. Dowiedz się więcej na temat dostosowywania wrażliwości na wielkość liter, szczególnie podczas montowania dysków za pomocą WSL, w artykule Dostosowywanie wrażliwości na wielkość liter.

Współdziałanie między poleceniami systemu Windows i Linux

Narzędzia i polecenia systemu Windows i Linux mogą być używane zamiennie z usługą WSL.

  • Uruchom narzędzia systemu Windows (tj. notepad.exe) z wiersza polecenia systemu Linux (tj. Ubuntu).
  • Uruchom narzędzia systemu Linux (tj. grep) z wiersza polecenia systemu Windows (tj. PowerShell).
  • Współużytkuj zmienne środowiskowe między systemami Linux i Windows. (Kompilacja 17063+)

Uruchamianie narzędzi systemu Linux z poziomu wiersza polecenia systemu Windows

Uruchamianie plików binarnych systemu Linux z wiersza polecenia systemu Windows (CMD) lub programu PowerShell przy użyciu ( wsl <command> lub wsl.exe <command>).

Przykład:

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

Pliki binarne wywoływane w ten sposób:

  • Użyj tego samego katalogu roboczego co bieżący wiersz polecenia cmD lub programu PowerShell.
  • Uruchom jako domyślny użytkownik WSL.
  • Mają te same uprawnienia administracyjne systemu Windows co proces wywołujący i terminal.

Następujące polecenie wsl systemu Linux (lub wsl.exe) jest obsługiwane tak jak każde polecenie uruchamiane w programie WSL. Takie rzeczy jak na przykład sudo, potokowanie (przesyłanie danych między procesami) i przekierowywanie plików działają.

Przykład użycia programu sudo do zaktualizowania domyślnej dystrybucji systemu Linux:

C:\temp> wsl sudo apt-get update

Domyślna nazwa użytkownika dystrybucji systemu Linux zostanie wyświetlona po uruchomieniu tego polecenia i zostanie wyświetlona prośba o podanie hasła. Po poprawnym wprowadzeniu hasła dystrybucja pobierze aktualizacje.

Mieszanie poleceń systemu Linux i Windows

Oto kilka przykładów mieszania poleceń systemu Linux i Windows przy użyciu programu PowerShell.

Aby użyć polecenia ls -la systemu Linux do wyświetlenia listy plików i polecenia findstr programu PowerShell w celu filtrowania wyników dla wyrazów zawierających ciąg "git", połącz polecenia:

wsl ls -la | findstr "git"

Aby użyć polecenia dir programu PowerShell, aby wyświetlić listę plików i polecenie grep systemu Linux w celu filtrowania wyników dla wyrazów zawierających ciąg "git", połącz polecenia:

C:\temp> dir | wsl grep git

Aby użyć polecenia ls -la systemu Linux, aby wyświetlić listę plików i polecenie > out.txt programu PowerShell, aby wydrukować listę do pliku tekstowego o nazwie "out.txt", połącz polecenia:

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

Polecenia przekazane do wsl.exe są bez modyfikacji przekazywane do procesu WSL. Ścieżki plików muszą być określone w formacie WSL.

Aby użyć polecenia ls -la systemu Linux, aby wyświetlić listę plików w /proc/cpuinfo ścieżce systemu plików systemu Linux przy użyciu programu PowerShell:

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

Aby użyć polecenia ls -la systemu Linux, aby wyświetlić listę plików w C:\Program Files ścieżce systemu plików systemu Windows przy użyciu programu PowerShell:

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

Uruchamianie narzędzi systemu Windows z systemu Linux

Program WSL może uruchamiać narzędzia systemu Windows bezpośrednio z poziomu wiersza polecenia WSL przy użyciu polecenia [tool-name].exe. Na przykład notepad.exe.

Aplikacje działają w ten sposób, mają następujące właściwości:

  • Zachowaj katalog roboczy jako wiersz polecenia programu WSL (w większości przypadków wyjątki zostały wyjaśnione poniżej).
  • Mają takie same prawa dostępu jak proces WSL.
  • Uruchom jako aktywny użytkownik systemu Windows.
  • Jest wyświetlany w Menedżerze zadań systemu Windows tak, jakby był wykonywany bezpośrednio z poziomu wiersza polecenia.

Pliki wykonywalne systemu Windows uruchamiane w środowisku WSL są obsługiwane podobnie do natywnych plików wykonywalnych systemu Linux — potokowanie, przekierowania, a nawet działanie w tle działają zgodnie z oczekiwaniami.

Aby uruchomić narzędzie systemu Windows ipconfig.exe, użyj narzędzia grep systemu Linux do filtrowania wyników "IPv4" i użyj narzędzia cut systemu Linux, aby usunąć pola kolumn, w dystrybucji systemu Linux (na przykład Ubuntu) wprowadź polecenie:

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

Wypróbujmy przykład mieszania poleceń systemu Windows i Linux. Otwórz dystrybucję systemu Linux (tj. Ubuntu) i utwórz plik tekstowy: touch foo.txt. Teraz użyj polecenia ls -la systemu Linux, aby wyświetlić listę bezpośrednich plików i ich szczegółów tworzenia, a także narzędzie findstr.exe środowiska Windows PowerShell do filtrowania wyników, aby tylko foo.txt plik był wyświetlany w wynikach:

ls -la | findstr.exe foo.txt

Narzędzia systemu Windows muszą zawierać rozszerzenie pliku, odpowiadać wielkości liter w nazwie pliku i być plikami wykonywalnymi. Niepliki wykonywalne, w tym skrypty wsadowe. Polecenia natywne CMD, takie jak dir można uruchamiać za pomocą cmd.exe /C polecenia .

Na przykład wyświetl listę zawartości katalogu C:\ systemu Plików systemu Windows, wprowadzając następujące polecenie:

cmd.exe /C dir

Możesz też użyć polecenia ping aby wysłać żądanie echa do strony internetowej microsoft.com.

ping.exe www.microsoft.com

Parametry są przekazywane do binariów systemu Windows bez modyfikacji. Na przykład następujące polecenie otworzy C:\temp\foo.txt w notepad.exe:

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

Będzie to również działać:

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

Udostępnianie zmiennych środowiskowych między systemami Windows i WSL za pomocą programu WSLENV

WSL i Windows współużytkują specjalną zmienną środowiskową, WSLENV, aby połączyć dystrybucje systemów Windows i Linux działających w programie WSL.

Właściwości zmiennej WSLENV :

  • Jest on udostępniany; istnieje zarówno w środowiskach systemu Windows, jak i WSL.
  • Jest to lista zmiennych środowiskowych do współużytkowania między systemami Windows i WSL.
  • Może formatować zmienne środowiskowe, aby działały dobrze w systemach Windows i WSL.
  • Może pomóc we współdziałaniu między WSL a Win32.

Uwaga / Notatka

Przed wersją 17063 jedyną zmienną środowiskową systemu Windows, do której WSL miał dostęp, było PATH. Dzięki temu można było uruchamiać pliki wykonywalne Win32 z poziomu WSL. Począwszy od wersji 17063, WSLENV rozpoczyna się obsługiwanie. WSLENV rozróżnia wielkość liter.

Flagi programu WSLENV

Dostępne są cztery flagi WSLENV mające wpływ na sposób tłumaczenia zmiennej środowiskowej.

WSLENV Flagi:

  • /p — tłumaczy ścieżkę między ścieżkami stylów WSL/Linux i ścieżkami Win32.
  • /l — wskazuje, że zmienna środowiskowa jest listą ścieżek.
  • /u — wskazuje, że ta zmienna środowiskowa powinna być uwzględniana tylko podczas uruchamiania WSL z win32.
  • /w — wskazuje, że ta zmienna środowiskowa powinna być uwzględniana tylko podczas uruchamiania win32 z systemu WSL.

Flagi można łączyć w razie potrzeby.

Przeczytaj więcej na temat WSLENV, w tym często zadawanych pytań oraz przykładów ustawiania wartości WSLENV jako łączenia innych wstępnie zdefiniowanych zmiennych środowiskowych, gdzie każdej zmiennej przypisuje się ukośnik z flagami określającymi sposób tłumaczenia wartości, a także przekazywania zmiennych przy użyciu skryptu. Ten artykuł zawiera również przykład konfigurowania środowiska deweloperskiego przy użyciu języka programowania Go skonfigurowanego do udostępniania ścieżki GOPATH między WSL i Win32.

Wyłączanie współdziałania

Użytkownicy mogą wyłączyć możliwość uruchamiania narzędzi systemu Windows na czas jednej sesji WSL, uruchamiając następujące polecenie jako użytkownik root.

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

Aby ponownie włączyć pliki binarne systemu Windows, zamknij wszystkie sesje WSL i uruchom ponownie bash.exe lub uruchom następujące polecenie jako root:

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

Wyłączenie interop nie będzie zachowane między sesjami WSL — zostanie ono ponownie włączone, gdy zostanie uruchomiona nowa sesja.