Materiał, który publikujemy dzisiaj, jest przeznaczony dla tych, którzy chcą opanować wiersz poleceń systemu Linux. Umiejętne korzystanie z tego narzędzia pozwala zaoszczędzić sporo czasu. W szczególności mowa będzie o powłoce Bash oraz 21 przydatnych poleceniach. Porozmawiamy także o tym, jak korzystać z flag poleceń i aliasów Bash, które ułatwiają wprowadzanie długich instrukcji.
→
Terminy
W trakcie nauki pracy w wierszu poleceń systemu Linux możesz natknąć się na wiele pojęć, w których warto się orientować. Niektóre z nich, takie jak „Linux” i „Unix” oraz „powłoka” i „terminal”, czasami są mylone. Porozmawiajmy o tych i innych istotnych terminach.
to popularny system operacyjny, który został opracowany w Bell Labs w latach 70. Jego kod był zamknięty.
to najpopularniejszy system operacyjny typu Unix, używany obecnie na wielu urządzeniach, w tym na komputerach.
(terminal), czyli emulator terminala – to program, który daje dostęp do systemu operacyjnego. Można jednocześnie otworzyć kilka okien terminala.
(shell) to program, który umożliwia wysyłanie poleceń do systemu operacyjnego, napisanych w specjalnym języku.
rozszyfrowuje się jako Bourne Again SHell. To najpopularniejszy język powłoki używany do interakcji z systemem operacyjnym. Ponadto powłoka Bash jest domyślnie używana w macOS.
(Command Line Interface, CLI) to sposób interakcji człowieka z komputerem, w którym użytkownik wprowadza polecenia za pomocą klawiatury, a komputer wykonując te polecenia, wyświetla tekstowe komunikaty dla użytkownika. Głównie CLI jest używane do uzyskiwania świeżych informacji o pewnych bytach, na przykład o plikach, oraz do pracy z plikami. Interfejs wiersza poleceń należy odróżniać od graficznego interfejsu użytkownika (Graphical User Interface, GUI), w którym głównie używana jest mysz. Interfejs wiersza poleceń często nazywany jest po prostu wierszem poleceń.
(skrypt) — to mały program, który zawiera sekwencję poleceń powłoki. Skrypty zapisują do plików, można je wykorzystywać wielokrotnie. Przy pisaniu skryptów można korzystać z zmiennych, konstrukcji warunkowych, pętli, funkcji i innych możliwości.
Teraz, gdy omówiliśmy ważne terminy, chcę zaznaczyć, że będę używał terminów „Bash”, „powłoka” i „wiersz poleceń” wymiennie, a także pojęć „katalog” (directory) i „folder” (folder).
Standardowe , z których będziemy korzystać — to standardowe wejście (standard input, stdin), standardowe wyjście (standard output, stdout) oraz standardowe wyjście błędów (standard error, stderr).
Jeśli w przykładach poleceń, które zostaną podane poniżej, zobaczysz coś w rodzaju my_whatever — oznacza to, że ten fragment należy zastąpić czymś Twoim. Na przykład — nazwą pliku.
Teraz, zanim przystąpimy do omawiania poleceń, którym poświęcony jest ten materiał, spójrzmy na ich listę oraz krótkie opisy.
21 poleceń Bash
▍Uzyskiwanie informacji
man: wyświetla podręcznik użytkownika (pomoc) dla polecenia.pwd: wyświetla informacje o bieżącym katalogu roboczym.ls: wyświetla zawartość katalogu.ps: umożliwia przeglądanie informacji o działających procesach.
▍Manipulacje z systemem plików
cd: zmiana katalogu roboczego.touch: tworzenie pliku.mkdir: tworzenie katalogu.cp: kopiowanie pliku.mv: przenoszenie lub usuwanie pliku.ln: tworzenie linku.
▍Przekierowanie wejścia-wyjścia i potoki
<: przekierowaniestdin.>: przekierowaniestdout.|: przekierowanie wyników wyjścia jednego polecenia jako wejścia dla innego polecenia.
▍Czytanie plików
head: czytanie początku pliku.tail: czytanie końca pliku.cat: czytanie pliku i wyświetlanie jego zawartości na ekranie lub konkatenacja plików.
▍Usuwanie plików, zatrzymywanie procesów
rm: usuwanie pliku.kill: zatrzymywanie procesu.
▍Wyszukiwanie
grep: wyszukiwanie informacji.ag: zaawansowane polecenie do wyszukiwania.
▍Archiwizacja
tar: tworzenie archiwów i praca z nimi.
Porozmawiajmy o tych poleceniach szczegółowiej.
Szczegóły dotyczące poleceń
Na początek zajmijmy się poleceniami, których wyniki są wyświetlane w formie stdout. Zwykle wyniki te pojawiają się w oknie terminala.
▍Uzyskiwanie informacji
man command_name: wyświetla podręcznik dotyczący komendy, czyli — informacje pomocnicze.
pwd: wyświetla ścieżkę do bieżącego katalogu roboczego. Podczas pracy z wierszem poleceń użytkownik często musi dowiedzieć się, gdzie dokładnie znajduje się w systemie.
ls: wyświetla zawartość katalogu. To polecenie również jest używane bardzo często.
ls -a: wyświetla ukryte pliki. Tutaj zastosowano flagę -a poleceń ls. Użycie flag pozwala dostosować zachowanie poleceń.
ls -l: wyświetla szczegółowe informacje o plikach.
Zwróć uwagę, że flagi można łączyć. Na przykład — tak: ls -al.
ps: wyświetlenie działających procesów.
ps -e: wyświetla informacje o wszystkich działających procesach, a nie tylko o tych, które są związane z bieżącą powłoką użytkownika. To polecenie często używa się w takiej formie.
▍Manipulacje z systemem plików
cd my_directory: zmienia katalog roboczy na my_directory. Aby przejść o jeden poziom wyżej w drzewie katalogów, użyj jako my_directory ścieżki względnej ../.
![[w zakładkach] Bash dla początkujących: 21 przydatnych poleceń](/wp-content/uploads/2019/03/91815e5212c9dfec88a76bc2ab37955f.png)
Polecenie cd
touch my_file: tworzy plik my_file w określonej ścieżce.
mkdir my_directory: tworzy folder my_directory w określonej ścieżce.
mv my_file target_directory: przemieszcza plik my_file do folderu target_directory. Przy podawaniu docelowego katalogu należy używać absolutnej ścieżki do niego (a nie konstrukcji takiej jak ../).
Polecenie mv, można też użyć do zmiany nazw plików lub folderów. Na przykład, może to wyglądać tak:
mv my_old_file_name.jpg my_new_file_name.jpg: tworzenie kopii pliku
cp my_source_file target_directorymy_source_file i umieszczenie jej w katalogu target_directory.
ln -s my_source_file my_target_file: tworzy symboliczne odwołanie my_target_file do pliku my_source_file. Jeśli zmienisz odwołanie, zmieni się również plik źródłowy.
Jeśli plik my_source_file zostanie usunięty, to my_target_file zostanie. Flaga -s poleceń ln umożliwia tworzenie odwołań również dla katalogów.
Teraz porozmawiajmy o przekierowywaniu wejścia-wyjścia i potokach.
▍Przekierowanie wejścia-wyjścia i potoki
my_command < my_file: zastępuje deskryptor pliku standardowego wejścia (stdin) plikiem my_file. Może to być użyteczne, jeśli polecenie oczekuje wprowadzenia jakichś danych z klawiatury, a te dane zostały wcześniej zapisane w pliku.
my_command > my_file: przekierowuje wyniki działania polecenia, czyli to, co zazwyczaj trafia do stdout i jest wyświetlane na ekranie, do pliku my_file. Jeśli plik my_file nie istnieje — zostanie utworzony. Jeśli plik istnieje — zostanie nadpisany.
Na przykład, po wykonaniu polecenia ls > my_folder_contents.txt zostanie utworzony plik tekstowy zawierający listę tego, co znajduje się w bieżącym katalogu roboczym.
Jeśli zamiast symbolu > skorzystasz z konstrukcji >>, więc w przypadku istnienia pliku, do którego przekazywane jest wyjście polecenia, ten plik nie zostanie nadpisany. Dane zostaną dodane na końcu tego pliku.
Teraz przyjrzymy się przetwarzaniu danych w potokach.
![[w zakładkach] Bash dla początkujących: 21 przydatnych poleceń](/wp-content/uploads/2019/03/dcc4e500b247cb13adb4d64c36c24f88.png)
To, co generuje jedno polecenie, jest przekazywane jako wejście do drugiego polecenia. Przypomina to podłączenie jednej rury do drugiej.
first_command | second_command: symbol potoku, |, jest używany do przesyłania wyników działania jednego polecenia do drugiego polecenia. To, co polecenie po lewej stronie opisanego konstruktu wysyła do stdout, trafia do stdin polecenia znajdującego się po prawej stronie symbolu potoku.
W systemie Linux przetwarzanie danych w potokach można zorganizować przy użyciu niemal każdego poprawnie skonstruowanego polecenia. Często mówi się, że w Linuxie wszystko to potok.
Za pomocą symbolu potoku można łączyć w łańcuch kilka poleceń. Wygląda to tak:
first_command | second_command | third_command ![[w zakładkach] Bash dla początkujących: 21 przydatnych poleceń](/wp-content/uploads/2019/03/1d94b3f04846ef40c072299877c55b1f.png)
Potok z kilku poleceń można porównać z rurociągiem.
Zauważ, że kiedy polecenie znajdujące się po lewej stronie symbolu |, generuje coś w stdout, to, co ono wygenerowało, natychmiast staje się dostępne dla stdin drugiego polecenia. Oznacza to, że korzystając z potoku, mamy do czynienia z równoległym wykonywaniem poleceń. Czasami może to prowadzić do nieoczekiwanych rezultatów. Szczegóły na ten temat można przeczytać .
Teraz porozmawiajmy o odczytywaniu danych z plików i wyświetlaniu ich na ekranie.
▍Czytanie plików
head my_file: odczytuje linie z początku pliku i wyświetla je na ekranie. Można czytać nie tylko zawartość plików, ale również to, co polecenia generują w stdin, używając tego polecenia jako elementu potoku.
tail my_file: odczytuje linie z końca pliku. To polecenie również można używać w potoku.
![[w zakładkach] Bash dla początkujących: 21 przydatnych poleceń](/wp-content/uploads/2019/03/0dd6e0353a1b5995d4a1228ae2550ad9.png)
Head (głowa) znajduje się z przodu, a tail (ogon) — z tyłu.
Jeśli pracujesz z danymi, korzystając z biblioteki pandas, to polecenia head i tail powinny być ci znane. Jeśli nie — spójrz na powyższy rysunek, a bez trudu je zapamiętasz.
Rozważmy inne sposoby odczytywania plików, porozmawiajmy o poleceniu cat.
Zespół cat które albo wyświetla zawartość pliku na ekranie, albo konkatenowuje kilka plików. Zależy to od tego, ile plików zostało przekazanych temu poleceniu podczas wywołania.
![[w zakładkach] Bash dla początkujących: 21 przydatnych poleceń](/wp-content/uploads/2019/03/708bea2f5d31e1623e9fd80ff5b576af.png)
Polecenie cat
cat my_one_file.txt: kiedy temu poleceniu przekazywany jest jeden plik — wyświetla go w stdout.
Jeśli przekażesz jej dwa pliki lub więcej, zachowuje się inaczej.
cat my_file1.txt my_file2.txt: otrzymując na wejściu kilka plików, ta komenda konkatenizuje ich zawartość i wyświetla to, co powstało w stdout.
Jeśli wynik konkatenacji plików ma być zapisany jako nowy plik, można użyć operatora >:
cat my_file1.txt my_file2.txt > my_new_file.txtTeraz porozmawiajmy o tym, jak usuwać pliki i zatrzymywać procesy.
▍Usuwanie plików, zatrzymywanie procesów
rm my_file: usuwa plik my_file.
rm -r my_folder: usuwa folder my_folder oraz wszystkie zawarte w nim pliki i foldery. Flaga -r wskazuje, że komenda będzie działać w trybie rekurencyjnym.
Aby system nie prosił o potwierdzenie przy każdej operacji usuwania pliku lub folderu, użyj flagi -f.
kill 012345: zatrzymuje wskazany działający proces, dając mu czas na poprawne zakończenie.
kill -9 012345: wymusza zakończenie wskazanego uruchomionego procesu. Flaga typu -s SIGKILL oznacza to samo, co flaga -9.
▍Wyszukiwanie
Aby wyszukiwać dane, można używać różnych komend. W szczególności — grep, ag i ack. Zacznijmy naszą znajomość z tymi komendami od grep. To - sprawdzona w czasie, niezawodna komenda, która, co prawda, jest wolniejsza od innych i nieco mniej wygodna w użyciu.
![[w zakładkach] Bash dla początkujących: 21 przydatnych poleceń](/wp-content/uploads/2019/03/bc02403dbbd0109f0dfd595eccf239c7.png)
Komenda grep
grep my_regex my_file: wykonuje wyszukiwanie my_regex do my_file. Przy znalezieniu dopasowań zwraca dla każdego z nich cały wiersz. Domyślnie my_regex jest interpretowane jako wyrażenie regularne.
grep -i my_regex my_file: wyszukiwanie jest wykonywane bez uwzględnienia wielkości liter.
grep -v my_regex my_file: zwraca wszystkie wiersze, w których nie znajduje się my_regex. Flaga -v oznacza inwersję, przypomina operator NOT, który istnieje w wielu językach programowania.
grep -c my_regex my_file: zwraca informacje o liczbie dopasowań z poszukiwanym wzorem, znalezionych w pliku.
grep -R my_regex my_folder: wykonuje rekurencyjne wyszukiwanie we wszystkich plikach znajdujących się w podanym folderze oraz w folderach zagnieżdżonych w nim.
Teraz porozmawiajmy o komendzie ag. Pojawiła się później, grepjest szybsza, łatwiej się z nią pracuje.
![[w zakładkach] Bash dla początkujących: 21 przydatnych poleceń](/wp-content/uploads/2019/03/f0eeb1d38a1e9c22a8463858753dedb5.png)
Komenda ag
ag my_regex my_file: zwraca informacje o numerach wierszy oraz same wiersze, w których znaleziono dopasowania z my_regex.
ag -i my_regex my_file: wyszukiwanie jest wykonywane bez uwzględnienia wielkości liter.
Zespół ag automatycznie przetwarza plik .gitignore i wyklucza z wyniku to, co znaleziono w folderach lub plikach wymienionych w tym pliku. To jest bardzo wygodne.
ag my_regex my_file -- skip-vcs-ignores: zawartość plików systemów automatycznej kontroli wersji (podobnie jak .gitignore) podczas wyszukiwania nie jest brana pod uwagę.
Ponadto, aby wskazać zespołowi ag , które ścieżki do plików należy wykluczyć z wyszukiwania, można stworzyć plik .agignore.
Na początku tej sekcji wspomnieliśmy o komendzie ack. Komendy ack i ag są bardzo podobne, można powiedzieć, że są wymienne w 99%. Jednak komenda ag działa szybciej, dlatego opisałem właśnie ją.
Teraz porozmawiajmy o pracy z archiwami.
▍Archiwizacja
tar my_source_directory: łączy pliki z folderu my_source_directory w jeden plik tarball. Takie pliki są wygodne do przesyłania komuś dużych zestawów plików.
![[w zakładkach] Bash dla początkujących: 21 przydatnych poleceń](/wp-content/uploads/2019/03/4531ef1d4084af608fcbe91964a6710b.png)
Komenda tar
Pliki tarball tworzone przez tę komendę to pliki z rozszerzeniem .tar (Tape ARchive). To, że w nazwie komendy i w rozszerzeniu nazw plików, które ona tworzy, ukryte jest słowo „tape” (tasma), mówi o tym, jak długo istnieje ta komenda.
tar -cf my_file.tar my_source_directory: tworzy plik tarball o nazwie my_file.tar z zawartością folderu my_source_directory. Flaga -c rozszyfrowuje się jako „create” (tworzenie), a flaga -f jako „file” (plik).
Aby wydobyć pliki znajdujące się w .tar-plik, używa się komendy tar z flagami -x („extract”, wydobycie) i -f („file”, plik).
tar -xf my_file.tar: wydobywa pliki z my_file.tar do bieżącego katalogu roboczego.
Teraz porozmawiajmy o tym, jak kompresować i rozpakowywać .tar-pliki.
tar -cfz my_file.tar.gz my_source_directory: tutaj, z użyciem flagi -z („zip”, algorytm kompresji) wskazano, że do kompresji plików powinien być używany algorytm gzip (GNU zip). Kompresja plików pozwala zaoszczędzić miejsce na dysku podczas przechowywania takich plików. Jeśli pliki mają być np. przesyłane innym użytkownikom, przyspiesza to ich pobieranie.
Rozpakować plik .tar.gz można, dodając flagę -z do komendy wydobycia zawartości .tar-plików, którą omawialiśmy powyżej. Wygląda to tak:
tar -xfz my_file.tar.gz
Należy zauważyć, że komenda tar ma jeszcze wiele przydatnych flag.
Aliasy Bash
Aliasy Bash (nazywane także aliasami lub skrótami) mają na celu tworzenie skróconych nazw komend lub ich sekwencji, których użycie zamiast zwykłych komend przyspiesza pracę. Jeśli masz załóżmy, alias bu, za którym kryje się komenda python setup.py sdist bdist_wheel, to aby wywołać tę komendę, wystarczy skorzystać z tego.aliasu.
Aby stworzyć taki pseudonim, wystarczy dodać następującą komendę do pliku ~/.bash_profile:
alias bu="python setup.py sdist bdist_wheel" Jeśli w twoim systemie nie ma pliku ~/.bash_profile, możesz go stworzyć samodzielnie, używając komendy touch. Po stworzeniu pseudonimu uruchom ponownie terminal, dzięki czemu będziesz mógł korzystać z tego pseudonimu. W tym przypadku wprowadzenie dwóch znaków zastępuje wpisanie ponad trzydziestu znaków komendy, która jest przeznaczona do pakietów Python.
W ~/.bash_profile Można dodawać pseudonimy do wszelkich często używanych komend.
▍Podsumowanie
W tym materiale omówiliśmy 21 popularnych komend Bash i porozmawialiśmy o tworzeniu pseudonimów dla komend. Jeśli interesuje cię ten temat - cykl publikacji poświęcony Bash. można znaleźć wersję pdf tych publikacji. Ponadto, jeśli chcesz opanować Bash, pamiętaj, że tak jak w przypadku nauki każdego innego systemu programowego, praktyka jest kluczowa.
Drodzy Czytelnicy! Jakie komendy, które są przydatne dla początkujących, dodałbyś do tych, które były omówione w tym artykule?
→
Źródło: habr.com
