Różnice między wybraną wersją a wersją aktualną.
| Both sides previous revision Poprzednia wersja Nowa wersja | Poprzednia wersja | ||
|
so:intro [2023/02/27 22:56] jkonczak |
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 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 [[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 ===== | ||
| Linia 136: | Linia 160: | ||
| ~~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? | ||
| 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 212: | Linia 236: | ||
| ==== 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 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. | + | W informatyce wykorzystuje się wyrażenia opisujące oczekiwany wynik, do których |
| - | + | następnie mogą być dopasowane dane. | |
| - | ''*'' 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 z katalogu ''/usr/bin/'' 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. | + | |
| \\ | \\ | ||
| - | <html><small></html> | + | Przykładowo //linie, któ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 | ||
| + | i [[https://en.wikipedia.org/wiki/Regular_expression|wyrażenia regularne]]. \\ | ||
| - | ~~Zadanie.#~~ Komenda ''ls'' może wyświetlić ilość twardych dowiązań. Sprawdź gdzie ta informacja jest wyświetlana. | + | Składnia i implementacja zarówno wildcardów jak i wyrażeń regularnych różni się |
| - | + | między aplikacjami / językami programowania. | |
| - | 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. | + | |
| \\ | \\ | ||
| - | Aby skopiować rekursywnie, zachować daty, uprawnienia i inne, można użyć przełącznika **''-a''** (''--archive''). | + | 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]]'' | ||
| - | <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'' i ''/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ów. Jeż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ę w ''/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 w 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ę w 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ć pliki. Jeś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''. | ||