Sztuczki i triki w terminalu dla każdego [Bash]


  • Admin

    Cześć! Dzisiaj chciałbym Wam nieco opowiedzieć o paru użytecznych trikach i tipsach odnośnie sprawnego poruszania się w Terminalu.

    Jedni go kochają inni nienawidzą ale prawda jest taka, że jest to niewątpliwie bardzo zaawansowane narzędzie którego opanowanie choć nie jest łatwe to ułatwia tak wiele.

    Historia nie boli...

    Zaczniemy sobie nieco niestandardowo czyli od historii, choć jest to raczej rzadko wykorzystywane polecenie to istnieje pewien trick z nią związany. O ile dość intuicyjne jest maglowanie historią bash'a pod postacią strzałek to gdy przychodzi potrzeba wykonania czegoś co robiliśmy dużo dużo wcześniej to już niezbyt chętnie podchodzimy do szukania w pamięci tego jak wywołać to ponownie, i choć jest to dość logiczne to niewiele osób wie (lub też nie chce wiedzieć), że mamy możliwość wykonywania wcześniej wydanych poleceń.

    Weźmy taki przykład wydajemy polecenie history a następnie sprawdzamy indeks polecenia które gdzieś się wcześniej zapodziało. Gdy już znamy numer wystarczy, że wydamy kolejne czyli: !2132 (gdzie 2132 to indeks). W ten sposób wyświetlone zostanie a następnie wykonane ponownie polecenie o które nam chodziło.

    Zmiana lokalizacji:

    Jednym z podstawowych poleceń które na pewno opanowaliście już na starcie było cd (change directory) służące do zmiany ścieżki wewnątrz której operujemy w terminalu. Są jednak pewne ułatwiania z tym związane, np.: cd .. cofa nas katalog wyżej (w hierarchii).

    • home
      • john <- tu będziemy
        • Desktop
        • Download <- tu jesteśmy
        • Pictures

    Dobra ale to raczej było stosunkowo oczywiste, natomiast cd - już takie nie będzie. To polecenie cofa nas tam gdzie znajdowaliśmy się wcześniej (w naszym przykładzie znowu do katalogu Download) oraz przy okazji wypisuje nam tą ścieżkę (czyli wykonuje od razu pwd).

    Problematyczne podnoszenie uprawnień:

    Nie raz zdarzyło Wam się pewnie zapomnieć nieco uciążliwego sudo podczas wpisywania jakiejś komendy - ale to nic straconego, można oczywiście cofnąć się do poprzedniego polecenia i operując strzałkami przejść na sam początek ale po co? Za dużo w tym bezsensownej roboty, o ile naciśnięcie strzałki do góry to pikuś to cofanie się do początku w przypadku naprawdę długich komend mija się z celem, dlatego wykorzystuje się do tego skrót klawiszowy CTRL + A (dzięki temu nasz kursor przeskoczy bezpośrednio na sam początek).

    Nieprawdaż, że fajne rozwiązanie? Ale to nie wszystko, jest jeszcze lepsza droga do uzyskania pożądanego efektu. Chodzi tutaj o wykonanie nowego polecenia czyli sudo !! które automatycznie powtarza ostatnio wykonane polecenie i dodaje z przodu sudo.

    Szukanie po typie, zrzucanie do pliku i inne

    Kolejne dość popularne polecenie czyli ls wyświetlające zawartość katalogu.
    Czasami zdarza się taka sytuacja, że w gąszczu plików za nic nie możemy znaleźć tego którego szukamy. Wiele osób w tym momencie zapomina o tym, że istnieje możliwość wyświetlania plików tylko o podanym typie np. ls *.sh (wyświetl wszystkie pliki z rozszerzeniem sh).
    Być może częściej stosowane w przypadku find ale zasada ta sama.

    Jest to tzw. dopasowywanie do wzorca a więc uproszczone wyrażenia regularne:

    • * - zastępuje dowolnie długi losowy ciąg
    • ? - zastępuje dowolny pojedynczy znak
    • ^ - wyciągnij wszystkie wyrażenia zaczynające się od (przykład: ^a)
    • $ - wyciągnij wszystkie wyrażenia kończące się na (przykład: $a)

    Temat ten jest dużo szerszy niż mogłoby się wydawać jednak na potrzeby tego wpisu zminimalizowałem go maksymalnie. Nie wszystko może działać poprawnie, np. niektóre elementy zadziałają tylko przy potokach wykorzystując grep i/lub inne polecenia (ale o tym za chwile).

    Dość fajnym elementem jest także opcja zrzucania wyniku polecenia do pliku poprzez operator strzałki, działa to mniej więcej tak:
    ls -l > testowo
    Generalnie rzecz biorąc wynik ls -l to lista plików znajdujących się w katalogu w którym obecnie przybywamy (choć nie jest to regułą) następnie operator strzałki kierujący wszystko do nowego pliku o nazwie testowo zapisanym również w tej samej lokalizacji.

    Inna możliwość to dopisywanie do pliku nowych danych poprzez podwójny operator strzałki, czyli: echo "To się będzie znajdować na końcu pliku" >> testowo

    Następnym elementem który jest dość często zapominany to używanie ;. Aby wykonać kilka poleceń naraz wcale nie musimy wklepywać każdego jednego i naciskać enter. Możemy je napisać centralnie obok siebie rozdzielając średnikiem a efekt będzie dokładnie takie jak gdyby wykonywać je po kolei.

    Ostatnim już bajerem jest korzystanie z tzw. potoków czyli przekierowywanie jednego wyniku polecenia do drugiego, przykład:
    ps aux | grep chrome
    Innymi słowy wyświetlamy bieżące uruchomione procesy w systemie (ps aux) i wyciągamy z nich wszystkie te wiersze w których występuje słowo kluczowe chrome (w tym przypadku chodzi akurat o przeglądarkę).

    Przydatne skróty klawiszowe:

    Chodź skróty klawiszowe to dość indywidualna sprawa i wszędzie mogą się one różnić to nauka kilku podstawowych jest na wagę złota, przykład?

    • CTRL + ALT + T - uruchamia gnome-terminal
      • CTRL + U - wycina wszystko od miejsca ustawienia kursora do początku wiersza
      • CTRL + K - analogicznie wycina wszystko od kursora do końca polecenia
      • CTRL + Y - wkleja wycięty poprzednimi dwoma poleceniami kod
      • CTRL + E - działa tak jak wcześniej wspomniane CTRL + A z tą różnicą, że przenosi na koniec
      • CTRL + T - Zamienia miejscami dwa znaki przed kursorem (dobre do poprawy czeskich błędów)
      • ALT + T - Zamienia miejscami dwa słowa przed kursorem
      • CTRL + W - Wycina po słowie na lewo od kursora (można przywrócić CTRL + Y)
      • CTRL + L - Czyści ekran, dokładnie tak jak polecenie clear

    Tutaj warto jeszcze wspomnieć, że clear tak naprawdę nie czyści konsoli a jedynie przesuwa suwakiem widok (co daje wrażenie wyczyszczenia terminala) - jeżeli chcemy jednak faktycznie wywalić to do robiliśmy poprzednio należy użyć innego polecenia czyli reset.

    No choć z początku wygląda to nieco przerażającą to i tak wybrałem te najbardziej potrzebne i wydaje mi się, że wystarczające skróty. W późniejszym czasie zobaczycie, że zaczną Wam one same przychodzić niejako automatycznie (to trochę jak z jazdą na rowerze albo samochodem).

    Dodatkowo jeszcze jedna dość ciekaw i przydatna rzecz a mianowicie wykonując jakieś polecenie np.: less /path/to/your/file
    Chcielibyśmy teraz coś w tym samym pliku edytować, więc wpisalibyśmy nano oraz zaczęlibyśmy przepisywać całą ścieżkę (jakkolwiek długo ona by nie była). Jednak jest na to łatwiejszy sposób czyli ALT + . (alt + kropka) który pobiera ostatni argument z poprzedniego polecenia i wstawia go do nowego. Taki sam efekt uzyskamy również przy pomocy Esc + .

    Robiąc to kilkukrotnie możemy się cofnąć do ostatniego argumentu dwóch poleceń wcześniej itd.

    Praca w tle

    Jednym z ciekawszych poleceń, do których sam próbuje się od dłuższego czasu przyzwyczaić jest korzystanie z bg, fg oraz jobs. Zasada polega na tym, że jeżeli uruchamiamy jakieś zadanie które trwa dłużej niż kilka minut w konsoli to możemy je sobie zatrzymać i np. zrzucić w tło aby dalej móc wykonywać inne czynności w tym samym czasie.

    Robi się to poprzez wyjście zatrzymanie programu CTRL + Z.
    Następnie możemy albo przywrócić fg (foreground) albo uruchomić w tle bg (background). Oba polecenia odnoszą się do ostatnio zatrzymanego zadania, jeżeli mamy ich kilka, co możemy sprawdzić np. jobs to możemy je przełączać podając dodatkowo numer zadania.

    • jobs - przedstawia listę zatrzymanych zadań
    • bg - uruchamia zatrzymane zadanie w tle
    • fg - uruchamia zatrzymane zadanie na pierwszym planie

    Aby od razu uruchomić jakiś program w tle robi się to przy pomocy modyfikatora &, przykład:

    • nano & - uruchomi nano w tle

    Kilka mniej użytecznych sztuczek:

    Większość z tych funkcjonalności będą od nas wymagały doinstalowania dodatkowych pakietów, niemniej jeżeli chcecie popisać się przed znajomymi lub też uprzyjemnić sobie korzystanie z powłoki to będzie to idealna odskocznia.

    1. Istny matrix w teminalu:

    Ciężko powiedzieć czym to dokładnie jest, ale może robić jako wygaszacz czy cokolwiek innego, w każdym bądź razie wystarczy zainstalować pakiet cmatrix, wydając polecenie:
    sudo apt install cmatrix
    I gotowe teraz aby nasz terminal był niczym w matrix'ie wystarczy wydać komendę:
    cmatrix
    Cała reszta przedstawiona w filmiku wyżej czyli parametry -abs ustosunkowują w jaki sposób ciąg liter ma się zmieniać, więcej na ten temat znajdziecie oczywiście w podręczniku (man).

    2. Własny napis po uruchomieniu konsoli:

    Zakładam, że oglądając demo powyżej na pewno zwróciliście uwagę na inną sztuczkę a mianowicie wypisany dużymi literami nick z znaków ASCII. W tym celu należy lekko zmodyfikować plik .bashrc, jednak zanim to zrobimy należy zainstalować pakiet to umożliwiający: sudo apt install figlet
    Następnie wybierając swój ulubiony edytor modyfikujemy lekko wcześniej wspomniany plik:
    nano ~/.bashrc
    Przechodzimy na sam koniec pliku i dopisujemy taki oto kod:
    figlet "TUTAJ TEKST";echo -n 'Witaj '; whoami; echo ''
    Na koniec zapisujemy CTRL + X oraz Yes / Tak i zatwierdzamy Enter.

    3.Pociąg steam:

    Kolejny ciekawy efekt czyli sl (steam locomotive) który można doinstalować poleceniem:
    sudo apt install sl
    I to wszystko teraz uruchamiając mamy całkiem fajną animacje pociągu:
    sl
    Możemy opcjonalnie dopisać również parametr -l czyli:
    sl -l
    Dzięki temu nasz pociąg będzie miał dwa dodatkowe wagony ;)

    4. Wiele terminali w jednym

    Bardzo pomocna rzecz jeżeli macie naturę trochę bałaganiarza i wiele rzeczy robicie w wielu miejscach naraz, błyskawicznie przybywa Wam okien terminali nad którymi coraz ciężej zapanować. W odpowiedzi na to przychodzi tmux, czyli tzw. multiplexer pozwalający podzielić obecnie widoczne okno konsoli na kilka mniejszych czy też kilka działających w tle.

    Instalacja wygląda standardowo, czyli:
    sudo apt install tmux
    Następnie odpalamy sam program tmux no i teraz zaczyna się konsternacja i zakłopotanie jak to dalej działa.

    W tym miejscu znowu do gry wchodzą skróty klawiszowe.
    Pierwsze co to CTRL + B (odnosi się do bieżącego widoku). Koniecznie musicie nacisnąć tą kombinacje przed wykonaniem kolejnych w przeciwnym razie będziecie pisać wewnątrz shell'a i nici z kilku konsol.

    Następnie aby podzielić ekran w pionie naciskamy Shift + %, natomiast zrobienie tego samego tylko w poziomie uzyskamy wybierając Shift + ".

    Aby przełączać się pomiędzy widokami wystarczy, że ponownie użyjecie CTRL + B a po puszczeniu strzałką LEWO / PRAWO prze pionowym podziale oraz GÓRA / DÓŁ przy poziomym.

    Innym ciekawym trikiem jest odpalenie np. zegarka ponownie CTRL + B a po tym T na klawiaturze. Podobnie można zmieniać wielkość i szerokość poszczególnych okien przytrzymując tym razem CTRL + B oraz strzałkami jeździć góra / dół / lewo / prawo.

    Tak jak wspominałem możliwe jest też równoległe działanie kilku terminali w tle, robi się to tak samo zaczynamy od początkowej sekwencji czyli CTRL + B a następnie naciskamy C. Sesje terminali są odpowiednio opisane w dolnej części:
    Tmux info
    Gwiazdka oznacza bieżące okno natomiast kolejne cyfry w tym przypadku to kolejne sesje, tak jak widać numerowanie jest od 0 co warto mieć na uwadze, aby przełączyć się pomiędzy dwoma widokami wystarczy ponownie użyć jedynej słusznej kombinacji i nacisnąć numer terminala na klawiaturze lub P (prev - poprzedni) / N (next - nastepny).


    Wydaje mi się, że nietrudno domyślić się skąd się wszystkie te triki biorą, od programistów oczywiście - od pisania skryptów w powłoce itd. Dlatego warto zawsze poznać drugą stronę medalu nie tylko pasożytniczo korzystając z narzędzi które ktoś kiedyś stworzył ale także budując swoje własne rozwiązania.

    Na ten moment to by było na tyle, jeżeli również znacie jakieś ciekawe triki i sztuczki które wykorzystujecie w codziennej pracy napiszcie koniecznie w komentarzu. Cześć rzeczy opisałem nieco pobieżnie ale mimo wszystko mam nadzieje, że wystarczająco przystępnie nawet dla początkujących.