===== Kopiowanie, przenoszenie, i usuwanie plików ===== Do utworzenia pustego pliku możesz użyć ''touch //plik//''. \\ Aby utworzyć plik z zawartością, możesz użyć ''fortune > //plik//'' lub ''echo //zawartość// > //plik//''. \\ Polecenia ''touch'' i ''echo'', jak również znaczenie ''>'' zostaną omówione później. Aby wyświetlić plik, użyj ''cat //plik//''. ==== Katalogi ==== **''mkdir //dir//''** tworzy nowy katalog. \\ ''mkdir -p //dir1/dir2/dir3//'' tworzy katalog ''dir1'', i katalog ''dir2'' w ''dir1'', i katalog ''dir3'' w ''dir1/dir2''. \\ Podając przełącznik ''-p'' polecenie ''mkdir'' nie wyświetla błędu jeśli katalog już istnieje. 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//''**. ~~Zadanie.#~~ Stwórz plik ''plik1'' z zawartością. Stwórz twarde dowiązanie do pliku ''plik1'' o nazwie ''plik2''. Zmodyfikuj ''plik2''. Wyświetl ''plik1''. ~~Zadanie.#~~ Komenda ''ls'' może wyświetlić ilość twardych dowiązań. Sprawdź gdzie ta informacja jest wyświetlana. 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. ~~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. 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]]. ==== 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 (o ile nie zostanie użyty przełącznik ''-i'' bądź ''-n''). Domyślnie ''cp'' odmówi kopiowania katalogu. Przełącznik ''-r'' pozwoli skopiować rekurencyjnie katalog z zawartością. ''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''). Z przełącznikiem ''-l'' program ''cp'' tworzy twarde dowiązania zamiast kopiować pliki. Można to połączyć z ''--recursive''. ~~Zadanie.#~~ Skopuj jednym poleceniem pliki ''/etc/os-release'' i ''/etc/SUSE-brand'' do bieżącego katalogu. ~~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. ~~Zadanie.#~~ Skopiuj rekurencyjnie ''someDir'' i zawartość. ~~Zadanie.#~~ Przenieś nowo utworzony katalog do środka katalogu ''someDir''. ~~Zadanie.#~~ Zmień nazwę katalogu ''someDir'' na inną. ~~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? \\ (Wyświetl je ''cat //nazwa_pliku//'' lub wyświetl daty modyfikacji z sekundami przez ''ls -l --time-style=+%H:%M:%S …'' lub ''tree -D --timefmt=%H:%M:%S …'') ==== 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. 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. 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''. === 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. ==== Usuwanie plików ==== Program usuwający pliki nazywa się **''rm''** (od //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'': * bez przełączników, * z przełącznikiem ''-f'', * z przełącznikiem ''-I'', * 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''. ~~META: language = pl ~~