Narzędzia użytkownika

Narzędzia witryny


so:intro

Różnice

Różnice między wybraną wersją a wersją aktualną.

Odnośnik do tego porównania

Both sides previous revision Poprzednia wersja
Nowa wersja
Poprzednia wersja
so:intro [2023/02/27 15:09]
jkonczak [Autouzupełnianie]
so:intro [2026/03/12 01:03] (aktualna)
jkonczak [Dopasowywanie nazw plików]
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 58: Linia 59:
   * Apple w swoich systemach (np. MacOS) dostarcza zmodyfikowane narzędzia z BSD [[https://​opensource.apple.com/​releases/​|[1]]] [[https://​github.com/​apple-oss-distributions/​file_cmds|[2]]] [[https://​github.com/​apple-oss-distributions/​text_cmds|[3]]]   * Apple w swoich systemach (np. MacOS) dostarcza zmodyfikowane narzędzia z BSD [[https://​opensource.apple.com/​releases/​|[1]]] [[https://​github.com/​apple-oss-distributions/​file_cmds|[2]]] [[https://​github.com/​apple-oss-distributions/​text_cmds|[3]]]
   * Minimalistyczne i wbudowane systemy często używają [[https://​www.busybox.net/​downloads/​BusyBox.html|BusyBox]]a   * Minimalistyczne i wbudowane systemy często używają [[https://​www.busybox.net/​downloads/​BusyBox.html|BusyBox]]a
-  * Android używa [[https://​www.landley.net/​toybox/​|toybox]]a [[https://​cs.android.com/​android/​platform/​superproject/​+/​master:​external/​toybox/​toys/​posix/​|[4]]]+  * Android używa [[https://​www.landley.net/​toybox/​|toybox]]a [[https://​cs.android.com/​android/​platform/​superproject/main/+/main:​external/​toybox/​toys/​posix/​|[4]]]
   * Dłuższa lista alternatywnych zestawów jest np. tutaj: [[https://​wiki.archlinux.org/​title/​core_utilities]]   * Dłuższa lista alternatywnych zestawów jest np. tutaj: [[https://​wiki.archlinux.org/​title/​core_utilities]]
 <​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 93: Linia 94:
 Podstawowa komenda do logowania do powłoki na zdalnym systemie to: Podstawowa komenda do logowania do powłoki na zdalnym systemie to:
 \\ \\
-''​ssh //​użytkownik//​@//​host//''​+**''​ssh //​użytkownik//​@//​host//''​**
 \\ \\
 gdzie ''​użytkownik''​ to nazwa użytkownika,​ a ''​host''​ to nazwa bądź adres docelowego urządzenia. 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.put.poznan.pl'',​ musiałby wpisać: \\ ''​ssh piotr@polluks.put.poznan.pl''​.+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''​. 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 [[https://​en.wikipedia.org/​wiki/​End-of-file|końca pliku]] (wciśnięcie //​Ctrl//​+//​d//​) w pustej linii. \\
 +Jeżeli powłoka jest powłoką logowania, to do jej zakończenia można też  użyć komendy ''​logout''​.
 ===== Korzystanie z pomocy ===== ===== Korzystanie z pomocy =====
  
 ==== Podręcznik systemowy i przełącznik '​help'​ ==== ==== Podręcznik systemowy i przełącznik '​help'​ ====
  
-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''​.+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.#​~~ Wyświetl pomoc dla komend ''​cat''​ i ''​bat''​ dodając przełącznik '​help'​. <​html><​small></​html>​(NB:​ ''​bat''​ nie jest domyślnie instalowany w wielu dystrybucjach.)<​html></​small></​html>​ ~~Zadanie.#​~~ Wyświetl pomoc dla komend ''​cat''​ i ''​bat''​ dodając przełącznik '​help'​. <​html><​small></​html>​(NB:​ ''​bat''​ nie jest domyślnie instalowany w wielu dystrybucjach.)<​html></​small></​html>​
  
-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''​. ​+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.#​~~ Wyświetl stronę podręcznika dla komendy ''​timeout''​. ~~Zadanie.#​~~ Wyświetl stronę podręcznika dla komendy ''​timeout''​.
Linia 132: Linia 156:
 Nazwy muszą być unikalne w ramach sekcji, ale mogę się powtarzać w różnych sekcjach. 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.+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.#​~~ Wyświetl listę wszystkich stron o tytule ''​time''​. ~~Zadanie.#​~~ Wyświetl listę wszystkich stron o tytule ''​time''​.
  
-Żeby wyświetlić stronę z wybranej sekcji, należy wpisać ''​man //sekcja// //​nazwa_strony//''​. ​+Żeby wyświetlić stronę z wybranej sekcji, należy wpisać ''​man //sekcja// //​nazwa_strony//​'',​ np. ''​man 2 write''​. ​
  
 ~~Zadanie.#​~~ Samo ''​man''​ jest opisane w dwóch sekcjach. Wyświetl obie strony o nazwie ''​man''​. Co zwiera każda z tych stron? ~~Zadanie.#​~~ 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.\\ 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''​.+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.#​~~ Wyświetl stronę podręcznika dla ''​bash''​ i wyszukaj w niej ''​printf''​. Potem znajdź na tej stronie dokumentację komendy ''​dirs''​. ~~Zadanie.#​~~ Wyświetl stronę podręcznika dla ''​bash''​ i wyszukaj w niej ''​printf''​. Potem znajdź na tej stronie dokumentację komendy ''​dirs''​.
Linia 168: Linia 192:
 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 178: Linia 202:
 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. 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.#​~~ Wykonaj: \\ ''​man zip''​ i przejrzyj SYNOPSIS, \\ ''​more --help''​ i wyjaśnij składnię \\ ''​taskset -h''​ i wyjaśnij składnię ​+~~Zadanie.#​~~ Wykonaj: \\ ''​man zip''​ i przejrzyj SYNOPSIS, \\ ''​findmnt ​--help''​ i wyjaśnij składnię \\ ''​taskset -h''​ i wyjaśnij składnię ​
  
 ==== Autouzupełnianie ==== ==== Autouzupełnianie ====
  
-Praktycznie każda powłoka wspiera autouzupełnianie. Wywołuje się je wciskając klawisz //TAB//.\\+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.\\ 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. 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.
Linia 197: Linia 221:
  
 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 //​[[https://​en.wikipedia.org/​wiki/​Root_directory|root directory]]//​. 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 //​[[https://​en.wikipedia.org/​wiki/​Root_directory|root directory]]//​.
-Root directory ma ścieżkę ''/''​. \\+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ą).  ​ 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 ''/''​. \\ Ścieżka jest łańcuchem nazw oddzielonych przez ''/''​. \\
-''​.''​ oznacza bieżący katalog, a ''​..''​ katalog nadrzędny.+**''​.''​** 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ą. Ścieżka zaczynająca się od ''/''​ nazywana jest bezwzględną. Każda inna ścieżka nazywana jest względną.
Linia 207: Linia 231:
 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. 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 [[https://​en.wikipedia.org/​wiki/​Home_directory|katalog domowy]]. Powłoka (i niektóre inne programy) zastępuje każde słowo ''​~''​ przez ścieżkę bieżącego użytkownika. <​html><​small></​html>''​~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''​.<​html></​small></​html>​+Każdy użytkownik ma swój [[https://​en.wikipedia.org/​wiki/​Home_directory|katalog domowy]]. Powłoka (i niektóre inne programy) zastępuje każde słowo ​**''​~''​** przez ścieżkę bieżącego użytkownika. <​html><​small></​html>''​~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''​.<​html></​small></​html>​
  
  
 ==== 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 236: Linia 260:
 ==== Zmiana katalogu roboczego ==== ==== Zmiana katalogu roboczego ====
  
-Aby wyświetlić katalog roboczy można użyć polecenia ''​pwd''​ (print working directory).+Aby wyświetlić katalog roboczy można użyć polecenia ​**''​pwd''​** (print working directory).
  
 ~~Zadanie.#​~~ Sprawdź w jakim katalogu znajdujesz się po zalogowaniu do systemu. ~~Zadanie.#​~~ Sprawdź w jakim katalogu znajdujesz się po zalogowaniu do systemu.
  
-Aby zmienić katalog roboczy można użyć komendy ''​cd [//​cel//​]''​ (change directory).+Aby zmienić katalog roboczy można użyć komendy ​**''​cd [//​cel//​]''​** (change directory).
 \\ \\
 Bez podania celu ''​cd''​ przejdzie do katalogu domowego. Bez podania celu ''​cd''​ przejdzie do katalogu domowego.
Linia 260: Linia 284:
 <​html></​small></​html>​ <​html></​small></​html>​
  
-==== Dopasowywanie nazw plików ==== +==== Wildcard, regex, … ==== 
- +<​small>​
-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. +
- +
-''​*''​ 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''​. +
- +
-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.#​~~ Przejdź do katalogu ''/​usr/​bin/''​. Wypisz pliki kończące się na ''​cat''​. +
- +
-~~Zadanie.#​~~ Wypisz pliki kończące się na ''​cat''​ będąc w swoim katalogu domowym. +
- +
-~~Zadanie.#​~~ Wypisz pliki znajdujące się w ''/​usr/​bin/''​ i mające dwuznakową nazwę. +
- +
-~~Zadanie.#​~~ Wypisz zawartość ''/​usr/​share/​zoneinfo/''​ i podkatalogów jedną komendą. +
- +
-~~Zadanie.#​~~ Wypisz pliki o nazwie ''​UTC''​ znajdujące się w dowolnym podkatalogu ''/​usr/​share/​zoneinfo/''​. +
- +
-~~Zadanie.#​~~ Wypisz pliki o nazwie zaczynające się od ''​L''​ znajdujące się w dowolnym podkatalogu ''/​usr/​share/​zoneinfo/''​. +
- +
-<​html><​small></​html>​ +
- +
-~~Zadanie.#​~~ 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.#​~~ Przejdź do katalogu ''/​usr/​bin''​ i wykonaj ''​ls*''​. Co się stało? +
- +
-<​html></​small></​html>​ +
- +
- +
-==== Kopiowanie, przenoszenie,​ i usuwanie plików ==== +
- +
-<​html>​<​small>​</​html>​ +
- +
-Do utworzenia pustego pliku możesz użyć ''​touch //​plik//''​. \\ Aby utworzyć plik z zawartością,​ możesz użyć ''​echo //​zawartość//​ > //​plik//''​. \\ Polecenia ''​touch''​ i ''​echo'',​ jak również znaczenie ''>''​ zostaną omówione później. +
- +
-Aby wyświetlić plik, użyj ''​cat //​plik//''​. +
-<​html></​small></​html>​ +
- +
-=== Katalogi ===+
  
-''​mkdir //​dir//''​ tworzy nowy katalog.+W informatyce wykorzystuje się wyrażenia opisujące oczekiwany wynik, do których 
 +następnie mogą być dopasowane dane.
 \\ \\
-<​html><​small><​/html> +Przykładowo ​//liniektóre zaczynają się od słowa, po których ​następuje znak 
-''​mkdir -p //​dir1/​dir2/​dir3//''​ tworzy katalog ''​dir1''​i katalog ''​dir2''​ w ''​dir1'',​ i katalog ''​dir3''​ w ''​dir1/​dir2''​. +równości// można zwykle ​zapisać wyrażeniem regularnym ​''​^\w+=''​.
-Podając przełącznik ''​-p''​ polecenie ''​mkdir''​ nie wyświetla błędu jeśli katalog już istnieje. +
-<​html></​small></​html>​ +
- +
-Do usunięcia pustego katalogu można użyć ''​rmdir //​dir//''​. +
- +
-~~Zadanie.#​~~ Stwórz ​następujące drzewo katalogów: +
-  . +
-  ├── foo +
-  │   ├── baz +
-  │   │   └── bar +
-  │   └── bar +
-  └── foobaz +
-      └── bar +
-  +
-~~Zadanie.#​~~ Usuń katalog ''​foo/baz''​. +
- +
-=== Twarde i symboliczne dowiązania === +
- +
-Wiele wpisów w katalogach może wskazywać na ten sam plik. Nazywa się to [[https://​en.wikipedia.org/​wiki/​Hard_link|twardym dowiązaniem]] (//hard link//). \\ +
-Wpis w katalogu ​może również wskazywać ​na inny wpis w katalogu. Nazywa się to [[https://​en.wikipedia.org/​wiki/​Symbolic_link|dowiązaniem symbolicznym]] (//soft link// / //symbolic link//, ​zwykle ​skracane do //​symlink//​). +
- +
-Wszystkie Linuksowe systemy [[https://​en.wikipedia.org/​wiki/​Comparison_of_file_systems#​File_capabilities|obsługują]] dowiązania twarde do zwykłych plików i symlinki do dowolnych ścieżek (np. pliku lub katalogu). +
- +
-Aby utworzyć twarde łącze, można użyć ​''​ln //​źródło//​ //cel//''​.+
 \\ \\
-Aby utworzyć symlink, ​można użyć ​''​ln -s //​źródło//​ //​cel//''​.+(Takiego wyrażenia ​można użyć ​zarówno do wybrania pasujących linii z pliku jak 
 +i sprawdzenia czy podana linia pasuje.)
  
-~~Zadanie.#​~~ Stwórz plik ''​plik1''​ z zawartością. Stwórz twarde dowiązanie do pliku ''​plik1''​ o nazwie ''​plik2''​. Zmodyfikuj ''​plik2''​. Wyświetl ''​plik1''​.+Istnieje wiele pomysłów jak mają wyglądać i działać takie wyrażenia.
  
-<​html><​small></​html>​ +W powłoce najczęściej wykorzystuje się 
- +//​[[https://​pl.wikipedia.org/​wiki/​Wieloznacznik|wildcard]]//y 
-~~Zadanie.#​~~ Komenda ''​ls''​ może wyświetlić ilość twardych dowiązań. Sprawdź gdzie ta informacja jest wyświetlana. +[[https://en.wikipedia.org/wiki/Regular_expression|wyrażenia regularne]]. \\
- +
-Miejsce na dysku wykorzystywane przez plik wraca do puli wolnej przestrzeni gdy liczba dowiązań spadnie do 0 (wszystkie wpisy w katalogach, które wskazują na plik są usunięte) i plik nie jest już otwarty w żadnym procesie. +
- +
-<​html><​/small><​/html> +
- +
- +
-~~Zadanie.#​~~ Utwórz w swoim katalogu domowym symlink o nazwie ''​TMP''​ wskazujący na ''/​tmp''​. Zmień katalog na ''​TMP''​. Co wypisuje ''​pwd''?​ +
- +
-~~Zadanie.#​~~ Utwórz w swoim katalogu domowym symlink o nazwie ''​loop''​ wskazujący na twój katalog domowy. Wejdź do ''​loop''​. I wejdź jeszcze raz do ''​loop''​. +
- +
-~~Zadanie.#​~~ Utwórz symlink do nieistniejącej ścieżki. Wyświetl zawartość katalogu w którym jest ten symlink. +
- +
-<​html><​small></​html>​ +
- +
-Polecenie ''​readlink [-f] //​cel//''​ rozwiązuje wszystkie symlinki i wyświetla ​[[https://en.wikipedia.org/​wiki/​Canonicalization|kanoniczną]] postać ścieżki. +
- +
-System plików Windows NTFS też obsługuje dowiązania. Tworzenie ich jest możliwe np. poleceniem ​[[https://learn.microsoft.com/en-us/windows-server/​administration/​windows-commands/​mklink|mklink]]+
- +
-<​html></​small></​html>​ +
- +
-=== Kopiowanie i przenoszenie plików === +
- +
-Pliki można kopiować komendą ''​cp''​ i przenosić (bądź zmieniać nazwę) komendą ''​mv''​ (nazwy pochodzą odpowiednio od słów //copy// i //​move//​). +
- +
-Podstawowa składnia to ''​cp/​mv //​źródło//​… //​cel//''​. \\ +
-Można podać wiele plików źródłowych jeżeli cel jest katalogiem. \\ +
-Jeśli cel jest plikiem, to zostanie bez ostrzeżenia nadpisany <​html><​small></​html>​(o ile nie zostanie użyty przełącznik ''​-i''​ bądź ''​-n''​)<​html></​small></​html>​. +
- +
-<​html><​small></​html>​ +
- +
-Domyślnie ''​cp''​ odmówi kopiowania katalogu. Przełącznik ''​-r''​ pozwoli skopiować rekurencyjnie katalog z zawartością. +
- +
-<​html></​small></​html>​+
  
-''​cp''​ kopiując plik tworzy nowy plik z aktualną datą, domyślnymi uprawnieniami itp.+Składnia i implementacja zarówno wildcardów jak i wyrażeń regularnych różni się 
 +między aplikacjami / językami programowania.
 \\ \\
-Aby skopiować rekursywnie,​ zachować daty, uprawnienia i inne, można ​yć przełącznika ​''​-a'' ​(''​--archive''​).+W powłoce ​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]]''​
  
-<​html><​small>​</html>+</small>
  
-Z przełącznikiem ''​-l''​ program ''​cp''​ tworzy twarde dowiązania zamiast kopiować pliki. Można to połączyć z ''​--recursive''​.+==== Dopasowywanie nazw plików ====
  
-<​html><​/small><​/html>+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.
  
-~~Zadanie.#​~~ Skopuj jednym poleceniem pliki ''​/​etc/​os-release'' ​''​/etc/SUSE-brand''​ do bieżącego katalogu.+''​*'' ​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''​
  
-~~Zadanie.#~~ Wykonaj ''​mkdir someDir && for F in plik{1..3}; do echo $RANDOM$RANDOM > someDir/$F; done''​ które stworzy katalog ​ ''​someDir''​ z trzema plikami w środku.+Jeżeli istnieje co najmniej jeden plik pasujący do globa, to powłoka zastępuje glob wszystkimi pasującymi nazwami plikówJeżeli żaden ​plik nie pasuje, to glob pozostaje niezmieniony.
  
-~~Zadanie.#​~~ ​Skopiuj rekurencyjnie ​''​someDir'' ​i zawartość.+~~Zadanie.#​~~ ​Przejdź do katalogu ​''​/​usr/​bin/''​. Wypisz pliki kończące się na ''​cat''​.
  
-~~Zadanie.#​~~ ​Przenieś nowo utworzony katalog ​do środka ​katalogu ''​someDir''​.+~~Zadanie.#​~~ ​Przejdź ​do katalogu ​domowego i stamtąd wypisz pliki z katalogu ''/​usr/​bin/''​ kończące się na ''​cat''​.
  
-~~Zadanie.#​~~ ​Zmień nazwę katalogu ​''​someDir'' ​na inną.+~~Zadanie.#​~~ ​Wypisz pliki znajdujące się ''​/usr/bin/'' ​i mające dwuznakową nazwę.
  
-<​html><​small><​/html>+~~Zadanie.#​~~ Jedną komendą wypisz pliki znajdujące się w katalogu ''​/usr/​share/​zoneinfo/''​ i jego bezpośrednich podkatalogach.
  
-~~Zadanie.#​~~ ​Skopiuj nowo nazwany katalog podając przełączniki ​''​-al''​. Zmień wybrany plik którymkolwiek z katalogów. Treść których plików uległa zmianie? <​html><​small></​html>​ (Wyświetl je ''​cat //nazwa_pliku//'' ​lub wyświetl daty modyfikacji plików z dokładnością do sekundy przez \\ ''​ls -l --time-style=+%H:​%M:​%S …''​ lub ''​tree -D --timefmt=%H:​%M:​%S …''​)<​html></​small></​html>​+~~Zadanie.#​~~ ​Wypisz pliki o nazwie ​''​UTC'' ​znajdujące się dowolnym podkatalogu ​''/​usr/share/zoneinfo/''​.
  
-<​html></​small></​html>​ +~~Zadanie.#~~ Wypisz ​pliki o nazwie zaczynające się od ''​L'' ​znajdujące się w dowolnym podkatalogu ​''/​usr/share/zoneinfo/''​.
- +
-=== Kopiowanie plików do/z maszyny zdalnej === +
- +
-Za pomocą SSH można kopiować plikiJeśli ktoś ma dostęp do SSH na zdalnej maszynie, to może kopiować ​pliki komendą ''​scp''​.\\ +
-''​scp''​ rozumie ''//​nazwa//''​ jako ścieżkę do lokalnego pliku i ''//​użytkownik//@//​host//://​nazwa//''​ jako ścieżkę do pliku na zdalnej maszynie. Zdalne względne ścieżki są rozwiązywane względem katalogu domowego.\\ +
-''​scp''​ przyjmuje przełącznik ''​-r'' ​do rekursywnego kopiowania katalogów.+
  
 <​html><​small></​html>​ <​html><​small></​html>​
  
-MS Windows ma domyślnie komendę ''​scp''​, ale zwykle wygodniej jest korzystać z [[https://en.wikipedia.org/wiki/Comparison_of_FTP_client_software#​Protocol_support|menadżerów plików]] wspierających SSH.+~~Zadanie.#​~~ Wypisz pliki o nazwie zaczynające się od ''​F''​ lub ''​H'' ​ znajdujące się w dowolnym podkatalogu ​''/​usr/share/zoneinfo/''​. Użyj jednego globa.
  
-<​html></​small></​html>​ +~~Zadanie.#​~~ ​Przejdź ​do katalogu ''/​usr/bin'' ​i wykonaj ​''​ls*''​. ​Co się stało?
- +
-Większość serwerów SSH wspiera też protokół SFTP, pozwalający na wygodniejsze kopiowanie plików.\\ +
-''​sftp //​użytkownik//​@//​host//''​ uruchamia linię poleceń ''​sftp''​. Działają w niej ''​ls''​ i ''​cd''​ do nawigowania po zdalnych plikach oraz ''​get''​ i ''​put''​ do przenoszenia plików. ''​help''​ pokaże wszystkie wspierane komendy. +
- +
-~~Zadanie.#​~~ ​Stwórz plik w katalogu ''/​tmp''​ swojego komputera. Skopiuj go do katalogu domowego użytkownika ''​student''​ na innym komputerze. +
- +
-~~Zadanie.#​~~ Skopiuj ten plik do katalogu ''/​tmp''​ innego komputera. +
- +
-~~Zadanie.#​~~ Skopiuj ten plik do katalogu ''​/tmp'' ​innego komputera używając ​''​sftp''​. +
- +
-<​html><​small></​html>​ +
-=== Rsync === +
- +
-Program ''​[[https://​en.wikipedia.org/​wiki/​Rsync|rsync]]''​ jest powszechnie używany do kopiowania plików i katalogów. Wydajnie porównuje pliki źródłowe z docelowymi i kopiuje tylko różnice. Może kopiować dane do/z zdalnych urządzeń, a także może kompresować dane przesyłane przez sieć dla zwiększenia przepustowości. ''​rsync''​ jest też powszechnie używany do tworzenia kopii zapasowych.+
  
 <​html></​small></​html>​ <​html></​small></​html>​
- 
-=== Usuwanie plików === 
- 
-Program usuwający pliki nazywa się ''​rm''​ (or remove). 
- 
-''​rm''​ domyślnie nie usunie katalogów (niezależnie czy są puste) ani plików chronionych przed zapisem. 
- 
-Aby usunąć katalog poleceniem ''​rm''​ (wraz z całą zawartością) trzeba dodać przełącznik ''​-r''​. 
- 
-Aby usunąć plików zabezpieczony przed zapisem (i nie wyświetlać ostrzeżenia jeśli plik który nakazano usunąć nie istnieje) można użyć przełącznika ''​-f''​ (''​--force''​). 
- 
-Przypadkowo bądź nieprawidłowo użyte ''​rm -rf …''​ jest częstą przyczyną utraty danych. Szczególnie uważaj na wszystkie ''​*''​ i to do czego się rozwiną. 
- 
-''​rm''​ przyjmuje przełączniki ''​-I''​ i ''​-i''​ które proszą o potwierdzenie usunięcia plików. ''​-I''​ pyta raz przed rozpoczęciem usuwania wielu plików, a ''​-i''​ pyta przed usunięciem każdego pliku z osobna. 
- 
-~~Zadanie.#​~~ Stwórz wiele plików komendą ''​touch file_{a..z}''​. \\ Usuń wszystkie te pliki jednym poleceniem ''​rm''​ 1) bez przełączników 2) z przełącznikiem ''​-f''​ \\ 3) z przełącznikiem ''​-I''​ 4) z przełącznikiem ''​-i''​. 
- 
-~~Zadanie.#​~~ Powtórz komendę usuwającą pliki z poprzedniego zadania po usunięciu plików. \\ Potem powtórz tą komendę raz jeszcze z przełącznikiem ''​-f''​. 
- 
-~~Zadanie.#​~~ Stwórz katalog i usuń go używając ''​rm''​. 
  
  
so/intro.1677506965.txt.gz · ostatnio zmienione: 2023/02/27 15:09 przez jkonczak