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