Moduł 1

Materiały do zajęć z Systemów operacyjnych prowadzonych na Wydziale Matematyki i Informatyki Uniwersytetu im. Adama Mickiewicza w Poznaniu.

« Wróć do spisu materiałów

Sesja powłoki

Zanim możliwe będzie korzystanie z systemu, należy rozpocząć sesję powłoki, identyfikując się jako uprawniony użytkownik. Powłoka to program, który pośredniczy między użytkownikiem a jądrem systemu operacyjnego, udostępniając narzędzia ułatwiające korzystanie z aplikacji. W ramach tych ćwiczeń korzystać będziemy wyłącznie z powłoki tekstowej Bash, która dostępna jest w praktycznie wszystkich instalacjach systemów uniksopodobnych.

Korzystając z internetu dowiedz się, czym jest system uniksopodobny (*NIX) oraz jak rozwijały się systemy z tej rodziny.

Znajdź podstawowe informacje o jądrze systemu Linux (ang. Linux kernel). Za co ono odpowiada? Jakie ma cechy?

Znajdź informacje o innych dostępnych programach powłoki, np. sh, csh lub ksh. Jak myślisz, dlaczego nie istnieje tylko jeden program tego typu?

Logowanie lokalne

Gdy jądro systemu zostanie poprawnie załadowane, wywoływany jest program o nazwie init, który odpowiada za uruchomienie aplikacji niezbędnych do poprawnego działania systemu. Jedną z nich jest program getty[1], który jest uruchamiany tak wiele razy, jak wiele wirtualnych konsol udostępnia system[2]. Gdy getty wykryje aktywność, wywołuje program login, odpowiedzialny za zweryfikowanie tożsamości użytkownika, a jeśli weryfikacja ta przebiegnie pomyślnie, za uruchomienie programu powłoki związanego ze zweryfikowanym kontem. Po zakończeniu sesji (np. wskutek wylogowania) program powłoki i program login są zamykane, a getty powraca do nasłuchiwania.

[1] W różnych systemach proces ten może wyglądać odrobinę różnie, dlatego warto zapoznać się z tym, jak jest to w przypadku tego, którego sami używamy.

[2] Zwykle jest to 6 wirtualnych konsol oznaczanych symbolami od tty1 do tty6.

Aby rozpocząć sesję powłoki, wystarczy wprowadzić w odpowiednim momencie swój login i hasło. Poprawne logowanie zakończy się pojawieniem się znaku zachęty, np.:

s123456@shell:~$

Nazwa znaku zachęty pochodzi od przeznaczenia tego ciągu. Ma on zachęcać użytkownika do wprowadzenia jakiegoś polecenia. Jednym z takich poleceń może być logout, kończące sesję powłoki. W tych materiałach będziemy oznaczać znak zachęty symbolem $, choć w zależności od okoliczności może on przyjmować różne postacie.

W przypadku systemów z powłoką graficzną (np. Ubuntu), sposób logowania może być niemalże dowolny (z automatycznym logowaniem włącznie). Zwykle jednak wirtualne konsole pozostają dostępne.

Uruchom system Ubuntu zainstalowany na komputerze w laboratorium wydziałowym. Zanim się zalogujesz korzystając z graficznego interfejsu, przejdź przez wirtualne konsole korzystając z kombinacji klawiszy od Ctrl + Alt + F1 do Ctrl + Alt + F6.

Zaloguj się do wybranej konsoli wirtualnej. Zapoznaj się z wyglądem znaku zachęty, a następnie sprawdź, czy logowanie objęło też inne konsole. Wyloguj się, korzystając z polecenia logout.

Powróć do trybu graficznego, korzystając z kombinacji klawiszy Ctrl + Alt + F7. Zaloguj się, a następnie uruchom dostępną aplikację Terminal lub podobną (taki program nazywamy emulatorem konsoli). Spróbuj intuicyjnie odpowiedzieć na pytanie, dlaczego nie musisz ponownie podawać danych logowania.

Pokaż pytanie kontrolne

Bash to:

Sprawdź odpowiedź

Logowanie zdalne z komputera z systemem z rodziny *NIX

Niekiedy zachodzi potrzeba zdalnego połączenia się z komputerem. W dawnych czasach wykorzystywano do tego protokół telnet, dziś zdecydowanie popularniejszy jest protokół ssh (ang. secure shell), umożliwiający nawiązanie szyfrowanego połączenia. Jeśli na komputerze, z którym próbujemy się połączyć, uruchomiony jest dobrze skonfigurowany demon ssh, połączenie takie może się udać.

Dowiedz się, czym jest demon w omawianym kontekście.

Większość instalacji systemów uniksopodobnych wyposażonych jest w program ssh, umożliwiający nawiązanie połączenia z użyciem protokołu ssh. Gdybyśmy chcieli się połączyć z wydziałowym serwerem studenckim, moglibyśmy napisać

$ ssh s123456@lts.wmi.amu.edu.pl
wywołując w ten sposób program ssh z argumentem s123456@lts.wmi.amu.edu.pl. Jeśli login aktualnie zalogowanego użytkownika pokrywa się z loginem użytkownika, na którego konto chcemy się zalogować zdalnie, można pominąć prefiks adresu, pisząc po prostu

$ ssh lts.wmi.amu.edu.pl

Każde połączenie przychodzące do zdalnej maszyny okupuje tak zwany pseudoterminal (oznaczany zwykle symbolem pts/x, gdzie x jest liczbowym identyfikatorem), czyli dodatkowe, programowe środowisko obsługi wejścia/wyjścia. Związane jest to z zasadą, że z jednego terminala (ale też z jednej konsoli, czy to fizycznej, czy wirtualnej) może korzystać w danym momencie tylko jeden użytkownik.

Korzystając z konsoli wirtualnej lub emulatora konsoli połącz się z serwerem lts.wmi.amu.edu.pl. Spróbuj zrobić to samo z komputera znajdującego się poza wydziałową siecią komputerową. Dlaczego logowanie z sieci wydziałowej nie wymaga podania danych logowania?

Zobacz odpowiedź

Wewnątrz sieci wydziałowej logowanie odbywa się automatycznie przy użyciu protokołu kerberos.

Wszystkie ćwiczenia od tego momentu wykonuj na zdalnym serwerze lts.wmi.amu.edu.pl z wykorzystaniem protokołu ssh. Chociaż zdecydowana większość poleceń działa identycznie również w lokalnych instalacjach systemów uniksopodobnych, niektóre ćwiczenia wykorzystują strukturę lub ustawienia lokalne serwera students.

Korzystając, w różnych kontekstach, z polecenia who zbadaj, który zalogowany użytkownik korzysta z którego terminala. Spróbuj określić, czy jest to konsola wirtualna czy pseudoterminal.

Pokaż pytanie kontrolne

Pseudoterminale oznaczane są zwykle skrótem:

Sprawdź odpowiedź

Logowanie zdalne z komputera z systemem Windows

Cóż, komputery z systemem Windows nie są wyposażone w oprogramowanie do nawiązywania połączeń przy użyciu protokołu ssh. Na szczęście istnieją narzędzia, które można do tego wykorzystać, a najpopularniejszym z nich jest PuTTY.

Korzystając z programu PuTTY, połącz się z serwerem lts.wmi.amu.edu.pl za pomocą protokołu ssh.

Dokumentacja poleceń

Do tej pory dość intuicyjnie rozumieliśmy pojęcie polecenia jako instrukcji, którą przekazujemy komputerowi. Taka instrukcja składa się z uporządkowanej sekwencji ciągów znaków wyraźnie od siebie oddzielonych. Pierwsze słowo polecenia określa element, do którego się odwołujemy. Do tej pory była to zawsze nazwa programu – w rzeczywistości może to być:

  • nazwa programu zlokalizowanego na dysku komputera, np. who lub ssh, lub ścieżka do niego,
  • alias zdefiniowany wewnątrz powłoki, np. ll,
  • nazwa funkcji zdefiniowanej w powłoce,
  • słowo kluczowe języka powłoki, np. if,
  • nazwa polecenia powłoki (polecenia wbudowanego w powłokę), np. type,

Polecenie to jednak rzadko tylko nazwa elementu, do którego się odwołujemy. Często wraz z wywołaniem polecenia chcielibyśmy (a czasem nawet musimy) sparametryzować efekt działania docelowego programu, funkcji itd. Przykładowo, gdy chcemy połączyć się ze zdalnym serwerem z wykorzystaniem programu ssh, przekazujemy do niego argument będący adresem zdalnego serwera. Innym przykładem jest próba skopiowania pliku – należy przekazać do programu kopiującego informację o tym, który plik i dokąd chcemy skopiować.

Interpretacja argumentów i uzależnienie działania programu od nich dzieje się zawsze po stronie samego programu. Powłoka w żaden sposób nie weryfikuje ani czy liczba argumentów jest odpowiednia, ani czy są one poprawne (chyba że polecenie jest poleceniem wewnętrznym powłoki). Niektóre argumenty mogą mieć jednak szczególne znaczenie – w jaki sposób można powiedzieć programowi wypisującemu zawartość katalogu, że chcemy wypisać ją w postaci szczegółowej listy, a nie standardowej, złożonej wyłącznie z nazw elementów? Argumenty, które przekazują programowi takie i podobne informacje nazywamy opcjami (lub przełącznikami). Te zaś, zwyczajowo, poprzedzamy symbolem pojedynczego lub podwójnego łącznika (-). Warto zauważyć, że każda opcja (lub grupa opcji) jest argumentem, ale nie każdy argument programu jest opcją.

W tych materiałach pod pojęciem polecenia będziemy rozumieć nie tylko sekwencję ciągów znaków tworzącą instrukcję (nazwę lub ścieżkę do wywołanego elementu wraz z argumentami), ale też samą nazwę wywoływanego elementu. Będziemy więc często mówić na przykład o poleceniu ls, które może przyjmować argumenty, unikając w ten sposób konieczności precyzyjnego definiowana, jakiego typu jest element ls.

Określ nazwę polecenia, opcje i argumenty poniższych wywołań. Nie przejmuj się, jeśli nie wiesz, co niektóre z nich powodują.

$ logout
$ who -u -H
$ who -uH
$ ssh --help
$ type -t ssh who ls
$ mv plik.txt plik.c
$ ls -l /home/students/s123456
$ cp -r plik1.txt plik2.txt katalog1 katalog2

Kiedy jako prefiks opcji stosuje się symbol -, a kiedy ciąg --? Kto o tym decyduje?

Zobacz odpowiedź

Wyciąg z dokumentacji polecenia ps odpowiada na przedostatnie z pytań:

1   UNIX options, which may be grouped and must be preceded
    by a dash.
2   BSD options, which may be grouped and must not be used
    with a dash.
3   GNU long options, which are preceded by two dashes.

Interpretacja opcji odbywa się po stronie programu. To, jak interpretowane są ciągi znaków przekazane do programu w momencie wywołania, zależy tylko i wyłącznie od programisty. Zastosowanie się do sugerowanych standardów zdaje się jednak być dobrym pomysłem.

Jaka, w kontekście przyjętych standardów, jest różnica pomiędzy wywołaniem dwóch poniższych poleceń?

$ polecenie -abc
$ polecenie --abc

Korzystając z polecenia type z opcją -t, sprawdź typy poznanych dotąd poleceń. W tym celu wykonaj np.:

$ type -t who

Porównaj otrzymane wyniki z efektem działania polecenia type bez opcji -t. Co się stanie, jeśli próbujesz wywołać polecenie type z większą liczbą argumentów?

Polecenie man

Wiele poleceń wykorzystywanych w codziennej pracy ma dosyć duże możliwości. Przyjmuje wiele opcji i argumentów, których znaczenie może różnić się w zależności od sytuacji. To jeden z powodów, dla których istotna jest umiejętność dotarcia do ich podręcznika. Przez podręcznik (ang. manual) rozumiemy plik tekstowy zawierający szczegółowy opis działania programu.

Systemy uniksopodobne wyposażone są zwykle w program man, umożliwiający dotarcie do podręczników programów (oraz niektórych poleceń niebędących programami i informacji ogólnych).

Program man wyświetla dokumentację poleceń przy użyciu programu less. Korzystając z jego dokumentacji, to znaczy wywołując polecenie[1]

$ man less

zapoznaj się z funkcjonalnościami wywoływanymi za pomocą następujących klawiszy: Spacja, b, q, /, ?, n, N oraz sprawdź działanie związanych z nimi funkcjonalności w praktyce, wykonując następne ćwiczenie.

[1] Jeśli nie czujesz się na siłach, żeby uczyć się obsługi programu less w sposób wymagający znajomości obsługi programu less, możesz skorzystać z dokumentacji w wersji internetowej, np. na stronie http://man7.org/linux/man-pages/man1/less.1.html.

Zobacz odpowiedź

Wybrane polecenia programu less

  • /pattern – szukaj w przód,
  • ?pattern – szukaj w tył,
  • n – szukaj następnego w tym samym kierunku,
  • N – szukaj następnego w przeciwnym kierunku.

Korzystając z programu man zapoznaj się z dokumentacją poznanych dotąd programów. W tym celu wykonaj polecenia:

$ man ssh
$ man who
$ man man

Gdy wyświetlamy podręcznik programu who, w nagłówku wyświetla się nazwa WHO(1). Jeśli jednak wyświetlimy podręcznik programu man, w nagłówku pojawi się MAN(7). Korzystając z podręcznika programu man, dowiedz się, co oznaczają liczby w nawiasach.

Zobacz odpowiedź

Wyciąg z podręcznika programu man:

1   Executable programs or shell commands
2   System calls (functions provided by the kernel)
3   Library calls (functions within program libraries)
4   Special files (usually found in /dev)
5   File formats and conventions eg /etc/passwd
6   Games
7   Miscellaneous  (including  macro  packages  and
    conventions), e.g. man(7), groff(7)
8   System administration commands (usually only for root)
9   Kernel routines [Non standard]

Dowiedz się, za co odpowiadają opcje -u oraz -H programu who. Korzystając z nich, sprawdź działanie poleceń:

$ who -u
$ who -H
$ who -uH
$ who -Hu
$ who -u -H
$ who -H -u

Jak myślisz, czy podobna zasada interpretacji opcji dotyczy innych programów?

Pokaż pytanie kontrolne

Załóżmy, że program alfa poprawnie interpretuje przekazane opcje. Wskaż, jakie opcje zostaną do niego przekazane, jeśli zostanie wywołany jako

$ alfa --bc -de

Sprawdź odpowiedź

Opcja --help

W większości sytuacji korzystanie z podręcznika nie jest jednak najwygodniejsze. Na szczęście wiele programów przyjmuje opcję --help, która powoduje, że program wyświetla skrócony opis swojego użycia.

Korzystając z opcji --help, zapoznaj się ze skróconym opisem użycia poznanych dotąd programów. W tym celu wykonaj polecenia:

$ ssh --help
$ who --help
$ man --help

Dlaczego próba wykonania polecenia

$ logout --help

powoduje zakończenie sesji?

Poruszanie się w strukturze katalogów i podstawowe operacje na plikach i katalogach

Struktura katalogów w systemach uniksopodobnych różni się znacząco od tej znanej nam z systemu Windows. Przede wszystkim istnieje główny katalog, oznaczany symbolem /, wewnątrz którego znajduje się cała struktura plików. Ten katalog nazywamy katalogiem głównym. Wewnątrz katalogu głównego znajdują się inne katalogi (np. bin czy home), w których mogą się znajdować inne katalogi itd. Każdy plik na dysku znajduje się w jakimś katalogu.

Jak wiemy, w komputerze może się znajdować wiele dysków, a każdy z nich może być podzielony na tak zwane partycje. W systemach z rodziny Windows każda partycja stanowi osobną strukturę, a jedna z nich (oznaczana zwykle symbolem C:) stanowi partycję główną (systemową).

W systemach uniksopodobnych partycje są montowane. Oznacza to, że pliki i katalogi znajdujące się na danej partycji zostają umieszczone, z zachowaniem ich struktury, we wskazanym katalogu. W szczególności, katalog główny / odwołuje się do struktury plików i katalogów znajdujących się na jednej z partycji dysku.

Pokaż pytanie kontrolne

Katalog / to:

Sprawdź odpowiedź

Katalog domowy, katalog bieżący i nadrzędny, polecenia pwd oraz cd

Do każdego użytkownika systemu przypisany jest jeden katalog na dysku, nazywany jego katalogiem domowym. W ramach sesji powłoki, katalog domowy aktualnie zalogowanego użytkownika oznacza się symbolem ~. To właśnie ten katalog jest domyślnym katalogiem roboczym sesji powłoki, czyli takim katalogiem, względem którego interpretowane są wszystkie ścieżki używane do odwołań do plików.

Bieżący katalog roboczy można sprawdzić przy pomocy polecenia pwd (ang. print working directory), a zmienić przy pomocy polecenia cd (ang. change directory).

Korzystając z polecenia pwd dowiedz się, gdzie zlokalizowany jest Twój katalog domowy. W tym celu wykonaj

$ pwd

zaraz po rozpoczęciu sesji powłoki.

Zmień katalog roboczy na katalog główny, wykonując polecenie

$ cd /

W analogiczny sposób zmień katalog roboczy na:

  • /home
  • /bin
  • /home/students
  • /srv/resources

Sprawdź, co się stanie, jeśli zakończysz ścieżkę znakiem ukośnika. Zwróć też uwagę, jak zmienia się w międzyczasie znak zachęty. Na koniec powróć do swojego katalogu domowego, odwołując się do niego bezpośrednio oraz poprzez symbol ~.

Zaglądając do podręcznika hier dowiedz się, jakie funkcje przypisuje się katalogom znajdującym się bezpośrednio w katalogu głównym.

Korzystanie z bezwzględnych ścieżek do katalogów nie jest zawsze wygodne. Na szczęście możliwe jest stosowanie ścieżek względnych. Jeśli argument polecenia cd nie rozpoczyna się od znaku ukośnika ani symbolu ~, będzie traktowany jako ścieżka względem bieżącego katalogu roboczego. Wyjątkiem od tej reguły jest polecenie

$ cd -

które przywraca poprzedni katalog roboczy. W użyciu ścieżek względnych szczególne zastosowanie mają symbol kropki (.) oraz ciąg dwóch kropek (..). Pierwszy oznacza bieżący katalog, drugi zaś katalog nadrzędny.

Symbole katalogu bieżącego (.) oraz nadrzędnego (..) nie są tak naprawdę symbolami specjalnymi powłoki. W systemach uniksopodobnych są to dowiązania stałe do odpowiednich katalogów, tworzone automatycznie w oparciu o strukturę katalogów zapisaną w systemie plików. Informacje o tych dowiązaniach można nawet wypisać na ekranie, wykonując choćby polecenie

$ ls -la

Czy w katalogu głównym znajduje się dowiązanie stałe ..? Jeśli tak, to na który katalog wskazuje?

Przetestuj działanie poleceń:

$ cd .
$ cd ..

Nie wykonując poniższych poleceń, spróbuj odpowiedzieć na pytanie, który katalog będzie katalogiem roboczym na końcu (ciąg s123456 zastąp swoim loginem w sieci wydziałowej).

$ cd /home/students/../students/s123456
$ cd .
$ cd .././..
$ cd ftp
$ cd -

Zweryfikuj empirycznie swoje przypuszczenia. Zwróć uwagę, jak zachowuje się powłoka po wykonaniu polecenia cd -.

Polecenie ls

Umiejętność poruszania się w strukturze plików jest bardzo ważna, równie ważna jest jednak umiejętność sprawdzenia zawartości wybranego katalogu. Do tego celu służy polecenie ls (ang. list).

Korzystając z wyniku działania polecenia ls, wymień nazwy elementów znajdujących się w Twoim katalogu domowym. Porównaj otrzymany wynik z efektem wykonania (w tym samym katalogu) polecenia ls -a. Jak myślisz, jaką własność mają pliki i katalogi, których nazwa rozpoczyna się od znaku kropki? Za co odpowiada opcja -a polecenia ls?

Dowiedz się, za co odpowiada opcja -l polecenia ls, a następnie wykonaj w swoim katalogu domowym następujące polecenia:

$ ls
$ ls -a
$ ls -l
$ ls -l -a
$ ls -a -l
$ ls -la
$ ls -al

Czy istnieje jakakolwiek różnica pomiędzy efektami wywołań (4)-(7)?

Zbadaj efekty wykonania następujących poleceń w swoim katalogu domowym, a jeśli któreś zwróci błąd, zapoznaj się z jego treścią:

$ ls -R
$ ls -aR
$ ls -laR
$ ls ..
$ ls -l .bashrc
$ ls Desktop "My Documents"

Za co odpowiada opcja -R? Odpowiedz intuicyjnie, dlaczego w ostatnim przykładzie użyto cudzysłowu.

Pokaż pytanie kontrolne

Wskaż tę opcję programu ls, której dotąd nie poznaliśmy:

Sprawdź odpowiedź

Tworzenie plików i katalogów – polecenia touch i mkdir

W systemie plików przechowywane są informacje o następujących momentach w czasie (datach), związanych z plikami i katalogami znajdującymi się na dysku:

  • data ostatniego dostępu do pliku/katalogu (access),
  • data ostatniej modyfikacji zawartości pliku/struktury katalogu (modify),
  • data ostatniej zmiany w metadanych pliku/katalogu (change).

Korzystając z polecenia stat, dowiedz się, jakie daty są przechowywane w kontekście Twojego katalogu domowego.

Systemy uniksopodobne pozwalają tworzyć pliki na wiele różnych sposobów. Kilka z nich poznamy na kolejnych ćwiczeniach, aktualnie jednak wykorzystamy w tym celu polecenie touch. Program touch pozwala zmodyfikować związane z plikiem lub katalogiem daty dostępu, modyfikacji lub zmiany na bieżące, a jeśli wskazany plik nie istnieje, to zostanie utworzony.

Używając tylko jednego wywołania programu touch, utwórz w swoim katalogu domowym pliki o nazwach plik001.txt, plik002.txt oraz plik003.txt.

Używając tylko jednego wywołania programu touch, utwórz w dowolnym katalogu pliki o nazwach od plik001.txt do plik999.txt.

Spróbuj wykonać następujące polecenie:

$ touch SOP/

Zastanów się, dlaczego nie został utworzony ani plik, ani katalog o nazwie SOP.

Zmodyfikuj datę ostatniego dostępu (access) do pliku plik001.txt w katalogu domowym na 2001-02-03 04:05:06. Skorzystaj z dokumentacji programu touch, aby dowiedzieć się, jak to zrobić.

Zobacz odpowiedź

touch -a -d "2001-02-03 04:05:06" plik.txt

Podobnie jak pliki, można tworzyć katalogi. Do tego zadania służy polecenie mkdir (ang. make directory). Przyjmuje ono jako argumenty nazwy katalogów, które mają zostać utworzone.

Utwórz w swoim katalogu domowym katalog o nazwie SOP oraz zmień na niego aktualny katalog roboczy.

Wywołując polecenie mkdir jednokrotnie, utwórz w katalogu SOP katalogi kat1 oraz kat2.

Dowiedz się, za co odpowiada opcja -p polecenia mkdir i skorzystaj z niej, aby utworzyć w katalogu ~/SOP/kat1 następującą strukturę katalogów:

.
└── A
    └── B
        └── C
            └── D
                └── E
                    ├── F
                    ├── G
                    └── H

Usuwanie plików i katalogów – polecenia rmdir i rm

Do usuwania pustych katalogów służy polecenie rmdir. Podobnie jak mkdir, przyjmuje ono opcję -p o analogicznym działaniu (ale odwróconym).

Wykorzystaj polecenie rmdir do usunięcia katalogu H utworzonego w poprzednim ćwiczeniu.

Korzystając z podręcznika programu rmdir, odpowiedz na pytanie, jak zinterpretowane zostanie polecenie

$ rmdir -p A/B/C/D/E/F

Jakie katalogi zostaną usunięte, jeśli powyższe polecenie zostanie wywołane w katalogu ~/SOP/kat1? Wykorzystaj swoją wiedzę, aby usunąć całą jego zawartość z katalogiem A włącznie.

Aby wyświetlić bieżącą strukturę plików i katalogów, skorzystaj z polecenia tree.

Do usuwania plików służy polecenie rm (ang. remove). Przyjmuje ona jako argumenty nazwy plików, które mają zostać usunięte.

Usuń ze swojego katalogu domowego plik plik001.txt. W tym celu wykonaj polecenie:

$ rm ~/plik001.txt

Usuń pliki plik002.txt oraz plik003.txt, wywołując polecenie rm z opcją -i. Porównaj sposób zachowania programu.

Spróbuj usunąć pusty katalog ~/SOP/kat2, wykonując polecenie

$ rm ~/SOP/kat2

Zastanów się, dlaczego program rm zwrócił błąd.

W katalogu ~/SOP/kat2 utwórz plik o dowolnej nazwie. Usuń całą strukturę katalogów (razem z nowo utworzonym plikiem) wykonując polecenie

$ rm -r ~/SOP

Dowiedz się, jaką funkcję pełni opcja -r. Czy można ją połączyć z opcją -i?

Dowiedz się, czym się różnią polecenia rm oraz shred. Którego z nich lepiej użyć do usunięcia wrażliwych informacji?

Pokaż pytanie kontrolne

Z którego polecenia najlepiej skorzystać, aby usunąć niepusty katalog wraz z zawartością?

Sprawdź odpowiedź

Przenoszenie i kopiowanie plików i katalogów – polecenia mv oraz cp

Do przenoszenia plików i katalogów służy polecenie mv. Aby lepiej zaobserwować zjawiska opisywane w tym paragragie, możesz skorzystać z dowolnego edytora tekstu, aby wypełnić tworzone pliki zawartością.

Utwórz w swoim katalogu domowym katalog o nazwie SOP oraz pliki o nazwach plik.txt oraz inny.txt. Wykonaj polecenia:

$ mv plik.txt nowy.txt
$ mv inny.txt nowy.txt katalog
$ mv inny.txt nowy.txt SOP
$ cd SOP
$ mv inny.txt nowy.txt
$ mv nowy.txt ..

Sprawdź efekty po wykonaniu każdego z nich. Dlaczego drugie z poleceń zwróciło błąd? Jak zachowuje się polecenie mv, jeśli ostatni argument jest: (a) nazwą nieistniejącego pliku/katalogu, (b) nazwą istniejącego pliku, (c) nazwą istniejącego katalogu?

Korzystając z dowolnego edytora tekstu, utwórz w katalogu domowym pliki plik001.txt i plik002.txt oraz wypełnij je dowolną treścią. Zapisz je na dysku w kolejności tworzenia (tak, aby plik plik002.txt był zapisany później). Wykonaj w odpowiednim katalogu roboczym polecenie

$ mv -u plik001.txt plik002.txt

Dowiedz się, za co odpowiada opcja -u programu mv i zweryfikuj otrzymane efekty.

W katalogu domowym utwórz katalog SOPA. W jego wnętrzu utwórz katalogi o nazwach 1, 2 oraz 3. Uprzednio zmieniając katalog roboczy na SOPA, wykonaj polecenie

$ mv *

Co się stało? Dlaczego?

Do kopiowania plików służy polecenie cp. Jego użycie jest bardzo zbliżone do użycia polecenia mv, chociaż polecenie cp jest bardziej restrykcyjne, jeżeli chodzi o obsługę katalogów.

W katalogu SOP utwórz katalogi 1, 2, 3 oraz pliki plik.txt, plik.c oraz plik.conf. Utworzone pliki wypełnij dowolną treścią, korzystając z dowolnego edytora tekstu. Wykonaj następujące polecenia:

$ cp plik.txt plik.cpp
$ cp plik.txt plik.cpp plik.py
$ cp -i plik.txt plik.py
$ cp -i plik.txt plik.c
$ cp plik.c 1
$ cp plik.txt plik.conf 1
$ cp 1 2
$ cp -r 1 2
$ cp -r 1 N

Sprawdź efekty po wykonaniu każdego z nich. Dlaczego drugie i siódme z poleceń zwróciło błąd? Jak zachowuje się polecenie cp, jeśli ostatni argument jest: (a) nazwą nieistniejącego pliku/katalogu, (b) nazwą istniejącego pliku, (c) nazwą istniejącego katalogu? Za co odpowiadają opcje -i oraz -r? Czy polecenie cp przyjmuje opcję -u? Jeśli tak, to jak ona działa?

Pokaż pytanie kontrolne

Jeśli ostatni argument polecenia mv jest nazwą nieistniejącego elementu, to:

Sprawdź odpowiedź