Gdy uczymy się programowania często kryzysowym momentem jest punkt dotarcia do nauczenia się obsługi terminala. Czarne okienko lini poleceń musi pojawić się w trakcie przygody z programowaniem niezależnie od tego czy interesuje was front-end, back-end czy testowanie (QA). Nie ma znaczenia w jakim języku programujecie – ten moment prędzej czy później nastąpi. Gwarantuję jednak, że podstawowe komendy Linux nie są straszne!
Na blogu do tej pory terminal przewija się w kursie Pythona czy jest niezbędny do obsługi Gita.
Chwila pojawienia się terminala w procesie nauki bywa najtrudniejszym momentem, mimo, że obsługa terminala sama w sobie trudna nie jest. Po prostu wymaga pożegnania się na chwilę z wizualnym interfejsem (GUI) na rzecz czarnego, mniej przyjemnego okienka 😉
Spis treści
- Co to jest terminal?
- Otwarcie terminala
- Polecenia systemu plików
- pwd – Wyświetlenie ścieżki do katalogu bieżącego
- ls – Wyświetlenie listy zawartości folderu
- cd – Poruszanie się po katalogach
- man – wyświetlenie pomocy
- mkdir – tworzenie katalogu
- rmdir – usunięcie katalogu
- touch – tworzenie pliku
- cat – łącznie plików
- cp – skopiowanie pliku lub katalogu
- mv – przeniesienie pliku lub katalogu
- rm – usunięcie pliku lub katalogu
- Procesy
- Narzędzia pomocnicze
- Potoki
- Vim – podstawowy edytor Linux
- Zadania
Co to jest linia poleceń / terminal?
Terminal to program, który otwiera okno pozwalające na komunikację z powłoką (ang. shell) – zwaną bash’em. Powłoka z kolei pobiera polecenia z klawiatury i przekazuje je systemowi operacyjnemu do wykonania jako instrukcje.
Zanim pojawił się graficzny interfejs, był to jedyny sposób obsługi komputerów przez użytkownika i nieodłączny element systemów operacyjnych UNIX.
Żeby uzupełnić tę opowieść trzeba wspomnieć, że UNIX jako system operacyjny powstał pod koniec lat 60. Dzisiaj od systemu UNIX pochodzą Linux i Mac.
Stąd nic dziwnego, że z linią poleceń zwykle bardziej zaprzyjaźnieni są użytkownicy systemów Linux czy osoby programujące na Mac’ach. Użytkownicy Windowsa do niedawna mieli do wyboru wiersz poleceń CMD oraz Powershell. Obecnie, od wersji Windows 10, mogą poczuć się jak użytkownicy unixowi – wystarczy wyszukać bash/ubuntu zainstalowany w systemie 😉
Za każdym razem, gdy usłyszcie zdanie „otwórz terminal, konsolę, czy linię poleceń”, będziecie wiedzieć, co autor ma na myśli. Tak samo, jeżeli w ogłoszeniu dodatkowym atutem jest znajomość systemu Linux. Najprawdopodobniej pracodawca nie ma na myśli zainstalowanego Ubuntu i korzystania wyłącznie z przeglądarki, a właśnie polecenia – podstawowe komendy Linux / Unix.
Najważniejsze polecenia systemu UNIX
Nie sądzę, byście kiedykolwiek musieli całkowicie zrezygnować z GUI (trybu wizualnego) do obsługi komputera, ale znajomość poleceń konsoli potrafi znacznie przyspieszyć pracę programisty (i nie tylko programisty).
Otwórz terminal
Zacznijmy od uruchomienia linii poleceń na komputerze
Terminal na Linux / MacOs
Wyszukaj na swoim komputrze aplikację: terminal
*.
* Mac: może mieć domyślnie ustawiony terminal w wysokim kontraście na białym tyle. Nie jest to zbyt wygodne, można łatwo zmienić te ustawienia w lewym górnym rogu:
Preferencje -> Ustawienia -> Profile -> Wybierz profil kolorów i zatwierdź klikając „Domyślne” na dole panelu bocznego
Inną opcją, którą używam w pracy i bardzo polecam jest pobranie iTerm2.
* Linux: ma podobną aplikację, której nie używałam, ale wg opisu działa analogicznie do iTerm2 – Guake.
iTerm i Guake to programy, które znacznie uprzyjemniają pracę z terminalem, pozwalają na wiele terminali w jednym oknie (split view), szybkie przeskakiwanie między projektami etc, nie naciskam jednak byście rezygnowali z domyślnego terminala, bo jest wystarczający na start. Po prostu przydatna ciekawostka 😉
Terminal na Windows 10
Jeżeli jesteś użytkownikiem Windowsa 10 – znajdź program bash
lub ubuntu
, gdyby nie zainstalował się domyślnie można go pobrać z dostępnego na komputerze Microsoft Store jako „Ubuntu”.
Po uruchomieniu windowsowego Bash/Ubuntu znajdujemy się w osobnym katalogu, gdzie jest zainstalowany nasz specjalny Linux. Komendy w terminalu na Windows 10 działają tak jak na oryginalnym systemie UNIX, przy czym – jeśli chcemy mieć dostęp do swoich plików np. do pulpitu czy dokumentów należy przejść do swojego dysku. Mój komputer ma dwa dyski – C i D, więc do dysku C przejdę: cd /mnt/c
, a do dysku D: cd /mnt/d
. Poleceniem ls
zobaczysz wszystkie katalogi i pliki w głównym folderze dysku.
Terminal na Windows inny niż 10
Na starszych Windowsach można pokusić się o instalację maszyny wirtualnej z Linuxem. Jednak na nasze podstawowe potrzeby wystarczy dostęp do dowolnego terminala online (chociaż nie wszystkie komendy będą obsługiwane). Dobrym rozwiązaniem pośrednim będzie pobranie emulatora terminala na Windows np. Cywin.
Jeżeli wszystko gotowe możemy przejść do podstawowych komend Linux!
Będę używała określenia komendy Linux, a nie komendy UNIX czy systemów pochodzących od UNIX (UNIX-opochodnych?), bo jednak przypuszczam, że ten post będzie kierowany głównie do użytkowników wszelkich dystrybucji Linuxa, a w mniejszej części do pozostałych systemów. Cały czas mowa jest o komendach terminala 😉
Polecenia systemu plików
System plików to miejsce trwałego przechowywania danych w systemie UNIX. Każda bezpośrednia ścieżka do pliku wygląda podobnie:
np.
Intucyjnie jest to dla nas zrozumiałe. Na moim pulpicie znajduje się katalog Pictures zawierający obrazek sea.png.
Jednak zapis ten nie jest przypadkowy. Wynika z faktu, że system plików ma strukturę hierarchiczną, a początkiem jest zawsze katalog główny zwany root
i oznaczany symbolem: /
.
1. pwd
– pokaż ścieżkę do katalogu bieżącego
Polecenie pwd
(Print Working Directory) wyświetla aktualną ścieżkę do katalogu – folderu, w którym własnie jesteśmy.
$ pwd
~/rita/
2. ls
– wylistuj zawartość katalogu
Jedna z najczęściej używanych komend systemu Linux, ls
(List) wyświetla całą zawartość folderu (pliki i foldery), w którym się znajdujemy.
$ ls
Desktop Documents Downloads Pictures Videos
Wzorce uogólniające
W folderze, który zawiera wiele plików i podfolderów może być trudno nam znaleźć intresujące informacje. Wówczas przydadzą się wzorce uogólniające np. *, ?, []
*
– zastępuje dowolny ciąg znaków
?
– oznacza dowolny jeden znak
[]
– zastępuje jeden znak, ale sposród znaków podanych w nawiasie
Załóżmy, że przeszłam do folderu Pictures, gdzie mam bardzo wiele obrazków zapisanych pod różnymi nazwami np. image01, image1, image2, img1, img2, img3, picture1, picture2 itp.
Załóżmy, że chcę znaleźć tylko te pliki, których nazwa zaczyna się na img. Stąd połączę img z gwiazdką:
$ ls img*
img1 img2 img3
Mogę też wyszukać obrazki, które zaczynają się dwoma literami im a kończą cyfrą 1:
$ ls im*1
image01 image1 img1
albo wszystkie, które są zakończone cyfrą 1 (czyli zaczynają się dowolnym ciągiem znaków i występuje 1 na końcu:
$ ls *1
image01 image1 img1 picture1
Możemy też wyszukać takie pliki, w których nazwa to image, a kończą się dowolnym, jednym znakiem:
$ ls image?
image1 image2
To samo uzyskamy zadając zbiór cyfr w nawiasie – [12]:
$ ls image[12]
image1 image2
Wzorców uogólniających jest znacznie więcej, ale te trzy podstawowe wystarczą nam na start.
Pliki i katalogi ukryte
Bywa tak, że folder zawiera pliki i podkatalogi, które w trybie wizualnym są ukryte.
Nazwy plików ukrytych często zaczynają się od kropki. Jeśli używamy wzorca *
to taka ukryta zawartość się nie pojawi, ale uzywając ls .*
możemy wyszukać pliki ukryte. Co jeśli jednak ukryty folder czy plik ma zupełnie inną nazwę? Wtedy warto użyć komendy ls
z przełącznikiem np. z opcją -a.
Komendy:
ls -a
ls -la
Wyświetlają także ukryte pliki i katalogi.
3. cd
– zmiana katalogu
Za pomocą cd
(Change Directory) zmieniamy miejsce / katalog w którym się znajdujemy.
Z katalogu rita chcę przejść na pulpit:
$ cd Desktop
$ pwd
~/rita/Desktop
$ cd ..
$ pwd
~/rita/
Za pomocą cd ..
cofniemy się do katalogu poprzedniego.
Ponadto możemy podać całą ścieżkę do folderu, do którego chcemy wskoczyć. Nie musimy nawet pamiętać pełnych nazw. Wystarczy, że wpiszemy 2-3 pierwsze litery z nazwy i klikniemy klawisz Tab, a terminal sam podpowie jakie mamy dostępne foldery w tej lokalizacji.
Np. na pulpcie mam podfolder From
$ cd Desktop/Form
$ pwd
~/rita/Desktop/Form
$ cd ..
$ pwd
~/rita/Desktop
4. man
– pokaż pomoc
Poleceniem man
(manual) wyświetlimy pomoc dla danej komendy i czasem przykład użycia. Np. man cd
wyświetli opis – jak używać komendy cd, jaki ma opcje. Użyj q
, żeby wyjść z trybu czytania pomocy.
$ man ls
LS(1) User Commands LS(1)
NAME
ls - list directory contents
DESCRIPTION
List information about the FILEs (the current directory by default).
...
5. mkdir
– tworzenie katalogu
Czas stworzyć nowy folder z komendą mkdir
(Make Directory).
$ mkdir new_folder
$ ls
Desktop Documents Downloads new_folder Pictures Videos
6. rmdir
– usuwanie katalogu
Usuwa wybrany folder z komendą rmdir
(Remove Directory).
$ rmdir new_folder
$ ls
Desktop Documents Downloads Pictures Videos
Za pomocą rmdir
można usunąć wiele katalogów, podając je jeden po drugim oddzielone spacją.
Jeżeli usuwany katalog jest niepusty konsola może zgłaszać błąd. Jeżeli jesteśmy absolutnie pewni, że wiemy, które katalogi usuwamy (niezależnie od zawartości) to możemy użyć opcji --ignore-fail-on-non-empty
, która wyciszy komunikat o folderach zawierających pliki i usunie je w całości.
7. touch
– tworzenie pliku
Po folderach czas na utworzenie nowego pustego pliku.
$ touch new_file.txt
$ ls
Desktop Documents Downloads new_file.txt Pictures Videos
Touch aktualizuje datę ostatniego otwarcia pliku.
8. cat
– łączenie plików
Innym sposobem utworzenia pliku może być wykorzystanie polecenia cat
(Concatenate). Komenda cat
służy przede wszystkim do konkatenacji (łączenia) plików, ale może być również wykorzystana do wyświetlenia plików czy stworzenia nowego pliku.
Najczęściej programu cat
używa się w ten sposób:
$ cat plik1.txt plik2.txt
Powyższy przykład wyświetli na ekranie połączone dwa pliki.
Możemy wynik tego działania zapisać do nowego pliku:
$ cat plik1.txt plik2.txt > plik3.txt
Komenda $ cat > sample.txt
pozwala na bezpośrednie wypełnienie pliku z konsoli. Możemy napisać dowolny ciąg znaków, a następnie zapisać zmiany i wyjść za pomocą (w zależności od systemu) Ctrl+D / Ctrl+C / Cmd + C.
$ cat > sample1.txt
...
$ ls
Desktop Documents Downloads new_file.txt Pictures sample1.txt Videos
Znak >
oznacza przeadresowanie standardowego wyjścia. Prościej mówiąc, jeśli naszym urządzeniem standardowego wyjścia jest monitor. Napisane zdanie zostałoby tylko wypisane na ekranie. Przekierwując wyjście do pliku – tworzymy nowy plik i zapisujemy w nim to, co byłoby tylko wyświetlone przez cat.
Dlatego też, jeżeli chcemy utowrzyć czysty plik, możemu zupełnie pominąć polecenie cat
i utworzyć nowy, pusty plik w ten sposób:
$ > sample2.txt
$ ls
Desktop Documents Downloads new_file.txt Pictures sample1.txt sample2.txt Videos
9. cp
– skopiuj
Do kopiowania plików słóży polecenie cp
(Copy). Możemy utworzyć kopię pliku w tym samym folderze pod nową nazwą
$ ls
Desktop Documents Downloads Pictures sample.txt Videos
$ cp sample.txt new_sample.txt
$ ls
Desktop Documents Downloads new_sample.txt Pictures sample.txt Videos
Możemy też utworzyć kopię pliku pod tą samą nazwą, ale w podkatalogu:
$ cp sample.txt Pictures
Polecenie skopiuje plik sample do folderu Pictures pod nazwą sample.txt
Możemy też uworzyć kopię pliku, pod nową nazwą, ale w podkatalogu:
$ cp sample.txt Pictures/new_sample.txt
Polecenie skopiuje plik sample do folderu Pictures pod nazwą new_sample.txt
Linux cp
z opcją -r
pozwala również kopiować całe foldery:
$ cp -r Pictures New_Pictures
10. mv
– przenieś
Polecenie mv
(Move) służy to przeniesienia pliku do innego folderu.
$ mv sample.txt Documents
Można za jego pomocą również zmienić nazwę pliku:
$ mv sample.txt new_file.txt
11. rm
– usuń
Kiedy kończymy pracę z plikiem i chcemy go usunąć wystarczy użyć komendy rm
(Remove):
$ rm sample.txt
Z opcją -r
usuniemy także katalogi – tak samo jak rmdir
.
Procesy
Każdy program, który działa na komputerze nazywany jest procesem. Na pewno macie programy, które startują wraz z uruchomieniem komputera – antywirus, program do aktualizacji, skype czy slack – są to przykłady procesów uruchamianych ze startem, ale jest też sporo, o których nie macie pojęcia a są konieczne do działania systemu.
Każdy proces w systemie ma swój identyfikator, za pomocą, którego można go jednoznacznie wskazać, taki numer nazywa się PID – process IDentifier.
Spotkaliście się kiedyś z sytuacją, że uruchominy program nie dało się w żaden sposób zamknąć – nie reagował na klikanie, prawy przycisk myszy czy skróty klawiaturowe? Za pomocą PID można proces znaleźć i skutecznie zabić – zakończyć jego pracę.
12. ps
– pokaż procesy
Polecenie ps
(Process Status) wyświetla listę procesów dla aktualnej powłoki:
$ ps
PID TTY TIME CMD
4 tty1 00:00:00 bash
45 tty1 00:00:00 ps
ps
– wyświetliło tylko podstawowe informacje o prcesach powłoki – pid, terminal, czas aktywności oraz nazwę procesu. Możemy otrzymać pełne informacje o procesie aktualnej powłoki za pomocą ps -f
(full):
$ ps -f
UID PID PPID C STIME TTY TIME CMD
rita 4 3 0 14:21 tty1 00:00:00 -bash
rita 116 4 0 14:38 tty1 00:00:00 ps -f
Aby wyświetlić wszystkie procesy możemy użyć polecenia ps -e
(every) lub ps -A
(all) – można spotkać oba użycia, zwracają to samo.
$ ps -e
PID TTY TIME CMD
1 ? 00:00:00 init
3 tty1 00:00:00 init
4 tty1 00:00:00 bash
202 tty1 00:00:00 /Applications/GoogleChrome.app
228 tty1 00:00:00 ps
Możemy łączyć opcje np -ef
:
$ ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 14:21 ? 00:00:00 /init ro
root 3 1 0 14:21 tty1 00:00:00 /init ro
rita 4 3 0 14:21 tty1 00:00:00 -bash
rita 202 3 0 14:25 tty1 00:00:00 /Applications/GoogleChrome.app
rita 218 4 0 14:49 tty1 00:00:00 ps -ef
13. kill
– zakończ proces
Dowolny proces możemy zakończyć za pomocą polecenia kill
podając jako argument PID procesu, który chcemy usnuąć
$ kill 202
Tym poleceniem wysłałam sygnał – tutaj zakończenia do procesu 317 – u mnie przeglądarki. Może się jednak zdarzyć, że proces nie zostanie zakończony, gdyż czeka na inny proces np. zakończenie zapisu, lub po prostu mamy problem z „zawieszonym” programem i chcemy go raz, a skutecznie zakończyć.
W takim wypadku możemy przesłać opcję -9
– sygnał bezwarunkowego zakończenia procesu.
$ kill -9 202
Narzędzia pomocnicze
Unix udostępnia nam wiele komend i programów pomocniczych, które przyspieszają pracę – przeszukiwanie katalogów czy dostęp do plików.
14. locate
– zlokalizuj
Metoda locate
, która często jest najprostrzą i najszybszą metodą do znalezienia lokalizacji pliku lub folderu o podanej nazwie. Wielkość liter ma znaczenie!
$ locate Downloads
~/rita/Desktop/Downloads
możemy też zmusić locate do policzenia (count) liczby trafień:
$ locate -c Downloads
1
Niestety metoda ta, chociaż jest bardzo szybka, ma też wadę – nie odnosi się bezpośrednio do drzewa systemu plików, a korzysta z pewnego rodzaju referencji (bazy) plików. Może się, więc zdarzyć, że metoda znajdzie plik, który został już usunięty (a jego referencja jeszcze nie) lub nie znajdzie pliku, który jeszcze nie pojawił się w bazie (wymaga uruchomienia sudo updatedb
).
15. find
– znajdź
Bardziej popularna metoda do wyszukiwania plików i folderów to find
. Przeszukuje drzewo katalogów, aby znaleźć pliki i foldery spełniające warunek.
Wylistuj pliki w folderze i pofoldery
Bez parametrów polecenie wyświetli listę wszystkich plików w bieżącym katalogu, a także podkatalogi w bieżącym katalogu.
$ find
.
./aaa.txt
./pod_folder
./pod_folder/abc.rb
./pod_folder/test.rb
./wow.html
./wow.rb
.
– kropka na początku ścieżki oznacza „w bieżącym folderze – folderze, w którym jestem”
Szukanie danego folderu lub ścieżki
Poniższe polecenie wyszuka wszystkie pliki w katalogu pod_folder w bieżącym katalogu.
$ find ./pod_folder
./pod_folder
./pod_folder/abc.rb
./pod_folder/test.rb
Wyszukanie za pomocą wzorca
Używając przełącznika -name
możemy wyszukiwać pliki po nazwie. Pamiętacie, że wzorzec *
– oznacza wybierz wszystko?
Możemy te informacje połączyć i wyszukać wszystkie pliki ruby znajdujące się w naszym folderze i jego podfolderach:
$ find -name '*.rb'
./pod_folder/abc.rb
./pod_folder/test.rb
./wow.rb
Wyszukanie przez zaprzeczenie
Może się zdarzyć tak, że chcemy wyszukać wszystkie pliki, które nie spełniają pewnego warunku np. nie mają w nazwie jakiegoś słowa, albo chcemy odsiać pliki o pewnym rozszerzeniu np. w folderze obrazy wyświetlić wszystkie pliki, które nie mają rozszerzenia .jpg, gdyż prawdopodobnie zostały tam zapisane przypadkiem. Tu z pomocą przyjdzie opcja not
.
Poniższy przykład wyświetli wszystkie pliki i podfoldery w katalogu, które nie są plikami ruby:
$ find not -name '*.rb'
./aaa.txt
./pod_folder
./wow.html
Wyszukiwanie tylko plików lub folderów
Czasami możemy chcieć znaleźć tylko pliki to zadanej nazwie lub tylko foldery. Do tego służy przełącznik -type
(f – file / d -directory).
W naszym folderze znajduje się zarówno plik xyz, jak i podfolder o takiej samej nazwie:
$ find -name 'xyz*'
./xyz.txt
./xyz
$ find -type f -name 'xyz*'
./xyz.txt
$ find -type d -name 'xyz*'
./xyz
16. grep
– dopasuj do wzoru
Program grep
( Global Regular Expression Print) – służył początkowo wyszukiwaniu wzorców w pliku i był podstawowym programem systemu UNIX.
Polecenie grep
przegląda aktualny katalog w poszukiwaniu plików spełniających warunek – zawierających wzorzec w zawartości i pasujące do nazwy pliku
grep 'wzorzec_tekstu' nazwa_pliku
np.
$ grep 'hello' sample.txt
– przeszuka plik sample.txt czy zawiera słowo hello.
$ grep 'hello' sum*
Powyższe polecenie przeszuka wszystkie pliki, których nazwy zaczynają się na „sum” (gwiazdka dopasowuje dowolny ciąg znaków) – np. summary.txt, summer.pdf, summit.doc i wyświetli na ekranie tylko te linie, które zawierają tekst „hello”. Jeżeli plik summary.txt zawierałby zdanie „hello world!” to zostałoby ono wyświetlone na ekranie.
Wzorzec (u nas 'hello’) jest podawany jako wyrażenie regularne, które pozwala na dopasowanie jednego lub więcej wyrazów / ciągów znaków, służą do tego znaki lub wyrażenia specjalne np.
.
– kropka zastępuje dowolny 1 znak tekstu[abc]
– oznacza wstawienie dowolnego znaku spośród podanych – a,b, lub c[a-z]
– oznacza dowolny znak z zakresu a do z[^]
– zaprzeczenie np. [^aA] – oznacza dowolny znak nie będący a lub A, natomiast [^a-z] oznacza dowolny znak różny od a do z^
– niestety tutaj mała zmyłka – sam znak ^ oznacza początek linii$
– oznacza koniec linii
Wszystko wygląda w porządku, ale co jeśli chcemy wyszukać tekst na podstawie znaku, który jest znakiem specjalnym?
Wystarczy ten znak poprzedzić symbolem backslash \
np. \* oznacza gwiazdkę, a nie wzorzec: dopasuj wszystko.
Opcje – polecenie grep
Grep przyjmuje też wiele przydatnych opcji np:
-i
– wzorzec NIEuwzględnia wielkość liter
-n
– dla każdego pliku zostanie też wyświetlony numer linii, w której został znaleziony wzorzec
-l
– wyświeli tylko nazwy plików, gdzie został znaleziony wzorzec
-v
– zaprzeczenie wzorca – wyświetli wszystkie linie, które NIE zawierają wzorca
-w
– wyszukuje nie fragment tekstu, a cały wyraz pasujący do wzorca
Przykłady:
$ grep '^[0-9]' sam*
– szuka w plikach sam* linii zaczynających się od cyfry
$ grep '[eE]$' sam*
– szuka w plikach sam* linii kończących się na e lub E
$ grep '\$' Pictures/*
– szuka w plikach podkatalogu Pictures linii zawierających znak dolara
$ grep -nwv 'hello' sam*
– wyświetli numer linii plików sam*, które nie zawierają w środku wyrazu 'hello’
17. head
i tail
– pokaż linie od początku / końca
Dwa programy pozwalające wyświetlić tylko poczatek (head
) lub koniec *tail
) pliku. Domyślnie wyświetlają po 10 pierwszych lub ostatnich linii tekstu. Za pomocą opcji -n
– gdzie za n podstawiamy dowolną liczbę, możemy dowolnie zmienić wartość wyświetlanych linii.
W pliku pan_tadeusz.txt – mamy zapisany pierwszy rozdział Pana Tadeusza możemy łatwo wyświetlic pierwsze 20:
$ head -20 pan_tadeusz.txt
i ostatnie 15 linii tekstu:
$ tail -15 pan_tadeusz.txt
Można też skorzystać z wzorców uogólniających:
$ head -12 tekst[12].txt
Powyższe polecenie wyświetli z plików o nazwie tekst1.txt lub tekst2.txt pierwsze 12 linii.
18. clear
– wyczyść terminal
Kiedy na naszym ekranie zrobił się już niezły bałagan, można szybko wyczyścić okienko terminala wpisując polecenie clear
.
19. history
– pokaż historię komend
Aby cofnąć się do poprzedniej komendy wystarczy nacisnąć strzałkę w górę w terminalu, możeny tak cofnać się kilka, kilkanaście poleceń. Jeśli jednak, chcemy sprawdzić historię wpisywanych komend przyda nam się polecenie history
, które wypisze na ekranie historię użytych komend.
20. exit
– zamknij terminal
Komenda exit
zamyka terminal lub otwartą kartę.
Kilka słów o standardowym wejściu / wyjściu
Każdy proces domyślnie korzysta ze standrdowego wejścia/wyjścia – wejściem jest klawiatura terminala, czyli to czym wprowadzamy komendy i dane, natomiast wyjściem – ekran terminala, na którym dane są wyświetlane.
Przeadresowanie standardowego wejścia następuje przez przekierowanie wyniku wykonanego polecenia do pliku zamiast na ekran komputera.
polecenie < plik
– przeadresowanie standardowego wejścia = pobranie danych wejściowych z innego źródła niż klawiatura np. pobranie z parametrów z pliku dla komendy
polecenie > plik
– przeadresowanie standardowego wyjścia – wynik polecenia zostanie wysłany do pliku (zostanie utworzony nowy lub istniejący plik o tej nazwie zostanie nadpisany)
jeżeli nie chcemy stracić zawartości pliku to warto skorzystać z
polecenie >> plik
– przeadresowanie standardowego wejścia, wynik polecenia zostaje wysłany do pliku i dopisany na końcu
$ history > history.txt
Powyższe polecenie zapisze nam historię poleceń do pliku.
Wyświetl 5 pierwszych poleceń z pliku history.txt i przeadresuj do nowego pliku np. history5.txt.
Potoki
Przeadresowanie wejścia / wyjścia możemy wykorzystać do tworzenia potoków. W ten sposób, aby otrzymać interesujący nas wynik angażujemy kilka róznych procesów. Każdy kolejny proces w potoku bierze dane wejściowe z poprzedniego procesu (przeadresowane wyjście).
Zamiast wyjście polecenia history
przeadresować do pliku użyjmy potoku do wyświetlenia pierwszych 5 komend:
$ history | head -5
Możemy też znaleźć wszystkie użyte do tej pory polecenia zawierające ls
:
$ history | grep ls
i ostatecznie wyświetlić tylko pierwsze 10 takich poleceń:
$ history | grep ls | head
możemy też ten wynik zapisać do pliku:
$ history | grep ls | head > history.txt
a jeśli nie chcemy tracić (nadpisać) dotychczasowej zawartości to skorzystać z >>
.
Analogicznie do powyższego, do pliku history.txt dopisz 15 ostatnio użytych komend find
.
Za pomocą polecenia ps
znajdź na liście procesów linie zawierające nazwy twojej przeglądarki (o ile masz ją uruchomioną).
Edytor vi / vim
Co prawda poznaliśmy już podstawowe komendy Linux, warto wspomnieć, że terminal posiada wbudowany edytor – Vi. Vi oraz jego bardziej popularny klon Vim występuje we wszystkich odmianach systemów opartych na UNIXie i od samego początku – czyli lat 70, charakteryzuje się jednolitością implementacji niezależnie od maszyny, na której jest uruchamiany. Oznacza to, że spotkamy go zarówno otwierając terminal Linux, łącząc się z serwerem po ssh, jak i będzie domyślnie dostępny w terminalu Mac i za każdym razem obsługuje się go tak samo. Dzięki temu, Vim jest powszechnie używany przez administratorów, zaawansowanych użytkowników i też wielu programistów.
Uruchomienie
Vim uruchamiamy poleceniem vi
lub vim
, jednak zdecydowanie wygodniej jest otworzyć tryb edycji podając vi nazwa_pliku
. Jeżeli plik nie istnieje, to zostanie automatycznie utworzony.
$ vi new_file.txt
Vim obsługujemy całkowicie z klawiatury. Możemy na razie zapomnieć o myszce.
Zaraz po uruchomieniu jesteśmy w trybie poleceń, co dla niektórych może być trochę kłopotliwe. Vim działa w dwóch trybach – tryb wstawiania (edycji) oraz tryb komend (wpisywania poleceń).
Aby z trybu poleceń przejść do trybu edycji – pisania należy nacisnąć na klawiaturze i
(inset) lub a
(append). Polecenia w edytorze Vim nie wymagają zatwierdzenia Enterem, więc po wpisaniu i
możemy natychmiast zacząć wpisywać dowolne zdanie.
Powrót z trybu edycji do trybu komend następuje przez naciśnięcie klawisza Esc.
Przykładowe polecenia dostępne w Vimie w trybie poleceń:
- a – pisanie za miejscem postawienia kursora
- i – wpisywanie tekstu przed kursorem
- A – dopisanie na końcu aktualnej linii
- I – wdopisanie na początku aktualnej linii
- o – dodanie nowej linii poniżej aktualnej (to samo co postawienie kursora na końcu linii i dodanie znaku enter w trybie edycji)
- O – dodanie nowej linii powyżej aktualnej (to samo co postawienie kursora na początku lini i dodanie entera)
- v – zaznaczenie linii tekstu (v oraz poruszanie się strzałkami ←, →)
- u – anulowanie ostatniej zmiany
- R – zastępowanie tekstu
- s – zastąpienie znaku wskazanego przez kursor
- S – zastąpienie aktualnej linii
- c – zmiana zaznaczonego tekstu
- C – zmiana do końca linii
- . – powtórzenie polecenia
- gg – powrót do pierwszej linii
- / – wyszukiewanie miejsca wystąpienia ciągu znaków w tekście
Przetestuj je wszystkie!
(po każdorazowym wykonaniu znowu jesteś w trybie edycji – kliknij Esc, by znowu być w trybie komend)
Jak wyjść z vi/vim ?
Pytanie może wydać się absurdalne, ale nie jest bezpodstawne. W końcu „wychodzenie z vim’a” doczekało się wielu memów:
Z edytora Vim można wyjść na wiele różnych sposobów. Po pierwsze, jeśli mnie posłuchaliście i otworzyślicie Vim za pomocą vi / vim nazwa_pliku
to wystarczy w trybie poleceń wpisać z klawiatury ZZ
– wykona zapis i wyjście.
Ouh, nie działa?
Pewnie mnie nie posłuchaliście i otworzyliście go od razu vim
. W takim razie najpierw musicie podać nazwę do zapisu – w trybie poleceń dwukropek + w czyli :w nazwa_pliku
a następnie :q
– pozwoli na opuszczenie edytora.
Skąd to zamieszanie z wychodzeniem z vi? No cóż, jeszcze przed chwilą, gdybyście przypadkiem dostali się w sam środek vim pewnie też mielibyście niemałą zagwostkę. Co więcej sposobów na zapis i wyjście jest więcej niż wyżej wymienione:
- :w – zapisz plik
- :w nazwa – zapisz plik pod nową nazwą (utwórz nowy lub kopię)
- :w! – wymuś zapis pliku (np. plików tylko do odczytu)
- :wq – zapisz i wyjdź z pliku
- :q – wyjdź o ile nie dokonano zmian w pliku od ostatniego zapisu
- :q! – wymuś wyjście bez zapisywania zmian w pliku
- :x – zapisz i wyjdź (bez zapisania przy braku zmian)
- :x! – zapisz (wymuś zapis) i wyjdź
- ZZ – wyjście z edytora z zapisaniem pliku
W razie jakiś wątpliwości zawsze można sprawdzić:
- :help – pomoc programu
To tylko przykłady poleceń vim. Więcej poznacie np tutaj:
– Vim – interactive – interaktywny tutorial
– Vim Adventures – interaktywna gra za pomocą poleceń Vim
Terminal UNIX – ćwiczenia
Jeśli nie macie jeszcze dosyć zapraszam na zadania. Śmiało korzystajcie z całego tego wpisu, polecenia man
oraz Internetu! Na początek najprostrze komendy Linux, które z łatwością sobie przypomnicie:
Rozgrzewka
- Wyświetl listę wszystkich plików z rozszerzeniem png
- Sprawdź czy posiadasz na dysku pliki 3 literowe składające się z dowolnych liter, ale nie cyfr(!)
- Wylistuj pliki, które zawierają conajmniej jedną wielką literę w nazwie i jedną cyfrę
Zadania – polecenia Linux:
- Utwórz katalog „Zadania” na pulpicie. Utwórz następnie katalog „Zadanie-1” w katalogu „Zadania”. Utwórz strukturę katalogów zagnieżdżonych kat1/kat2/kat3 w aktualnym katalogu. Podpowiedź – sprawdź manual dla mkdir, zwróć uwagę na przełącznik
-p
. Jednym poleceniem usuń całe drzewo katalogów - Utwórz w katalogu „Zadania” 4 pliki .txt – plik1, plik2, plik3, plik4 oraz 4 dowolne pliki o rozszerzeniu .py (wszystkie pliki mogą być puste). Następnie przejdź do katalogu „Zadanie 1” i skopiuj do niego wszystkie pliki, które mają rozszerzenie .py. Spróbuj jak najsprytniej przekopiować cały katalog „Zadania” wraz z zawartością do nowego katalogu o nazwie „Zadania-kopia”. Sprawdź jak działa przełącznik
-i
. Przeczytaj jak działaman cp!
oraz przełącznik-v
. - Usuń wszystkie pliki z katalogu „Zadania-kopia/Zadanie-1”. Pusty katalog „Zadanie-1” nazwij „Zadanie-2”. W katalogu „Zadanie-2” zapisz do pliku historia.txt wszystkie polecenia jakie do tej pory były użyte. Zmień jego nazwę poleceniem
mv
. Następnie wróć do katalogu „Zadania-kopia”. Przenieś pliki mające w nazwie cyfry parzyste do katalogu „Zadania-kopia/Zadanie-2. - Ostanie 12 wykonanych poleceń dopisz do pliku historia.txt. Skopiuj i przenieś historia.txt do katalogu „Zadania/Zadanie-1” pod nazwą historia.TXT
- Wróć na pulpit. Z katalogu pulpitu wyszukaj pliki z rozszerzeniem.TXT.
- Za pomocą polecenia
locate
wyszukaj wszystkie ścieżki, które zawierają słowo net. Wykorzystajgrep -n
dowiedz się ile jest takich linii. Sprawdź w manualu jak działa poleceniewc
. - Wyświetl listę własnych procesów. Porównaj wynik poleceń
ps -a
,ps -x
orazps -ax
. Sprawdź co robią przełączniki-l
oraz-u
. Wytłumacz działanieps -aux
. Otwórz nowe okno terminala i uruchom dowolną komendę. Wrócć do pierwszego okna. Sprawdź jak nazywa się termina, w którym jesteś. Pomoże Ci polecenie:tty
. Wyświetl hierarchię procesów za pomocą poleceniapstree
. - Spróbuj zakończyć działanie procesu przeglądarki na podstawie jej PID
- Przećwicz działanie potoków z poleceniem
cat
. Listę procesówps
zapisz do pliku 1.txt w katalogu „Zadania”. Następnie utwórz plik 2.txt zawierający listę procesów ze szczegółami. Połącz zawartość tych plików jako plik 3.txt. - Z pliku 3.txt przepisz pierwsze 6 lini do pliku 4.txt. Wylistuj wszystkie pliki na pulpicie, zapisz listę do pliku 5.txt, który również będzie w katalogu „Zadania”. Wyświetl 4 ostatnie linie.
- Wyświetl z pliku 5.txt linie zaczynające się od liczby. Wyświetl z pliku 5.txt wszystkie linie nie zawierające cyfr. Wyświetl linie z plików o rozszerzeniu.txt, w których występują linie ze słowem „abc”.
Vim – ćwiczenia:
- Skopiuj fragment Pana Tadeusza (np. 10 linijek) i wklej do nowego pliku.
- Ponumeruj wszystkie linie
- Edytuj linie tak, aby jedno zdanie było w jednej linii.
- Skopiuj trzy pierwsze linie.
- Wklej skopiowane linie 5 razy na końcu pliku.
- Usuń pierwsze 3 linie tekstu.
- Usuń cztery kopie pierwszych linii na końcu pliku (ma pozostać piąta kopia).
- Przejdź na początek pliku.
- Wyszukaj najbliższe wystąpienie słowa „do”.
- Przejdź na koniec pliku.
- Wyszukaj w tył najbliższe wystąpienie znaku „!”
- Zastąpić ten znak znakiem „?”.
- Przejdź do piątej linii tekstu i skasuj drugie i trzecie słowo.
- Zamień w całym tekście wszystkie litery „a” na „#”.
- Cofnij ostatnią operację.
- Zapisz plik na dysku.
- Usuń w całym tekście ewentualne spacje z końców linii.
- Wyjdź z edytora nie zapisując zmian w pliku.
Przydatne linki:
Codecademy – interaktywny tutorial zawierający polecenia unix od podstaw
Learn Enough Command Line to Be Dangerous – napisana z humorem książka przedstawiająca najważniejsze możliwości terminala unix.
Learning shell – podstawowe komendy Linux w książce dostępnej za darmo online
Find command examples 25 praktycznych przykładów użycia komendy find
Sprawdź też:
kurs SQL 60 min
Dajcie znać w komentarzach czy udało się przebrnąć całość? 😉
Jak wam się podoba taka forma wpisów – jeden długi wpis? Czegoś brakuje? Może chcecie też komendy Linux pdf? Mogę przygotować ściągę poleceń w formacie pdf do pobrania.
„Dzisiaj na systemie UNIX bazują Linux i Mac.”
Odważne stwierdzenie. W jaki sposób Linux bazuje na Uniksie?
„Komendy w terminalu na Windows 10 działają tak jak na oryginalnym systemie UNIX”
Nie, nie działają tak samo.
są systemami pochodzącymi historycznie od Unix:
Unix V6 (1975) -> Minix (1987) -> Linux (1991), ale słusznie zmienię słowo bazuje na pochodzą i nie będzie niejasności 🙂
oraz zaznaczyłam na początku, że Linux/Unix (UNIX-opochodny) będę używać zamiennie, by tekst się lepiej czytało, więc tak komendy z tego tutoriala uruchomione w terminalu „Ubuntu” Windows 10 dostarczonym przez MS działają tak samo jak uruchomione na Linuxie i Mac’u 😉
Unix V6 (1975); Minix (1987); Linux (1991)
Znaczenie:
Unix – system operacyjny
Minix – system operacyjny
Linux – jądro systemu operacyjnego
To jest różne oprogramowanie!
Unix został napisany w Bell Labs przez D. Ritchie i K. Thompsona. Minix i Linux nie pochodzą od Uniksa. Minix został napisany przez A. Tanenbaua, natomiast Linuksa napisał L. Torvalds. Różni autorzy pracujący nad swoimi projektami od zera, nikt na nikim nie bazował (może trochę Torvalds, bo uczył się z książki Tanenbaua, ale to naciągane). Linux potocznie rozumiany jest jako jądro + narzędzia GNU, co daje nam system operacyjny GNU/Linux.
Minix i Linux są podobne do Uniksa, ale na nich nie bazują (może po części niektóre narzędzia GNU). Z grubsza poszczególne programy (polecenia) tych systemów robią to samo, ale tylko z grubsza (np. –ignore-fail-on-non-empty zadziała tylko z narzędziami GNU).
UNIXopochodny 😀
historię znam akademicko i nie chodzi w poście o to co z czego się wywodzi w prostej linii, tylko o komendy terminala i o to jak działają 😉
ale te uwagi na pewno kogoś zainteresują i zachęcą do zgłębienia tematu!
https://img.devrant.com/devrant/rant/r_862335_sZHfc.jpg
Jakbyś chciał gościnnie wpaść napisać kilka słów o historii systemu i co jak rozumiesz, zapraszam 😉
@Adam, po co ten ból d**y? 😉 Cel i meritum artukułu jest o czymś zupełnie innym. @flynerd, świetnie napisane, warte polecenia początkującym w pracy z terminalem, brawo!
Brawo! W sedno!
#wreszcie natrafiłem na porządny materiał blogowy. Są opisy, obrazki i ćwiczenia, a na koniec można dodać komentarz. Mi się tu spodobało.
Jeśli ktoś jest zaciekawiony wstępem do Linuxa może sobie przerobić kilka darmowych lekcji na educativo -> https://educativo.pl/linux-od-podstaw-darmowe/
W 1985 roku Workbench był pełnoprawnym okienkowym graficznym i wielozadaniowym systemem operacyjnym a Windows 1.0 był nakładką graficzną na MS-DOS, a w 1987 roku OS/2 Microsoftu stawał się systemem nie nakładką który pozwalał na uruchomienie programów MSDOS. Dopiero w 1990 Windows 3.x dorównał Amigowemu i Jabłkowemu systemowi operacyjnemu – więc proponuję sięgać do informacji zamiast tworzyć historię informatyki
hmm dziwne z jakiegoś powodu się nie załączyła moja odp. Trudno najwyżej zduplikuję 😀
Zgadzam się z Tobą, tak jak system nie może być dziadkiem. Usunęłam to nieszczęsne zdanie, którego jedynym celem miało być pokazanie, że te systemy mają różne korzenie.
Za to zachęcam do kontatku priv jakbyś miał ochotę napisać taką historię informatyki i np. tutaj gościnnie opublikować. W żadnym wypadku ja nie mam zamiaru jej tworzyć 😉
Masz rację, tak jak i system nie może być dziadkiem innego systemu. Miały być to uproszczenia mające pokazać, że współczesne systemy nawet jeśli graficzne UI mają podobne, mają różną historie, a stąd CMD =/= terminal. Usunęłam upraszczające zdanie, które powodowało kontrowersje 🙂 Mam nadzieję, że teraz nie wprowadza w błąd 😉
Za to jakbyś chciał gościnnie napisać bloga o historii informatyki to zapraszam do kontaktu (fanapage/email hello(a)flynerd.pl), chętnie sama przeczytam i wtedy tu podlinkuję, żeby nie było niedomówień 😉
Dzięki za ten artykuł 🙂 Fajne wprowadzenie, dla kogoś kto kiedyś chciał korzystać z Linuxa, ale wybrał Widnowsa bo nie chciało mu się wszystkiego naprawiać przy każdym starcie systemu 🙂 A teraz wrócił do Linuxa, bo wreszcie jest wystarczająco stabilnie 🙂 Dobra robota, doceniam!
Czy udało się stworzyć ten pdf? <3
Dzięki!
Cat nie łączy plików. Z plikami nic się nie dzieje, cat daje output na standardowe wyjście, czyli wyświetla zawartość plików na ekranie.
Dzięki 😉
Bardzo ładnie opisane komendy 🙂
Grzesiek.
Ciekawy materiał,szczególnie dla mnie początkującego w konsoli Ubuntu.
Próbuje skopiować zdjęcia z dużego folderu i podzielić je na mniejsze .Np.Dsc 1273 do 1308 pomijając przy tym inne.Czy da się to zrobić.Bo wypisywać ich czasami ponad setkę trochę mija się z celem.
Dzięki za ten wpis! Jest super na początek przygody z terminalem 🙂
Dziękuję za przekazanie w tak wartościowy wiedzy na temat terminala, używam od kilku lat sporadycznie. Ale lubię, po tej dawce wiedzy jeszcze bardziej!
Serdeczności!
Bardzo, bardzo dziękuję za ten wspaniały materiał.
Jestem nowicjuszem i historia informatyki nie ma (według mnie) w tym przypadku żadnego znaczenia. Liczą się polecenia, których będę używał. A dla mnie omówione zostały one w rewelacyjny sposób.
Serdecznie pozdrawiam
właśnie zacząłem kurs
Twoje polecenia to taka forma w pigułce
baaardzo pomocna
Bardzo dziękuję Ci za ten artykuł! Dużo przydatnych informacji zapisanych w sposób, który rozumiem 🙂 to dla mnie ważne bo dopiero zaczynam swoją przygodę z IT.
Dziękuję za zrobienie tego kursu, przez niego mamy dodatkową robotę w szkole
Bardzo fajny wpis – Bawiłem się wieki temu dystrybucją Linux Mandriva, a na post trafiłem szukając poleceń do komunikacji z serwerem.
sugestia – Rita, włącz daty dodania komentarzy 😉
Bardzo zgrabny i treściwy wpis. Czekam na więcej ! Historia dla historyków . Nie wiele pomoże w obsłudze bieżącej .
Również bym prosił o PDF 🙂
Dzięki nerdóweczko za poświęcony czas dla nas maluczkich.
Idę po twoich śladach i testuję prawdziwość twoich liter.
Polecenie rmdir –ignore-fail-on-not-empty nie działa poprawnie.
Co prawda wycisza komunikaty błędów ale katalogi nie są usuwane.
Pomogło dopiero polecenie rm -r (usuń rekurensywnie/rekurencyjnie).
W poleceniu find z opcją (not) brakuje myślnika, powinno być:
find -not -name nazwa_pliku.
Mój system Mint 19.3
Rozgrzewka zaliczona, fajne zadania.
Czy rozwiązanie można gdzieś opublikować do sprawdzenia tak żeby nie zepsuć żółtodziobom charakteru i ułatwiać pracy ?
Serdecznie pozrawiam 🙂
Świetny materiał napisany i wyjaśniony w prosty i czytelny sposób.
Jestem początkującym programistą a terminal był czymś co wywoływało u mnie ból głowy. Teraz rozumiem już dużo więcej. Dziękuję!
Ściga poleceń w formacie pdf byłaby bardzo przydatna! 🙂
Bardzo fajnie wytłumaczone krok po kroku. Tego szukałem. Dzięki