UNIX. Kurs początkowy. Dr inż. Lucjan Miękina upel.agh.edu.pl/wimir/login/ Katedra Robotyki i Mechatroniki. November 18, /112

Wielkość: px
Rozpocząć pokaz od strony:

Download "UNIX. Kurs początkowy. Dr inż. Lucjan Miękina upel.agh.edu.pl/wimir/login/ Katedra Robotyki i Mechatroniki. November 18, 2015 1/112"

Transkrypt

1 UNIX Kurs początkowy Dr inż. Lucjan Miękina upel.agh.edu.pl/wimir/login/ Katedra Robotyki i Mechatroniki November 18, /112

2 Pierwsza wersja UNIX-a została zbudowana w 1969 przez Kena Thompsona z Research Group w Bell Laboratories dla minikomputera PDP-7. Do Thompsona wkrótce dołączył Dennis Ritchie i obaj, wspólnie z innymi członkami Research Group, opracowali wczesne wersje UNIX-a [2]. UNIX będący początkowo osobistym projektem dwóch pracowników Bell Laboratories, stał się systemem operacyjnym będącym przedmiotem zainteresowania międzynarodowych komitetów standaryzacyjnych. Równocześnie jest on przedmiotem studiów akademickich i ważnym elementem teorii i praktyki systemów operacyjnych. System jest napisany głównie w języku C, który został specjalnie stworzony do prac nad UNIX-em, ponieważ ani Thompson ani Ritchie nie byli entuzjastami programowania w języku assemblera. Porzucenie asemblera było konieczne z powodu niepewności, na jakich platformach sprzętowych ma UNIX działać. Ułatwiło to znacznie przenoszenie systemu na inne/nowe platformy. Bibliografia: Bash w przykładach, cz.3. url: {https: // Gagne Silberschatz Galvin. Podstawy systemów operacyjnych. WNT, Strona podręcznika systemu dla powłoki bash. url: 2/112

3 Drzewo genealogiczne to to 1975 Unics UnixTSS 1 to 4 UnixTSS 5 to 6 PWB/Unix 1969 Open Source Mixed/Shared Source 1971 to 1973 Closed Source 1974 to BSD 1.0 to 2.0 UnixTSS 7 Unix 32v BSD 3.0 to 4.1 Xenix 1.0 to 2.3 System III to to 2010 Minix 1.x Minix 2.x Minix 3.x Linux Linux 0.95 to 1.2.x Linux 2.0 to 2.6.x NEXTSTEP/ OPENSTEP 1.0 to 4.0 Mac OS X Server Mac OS X 10.0 to 10.7 (Darwin) UnixTSS 8 UnixTSS (Time Sharing System) 9 to 10 BSD NET/2 386BSD FreeBSD 1.0 to 2.2.x FreeBSD 3.0 to 3.2 FreeBSD 3.3 to 8.0 BSD 4.2 BSD 4.3 BSD 4.3 Tahoe BSD 4.3 Reno BSD 4.4 to 4.4 lite2 NetBSD 0.8 to 1.0 NetBSD 1.1 to 1.2 NetBSD 1.3 NetBSD 1.3 to 5.x 3/112 Sun OS 1 to 1.1 Sun OS 1.2 to 3.0 Sun OS 4 OpenBSD 1.0 to 2.2 OpenBSD 2.3 to 4.x AIX 1.0 AIX 3.x to 6.x Xenix 3.0 SCO Xenix SCO Xenix W286 SCO Xenix V386 SCO Xenix W386 SCO Unix OpenServer 5.0 to 5.04 OpenServer to OpenServer 6.x System V R1 to R2 System V R3 System V R4 Unixware 1.x to 2.x Unixware 7.x Solaris 2.1 to 10 OpenSolaris and later HP/UX 1.0 to 1.2 HP/UX 2.0 to 3.0 HP/UX 6 to 11 HP/UX 11i to 11i v to to 2010

4 Założenia projektowe 1 UNIX zaprojektowano jako system wielodostępny z podziałem czasu. 2 Standardowy interfejs użytkownika (powłoka, shell) jest prostym procesem i może być zastąpiony przez inny. 3 System plików ma postać wielopoziomowego drzewa, pozwalając użytkownikom tworzyć własne podkatalogi. Pliki są ciągami bajtów. 4 Pliki dyskowe i urządzenia wejścia/wyjścia są traktowane (obsługiwane) możliwie identycznie. 5 UNIX równocześnie obsługuje wiele procesów. Proces może łatwo utworzyć nowe procesy (potomne). 6 Przydział czasu procesora do zadań jest oparty o priorytety. 7 Wymiana (disk swapping) jest stosowana jeśli system nie może zapewnić obsługi pamięci w trybie stronicowania. 8 UNIX był zaprojektowany przez programistów dla programistów. Jest wysoce interaktywny, a narzędzia rozwoju oprogramowania miały i mają wysoki priorytet, n.p: program make, który jest używany do kontroli, które z plików źródłowych programu wymagają kompilacji i do wykonania jej system kontroli wersji, który jest używany do zarządzania kolejnymi wersjami plików źródłowych, bez konieczności przechowywania całych plików. 4/112

5 Interfejs programisty i użytkownika Jak większość systemów operacyjnych, UNIX składa się z dwu oddzielnych części: 1 jądra (kernel), które dostarcza usług: systemu plików, przydziału procesora do zadań, zarządzania pamięcią i innych, za pośrednictwem eksportowanych funkcji systemowych (system calls). 2 programów systemowych, które używają funkcji systemowych udostępnianych przez jądro w celu realizacji funkcji użytkowych, jak np. kompilacja czy operacje plikowe. Funkcje systemowe tworzą tzw. interfejs programisty UNIX-a; natomiast zbiór programów (poleceń) systemowych tworzy interfejs użytkownika. Funkcje systemowe UNIX-a można ogólnie podzielić na 3 kategorie: 1 operacje plikowe, zawierające też operacje na urządzeniach, jako że urządzenia w UNIX-ie są traktowane jako (specjalne) pliki, i te same funkcje systemowe obsługują pliki i urządzenia 2 sterowanie procesami 3 manipulacja informacjami systemowymi (czas, nazwa hosta, identyfikator procesu, itp.) Większość programów systemowych jest napisana w języku C, a podręcznik programisty (UNIX Programmer s Manual) przedstawia funkcje systemowe jako funkcje języka C. 5/112

6 Powłoki Użytkownicy komunikują się z systemem za pomocą programu interpretera poleceń nazywanego powłoką systemu (shell). W użyciu są następujące powłoki: sh Bourne shell, mająca znak $ jako domyślny znak zachęty (prompt) csh (C shell) mająca składnię i konstrukcje podobne do języka programowania C. Prompt kończy się zwykle znakiem procentu (%) ksh powłoka Korn a tcsh TC jest powłoką C wzbogaconą o podpowiadanie nazw plików (file name completion) i edycję linii poleceń (domyślny prompt: >) bash powłoka GNU Bourne-Again jest oparta o powłokę Bourne a z dodatkiem podpowiadania nazw plików i edycji linii poleceń (domyślny prompt kończy $). dash powłoka Debian Almquist Shell jest zgodna ze standardem POSIX, pochodzi od ash. Ponieważ wykonuje skrypty szybciej niż bash i ma mniej zależności od bibliotek, jest domyślną powłoką dystrybucji Debian Linux. zsh powłoka zsh najbardziej przypomina ksh, ale dostarcza największej liczby rozszerzeń. Zsh posiada edycję linii poleceń, wbudowaną korekcję poprawności, programowalne wspomaganie poleceń, funkcje powłoki (z automatycznym ładowaniem), obsługę historii poleceń, itd. Poza przetwarzaniem pojedynczych poleceń użytkownika, powłoki UNIX-a posiadają własną składnię i struktury sterujące. Dzięki temu można znacznie zwiększyć efektywność, a nawet automatyzować powtarzalne operacje. Można nawet zapisać 6/112 ciągi poleceń powłoki w pliku (tekstowym), nazywanym skryptem powłoki (shell

7 System plików Pliki plik w UNIX-ie jest ciągiem bajtów. Poszczególne programy często traktują pliki jak zapis pewnych struktur danych, ale jądro nie interpretuje tego w ogóle. Na przykład, istnieje konwencja dot. plików tekstowych, mówiąca, że składają sie one z linii znaków ASCII, oddzielonych przez pojedynczy znak końca linii newline (który jest znakiem LF w kodzie ASCII), ale jądro nic nie "wie" o tej konwencji. Katalogi pliki są zorganizowane w drzewiaste struktury katalogów. Katalogi są plikami zawierającymi informacje o lokalizacji innych plików. Ścieżka (lub nazwa ścieżkowa) do pliku jest to łańcuch znaków, który identyfikuje plik, podając drogę przez strukturę katalogów do pliku. Syntaktycznie, ścieżka składa się z indywidualnych nazw katalogów i nazwy pliku, oddzielonych znakiem / (slash). Na przykład, w ścieżce /usr/local/font, pierwszy slash oznacza katalog główny (root). Następny element, usr, jest podkatalogiem root, local jest podkatalogiem usr, a font jest plikiem lub podkatalogiem w katalogu local. To czy font jest zwykłym plikiem czy katalogiem nie może być odczytane ze ścieżki. Ścieżki UNIX ma zarówno absolutne jak i względne nazwy ścieżkowe. Ścieżki absolutne zaczynają się od katalogu głównego i w związku z tym pierwszy znak to /, np. /usr/local/font. Ścieżki względne zaczynają się od katalogu bieżącego, który jest parametrem procesu używającego dostępu do pliku lub katalogu. Więc local/font oznacza plik lub katalog font w katalogu local w bieżącym katalogu, którym może (lub nie) być katalog /usr. 7/112

8 System plików Linki Plik może być znany pod więcej niż jedną nazwą w katalogu/ach. Takie wielokrotne referencje nazywamy dowiązaniami (links), przy czym wszystkie dowiązania są traktowane jednakowo przez system operacyjny. UNIX ma też dowiązania symboliczne (symbolic links), które są plikami zawierającymi nazwę innego pliku. Te dwa rodzaje dowiązań są nazywane inaczej twardymi i miękkimi. Dowiązania miękkie (symboliczne), w odróżnieniu od twardych, mogą wskazywać na katalogi i mogą przekraczać granice systemu plików. "." Nazwa pliku. w danym katalogu jest twardym dowiązaniem do tego katalogu. ".." Nazwa pliku.. jest twardym dowiązaniem do katalogu nadrzędnego. Tak więc, jeśli bieżącym katalogiem jest /home/lm/programy, to../bin/wdf odnosi się do /home/lm/bin/wdf. Urządzenia Fizyczne urządzenia mają swoje nazwy w systemie plików. Te tzw. pliki specjalne są traktowane przez jądro jako interfejsy urządzeń, tym niemniej są udostępniane użytkownikom za pomocą tych samych funkcji systemowych jakie dotyczą zwykłych plików. Katalog /dev typowo zawiera pliki specjalne urządzeń, takie jak /dev/console, /dev/lp0, /dev/mt0, /dev/null, itd. 8/112

9 Zwyczajowy układ katalogów UNIX/Linux 9/112

10 Zwyczajowy układ katalogów Typowa instalacja system UNIX/Linux posiada m.in. następujące katalogi: / katalog główny (root). Tu zaczyna się drzewo katalogów, które zwykle zawiera małą liczbę podkatalogów. /bin zawiera pliki binarne głównych programów systemowych, wymaganych do startu systemu i poleceń (komend) UNIX-a. /kernel binarny ładowalny obraz systemu operacyjnego UNIX /boot zawiera jądro Linux-a, początkowy obraz dysku RAM (sterowniki wymagane w czasie startu systemu) i program ładujący (boot loader). Ważne pliki: /boot/grub/grub.conf lub menu.lst, używane do konfiguracji programu ładującego /boot/vmlinuz - jądro Linux-a /dev zawiera pliki specjalne urządzeń, takie jak /dev/console, /dev/lp0, /dev/mt0, /dev/null, /dev/sda, itd. W tym katalogu jądro przechowuje listę znanych sobie i obsługiwanych urządzeń. /etc zawiera pliki i programy administracyjne i konfiguracyjne, plik haseł. Ponadto zawiera zbiór skryptów powłoki, które uruchamiają usługi systemowe w czasie startu systemu. Cała zawartość tego katalogu ma postać plików tekstowych. Ważne pliki: /etc/crontab - definiuje kiedy mają się uruchamiać zadania automatycznie realizowane. /etc/fstab - tabela urządzeń przechowujących dane (dysków) i ich punktów montowania. /etc/passwd - lista kont użytkowników. /home Normalnie każdy użytkownik posiada swój 10/112 katalog domowy w katalogu /home. Zwykli

11 Zwyczajowy układ katalogów /lib zawiera pliki biblioteczne współdzielone przez główne programy systemowe, podobnie jak pliki DLL w systemie Windows. Są to biblioteki funkcji języka C, Pascal, FORTRAN, itd.; mogą one też wystąpić w /usr/lib lub /usr/local/lib. /usr/local zawiera programy nie wchodzące w skład dystrybucji, ale używane przez różnych użytkowników. Programy kompilowane ze źródeł są normalnie instalowane w /usr/local/bin. W nowo zainstalowanym systemie ten katalog jest pusty, aż do momentu instalacji oprogramowania przez administratora /usr/sbin zawiera pozostałe programy do administrowania systemem. /usr/share zawiera wszystkie dane współdzielone przez programy zainstalowane w /usr/bin. Obejmują one domyślne pliki konfiguracyjne, ikony, tła ekranu, dźwięki, itd. Jako że większość zainstalowanych programów posiada swoją dokumentację, katalog /usr/share/doc przechowuje pliki dokumentacji podzielone według programów. /var z wyjątkiem /tmp i /home, katalogi omawiane dotąd były względnie statyczne, tzn., ich zawartość zmieniała się rzadko. Katalog /var jest przeznaczony na dane podlegające częstym zmianom, np. pliki baz danych, poczty elektronicznej, przeglądarek internetowych, itp. /var/log zawiera pliki logów systemowych, rejestrujących różne działania i zdarzenia występujące w systemie. Są one ważne i powinny być okresowo sprawdzane. Najbardziej istotnym jest /var/log/messages, gdzie zapisywane są rekordy dotyczące zdarzeń na poziomie systemu (np. awarii). Ze względów bezpieczeństwa, niektóre systemy wymagają uprawnień administratora dla uzyskania dostępu do tych zasobów. Wszystkie konwencje dotyczące lokalizacji plików i katalogów były zdefiniowane przez programistów i programy; jądro wymaga tylko istnienia /etc/init do inicjalizacji procesu terminala potrzebnego do udostępnienia użytkownikowi 11/112

12 Polecenia UNIX-a UNIX posiada rozbudowany zestaw poleceń, umożliwiających nie tylko manipulację plikami i danymi, ale i środowiskiem użytkownika. Polecenie składa się z nazwy i argumentów (opcji, nazw plików i/lub innych wyrażeń), a kończy się naciśnięciem klawisza ENTER (lub RETURN). W działaniu polecenie UNIX-a są podobne do czasowników języka angielskiego, przeważnie w formie skróconej, cp oznacza copy. Opcje działają jako przysłówki (adverbs), modyfikując działanie polecenia, a nazwy plików i wyrażenia są obiektami podlegającymi działaniu. Ogólna postać polecenia UNIX-a: nazwa [-flagi] [opcje] nazwapliku/wyrażenie Nawiasy kwadratowe obejmujące flagi i opcje oznaczają, że są one opcjonalne (występują jeśli chcemy użyć konkretnej flagi/opcji). Flagi nie muszą być podane oddzielnie (każda z poprzedzającym znakiem -). Można je podać kolejno wszystkie za jednym znakiem -. Wydając polecenia UNIX, należy stosować się do reguł: polecenia rozróżniają wielkość liter, choć większość używa małych liter polecenia mogą być wprowadzone tylko z linii poleceń linia polecenia kończy się naciśnięciem klawisza RETURN opcje poleceń występują po znaku - (minus) wiele poleceń akceptuje wiele (nie raz bardzo) opcji. 12/112

13 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@arch:~% 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 katalog13/112 domowy; tylko w nim normalny użytkownik

14 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@arch:~% cd.. lm@arch:/home% cd lm lm@arch:~% cd Downloads lm@arch:~/downloads% cd /home/lm/downloads lm@arch:~/downloads% Istnieją skrótowe notacje: lm@arch:~/apps% cd lm@arch:~% zmienia katalog bieżący na domowy lm@arch:/home% cd - /home/lm/apps lm@arch:~/apps% zmienia katalog bieżący na poprzedni katalog bieżący lm@arch:~/apps% cd ~lm lm@arch:~% zmienia katalog bieżący na katalog domowy użytkownika lm. 14/112

15 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/112

16 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@arch:~/tests% ls IAS.png sources.list texts lm@arch:~/tests% Aby wyświetlić zawartość wybranego katalogu (tests): lm@arch:~% ls tests IAS.png sources.list texts lm@arch:~% Aby wyświetlić zawartość wielu wybranych katalogów (/home /usr /tmp): lm@arch:~% ls /home /usr /tmp lm@arch:~%... Można określić format wyświetlania, np. rozszerzony, by pokazać szczegółowe parametry plików: lm@arch:~% 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 16/112

17 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 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 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/112

18 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 [4] 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/112

19 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@arch:~/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@arch:~/tests% file texts texts: ASCII text lm@arch:~/tests% file sources.list sources.list: symbolic link to /home/lm/sources.list lm@arch:~/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@arch:~/tests% less /etc/passwd 19/112

20 System plików - operacje plikowe Kopiowanie plików Używając plecenia cp kopiujemy plik passwd z katalogu /etc do katalogu bieżącego: lm@arch:~/tests% cp /etc/passwd. lm@arch:~/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@arch:~/tests% cp -v /etc/passwd. /etc/passwd ->./passwd lm@arch:~/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 Unix-a wie co robi. Aby uniknąć tego typu sytuacji, należy użyć opcji -i (tryb interaktywny): lm@arch:~/tests% cp -i /etc/passwd. cp: overwrite./passwd? n # n zablokuje wykonanie polecenia lm@arch:~/tests% ls 20/112

21 System plików - operacje plikowe Tworzenie katalogów Polecenie mkdir jest przeznaczone do tworzenia katalogu, lub katalogów (akceptuje wiele argumentów): lm@arch:~/tests% mkdir dir1 dir2 lm@arch:~/tests% ls -F 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). lm@arch:~/tests% ls -F dir1/ dir2/ file IAS.png passwd lm@arch:~/tests% mkdir dir3 lm@arch:~/tests% cp file dir3 lm@arch:~/tests% ls dir3 file lm@arch:~/tests% rm dir3 rm: cannot remove dir3 : Is a directory lm@arch:~/tests% rm -ri dir3 rm: descend into directory dir3? y rm: remove regular file dir3/file? y rm: remove directory dir3? y Pozostałe istotne opcje to: -i zatwierdzanie przed usuwaniem każdego elementu -I jednokrotne zatwierdzanie przed usuwaniem więcej niż 3 elementów, lub usuwaniem rekurencyjnym. Mniej pedantyczny sposób niż -i, ale w pewnym stopniu chroniący przez pomyłkami -v ( verbose) informowanie o 21/112 podejmowanych działaniach

22 System plików - operacje plikowe Przenoszenie i zmiana nazwy plików lm@arch:~/tests% ls -F dir1/ dir2/ IAS.png passwd texts lm@arch:~/tests% mv texts file lm@arch:~/tests% ls -F dir1/ dir2/ file IAS.png passwd lm@arch:~/tests% mv file dir1 lm@arch:~/tests% ls -F dir1/ dir2/ IAS.png passwd lm@arch:~/tests% ls dir1 file lm@arch:~/tests% mv dir1/file dir2 lm@arch:~/tests% ls dir1 lm@arch:~/tests% ls dir2 file lm@arch:~/tests% mv dir2/file. lm@arch:~/tests% ls dir2 lm@arch:~/tests% ls -F dir1/ dir2/ file IAS.png passwd 22/112

23 System plików - operacje plikowe Przenoszenie i zmiana nazwy katalogów lm@arch:~/tests% ls -F dir1/ dir2/ file IAS.png passwd lm@arch:~/tests% mv file dir1 lm@arch:~/tests% mv dir1 dir2 lm@arch:~/tests% ls -F dir2/ IAS.png passwd lm@arch:~/tests% ls -F dir2 dir1/ lm@arch:~/tests% mv dir2/dir1. lm@arch:~/tests% mv dir1/file. lm@arch:~/tests% mv file dir1 lm@arch:~/tests% ls -F dir1/ dir2/ IAS.png passwd lm@arch:~/tests% mv dir1 dir2 lm@arch:~/tests% ls -F dir2/ IAS.png passwd lm@arch:~/tests% ls -F dir2 dir1/ lm@arch:~/tests% ls dir2/dir1 file lm@arch:~/tests% mv dir2/dir1. lm@arch:~/tests% mv dir1/file. 23/112 UWAGA: ponieważ katalog dir2 istniał, polecenie mv dir1 dir2 przeniosło dir1 do dir2. Gdyby dir2 nie istniał, polecenie mv zmieniłoby nazwę katalogu dir1 na dir2.

24 System plików - dowiązania twarde i symboliczne Dowiązania twarde (hard links) są pierwotnym 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 ścieżkę 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ą zwykle nie odróżniane. Na przykład, przy zapisie do dowiązania, w istocie wykonujemy zapis do pliku przez nie reprezentowanego. Natomiast 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 24/112

25 System plików - tworzenie dowiązań twardych lm@arch:~/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@arch:~/tests% ln file file-hard lm@arch:~/tests% ls -lih total 16K drwxrwxr-x 2 lm lm 4.0K Oct 16 11:46 dir drwxrwxr-x 2 lm lm 4.0K Oct 16 11:46 dir rw-rw-r-- 2 lm lm 18 Oct 12 10:55 file rw-rw-r-- 2 lm lm 18 Oct 12 10:55 file-hard lm@arch:~/tests% cat file 1st line 2nd line lm@arch:~/tests% cat file-hard 1st line 2nd line lm@arch:~/tests% rm file lm@arch:~/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 25/112 dir2

26 System plików - tworzenie dowiązań symbolicznych do plików lm@arch:~/tests% ls -lih total 16K drwxrwxr-x 2 lm lm 4.0K Oct 16 11:46 dir drwxrwxr-x 2 lm lm 4.0K Oct 16 11:46 dir rw-rw-r-- 2 lm lm 18 Oct 12 10:55 file lm@arch:~/tests% ln -s file file-symb lm@arch:~/tests% ls -lih total 16K drwxrwxr-x 2 lm lm 4.0K Oct 16 12:35 dir drwxrwxr-x 2 lm lm 4.0K Oct 16 11:46 dir rw-rw-r-- 2 lm lm 18 Oct 12 10:55 file lrwxrwxrwx 1 lm lm 4 Oct 16 12:34 file-symb -> file lm@arch:~/tests% ln -s../file dir1/file-symb lm@arch:~/tests% ls -lih dir1 total lrwxrwxrwx 1 lm lm 7 Oct 16 12:35 file-symb ->../file 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, 26/112

27 System plików - tworzenie dowiązań symbolicznych do katalogów lm@arch:~/tests% ln -s dir1 dir1-symb lm@arch:~/tests% ls -lih total 12K drwxrwxr-x 2 lm lm 4.0K Oct 16 12:35 dir lrwxrwxrwx 1 lm lm 4 Oct 16 13:00 dir1-symb -> dir rw-rw-r-- 1 lm lm 18 Oct 12 10:55 file lm@arch:~/tests% mv file dir1-symb lm@arch:~/tests% ls -lih total 8.0K drwxrwxr-x 2 lm lm 4.0K Oct 16 12:35 dir lrwxrwxrwx 1 lm lm 4 Oct 16 13:00 dir1-symb -> dir1 lm@arch:~/tests% ls -lih dir1 total 4.0K rw-rw-r-- 1 lm lm 18 Oct 12 10:55 file lm@arch:~/tests% ls -lih dir1-symb lrwxrwxrwx 1 lm lm 4 Oct 16 13:00 dir1-symb -> dir1 lm@arch:~/tests% cd dir1-symb lm@arch:~/tests/dir1-symb% ls file lm@arch:~/tests/dir1% cd.. lm@arch:~/tests% mv dir1 dir3 lm@arch:~/tests% ls -lih total 8.0K 27/112

28 System plików - dowiązania symboliczne Tworząc dowiązania symboliczne można użyć ścieżek bezwzględnych: lm@arch:~/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. Istotnym 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/112

29 System plików - używanie poleceń 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, itd. 2 polecenie wbudowane w powłokę. Powłoki, np. bash zawierają wbudowane polecenia (te najczęściej wykorzystywane) (shell builtins). Przykładem są polecenia cd, pwd, type, help, alias, shift, exit, itd. 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 na bazie innych poleceń. Istnieją polecenia służące do dostarczania użytkownikowi informacji o (innych) poleceniach [4]: 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 29/112

30 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@arch:~% type type type is a shell builtin lm@arch:~% type ls ls is aliased to ls --color=auto lm@arch:~% type cd cd is a shell builtin lm@arch:~% 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@arch:~% which which /usr/bin/which lm@arch:~% which ls /bin/ls lm@arch:~% which cd lm@arch:~% which cp /bin/cp which można użyć tylko w odniesieniu do30/112 plików wykonywalnych, nie można do

31 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@arch:~% 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@arch:~% help ls bash: help: no help topics match ls. Try help help or man -k ls or info l lm@arch:~% 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@arch:~% man ls LS(1) User Commands LS(1) 31/112

32 System plików - używanie poleceń apropos wyświetlanie poleceń powiązanych Można przeszukiwać całą dokumentację poleceń (man pages), aby odnaleźć polecenia o podobnym zastosowaniu. lm@arch:~% 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@arch:~% 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@arch:~% whatis ls ls (1) - list directory contents lm@arch:~% 32/112

33 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: lm@arch:~% type goback # sprawdzanie czy goback jest uzywane bash: type: goback: not found lm@arch:~% alias goback= cd tests; pwd; cd - # tworzenie alias-u lm@arch:~% type goback # uzycie polecenia type by zobaczyc definicje alias-u goback is aliased to cd tests; pwd; cd - lm@arch:~% goback # wykonanie! /home/lm/tests /home/lm lm@arch:~% unalias goback # usuniecie alias-u lm@arch:~% goback goback: command not found 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@arch:~% alias alias egrep= egrep --color=auto alias fgrep= fgrep --color=auto alias grep= grep --color=auto 33/112

34 Sesje powłoki Powłoka może być uruchomiona w różny sposób i w związku z tym funkcjonować odmiennie: 1 Jako interaktywna powłoka logowania, z opcją login. Interaktywność oznacza możliwość wprowadzania poleceń po pomyślnym zalogowaniu się do systemu (po podaniu loginu i hasła). Pliki wejściowe: /etc/profile ~/.bash_profile, ~/.bash_login lub ~/.profile : pierwszy z tych plików jest wczytany i zinterpretowany ~/.bash_logout : interpretowany przy wyjściu. 2 Jako interaktywna powłoka bez możliwości logowania, otwierana bez konieczności logowania do systemu, które pewnie odbyło się wcześniej. Pliki wejściowe: ~/.bashrc, do którego zwykle odwołuje się ~/.bash_profile 3 Nie-interaktywna, uruchamiana na potrzeby wykonania skryptów, które programuje się w celu wykonania ściśle określonych zadań. Pliki wejściowe: definiowane przez zmienną środowiskową BASH_ENV 4 Jako rezultat polecenia sh. Powłoka bash emuluje działanie historycznej powłoki Bourne, spełniając równocześnie wymagania standardu POSIX. Pliki wejściowe: /etc/profile ~/.profile 5 Zdalnie. Pliki wejściowe dla programu rsh: ~/.bashrc. W tym trybie, używając narzędzi takich jak 34/112 rlogin, telnet, rsh czy rcp, należy brać pod uwagę

35 Składnia powłoki i sposób interpretacji poleceń Jeśli wprowadzono nie zakomentowane (znakiem #) polecenie, powłoka wczytuje je i dzieli na słowa i operatory, stosując przy tym zasady cytowania (quoting rules) w celu określenia znaczenia każdego znaku. Następnie te tzw.tokeny (słowa i operatory) są tłumaczone na polecenia i inne konstrukcje, które zwracają kod zakończenia, przydatny do dalszego przetwarzania lub sygnalizacji błędów. Przebieg procesu: Powłoka wczytuje ciąg znaków wprowadzonych z pliku, łańcucha lub konsoli. Wczytany łańcuch jest dzielony na słowa i operatory, zgodnie z zasadami cytowania. Tokeny są oddzielone metaznakami (metacharacters): (\! ' " ' < > ; <Space> <Tab> <Newline> ( ) [ ]? # $ ^ & * =). Wykonuje się rozwijanie aliasów. Powłoka analizuje i rozkłada (parsuje) tokeny. Powłoka wykonuje różne rozwinięcia tokenów, generując na tej podstawie listy nazw i argumentów. Wykonuje się przekierowanie wejścia i/lub wyjścia. Wykonuje się polecenie. Opcjonalnie powłoka czeka na zakończenie polecenia i zwrócenie statusu. 35/112

36 Zmienne środowiskowe Stałe i zmienne Kiedy powłoka napotyka nową nazwę zmiennej, automatycznie tworzy zmienną i inicjalizuje ją (nadaje wartość początkową), w odróżnieniu od wielu języków programowania, w których zmienne muszą być deklarowane przed użyciem. Zasady dotyczące nazw zmiennych: Nazwy zmiennych składają się ze znaków alfanumerycznych (liter i cyfr) i znaku podkreślenia pierwszy znak musi być literą lub znakiem podkreślenia odstępy i znaki interpunkcyjne nie są dopuszczalne. Zasadniczo powłoka nie rozróżnia zmiennych i stałych; jest to sprawą podejścia programistów. Zgodnie z konwencją nazwy stałych pisane są dużymi literami, a nazwy zmiennych - małymi. UWAGA: powłoka pozwala wymusić niezmienność (immutability) stałych za pomocą wbudowanego polecenia declare z opcją -r (read-only). Na przykład, gdyby przypisać zmiennej TITLE wartość w sposób: declare -r TITLE="Dr inz." powłoka nie pozwoli na zmianę wartości TITLE. Przypisywanie wartości do zmiennych i stałych Przypisanie polega na zapisie wartości w obszarze pamięci zajmowanym przez zmienną/stałą: zmienna=wartosc 36/112

37 Zmienne środowiskowe Odmiennie od większości języków programowania, powłoka nie śledzi typu danych podstawianych do zmiennych, lecz traktuje je jako łańcuchy znaków. Można jedynie wymusić podstawienie do zmiennych całkowitych, stosując polecenie declare z opcją -i. UWAGA: nie może być spacji po obu stronach znaku =. lm@arch:~% nazwa=luc # podstaw "Luc" do zmiennej nazwa lm@arch:~% echo $nazwa Luc lm@arch:~% PI= # podstaw do zmiennej PI lm@arch:~% echo PI # brak $ przed nazwa zmiennej! PI lm@arch:~% echo $PI lm@arch:~% b="a string" # spacje musza wystepowac w cudzyslowach lm@arch:~% c="nazywam sie $nazwa" # rozwijanie zmiennej (zastepowanie wartoscia lm@arch:~% echo $c Nazywam sie Luc lm@arch:~% d=$(ls Hello*) # podstawienie polecenia lm@arch:~% echo $d HelloWorld HelloWorld~ lm@arch:~% e=$((5 * 7)) lm@arch:~% echo $e 35 lm@arch:~% unset PI # rozwijanie wyrazenia arytmetycznego # usuwanie zmiennej PI 37/112

38 Cytowanie znaków Wiele znaków i słów ma specjalne znaczenie w pewnych kontekstach. Cytowanie stosuje się by uniknąć uwzględniania specjalnego znaczenia: cytowanie znosi specjalne znaczenie pojedynczych znaków, słów i ekspansję parametrów. Znaki maskujące (escape characters) Znak ten stosuje się by zmienić znaczenie pojedynczego znaku specjalnego występującego bezpośrednio za znakiem maskującym. W powłoce bash takim znakiem jest backslash \. Znosi on specjalne znaczenie następnego znaku, przywracając jego literalny sens, za wyjątkiem znaku nowej linii. Jeśli za znakiem \ występuje znak nowej linii, oznacza on kontynuację długiego polecenia w następnej linii. lm@arch:~% name=luc # podstaw "Luc" do zmiennej name lm@arch:~% echo $name # ekspansja zmiennej aktywna Luc lm@arch:~% echo \$name # ekspansja zmiennej zniesiona $name Apostrofy (single quotes) Apostrofy stosuje się by znieść specjalne znaczenie wszystkich znaków objętych nimi. Apostrofy nie mogą wystąpić wewnątrz apostrofów, nawet poprzedzone znakiem \. Kontynuując poprzedni przykład: lm@arch:~% echo $name # ekspansja zmiennej zniesiona $name 38/112

39 Cytowanie znaków Cudzysłowy (double quotes) Wewnątrz cudzysłowów zachowane jest podstawowe (literalne) znaczenie znaków, z wyjątkiem znaku dolara $, odwróconych apostrofów ` ` i znaku \. Znak dolara $ i odwrócone apostrofy zachowują specjalne znaczenie, wcześniej dyskutowane. Odwrócony ukośnik \ zachowuje swoje specjalne znaczenie tylko gdy za nim jest $, `, ", \ lub znak nowej linii. Odwrócone ukośniki, po których występują wymienione znaki, są usuwane z wejścia. Odwrócone ukośniki poprzedzające inne znaki (nie mające specjalnego znaczenia) są pozostawiane do interpretacji przez powłokę. Cudzysłów może być zacytowany przez poprzedzenie go znakiem \. lm@arch:~% date= lm@arch:~% echo "$date" lm@arch:~% echo "`date`" # ekspansja polecenia dziala Tue Oct 21 10:53: lm@arch:~% echo "I d say: \"Why?\"" # cytowanie cudzuyslowu I d say: "Why?" lm@arch:~% echo "\" # pojedynczy backslash oznacza kontynuacje w nastepnej lin > # tu kontynuujemy lm@arch:~% echo "\\" # utrata specjalnego znaczenia znaku \ \ 39/112

40 Rozwijanie elementów Po rozdzieleniu polecenia na elementy (tokeny), odbywa się rozwijanie (ekspansja) elementów. Kolejno rozwijane są: 1 nawiasy (brace expansion) 2 tylda (tilde expansion) 3 parametry i zmienne (shell parameter and variable expansion) 4 polecenia (command substitution) 5 wyrażenia arytmetyczne (arithmetic expansion) 6 przekierowanie procesów (process substitution), możliwe w systemach obsługujących nazwane potoki 7 słowa (word splitting) z użyciem znaków rozdzielających (separatorów) zdefiniowanych w zmiennej środowiskowej IFS (Internal Field Separator). Domyślnie zmienna IFS zawiera znaki spacji, nowej linii i tabulacji, ale można ją zmodyfikować stosownie do potrzeb, np. dodając znak \ 8 nazwy plików (file name expansion) 40/112

41 Ekspansja nazw plików Po ponownym podziale słów, o ile opcja -f jest nieaktywna, bash sprawdza wystąpienie znaków "*", "?" i "[". Jeśli słowo zawiera jeden z tych znaków to jest traktowane jako wzorzec. Słowo takie jest zastępowane przez alfabetycznie posortowaną listę nazw plików zgodnych z wzorcem. Jeśli nie ma plików o tych nazwach i opcja powłoki nullglob jest nieaktywna, oryginalne słowo pozostaje niezmienione. Jeśli opcja nullglob jest aktywna, ale nie ma plików, oryginalne słowo jest usunięte. Jeśli opcja nocaseglob jest aktywna, porównanie wzorca z nazwami plików nie uwzględnia wielkości liter. Znaczenie symboli definiujących wzorzec: * oznacza grupę 0 lub więcej dowolnych znaków.? oznacza dokładnie jeden znak (dowolny). [...] ciąg znaków zawarty w nawiasach prostokątnych oznacza wystąpienie jednego z tych znaków w tym miejscu słowa. Na przykład, nazwa k[aoi]t, zostanie rozwinięta w listę słów kat, kot, kit. Jeśli bezpośrednio za otwierającym nawiasem [ występuje znak ^, warunek ulega odwróceniu; więc [^aoi] oznacza dowolny znak poza a, o, i. Można zdefiniować zakres, n.p. [a-x], oznaczający dowolny znak między a i x. Dopasowanie znaków uwzględnia wielkość liter, więc aby dopuścić wystąpienie dowolnej litery należy użyć zakresu [a-za-z]. Przykłady: *.txt reprezentuje listę nazw plików kończących się na.txt *.[hc] reprezentuje listę nazw plików kończących się na.h lub.c a?? reprezentuje listę trzyznakowych nazw plików i zaczynających się na a 41/112

42 Rozwijanie (ekspansja) nawiasów Rozwijanie nawiasów jest to mechanizm generowania dowolnych łańcuchów, podobny do mechanizmu ekspansji nazw plików, ale generowane nazwy nie muszą istnieć. Wzorce ekspansji nawiasów zawierają opcjonalną preambułę, dalej w nawiasach { } można podać ciąg łańcuchów oddzielonych przecinkami lub wyrażenie sekwencyjne, po czym opcjonalnie może wystąpić dopisek (postscript). Ekspansje nawiasów mogą być zagnieżdżone. Wynik nie jest sortowany; kolejność wynika z kolejności wyliczenia elementów w nawiasach { }. Na przykład: lm@arch:~% echo beg{i,a,u}n begin began begun Preambuła jest napisem beg a dopisek to n. Ekspansja nawiasów jest wykonywana przed innymi ekspansjami, a wszystkie znaki wykorzystywane w innych ekspansjach są zachowane w jej rezultacie. Operacja jest ściśle tekstowa. Przykłady wykorzystujące wyrażenia sekwencyjne: lm@arch:~% echo file{ }.txt file1.txt file3.txt file5.txt lm@arch:~% mkdir.dir{a..d..3}{ }.d lm@arch:~% ls -ad.d*.dira1.d.dira3.d.dird1.d.dird3.d 42/112

43 Ekspansja tyldy Jeśli słowo zaczyna się od znaku tyldy ~, wszystkie dalsze znaki aż do znaku / (jeśli występuje) lub separatora (np. spacji), są traktowane jako przedrostek tyldy (tilde-prefix). Typowe formy przedrostka: Gdy żaden znak przedrostka nie jest cytowany (czyli poprzedzony przez \), przyjmuje się że przedrostek reprezentuje nazwę użytkownika. Jeśli nazwa użytkownika jest pusta, przyjmuje się że tylda reprezentuje wartość zmiennej środowiskowej HOME. Jeśli zmienna HOME jest pusta, przyjmuje się że tylda reprezentuje katalog domowy bieżącego użytkownika, W przeciwnym razie, tylda reprezentuje katalog domowy użytkownika o podanej nazwie. Jeśli przedrostek jest ciągiem +, tylda reprezentuje wartość zmiennej środowiskowej PWD. Jeśli przedrostek jest ciągiem -, tylda reprezentuje wartość zmiennej środowiskowej OLDPWD, o ile istnieje. lm@arch:~% echo ~ /home/lm lm@arch:~% echo ~/doc /home/lm/doc lm@arch:~% echo ~root/doc /root/doc lm@arch:~% cd Downloads 43/112

44 Zastępowanie poleceń Zastępowanie poleceń pozwala na przekazanie rezultatu wykonania polecenia do zmiennej środowiskowej. Wystarczy umieścić polecenie wewnątrz odwróconych apostrofów ` ` (back quotes): lm@arch:~% MYDIR=`dirname /home/lm/foo.txt` lm@arch:~% echo $MYDIR /home/lm Alternatywna składnia podstawiania poleceń: lm@arch:~% MYDIR=$(dirname /home/lm/foo.txt) lm@arch:~% echo $MYDIR /home/lm Jak widać bash dostarcza wielu sposobów na wykonanie dokładnie tych samych działań. Używając podstawiania poleceń możemy umieścić dowolne polecenie lub strumień poleceń pomiędzy znakami ` ` lub $( ) i przypisać dzięki temu ich wynik do zmiennej środowiskowej lub użyć w wyrażeniu. Poniżej znajduje się przykład wykorzystania podstawiania poleceń w odniesieniu do strumieni: lm@arch:~% MYFILES=$(ls /etc grep pa) lm@arch:~% echo $MYFILES pam.d passwd 44/112

45 System plików - przekierowanie wejścia/wyjścia Przekierowanie wejścia/wyjścia polega na zmianie domyślnego dla polecenia źró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, umożliwiając dostarczenie danych dla programu z dowolnego pliku i wyprowadzenie rezultatów i komunikatów diagnostycznych do wybranego pliku dyskowego. 45/112

46 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@arch:~% ls -l /usr/bin > ls.txt lm@arch:~% ls -l ls.txt -rw-rw-r-- 1 lm lm Oct 19 11:44 ls.txt lm@arch:~% ls -l /user/bin > ls.txt ls: cannot access /user/bin: No such file or directory lm@arch:~% ls -l ls.txt -rw-rw-r-- 1 lm lm 0 Oct 19 11:50 ls.txt # rozmiar pliku = 0! Ponieważ drugie polecenie ls otrzymało złą nazwę katalogu /user/bin, na ekranie wyświetlony został komunikat o błędzie. Nie był on skierowany do pliku ls.txt, ponieważ ls nie wysyła komunikatów o błędach do stdout. Jak wszystkie dobrze napisane programy Unix-a, wysyła je do wyjścia diagnostycznego (stderr). A ponieważ 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@arch:~% ls -l /usr/bin > ls.txt lm@arch:~% ls -l ls.txt -rw-rw-r-- 1 lm lm Oct 19 11:58 ls.txt lm@arch:~% ls -l /usr/local >> ls.txt 46/112

47 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 ma deskryptor pliku 2, więc przekierowanie stderr realizuje się: lm@arch:~% ls -l /user/bin 2> ls-error.txt lm@arch:~% ls -l ls-error.txt -rw-rw-r-- 1 lm lm 55 Oct 19 12:14 ls-error.txt lm@arch:~% cat ls-error.txt ls: cannot access /user/bin: No such file or directory lm@arch:~% 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@arch:~% ls -l /user/bin 47/112

48 System plików - przekierowanie wejścia/wyjścia Przekierowanie standardowego wejścia Jednym z poleceń mogących używać stdin jest cat. Polecenie cat wczytuje zawartość jednego lub więcej plików i kopiuje na standardowe wyjście: cat ls.txt cat jest często używane do wyświetlania krótkich plików tekstowych. Ponieważ cat może akceptować wiele plików na wejściu, można go użyć do łączenia plików. Na przykład, jeśli odebrano długi plik podzielony na kilka części (file.txt.001, file.txt.002, file.txt.003), to można je połączyć poleceniem: cat file.txt.0* > file.txt Ponieważ nazwy wieloznaczne (wildcards) są rozwijane w porządku rosnącym, pliki składowe będą łączone w odpowiedniej kolejności. Jeśli wywołamy cat bez argumentów, to będzie realizowane czytanie ze standardowego wejścia, które jest normalnie związane z klawiaturą, stąd polecenie będzie wczytywać znaki z klawiatury. Jeśli wciśniemy Ctrl-d, to zostanie to zinterpretowane jako koniec strumienia wejściowego (EOF) związanego z wejściem standardowym. W wyniku tego cat skopiuje stdin na stdout, a użytkownik zobaczy kopię wprowadzonych znaków na konsoli. lm@arch:~% cat testowanie cat i stdin... # Ctrl-d testowanie cat i stdin... lm@arch:~% 48/112

49 System plików - przekierowanie wejścia/wyjścia Przekierowanie standardowego wejścia W związku z tym, polecenie cat może być stosowane do tworzenia plików tekstowych, na przykład: cat > file.txt co wczytuje linie tekstu wprowadzone do momentu naciśnięcia Ctrl-d i następnie zapisuje w pliku file.txt. Wykorzystując sposób obsługi standardowego wejścia w poleceniu cat (oprócz typowych argumentów będących plikami dyskowymi), można przekierować stdin: lm@arch:~% cat < file.txt # przekierowanie lm@arch:~% cat file.txt # ten sam efekt! Używając operatora przekierowania, zmieniliśmy źródło danych przekazywanych na standardowe wejście z klawiatury na plik file.txt. Rezultat jest identyczny jak przy użyciu pojedynczej nazwy pliku, stąd nie można mówić o postępie w notacji, a tylko o ilustracji samego mechanizmu. W przypadku innych poleceń użyteczność jest istotna. Przekierowanie wejścia daje korzyści, gdy chcemy zmienić źródło danych wejściowych do programu, który oczekuje wprowadzenia ich z stdin. Można wtedy wprowadzić je np. z pliku, jak w poniższym przykładzie - program myprog będzie wczytywał z pliku myin i zapisywał do pliku myout. lm@arch:~% myprog < myin > myout 49/112

50 System plików - przekierowanie wejścia/wyjścia Przetwarzanie potokowe (pipelining) Ponieważ polecenia mogą wczytywać dane przez standardowe wejście i wysyłać rezultaty na standardowe wyjście, możliwe staje się przetwarzanie potokowe (pipelining). Polega to na użyciu operatora potoku (kreska pionowa), dzięki czemu standardowe wyjście pewnego polecenia zostaje związane ze standardowym wejściem następnego polecenia: lm@arch:~/tests% ls -l /usr/bin less... Używając tej techniki, możemy wygodnie przeglądać rezultaty poleceń korzystających ze stdout, wykorzystując w tym celu polecenia używające stdin (jak less). Filtry Potoki są często używane do realizacji złożonych operacji na danych (niemożliwych do wykonania przez pojedyncze polecenie). Polecenia używane w ten sposób nazywa się często filtrami. Filtry wczytują dane wejściowe, przetwarzają je w ustalony sposób i wysyłają na swoje wyjście. Pierwszym z często wykorzystywanych jest polecenie sort. Zastosowano je do utworzenia posortowanej listy programów wykonywalnych w katalogach /bin i /usr/bin, po czym wyświetlono je poleceniem less: lm@arch:~/tests% ls -l /bin /usr/bin sort less Ponieważ dane wejściowe pochodziły z dwu katalogów, wyjście z polecenia ls składa się z dwu posortowanych list, po jednej dla każdego katalogu. Wprowadzając do potoku polecenie sort, otrzymano jedną posortowaną listę. 50/112

51 System plików - przekierowanie wejścia/wyjścia Filtry - używanie uniq aby wyświetlić lub pominąć powtarzające się linie Polecenie uniq jest często używane wspólnie z sort. uniq akceptuje posortowaną listę linii (ze stdin lub pliku dyskowego) i usuwa powtarzające się linie. Tak więc, by wyeliminować powtórzenia nazw plików występujących w katalogach tests i tests/dir1, należy dodać polecenie uniq do naszego potoku: lm@arch:~% ls -l tests tests/dir1 tests: total 12 drwxrwxr-x 2 lm lm 4096 Oct 20 22:26 dir1 drwxrwxr-x 2 lm lm 4096 Oct 16 14:15 dir2 -rw-rw-r-- 1 lm lm 18 Oct 12 10:55 file tests/dir1: total 4 -rw-rw-r-- 1 lm lm 18 Oct 20 22:23 file lm@arch:~/tests% ls -l tests tests/dir1 sort uniq less Polecenie uniq zostało tu zastosowane by wyeliminować powtórzenia nazw w liście posortowanej przez sort. Jeśli zależy nam na liście powtarzających się linii, należy użyć opcji -d dla uniq: lm@arch:~/tests% ls -l tests tests/dir1 sort uniq -d less 51/112

52 System plików - przekierowanie wejścia/wyjścia Filtry - używanie polecenia grep aby wyświetlić linie spełniające zadane kryterium grep jest zaawansowanym narzędziem do wyszukiwania wzorców w plikach, wywoływanym w następujący sposób: grep wzorzec [plik...] Jeśli grep znajdzie wzorzec w pliku, wyświetla linie w których on występuje. Wzorce które obsługuje grep mogą być proste (jednoznaczne ciągi znaków) lub złożone - nazywane wyrażeniami regularnymi (regular expressions). lm@arch:~% ls -l tests total 12 drwxrwxr-x 2 lm lm 4096 Oct 20 22:26 dir1 drwxrwxr-x 2 lm lm 4096 Oct 16 14:15 dir2 -rw-rw-r-- 1 lm lm 18 Oct 12 10:55 file lm@arch:~% ls -l tests grep dir drwxrwxr-x 2 lm lm 4096 Oct 20 22:26 dir1 drwxrwxr-x 2 lm lm 4096 Oct 16 14:15 dir2 Główne opcje polecenia grep: -i ( ignore-case) ignorowanie wielkości znaków zarówno we wzorcu jak i plikach wejściowych. -v ( invert-match) odwrócenie znaczenia wzorca, by otrzymać linie nie zawierające go. 52/112

53 Wyrażenia regularne Wyrażenia regularne są notacjami symbolicznymi, używanymi do identyfikacji wzorców w tekstach. Do pewnego stopnia przypominają one mechanizm wyszukiwania plików i katalogów z użyciem nazw wieloznacznych (wildcard). Wyrażenia regularne są obsługiwane prze wiele poleceń i większość języków programowania. Tu ograniczymy się do wersji definiowanej przez standard POSIX. Głównym programem udostępnianym obsługę wyrażeń regularnych jest grep. Nazwa grep pochodzi od global regular expression print. Zasadnicza funkcja grep to przeszukiwanie plików wejściowych pod kątem wyrażenia regularnego i wyświetlenie na wyjściu standardowym linii, które to wyrażenie zawierają. Polecenie grep jest wywoływane w następujący sposób: grep [opcje] regex [file...] gdzie regex jest wyrażeniem regularnym, a główne opcje to: -i ignorowanie wielkości znaków. Może być też użyte ignore-case. -v odwrócenie wzorca. Normalnie grep wyświetla linie zawierające wzorzec. Ta opcja pozwala wyświetlić linie nie zawierające wzorca. Może być też użyte invert-match. -c wyświetlanie ilości wystąpień wzorca (lub braku wystąpień dla opcji -v) zamiast samych linii. Może być też użyte count. -l wyświetlenie nazw plików zawierających wzorzec, zamiast linii. Może być też użyte files-with-matches. -L jak opcja -l, ale powoduje wyświetlenie nazw plików nie zawierających wzorca. Może być też użyte files-without-match. -n poprzedzanie każdej linii numerem w pliku. Może być też użyte line-number. 53/112

54 Wyrażenia regularne ls /bin grep zip bunzip2 bzip2 bzip2recover gunzip gzip Wyrażenie regularne zip jest poszukiwane i będzie znalezione, jeśli w linii zawierającej co najmniej 3 znaki wystąpią kolejno znaki z, i i p. Znaki w ciągu zip są traktowane literalnie (literal characters), tzn. reprezentują same siebie. Poza literałami, wyrażenia regularne mogą zawierać meta-znaki (metacharacters), które są używane do definiowania bardziej złożonych wzorców. Wśród meta-znaków występują: ^ $. [ ] { } -? * + ( ) \ wszystkie inne znaki są traktowane literalnie, z wyjątkiem backslash-a używanego do definiowania meta sekwencji, a także do zmiany znaczenia meta-znaków na literały. 54/112

55 Wyrażenia regularne Reprezentowanie dowolnego znaku Znak kropki może w wyrażeniu regularnym reprezentować dowolny, pojedynczy znak na pozycji na której występuje. Na przykład: lm@arch:~% ls /bin grep zip. bunzip2 bzip2 bzip2recover Zauważmy, że program gzip nie został wyświetlony, ponieważ kropka jako ostatni znak zwiększyła ilość znaków wyrażenia, a nazwa gzip nie posiada żadnego znaku po frazie zip. Kotwice Znaki ^ i $ są w wyrażeniach regularnych meta-znakami kotwicznymi (anchors). Oznacza to, że warunkują wystąpienie wzorca wtedy i tylko wtedy gdy znajduje się on na początku (^) lub na końcu linii ($): lm@arch:~% ls /bin grep ^grep grep lm@arch:~% ls /bin grep grep$ egrep fgrep grep 55/112

56 Wyrażenia regularne Wyrażenia w nawiasach kwadratowych Poza dopasowaniem każdego znaku, można sprawdzać wystąpienie pojedynczego znaku spośród pewnego ich zbioru, zawartego w nawiasach prostokątnych. W nawiasach tych można podać nawet znaki będące w innych kontekstach meta-znakami. lm@arch:~% ls /bin grep grep bzegrep bzfgrep bzgrep egrep fgrep grep zegrep zfgrep zgrep Definiując zbiór [ez], wybieramy dowolną nazwę zawierającą ciąg egrep lub zgrep : lm@arch:~% ls /bin grep [ez]grep bzegrep bzgrep egrep zegrep zgrep Zbiór może być złożony z dowolnej liczby znaków, a meta-znaki tracą specjalne znaczenie wewnątrz nawiasów. Są dwa przypadki, gdzie meta-znaki uzyskują nowe znaczenie. Znak (^) oznacza negację; znak minus (-) oznacza zakres znaków. 56/112

57 Wyrażenia regularne Wyrażenia w nawiasach kwadratowych Znak (^) oznacza negację tylko wtedy, gdy jest pierwszym w nawiasie kwadratowym; w pozostałych przypadkach jest traktowany literalnie. lm@arch:~% ls /bin grep [^ez]grep bzfgrep fgrep zfgrep Zakres znaków Jeśli chcemy odnaleźć nazwy plików zaczynające się od kolejnych małych liter i, j, k, moglibyśmy użyć poleceń: lm@arch:~% ls /bin grep ^[ijk] init-checkconf initctl2dot ip kbd_mode kill lm@arch:~% ls /bin grep ^[i-k] init-checkconf initctl2dot ip kbd_mode kill 57/112

58 Wyrażenia regularne Alternatywa Alternatywa pozwala zdefiniować zbiór wyrażeń używanych dla wzorca, podobnie do zbioru znaków w nawiasach kwadratowych. lm@arch:~% ls /bin grep -E (bze grep) bzegrep bzexe bzfgrep bzgrep egrep fgrep grep Aby stosować alternatywę łącznie z innymi elementami wyrażenia regularnego, używa się nawiasów okrągłych do separowania alternatywy: lm@arch:~% ls /bin grep -E ^(bze grep) bzegrep bzexe grep To wyrażenie pozwoli wyszukać nazwy plików, które zaczynają się od bze lub grep. 58/112

59 Wyrażenia regularne Kwantyfikator? - wystąpienie elementu zero lub jeden raz Ten kwantyfikator oznacza, że poprzedzający go element jest opcjonalny. Dla ilustracji, rozważmy sprawdzanie poprawności numeru rejestracyjnego samochodu zarejestrowanego w Krakowie lub powiecie krakowskim. Jest on poprawny, jeśli ma jedną z dwu form: KR nnnnn lub KRA nnnnn, gdzie n jest cyfrą. Wyrażenie regularne powinno mieć postać: ^(KRA?) ([0-9]{5})$ Wykonując poniższe instrukcje: lm@arch:~% echo "KR 28678" grep -E ^(KRA?) ([0-9]{5})$ KR lm@arch:~% echo "KRA 28678" grep -E ^(KRA?) ([0-9]{5})$ KRA lm@arch:~% echo "KRB 28678" grep -E ^(KRA?) ([0-9]{5})$ lm@arch:~% echo "KR28678" grep -E ^(KRA?) ([0-9]{5})$ lm@arch:~% echo "KR " grep -E ^(KRA?) ([0-9]{5})$ lm@arch:~% echo "KR 2867A" grep -E ^(KRA?) ([0-9]{5})$ otrzymujemy zgodność jedynie w dwu pierwszych przypadkach. W lewej części wyrażenia, po słowie KRA występuje znak zapytania aby określić opcjonalność znaku A. 59/112

60 Wyrażenia regularne Klasy znaków standardu POSIX Standard POSIX zawiera definicje klas znaków, ułatwiające stosowanie zakresów znaków. [:alnum:] - znaki alfanumeryczne. W kodzie ASCII odpowiadają one: [A-Za-z0-9] [:word:] - jak [:alnum:], ale z dodatkiem znaku podkreślenia [:alpha:] - znaki alfabetu. W kodzie ASCII odpowiadają one: [A-Za-z] [:blank:] - znaki odstępu i tabulacji. [:cntrl:] - znaki sterujące ASCII. Zawiera znaki ASCII od 0 do 31 i znak 127. [:digit:] - cyfry. W kodzie ASCII odpowiadają one: [0-9] [:upper:] - duże litery. [:lower:] - małe litery. [:graph:] - znaki widoczne. W kodzie ASCII odpowiadają one znakom 33 do 126. [:print:] - znaki drukowalne. Wszystkie z klasy [:graph:] i znak odstępu. [:punct:] - znaki interpunkcyjne. [:space:] - znaki odstępu, takie jak tabulacja, powrót karetki (carriage return), nowa linia (newline), tabulacja pionowa (vertical tab) i wysunięcie strony (form feed). 60/112

61 Wyrażenia regularne Kwantyfikator * - wystąpienie elementu zero lub więcej razy Podobnie do kwantyfikatora?, * oznacza element opcjonalny, jednak tu mogący wystąpić dowolną ilość razy. Dla ilustracji, rozważmy sprawdzanie czy napis jest zdaniem; tzn. czy zaczyna się od dużej litery, następnie zawiera dowolną ilość liter i odstępów, a kończy się kropką. Aby sprawdzić tą (bardzo prymitywną) definicję zdania, zastosujemy wyrażenie regularne: [[:upper:]][[:upper:][:lower:] ]*\. Wyrażenie składa się z trzech części: wyrażenia w nawiasach kwadratowych zawierającego klasę znaków [:upper:], wyrażenia w nawiasach kwadratowych zawierającego klasy znaków [:upper:], [:lower:] i odstęp, a także kropkę (literalnie - poprzedzoną znakiem \). Po drugiej części wyrażenia wystepuje meta-znak *, tak więc w zdaniu po dużej literze wystąpi dowolna ilość liter i odstępów. Wykonując poniższe instrukcje: lm@arch:~% echo "This is a sentence." grep -E [[:upper:]][[:upper:][:lower:] ]*\. This is a sentence. lm@arch:~% echo "this is a sentence." grep -E [[:upper:]][[:upper:][:lower:] ]*\. lm@arch:~% echo "This is a sentence" grep -E [[:upper:]][[:upper:][:lower:] ]*\. lm@arch:~% echo "This is 3 sentence." grep -E [[:upper:]][[:upper:][:lower:] ]*\. lm@arch:~% echo "This_is_a_sentence." grep -E [[:upper:]][[:upper:][:lower:] ]*\. otrzymujemy zgodność jedynie w pierwszym przypadku. 61/112

62 Wyrażenia regularne Kwantyfikator + - wystąpienie elementu jeden lub więcej razy Kwantyfikator + działa podobnie jak *, jednak wymaga co najmniej jednego wystąpienia poprzedzającego go elementu. Poniżej pokazano wyrażenie regularne, które będzie spełnione jedynie dla linii składających się z grup znaków alfabetu (słów), oddzielonych pojedynczym odstępem: ^([[:alpha:]]+?)+$ Wykonując poniższe instrukcje: lm@arch:~% echo "some words in a row" grep -E ^([[:alpha:]]+?)+$ some words in a row lm@arch:~% echo "some words in a row:" grep -E ^([[:alpha:]]+?)+$ lm@arch:~% echo "3 words in a row" grep -E ^([[:alpha:]]+?)+$ otrzymujemy ponownie zgodność jedynie w pierwszym przypadku. ZADANIA Numer ISBN może mieć dwie postacie: ISBN-13 - na przykład: ISBN-10 - na przykład: Skonstruować odp. wyrażenia regularne. 62/112

63 Wyrażenia regularne {} - wystąpienie elementu określoną ilość razy Meta-znaki { i } stosuje się do określenia minimalnej i maksymalnej ilości wystąpień. Są 4 sposoby ich użycia: {n} sprawdza poprzedzający element, jeśli występuje on dokładnie n razy. {n,m} sprawdza poprzedzający element, jeśli występuje on co najmniej n razy, ale nie więcej niż m razy. {n,} sprawdza poprzedzający element, jeśli występuje on n lub więcej razy. {,m} sprawdza poprzedzający element, jeśli występuje on nie więcej niż m razy. Na przykład, aby sprawdzić poprawność numerów telefonów, przy założeniu że dozwolone formaty to nn nnn-nn i (nn) nnn-nn, gdzie n jest cyfrą, można zastosować wyrażenie regularne: ^([0-9]{2} \([0-9]{2}\)) ([0-9]{3}-[0-9]{2})$ Wykonując poniższe instrukcje: lm@arch:~% echo "(88) " grep -E ^([0-9]{2} \([0-9]{2}\)) ([0-9]{3}-[0-9]{2})$ (88) lm@arch:~% echo " " grep -E ^([0-9]{2} \([0-9]{2}\)) ([0-9]{3}-[0-9]{2})$ lm@arch:~% echo "[88] " grep -E ^([0-9]{2} \([0-9]{2}\)) ([0-9]{3}-[0-9]{2})$ lm@arch:~% echo "8A " grep -E ^([0-9]{2} \([0-9]{2}\)) ([0-9]{3}-[0-9]{2})$ lm@arch:~% echo " " grep -E ^([0-9]{2} \([0-9]{2}\)) ([0-9]{3}-[0-9]{2})$ otrzymujemy zgodność jedynie w dwu pierwszych przypadkach. 63/112

64 Przetwarzanie łańcuchów znaków Podział łańcuchów Podział łańcucha na części jest często wykonywanym zadaniem. Na przykład, z pełnej ścieżki należy wyodrębnić samą nazwę pliku lub katalogu. Można to zakodować w bash-u, ale lepiej użyć standardowego polecenia basename UNIX-a: lm@arch:~% basename /home/lm/downloads/lecture_unix.pdf Lecture_UNIX.pdf lm@arch:~% basename /home/lm/downloads Downloads Powiązane z basename polecenie dirname zwraca drugą część ścieżki: lm@arch:~% dirname /home/lm/downloads/lecture_unix.pdf /home/lm/downloads lm@arch:~% dirname /home/lm/downloads /home/lm UWAGA: zarówno dirname jak i basename nie odwołują się do informacji w systemie plików; wykonują jedynie operacje na łańcuchach. 64/112

65 Przetwarzanie łańcuchów znaków Usuwanie początkowego fragmentu łańcucha Jeśli wymagane jest wykonanie bardziej zaawansowanych operacji łańcuchowych, należy skorzystać z wbudowanej w powłokę bash funkcjonalności ekspansji zmiennych (variable expansion), oferującej dodatkowe notacje wyodrębniania fragmentów. lm@arch:~% MYSTRING=firstfindit lm@arch:~% echo ${MYSTRING##*fi} ndit lm@arch:~% echo ${MYSTRING#*fi} rstfindit W pierwszym przykładzie użyto wyrażenia ${MYSTRING##*fi}. Wewnątrz ${ }, podano nazwę zmiennej środowiskowej, dwa znaki # i wzorzec ("*fi"). Stąd bash wyszukał w zmiennej MYSTRING zawierającej napis "firstfindit" najdłuższy występujący od początku łańcuch zgodny z wzorcem ("*fi"), po czym usunął go ze zwracanego rezultatu. Drugi przykład ilustruje podobne działanie, z tym że użyto pojedynczego znaku "#". bash usuwa najkrótszy fragment zgodny z wzorcem i zwraca jako rezultat ciąg pozostałych znaków. 65/112

66 Przetwarzanie łańcuchów znaków Usuwanie końcowego fragmentu łańcucha Aby usunąć końcowy fragment łańcucha zgodny z wzorcem stosuje się opcje ekspansji zmiennych % i %%, działające podobnie do opcji # i ##, ale powodujące oderwanie odpowiedniego fragmentu poczynając od końca łańcucha wejściowego. lm@arch:~% MYFILE=Lecture_UNIX.tar.gz lm@arch:~% echo ${MYFILE%.*} Lecture_UNIX.tar lm@arch:~% echo ${MYFILE%%.*} Lecture_UNIX Można zauważyć, że nie ma potrzeby stosowania znaku "*" we wzorcu gdy należy usunąć jednoznaczny fragment łańcucha: lm@arch:~% MYFILE=Lecture_UNIX.tar.gz lm@arch:~% echo ${MYFILE%.gz} Lecture_UNIX.tar Wybór dokładnie określonego fragmentu Aby udostępnić fragment o zadanej długości począwszy od pewnej pozycji, należy użyć innej postaci rozszerzonej ekspansji zmiennej. W tej formie podaje się numer (indeks) pierwszego znaku i ilość pobieranych znaków. lm@arch:~% PARTS="sh bash dash" lm@arch:~% echo ${PARTS:0:2} sh 66/112

67 Skrypty Skrypt powłoki (shell script) jest plikiem tekstowym zawierającym ciąg poleceń. Powłoka wczytuje zawartość tego pliku i wykonuje polecenia tak jak byłyby one wprowadzone bezpośrednio z linii poleceń [3]. Powłoka jest unikalna, jako że jest zarówno interfejsem do systemu i interpreterem języka skryptowego. Większość operacji możliwych do wykonania z linii poleceń można wykonać z poziomu skryptu, i odwrotnie. Przygotowanie skryptu Aby poprawnie przygotować i uruchomić skrypt, należy wykonać 3 czynności: Napisać skrypt. Ponieważ skrypty powłoki są plikami tekstowymi należy użyć edytora, najlepiej z podświetlaniem składni Nadać skryptowi atrybut wykonywalności, używając polecenia chmod Zapisać skrypt w katalogu, znajdującym się w ścieżce przeszukiwania (powłoka automatycznie przeszukuje określone katalogi w celu uruchomienia programów jeśli nie podano jawnie ich ścieżki). Pierwszy skrypt Zgodnie z tradycją programowania, pierwszy skrypt (wyjątkowo prosty) wyświetla napis Hello world. 1 #!/bin/bash 2 # This is our first script. 3 echo Hello world! 67/112

68 Skrypty Atrybut wykonywalności Następnie należy nadać plikowi skryptu atrybut wykonywalności za pomocą polecenia chmod: ls -l HelloWorld -rw-rw-r-- 1 lm users :07 HelloWorld lm@arch:~% chmod u=rwx,g=rw,o=r HelloWorld lm@arch:~% chmod u+x HelloWorld lm@arch:~% chmod 764 HelloWorld lm@arch:~% ls -l HelloWorld -rwxrw-r-- 1 lm users :07 HelloWorld Typowe dla skryptów atrybuty to: 755 jeśli każdy użytkownik ma być uprawniony do odczytu i wykonywania, a tylko właściciel powinien mieć prawo zapisu. Poza tym, należy zezwolić na odczyt skryptu. Lokalizacja pliku skryptu Po ustawieniu atrybutów, można próbować uruchomienia: lm@arch:~% HelloWorld bash: command not found: HelloWorld lm@arch:~%./helloworld Hello World! Jeśli przy wywoływaniu programu nie podano ścieżki, to system przeszukuje listę znanych katalogów. Na tej podstawie dociera do /bin/ls gdy użytkownik wpisał jedynie ls w linii poleceń. 68/112

69 Skrypty Funkcje powłoki Rozbudowane skrypty zwykle składają się z wielu operacji, które mogą być zapisane w postaci oddzielnych skryptów (w tym samym katalogu na ścieżce zdefiniowanej w zmiennej PATH), lub umieszczone jako funkcje powłoki (shell functions) w tekście skryptu. Funkcje powłoki są mini-skryptami - częściami większego skryptu, mogącymi działać jak samodzielne programy. Funkcje powłoki mają dwie równoważne formy: function nazwa { polecenia return } nazwa () { polecenia return } gdzie nazwa jest nazwą funkcji, a polecenia są ciągiem poleceń do wykonania. 1 #!/bin/bash 2 # A script with functions. 3 function F1 { 4 echo In F1! 5 return 6 } 7 F2 () { 8 echo In F2! 9 return 10 } 11 # Main program starts here 69/112 lm@arch:~%./shellfuns In F2! In F1!

70 Skrypty Zmienne lokalne Dotychczas prezentowane skrypty używały zmiennych globalnych, które są widoczne z każdego miejsca skryptu i istnieją przez cały czas jego działania. Ma to pewne zalety, ale nie kompensują one problemów, szczególnie w przypadku funkcji powłoki. Wewnątrz funkcji powłoki lepiej jest stosować zmienne lokalne, które są widoczne tylko wewnątrz funkcji i przestają istnieć po zakończeniu wykonywania się jej. 1 #!/bin/bash 2 # A script with local variables. 3 var=g1 4 function F1 { 5 local var 6 var=f1 7 echo "In F1: var=$var" 8 return 9 } 10 F2 () { 11 local var 12 var=f2 13 echo "In F2: var=$var" 14 return 15 } 16 # Main program starts here 17 echo "In Main: var=$var" 18 F2 19 F1 Dla zmiennych lokalnych programista może użyć nazw już istniejących poza daną funkcją powłoki (globalnych lub lokalnych), bez powodowania konfliktów. Uzyskuje się w ten sposób niezależność funkcji powłoki (możliwość użycia kodu w innych miejscach). Zmienne lokalne definiuje się poprzedzając nazwę zmiennej słowem local. Taka zmienna nie istnieje poza funkcją, w której ją zdefiniowano. lm@arch:~%./localvars In Main: var=g1 In F2: var=f2 In F1: var=f1 70/112

71 Skrypty - operacje plikowe Polecenie stat stat dostarcza szczegółowej statystyki na temat pliku lub katalogu, a nawet pliku specjalnego urządzenia. lm@arch:~% stat ~/.bashrc File: /home/lm/.bashrc Size: 551 Blocks: 8 IO Block: 4096 regular file Device: 803h/2051d Inode: Links: 1 Access: (0644/-rw-r--r--) Uid: ( 1000/ lm) Gid: ( 1000/ lm) Access: :41: Modify: :11: Change: :09: stat oczekuje podania tylko nazwy pliku, która może być poprzedzona opcjami, m.in. -cformat lub - w pełnej formie - --format=format, co wymusza użycie specjalnego formatu zamiast domyślnego (pokazanego wyżej). Przykłady opcji FORMAT: %n nazwa pliku %s całkowity rozmiar w bajtach %i numer węzła %m punkt montowania %h ilość twardych dowiązań %A prawa dostępu, human-readable %F typ pliku %b ilość bloków (patrz też %B) %B rozmiar bloków w B raportowanych przez %b %u identyfikator właściciela %U nazwa właściciela %x czas ostatniego dostępu, human-readable 71/112

72 Skrypty - operacje plikowe stat można użyć w skryptach, aby odczytać informacje dot. plików i ich systemów, a także ustawić zmienne środowiskowe zgodnie z wymaganiami. 1 #!/bin/bash 2 # Stat: retrieve file/dir info 3 display() { 4 echo "File name: $file_name" 5 echo "File owner: $file_owner" 6 echo "File size: $file_size" 7 echo "File inode: $file_inode" 8 echo "File access rights: $file_access_rights" 9 return 10 } 11 FILE1=~/.bashrc 12 file_name=$(stat -c%n "$FILE1") 13 file_owner=$(stat -c%u "$FILE1") 14 file_size=$(stat -c%s "$FILE1") 15 file_inode=$(stat -c%i "$FILE1") 16 file_access_rights=$(stat -c%a "$FILE1") 17 display 18 FILE2=/etc/bash/bashrc 19 file_name=$(stat -c%n "$FILE2") 20 file_owner=$(stat -c%u "$FILE2") 21 file_size=$(stat -c%s "$FILE2") 22 file_inode=$(stat -c%i "$FILE2") 23 file_access_rights=$(stat -c%a "$FILE2") 24 display lm@arch:~%./stat File name: /home/lm/.bashrc File owner: lm File size: 551 File inode: File access rights: -rw-r--r-- File name: /etc/bash/bashrc File owner: root File size: 2624 File inode: File access rights: -rw-r--r-- 72/112

73 Skrypty - operacje plikowe Wyrażenia plikowe Są to wyrażenia pozwalające określić status pliku: f1 -ef f2 f1 i f2 mają ten sam numer węzła (inode number) (dwa twarde dowiązania prowadzą do tego samego pliku) f1 -nt f2 f1 jest nowszy niż f2 f1 -ot f2 f1 jest starszy niż f2 -b file file istnieje i jest plikiem specjalnym (urządzenie blokowe) -c file file istnieje i jest plikiem specjalnym (urządzenie znakowe) -d file file istnieje i jest katalogiem -e file file istnieje -f file file istnieje i jest plikiem zwykłym -L file file istnieje i jest dowiązaniem symbolicznym -p file file istnieje i jest plikiem nazwanego potoku -r file file istnieje i ma atrybut odczytu dla użytkownika efektywnego (effective user) -s file file istnieje i ma rozmiar większy od zera -S file file istnieje i jest plikiem gniazda sieciowego -w file file istnieje i ma atrybut zapisu dla użytkownika efektywnego -x file file istnieje i jest wykonywalny dla użytkownika efektywnego. 73/112

74 Skrypty - kod zakończenia Kod zakończenia Polecenia (w tym skrypty i funkcje powłoki) zwracają do systemu wartość, nazywaną kodem zakończenia (exit status). Jest to wartość całkowita z przedziału od 0 do 255, oznaczająca poprawne (lub nie) wykonanie polecenia. Zgodnie z konwencją, zero oznacza sukces, a każda inna wartość jakiś błąd. Powłoka pozwala odczytać kod zakończenia: lm@arch:~% ls -l /usr/bin/ > ls.txt lm@arch:~% echo $? 0 lm@arch:~% ls -l /user/bin/ > ls.txt ls: cannot access /user/bin/: No such file or directory lm@arch:~% echo $? 2 Rozgałęzienia - instrukcja if Instrukcja if ma podstawową postać: if [ warunek ] then akcje fi gdzie warunek zawiera sekwencję poleceń warunkowych, a akcje to sekwencja poleceń wykonywanych warunkowo. Tu wykonuje się akcje o ile warunek jest prawdziwy, w 74/112

75 Skrypty - polecenie test Polecenie test Poleceniem najczęściej używanym razem z instrukcją if jest test. test wykonuje różne testy i porównania. Ma ono dwie równoważne formy: test wyrazenie i bardziej popularną: [ wyrazenie ] gdzie wyrazenie jest pewnym wyrażeniem dającym wynik prawda lub fałsz. Polecenie test zwraca wartość zero gdy wyrażenie jest spełnione, a wartość jeden gdy wyrażenie nie jest spełnione. Nowsza wersja polecenia test Nowe wersje powłok (np. bash) zawierają złożone polecenie, będące wzbogaconą wersją polecenia test. Składnia jest następująca: [[ wyrazenie ]] gdzie, podobnie do test, wyrazenie jest pewnym wyrażeniem dającym wynik prawda lub fałsz. Polecenie [[ ]] obsługuje wszystkie wyrażenia polecenia test, a dodatkowo nowe wyrażenie tekstowe: tekst =~ regex które zwraca wartość logicznej prawdy gdy tekst jest zgodny z wyrażeniem regularnym regex. Ma to wiele zastosowań, np. sprawdzenie zgodności danych z wzorcami. 75/112

76 Skrypty - polecenie test Skrypt demonstrujący wybrane wyrażenia plikowe. 1 #!/bin/bash 2 # TestFile: Evaluate the status of a file 3 FILE=~/.bashrc 4 if [ -e $FILE ] 5 then 6 if [ -f $FILE ] 7 then 8 echo "$FILE is a regular file." 9 fi 10 if [ -d $FILE ] 11 then 12 echo "$FILE is a directory." 13 fi 14 if [ -r $FILE ] 15 then 16 echo "$FILE is readable." 17 fi 18 if [ -w $FILE ] 19 then 20 echo "$FILE is writable." 21 fi 22 if [ -x $FILE ] 23 then 24 echo "$FILE is executable/searchable." 25 fi 26 else 27 echo "$FILE does not exist" 1 #!/bin/bash 2 # TestFile: Evaluate the status of a file 3 FILE=~/.bashrc 4 if [ -e $FILE ]; then 5 if [ -f $FILE ]; then 6 echo "$FILE is a regular file." 7 fi 8 if [ -d $FILE ]; then 9 echo "$FILE is a directory." 10 fi 11 if [ -r $FILE ]; then 12 echo "$FILE is readable." 13 fi 14 if [ -w $FILE ]; then 15 echo "$FILE is writable." 16 fi 17 if [ -x $FILE ]; then 18 echo "$FILE is executable/searchable." 19 fi 20 else 21 echo "$FILE does not exist" 22 exit 1 23 fi 24 exit 76/112 lm@arch:~%./testfile

77 Skrypty - polecenie if Można również zapisywać wielokrotne rozgałęzienia, używając ogólnej postaci instrukcji if,elif,else. Poniższa postać instrukcji if,elif,else sprawdza kolejne warunki i wykonuje instrukcje odpowiadające pierwszemu napotkanemu warunkowi o rezultacie true. Jeśli żaden z warunków nie zwraca true, wykonuje się akcje domyślne występujące po słowie "else", o ile istnieją, po czym kontynuuje się działanie skryptu wykonując polecenia za końcem instrukcji if,elif,else. if [ warunek1 ] then akcja1 elif [ warunek2 ] then akcja2 elif [ warunek3 ] then akcja3 else default fi 1 #!/bin/bash 2 # IfElifElse: test if,elif,else statement 3 ANSWER=yes 4 if [ $ANSWER == "yes" ]; then 5 echo "The answer is YES." 6 elif [ $ANSWER == "no" ]; then 7 echo "The answer is NO." 8 else 9 echo "The answer is UNKNOWN." 10 fi lm@arch:~%./ifelifelse The answer is YES. W przypadku wykluczających się warunków, zamiast if,elif,else można użyć instrukcji case. 77/112

78 Skrypty - polecenie if Operator porównania if [ -z "$myvar" ] then echo "zmienna myvar nie jest zdefiniowana" fi Czasami istnieje wiele sposobów wykonania operacji porównania. Na przykład, te fragmenty kodu działają identycznie: if [ "$myvar" -eq 3 ] then echo "myvar rowna sie 3" fi if [ "$myvar" = "3" ] # stosuj == zamiast then echo "myvar rowna sie $myvar" fi W pierwszym przykładzie wykorzystano operator porównania arytmetycznego, a w drugim operator porównania łańcuchów. 78/112

79 Skrypty - instrukcja case Instrukcja case Gdy istnieje wiele rozłącznych przypadków, zamiast rozgałęzienia z if/elif/else lepiej zastosować instrukcję case. Działa ona porównując wyrażenie występujące po słowie case z wzorcami występującymi bezpośrednio przed znakiem ). Gdy istnieje wzorzec zgodny z wyrażeniem, wykonywany jest ciąg poleceń, który występuje za danym wzorcem. Gdy nie ma wzorca zgodnego z wyrażeniem, nic się nie wykonuje. 1 #!/bin/bash 2 3 echo -n "Enter a number between 1 and 10 -> " 4 read NUM 5 6 case $NUM in 7 1) echo "You entered: one" 8 echo "I said: one!" 9 ;; 10 2) echo "You entered: two" ;; 11 3) echo "You entered: three" ;; 12 4) echo "You entered: four" ;; 13 5) echo "You entered: five" ;; 14 6) echo "You entered: six" ;; 15 7) echo "You entered: seven" ;; 16 8) echo "You entered: eight" ;; 17 9) echo "You entered: nine" ;; 18 10) echo "You entered: ten" ;; 19 *) echo "INVALID NUMBER!" ;; 20 esac 79/112 lm@arch:~% /Case Enter a number between 1 and 10 -> 1 You entered: one I said: one!

80 Skrypty - wyrażenia tekstowe Wyrażenia tekstowe (łańcuchowe) Do operacji na łańcuchach znaków stosuje się następujące wyrażenia: string łańcuch string nie jest pusty -n string długość łańcucha jest większa od zera -z string długość łańcucha jest równa zero s1 == s2 łańcuchy s1 i s2 są identyczne. Można stosować pojedyncze i podwójne znaki równości, ale preferowane są podwójne s1!= s2 łańcuchy s1 i s2 nie są identyczne s1 > s2 gdy łańcuchy są posortowane, s1 wystąpi po s2 s1 < s2 j.w., s1 wystąpi przed s2 Na przykład: 1 #!/bin/bash 2 # TestStrings: evaluate the value of a string 3 ANSWER=yes 4 if [ -z $ANSWER ]; then 5 echo "There is no answer." >&2 6 exit 1 7 else 8 if [ $ANSWER == "yes" ]; then 9 echo "The answer is YES." 10 elif [ $ANSWER == "no" ]; then 11 echo "The answer is NO." 12 else 80/112 UWAGA: operatory > i < muszą wystąpić w cudzysłowach wewnątrz polecenia test. W przeciwnym razie zostałyby zinterpretowane jako przekierowania.

81 Skrypty - wyrażenia całkowite Wyrażenia całkowite W wyrażeniach całkowitych można użyć następujących konstrukcji: i1 -eq i2 i1 jest równe i2 i1 -ne i2 i1 nie jest równe i2 i1 -le i2 i1 jest mniejsze lub równe i2 i1 -lt i2 i1 jest mniejsze od i2 i1 -ge i2 i1 jest większe lub równe i2 i1 -gt i2 i1 jest większe od i2. Na przykład: 1 #!/bin/bash 2 # TestInts: evaluate the value of an integer. 3 INT=-5 4 if [ -z $INT ]; then 5 echo "$INT is empty." >&2 6 exit 1 7 fi 8 if [ $INT -eq 0 ]; then 9 echo "$INT is zero." 10 else 11 if [ $INT -lt 0 ]; then 12 echo "$INT is negative." 13 else 14 echo "$INT is positive." 15 fi 16 if [ $((INT % 2)) -eq 0 ]; then 17 echo "$INT is even." 18 else 19 echo "$INT is odd." 20 fi 21 fi Linia 16 pokazuje sposób określenia czy liczba jest parzysta/nieparzysta. Służy do tego dzielenie modulo 2, którego rezultatem jest reszta z dzielenia liczby przez 2. 81/112

82 Skrypty - czytanie z wejścia Czytanie z wejścia Skrypty dotąd demonstrowane nie posiadały możliwości interakcji z użytkownikiem co jest możliwe do zrealizowania przez odczyt danych wejściowych wprowadzanych przez użytkownika. read odczyt standardowego wejścia Wbudowane polecenie read wczytuje całą linię z wejścia standardowego. Polecenie może być stosowane do wprowadzania danych z klawiatury lub, po przekierowaniu, z pliku. Polecenie read ma składnię: read [-opcje] [zmienna...] gdzie opcje składają się z podanych dalej opcji, a zmienna jest nazwą jednej lub więcej zmiennych, do których wprowadzone zostaną dane. Gdy nie podaje się zmiennych, cała linia zostanie wprowadzona do zmiennej REPLY powłoki. Ogólnie, read podstawia kolejne pola wprowadzone ze stdin do Na przykład: 1 #!/bin/bash 2 # ReadInts: read the value to an integer 3 echo -n "Please enter an integer -> " 4 read int 5 6 if [ -z $int ]; then 7 echo "int is empty." >&2 8 exit 1 9 fi 10 if [ $int -eq 0 ]; then 11 echo "int is zero." 12 else 13 if [ $int -lt 0 ]; then 14 echo "int is negative." 15 else 16 echo "int is positive." 17 fi 18 if [ $((int % 2)) -eq 0 ]; then 19 echo "int is even." 20 else 21 echo "int is odd." 82/ fi

83 Skrypty - czytanie z wejścia Opcje polecenia read Polecenie read akceptuje następujące opcje: -a array wprowadź dane do tablicy array, zaczynając od indeksu (pozycji) zero -d limit traktuj pierwszy znak łańcucha limit jako znacznik końca danych wejściowych, zamiast znaku nowej linii -e użyj funkcji Readline do obsługi wejścia. Pozwala to na edycję danych w ten sam sposób co w linii poleceń powłoki -n num czytaj pierwsze num znaków z wejścia, zamiast całej linii -p prompt wyświetl prompt wejściowy taki jak łańcuch prompt -r tryb surowy. Nie interpretuj znaku \ jako escape. Na przykład: 1 #!/bin/bash 2 # read multiple values from keyboard 3 echo -n "Enter one or more values > " 4 read var1 var2 var3 5 echo "var1 = $var1" 6 echo "var2 = $var2" 7 echo "var3 = $var3" lm@arch:~%./readmulti Enter one or more values > var1 = 1 83/112

84 Skrypty Przykład programu sterowanego za pomocą menu, gdzie użytkownikowi wyświetlona zostaje lista opcji i wybiera on jedną z nich. 1 #!/bin/bash 2 # ReadMenu: a menu-driven sys info 3 clear 4 echo " 5 PleaseSelect: 6 1. Display System Information 7 2. Display Disk Space 8 3. Display Home Space Utilization 9 0. Quit 10 " 11 read -p "Enter selection [0-3] > " 12 if [[ $REPLY =~ ^[0-3]$ ]]; then 13 if [ $REPLY == 0 ]; then 14 echo "Program terminated." 15 exit 16 fi 17 if [ $REPLY == 1 ]; then 18 echo "Hostname: $HOSTNAME" 19 uptime 20 elif [ $REPLY == 2 ]; then 21 df -h 22 elif [ $REPLY == 3 ]; then 23 echo "Home Space Utilization ($USER)" 24 du -sh $HOME 25 fi 26 else lm@arch:~%./readmenu Please Select: 1. Display System Information 2. Display Disk Space 3. Display Home Space Utilization 0. Quit Enter selection [0-3] > 1 Hostname: arch 15:07:06 up 50 min, 2 users, load average: 0,32, 0 lm@arch:~%./readmenu Enter selection [0-3] > 2 Filesystem Size Used Avail. %Used Mount rootfs 31G 8,9G 20G 31% / /dev/sda3 86G 14G 68G 17% /home... lm@arch:~%./readmenu Enter selection [0-3] > 3 Home Space Utilization (lm) 14G /home/lm 84/112

85 Skrypty - pętla while Pętla while Składnia polecenia while jest następująca: while warunek; do polecenia; done Działanie pętli while określa kod zakończenia poleceń występujących między słowami while i do (w poleceniu warunek). Jeśli jest on równy zeru, wykonywane są polecenia wewnątrz pętli. W skrypcie, zmienna cnt po utworzeniu ma wartość 1. Po 4 iteracjach, zmienna cnt ma wartość 5, a polecenie warunek zwraca kod zakończenia różny od zera, co powoduje zakończenie pętli. Program kontynuuje się wykonując następne polecenie po końcu pętli. 1 #!/bin/bash 2 # WhileLoop: display a series of numbers 3 cnt=1 4 while [ $cnt -le 4 ]; do 5 echo $cnt 6 cnt=$((cnt + 1)) 7 done 8 echo "Finished." lm@arch:~%./whileloop #!/bin/bash 2 # VariableWhileLoop: a loop with variable # of iterations 3 read -p "Enter max. number of iterations > " 4 cnt=1 5 while [ $cnt -le $REPLY ]; do 6 echo $cnt 7 cnt=$((cnt + 1)) 8 done 9 echo "Finished." lm@arch:~%./variablewhileloop Enter max. number of iterations > /112 Finished.

86 Skrypty - petla until Pętla until Polecenie until jest podobne do while, z tą różnicą że pętla until wykonuje się dopóki kod zakończenia ostatniego polecenia sterującego jest różny od zera. Składnia polecenia until jest następująca: until polecenia; do polecenia; done W skrypcie WhileLoop pętla wykonuje się dopóki wartość zmiennej cnt jest mniejsza lub równa 3. Identyczny rezultat można osiągnąć za pomocą pętli until: 1 #!/bin/bash 2 # UntilLoop: display a series of numbers 3 cnt=1 4 until [ $cnt -gt 4 ]; do 5 echo $cnt 6 cnt=$((cnt + 1)) 7 done 8 echo "Finished." lm@arch:~%./untilloop Finished. 86/112

87 Skrypty - odczyt pliku w pętli Odczyt plików z użyciem pętli Polecenia while i until mogą korzystać z wejścia standardowego. Pozwala to przetwarzać pliki z użyciem tych pętli. Na przykład, aby wczytać zawartość pliku GPS.txt do zmiennych location, length i width, po czym wyświetlić ich wartości: 1 Cracow , Zielonki , Narama , #!/bin/bash 2 # WhileReadsFile: read lines from a file 3 while read location length width; do 4 printf "Location: %s\tlength: %s\twidth: %s\n" \ 5 $location \ 6 $length \ 7 $width 8 done < GPS.txt lm@arch:~%./whilereadsfile Location: Cracow Length: , Width: Location: Zielonki Length: , Width: Location: Narama Length: , Width: /112

88 Skrypty - pętla w potoku Pętle w potokach Pętla może być odbiorcą danych w potoku: 1 #!/bin/bash 2 # WhileInPipe: using while in a pipe 3 sort -k 1,1 GPS.txt while read location length width; do 4 printf "Location: %s\tlength: %s\twidth: %s\n" \ 5 $location \ 6 $length \ 7 $width 8 done lm@arch:~%./whileinpipe Location: Cracow Length: , Width: Location: Narama Length: , Width: Location: Zielonki Length: , Width: /112

89 Skrypty - pętla for Pętla for Pętla for w odróżnieniu od while i until pozwala przetwarzać ciągi danych sterujących. Z tego powodu jest szczególnie popularną konstrukcją skryptów bash. Nowsze wersje powłoki bash obsługują 2 odmiany for : tradycyjną i pochodzącą z języka C. Tradycyjna pętla for Oryginalna składnia pętli for jest następująca: for zmienna [in elementy]; do polecenia done gdzie zmienna jest nazwą zmiennej, która będzie podlegała zmianom w czasie realizacji pętli, elementy to opcjonalna lista elementów, które są kolejno podstawiane do zmiennej, a polecenia są ciągiem poleceń wykonywanych w każdym obiegu pętli. 1 #!/bin/bash 2 for i in C C++ Java Scala; do 3 echo $i; 4 done 1 #!/bin/bash 2 for i in {B..D}; do 3 echo $i; 4 done 89/112 lm@arch:~%./fortraditional C C++ Java Scala lm@arch:~%./forranges B C D

90 Skrypty - pętla for Pętla for pochodząca z języka C Nowsze wersje powłoki bash wprowadzają drugą wersję pętli for, o składni przypominającej pętlę for języka C. Wspiera ją także wiele innych języków: for (( wyrazenie1; wyrazenie2; wyrazenie3 )); do polecenia done gdzie wyrazenie1, wyrazenie2 i wyrazenie3 wyrażeniami arytmetycznymi, a polecenia są poleceniami wykonywanymi w czasie każdego obiegu pętli. Co do działania, odpowiada to następującym poleceniom: (( wyrazenie1 )) while (( wyrazenie2 )); do polecenia (( wyrazenie3 )) done wyrazenie1 jest używane do inicjalizacji pętli, wyrazenie2 jest używane do określenia warunku zakończenia pętli, a wyrazenie3 jest wykonywane na zakończenie każdego obiegu pętli. 1 #!/bin/bash 2 # ForCLang : demo of C style for command 3 for (( i=0; i<5; i=i+1 )); do 4 echo $i 5 done 90/112 lm@arch:~%./forclang

91 Skrypty - parametry pozycyjne Parametry pozycyjne Powłoka obsługuje zbiór zmiennych nazywanych parametrami pozycyjnymi (positional parameters), które zawierają poszczególne ciągi znaków wprowadzone z linii poleceń. Parametry są nazwane cyframi 0 do 9. Na przykład: 1 #!/bin/bash 2 # PositionalPars: view command line parameters 3 echo " 4 \$0 = $0 5 \$1 = $1 6 \$2 = $2 7 \$3 = $3 8 " lm@arch:~%./positionalpars p $0 =./PositionalPars $1 = p1 $2 = $3 = UWAGA: wewnątrz skryptu można przekazać i odczytać większą ilość wartości, otaczając odpowiednią liczbę nawiasami klamrowymi, na przykład ${10}, ${55} itd. Odczyt ilości argumentów Powłoka posiada zmienną $#, która przechowuje ilość argumentów polecenia: 1 #!/bin/bash 2 # PositionalParsCnt: view the number of argumentss 3 echo "Number of arguments: $#" lm@arch:~%./positionalparscnt Number of arguments: 3 91/112

92 Skrypty - parametry pozycyjne Parametry pozycyjne dostęp do wielu argumentów za pomocą shift Polecenie shift przesuwa parametry o jedną pozycję w dół za każdym razem, gdy jest wykonywane. Po każdym wykonaniu shift, wartość $2 jest przesunięta do $1, wartość $3 jest przesunięta do $2 itd. Wartość $# jest zmniejszona o jeden. W przykładzie tworzona jest pętla, która określa ilość argumentów pozostałych do odczytu i wykonuje się dopóki jest jeszcze argument. W każdym obiegu pętli wyświetlany jest bieżący argument, zwiększana jest wartość zmiennej cnt (bieżąca ilość przetworzonych argumentów) i ostatecznie, wykonuje się polecenie shift by załadować do $1 następny argument. 1 #!/bin/bash 2 # PositionalParsLoop: display all arguments 3 cnt=1 4 while [ $# -gt 0 ]; do 5 echo "Argument $cnt = $1" 6 cnt=$((cnt + 1)) 7 shift 8 done lm@arch:~%./positionalparsloop p1 p2 p3 p4 p5 Argument 1 = p1 Argument 2 = p2 Argument 3 = p3 Argument 4 = p4 Argument 5 = p5 92/112

93 Skrypty - parametry pozycyjne Parametry pozycyjne: przekazywanie argumentów do funkcji powłoki Przykład ilustruje przekazywanie parametru do funkcji powłoki. 1 #!/bin/bash 2 # FileInfoFun: a script using shell f. with parameter 3 FileInfo () { 4 # file_info: function to display file information 5 echo "SHELLF: \$0 = $0, \$1 = $1, \$2 = $2" 6 if [ -e $1 ]; then 7 echo -e "\nfile Type:" 8 file $1 9 echo -e "\nfile Status:" 10 stat $1 11 else 12 echo "$FUNCNAME: usage: $FUNCNAME file" >&2 13 return 1 14 fi 15 } 16 echo "SCRIPT: \$0 = $0, \$1 = $1, \$2 = $2" 17 FileInfo $2 lm@arch:~%./fileinfofun dummy FileInfoFun SCRIPT: $0 =./FileInfoFun, $1 = dummy, $2 = FileInfoFun SHELLF: $0 =./FileInfoFun, $1 = FileInfoFun, $2 = File Type: FileInfoFun: Bourne-Again shell script, ASCII text executable 93/112

94 Skrypty - tablice Tablice Tablice są zmiennymi, które przechowują więcej niż jedną wartość. Tablice składają się z komórek, zwanych elementami, a każdy element zawiera daną. Poszczególne elementy są dostępne za pomocą adresu zwanego indeksem. Tablice w sensie powłoki bash są ograniczone do jednego wymiaru - są w istocie wektorami. Tworzenie tablic Zmienne tablicowe nazywa się podobnie jak inne zmienne powłoki bash, a tworzone są one automatycznie w momencie pierwszego użycia: lm@arch:~% a[2]=a2 lm@arch:~% echo ${a[2]} a2 Tablice można też deklarować z użyciem polecenia declare: lm@arch:~% declare -a a Specjalnym przypadkiem są tablice asocjacyjne; można je deklarować z użyciem polecenia declare z opcją -A: lm@arch:~% declare -A ta 94/112

95 Skrypty - tablice Podstawianie wartości do tablic Podstawianie wartości może się odbyć na dwa sposoby. Pojedyncze wartości podstawia się zgodnie ze składnią: nazwa[indeks]=wartosc gdzie nazwa jest nazwą tablicy, a indeks jest liczbą całkowitą (lub wyrażeniem arytmetycznym) większym lub równym zeru. UWAGA: pierwszy element tablicy ma indeks zero, a nie jeden. wartosc jest łańcuchem lub daną całkowitą która ma być przypisana do elementu. Wiele wartości można przypisać zgodnie ze składnią: nazwa=(wartosc1 wartosc2...) gdzie nazwa jest nazwą tablicy, a wartosc1 wartosc2... są wartościami kolejno przypisywanymi do elementów tablicy, poczynając od elementu zero. Na przykład, chcąc podstawić skrócone angielskie nazwy dni tygodnia do tablicy days, należy: lm@arch:~% days=(sun Mon Tue Wed Thu Fri Sat) Można również przypisać wartości do wybranych elementów, podając indeks dla każdej wartości: lm@arch:~% days=([0]=sun [1]=Mon [2]=Tue [3]=Wed [4]=Thu [5]=Fri [6]=Sat) 95/112

96 Skrypty - tablice asocjacyjne Tablice asocjacyjne Tablice asocjacyjne są kolekcjami par (<klucz>, <wartość>), gdzie klucz może być dowolnym łańcuchem. 1 #!/bin/bash 2 # AssocArray: associative array 3 declare -A newmap 4 newmap[name]="lucjan Miekina" 5 newmap[designation]=lecturer 6 newmap[company]="agh UST/KRiM" 7 #accessing elements through keys 8 echo "company: ${newmap[company]}" 9 echo " name: ${newmap[name]}" 10 #testing invalid keys 11 echo "invalid: ${newmap[invalid]}" lm@arch:~%./assocarray company: AGH UST/KRiM name: Lucjan Miekina 96/112

97 Skrypty - operacje tablicowe Operacje tablicowe: wyświetlanie całej zawartości tablic Indeksy * mogą być użyte do dostępu do wszystkich elementów tablicy. Notacja z jest bardziej użyteczna. Na przykład: lm@arch:~% people=("john Scofield" "Pat Metheny" "John McLaughlin") lm@arch:~% for i in ${people[*]}; do echo $i; done John Scofield Pat Metheny John McLaughlin lm@arch:~% for i in ${people[@]}; do echo $i; done # IDENTICAL... lm@arch:~% for i in "${people[*]}"; do echo $i; done John Scofield Pat Metheny John McLaughlin lm@arch:~% for i in "${people[@]}"; do echo $i; done John Scofield Pat Metheny John McLaughlin Działanie notacji ${people[*]} i ${people[@]} jest identyczne, o ile nie występują one w cudzysłowie. Notacja * generuje wiersz zawierający wszystkie elementy tablicy, podczas gdy generuje trzy słowa, zawierające rzeczywiste elementy. 97/112

98 Skrypty - operacje tablicowe Operacje tablicowe: odczyt ilości elementów tablicy Odczytu ilości elementów tablicy dokonuje się podobnie jak odczytu długości łańcucha znaków: lm@arch:~% echo ${#people[@]} # ilosc elementow 3 lm@arch:~% echo ${#people[0]} # rozmiar elementu 0 13 lm@arch:~% a[10]=ten # tablica o jednym elemencie o indeksie 10 lm@arch:~% echo ${#a[@]} 1 Pomimo przypisania łańcucha ten do elementu tablicy o indeksie 10, powłoka bash traktuje tablicę jako jednoelementową. Jest to odmienne od większości języków programowania, w których nie używane elementy tablicy (od 0 do 9) byłyby zainicjowane domyślnymi wartościami i wliczone w jej rozmiar. Operacje tablicowe: znajdowanie użytych indeksów Ponieważ bash pozwala na istnienie wolnych miejsc w tablicy, może być interesujące które elementy rzeczywiście istnieją. Można to osiągnąć za pomocą wyrażeń: ${!tab[*]} lub ${!tab[@]}, gdzie tab jest nazwą zmiennej tablicowej. lm@arch:~% sparse=([1]=at1 [3]=at3) lm@arch:~% for i in "${!sparse[@]}"; do echo $i; done 1 3 lm@arch:~% for i in "${sparse[@]}"; do echo $i; done at1 98/112

99 Skrypty - operacje tablicowe Operacje tablicowe: dodawanie elementów na końcu tablicy Używając operatora przypisania +=, można dołączyć elementy na końcu tablicy. lm@arch:~% people=(scofield Metheny McLaughlin) lm@arch:~% echo ${people[@]} Scofield Metheny McLaughlin lm@arch:~% people+=(santana Hendrix) lm@arch:~% echo ${people[@]} Scofield Metheny McLaughlin Santana Hendrix Operacje tablicowe: sortowanie Powłoka nie posiada wbudowanej operacji sortowania, ale można to łatwo uzyskać wykorzystując istniejące polecenia: lm@arch:~% echo "Original array: ${people[@]}" Original array: Scofield Metheny McLaughlin Santana Hendrix lm@arch:~% sorted=($(for i in "${people[@]}"; do echo $i; done sort)) lm@arch:~% echo "Sorted array: ${sorted[@]}" Sorted array: Hendrix McLaughlin Metheny Santana Scofield 99/112

100 Skrypty - operacje tablicowe Operacje tablicowe: usuwanie tablic Aby usunąć całą tablicę, używa się polecenia unset: lm@arch:~% echo "Sorted array: ${sorted[@]}" Sorted array: Hendrix McLaughlin Metheny Santana Scofield lm@arch:~% unset sorted lm@arch:~% echo "Sorted array: ${sorted[@]}" Sorted array: Operacje tablicowe: usuwanie elementu tablicy unset pozwala także na usuwanie pojedynczego elementu tablicy: lm@arch:~% echo "Original array: ${people[@]}" Original array: Scofield Metheny McLaughlin Santana Hendrix lm@arch:~% unset people[3] lm@arch:~% echo "Original array: ${people[@]}" Original array: Scofield Metheny McLaughlin Hendrix W przykładzie usunięto czwarty element tablicy. UWAGA: nazwa elementu tablicy musi występować w apostrofach, aby powłoka nie zastosowała mechanizmu rozwijania nazw plików (pathname expansion). Przypisanie wartości pustej do zmiennej tablicowej nie powoduje jej opróżnienia: lm@arch:~% echo "Original array: ${people[@]}" Original array: Scofield Metheny McLaughlin Hendrix lm@arch:~% people= lm@arch:~% echo "Original array: ${people[@]}" Original array: Metheny McLaughlin Hendrix 100/112

101 Skrypty - obsługa łańcuchów znaków Dostęp do części łańcucha Jeśli należy zapewnić dostęp do części łańcucha zaczynając od pewnej pozycji, można użyć polecenia expr z parametrem substr. Na przykład, mając nazwę pliku ze ścieżką bezwzględną w postaci łańcucha "/home/lm/documents/tex/lecture_unix.pdf", możemy odczytać nazwę posiadacza pliku, wiedząc że w danym systemie nazwy te są dwu-znakowe. W tym celu należy odczytać 2 znaki począwszy od pozycji 7. Parametr substr wymaga podania łańcucha wejściowego, pozycji początkowej i długości podłańcucha. 1 #!/bin/bash 2 #SubStrings: extract a substring at some pos 3 4 NAME="/home/lm/Documents/TeX/Lecture_UNIX.pdf" 5 6 OHD=`expr substr $NAME 7 2` 7 8 echo "Owner home is: $OHD " lm@arch:~%./substrings Owner home is: lm 101/112

102 Skrypty - obsługa łańcuchów znaków Wyszukiwanie łańcucha Jeśli należy wyszukać pewien łańcuch w innym, należy użyć polecenia expr z parametrem index, po którym podaje się łańcuch przeszukiwany i łańcuch wyszukiwany. Na przykład, chcąc wyszukać wszystkie pliki o rozszerzeniu.txt, ale wypisać tylko ich nazwę zasadniczą - do wystąpienia ".". 1 #!/bin/bash 2 #FindString: find a specified string 3 4 FILES=`ls -1 *.txt` 5 6 for FILE in $FILES 7 do 8 IDX=`expr index $FILE.` 9 10 if [ "$IDX" == 0 ]; then 11 IDX=`expr length $FILE` 12 else 13 IDX=`expr $IDX - 1` 14 fi SUB=`expr substr $FILE 1 $IDX` 17 echo "Txt File: $SUB" 18 done lm@arch:~% ls -1 *.txt GPS.txt GSM.txt lm@arch:~%./findstring Txt File: GPS Txt File: GSM 102/112

103 Skrypty - obsługa łańcuchów znaków Przekształcanie dużych liter na małe i na odwrót Można do tego wykorzystać polecenie tr, podając jako argumenty odpowiednie zbiory - początkowy i docelowy. Na przykład: tr a-z A-Z tłumaczy (zamienia) wszystkie pobrane dalej znaki zawarte w przedziale a-z na znaki zawarte w przedziale A-Z, czyli zmienia wielkość liter z małych na duże. 1 #!/bin/bash 2 #TrString: transform a string using the tr command 3 4 STR_ORIGINAL=lower_UPPER_ STR_UPPER=`echo $STR_ORIGINAL tr a-z A-Z` 6 STR_LOWER=`echo $STR_ORIGINAL tr A-Z a-z` 7 8 echo "Original: $STR_ORIGINAL" 9 echo "Upper : $STR_UPPER" 10 echo "Lower : $STR_LOWER" lm@arch:~%./trstring Original: lower_upper_12345 Upper : LOWER_UPPER_12345 Lower : lower_upper_ /112

104 Skrypty - obsługa łańcuchów znaków Programowa edycja plików za pomocą polecenia sed Jeśli należy wykonać zmiany w pliku w sposób programowy z poziomu skryptu, używa się polecenia sed. Pobiera ono wyrażenie regularne i nazwę pliku, po czym wysyła przetworzony plik na standardowe wyjście. Na przykład, mając plik z dwoma kolumnami: "login" i "katalog domowy", można programowo zmieniać jego zawartość, np. w celu odnotowania faktu przesunięcia katalogów domowych użytkowników z "/home" na "/usr/local/home". 1 #!/bin/bash 2 #Sed: edit a file with sed 3 4 sed "s/\/home/\/usr\/local\/home/" $1 > tmp 5 cp tmp $1 lm@arch:~% cat SedInput root /home/root user1 /home/user1 user2 /home/user2 lm@arch:~%./sed SedInput lm@arch:~% cat SedInput root /usr/local/home/root user1 /usr/local/home/user1 user2 /usr/local/home/user2 Ponieważ należy zamienić każde wystąpienie "/home" na "/usr/local/home", wyrażenie regularne powinno mieć postać: "s/find/replace/" gdzie find jest poszukiwanym łańcuchem znaków, a replace docelowym łańcuchem. Ponieważ znak / jest znakiem specjalnym, należy poprzedzić go znakiem \ w łańcuchach find i replace. 104/112

105 Skrypty - Przykłady rozwiązań Dotąd prezentowane przykłady skryptów były elementarne i ilustrowały wybrany aspekt problemu. Użyteczne skrypty zwykle składają się z wielu elementów wspólnie realizujących złożone działanie. Przykłady: prototyp skryptu do instalacji pakietu w systemie operacyjnym Gentoo Linux, który instaluje pakiet (program lub bibliotekę) ze źródeł. Prototyp, jako że właściwy skrypt jest bardziej skomplikowany, stąd byłby trudny do objaśnienia. prosty skrypt archiwizujący pliki. prosty skrypt do instalacji plików, który: 1 wczytuje plik archiwum o nazwie podanej jako parametr 2 rozpakowuje archiwum w podkatalogu 3 odczytuje konfigurację instalatora z pliku config 4 kopiuje pliki i katalogi wymienione w konfiguracji do odpowiednich lokalizacji Zawartość archiwum: 105/112

Powłoka I. Popularne implementacje. W stylu sh (powłoki zdefiniowanej w POSIX) W stylu csh. bash (najpopularniejsza) zsh ksh mksh.

Powłoka I. Popularne implementacje. W stylu sh (powłoki zdefiniowanej w POSIX) W stylu csh. bash (najpopularniejsza) zsh ksh mksh. Powłoka I Popularne implementacje W stylu sh (powłoki zdefiniowanej w POSIX) bash (najpopularniejsza) zsh ksh mksh W stylu csh csh tcsh 12 października 2018 1 / 16 Powłoka II Zachęta Komunikuje się z użytkownikiem

Bardziej szczegółowo

UNIX. Kurs początkowy. Dr inż. Lucjan Miękina upel.agh.edu.pl/wimir/login/ Katedra Robotyki i Mechatroniki 1/112

UNIX. Kurs początkowy. Dr inż. Lucjan Miękina upel.agh.edu.pl/wimir/login/ Katedra Robotyki i Mechatroniki 1/112 1/112 UNIX Kurs początkowy Dr inż. Lucjan Miękina upel.agh.edu.pl/wimir/login/ Katedra Robotyki i Mechatroniki October 25, 2016 Pierwsza wersja UNIX-a została zbudowana w 1969 przez Kena Thompsona z Research

Bardziej szczegółowo

Systemy operacyjne. System operacyjny Linux - wstęp. Anna Wojak

Systemy operacyjne. System operacyjny Linux - wstęp. Anna Wojak Systemy operacyjne System operacyjny Linux - wstęp Anna Wojak 1 1 Wstęp Linux jest systemem z rodziny Unix. Pierwsza wersja systemu została opracowana w 1969 roku przez K.Thompsona i D.Ritchie Jest to

Bardziej szczegółowo

Sieci i systemy operacyjne I Ćwiczenie 1. Podstawowe polecenia systemu Unix

Sieci i systemy operacyjne I Ćwiczenie 1. Podstawowe polecenia systemu Unix Wydział Zarządzania i Modelowania Komputerowego Specjalność: Informatyka Stosowana Rok III Semestr V 1. Logowanie w systemie Unix. Sieci i systemy operacyjne I Ćwiczenie 1. Podstawowe polecenia systemu

Bardziej szczegółowo

System operacyjny UNIX Ćwiczenie 1. Podstawowe polecenia systemu Unix

System operacyjny UNIX Ćwiczenie 1. Podstawowe polecenia systemu Unix Wydział Mechatroniki i Budowy Maszyn Specjalność: Automatyka i Robotyka Rok II Semestr IV 1. Logowanie w systemie Unix. System operacyjny UNIX Ćwiczenie 1. Podstawowe polecenia systemu Unix Do zalogowania

Bardziej szczegółowo

Niektóre katalogi są standardowymi katalogami zarezerwowanymi do użytku przez system. Znaczenie wybranych katalogów systemowych jest następujące:

Niektóre katalogi są standardowymi katalogami zarezerwowanymi do użytku przez system. Znaczenie wybranych katalogów systemowych jest następujące: Podstawy systemu Linux Linux jest systemem operacyjnym dla komputerów PC, opracowany na początku lat dziewięćdziesiątych przez Linusa Torvaldsa. Podobnie jak Unix jest on systemem wielozadaniowym - umożliwia

Bardziej szczegółowo

"Klasyczna" struktura systemu operacyjnego:

Klasyczna struktura systemu operacyjnego: "Klasyczna" struktura systemu operacyjnego: Użytkownik Powłoka (shell) Programy użytkowe Programy systemowe API Jądro (kernel) Programy obsługi sprzętu (drivers) Sprzęt Funkcje systemu operacyjnego obsługa

Bardziej szczegółowo

Systemy operacyjne. Instrukcja laboratoryjna. Ćwiczenie 1: Polecenia systemu UNIX/LINUX. Opracował: dr inż. Piotr Szpryngier

Systemy operacyjne. Instrukcja laboratoryjna. Ćwiczenie 1: Polecenia systemu UNIX/LINUX. Opracował: dr inż. Piotr Szpryngier Systemy operacyjne Instrukcja laboratoryjna Ćwiczenie 1: Polecenia systemu UNIX/LINUX Opracował: dr inż. Piotr Szpryngier Olsztyn 2009 1 Wprowadzenie. Cel zajęć praktycznych. Wymagania stawiane studentom

Bardziej szczegółowo

Bash - wprowadzenie. Bash - wprowadzenie 1/39

Bash - wprowadzenie. Bash - wprowadzenie 1/39 Bash - wprowadzenie Bash - wprowadzenie 1/39 Bash - wprowadzenie 2/39 Czym jest bash? Rysunek : Zadanie powłoki to ukrycie wywołań systemowych Bash - wprowadzenie 3/39 Czym jest bash? Przykład polecenia:

Bardziej szczegółowo

Znaki globalne w Linuxie

Znaki globalne w Linuxie Znaki globalne w Linuxie * reprezentuje jeden lub wiele znaków (wild-card character)? reprezentuje dokładnie jeden znak (wild-card character) [abcde] reprezentuje dokładnie jeden znak z wymienionych [a-e]

Bardziej szczegółowo

Pracownia komputerowa. Dariusz wardecki, wyk II

Pracownia komputerowa. Dariusz wardecki, wyk II Pracownia komputerowa Dariusz wardecki, wyk II Systemy operacyjne Desktopowe Mobilne Systemy operacyjne Systemy Unixowe Windows! Windows 8 Windows 7 Windows Vista Windows XP... Linux Mac OS X Mountain

Bardziej szczegółowo

SYSTEMY OPERACYJNE I laboratorium 3 (Informatyka stacjonarne 2 rok, semestr zimowy)

SYSTEMY OPERACYJNE I laboratorium 3 (Informatyka stacjonarne 2 rok, semestr zimowy) Procesy i shell. Polecenia ps, sleep, exit, jobs, bg, fg, top, kill, bash, tcsh, which, type, whereis, touch. Metaznak & i >>. Dowiązania miękkie i twarde. Proces jest programem, który jest wykonywany

Bardziej szczegółowo

1 Przygotował: mgr inż. Maciej Lasota

1 Przygotował: mgr inż. Maciej Lasota Laboratorium nr 1 1/7 Język C Instrukcja laboratoryjna Temat: Programowanie w powłoce bash (shell scripting) 1 Przygotował: mgr inż. Maciej Lasota 1) Wprowadzenie do programowania w powłoce Skrypt powłoki

Bardziej szczegółowo

JĘZYK SHELL JEST PEŁNYM JĘZYKIEM PROGRAMOWANIA

JĘZYK SHELL JEST PEŁNYM JĘZYKIEM PROGRAMOWANIA JĘZYK SHELL JEST PEŁNYM JĘZYKIEM PROGRAMOWANIA, który zawiera: zmienne, konstrukcje warunkowe i iteracyjne (IF-THEN-ELSE, CASE, DO WHILE, DO UNTIL), konfigurowane środowisko użytkownika. METAZNAKI zestaw

Bardziej szczegółowo

Kurs systemu Unix wykład wstępny. Kurs systemu Unix 1

Kurs systemu Unix wykład wstępny. Kurs systemu Unix 1 Kurs systemu Unix wykład wstępny Kurs systemu Unix 1 Cele wykladu Zdobycie podstawowej wiedzy o systemie i jego narzędziach. Poznanie unixowych języków skryptowych (bash, awk,...). Nauka programowania

Bardziej szczegółowo

Podstawy użytkowania Linux a

Podstawy użytkowania Linux a Podstawy użytkowania Linux a Systemy Operacyjne Mateusz Hołenko 3 marca 2013 Plan zajęć Rozpoczynanie pracy z systemem Podstawowe polecenia Pomoc systemowa Interpreter poleceń Mateusz Hołenko Podstawy

Bardziej szczegółowo

UNIX. Kurs początkowy. Dr inż. Lucjan Miękina upel.agh.edu.pl/wimir/login/ Katedra Robotyki i Mechatroniki 1/112

UNIX. Kurs początkowy. Dr inż. Lucjan Miękina upel.agh.edu.pl/wimir/login/ Katedra Robotyki i Mechatroniki 1/112 1/112 UNIX Kurs początkowy Dr inż. Lucjan Miękina upel.agh.edu.pl/wimir/login/ Katedra Robotyki i Mechatroniki November 14, 2016 Pierwsza wersja UNIX-a została zbudowana w 1969 przez Kena Thompsona z Research

Bardziej szczegółowo

Architektura systemów informatycznych WPROWADZENIE DO SYSTEMU LINUX

Architektura systemów informatycznych WPROWADZENIE DO SYSTEMU LINUX Architektura systemów informatycznych WPROWADZENIE DO SYSTEMU LINUX Materiały: www.staff.amu.edu.pl/~evert/asi.php W razie nieobecności proszę o zapoznanie się z materiałem z ćwiczeń w domu Zaliczenie

Bardziej szczegółowo

Linux: System Plików

Linux: System Plików Linux: System Plików Systemy Operacyjne Mateusz Hołenko 3 marca 2013 Plan zajęć Wszystko jest plikiem Obsługa systemu plików Prawa dostępu Wyszukiwanie Mateusz Hołenko Linux: System Plików [2/24] Wszystko

Bardziej szczegółowo

Trochę o plikach wsadowych (Windows)

Trochę o plikach wsadowych (Windows) Trochę o plikach wsadowych (Windows) Zmienne środowiskowe Zmienną środowiskową można ustawić na stałe w systemie (Panel sterowania->system- >Zaawansowane ustawienia systemu->zmienne środowiskowe) lub też

Bardziej szczegółowo

Wstęp do informatyki. stęp do informatyki Polecenia (cz.2)

Wstęp do informatyki. stęp do informatyki Polecenia (cz.2) Wstęp do informatyki stęp do informatyki Polecenia (cz.2) Lista procesów top Pokaż listę procesów polecenie interaktywne Procesy Uruchamianie w tle. shell nie czeka na zakończenie procesu, można wydawać

Bardziej szczegółowo

1. Znajdź za pomocą programu locate wszystkie pliki które zawierają w nazwie słowo netscape locate netscape

1. Znajdź za pomocą programu locate wszystkie pliki które zawierają w nazwie słowo netscape locate netscape FIND http://www.cs.put.poznan.pl/akobusinska/downloads/find.pdf 1. Znajdź za pomocą programu locate wszystkie pliki które zawierają w nazwie słowo netscape locate netscape 2. Ogranicz wynik polecenia 1

Bardziej szczegółowo

Współczesne systemy komputerowe

Współczesne systemy komputerowe 1. Powłoki, konfiguracja. Do komunikacji użytkownika z jądrem systemu operacyjnego służy powłoka systemu (shell), w linuksie jest dostępnych kilka powłok; o The C shell (/bin/csh, często link do /bin/tcsh);

Bardziej szczegółowo

Zakład Systemów Rozproszonych

Zakład Systemów Rozproszonych Zakład Systemów Rozproszonych Politechnika Rzeszowska Moduł 1: Wprowadzenie do systemu UNIX Interpretator poleceń Interpreter poleceń użytkownika, czyli inaczej powłoka. Powłoka pośredniczy pomiędzy użytkownikiem

Bardziej szczegółowo

Ćwiczenie 1. Podstawowe wiadomości

Ćwiczenie 1. Podstawowe wiadomości Ćwiczenie 1. Cel ćwiczenia: Zapoznanie się z podstawowymi poleceniami systemu Linux. Poznanie praw dostępu do plików oraz struktury katalogów systemu Linux. Podstawowe informacje o systemie. Podstawowe

Bardziej szczegółowo

W pierwszej kolumnie wyświetlany jest identyfikator procesu (pid)

W pierwszej kolumnie wyświetlany jest identyfikator procesu (pid) Ćwiczenie 2 Cel ćwiczenia: Poznanie mechanizmów wejścia/wyjścia, zapoznanie się ze sposobami wyświetlania plików tekstowych i wyszukiwania informacji, podstawowe operacje na plikach tekstowych, zmienne

Bardziej szczegółowo

Ćwiczenie 9 Linux - operacje systemu plików

Ćwiczenie 9 Linux - operacje systemu plików Systemy teleinformatyczne AiR Ćwiczenie 9 Linux - operacje systemu plików 1. Ściągnąć program PUTTY - (portal tbajorek.prz.rzeszow.pl lub www.prz.rzeszow.pl/~tbajorek - dostęp po zalogowaniu: użytkownik:

Bardziej szczegółowo

Pracownia Komputerowa wyk ad II

Pracownia Komputerowa wyk ad II Pracownia Komputerowa wykad II dr Magdalena Posiadaa-Zezula Magdalena.Posiadala@fuw.edu.pl http://www.fuw.edu.pl/~mposiada Magdalena.Posiadala@fuw.edu.pl 1 Systemy operacyjne Windows np. Windows 8. Systemy

Bardziej szczegółowo

Powłoka interpreter poleceń systemu UNIX

Powłoka interpreter poleceń systemu UNIX SOE - Systemy Operacyjne Wykład 4 Powłoka interpreter poleceń systemu UNIX dr inż. Andrzej Wielgus Instytut Mikroelektroniki i Optoelektroniki WEiTI PW Powłoka Interpreter poleceń, powłoka (ang. shell)

Bardziej szczegółowo

Proces instalacji systemu operacyjnego Linux Red Hat 7.3 (1)

Proces instalacji systemu operacyjnego Linux Red Hat 7.3 (1) Proces instalacji systemu operacyjnego Linux Red Hat 7.3 (1) 1. Ustawiamy w biosie bootowanie systemu z CD-ROMu bądź z dyskietki (tworzymy wówczas dyskietki startowe). 2. Aby rozpocząć proces instalacji

Bardziej szczegółowo

Technologie Informacyjne - Linux 1

Technologie Informacyjne - Linux 1 Technologie Informacyjne - 1 Instytut Matematyki Uniwersytet Gdański System operacyjny System operacyjny powstał pod koniec 1991 roku. Twórca tego systemu był Linus Torvalds z Uniwersytetu Helsińskiego,

Bardziej szczegółowo

UNIX. Kurs początkowy. Dr inż. Lucjan Miękina. upel.agh.edu.pl/wimir/login/ Katedra Robotyki i Mechatroniki 1/115

UNIX. Kurs początkowy. Dr inż. Lucjan Miękina. upel.agh.edu.pl/wimir/login/ Katedra Robotyki i Mechatroniki 1/115 1/115 UNIX Kurs początkowy Dr inż. Lucjan Miękina upel.agh.edu.pl/wimir/login/ Katedra Robotyki i Mechatroniki November 9, 2017 Pierwsza wersja UNIX-a została zbudowana w 1969 przez Kena Thompsona z Research

Bardziej szczegółowo

Programowanie 1. Wprowadzenie do bash-a. Elwira Wachowicz. elwira@ifd.uni.wroc.pl. 06 lutego 2012

Programowanie 1. Wprowadzenie do bash-a. Elwira Wachowicz. elwira@ifd.uni.wroc.pl. 06 lutego 2012 Programowanie 1 Wprowadzenie do bash-a Elwira Wachowicz elwira@ifd.uni.wroc.pl 06 lutego 2012 Elwira Wachowicz (elwira@ifd.uni.wroc.pl) Programowanie 1 06 lutego 2012 1 / 19 Cel zajęć: Zapoznanie sie z

Bardziej szczegółowo

Egzamin pisemny z przedmiotu: Systemy operacyjne Semestr I

Egzamin pisemny z przedmiotu: Systemy operacyjne Semestr I Egzamin pisemny z przedmiotu: Systemy operacyjne Semestr I Uwaga: Test odnosi się do systemu operacyjnego Linux! 1) Linux jest systemem wielodostępnym, co oznacza, że: a) pozwala na logowanie się do systemu

Bardziej szczegółowo

Programowanie w języku Python. Grażyna Koba

Programowanie w języku Python. Grażyna Koba Programowanie w języku Python Grażyna Koba Kilka definicji Program komputerowy to ciąg instrukcji języka programowania, realizujący dany algorytm. Język programowania to zbiór określonych instrukcji i

Bardziej szczegółowo

Temat zajęć: Filtry, strumienie standardowe oraz przetwarzanie potokowe. stderr

Temat zajęć: Filtry, strumienie standardowe oraz przetwarzanie potokowe. stderr Temat zajęć: Filtry, strumienie standardowe oraz przetwarzanie potokowe Czas realizacji zajęć: 180 min. Zakres materiału, jaki zostanie zrealizowany podczas zajęć: Strumienie standardowe i ich przekierowywanie,

Bardziej szczegółowo

SYSTEMY OPERACYJNE I SIECI KOMPUTEROWE

SYSTEMY OPERACYJNE I SIECI KOMPUTEROWE Klasyczne polecenia: ls [opcje][katalog][pliki] opcje podstawowe -a wyświetla również pliki ukryte -b znaki niedrukowane jako liczby ósemkowe -c sortuje dane zgodnie z datą zmiany -k podaje wielkość pliku

Bardziej szczegółowo

Linux Polecenia. Problem nadpisywania plików. Zmienna noclobber i noglob. Filtry i metaznaki. Problem nadpisywania plików. Opracował: Andrzej Nowak

Linux Polecenia. Problem nadpisywania plików. Zmienna noclobber i noglob. Filtry i metaznaki. Problem nadpisywania plików. Opracował: Andrzej Nowak Linux Polecenia Opracował: Andrzej Nowak Problem nadpisywania plików. Zmienna noclobber i noglob. Filtry i metaznaki. Utwórz katalog lab_5 i przejdź do niego. $ mkdir lab_5 ; cd lab_5 Problem nadpisywania

Bardziej szczegółowo

Typy plików. Oznaczenie f -

Typy plików. Oznaczenie f - Typy plików Oznaczenie f - d b c l p s Typ Zwykły plik Katalog Urządzenie blokowe Urządzenie znakowe Dowiązanie symboliczne Potok (pipe) do komunikacji międzyprocesowej Gniazdo (socket) do komunikacji

Bardziej szczegółowo

System plików - wprowadzenie. Ścieżki dostępu. Informatyka ćw 1

System plików - wprowadzenie. Ścieżki dostępu. Informatyka ćw 1 Informatyka ćw 1 Linux - operacje systemu plików 1. Ściągnąć program PUTTY - (portal tbajorek.prz.rzeszow.pl - dostęp po zalogowaniu: użytkownik: student hasło: samoloty 2. Skonfigurować połączenie z adresem

Bardziej szczegółowo

Umożliwia ona pokazanie ukrytych plików i katalogów, nazwa ich zaczyna się od kropki.

Umożliwia ona pokazanie ukrytych plików i katalogów, nazwa ich zaczyna się od kropki. Ćwiczenie 2. Podstawowe operacje na plikach i katalogach. Na dowolnej konsoli wirtualnej zaloguj się jako jacek1, katalogiem domowym tego użytkownika jest /home/jacek1. Wszystkie ćwiczenia będziemy wykonywać

Bardziej szczegółowo

Skrypty startowe. Tryb interaktywny tryb logowania: nie logowanie: Tryb nieinteraktywny

Skrypty startowe. Tryb interaktywny tryb logowania: nie logowanie: Tryb nieinteraktywny Powłoka Bash Skrypty startowe Tryb interaktywny tryb logowania:. /etc/profile if [ -f $HOME/.bash profile ]; then. $HOME/.bash profile elif [ -f $HOME/.bash login. $HOME/.bash login elif [ -f $HOME/.profile

Bardziej szczegółowo

Wstęp do informatyki Shell podstawy

Wstęp do informatyki Shell podstawy Wstęp do informatyki Shell podstawy Podstawowe polecenia less plik(i) Przeglądaj interaktywnie zawartość plików. Można używać klawiszy kursora, PgDn, PgUp, etc. Koniec pracy (q), wyszukiwanie / Less is

Bardziej szczegółowo

Technologie Informacyjne - Linux 2

Technologie Informacyjne - Linux 2 Technologie Informacyjne - 2 Instytut Matematyki Uniwersytet Gdański Powłoka - polecenia pośredniczace Polecenie grep wypisuje z pliku lub strumienia wejściowego te wiersze, które sa zgodne z podanym wyrażeniem.

Bardziej szczegółowo

MS-DOS polecenia wewnętrzne i

MS-DOS polecenia wewnętrzne i MS-DOS polecenia wewnętrzne i zewnętrzne Polecenia zewnętrzne i wewnętrzne Tekstowy system DOS zawiera dużą liczbę poleceń pozwalających na realizację zadań systemu operacyjnego. Dzielą się one na polecenia

Bardziej szczegółowo

Wstęp do systemów wielozadaniowych laboratorium 02 Praca w systemie plików

Wstęp do systemów wielozadaniowych laboratorium 02 Praca w systemie plików Wstęp do systemów wielozadaniowych laboratorium 02 Praca w systemie plików Jarosław Piersa Wydział Matematyki i Informatyki, Uniwersytet Mikołaja Kopernika 2013-10-08 Co to jest konsola / terminal UNIX-owy?

Bardziej szczegółowo

Linux cz.3: polecenia systemowe, ćwiczenia

Linux cz.3: polecenia systemowe, ćwiczenia Linux cz.3: polecenia systemowe, ćwiczenia Wykład: polecenia terminala, manualia systemowe, uprawnienia, kompresja, archiwizacja, ukrywanie plików, sudo su, ps, kill, chmod, chown, tar, gzip, whoami, ls,

Bardziej szczegółowo

UNIX SYSTEM PLIKÓW. UNIX System plików

UNIX SYSTEM PLIKÓW. UNIX System plików UNIX SYSTEM PLIKÓW UNIX System plików UNIX SYSTEM PLIKÓW Jednym z podstawowych zadań SO jest zarządzanie zasobami danych Komputer może być wyposażony w różnego rodzaju urządzenia przechowujące dane i programy

Bardziej szczegółowo

Pracownia Komputerowa wykład III

Pracownia Komputerowa wykład III Pracownia Komputerowa wykład III dr Magdalena Posiadała-Zezula dr Jan Suffczyński 1 Powłoki - rodzaje! W Linux ie mamy kilka powłok do wyboru:! sh : Bourne Shell, oryginalna powłoka systemu unix! csh :

Bardziej szczegółowo

UŻYTKOWNIK. APLIKACJE UŻYTKOWE (wszelkie programy zawarte domyślnie w systemie operacyjnym jak i samodzielnie zainstalowane przez użytkownika systemu)

UŻYTKOWNIK. APLIKACJE UŻYTKOWE (wszelkie programy zawarte domyślnie w systemie operacyjnym jak i samodzielnie zainstalowane przez użytkownika systemu) System operacyjny mgr inż. Sławomir Kopko System operacyjny (OS - Operating System) zaraz po sprzęcie jest jednym z najważniejszych składników komputera. Najprościej mówiąc jest to oprogramowanie zarządzające

Bardziej szczegółowo

Systemy Operacyjne I: System plików

Systemy Operacyjne I: System plików Politechnika Poznańska 18 marca 2014 Materiały Prezentacja oraz inne materiały zostały przygotowane na podstawie: Użytkowanie systemu operacyjnego UNIX - dr D.Wawrzyniak Systemy operacyjne - skrypt - dr

Bardziej szczegółowo

Skrypty powłoki Skrypty Najcz ciej u ywane polecenia w skryptach:

Skrypty powłoki Skrypty Najcz ciej u ywane polecenia w skryptach: Skrypty powłoki Skrypty są zwykłymi plikami tekstowymi, w których są zapisane polecenia zrozumiałe dla powłoki. Zadaniem powłoki jest przetłumaczenie ich na polecenia systemu. Aby przygotować skrypt, należy:

Bardziej szczegółowo

Podstawy używania konsoli tekstowej w systemie Linux. Andrzej Zbrzezny

Podstawy używania konsoli tekstowej w systemie Linux. Andrzej Zbrzezny Podstawy używania konsoli tekstowej w systemie Linux Andrzej Zbrzezny 25 października 2012 Rozdział 1 Podstawy konsoli 1.1 Podstawy użytkowania Linuksa w konsoli tekstowej 1. Włączanie i wyłączanie systemu

Bardziej szczegółowo

Użytkownicy I. Użytkownik. Głównym celem istnienia użytkowników i grup w systemie jest utrzymanie porządku i separacja uprawnień.

Użytkownicy I. Użytkownik. Głównym celem istnienia użytkowników i grup w systemie jest utrzymanie porządku i separacja uprawnień. Użytkownicy I Głównym celem istnienia użytkowników i grup w systemie jest utrzymanie porządku i separacja uprawnień. Użytkownik login (nazwa) UID identyfikator numeryczny przynależność do grup, w tym dokładnie

Bardziej szczegółowo

Systemy operacyjne Programowanie w języku powłoki sh

Systemy operacyjne Programowanie w języku powłoki sh Systemy operacyjne Programowanie w języku powłoki sh [2] Programowanie w języku powłoki sh Powłoka, interpreter poleceń angshell jest programem uruchamianym standardowo po otwarciu sesji użytkownika przez

Bardziej szczegółowo

Uruchamianie programów w systemie Linux, potoki, strumienie, procesy, alias

Uruchamianie programów w systemie Linux, potoki, strumienie, procesy, alias 7 październik 2008 Uruchomienie, monitorowanie procesu, potoki, aliasy S laj d 1 Uruchamianie programów w systemie Linux, potoki, strumienie, procesy, alias 7 październik 2008 Uruchomienie, monitorowanie

Bardziej szczegółowo

Pracownia Komputerowa wykład II

Pracownia Komputerowa wykład II Pracownia Komputerowa wykład II dr Magdalena Posiadała-Zezula http://www.fuw.edu.pl/~mposiada 1 Systemy operacyjne! Windows np. Windows 8.! Systemy unixowe:! Linux i Mac OS X 2 Logowanie na konta studenckie!

Bardziej szczegółowo

System plików Linuxa. Tomasz Borzyszkowski

System plików Linuxa. Tomasz Borzyszkowski System plików Linuxa Tomasz Borzyszkowski Diagram blokowy jądra systemu Programy użytkowników Poziom użytkownika Poziom jądra Biblioteki Interfejs funkcji systemowych Podsystem plików Bufor Znakowe Blokowe

Bardziej szczegółowo

Powłoka, redyrekcja, potok

Powłoka, redyrekcja, potok UNIX POWŁOKA I POTOK WYKŁAD 5 Powłoka, redyrekcja, potok UNIX POWŁOKA POWŁOKA ( ang. SHELL) - to program interpretujący polecenia użytkownika. nazywamy powłoką. Powłoka przyjmuje polecenia od użytkownika,

Bardziej szczegółowo

host name: 192.168.11.110 protokół SSH System plików - wprowadzenie Ścieżki dostępu

host name: 192.168.11.110 protokół SSH System plików - wprowadzenie Ścieżki dostępu Ćw. 13 Linux - operacje systemu plików 1. Ściągnąć program PUTTY ze strony z materiałami dydaktycznymi - zapisać, rozpakować skompresowany plik i uruchomić. 2. Skonfigurować host name: host name: 192.168.11.110

Bardziej szczegółowo

Pracownia Komputerowa wykład III

Pracownia Komputerowa wykład III Pracownia Komputerowa wykład III dr Magdalena Posiadała-Zezula http://www.fuw.edu.pl/~mposiada/pk16 1 Powłoki - rodzaje! W Linux ie mamy kilka powłok do wyboru:! sh : Bourne Shell, oryginalna powłoka systemu

Bardziej szczegółowo

Narzędzia informatyczne w językoznawstwie

Narzędzia informatyczne w językoznawstwie Narzędzia informatyczne w językoznawstwie Wiersz poleceń - Potoki i pliki wsadowe Marcin Junczys-Dowmunt junczys@amu.edu.pl Zakład Logiki Stosowanej http://www.logic.amu.edu.pl 22. października 2008 Marcin

Bardziej szczegółowo

Ćwiczenia Linux konsola

Ćwiczenia Linux konsola Ćwiczenia Linux konsola Ćwiczenie wstępne: Wyczyść terminal za pomocą polecenia clear. Ćwiczenie 1. Wyświetlanie pomocy 1. Wyświetl pomoc za pomocą poleceń man man oraz info (wyjście z pomocy: klawisz

Bardziej szczegółowo

Programowanie proceduralne INP001210WL rok akademicki 2018/19 semestr letni. Wykład 6. Karol Tarnowski A-1 p.

Programowanie proceduralne INP001210WL rok akademicki 2018/19 semestr letni. Wykład 6. Karol Tarnowski A-1 p. Programowanie proceduralne INP001210WL rok akademicki 2018/19 semestr letni Wykład 6 Karol Tarnowski karol.tarnowski@pwr.edu.pl A-1 p. 411B Plan prezentacji Wskaźnik do pliku Dostęp do pliku: zapis, odczyt,

Bardziej szczegółowo

S P I S POLECEŃ LINUXA

S P I S POLECEŃ LINUXA S P I S POLECEŃ LINUXA Polecenia d l a katalogów Wyświetlanie zawartości katalogów ls ls [opcje][katalog][plik] -a (all) listuje również pliki ukryte zaczynające się znakiem».«-b wyświetla znaki niedrukowalne

Bardziej szczegółowo

SYSTEMY OPERACYJNE I SIECI KOMPUTEROWE. Tryb konsolowy - ćwiczenia. 012a

SYSTEMY OPERACYJNE I SIECI KOMPUTEROWE. Tryb konsolowy - ćwiczenia. 012a Systemy operacyjne i sieci komputerowe. Ćwiczenia 1 SYSTEMY OPERACYJNE I SIECI KOMPUTEROWE Tryb konsolowy - ćwiczenia 012a Źródło: http://www.microsoft.com/technet/prodtechnol/windowsserver2003/pl/library/serv

Bardziej szczegółowo

Systemy operacyjne / Programowanie w języku powłoki sh str.1/19

Systemy operacyjne / Programowanie w języku powłoki sh str.1/19 Systemy Operacyjne Programowanie w języku powłoki sh dr inż. Tomasz Jordan Kruk T.Kruk@ia.pw.edu.pl Instytut Automatyki i Informatyki Stosowanej Politechnika Warszawska Systemy operacyjne / Programowanie

Bardziej szczegółowo

Powłoka bash. Kurs systemu Unix 1

Powłoka bash. Kurs systemu Unix 1 Powłoka bash Kurs systemu Unix 1 Skrypty powłoki Skrypt powłoki to plik tekstowy, rozpoczynający się sekwencją: #!/usr/local/bin/bash # taki sobie skrypt lub podobną. Polecenie: sekwencja napisów, odzielonych

Bardziej szczegółowo

Wstęp do Informatyki i Programowania Laboratorium: Lista 0 Środowisko programowania

Wstęp do Informatyki i Programowania Laboratorium: Lista 0 Środowisko programowania Wstęp do Informatyki i Programowania Laboratorium: Lista 0 Środowisko programowania Przemysław Kobylański Wprowadzenie Każdy program w C musi zawierać przynajmniej funkcję o nazwie main(): Aby możliwe

Bardziej szczegółowo

Rys. 1. Widok uruchomienia polecenia apt-get install build-essential. Rys. 2. Widok uruchomienia polecenia apt-get install apache2

Rys. 1. Widok uruchomienia polecenia apt-get install build-essential. Rys. 2. Widok uruchomienia polecenia apt-get install apache2 1. Instalacja serwera WWW Aby zainstalować serwer WWW w systemie Linux, należy wykorzystać menedżer pakietów apt-get. Polecenia które należy wpisać w terminalu użytkownika root 1 : apt-get install build-essential

Bardziej szczegółowo

Wstęp do systemów wielozadaniowych laboratorium 03 Praca w powłoce UNIX-owej

Wstęp do systemów wielozadaniowych laboratorium 03 Praca w powłoce UNIX-owej Wstęp do systemów wielozadaniowych laboratorium 03 UNIX-owej Jarosław Piersa Wydział Matematyki i Informatyki, Uniwersytet Mikołaja Kopernika 2012-10-09 Co to jest konsola / terminal UNIX-owy? Odpowiednik

Bardziej szczegółowo

Python jest interpreterem poleceń. Mamy dwie możliwości wydawania owych poleceń:

Python jest interpreterem poleceń. Mamy dwie możliwości wydawania owych poleceń: W pierwszym kroku nauczymy się uruchamiać w Pythonie tradycyjny* program ". Dzięki temu nauczysz się pisać w języku Python, a także zapisywać i uruchamiać swoje pythonowe programy. *Jest taka tradycja,

Bardziej szczegółowo

System plików. Podstawy systemu Linux

System plików. Podstawy systemu Linux Podstawy systemu Linux Linux jest systemem operacyjnym dla komputerów PC, opracowany na początku lat dziewięćdziesiątych przez Linusa Torvaldsa. Podobnie jak Unix jest on systemem wielozadaniowym - umoŝliwia

Bardziej szczegółowo

Ćwiczenie 1. Ćwiczenie 2. Ćwiczenie 3. Opisz działanie następujących komend systemowych : COPY EDIT FDISK FIND FORMAT XCOPY

Ćwiczenie 1. Ćwiczenie 2. Ćwiczenie 3. Opisz działanie następujących komend systemowych : COPY EDIT FDISK FIND FORMAT XCOPY Ćwiczenie 1 Opisz działanie następujących komend systemowych : COPY EDIT FDISK FIND FORMAT XCOPY Ćwiczenie 2 Na dysku d utworzyć drzewo katalogów (a) i zmienić katalog bieżący na przemysłowe (b) Ćwiczenie

Bardziej szczegółowo

EDYTOR TEKSTOWY VIM WYBRANE POLECENIA. Pracownia Informatyczna 5

EDYTOR TEKSTOWY VIM WYBRANE POLECENIA. Pracownia Informatyczna 5 EDYTOR TEKSTOWY VIM WYBRANE POLECENIA Pracownia Informatyczna 5 DLACZEGO VIM? nieprzyjazny? standardowy edytor w systemach UNIX niezwykle użyteczny dość szybki (ważne przy plikach o dużych rozmiarach)

Bardziej szczegółowo

Administracja sieciowymi systemami operacyjnymi III Klasa - Linux

Administracja sieciowymi systemami operacyjnymi III Klasa - Linux Administracja sieciowymi systemami operacyjnymi III Klasa - Linux SKRYPTY POWŁOKI mgr inż. Tomasz Borowiec SKRYPTY POWŁOKI - PODSTAWY W Linuksie skrypt jest plikiem tekstowym zawierającym polecenia systemowe

Bardziej szczegółowo

System operacyjny Linux

System operacyjny Linux Paweł Rajba pawel.rajba@continet.pl http://kursy24.eu/ Zawartość modułu 1 Wprowadzenie Dlaczego Linux? Porównanie z systemem Windows Przegląd dystrybucji Środowisko graficzne GNOME, Program YaST, Konsola

Bardziej szczegółowo

Pliki w systemie operacyjnym Linux

Pliki w systemie operacyjnym Linux Pliki w systemie operacyjnym Linux Jeżeli system uruchamia się w trybie tekstowym, to po jego załadowaniu na czarno-białym ekranie monitora pojawiają się zapytania o nazwę i hasło użytkownika. W nowo zainstalowanym

Bardziej szczegółowo

Architektura systemów informatycznych. Powłoka systemowa Architektura procesora

Architektura systemów informatycznych. Powłoka systemowa Architektura procesora Architektura systemów informatycznych Powłoka systemowa Architektura procesora Powłoki systemowe Powłoka tekstowa Powłoka, nazywana inaczej shellem, odpowiada za wykonywanie poleceń wpisywanych przez użytkownika

Bardziej szczegółowo

Systemy operacyjne. Laboratorium 9. Perl wyrażenia regularne. Jarosław Rudy Politechnika Wrocławska 28 lutego 2017

Systemy operacyjne. Laboratorium 9. Perl wyrażenia regularne. Jarosław Rudy Politechnika Wrocławska 28 lutego 2017 Systemy operacyjne Laboratorium 9 Perl wyrażenia regularne Jarosław Rudy Politechnika Wrocławska 28 lutego 2017 Temat obejmuje wykorzystanie wyrażeń regularnych w perlu. Wyrażenia same w sobie są w zasadzie

Bardziej szczegółowo

Przekierowanie wejścia wyjścia:

Przekierowanie wejścia wyjścia: Przekierowanie wejścia wyjścia: program ma trzy podstawowe strumienie wejścia-wyjścia - standardowe wejście - standardowe wyjście - standardowe wyjście diagnostyczne przekierowanie standardowego wyjścia

Bardziej szczegółowo

Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy. Wykład 12. Karol Tarnowski A-1 p.

Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy. Wykład 12. Karol Tarnowski A-1 p. Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy Wykład 12 Karol Tarnowski karol.tarnowski@pwr.edu.pl A-1 p. 411B Plan prezentacji (1) Obsługa łańcuchów znakowych getchar(), putchar()

Bardziej szczegółowo

O historycznym systemie DOS. R. Robert Gajewski omklnx.il.pw.edu.pl/~rgajewski

O historycznym systemie DOS. R. Robert Gajewski omklnx.il.pw.edu.pl/~rgajewski O historycznym systemie DOS R. Robert Gajewski omklnx.il.pw.edu.pl/~rgajewski s-rg@siwy.il.pw.edu.pl System operacyjny System operacyjny jest podstawowym pomostem między użytkownikiem komputera a językiem

Bardziej szczegółowo

tworzenie katalogów Aby utworzyć nowy katalog wpisz: mkdir katalog1 Ta komenda utworzy katalog o nazwie katalog1.

tworzenie katalogów Aby utworzyć nowy katalog wpisz: mkdir katalog1 Ta komenda utworzy katalog o nazwie katalog1. Linux podobnie jak MacOS X są systemami opartymi na Unixie. Wiele programów linuxowych działa z poziomu terminala dlatego aby móc ich używać należy poznać podstawowe komendy systemu Unix. Nauczycie się

Bardziej szczegółowo

System operacyjny UNIX system plików. mgr Michał Popławski, WFAiIS

System operacyjny UNIX system plików. mgr Michał Popławski, WFAiIS System operacyjny UNIX system plików System plików systemu UNIX (s5fs) System plików ma strukturę drzewa. Na samym szczycie znajduje się korzeń (root), symbolicznie przedstawiany jako /. Z punktu widzenia

Bardziej szczegółowo

Podstawy programowania. Wykład: 9. Łańcuchy znaków. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Podstawy programowania. Wykład: 9. Łańcuchy znaków. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD Podstawy programowania Wykład: 9 Łańcuchy znaków 1 dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD Rodzaje plików Dane przechowywane w pliku mogą mieć reprezentację binarną (taką samą, jak

Bardziej szczegółowo

PODSTAWY INFORMATYKI

PODSTAWY INFORMATYKI PODSTAWY INFORMATYKI Bash literatura Wykład został opracowany na podstawie materiałów: http://www.ournet.pl/kursbasha/main.html 2 1 Bash BASH (ang. Bourne Again SHell) to stworzony przez Briana Foxa i

Bardziej szczegółowo

Przedstawię teraz tzw. podstawowe symbole wyrażenia regularne (BRE, Basic Regular Expression)

Przedstawię teraz tzw. podstawowe symbole wyrażenia regularne (BRE, Basic Regular Expression) Sed edytor strumieniowy,sed wczytuje bieżący wiersz pliku do wewnętrznego bufora celem manipulowania tekstem. Wynik jest wysyłany na standardowe wyjście. Oryginalny plik nie jest nigdy zmieniany. Jeżeli

Bardziej szczegółowo

Wstęp do obsługi Linux a

Wstęp do obsługi Linux a Wstęp do obsługi Linux a Katarzyna Grzelak luty 2013 K.Grzelak (IFD UW) 1 / 27 Systemy operacyjne Programy służace do zarzadzania wykonywaniem innych programów: systemy operacyjne (ang. operating system)

Bardziej szczegółowo

Temat zajęć: Tworzenie skryptów powłoki systemu operacyjnego.

Temat zajęć: Tworzenie skryptów powłoki systemu operacyjnego. Temat zajęć: Tworzenie skryptów powłoki systemu operacyjnego. Czas realizacji zajęć: 135 min. Zakres materiału, jaki zostanie zrealizowany podczas zajęć: Zmienne śrowiskowe oraz ich eksportowanie, argumenty

Bardziej szczegółowo

WPROWADZENIE. Warto pamiętać o opcji autouzupełniania, której używamy naciskając klawisz [Tab]

WPROWADZENIE. Warto pamiętać o opcji autouzupełniania, której używamy naciskając klawisz [Tab] WPROWADZENIE Po uruchomieniu terminala użytkownik uzyskuje tzw. znak zachęty (ang. shell prompt), np. $ lub #. Po zobaczeniu znaku zachęty można już zacząć wpisywać polecenia dla systemu. Historia wykonanych

Bardziej szczegółowo

Konsola i interpreter poleceń

Konsola i interpreter poleceń ZGŁASZANIE BŁĘDÓW I ERRATA Rozdział 1. Konsola i interpreter poleceń 1.1. Wykorzystanie interpretera... 27 1.2. Przekierowania... 28 1.3. Przykładowe polecenia wykorzystujące przekierowania... 32 1.4.

Bardziej szczegółowo

Operatory zmiany sposobu przypisania standardowych strumieni >,<,>> Jeżeli pierwsze polecenie powiodło się to wykona drugie

Operatory zmiany sposobu przypisania standardowych strumieni >,<,>> Jeżeli pierwsze polecenie powiodło się to wykona drugie Linux Polecenia Opracował: Andrzej Nowak Operatory zmiany sposobu przypisania standardowych strumieni >,> Przykłady: 2> plik przypisuje standardowe wyjście błędów do pliku, 1>&2 przypisanie standardowe

Bardziej szczegółowo

PRACOWNIA INFORMATYCZNA BASH - PODSTAWOWE INFORMACJE

PRACOWNIA INFORMATYCZNA BASH - PODSTAWOWE INFORMACJE PRACOWNIA INFORMATYCZNA BASH - PODSTAWOWE INFORMACJE Magda Mielczarek Pracownia Informatyczna 2015/2016 1 Podstawowe definicje Linux system operacyjny, które oferuje kompletne środowisko programistyczne

Bardziej szczegółowo

Powłoka (shell) Powłoka ksh

Powłoka (shell) Powłoka ksh Powłoka (shell) Powłoka - interface między użytkownikiem a systemem operacyjnym. Funkcje: interpreter poleceń użytkownika język programowania poleceń Najczęściej stosowane powłoki: Bourne a sh Korna ksh

Bardziej szczegółowo

Laboratorium Systemów Operacyjnych

Laboratorium Systemów Operacyjnych Laboratorium Systemów Operacyjnych Użytkownicy, Grupy, Prawa Tworzenie kont użytkowników Lokalne konto pozwala użytkownikowi na uzyskanie dostępu do zasobów lokalnego komputera. Konto domenowe pozwala

Bardziej szczegółowo

Dodatki. Dodatek A Octave. Język maszyn

Dodatki. Dodatek A Octave. Język maszyn Dodatki Dodatek A Octave Przykłady programów zostały opracowane w środowisku programistycznym Octave 3.6.2 z interfejsem graficznym GNU Octave 1.5.4. Octave jest darmowym środowiskiem programistycznym

Bardziej szczegółowo

1 Podstawy c++ w pigułce.

1 Podstawy c++ w pigułce. 1 Podstawy c++ w pigułce. 1.1 Struktura dokumentu. Kod programu c++ jest zwykłym tekstem napisanym w dowolnym edytorze. Plikowi takiemu nadaje się zwykle rozszerzenie.cpp i kompiluje za pomocą kompilatora,

Bardziej szczegółowo

Po uruchomieniu programu nasza litera zostanie wyświetlona na ekranie

Po uruchomieniu programu nasza litera zostanie wyświetlona na ekranie Część X C++ Typ znakowy służy do reprezentacji pojedynczych znaków ASCII, czyli liter, cyfr, znaków przestankowych i innych specjalnych znaków widocznych na naszej klawiaturze (oraz wielu innych, których

Bardziej szczegółowo

Podstawy systemów UNIX

Podstawy systemów UNIX Podstawy systemów UNIX Autor: Maciej Friedel Zajęcia prowadzone dla Polskiej Szkoły IT Wrocław, 2008 Struktura systemu UNIX POWŁOKA (SHELL) JĄDRO SPRZĘT Pracę całego systemu koordynuje

Bardziej szczegółowo