poznaj.dev

poznaj.dev

Po co nam wiersz poleceń (CLI)

Po co nam wiersz poleceń (CLI)

Marcin Wosinek's photo
Marcin Wosinek
·Mar 16, 2022·

3 min read

Graficzny interfejs użytkownika (GUI) stał się standardem w latach 90. XX wieku. Zastąpił on wcześniej stosowany interfejs tekstowy. Dzięki temu komputery stały się ogólnodostępne. Dlaczego więc niektórzy nadal pracują na terminalach tekstowych?

Pracuje się szybko

Klawiatura to najszybsze i najdokładniejsze urządzenie do wprowadzania danych do komputera. Każdy palec ma w zasięgu kilka klawiszy i nawet przeciętny użytkownik potrafi wystukać od dwóch do trzech liter na sekundę. W porównaniu z tym mysz wypada słabo – ma tylko kilka klawiszy, rolkę i osie x i y. Nadaje się wyłącznie do wyboru opcji widocznych na ekranie, które zostały określone wcześniej. A między kliknięciami zawsze będzie kilkusekundowa przerwa.

Image description

Ze względu na te wady większość aplikacji graficznych zawiera skróty klawiszowe. Wydajne korzystanie z komputera wymaga nauczenia się wielu z nich na pamięć; patrzenie, jak ktoś kopiuje i przekleja pliki ręcznie, bez korzystania ze skrótów systemowych, zakrawa w dzisiejszych czasach o torturę. Większość GUI nie jest jednak dobra w uczeniu użytkownika skrótów klawiszowych – to często na jego barkach spoczywa ciężar szukania skrótów klawiaturowych dla opcji, z których korzysta najczęściej.

W przypadku CLI wszystko natomiast opiera się na tekście. Niektóre aplikacje uruchamia się w jednym długim wierszu poleceń, np. Git, grep, sed itd. Inne z kolei otwiera się w interfejsie tekstowym, gdzie obsługiwane są przy pomocy skrótów klawiszowych – na przykład Vim czy Emacs.

Image description

Zarządzanie złożonością

Program tekstowy obsługuje dowolną liczbę parametrów, ale wystarczy, że znasz te, które są Ci potrzebne. Zastanawiałeś się kiedyś nad tym, jak dużo takich parametrów posiada przeglądarka internetowa Chromium? Ponad 1000 (źródło). Siedzą sobie tam i czekają, aż ich użyjesz. Są one jednak zazwyczaj niewidoczne – chyba że zaczniesz wczytywać się w dokumentację.

Takie bogactwo możliwości jest nieosiągalne dla aplikacji opartych na GUI. Rzadziej stosowane opcje albo zaśmiecają ekran, albo kryją się w ogromnych, wielowarstwowych menu. W rezultacie dostajemy:

  • proste programy dla prostych przypadków użycia z przystępnym interfejsem albo
  • profesjonalne programy z przytłaczającymi interfejsami, gdzie trudno o doszukanie się nawet najprostszych z opcji.

Image description

Skrypty

Programy tekstowe przyjmują tekst jako dane wejściowe i dane wyjściowe oddają również w postaci tekstu. Na poziomie dane wejściowe/wyjściowe wszystkie programy CLI są kompatybilne: przy pomocy git ls-files możesz wyświetlić wszystkie pliki w swoim repozytorium, a następnie zastosować grep, aby je przefiltrować – wystarczy Ci do tego operator potoku:

$ git ls-files | grep index
home-page/index.html
registration/index.html
index.js

Operator potoku daje Ci dostęp do supermocy obliczeniowych, do których świat graficzny dostępu nie ma i nigdy mieć nie będzie. Działania takie jak:

  • tworzenie tysięcy folderów czy
  • wyszukiwanie wszystkich plików pasujących do wzoru lub zawierających taki wzór i wykonywanie na nich wszystkich operacji

są całkiem proste i wymagają nieco pobuszowania w sieci, przeczytania dokumentacji i zastosowania metody prób i błędów.

Interfejs użytkownika

Z tych powodów wiersz poleceń stanowi w wielu programach główny interfejs. Jako użytkownik jesteś więc niemalże zmuszony do jego stosowania. Najlepszym przykładem będzie tu Git: można dostać do niego jakieś GUI, ale korzystanie z nich tworzy jeszcze jeden poziom abstrakcji nad danymi, którymi zarządzasz. Jeśli z Gita korzystasz codziennie, nauka jego CLI da Ci bardzo dużo. Moim zdaniem GUI pozwala Ci na osiągnięcie 80% swoich celów, ale możesz też natknąć się na jeden z tych dziwniejszych przypadków, którym będziesz mógł się zająć wyłącznie przy pomocy wiersza poleceń.

A co z Tobą?

Jakie masz doświadczenia z CLI? Jakich rzeczy chciałbyś się w ich zakresie nauczyć? Daj mi znać w komentarzach!

 
Share this