Nasza strona używa cookies. Korzystając ze strony, wyrażasz zgodę na używanie cookies, zgodnie z aktualnymi ustawieniami przeglądarki. Rozumiem

Podstawy Basha dla początkujących

Parul Pandey Data Science Communicator / Towards Data Science, Analytics VIdhya, OpenSource.com
Poznaj niektóre z najbardziej przydatnych poleceń Basha i oferowane przez niego narzędzia.
Podstawy Basha dla początkujących

Większość dzisiejszych komputerów nie jest zasilana elektrycznością. Zamiast tego wydaje się, że zasilają je ruchy myszki. - William Shotts



Znacie ten filmowy typ super nerda hakera, który jest w stanie przejść przez zabezpieczenia nawet najbardziej zabezpieczonego banku i obrobić go, siedząc przed komputerem i wklepując polecenia? Dodajmy do tego wszystkiego zielony ekran z czarnym tłem i mamy pełny obraz. W jaki sposób taki ktoś ma ciągły dostęp do wszystkich haseł i przejmuje kontrolę nad ukrytymi kamerami po kilku uderzeniach w klawiaturę? Nie jestem do końca pewny, skąd Ci wszyscy filmowcy to wzięli, ale to jest pewnie ich sposób na przekazanie nam następującej prawdy: wiersz poleceń to potężne narzędzie, pomijając jednak ten cały absurd hakerski. 

Początkujący są często tak bardzo przyzwyczajeni do pracy z GUI, że nie zdają sobie sprawy z możliwości, jakie daje im wiersz poleceń (CLI). Myszka naprawdę się przydaje, kiedy musimy skopiować setki tysięcy plików do jednego folderu, ale co jeśli trzeba je na nowo nazwać, lub podzielić w oparciu o ich rozszerzenia? Ponieważ GUI nie da się zaprogramować, to nazwanie, czy podzielenie tych wszystkich plików zajęłoby wieczność. CLI sprawia jednak, że osiągniemy to pisząc zaledwie kilka linijek kodu. 

Powłoka Unixowa to świetne narzędzie właściwie dla wszelkiego rodzaju developerów. W tym artykule postaram się wprowadzić Was w podstawy, zaczynając od systemu operacyjnego UNIX.


UNIX

Większość dzisiejszych systemów operacyjnych, poza Windowsem, jest oparta na systemie UNIX. Mamy tutaj sporo dystrybucji Linuksa, macOS, iOS, Android i wiele więcej. Wystarczy spojrzeć na drzewo genealogiczne systemów operacyjnych opartych na UNIX, aby zdać sobie sprawę z tego, jak istotny jest to system i dlaczego tak szeroko się z niego korzysta. Tak naprawdę to backend wielu systemów obliczeniowych, łącznie z takimi gigantami jak Facebook i Google, jest mocno oparty na systemie UNIX. 

Drzewo genealogiczne UNIX. Źródło: Wikipedia

Powłoka

Shell (tłum. powłoka) to interfejs wiersza poleceń, z którego korzystamy do uruchamiania programów na komputerach. Użytkownik wpisuje swoje komendy, a Shell uruchamia dany program dla użytkownika, wyświetlając potem wynik. Polecenia mogą być bezpośrednio wprowadzane przez użytkownika lub odczytywane z pliku o nazwie shell script lub shell program. 

Typy powłok 

UNIX zazwyczaj oferuje duży wybór powłok. Oto najbardziej powszechne: 

W tym artykule skupimy się jednak na powłoce Bash. Niemniej jednak polecam wypróbowanie innych powłok, a zwłaszcza powłoki zsh, ponieważ zastąpi ona Bash w Catalina.


Terminal

Terminal to program, którego używa się do interakcji z daną powłoką. Jest to interfejs do Shell i innych programów wiersza poleceń, które wewnątrz niego działają. Jest to coś zbliżonego do przeglądarki, która jest interfejsem stron internetowych. Oto jak taki terminal wygląda na Macu. 

Typowy terminal na komputerze Mac

Mac oraz Linux mają swoje własne wersje terminala. Windows również ma wbudowaną powłokę poleceń, ale jest on oparty na wierszu poleceń MS-DOS, a nie na systemie UNIX. Zobaczmy więc, jak możemy zainstalować Shell oraz terminal na Windowsie, który działa tak samo, jak te na Macu i Linuksie. 

Instalacja na Windowsie

  • Windows Subsystem for Linux (WSL)

Jest to nowy system dla kompatybilności Linuksa z Windows 10. WSL pozwala developerom na uruchomienie środowiska Linux/GNU bezpośrednio na Windowsie, wraz z większością narzędzi CLI, narzędzi pomocniczych oraz aplikacji i to bez narzutu tradycyjnej maszyny wirtualnej. Więcej o instalacji i funkcjach WSL przeczytasz tutaj

  • Git Bash

W tym artykule będziemy używać czegoś o nazwie Git Bash. Pobierz Git na Windowsa i zainstaluj go ze wszystkimi domyślnymi ustawieniami. Pod koniec pojawi się okno terminala: 


Git Bash Windowsa

Więcej o Terminalu

Za każdym razem, gdy otwieramy okno terminala, to widzimy nasze ostatnie dane logowania oraz znak zachęty. Pojawia się ona, gdy powłoka jest gotowa na przyjęcie wyników. Trochę się mogą różnić wyglądem, w zależności od dystrybucji, ale zazwyczaj wygląda to tak: username@machinename, a po nim $.

Gdybyście nie chcieli tych wszystkich informacji, użyjcie po prostu PS1 do dostosowania swojej zachęty. 

Terminal pokaże jedynie $ w zachęcie. Jest to jednak tymczasowe i w momencie zamknięcia terminala zresetuje się do ustawień oryginalnych.

Zaczynamy

Aby dowiedzieć się trochę o Bashu, spróbujmy kilku prostych poleceń:

  • echo: zwraca wszystko, co wpisujesz w zachęcie Shell, podobnie jak działa print w Pythonie

  • date: wyświetla aktualny czas i datę

  • cal: wyświetla kalendarz na aktualny miesiąc

  • Clearing the Terminal: Ctrl + L lub clear - czyści okno terminala


Podstawowe polecenia Bash

Polecenie Bash to najmniejsza część kodu, którą Bash może wykonywać w sposób niezależny. Mówimy w ten sposób Bashowi, co ma robić. Bierze on z reguły pojedyncze polecenie od danego użytkownika i zwraca wyjście, kiedy zostanie wykonana. 

Obecny katalog

pwd

pwd to po rozwinięciu print working directory - wskazuje ono katalog, w którym obecnie się znajdujemy. Jest to również domyślne miejsce, w którym polecenie shell będzie szukać plików danych. Katalog przypomina folder, ale w Shell będziemy się raczej trzymać nazwy. Hierarchia plików UNIX ma strukturę drzewa. Aby dostać się do jakiegoś folderu lub pliku, musimy przejść przez trochę ścieżek w naszym drzewie. Ścieżki oddzielają każdy węzeł we wcześniej wspomnianej strukturze za pomocą /.

Nawigowanie po katalogach

Poleceń takich jak ls oraz cd używa się do nawigowania i organizowania plików. 

ls

ls to skrót od list. Wylistuje ono zawartość katalogu, w którym obecnie pracujemy. Jeżeli mamy świeżo uruchomiony terminal i nie zmienialiśmy lokalizacji, to wylistuje zawartość katalogu domowego. Ponieżej zobaczycie jak wygląda wynik tej komendy dla mojego katalogu domowego - /Users/parul.


Mój katalog domowy w Shell i GUI

Parametry

Parametry oraz opcje włączają specjalne funkcje, kiedy użyjemy ich z poleceniem ls.

  • ls <folder>: używamy do sprawdzenia treści w danym katalogu
  • ls -a: używamy do wylistowania wszystkich ukrytych plików w danym katalogu
  • ls -l: drukuje dłuższe i bardziej szczegółowe listingi plików. ls -l może być również użyte z nazwą katalogu, aby wylistować pliki tego konkretnego katalogu docelowego. 
  • ls ~: tylda (~) to skrót, który symbolizuje katalog domowy. Tak więc, niezależnie od tego, któremu katalogowi będziemy się przyglądać, ls ~ zawszę wylistuje zawartość katalogu domowego. 


Wildcard

Powłoka również pozwala nam na dopasowanie nazw plików do danego wzorca. Jej symbolem jest *. Służy to jako wildcard to zastępowania każdego innego znaku w danym wzorcu. Na przykład, jeśli napiszemy *.txt, to pokaże to wszystkie pliki z takim właśnie rozszerzeniem. Spróbujmy zatem wylistować wszystkie pliki z rozszerzeniem .py w naszym folderze Demo:

cd

cd to po rozwinięciu Change Directory - zmienia to aktywny katalog do określonej ścieżki. Po wstawieniu cd do danego katalogu, polecenie ls może zostać wykorzystane do podglądu treści tego katalogu. Sprawdźmy sposoby, na jakie tego polecenia można użyć.

  • cd <Directory>: zmienia obecny katalog w taki, którego potrzebujemy. Spróbujmy teraz nawigować do katalogu test, który znajduje się w Demo. Podejrzymy jego zawartość przy pomocy polecenia ls. Pamiętajcie, że możemy również użyć średnika (;) aby napisać dwa polecenia w tej samej linijce. 


  • cd ..: używamy, aby powrócić do katalogu nadrzędnego
  • cd: używamy, aby powrócić do katalogu domowego


Organizacja plików

Istnieją pewne polecenia, które pozwalają nam na przemieszczanie, usuwanie, tworzenie oraz kopiowanie plików wewnątrz powłoki. 

mkdir

mkdir to po rozwinięciu Make directory i korzysta się z niego do stworzenia nowego katalogu.

mv

mv to po prostu Move - przemieszcza ono jeden lub więcej plików/katalogów z jednego miejsca do drugiego. Musimy dokładnie określić, co chcemy przemieszczać, czyli źródło oraz, gdzie, czyli cel. Stwórzmy nowy katalog w folderze Demo i nazwijmy go PythonFiles. Przenieśmy go w całości do plików .py z folderu Demo, korzystają z obu powyższych poleceń. 

touch

Poleceń touch używa się do tworzenia nowych, pustych plików. Używamy jej również do aktualizacji znacznika czasu w obecnych plikach i katalogach. Oto, jak możemy stworzyć plik o nazwie foo.txt w folderze Demo. 

rm

rm to po prostu Remove. Usuwa pliki lub katalogi. Nie dzieje się to jednak domyślnie - musimy użyć rm -r * wewnątrz danego katalogu, a potem każdy plik i katalog, który znajduje się wewnątrz, zostanie usunięty. Usuńmy teraz poprzednio stworzony plik foo.txt.

rmdir

rmdir to po rozwinięciu remove directory. Wykorzystuje się to do usuwania pustych katalogów z systemu plików. Usuńmy folder PythonFiles, który przed chwilą stworzyliśmy. 

Zwróćcie uwagę, że ../ symbolizuje katalog nadrzędny.


Przeglądanie plików

Jest to kolejny aspekt Shell, który jest zresztą bardzo przydatny. Mamy tutaj polecenia, które pomagają nam przeglądać zawartość pliku, tak aby nimi potem manipulować. 

cat

cat to concatenate (czyli łączyć). Czyta dany plik i wypisuje jego zawartość. Może wczytać się w wiele plików, stąd nazwa. Mamy trochę plików tekstowych w naszym pliku Demo - wykorzystajmy cat do podejrzenia ich zawartości. 

Aby przejrzeć więcej, niż jeden plik, napisz obie nazwy plików po poleceniu cat:

$ cat Names.txt fruits.txt


less

Polecenie cat wyświetla zawartość pliku na ekranie. Jest to OK, kiedy zawartości jest mniej, ale staje się problemem w miarę, jak się zwiększa. Jak widać w poniższym przykładzie, polecenie wyrzuca wszystko w terminalu w bardzo szybki sposób - to dlatego nie możemy zrozumieć, o co w danym pliku chodzi. Na szczęście, mamy polecenie o nazwie less, która pozwala nam na przeglądanie zawartości, ekran po ekranie. 

$ less babynames.txt


Mamy kilka opcji, których możemy użyć z less:

Spacebar: aby przejść do następnego ekranu

b: aby przejść do poprzedniego ekranu

/: aby wyszukać konkretnego słowa

q: wyjście

man

Polecenie man wyświetla strony z instrukcjami, które zostały domyślnie wbudowane w wiele dystrybucji Linuksa i większość systemów opartych UNIX. 

man bash: wyświetla całą instrukcję

man <keyword>. np. man ls daje nam informacje o poleceniu ls. 


Potoki i filtry

Operator pipe, czyli |, to sposób na wysłanie wyjścia jednego polecenia jako input innego. 

command1 | command2


Kiedy polecenie wysyła output do potoku, to jego odbiorcą jest kolejne polecenie, a nie plik. Poniższy rysunek pokazuje, jak polecenie wc liczy zawartość pliku, który został wyświetlony przez polecenie cat

wc to w pewien sposób polecenie, które bierze dane wejściowe i przekształca je. Takie polecenia określamy mianem filtrów i są one umieszczane po potoku Unixa. 

Filtry

Spójrzmy teraz na pewne popularne polecenia filtrów. Będziemy pracować z plikiem, który się nazywa babynames.txt. Zawiera on około 1000 imion dla dzieci oraz plik fruits.txt, który zawiera nazwy kilku owoców. 

  • grep lub global regular expression print wyszukuje linijek z danym ciągiem znaków lub szuka wzorców w danym strumieniu danych wejściowych. Następujące polecenie przeczyta wszystkie pliki i wyrzuci wszystkie linijki, które zawierają imię ‘Tom’.


Jest to jednak duża lista i nie będziemy się mogli w tych wszystkich danych połapać. Sprawdźmy, jak pomoże nam tutaj operator pipe. 

  • wc to skrót od word count. Czyta listę plików i generuje jedną lub więcej statystyk: liczba nowych linijek, liczba słów, liczba bajtów. Wprowadźmy wynik powyższego polecenia grep do wc, aby policzyć, ile linijek zawiera słowo ‘Tom’. 


  • filtry sort sortują linijki alfabetycznie lub numerycznie


Polecenie cat najpierw czyta zawartość pliku fruits.txt a potem ją sortuje. 

  • uniq oznacza unique i daje nam liczbę unikalnych linijek w strumieniu danych wejściowych


Ważne jest aby zdawać sobie sprawę, że unique nie może wykrywać zduplikowanych pozycji, chyba że do siebie przylegają. A więc przesortowaliśmy ten plik przed użyciem polecenia sort. Zamiast uniq można też użyć sort - u.  

Potoki przydają się przy wykonywaniu skomplikowanych zadań, ponieważ kilka poleceń można właśnie złożyć w potok. 


Podsumowanie

Narzędzia wiersza poleceń mogą stanowić świetny dodatek do naszego zestawu narzędzi. Może się to wszystko wydawać na początku onieśmielające, ale jak tylko załapiecie, o co chodzi, to korzyści pojawią się same.  

Rozpocznij dyskusję

Lubisz dzielić się wiedzą i chcesz zostać autorem?

Podziel się wiedzą z 160 tysiącami naszych czytelników

Dowiedz się więcej