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.
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?
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.
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
lubssh
, 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?
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.
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.
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?
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
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.
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.
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ć.
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?
Z którego polecenia najlepiej skorzystać, aby usunąć niepusty katalog wraz z zawartością?
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?