Wyklad PI 3


System operacyjny UNIX
System plików
UNIX/Linux organizuje pliki w hierarchiczną strukturę katalogów. Oznacza to, że
katalogi (w innych systemach zwane też folderami) są elementami drzewa, każdy
katalog może zawierać pliki i dalsze katalogi. Pierwszy katalog systemu plików nazywa
się głównym (root directory). Posiada on pliki zwykłe i katalogi niższego rzędu
(podkatalogi).
W odróżnieniu od systemu Windows, tworzącego oddzielny system plików dla każdego
urządzenia przechowującego dane, systemy Unix-owe zawsze mają jedno drzewo
systemu plików, niezależnie od ilości urządzeń pamięci podłączonych do komputera.
Urządzenia pamięci zewnętrznej są dołączane (a poprawnie - montowane) w różnych
miejscach drzewa zgodnie z preferencjami administratora, odpowiedzialnego za
utrzymanie systemu.
Katalog bieżący
W każdej chwili system udostępnia pewien katalog, w którym aktualnie działa
użytkownik, mając dostęp do znajdujących się tam plików, do katalogu nadrzędnego
(parent directory) i dowolnych podkatalogów. Katalog w którym aktualnie znajduje
się użytkownik nazywany jest bieżącym katalogiem roboczym (current working
directory). Aby wyświetlić jego nazwę należy użyć polecenia pwd (print working
directory): lm@lm-kubuntu:~$ pwd
Kiedy użytkownik wchodzi do systemu (loguje się), lub uruchamia sesję terminala,
bieżący katalog roboczy jest ustawiany na katalog domowy (home directory). Każde
konto w systemie posiada własny katalog domowy, i tylko w nim normalny użytkownik
może dokonywać zapisu i zmiany plików.
13/49
System operacyjny UNIX
System plików - zmiana katalogu bieżącego
Aby zmienić katalog bieżący należy użyć polecenia cd, czyli
napisać:
cd <ścieżka do katalogu docelowego>
lm@lm-kubuntu:~$ cd ..
lm@lm-kubuntu:home$ cd lm
lm@lm-kubuntu:~$ cd Downloads
lm@lm-kubuntu:~$ cd /home/Downloads
Istnieją skrótowe notacje:
lm@lm-kubuntu:~/Apps$ cd
lm@lm-kubuntu:~$
zmienia katalog bieżący na domowy
lm@lm-kubuntu:home$ cd -
/home/lm/Apps
lm@lm-kubuntu:~/Apps$
zmienia katalog bieżący na poprzedni katalog bieżący
lm@lm-kubuntu:~/Apps$ cd ~lm
lm@lm-kubuntu:~$
zmienia katalog bieżący na katalog domowy użytkownika  lm .
14/49
System operacyjny UNIX
System plików - istotne własności nazw plików/katalogów
1
nazwy plików rozpoczynające się od kropki oznaczają pliki ukryte (hidden).
Oznacza to tylko, że normalnie polecenie wyświetlające zawartość katalogu (ls)
ich nie uwzględni, o ile nie użyto opcji -a. Każdy katalog domowy zawiera wiele
ukrytych plików, używanych do konfiguracji konta. Dodatkowo, aplikacje zapisują
swoje ustawienia w plikach ukrytych w katalogu użytkownika.
2
w nazwach plików i poleceń w systemie UNIX/Linux rozróżnia się wielkość liter.
Nazwy  Plik1 i  plik1 oznaczają inne pliki.
3
zasadniczo UNIX/Linux nie obsługuje koncepcji  rozszerzenia nazwy pliku , jak
inne systemy operacyjne. W związku z tym można nazywać pliki dowolnie, a ich
zawartość i przeznaczenie jest określane w inny sposób. Natomiast niektóre
aplikacje użytkowe takie reguły stosują i są one pamiętane w konfiguracji
przechowywanej w ramach systemu.
4
mimo że UNIX/Linux obsługuje długie nazwy plików ze spacjami i znakami
interpunkcji, zaleca się nie stosować spacji, znaków interpunkcji innych niż
kropka, minus i podkreślenie. W zamian spacji można stosować podkreślenie. Te
reguły upraszczają pracę z poleceniami (spacja jest separatorem pól polecenia).
15/49
System operacyjny UNIX
System plików - wyświetlanie zawartości katalogów
Aby wyświetlić pliki i katalogi w bieżącym katalogu roboczym (albo w innym), należy
użyć polecenia ls.
Aby wyświetlić zawartość katalogu bieżącego:
lm@lm-kubuntu:~/tests$ ls
lm@lm-kubuntu:~/tests$ IAS.png sources.list texts
Aby wyświetlić zawartość wybranego katalogu (/tests):
lm@lm-kubuntu:~$ ls /tests
lm@lm-kubuntu:~$ IAS.png sources.list texts
Aby wyświetlić zawartość wielu wybranych katalogów (/home /usr /tmp):
lm@lm-kubuntu:~$ ls /home /usr /tmp
lm@lm-kubuntu:~$ ...
Można określić format wyświetlania, np. rozszerzony, by pokazać szczegółowe
parametry plików:
lm@lm-kubuntu:~$ ls -l
total 256
drwxr-xr-x 7 lm lm 4096 Oct 8 16:05 Downloads
drwxr-xr-x 16 lm lm 4096 Oct 8 10:42 Documents
drwxrwxr-x 7 lm lm 4096 Oct 6 15:42 vmware
-rw-rw-r-- 1 lm lm 89119 Oct 5 12:10 dmesg.txt
lm@lm-kubuntu:~$ ls -l /home
16/49
System operacyjny UNIX
System plików - rozszerzony format wyświetlania zawartości katalogu
Rezultat wyświetlania rozszerzonej informacji o pliku za pomocą polecenia ls -l:
-rw-rw-r-- 1 lm lm 89119 Oct 5 12:10 dmesg.txt
zawiera następujące pola:
- pierwszy znak określa typ pliku. Znak minus oznacza plik zwykły, znak  d
oznacza katalog a  l link (dowiązanie) symboliczne.
rw-rw-r wyświetla prawa dostępu do pliku. Grupa pierwszych 3 znaków określa prawa
dostępu dla posiadacza pliku, następna grupa dla użytkowników należących do
jego grupy, a ostatnia grupa dla pozostałych.
1 ilość twardych dowiązań prowadzących do pliku.
lm nazwa użytkownika do którego należy plik
lm nazwa grupy użytkownika do którego należy plik
89119 rozmiar pliku w bajtach
Oct miesiąc ostatniej modyfikacji pliku
5 dzień ostatniej modyfikacji pliku
12:10 godzina ostatniej modyfikacji pliku
dmesg.txt nazwa pliku.
Kiedy wyświetlana linia reprezentuje symboliczne dowiązanie, ma ona specjalną
postać, np.:
lrwxrwxrwx 1 lm lm 21 Oct 12 09:50 sources.list -> /home/lm/sources.list
17/49
System operacyjny UNIX
System plików - wyświetlanie zawartości katalogu poleceniem ls
Większość poleceń obsługuje opcje w postaci pojedynczego znaku, poprzedzonego
znakiem minus, na przykład,  -l , ale wiele poleceń, w tym pochodzące z Projektu
GNU dodatkowo obsługuje pełne nazwy opcji (long options), składające się ze słowa
poprzedzonego dwoma znakami minus. Dodatkowo, wiele poleceń pozwala podawać
łącznie wiele opcji za pojedynczym znakiem minus, np. ls -larth.
Polecenie ls ma dużą liczbę opcji, z których najczęściej stosuje się:
-a ( all) wyświetla wszystkie pliki, nawet te o nazwie zaczynającej się od kropki
(ukryte) (hidden)
-d ( directory) Normalnie jeśli polecenie ls dotyczy katalogu, wyświetlana jest jego
zawartość. Ta opcja łącznie z opcją -l pozwala wyświetlić informacje o katalogu,
a nie jego zawartość
-F ( classify) pozwala dołączyć znak identyfikujący typ elementu na końcu każdej
nazwy. Na przykład,  / jeśli nazwa dotyczy katalogu
-h ( human-readable) wyświetla rozmiary elementów w bardziej czytelny sposób,
używając jednostek (KB, MB) a nie w bajtach
-l wyświetla zawartość katalogu w rozszerzonej postaci
-r ( reverse) wyświetla w odwrotnym porządku. Normalnie, ls wyświetla sortując
alfabetycznie w rosnącym porządku
-S sortuje w zależności od rozmiaru
-t sortuje w zależności od czasu modyfikacji.
18/49
System operacyjny UNIX
System plików - operacje plikowe
Określanie typu pliku za pomocą polecenia file
Zawartość (typ) pliku jest istotną własnością, natomiast konwencja nazewnicza Unix-a
nie wymaga by nazwa odzwierciedlała typ i zawartość pliku. Do wyświetlenia
informacji o typie używa się polecenia file:
lm@lm-kubuntu:~/tests$ ls -lrth
total 32K
-rw-rw-r-- 1 lm lm 26K Sep 30 13:45 IAS.png
-rw-rw-r-- 1 lm lm 18 Oct 12 10:55 texts
lrwxrwxrwx 1 lm lm 21 Oct 12 11:05 sources.list -> /home/lm/sources.list
lm@lm-kubuntu:~/tests$ file texts
texts: ASCII text
lm@lm-kubuntu:~/tests$ file sources.list
sources.list: symbolic link to  /home/lm/sources.list
lm@lm-kubuntu:~/tests$ file IAS.png
IAS.png: PNG image data, 446 x 584, 8-bit/color RGB, non-interlaced
Wyświetlanie zawartości plików tekstowych poleceniem less
Polecenie less pozwala podglądać pliki tekstowe. W systemie Unix jest ogromna liczba
plików zawierających nie formatowany tekst, np. pliki konfiguracyjne. Polecenie less
jest bardziej wygodne niż znane polecenie more, na przykład:
lm@lm-kubuntu:~/tests$ less /etc/passwd
lm@lm-kubuntu:~/tests$
19/49
System operacyjny UNIX
System plików - operacje plikowe
Kopiowanie plików
Używając plecenia cp kopiujemy plik passwd z katalogu /etc do katalogu bieżącego:
lm@lm-kubuntu:~/tests$ cp /etc/passwd .
lm@lm-kubuntu:~/tests$ ls
dir1 dir2 IAS.png passwd sources.list texts
Katalog bieżący jest reprezentowany przez kropkę (twarde dowiązanie do katalogu
wewnątrz niego samego).
lm@lm-kubuntu:~/tests$ cp -v /etc/passwd .
 /etc/passwd ->  ./passwd
lm@lm-kubuntu:~/tests$ ls
dir1 dir2 IAS.png passwd sources.list texts
Polecenie cp wykonało kopiowanie powtórnie, tym razem wyświetlając komunikat o
swoim działaniu. Zauważmy że odbyło się to bez jakiegokolwiek ostrzeżenia,
nadpisując istniejący plik. Jest to efekt ogólnego założenia, że użytkownik wie co
robi.
Aby uniknąć tego typu sytuacji, należy użyć opcji  -i (tryb interaktywny):
lm@lm-kubuntu:~/tests$ cp -i /etc/passwd .
cp: overwrite  ./passwd ? n # n zablokuje wykonanie polecenia
lm@lm-kubuntu:~/tests$ ls
20/49
System operacyjny UNIX
System plików - operacje plikowe
Tworzenie katalogów
Polecenie mkdir jest przeznaczone do tworzenia katalogu, lub katalogów (akceptuje
wiele argumentów):
lm@lm-kubuntu:~/tests$ mkdir dir1 dir2
lm@lm-kubuntu:~/tests$ ls
dir1 dir2 file IAS.png passwd
Usuwanie katalogów
Polecenie rm jest przeznaczone do usuwania plików i katalogów, ale domyślnie rm
obsługuje tylko usuwanie plików. Aby usunąć katalog razem z jego zawartością należy
użyć opcji -r lub -R ( recursive).
Pozostałe istotne opcje to:
lm@lm-kubuntu:~/tests$ ls
-i zatwierdzanie przed usuwaniem
dir1 dir2 file IAS.png passwd
każdego elementu
lm@lm-kubuntu:~/tests$ mkdir dir3
lm@lm-kubuntu:~/tests$ cp file dir3
-I jednokrotne zatwierdzanie przed
lm@lm-kubuntu:~/tests$ ls dir3
usuwaniem więcej niż 3 elementów,
file
lub usuwaniem rekurencyjnym. Mniej
lm@lm-kubuntu:~/tests$ rm dir3
 pedantyczny sposób niż -i, ale w
rm: cannot remove  dir3 : Is a directory
pewnym stopniu chroniący przez
lm@lm-kubuntu:~/tests$ rm -ri dir3
pomyłkami
rm: descend into directory  dir3 ? y
-v ( verbose) informowanie o
rm: remove regular file  dir3/file ? y
podejmowanych działaniach
rm: remove directory  dir3 ? y
21/49
System operacyjny UNIX
System plików - operacje plikowe
Przenoszenie i zmiana nazwy plików
lm@lm-kubuntu:~/tests$ ls
dir1 dir2 IAS.png passwd texts
lm@lm-kubuntu:~/tests$ mv texts file
lm@lm-kubuntu:~/tests$ ls
dir1 dir2 file IAS.png passwd
lm@lm-kubuntu:~/tests$ mv file dir1
lm@lm-kubuntu:~/tests$ ls
dir1 dir2 IAS.png passwd
lm@lm-kubuntu:~/tests$ ls dir1
file
lm@lm-kubuntu:~/tests$ mv dir1/file dir2
lm@lm-kubuntu:~/tests$ ls dir1
lm@lm-kubuntu:~/tests$ ls dir2
file
lm@lm-kubuntu:~/tests$ mv dir2/file .
lm@lm-kubuntu:~/tests$ ls dir2
lm@lm-kubuntu:~/tests$ ls
dir1 dir2 file IAS.png passwd
22/49
System operacyjny UNIX
System plików - operacje plikowe
Przenoszenie i zmiana nazwy katalogów
lm@lm-kubuntu:~/tests$ ls
dir1 dir2 file IAS.png passwd
lm@lm-kubuntu:~/tests$ mv file dir1
lm@lm-kubuntu:~/tests$ mv dir1 dir2
lm@lm-kubuntu:~/tests$ ls
dir2 IAS.png passwd
lm@lm-kubuntu:~/tests$ ls dir2
dir1
lm@lm-kubuntu:~/tests$ mv dir2/dir1 .
UWAGA: ponieważ katalog dir2 istniał,
lm@lm-kubuntu:~/tests$ mv dir1/file .
lm@lm-kubuntu:~/tests$ mv file dir1
mv dir1 dir2
lm@lm-kubuntu:~/tests$ ls
dir1 dir2 IAS.png passwd
przeniosło dir1 do dir2. Gdyby dir2 nie
lm@lm-kubuntu:~/tests$ mv dir1 dir2
istniał, mv zmieniłoby nazwę katalogu dir1
lm@lm-kubuntu:~/tests$ ls
na dir2.
dir2 IAS.png passwd
lm@lm-kubuntu:~/tests$ ls dir2
dir1
lm@lm-kubuntu:~/tests$ ls dir2/dir1
file
lm@lm-kubuntu:~/tests$ mv dir2/dir1 .
lm@lm-kubuntu:~/tests$ mv dir1/file .
lm@lm-kubuntu:~/tests$ ls
dir1 dir2 file IAS.png passwd
23/49
System operacyjny UNIX
System plików - dowiązania twarde i symboliczne
Dowiązania twarde (hard links) są oryginalnym podejściem Unix-a do tworzenia łącz
do plików, w odróżnieniu do dowiązań symbolicznych (symbolic links), które są
nowszą konstrukcją. Każdy plik ma początkowo jedno twarde dowiązanie definiujące
jego nazwę. Tworząc twarde dowiązanie, tworzymy dla istniejącego pliku nowe łącze w
wybranym katalogu. Ograniczenia twardych dowiązań:
nie mogą odnosić się do plików istniejących poza własnym systemem plików.
Oznacza to, że twarde dowiązanie nie może wskazywać na plik istniejący w innej
partycji dysku systemowego.
nie mogą wskazywać na katalogi.
Twarde dowiązanie nie jest odróżnialne od samego pliku, który reprezentuje. Przy
wyświetlaniu zawartości katalogu zawierającego twarde dowiązanie nie jest ono w
żaden sposób wyróżniane. Kiedy takie dowiązanie jest usuwane, plik przez nie
reprezentowany pozostaje, o ile nie było to ostatnie dowiązanie.
Dowiązania symboliczne (symbolic links) stworzono by wyeliminować ograniczenia
twardych dowiązań. Dowiązania symboliczne realizuje się za pomocą specjalnego typu
pliku, który zawiera wskaznik do pliku lub katalogu. Są one podobne do skrótów
systemu Windows, ale wyprzedzają je w czasie o wiele lat, ;-).
Plik reprezentowany przez dowiązanie symboliczne i samo dowiązanie są generalnie nie
odróżnialne. Na przykład, przy zapisie do dowiązania, w istocie wykonujemy zapis do
pliku przez nie reprezentowanego. Jeśli dowiązanie symboliczne zostanie usunięte, to
plik pozostanie. Jeśli natomiast usunięty zostanie plik reprezentowany przez
dowiązanie symboliczne, to dowiązanie pozostanie, ale nie będzie już reprezentować
czegokolwiek. W tym przypadku nazywa się je pustym (broken).
24/49
System operacyjny UNIX
System plików - tworzenie dowiązań twardych
lm@lm-kubuntu:~/tests$ ls -l
total 12
drwxrwxr-x 2 lm lm 4096 Oct 16 11:46 dir1
drwxrwxr-x 2 lm lm 4096 Oct 16 11:46 dir2
-rw-rw-r-- 1 lm lm 18 Oct 12 10:55 file
lm@lm-kubuntu:~/tests$ ln file file-hard
lm@lm-kubuntu:~/tests$ ls -lih
total 16K
7346653 drwxrwxr-x 2 lm lm 4.0K Oct 16 11:46 dir1
7346654 drwxrwxr-x 2 lm lm 4.0K Oct 16 11:46 dir2
7346515 -rw-rw-r-- 2 lm lm 18 Oct 12 10:55 file
7346515 -rw-rw-r-- 2 lm lm 18 Oct 12 10:55 file-hard
lm@lm-kubuntu:~/tests$ cat file
1st line
2nd line
lm@lm-kubuntu:~/tests$ cat file-hard
1st line
2nd line
lm@lm-kubuntu:~/tests$ rm file
lm@lm-kubuntu:~/tests$ ls -lh
total 12K
drwxrwxr-x 2 lm lm 4.0K Oct 16 11:46 dir1
drwxrwxr-x 2 lm lm 4.0K Oct 16 11:46 dir2
-rw-rw-r-- 1 lm lm 18 Oct 12 10:55 file-hard
lm@lm-kubuntu:~/tests$ cat file-hard
1st line 25/49
2nd line
System operacyjny UNIX
System plików - tworzenie dowiązań symbolicznych
lm@lm-kubuntu:~/tests$ ls -lih
total 16K
7346653 drwxrwxr-x 2 lm lm 4.0K Oct 16 11:46 dir1
7346654 drwxrwxr-x 2 lm lm 4.0K Oct 16 11:46 dir2
7346515 -rw-rw-r-- 2 lm lm 18 Oct 12 10:55 file
lm@lm-kubuntu:~/tests$ ln -s file file-symb
lm@lm-kubuntu:~/tests$ ls -lih
total 16K
7346653 drwxrwxr-x 2 lm lm 4.0K Oct 16 12:35 dir1
7346654 drwxrwxr-x 2 lm lm 4.0K Oct 16 11:46 dir2
7346515 -rw-rw-r-- 2 lm lm 18 Oct 12 10:55 file
7345882 lrwxrwxrwx 1 lm lm 4 Oct 16 12:34 file-symb -> file
lm@lm-kubuntu:~/tests$ ln -s ../file dir1/file-symb
lm@lm-kubuntu:~/tests$ ls -lih dir1
total 0
7346518 lrwxrwxrwx 1 lm lm 7 Oct 16 12:35 file-symb -> ../file
lm@lm-kubuntu:~/tests$
Tworząc dowiązanie symboliczne, tworzymy tekstowy opis lokalizacji docelowego
elementu (pliku lub katalogu) względem dowiązania. Listing elementu file-symb w
katalogu dir1 zawiera oznaczenie dowiązania symbolicznego (znak  l w pierwszym
polu) i ścieżkę  ../file , podaną względem położenia file-symb, jako że file występuje w
katalogu nadrzędnym. Rozmiar pliku tego dowiązania symbolicznego jest równy 7,
czyli ilości znaków w ścieżce  ../file , a nie rozmiarowi pliku docelowego.
26/49
System operacyjny UNIX
System plików - tworzenie dowiązań symbolicznych
lm@lm-kubuntu:~/tests$ ln -s dir1 dir1-symb
lm@lm-kubuntu:~/tests$ ls -lih
total 12K
7346653 drwxrwxr-x 2 lm lm 4.0K Oct 16 12:35 dir1
7346655 lrwxrwxrwx 1 lm lm 4 Oct 16 13:00 dir1-symb -> dir1
7346515 -rw-rw-r-- 1 lm lm 18 Oct 12 10:55 file
lm@lm-kubuntu:~/tests$ mv file dir1-symb
lm@lm-kubuntu:~/tests$ ls -lih
total 8.0K
7346653 drwxrwxr-x 2 lm lm 4.0K Oct 16 12:35 dir1
7346655 lrwxrwxrwx 1 lm lm 4 Oct 16 13:00 dir1-symb -> dir1
lm@lm-kubuntu:~/tests$ ls -lih dir1
total 4.0K
7346515 -rw-rw-r-- 1 lm lm 18 Oct 12 10:55 file
lm@lm-kubuntu:~/tests$ ls -lih dir1-symb
7346655 lrwxrwxrwx 1 lm lm 4 Oct 16 13:00 dir1-symb -> dir1
lm@lm-kubuntu:~/tests$ cd dir1-symb
lm@lm-kubuntu:~/tests/dir1-symb$ ls
file
lm@lm-kubuntu:~/tests/dir1$ cd ..
lm@lm-kubuntu:~/tests$ mv dir1 dir3
lm@lm-kubuntu:~/tests$ ls -lih
total 8.0K
7346654 drwxrwxr-x 2 lm lm 4.0K Oct 16 13:01 dir3
7346655 lrwxrwxrwx 1 lm lm 4 Oct 16 13:00 dir1-symb -> dir1 // BROKEN !
27/49
System operacyjny UNIX
System plików - dowiązania symboliczne
Tworzą dowiązania symboliczne można użyć ścieżek bezwzględnych:
lm@lm-kubuntu:~/tests$ ln -s /home/lm/tests/file dir1/file-symb
lub względnych, jak w poprzednim przykładzie. Użycie ścieżek względnych jest
bardziej optymalne, ponieważ pozwala zmieniać nazwę lub lokalizację katalogu w
którym znajduje się dowiązanie bez wpływu na jego poprawność.
Większość operacji wykonywanych na dowiązaniu dotyczy elementu docelowego, a nie
samego dowiązania. Wyjątkiem jest polecenie rm. Gdy usuwa się dowiązanie, element
przez nie wskazywany (plik lub katalog) nie jest usuwany, tylko dowiązanie
Tworzenie dowiązań z poziomu GUI
Programy zarządzające plikami w środowiskach GNOME i KDE pozwalają łatwo
tworzyć dowiązania symboliczne.
W środowisku GNOME, przyciśnięcie klawiszy Ctrl+Shift w czasie przeciągania pliku
utworzy dowiązanie, zamiast kopiowania lub przeniesienia pliku.
W środowisku KDE, przy upuszczaniu elementu pojawia się małe menu z opcjami
kopiowania, przenoszenia i tworzenia dowiązania.
28/49
System operacyjny UNIX
System plików - używanie poleceń
Istnieją polecenia służące do dostarczania użytkownikowi informacji o (innych)
poleceniach [LinuxCommandLine]:
type  jak polecenie jest interpretowane
which  który program wykonywalny obsługuje polecenie
man  wyświetla informację o poleceniu z podręcznika użytkownika
apropos  wyświetla listę powiązanych poleceń
info  wyświetla standardową informację o poleceniu
whatis  wyświetla skróconą informację o poleceniu
alias  tworzy zastępcze polecenie
W ogólności, polecenie może być zrealizowane jako:
1
program wykonywalny, jak pliki w katalogu /usr/bin. Ta kategoria reprezentuje
skompilowane programy napisane w językach takich jak C lub C++, lub programy
napisane w językach skryptowych takich jak shell, perl, python, ruby, etc.
2
polecenie wbudowane w powłokę. Powłoki, np. bash zawierają wbudowane
polecenia (te najczęściej wykorzystywane) shell builtins. Przykładem jest
polecenie cd.
3
funkcja powłoki (shell function), czyli mały skrypt powłoki wbudowany w jej
środowisko.
4
zamiennik (alias), czyli polecenie definiowane przez użytkowników z innych
poleceń.
29/49
System operacyjny UNIX
System plików - używanie poleceń
type  wyświetlanie rodzaju polecenia
Polecenie type jest wbudowane w powłokę (shell builtin) i służy do wyświetlania
rodzaju polecenia o podanej nazwie.
lm@lm-kubuntu:~$ type type
type is a shell builtin
lm@lm-kubuntu:~$ type ls
ls is aliased to  ls --color=auto
lm@lm-kubuntu:~$ type cd
cd is a shell builtin
lm@lm-kubuntu:~$ type cp
cp is /bin/cp
which  wyświetlanie lokalizacji pliku wykonywalnego
Aby określić lokalizację pliku wykonywalnego o podanej nazwie, można użyć polecenia
which:
lm@lm-kubuntu:~$ which which
/usr/bin/which
lm@lm-kubuntu:~$ which ls
/bin/ls
lm@lm-kubuntu:~$ which cd
lm@lm-kubuntu:~$ which cp
/bin/cp
which można użyć tylko w odniesieniu do plików wykonywalnych, nie można do
poleceń wbudowanych ani aliasów.
30/49
System operacyjny UNIX
System plików - używanie poleceń
help  wyświetlanie pomocy dla poleceń wbudowanych
Powłoka bash posiada wbudowana pomoc dla poleceń wbudowanych. Aby jej użyć
należy wpisać  help i nazwę polecenia wbudowanego. Na przykład:
lm@lm-kubuntu:~$ help pwd
pwd: pwd [-LP]
Print the name of the current working directory.
Options:
-L print the value of $PWD if it names the current working directory
-P print the physical directory, without any symbolic links
By default,  pwd behaves as if  -L were specified.
Exit Status:
Returns 0 unless an invalid option is given or the current directory
cannot be read.
lm@lm-kubuntu:~$ help ls
bash: help: no help topics match  ls . Try  help help or  man -k ls or  info l
lm@lm-kubuntu:~$
man  wyświetlanie opisu programu dostępnego w podręczniku
Większość programów wykonywanych z linii poleceń posiada dokumentację nazywaną
manual lub man page. Do jej wyświetlania stosuje się specjalny program formatujący
(man), na przykład:
lm@lm-kubuntu:~$ man ls
LS(1) User Commands LS(1)
NAME
ls - list directory contents
SYNOPSIS 31/49
System operacyjny UNIX
System plików - używanie poleceń
apropos  wyświetlanie poleceń powiązanych
Można przeszukiwać całą dokumentację poleceń (man pages), aby odnalezć polecenia
o podobnym zastosowaniu.
lm@lm-kubuntu:~$ apropos mkdir
gvfs-mkdir (1) - Create directories
mkdir (1) - make directories
mkdir (2) - create a directory
mkdirat (2) - create a directory relative to a directory file d...
lm@lm-kubuntu:~$
Pierwsze pole wyniku jest nazwą strony podręcznika, a następne numerem sekcji.
UWAGA: polecenie man z opcją  -k wykonuje dokładnie to samo działanie co
apropos.
whatis  wyświetlanie bardzo skrótowej informacji o poleceniu
Polecenie whatis wyświetla nazwę i jedną linię opisu ze strony dokumentacji
dotyczącej podanej nazwy:
lm@lm-kubuntu:~$ whatis ls
ls (1) - list directory contents
lm@lm-kubuntu:~$
32/49
System operacyjny UNIX
System plików - używanie poleceń
Tworzenie własnych poleceń przy użyciu alias
Można utworzyć własne polecenie stosując polecenie alias. Często używa się pewnego
sposobu, aby w jednej linii zawrzeć kilka poleceń: oddziela się je znakiem średnika (;).
Na przykład:
UWAGA: definicje aliasów znikają w momencie zakończenia sesji terminala !
Aby wyświetlić wszystkie aliasy zdefiniowane w środowisku należy użyć polecenia alias
bez argumentów:
lm@lm-kubuntu:~$ alias
alias egrep= egrep --color=auto
alias fgrep= fgrep --color=auto
alias grep= grep --color=auto
alias l= ls -CF
alias la= ls -A
alias ll= ls -alF
alias ls= ls --color=auto
lm@lm-kubuntu:~$
33/49
System operacyjny UNIX
System plików - przekierowanie wejścia/wyjścia
Przekierowanie wejścia/wyjścia polega na zmianie domyślnego dla polecenia zródła
danych wejściowych lub przeznaczenia danych wyjściowych, a także na połączeniu
wielu poleceń w łańcuch (pipeline).
Programy generują dane wyjściowe, które można podzielić na:
rezultaty; tzn. dane jakie program zgodnie z przeznaczeniem oblicza
komunikaty błędów, ostrzeżeń i stanu, które informują o przebiegu programu
Na przykład polecenie ls normalnie wyświetla rezultaty i komunikaty błędów na
ekranie. Stosując podejście systemu Unix  wszystko jest plikiem , można uważać że
zasadniczo program ls wysyła rezultaty do specjalnego pliku zwanego standardowym
wyjściem (standard output) (skrótowo - stdout), a komunikaty błędów do innego pliku
zwanego standardowym wyjściem błędów (standard error lub stderr). Domyślnie
stdout i stderr są związane z ekranem i nie przechodzą przez pliki dyskowe.
Dodatkowo, wiele programów pobiera dane ze standardowego wejścia (standard input)
(skrótowo - stdin), które domyślnie jest związane z klawiaturą.
Przekierowanie wejścia/wyjścia pozwala zmienić te domyślne przyporządkowania,
powodując dostarczenie danych dla programu z dowolnego pliku i wyprowadzenie
rezultatów i komunikatów diagnostycznych do wybranego pliku dyskowego.
34/49
System operacyjny UNIX
System plików - przekierowanie wejścia/wyjścia
Przekierowanie standardowego wyjścia
Przekierowanie wyjścia pozwala przedefiniować przeznaczenie rezultatów programu.
Aby skierować rezultaty do pliku, używa się operatora  > po którym podaje się
nazwę pliku. Czyni się tak, jeśli z jakichś powodów trzeba te rezultaty przechować lub
przesłać:
lm@lm-kubuntu:~$ls -l /usr/bin > ls.txt
lm@lm-kubuntu:~$ ls -l ls.txt
-rw-rw-r-- 1 lm lm 160049 Oct 19 11:44 ls.txt
lm@lm-kubuntu:~$ ls -l /user/bin > ls.txt
ls: cannot access /user/bin: No such file or directory
lm@lm-kubuntu:~$ ls -l ls.txt
-rw-rw-r-- 1 lm lm 0 Oct 19 11:50 ls.txt # rozmiar pliku = 0 !
Wyświetlony został komunikat o błędzie, ponieważ drugie polecenie ls otrzymało złą nazwę
katalogu /user/bin. Dlaczego zatem komunikat o błędzie został wyświetlony na ekranie, a nie
skierowany do pliku ls.txt ? Ponieważ polecenie ls nie wysyła komunikatów o błędach do
standardowego wyjścia. Zamiast tego, jak wszystkie dobrze napisane programy Unix-a, wysyła je
do wyjścia diagnostycznego (stderr). A ponieważ w drugim poleceniu przekierowano tylko stdout,
a nie stderr, to komunikaty diagnostyczne były dalej przekazywane domyślną drogą.
Poza nadpisywaniem pliku danymi z przekierowanego wyjścia można też dopisywać
dane do pliku, używając operatora   :
lm@lm-kubuntu:~$ ls -l /usr/bin > ls.txt
lm@lm-kubuntu:~$ ls -l ls.txt
-rw-rw-r-- 1 lm lm 160049 Oct 19 11:58 ls.txt
lm@lm-kubuntu:~$ ls -l /usr/local >> ls.txt
lm@lm-kubuntu:~$ ls -l ls.txt
35/49
-rw-rw-r-- 1 lm lm 160494 Oct 19 11:58 ls.txt
System operacyjny UNIX
System plików - przekierowanie wejścia/wyjścia
Przekierowanie wyjścia diagnostycznego
Przekierowanie wyjścia diagnostycznego nie ma podobnie logicznej składni. Aby
przekierować stderr trzeba użyć deskryptora pliku (file descriptor). Program może
generować wyjście i przesyłać na wiele strumieni plikowych. Dotychczas używaliśmy
trzech pierwszych z nich jako stdin, stdout i stderr, natomiast powłoka identyfikuje je
wewnętrznie jako deskryptory zero, jeden i dwa. Powłoka dostarcza notacji do
przekierowywania opartej o numer deskryptora pliku (file descriptor number). stderr
jest deskryptorem pliku 2, więc przekierowanie stderr realizuje się:
lm@lm-kubuntu:~$ ls -l /user/bin 2> ls-error.txt
lm@lm-kubuntu:~$ ls -l ls-error.txt
-rw-rw-r-- 1 lm lm 55 Oct 19 12:14 ls-error.txt
lm@lm-kubuntu:~$ cat ls-error.txt
ls: cannot access /user/bin: No such file or directory
lm@lm-kubuntu:~$
Rezygnacja z wyjścia
Czasem  milczenie jest złotem , czyli nie chcemy w ogóle generować wyjścia -
odrzucamy je. Szczególnie dotyczy to komunikatów o błędach i ostrzeżeń. System
pozwala to osiągnąć przez przekierowanie do specjalnego pliku  /dev/null . Plik ten
reprezentuje w systemie urządzenie zwane bit bucket, które odbiera dane i ignoruje je.
Ilustruje to przykład, w którym drugie polecenie jest pozbawione możliwości
sygnalizowania błędów:
lm@lm-kubuntu:~$ ls -l /user/bin
ls: cannot access /user/bin: No such file or directory
lm@lm-kubuntu:~$ ls -l /user/bin 2> /dev/null
36/49


Wyszukiwarka