Czy potrzebujemy jeszcze Wiersz polecenia?

Czy potrzebujemy jeszcze Wiersz polecenia?

Autor: Krzysztof Sulikowski

Opublikowano: 9/2/2018, 5:00 PM

Liczba odsłon: 4129

Mając na uwadze całą pracę, którą możemy dziś wykonać w interfejsach graficznych, wiersz polecenia jest nadal żywotny. Nie używamy go do codziennej pracy w Windows, ale jeśli jesteśmy deweloperami albo administratorami, konsola będzie kluczowa dla wszystkiego, co robimy.

Zacznijmy od tego, czym jest Wiersz polecenia i Powłoka. Command Line lub CLI (Command Line Interface/Interpreter) to najbardziej podstawowy mechanizm interakcji człowieka z komputerem. CLI akceptuje polecenia wejściowe wpisane przez operatora i wykonuje je. Przykładami takich poleceń są echo Hello, które wyświetla na ekranie ciąg znaków "Hello", dir (Cmd) i ls (PowerShell), które wyświetlają zawartość bieżącego katalogu.

We wczesnych komputerach polecenia dostępne dla operatora były względnie proste, ale z biegiem lat wymagania użytkowników rosły - chodziło głównie o usprawnienie pracy poprzez automatyzację i powtarzalność. Procesory wiersza polecenia stawały się coraz bardziej wyrafinowane i wyewoluowały w to, co dziś nazywamy "powłokami" (shells) wiersza poleceń. Rzućmy okiem na małe kalendarium tego, jak ta ewolucja wyglądała w świecie Microsoft:

  • Oryginalny command.com w MS-DOS był względnie prostą powłoką wiersza polecenia.
  • Wiersz polecenia (Command Prompt, cmd.exe) w Windows NT został zaprojektowany dla zachowania zgodności ze starszymi skryptami command.com/batch i otrzymał wiele dodatkowych poleceń dla nowego, dużo bardziej potężnego systemu operacyjnego.
  • W 2006 r. Microsoft wypuścił Windows PowerShell. To nowoczesna, zorientowana na obiekty (podobnie jak języki Python, Java, C++, C# i wiele innych) powłoka CLI, inspirowana funkcjonalnościami innych powłok i korzystająca z możliwości .NET CLR oraz .NET Framework. Używając PowerShell, użytkownicy Windows mogą kontrolować, wykonywać skrypty i automatyzować praktycznie każdy aspekt maszyny z Windows, grupy maszyn z Windows, sieci, systemy magazynowania, bazy danych etc. W 2017 r. Microsoft otworzył źródła PowerShella i umożliwił jego uruchamianie na macOS i w wielu dystrybucjach Linuksa i BSD.
  • W 2016 r. Microsoft przedstawił Podsystem Windows dla systemu Linux. Środowisko to pozwala uruchamiać autentyczne i niezmodyfikowane binarki linuksowe bezpośrednio w Windows 10. Użytkownicy mogą instalować jedną lub więcej dystrybucji Linuksa z Microsoft Store i uruchamiać je obok siebie. Ważne jest to, że użytkownik może używać jednocześnie narzędzi linuksowych i windowsowych bez potrzeby dual-bootingu lub korzystania z zasobożernych maszyn wirtualnych.

Wszyscy dobrze znamy cmd.exe. Wiersz polecenia w Windows. To część jego dziedzictwa, budowana na podstawie funkcji MS-DOS. Wiele poleceń nadal ma te same nazwy, a wiele aplikacji DOSowych nadal uruchamia się w konsoli Windows, jednakże przez te wszystkie lata ewolucja Windowsa nie ominęła też Wiersza poleceń. W roku 2006 obok cmd stanął PowerShell - interpreter poleceń w domyślnym języku skryptów administratora dla Windows i Windows Server, z narzędziami do zdalnego zarządzania Office 365 i Azure.

Niebieskie okno konsoli i kolorowane polecenia PowerShell to nie jedyna zmiana w stosunku do wysłużonego czarno-białego okna DOS. Słownik poleceń nastawionych na akcje również bardzo się różni. Za ich pomocą możemy dotrzeć do systemowych ustawień i je skonfigurować lub budować na podstawie akcji złożone skrypty, zdolne do zarządzania całymi flotami serwerów. Można na to spojrzeć jeszcze w taki sposób: Wiersz polecenia jest narzędziem do pracy z pojedynczym PC, podczas gdy PowerShell jest dla admina szwajcarskim scyzorykiem, radzącym sobie z całą organizacją pecetów i serwerów. PowerShell można ponadto uruchamiać na różnych urządzeniach, a także w Azure.

Azure

Jeśli dla kogoś dwie konsole to za mało, Windows 10 wprowadził trzecie środowisko konsolowe - Podsystem Windows dla systemu Linux (WSL). Po zainstalowaniu tego komponentu aplikacja konsoli staje się hostem dla środowiska Bash, zdolnym uruchamiać różne dystrybucje Linuksa, w tym Suse, Ubuntu, Debian i Kali.

Wszystko to przyczyniło się do widocznej odnowy jednego z najstarszych doświadczeń Windows, rozwiniętego blisko 30 lat temu dla pierwszego wydania Windows NT. Przez większość tego czasu Wiersz polecenia był dość prymitywną aplikacją z podstawowym wsparciem dla wycinania/wklejania i z prostą historią. Mogliśmy wybrać kolor i krój czcionki, a także dopasować rozmiar i liczbę wyświetlanych na ekranie znaków - zwykle był to jakiś wariant wzorowany na terminalach VT100 z ekranami zdolnymi do wyświetlania 80/132 znaków na wiersz.

W nowoczesnych aplikacjach konsolowych nadal obecny jest duch terminali sprzed kilkudziesięciu lat, ale aplikacje te potrafią znacznie więcej. Mogą nam np. dać historię użytych przez nas poleceń, dzięki czemu możemy je szybko powtórzyć albo wyeksportować, by stworzyć podstawy dla przyszłych skryptów. Aplikacje dają się też personalizować i to nie tylko poprzez kolorowanie tekstu i tła, ale np. dostosowywanie skrótów i integrację z innymi używanymi narzędziami. Wiele okien konsoli może być zdalnymi terminalami dla systemów lub uruchamiać wiele różnych środowisk lokalnie.

Oryginalna konsola Windows przez całą swoją historię pozostawała prawie nietknięta aż do czasu wydania Windows 10. PowerShell wprowadził oczywiście kolorowanie składni, ale nadal powielał pewne błędy. Niektóre firmy tworzyły nawet polecenia, które te błędy wykorzystywały. Zmiana tych narzędzi stała się dla Microsoftu trudna, a zewnętrzne aplikacje terminali zyskiwały zainteresowanie użytkowników i deweloperów. Na dobrą sprawę kompletne przerobienie konsoli było możliwe przy okazji wydania Windows 10. System został zaprojektowany z myślą o regularnych aktualizacjach (dwie duże aktualizacje w ciągu roku), a zespół odpowiedzialny za konsolę mógł testować nowe funkcje w kompilacjach Insider. W międzyczasie ten sam zespół zaczął pracować nad wprowadzeniem Linuksa do Windows, a tu wymagana była konsola, która renderowałaby poprawnie linuksowy interfejs. Konieczne było też dostarczenie nowych funkcji w narzędziu, które nie zaburzałoby milionów istniejących skryptów, używanych na całym świecie.

W rezultacie powstało znacznie bardziej elastyczne narzędzie, kolorowe i dające się personalizować. Pojawiła się też podstawowa funkcja z Windows, która nigdy wcześniej nie miała wsparcia w konsoli - używanie Ctrl + C i Ctrl + V, aby kopiować i wklejać tekst między konsolą a całym zewnętrznym środowiskiem Windows. Dodano również wsparcie dla windowsowych ułatwień dostępu, takich jak Narrator, który mógł odtąd czytać na głos zawartość konsoli.

Wiersz polecenia

Konsola Windows jest głęboko zintegrowana z OS i zbudowana na sterowniku trybu jądra, który obsługuje połączenie między konsolą a dowolną usługą w wierszu polecenia, którego używamy. Dzięki temu podejściu możemy otwierać wiele okien konsoli jednocześnie, a w każdej z nich wykonywać inne operacje. Sama aplikacja konsoli jest napisana w C dla zachowania wydajności. Zarządza ona buforami i analizatorami składniowymi (parserami), które przenoszą przepływy danych z i do aplikacji w wierszu polecenia. Nie działa to - jak mogłoby się wydawać - poprzez wysyłanie tekstu, lecz wiadomości Windows I/O.

Ważne jest, by wiedzieć, że konsola Windows nie hostuje aplikacji w wierszu polecenia, tzn. nie jest narzędziem, które je uruchamia. Należy ją postrzegać jako warstwę interfejsu użytkownika, umożliwiającą interakcję z tymi aplikacjami, które uruchamiane są poprzez aplikację pracującą w tle. Nie ma bezpośredniego połączenia - wszystko jest ogarniane przez wiadomości kontrolne przesyłane między API.

Znajdujący się głębiej model API konsoli Windows jest jedną z rzeczy, które utrudniają Windowsowi wsparcie dla aplikacji uniksowych i linuksowych, bowiem systemy te mają inny sposób dostarczania aplikacji w trybie tekstowym. Wsparcie dla interfejsów tekstowych Linuksa oznaczało poprawione wsparcie dla sekwencji ANSI/VT. Są one używane do tworzenia złożonych, kolorowanych sekwencji tekstowych, oferujących doświadczenia podobne do tych w aplikacjach DOSowych wraz z narzędziami pokroju curses, które zamieniają znany ekran konsoli w bardziej interaktywne środowisko. Uruchamianie linuksowych binarek w Windows pozwala systemowi przechwytywać owe strumienie poleceń, tłumaczyć je na wywołania API konsoli i odwrotnie.

Microsoft robi wiele, by usprawnić konsolę Windows. To, jak wygląda dziś, niektórzy porównują nawet do poziomu konsoli uniksowych. Wciąż jednak istnieje wiele problemów i podpowierzchniowych różnic w architekturze Windowsa i Uniksa, które determinują to, co i kiedy może zyskać wsparcie. Jedną z fundamentalnych różnic jest paradygmat - dla Uniksa wszystko jest plikiem, dla Windowsa - obiektem.

Współczesne komputery są znacznie potężniejsze od "głupich terminali" sprzed lat i zwykle posiadają desktopowy system operacyjny (Windows, Linux, macOS) z graficznym interfejsem użytkownika (GUI). Środowiska graficzne pozwalają uruchamiać wiele aplikacji jednocześnie w ich własnych oknach na ekranie użytkownika lub w tle. Dziś terminale uruchamiamy właśnie w takich okienkach. Cała funkcjonalność, która niegdyś zajmowała cały ekran i nie pozostawiała absolutnie żadnego miejsca na cokolwiek dodatkowego, została sprowadzona właśnie do takiego widoku, zachowując przy tym swoje właściwości. Analogicznie w ten sam sposób działają aplikacje wiersza poleceń - otrzymują polecenia tekstowe, decydują, co z nimi zrobić, wykonują (lub nie) zadania i zwracają (lub nie) komunikaty tekstowe użytkownikowi.

Podstawowe, niezmienne zadania konsoli (terminala) możemy podsumować w trzech punktach, jakimi są:

  1. Obsługa danych wejściowych od użytkownika
    • Akceptowanie danych z klawiatury, myszy, dotyku, pióra etc.
    • Tłumaczenie ich na odpowiednie znaki i/lub sekwencje ANSI/VT
    • Wysyłanie znaków do połączonych aplikacji/narzędzi/powłok
  2. Obsługa wyjścia z aplikacji
    • Akceptowanie tekstu wyjściowego z połączonych aplikacji/narzędzi wiersza poleceń
    • Aktualizacja danych na ekranie w oparciu o otrzymane dane z aplikacji (tekst, poruszenie kursorem, zmiana koloru etc.)
  3. Obsługa interakcji systemowych
    • Uruchamianie na żądanie
    • Zarządzanie zasobami
    • Zmiana rozmiaru, minimalizowanie, maksymalizowanie etc.
    • Zamykanie na żądanie lub gdy kanał komunikacyjny zostaje zamknięty/wyłączony

Wiersz polecenia

Deweloperzy i administratorzy systemów prawdopodobnie zawsze będą używać wiersza poleceń. Zaktualizowana i usprawniona konsola Windows może nie być narzędziem pierwszej potrzeby dla każdego z nas, ale wśród specjalistów i zapaleńców zapotrzebowanie na konsolę wydaje się tak samo silne, jak przed kilkudziesięcioma laty.

Jak wykorzystać Copilot w codziennej pracy? Kurs w przedsprzedaży
Jak wykorzystać Copilot w codziennej pracy? Kurs w przedsprzedaży

Wydarzenia