Dydaktyka:
FeedbackTo jest stara wersja strony!
Terminal i konsola oznaczały sprzęt (fizyczne urządzenie) które pozwalało na interakcję z komputerem.
https://thevaluable.dev/guide-terminal-shell-console/
Współcześnie 'terminal' i 'konsola' oznacza tekstowy interfejs (systemu operacyjnego).
https://en.wikipedia.org/wiki/Unix-like
POSIX - standard (organizacji IEEE i The Open Group) określający interfejs systemu operacyjnego, stworzony dla ujednolicenia uniksopodobnych systemów
Linuks, dystrybucja Linuksa, GNU/Linux…
Powłoka (ang. shell) to program który udostępnia tekstowy interfejs do systemu operacyjnego.
Jest wiele implementacji powłoki.
Patrz zestawienie: https://en.wikipedia.org/wiki/Comparison_of_command_shells i [1]
Dla uniksopodobnych systemów dostępne są co najmniej: sh
, csh
, tcsh
, ksh
, bash
, zsh
, dash
, busybox
, fish
W Windowsie są dostępne powłoki cmd.exe
i PowerShell
.
Powłoka czyta komendy z wejścia i wykonuje je. Komenda może być nazwą programu za którą podane są argumenty (oddzielone spacjami)
Do używania systemu operacyjnego, poza powłoką, potrzebny jest zestaw programów powalający wykonać podstawowe zadania. Takie programy często nazywa się narzędziami (ang. utilities).
Tak jak jest wiele implementacji powłoki, tak jest wiele implementacji podstawowych narzędzi.
POSIX standaryzuje zarówno powłokę jak i kluczowe narzędzia.
Używając graficznego interfejsu do dostępu do powłoki używa się emulatora terminala.
Istnieje sporo programów emulujących terminal (dłuższa lista na Wikipedii). Poniżej wybór istotniejszych:
Poza graficznym interfejsem Linux typowo startuje program umożliwiający logowanie do powłoki w konsolach wirtualnych.
Do przełączania między konsolami służy skrót Ctrl + Alt + Fn, gdzie Fn to klawisz funkcyjny (F1÷F12).
Zwykle konsole 1÷6 są tekstowe, konsola 7 to pierwsza konsola graficzna, a część systemów pokazuje komunikaty diagnostyczne na konsoli 12.
Standardowy sposób pracy zdalnej na systemach uniksopodobnych to logowanie się do powłoki używając klienta SSH (Secure SHell).
Podstawowa komenda do logowania do powłoki na zdalnym systemie to:
ssh użytkownik@host
gdzie użytkownik
to nazwa użytkownika, a host
to nazwa bądź adres docelowego urządzenia.
Na przykład, gdyby użytkownik piotr
chciał zalogować się na komputer o nazwie polluks.cs.put.poznan.pl
, musiałby wpisać:
ssh piotr@polluks.cs.put.poznan.pl
.
W tej chwili wszystkie istotne systemy operacyjne (włącznie z Windows) mają domyślnie zainstalowaną komendę ssh
.
SSH (Secure SHell) szyfruje cały ruch. Poprzednik SSH – telnet – wszystko, włącznie z hasłami, wysłał czystym tekstem.
Przy uwierzytelnianiu hasłem, klient musi wysłać do serwera swoje hasło.
Krytyczne dla bezpieczeństwa jest sprawdzenie przez klienta że faktycznie
komunikuje się z docelowym serwerem, a nie z podszywającym się pod niego
serwerem który, odpowiednio spreparowany, pozwoli wykraść hasło
(gotowe narzędzie)
i/lub przechwycić sesję.
Do sprawdzania tożsamości serwera używa się kryptografii asymetrycznej:
serwer ma swój (tajny) klucz prywatny i na początku każdego połączenia wysyła
klientowi klucz publiczny, a klient weryfikuje czy klucz wysłany przez serwer
odpowiadający posiadanemu kluczowi prywatnemu.
Dlatego klient SSH przy pierwszym połączeniu do każdego serwera prosi
użytkownika o sprawdzenie klucza, następnie dopisuje go do bazy kluczy
(w OpenSSH trzymanej w pliku ~/.ssh/known_hosts
)
i sprawdza przy każdym kolejnym połączeniu.
Zadanie 1 Uruchom emulator terminala. Wykonaj komendy date
i echo $SHELL
.
Zadanie 2 Wykonaj komendę sleep 1h
i przerwij ją skrótem Ctrl + c.
Zadanie 3 Przełącz się na drugą konsolę wirtualną i zaloguj się na niej. Wykonaj pwgen
. Wróć do konsoli graficznej.
Zadanie 4 Używając SSH i swojego konta zaloguj się na polluks.cs.put.poznan.pl
.
Większość programów wyświetli pomoc jeśli w po nazwie programu jako argument poda się --help
. Niektóre programy obsługują też -h
.
Zadanie 5 Wyświetl pomoc dla komend cat
i bat
dodając przełącznik 'help'. (NB: bat
nie jest domyślnie instalowany w wielu dystrybucjach.)
Razem z programem zwykle dostarczane są strony podręcznika systemowego (and. system MANual). Strony wyświetla się komendą man nazwa_strony
. Do wyjścia z pomocy użyj klawisza q
.
Zadanie 6 Wyświetl stronę podręcznika dla komendy timeout
.
Strony podręcznika podzielone są na sekcje. Wykonaj man man
żeby zobaczyć listę i opis sekcji.
Nazwy muszą być unikalne w ramach sekcji, ale mogę się powtarzać w różnych sekcjach.
Komenda whatis nazwa_strony
pokaże listę sekcji w których znajduje się strona o nazwie nazwa_strony
i wyświetli tytuł każdej z takich stron.
Zadanie 7 Wyświetl listę wszystkich stron o tytule time
.
Żeby wyświetlić stronę z wybranej sekcji, należy wpisać man sekcja nazwa_strony
.
Zadanie 8 Samo man
jest opisane w dwóch sekcjach. Wyświetl obie strony o nazwie man
. Co zwiera każda z tych stron?
Do ostatecznego wyświetlania stron program man
używa innego programy – less
. Szczegóły less
będą omawiane później.
Aby wyszukać tekst w less
należy wpisać /
, szukany tekst i wcisnąć Enter. aby przejść do kolejnego / poprzedniego wystąpienia należy wpisać odpowiednio n
/ N
. Z kolei g
przeniesie na początek dokumentu, a h
wyświetli pomoc dla nawigacji w less
.
Zadanie 9 Wyświetl stronę podręcznika dla bash
i wyszukaj w niej printf
. Potem znajdź na tej stronie dokumentację komendy dirs
.
Do przeszukiwania podręcznika można użyć polecenia apropos czego
które wyszuka w tytułach i nazwach stron.
Poza man
jest też dostępny system dokumentacji info
. Żeby wyświetlić dokumenty Info, wpisz info nazwa
. Dla niektórych programów dokument Info jest bardziej szczegółowy niż strona podręcznika.
W podręcznikach, dokumentacjach i przykładach komend tradycyjnie używa się kwadratowych i wąsatych nawiasów do oznaczania, odpowiedio, elementów opcjonalnych i wyboru jednej z możliwości.
Czasami losowe nawiasy są używane jako lista możliwości: jest tak jeśli fragmenty zawartości są oddzielone przez |
. Ostre nawiasy są czasami używane do nazywania elementów.
wait [pid]
oznacza że zarówno wait
jak i wait 1234
są poprawnymi komendami (o ile 1234 jest pidem)grep --color[=WHEN]
oznacza że zarówno grep --color
jak i grep --color=always
są poprawnetar {c|x}
oznacza że trzeba wpisać albo tar c
albo tar x
Wielokropek zaznacza że część komendy może się powtarzać, np. cat [FILE]...
wskazuje że cat
może przyjmować wiele nazw plików jako argumenty.
Wiele komend przyjmuje opcje (zwane też przełącznikami) w liście argumentów.
Opcje są zwykle zdefiniowane w krótkiej formie -o
gdzie o
to pojedynczy znak bądź długiej --opcja
gdzie opcja
to nazwa opcji.
Nieliczne programy używają tylko długich opcji poprzedzonych pojedynczym -
(np. find
, convert
, ffmpeg
).
Krótkie opcje można łączyć w następujący sposób: ls -color
jest równoważne ls -c -o -l -o -r
(i różne od ls --color
)
Opcje mogą wymagać argumentu bądź mogą opcjonalnie przyjmować argument.
Poza nazwą programu, opcjami i słowami kluczowymi (jeśli są), każdy inny tekst to wypełniacz (placeholder) do zastąpienia konkretną wartością.
Dla przykładu, we wzorcu komendy find -amin N
i find -anewer FILE
wyrażenia N
i FILE
są wypełniaczami: N
musi być zastąpione liczbą minut, a FILE
nazwą pliku.
Zadanie 10 Wykonaj:
man zip
i przejrzyj SYNOPSIS,
findmnt --help
i wyjaśnij składnię
taskset -h
i wyjaśnij składnię
Praktycznie każda powłoka wspiera autouzupełnianie. Wywołuje się je wciskając klawisz TAB.
Autouzupełnianie ma dokończyć wpisywanie słowa na którego końcu stoi kursor i robi to, o ile jest tylko jedno możliwe pasujące dokończenie.
Jeśli autouzupełnianie zna wiele możliwości, to nic nie wpisze. Po ponownym wciśnięciu klawisza TAB większość mechanizmów autouzupełniania wyświetli wszystkie możliwości.
Implementacja autouzupełniania różni się w zależności od powłoki. Wiele powłok wspiera skrypty pomocnicze zależne od kontekstu.
Zadanie 11 Wpisz gun
i naciśnij TAB. Wpisz ba
i naciśnij TAB dwukrotnie.
Zadanie 12 Wpisz man --
i naciśnij TAB dwukrotnie. Wpisz man fs
i naciśnij TAB dwukrotnie.
W systemach uniksopodobnych wszystkie pliki zorganizowane są w strukturę drzewiastą, tzn. każde dwa pliki mają wspólny katalog najwyższego poziomu nazywany po angielsku root directory.
Root directory ma ścieżkę /
.
Inne systemy plików (e.g., pozostałe partitycje, płyty CD, pendrive'y), są montowane w wybranym katalogu w istniejącej hierarchii (zamiast tworzyć nową).
Ścieżka jest łańcuchem nazw oddzielonych przez /
.
.
oznacza bieżący katalog, a ..
katalog nadrzędny.
Ścieżka zaczynająca się od /
nazywana jest bezwzględną. Każda inna ścieżka nazywana jest względną.
Uniksopodobne systemy operacyjne dla każdego programu pamiętają katalog roboczy (working directory). Ścieżki względne rozwiązywane są zaczynając od katalogu roboczego.
Każdy użytkownik ma swój katalog domowy. Powłoka (i niektóre inne programy) zastępuje każde słowo ~
przez ścieżkę bieżącego użytkownika. ~user
określa katalog domowy użytkownika user
, więc ~/x/a.txt
jest plikiem wewnątrz katalogu domowego bieżącego użytkownika, a ~x/b.txt
znajduje się w katalogu domowym użytkownika x
.
Plecenie ls [katalog]
wyświetla listę plików w katalogu katalog
.
Bez podania argumentów ls
wyświetli bieżący katalog.
Domyślnie ls
nie wyświetla ukrytych plików. Przełącznik -a
i --all
zmieniają to zachowanie.
Przełącznik -l
/ --list
wyświetla szczegółową listę plików zawierającą m. inn. dla każdego pliku jego właściciela, rozmiar i datę modyfikacji.
Zadanie 13 Wyświetl pliki w /usr/share/zoneinfo/
i ../../../../../bin
.
Zadanie 14 Wyświetl wszystkie pliki w swoim katalogu domowym.
Zadanie 15 Przetestuj następujące przełączniki komendy ls
: -A
-d
-s
-h
-t
-1
Poza ls
do wyświetlania plików dostępne są standardowe komendy dir
i vdir
.
Powłoka często jest konfigurowana tak by ls
używał kolorów, oraz by ll
było rozumiane jako ls -l
, a la
jako ls -l -a
.
Program tree
wyświetla rekurencyjnie zawartość katalogu w postaci drzewa.
Aby wyświetlić katalog roboczy można użyć polecenia pwd
(print working directory).
Zadanie 16 Sprawdź w jakim katalogu znajdujesz się po zalogowaniu do systemu.
Aby zmienić katalog roboczy można użyć komendy cd [cel]
(change directory).
Bez podania celu cd
przejdzie do katalogu domowego.
Jeśli jako cel poda się -
, katalog roboczy zostanie zmieniony na poprzednio używany
Zadanie 17 Wejdź do katalogu .config
(w twoim katalogu domowym) i wyświetl w nim pliki.
Zadanie 18 Przejdź do /var/log
. Co tam jest przechowywane?
Zadanie 19 Wróć tam gdzie byłeś wcześniej używając cd -
Aby zmienić katalog i zapamiętać poprzedni można użyć komendy pushd cel
.
pushd cel
umieszcza poprzedni katalog na stosie katalogów. Stos katalogów może być wyświetlony komendą dirs
.
Aby wrócić do zapamiętanego katalogu, można wykonać komendę popd
(usuwającą katalog ze stosu i wchodzącą do niego) lub pushd
(zamieniającą bieżący katalog z katalogiem na stosie).
pushd
i popd
przyjmują argumenty +n
/-n
wybierające n-ty katalog od szczytu / dna stosu.
W informatyce wykorzystuje się wyrażenia opisujące oczekiwany wynik, do których
następnie mogą być dopasowane dane.
Przykładowo linie, które zaczynają się od słowa, po których następuje znak
równości można zwykle zapisać wyrażeniem regularnym ^\w+=
.
(Takiego wyrażenia można użyć zarówno do wybrania pasujących linii z pliku jak
i sprawdzenia czy podana linia pasuje.)
Istnieje wiele pomysłów jak mają wyglądać i działać takie wyrażenia.
W powłoce najczęściej wykorzystuje się
wildcardy
i wyrażenia regularne.
Składnia i implementacja zarówno wildcardów jak i wyrażeń regularnych różni się
między aplikacjami / językami programowania.
W powłoce używa się składni opisanej m. inn. w podręczniku systemowym:
man 7 glob
,
man 7 regex
Przetwarzając tekst wpisany przez użytkownika powłoka próbuje zastąpić nazwami pasujących plików każde słowo zawierające znaki *
, ?
lub wyrażenia w kwadratowych nawiasach […]
. Każde słowo zawierający takie znaki jest nazywane globem.
*
rozwija się do dowolnego tekstu
?
rozwija się do dowolnego znaku
[ace]
rozwija się do a
, c
, lub e
[f-h]
do f
, g
, lub h
Jeżeli istnieje co najmniej jeden plik pasujący do globa, to powłoka zastępuje glob wszystkimi pasującymi nazwami plików. Jeżeli żaden plik nie pasuje, to glob pozostaje niezmieniony.
Zadanie 20 Przejdź do katalogu /usr/bin/
. Wypisz pliki kończące się na cat
.
Zadanie 21 Wypisz pliki z katalogu /usr/bin/
kończące się na cat
będąc w swoim katalogu domowym.
Zadanie 22 Wypisz pliki znajdujące się w /usr/bin/
i mające dwuznakową nazwę.
Zadanie 23 Wypisz zawartość /usr/share/zoneinfo/
i podkatalogów jedną komendą.
Zadanie 24 Wypisz pliki o nazwie UTC
znajdujące się w dowolnym podkatalogu /usr/share/zoneinfo/
.
Zadanie 25 Wypisz pliki o nazwie zaczynające się od L
znajdujące się w dowolnym podkatalogu /usr/share/zoneinfo/
.
Zadanie 26 Wypisz pliki o nazwie zaczynające się od F
lub H
znajdujące się w dowolnym podkatalogu /usr/share/zoneinfo/
. Użyj jednego globa.
Zadanie 27 Przejdź do katalogu /usr/bin
i wykonaj ls*
. Co się stało?