Narzędzia wiersza poleceń dla programistów
Opublikowany: 2022-03-11W dzisiejszym świecie online walka o przyciągnięcie użytkowników nadal trwa, a twórcy aplikacji preferują aplikacje mobilne lub internetowe. Aplikacje desktopowe stają się coraz mniej istotne. Co więcej, są one również niczym więcej niż bogatymi klientami aplikacji internetowych – Electron jest popularną platformą z wyboru.
Czy to oznacza, że wkrótce porzucimy pulpit jako platformę? Nie, oczywiście, że nie, nie powiedziałbym tego. Poza tym, chociaż wydaje się, że aplikacje z graficznym interfejsem użytkownika ostatnio przestają działać, istnieje segment aplikacji komputerowych, który nadal się rozwija.
Czy widziałeś kiedyś film z hakerami? Najczęściej ci ludzie są pokazywani podczas pracy przed monitorami wyświetlającymi jakiś terminal (zwykle z ciemnym tłem i jasnym pierwszym planem). Ten terminal z kolei bywa zalewany przechodzącymi postaciami, które najwyraźniej mają jakieś znaczenie dla osoby, która je obserwuje.
Takie reprezentacje hakerów w akcji są często wyśmiewane przez profesjonalnych programistów, a istnieją nawet programy, które symulują różne efekty „hakerskie”, po prostu dla zabawy.
Jednak w prawdziwym świecie narzędzia wiersza poleceń nie są wykorzystywane ze względu na ich wartość rozrywkową.
Dlaczego nadal używamy narzędzi interfejsu wiersza poleceń
Ten artykuł koncentruje się na praktycznej stronie korzystania z narzędzi interfejsu wiersza poleceń (CLI). Znajomość poleceń CLI i korzystanie z wysokiej jakości narzędzi może zwiększyć produktywność, a także otworzyć drzwi do różnych podejść do automatyzacji, które są znacznie bardziej praktyczne w przypadku interfejsów tekstowych niż w przypadku aplikacji z graficznym interfejsem użytkownika.
Możesz być lepszy w wykonywaniu powtarzalnych zadań w GUI, do tego stopnia, że wielokrotne kliknięcia będą słyszalne jako jeden długi. Problem w tym, że to nadal nie przebije wydajności wyspecjalizowanego skryptu. Co więcej, ręczne wykonywanie tych samych operacji wprowadza zarówno dodatkowe obciążenie poznawcze, jak i zwiększoną możliwość błędu ludzkiego. Jak zwykle polegamy na komputerach do wykonywania zadań, które ludzie mogą uznać za nudne, powtarzalne lub przytłaczające.
Warto wiedzieć, że narzędzie terminalowe może oferować kilka rodzajów interfejsów. Istnieją nieinteraktywne, takie jak ls, które po prostu pobierają parametry i dostarczają dane wyjściowe. W menedżerach pakietów najczęściej znajdują się interfejsy interaktywne lub półinteraktywne. („Czy na pewno chcesz kontynuować instalację z niezweryfikowanego źródła?”) Następnie istnieją tekstowe interfejsy użytkownika (TUI), które są interaktywnymi aplikacjami GUI zaprojektowanymi tak, aby pasowały do ograniczeń terminala. Chyba najbardziej znanym z nich jest Midnight Commander (mc), klon niezwykle popularnego (w latach 90.) Norton Commandera.
Niezbędne narzędzia wiersza poleceń
Jeśli chcesz zostać mieszkańcem konsoli, musisz wyposażyć się w minimalny zestaw narzędzi programistycznych wiersza poleceń — podstawowe elementy. Rzeczy, bez których na pewno nie możesz żyć, to interaktywna powłoka (celuj w coś nowoczesnego z wygodnym uzupełnianiem tabulatorów) i edytor tekstu .
Teraz wspomnę o filozofii UNIX , która często jest podstawą decyzji projektowych podejmowanych przez autorów narzędzia, świadomie lub nie. Niektóre kluczowe punkty można podsumować w następujący sposób:
- Traktuj wszystko jako plik.
- Rób tylko jedną rzecz, ale rób to dobrze.
- Odczytuj ze standardowego wejścia, zapisuj na standardowym wyjściu i przesyłaj błędy do standardowego strumienia błędów.
- Gdy się powiedzie, zwraca kod 0. Wartość niezerowa oznacza błąd (który może być określony przez dokładny kod powrotu).
- Zezwalaj na tworzenie łańcucha poleceń i skryptów.
Muszla
Pierwszą rzeczą, którą widzisz po otwarciu terminala, jest powłoka. Jest to część, która umożliwia interakcję między użytkownikiem a maszyną. Interpretuje twoje polecenia, dzieli je na nazwy programów i argumenty oraz wykonuje wszystkie polecenia powłoki, które do niego rzucisz.
Historycznie istniało wiele różnych rodzajów muszli. Wśród najpopularniejszych znalazły się csh (C Shell) i różne implementacje powłoki Bourne'a (zwykle znane po prostu jako sh ). Bourne Shell został rozszerzony w Korn Shell, który również zyskał pewną przyczepność i nadal jest używany przez swoich entuzjastów. Csh jest obecnie domyślną powłoką w niektórych systemach BSD, podczas gdy prawie wszystkie inne systemy operacyjne typu UNIX preferują jakiś rodzaj powłoki Bourne'a. Dystrybucje Linuksa mają tendencję do faworyzowania bash, podczas gdy Mac OS X jest dostarczany z zsh jako domyślnym wyborem.
Istnieją inne możliwości, ale są one znacznie mniej popularne, z wyjątkiem Microsoft PowerShell w systemach Windows. Program PowerShell jest inspirowany częściowo interaktywnymi powłokami systemu UNIX, takimi jak zsh, a częściowo środowiskiem uruchomieniowym platformy .NET. Zamiast traktować wszystko jak tekst, co jest pojęciem powszechnym w świecie UNIX, pozwala na obiektową manipulację danymi.
Mimo że Microsoft PowerShell jest dość popularny w dziedzinie Windows, wiele programów o korzeniach UNIX (najbardziej godne uwagi to Git, Autotools lub Make) preferuje jakąś odmianę powłoki Bourne'a. Z tego powodu narodziły się projekty takie jak msys (w pakiecie z Git dla Windows), Cygwin lub ostatni WSL Microsoftu. Jeśli chcesz poczuć się jak w Linuksie w systemie Windows, MSys jest tutaj najlepszym wyborem. Jeśli potrzebujesz w pełni funkcjonalnego środowiska Linux, które będzie w stanie uruchamiać standardowe pliki binarne Linux, to WSL jest drogą do zrobienia. Dla czegoś pomiędzy — UNIX API, ale skompilowany jako plik wykonywalny Windows (używaj go tylko wtedy, gdy naprawdę wiesz, dlaczego tego potrzebujesz) — Cygwin jest odpowiedzią.
Redaktor
Po zapoznaniu się z pociskiem będziesz chciał zdobyć kilka przydatnych umiejętności. Ponieważ większość pracy związanej z kodowaniem kręci się wokół pisania tekstu (kod, pliki README, komunikaty dotyczące zmian), dobra znajomość interaktywnych edytorów tekstu jest niezbędna. Jest wiele do wyboru, a ponieważ edytor jest jednym z najbardziej niezbędnych narzędzi dla każdego programisty, prawdopodobnie jest tyle samo opinii na temat tego, który edytor jest najlepszy.
Najpopularniejsze edytory tekstu można podzielić na dwie podstawowe grupy: proste edytory tekstu i programowalne edytory tekstu .
Oba mogą być świetne do pisania kodu, ale, jak sama nazwa wskazuje, te programowalne oferują możliwość kształtowania i dostosowywania edytora tak, aby idealnie odpowiadał Twoim potrzebom. Ma to jednak swoją cenę, ponieważ mają one również bardziej stromą krzywą uczenia się i mogą wymagać więcej czasu na konfigurację.
Podstawowe edytory tekstu
Wśród prostych edytorów tekstu najbardziej rozpowszechniony jest GNU Nano. W rzeczywistości jest to klon edytora pico, więc jeśli jeden nie jest dostępny w twoim systemie, możesz wypróbować drugi. Inną, bardziej nowoczesną alternatywą dla obu jest mikroedytor. Jeśli chcesz czegoś prostego i jednocześnie rozszerzalnego, ten jest dobrym miejscem do rozpoczęcia.
Programowalne edytory tekstu
Wielu programistów polega na programowalnych edytorach z różnych obozów, takich jak Vim i GNU Emacs. Oba edytory można uruchomić w konsoli lub w trybie GUI i oba miały wpływ na powiązania klawiszy znalezione w innym oprogramowaniu. Oba oferują nie tylko API, ale także wbudowane rzeczywiste języki programowania. Emacs koncentruje się na LISP, a Vim używa własnego VimL, ale oferuje również interfejsy do innych popularnych języków skryptowych (takich jak Lua, Perl, Python lub Ruby). Warto również wspomnieć o nowszym podejściu do Vima, zwanym Neovim, ponieważ zaczyna on mieć poważne zainteresowanie.
Może to być trochę zagmatwane, ale jest też edytor o nazwie vi, który jest poprzednikiem Vima (co, nawiasem mówiąc, oznacza „ Vi udowodniłem ”). Jest o wiele prostszy niż Vim, ale jeśli masz wystarczająco dużo pewności siebie, aby pisać w Vimie, nie powinno to być dla ciebie wyzwaniem, jeśli okaże się, że musisz użyć vi.
Ponieważ pico/GNU Nano i vi/Vim są zwykle preinstalowane na różnych systemach, dobrym pomysłem jest przynajmniej zapoznanie się z ich podstawami (zamknięcie Vima jest notorycznie trudnym problemem dla początkujących). W ten sposób, jeśli potrzebujesz edytować coś na zdalnej maszynie, będziesz gotowy niezależnie od tego, jaki edytor już tam jest. Na swoim prywatnym urządzeniu możesz używać dowolnego edytora, który uważasz za najwygodniejszy.
Domyślny edytor systemu
Ostatnią rzeczą do zapamiętania jest to, że twój system może mieć tak zwany edytor domyślny .
Zmienna środowiskowa $EDITOR
wskazuje na domyślny edytor, aw powłokach kompatybilnych z Bourne (sh, bash, ksh, zsh) można go zobaczyć, wpisując echo $EDITOR
. Jeśli wartość różni się od Twojego osobistego wyboru, możesz ustawić ją samodzielnie, dodając export EDITOR=my-awesome-editor
do konfiguracji środowiska wykonawczego powłoki ( ~/.profile
, ~./bashrc
, ~/.zshrc
itd.).
Inne programy, takie jak systemy kontroli wersji i klienci poczty, będą używać tego edytora, gdy będą potrzebować dłuższego wprowadzania tekstu.
Multiplekser
Gdy tylko zaczniesz robić poważne rzeczy w CLI, napotkasz ograniczenie polegające na tym, że w danym momencie możesz mieć otwartą tylko jedną aplikację. Podczas kodowania możesz chcieć edytować kod, wykonać go, naprawić błędy i wykonać ponownie. Szukając błędu, możesz chcieć wyświetlić listę dzienników i zobaczyć, co jest rejestrowane po wysłaniu żądania do serwera. Zazwyczaj oznaczałoby to albo ciągłe przełączanie między dwiema aplikacjami, albo otwieranie kilku okien terminala.
Tutaj może pomóc multiplekser terminala. Mówiąc o multiplekserach, niektórzy od razu zakładają, że temat dotyczy ekranu GNU. Było to pierwsze szeroko rozpowszechnione narzędzie tego typu i do dziś jest bardzo popularne (często jest instalowane domyślnie). Jego nowoczesnym zamiennikiem jest tmux , który, jak można się spodziewać, oznacza „wielokrotność terminala ”.

Te dwa pozwalają na otwarcie więcej niż jednego okna w danej sesji terminala i swobodne przełączanie się między tymi sesjami. Pozwalają na dzielenie okien na panele, co pomaga uruchomić kilka aplikacji jednocześnie i obserwować ich działanie w czasie rzeczywistym (bez przełączania jakichkolwiek okien). Ponadto działają w trybie klient-serwer, co oznacza, że możesz je odłączyć w dowolnym momencie i wrócić później, aby kontynuować pracę tam, gdzie ją przerwałeś. Ta ostatnia cecha doprowadziła do popularności Screena, gdy ludzie chcieli trwałych sesji IRC.
W większości przypadków GNU Screen lub tmux powinny być dla ciebie świetne, ale jeśli z jakiegoś powodu uważasz, że są zbyt obciążone zasobami, istnieją również lżejsze alternatywy. Jest dtach/attach i jest abduco. Ich zakres jest celowo ograniczony, ale mogą dobrze wykonywać swoje obowiązki.
Menedżer pakietów
W tym momencie możesz zacząć myśleć o zainstalowaniu całego wyżej wymienionego oprogramowania na swoim komputerze. Jednym z problemów jest to, że każde z narzędzi ma inną instrukcję instalacji. Czasami musisz pobrać źródła i skompilować je samodzielnie, czasami otrzymujesz samowystarczalny plik binarny, a czasami otrzymujesz tak zwany pakiet binarny , co zwykle oznacza plik wykonywalny skompresowany wraz z pewnymi metadanymi.
Aby ułatwić proces instalacji oprogramowania, twórcy systemów operacyjnych opracowali koncepcję menedżerów pakietów. Mówiąc prościej, menedżer pakietów jest jak sklep z aplikacjami dla CLI i aplikacji komputerowych. O kilkadziesiąt lat wyprzedza rzeczywiste sklepy z aplikacjami. Problem polega na tym, że prawie każdy system ma swojego własnego menedżera pakietów. Debian, Ubuntu i pochodne dystrybucje GNU/Linux używają APT, dystrybucje oparte na Red Hat preferują yum lub DNF, inne dystrybucje Linuksa mają bardziej egzotyczne sposoby instalowania oprogramowania, podobnie jak różne klony BSD. Oprócz wbudowanych menedżerów pakietów istnieją również te instalowane przez użytkownika, takie jak Chocolatey dla MS Windows i Homebrew dla Mac OS X/macOS. Kiedy chcesz napisać instrukcje, jak zainstalować swój program, możesz skończyć na pisaniu przypadków dla każdego z tych systemów. Wydaje się, że to trochę za dużo, prawda?
Na szczęście ostatni z wymienionych systemów, Homebrew, może być najbardziej przenośnym, dzięki Linuxbrew, portowi Homebrew na systemy GNU/Linux. Zabawne jest to, że działa nawet w WSL, jeśli chcesz mieć podobne wrażenia użytkownika w systemie Microsoft Windows. Pamiętaj jednak, że WSL nie jest oficjalnie obsługiwany.
Co więc poza przenośnością może zaoferować Homebrew? Przede wszystkim nie ingeruje w pakiety systemowe, więc wszystko, co instalujesz, znajduje się na osobnej warstwie systemu operacyjnego. Poza tym do instalowania pakietów zwykle nie są potrzebne uprawnienia roota. Możesz więc mieć pakiety systemowe, które są stabilne i przetestowane, ale jednocześnie sprawdzają ich nowsze wersje bez poświęcania stabilności systemu.
Jeśli chcesz przetestować edytory, wspomniałem wcześniej, że wszystko, co musisz zrobić w systemie z Homebrew lub Linuxbrew, to uruchomić to polecenie:
brew install emacs micro nano vim neovim
.
Błyszczące rzeczy
To, co już omówiliśmy, jest niewątpliwie przydatne w pracy. Ale są też aplikacje, które choć nie są konieczne, to jednak zapewniają komfort codziennego życia. Możesz ich nie potrzebować, ale zawsze warto je poznać.
Filtr interaktywny
Przeszukiwanie historii poleceń może być żmudne. Chociaż zarówno bash, jak i zsh zawierają skrót Ctrl+R, pokazuje tylko jedno podstawienie na raz. Co więcej, musisz wpisać dokładnie ten sam tekst, którego używałeś wcześniej. Ponieważ jest to dość powszechna operacja, po rozpoczęciu korzystania z wiersza poleceń wygląda na to, że jest to dobre miejsce do poprawy.
Filtry interaktywne, takie jak fzy, percol, peco lub fzf, pomagają filtrować długie wiersze tekstu. Może to być wspomniana historia poleceń, wszystkie wiersze kodu w katalogu projektu lub lista nazw plików wygenerowana przez find .
. Ogólny pomysł polega na tym, aby najpierw przedstawić wszystkie dostępne wiersze, a następnie polegać na algorytmach wyszukiwania rozmytego, aby odfiltrować wszystko, co nie pasuje.
Na przykład powiązanie Ctrl+R z fzf pokazuje listę najnowszych poleceń, po których możesz poruszać się w górę iw dół za pomocą strzałek, lub możesz wpisać git
, aby wyświetlić tylko polecenia zawierające Git gdzieś w środku. Osobiście, kiedy pracuję z powłoką, która nie ma interaktywnego filtra, nagle czuję się trochę zagubiona. Ta funkcja jest naprawdę atrakcyjna!
Dodatkowo możesz udostępnić swój interaktywny filtr w programowalnym edytorze tekstu. W ten sposób będziesz miał zunifikowane możliwości wyszukiwania między twoją powłoką a edytorem.
Interaktywny nawigator
Facebook PathPicker był bardzo pomocny, kiedy pracowałem głównie z projektami C++. Dziennik błędów generowany przez kompilator może stać się dość duży i paskudny, a możliwość znalezienia rzeczywistych ścieżek w tym dzienniku była dobrodziejstwem dla produktywności.
W dowolnym pliku tekstowym lub zawartości ekranu, gdy jest używany z tmux, fpp filtruje wszystko oprócz ścieżek plików. Następnie przedstawia interfejs użytkownika, w którym można wybrać jedną lub więcej z tych ścieżek i uruchomić z nimi polecenie. Najczęstszą odpowiedzią byłoby oczywiście otwarcie plików w edytorze, co jest działaniem domyślnym.
Interfejs Gita
Prawdopodobnie przynajmniej jeden z projektów, nad którymi pracujesz, wykorzystuje Git jako system kontroli wersji. Będąc całkowicie potężnym, interfejs Git CLI nie jest szczytem doskonałego doświadczenia użytkownika. Aby zaoszczędzić trochę stresu podczas czytania wszystkich opcji w pomocy Git $SUBCOMMAND
, polecam sprawdzić tig. Oferuje przyjemny interfejs użytkownika konsoli dla operacji, które z niego korzystają, takich jak log
lub blame
.
Innym narzędziem, które ma na celu pomóc użytkownikom GIt, jest fac, co jest akronimem od Fix All Conflicts . Jak można się domyślić, przydaje się, gdy napotkasz konflikty podczas łączenia lub ponownego bazowania. Jest to alternatywa dla innych narzędzi do scalania, takich jak vimdiff.
Menedżer plików
W latach 90. wszyscy chcieli mieć menedżera plików z dwoma panelami. Trend rozpoczął się od Norton Commandera. Wielu innych poszło tą samą ścieżką, ale tym, który nadal widzi stabilną bazę użytkowników, jest Midnight Commander. Najbardziej oczywistym przypadkiem użycia jest użycie mc do manipulowania plikami lokalnymi, ale jest to również bardzo przydatne podczas pracy z komputerami zdalnymi.
Podobnie jak większość programów wiersza poleceń, jest bardzo lekki, więc nie ma problemu z uruchomieniem go przez ssh, a dzięki obsłudze protokołów FTP i FISH można mieć widoczny lokalny system plików w jednym okienku, a zdalny w drugim — wygodne gdy chcesz uniknąć wpisywania lub kopiowania nazw plików jako argumentów do scp.
Narzędzia CLI tylko dla zabawy
„Cała praca i brak zabawy sprawiają, że Jack jest nudnym chłopcem” – mówią. Istnieje wiele programów, linii poleceń i innych, które służą tylko twojej rozrywce. Do tej kategorii należy gra Rogue. Dało to nawet nazwę całemu gatunkowi gier! Innymi popularnymi zabawkami są wróżby i krowie, które mogą sprawić, że Twój dzień będzie nieco mniej nudny, jeśli użyjesz ich na przykład w skryptach CI.
Ale dla niektórych z nas główną atrakcją korzystania z konsoli jest przede wszystkim poczucie hakera w filmach. No More Secrets i Hollywood Hacker dobrze reprezentują tę grupę. Wypróbuj, gdy ktoś patrzy, jak pracujesz, a twój wizerunek hakera z pewnością wzrośnie!
Linia poleceń w praktyce
Więc co jest tak atrakcyjnego w wierszu poleceń, który równoważy godziny spędzone na nauce korzystania z powłoki, edytora i wszystkich przełączników różnych aplikacji? Krótka odpowiedź to produktywność , która wynika z dwóch rzeczy:
Jednym z nich jest to, że gdy widzisz tylko okno terminala i nic więcej, możesz skupić się bardziej intensywnie, ponieważ niewiele cię rozprasza. Bez wyskakujących powiadomień, bez reklam, bez zdjęć ślicznych kociąt. Tylko Ty i Twój cel.
Druga rzecz to automatyzacja. Możesz umieścić kilka często łączonych działań w skrypcie i wywołać go później jako całość zamiast wpisywać je za każdym razem ręcznie. Możesz szybko wrócić do szczególnie złożonego polecenia, które kiedyś napisałeś, przeszukując historię swojej powłoki. Zasadniczo możesz nagrywać i odtwarzać wszystko, a kod jest dostępny jako dokumentacja tego, co zrobiłeś.
Możliwość dodawania aliasów również przyczynia się do korzyści. Na przykład często tworzę zatwierdzenia w Git, aktualizując ten sam, aż będzie idealny (na razie). Po przygotowaniu żądanych plików uruchamiam git carmh
. Nie próbuj tego szukać w instrukcji, ponieważ jest to mój prywatny alias oznaczający commit --amend --reuse-message=HEAD
. Na pewno oszczędza trochę pisania.
Chodzi o to, że ludzie nudzą się, powtarzając w kółko te same czynności, a nuda zmniejsza skupienie. Może to prowadzić do błędów i błędów. Jedynym sposobem, aby ich uniknąć, jest nie przeplatanie akcji mocno i słabo skupionych. Pisanie kodu jest bardzo skoncentrowane, a przeglądanie komunikatu i treści o zatwierdzeniu jest bardzo skoncentrowane, ale kiedy musisz powtórzyć kilka mechanicznych kliknięć tu i tam, aby przejść do etapu sprawdzania zatwierdzenia, szanse, że się skupisz, są mniejsze. Linia poleceń nie jest oczywiście wolna od takich mechanicznych czynności, ale dzięki automatyzacji większości z nich można uniknąć.
Dalsze eksploracje
Być może znasz już niektóre lub wszystkie narzędzia wiersza poleceń wymienione w tym artykule. Być może podczas czytania nauczyłeś się czegoś nowego i przydatnego. Jeśli tak, świetnie — moim celem nie było przedstawienie pełnego przeglądu i porównania różnych narzędzi, ale zademonstrowanie kilku kluczowych narzędzi, które okazały się pomocne w mojej codziennej pracy, w nadziei, że niektóre z nich mogą okazać się przydatne, też.
Istnieje znacznie więcej interesujących programów wiersza poleceń, a jeśli jesteś nimi zainteresowany, polecam sprawdzić listę najlepszych dostępnych obecnie narzędzi wiersza poleceń Awesome Shell.
Większość aplikacji GUI ma swój terminalowy odpowiednik. Obejmuje to przeglądarki internetowe, klienty poczty e-mail, klienty czatu (IRC, Slack, XMPP), pakiety PIM lub arkusze kalkulacyjne. Jeśli znasz jakieś dobre programy, o których nie wspomniałem, podaj je w komentarzach.