Różnice między wybraną wersją a wersją aktualną.
Both sides previous revision Poprzednia wersja Nowa wersja | Poprzednia wersja | ||
so:intro [2024/02/20 11:03] jkonczak [Powłoka (shell) i podstawowe narzędzia] |
so:intro [2025/04/07 19:59] (aktualna) jkonczak |
||
---|---|---|---|
Linia 24: | Linia 24: | ||
<html><small></html> | <html><small></html> | ||
- | GNU/Linux | + | Linux, dystrybucja Linuksa, GNU/Linux… |
* [[https://www.gnu.org/gnu/gnu.html|GNU]] to zbiór wolnego oprogramowania, które łącznie tworzy system operacyjny uzupełniony o szeroki wybór oprogramowania użytkowego [[https://www.gnu.org/manual/blurbs.html]] | * [[https://www.gnu.org/gnu/gnu.html|GNU]] to zbiór wolnego oprogramowania, które łącznie tworzy system operacyjny uzupełniony o szeroki wybór oprogramowania użytkowego [[https://www.gnu.org/manual/blurbs.html]] | ||
* jądro GNU, [[https://www.gnu.org/software/hurd/|Hurd]], nie jest jeszcze na zadowalającym poziomie (od 30 lat…) | * jądro GNU, [[https://www.gnu.org/software/hurd/|Hurd]], nie jest jeszcze na zadowalającym poziomie (od 30 lat…) | ||
* więc oprogramowanie GNU jest zwykle uruchamiane na kernelu Linux | * więc oprogramowanie GNU jest zwykle uruchamiane na kernelu Linux | ||
* większość dystrybucji Linuksa zawiera dużą ilość oprogramowania nie będącego częścią GNU (i niekoniecznie będącego wolnym bądź otwartym oprogramowaniem) | * większość dystrybucji Linuksa zawiera dużą ilość oprogramowania nie będącego częścią GNU (i niekoniecznie będącego wolnym bądź otwartym oprogramowaniem) | ||
+ | * kilka dystrybucji Linuksa jest w większości oparte na wolnym i/lub otwartoźródłowym oprogramowaniu spoza projektu GNU i dostępnym na licencjach niezwiązanych z GNU | ||
<html></small></html> | <html></small></html> | ||
Linia 62: | Linia 63: | ||
<html></small></html> | <html></small></html> | ||
- | POSIX standaryzuje zarówno [[https://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html|powłokę]] | + | POSIX standaryzuje zarówno [[https://pubs.opengroup.org/onlinepubs/9799919799/utilities/V3_chap02.html|powłokę]] |
- | jak i kluczowe [[https://pubs.opengroup.org/onlinepubs/9699919799/utilities/contents.html|narzędzia]]. | + | jak i kluczowe [[https://pubs.opengroup.org/onlinepubs/9799919799/utilities/contents.html|narzędzia]]. |
==== Jak dostać się do shella ==== | ==== Jak dostać się do shella ==== | ||
Linia 77: | Linia 78: | ||
* programy dołączane do środowisk graficznych Linuksa: [[https://docs.xfce.org/apps/terminal/start|xfce4-terminal]], [[https://en.wikipedia.org/wiki/GNOME_Terminal|GNOME Terminal]], [[https://konsole.kde.org/|konsole]] | * programy dołączane do środowisk graficznych Linuksa: [[https://docs.xfce.org/apps/terminal/start|xfce4-terminal]], [[https://en.wikipedia.org/wiki/GNOME_Terminal|GNOME Terminal]], [[https://konsole.kde.org/|konsole]] | ||
* MacOS domyślne używa aplikacji [[https://en.wikipedia.org/wiki/Terminal_(macOS)|Terminal]] | * MacOS domyślne używa aplikacji [[https://en.wikipedia.org/wiki/Terminal_(macOS)|Terminal]] | ||
- | * popularne są też wyjeżdżające z góry terminale przywoływane/chowane prostym skrótem klawiszowym:\\ [[https://apps.kde.org/yakuake/|yakuake]] / [[http://guake-project.org/|guake]] / [[https://github.com/lanoxx/tilda|tilda]] | + | * popularne są też wyjeżdżające z góry terminale przywoływane/chowane prostym skrótem klawiszowym:\\ [[https://apps.kde.org/yakuake/|yakuake]] / [[https://guake.github.io/|guake]] / [[https://github.com/lanoxx/tilda|tilda]] |
<html></small></html> | <html></small></html> | ||
Linia 101: | Linia 102: | ||
W tej chwili wszystkie istotne systemy operacyjne (włącznie z Windows) mają domyślnie zainstalowaną komendę ''ssh''. | W tej chwili wszystkie istotne systemy operacyjne (włącznie z Windows) mają domyślnie zainstalowaną komendę ''ssh''. | ||
- | <html><small></html> | + | <small> |
SSH (Secure SHell) szyfruje cały ruch. Poprzednik SSH – telnet – wszystko, włącznie z hasłami, wysłał czystym tekstem. | SSH (Secure SHell) szyfruje cały ruch. Poprzednik SSH – telnet – wszystko, włącznie z hasłami, wysłał czystym tekstem. | ||
- | <html></small></html> | + | 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 | ||
+ | ([[https://docs.ssh-mitm.at/user_guide/authentication.html#id2|gotowe narzędzie]]) | ||
+ | i/lub przechwycić sesję. | ||
+ | \\ | ||
+ | Do sprawdzania tożsamości serwera używa się [[https://pl.wikipedia.org/wiki/Kryptografia_klucza_publicznego|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. | ||
+ | |||
+ | </small> | ||
~~Zadanie.#~~ Uruchom emulator terminala. Wykonaj komendy ''date'' i ''echo $SHELL''. | ~~Zadanie.#~~ Uruchom emulator terminala. Wykonaj komendy ''date'' i ''echo $SHELL''. | ||
Linia 115: | Linia 134: | ||
~~Zadanie.#~~ Używając SSH i swojego konta zaloguj się na ''polluks.cs.put.poznan.pl''. | ~~Zadanie.#~~ Używając SSH i swojego konta zaloguj się na ''polluks.cs.put.poznan.pl''. | ||
+ | === Jak zakończyć pracę z powłoką === | ||
+ | |||
+ | Komenda ''exit'' kończy pracę bieżącej powłoki. \\ | ||
+ | Podobnie działa zasygnalizowanie końca pliku (wciśnięcie //Ctrl//+//d//) w pustej linii. | ||
===== Korzystanie z pomocy ===== | ===== Korzystanie z pomocy ===== | ||
Linia 168: | Linia 191: | ||
Opcje są zwykle zdefiniowane w krótkiej formie ''-o'' gdzie ''o'' to pojedynczy znak bądź długiej ''--opcja'' gdzie ''opcja'' to nazwa opcji. | Opcje są zwykle zdefiniowane w krótkiej formie ''-o'' gdzie ''o'' to pojedynczy znak bądź długiej ''--opcja'' gdzie ''opcja'' to nazwa opcji. | ||
\\ | \\ | ||
- | <html><small></html>Nieliczne programy używają tylko długich opcji poprzedzonych pojedynczym ''-'' (np. ''find'', ''convert'', ''ffmpeg'').<html></small></html> | + | <html><small></html>Nieliczne programy używają tylko długich opcji poprzedzonych pojedynczym ''-'' (np. ''find'', ''magick'', ''ffmpeg'').<html></small></html> |
\\ | \\ | ||
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'') | 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'') | ||
Linia 212: | Linia 235: | ||
==== Wyświetlanie zawartości katalogu ==== | ==== Wyświetlanie zawartości katalogu ==== | ||
- | Plecenie ''**ls [//katalog//]**'' wyświetla listę plików w katalogu ''katalog''. \\ Bez podania argumentów ''ls'' wyświetli bieżący katalog. | + | Polecenie ''**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. | + | Domyślnie ''ls'' nie wyświetla ukrytych plików. Przełącznik **''-a''** zmienia 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. | + | Przełącznik **''-l''** wyświetla szczegółową listę plików zawierającą m. inn. dla każdego pliku jego właściciela, rozmiar i datę modyfikacji. |
~~Zadanie.#~~ Wyświetl pliki w ''/usr/share/zoneinfo/'' i ''../../../../../bin''. | ~~Zadanie.#~~ Wyświetl pliki w ''/usr/share/zoneinfo/'' i ''../../../../../bin''. | ||
Linia 259: | Linia 282: | ||
<html></small></html> | <html></small></html> | ||
+ | |||
+ | ==== Wildcard, regex, … ==== | ||
+ | <small> | ||
+ | |||
+ | 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ę | ||
+ | //[[https://pl.wikipedia.org/wiki/Wieloznacznik|wildcard]]//y | ||
+ | i [[https://en.wikipedia.org/wiki/Regular_expression|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: | ||
+ | ''[[https://man7.org/linux/man-pages/man7/glob.7.html|man 7 glob]]'', | ||
+ | ''[[https://man7.org/linux/man-pages/man7/regex.7.html|man 7 regex]]'' | ||
+ | |||
+ | </small> | ||
==== Dopasowywanie nazw plików ==== | ==== Dopasowywanie nazw plików ==== | ||
- | Przetwarzając tekst wpisany przez użytkownika powłoka próbuje zastąpić każde słowo zawierające znaki **''*''**, **''?''** lub wyrażenia w kwadratowych nawiasach **''[…]''**. Każde słowo zawierający takie znaki jest nazywane [[https://en.wikipedia.org/wiki/Glob_(programming)|glob]]em. | + | 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 [[https://en.wikipedia.org/wiki/Glob_(programming)|glob]]em. |
- | ''*'' rozwija się do dowolnego tekstu , ''?'' rozwija się do dowolnego znaku, ''[ace]'' rozwija się do ''a'', ''c'', lub ''e'', natomiast ''[f-h]'' do ''f'', ''g'', lub ''h''. | + | ''*'' 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. | 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. |