====== Wstęp ====== ===== Trochę historii UNIX-a i .. wolnego oprogramowania ===== 1969 pierwszy UNIX z powłoką (//ang. shell//), edytorem tekstu, pisany w kodzie maszynowym na komputery architektury PDP-7 i PDP 9, Ken Thompson, Dennis Richie, Bell Labs, firma AT&T, New Jersey, USA\\ 1972 druga edycja UNIX-a zawierająca potoki (//ang. pipe//)\\ 1973 jądro systemu w języku C (Dennis Richie) - UNIX staje się przenośny\\ 1975 wprowadzenie UNIX-a (szóstej wersji) na uczelnie do zastosowań naukowych, m.in. do Kalifornijskiego Uniwersytetu Berkeley\\ 1977 powstaje BSD (Berkeley Software Distribution) - m.in. edytor ex (Bill Joy), kompilator Pascala\\ 1983 System V - pierwszy komercyjny UNIX (AT&T)\\ Blokada źródeł UNIX-a, początki ruchu na rzecz wolnego oprogramowania (//ang. open source//)\\ 1983 rozpoczęcie pracy nad GNU (Gnu is Not Unix), Richard Stallman (MIT), wszystko przez drukarkę Xerox\\ 1983 Richard Stallman (MIT) tworzy Free Software Fundation - celem jest stworzenie wolnego systemu operacyjnego\\ 1984 wydanie 4.2BSD zawierający np. TCP/IP (początki internetu)\\ W międzyczasie mnożą się komercyjne jak i darmowe odmiany UNIX-a - brak standardu\\ BSD + System V = Solaris (Sun)\\ 1988 specyfikacja POSIX.1 w odpowiedzi Single UNIX Specification\\ 1989 pierwsza wersja licencji GNU GPL (Ogólna Publiczna Licencja)\\ 1990 na zamówienie MS powstaje Xenix - pierwszy UNIX dla PC\\ 1991 Linus Torvalds i jądro Lunixa\\ 1992-1994 procesy sądowe AT&T i Novel wstrzymują rozwój kodu z Berkley, jednak na bazie BSD powstają FreeBSD i NetBSD\\ 1994 powstaje Red Hat Linux (Linux rozpowszechniany w dystrybucjach)\\ [[http://www.levenez.com/unix/history.html|Drzewo genealogiczne UNIX-a]]\\ \\ źródło: [[http://pl.wikipedia.org|Wikipedia]]\\ ===== Budowa i własności systemu UNIX ===== Główne cechy systemu Unix: * wielozadaniowość - system z podziałem czasu, pozwala na uruchamianie wielu procesów jednocześnie * wielodostępowość - umożliwia pracę z wieloma użytkownikami Budowa Unixa: * **jądro** (//ang. kernel//) - niskopoziomowe oprogramowanie obsługujące sprzęt, dostarczające określone usługi dla programów użytkowych (realizuje system plików, planuje przydziału pracy procesora, zarządza pamięcią i urządzeniami zewnętrznymi, inicjuje działanie systemu, zapewnia mechanizmy komunikacji, dostarcza zestawu wywołań systemowych) * **powłoka** (//ang. shell//) - interpreter poleceń, pozwala na komunikację użytkownika z urządzeniami i procesami, uruchamianie programów i nadzorowanie ich pracą - najpowszechniejsze powłoki to: sh, ksh, csh, tcsh, bash * biblioteki systemowe * oprogramowanie Pliki w Unixie: * plik jest ciągiem bajtów * pliki są zorganizowane w postaci drzewa wyrastającego z korzenia ''%%/%%''. Do każdego pliku możemy dostać się podając ścieżkę od korzenia (ścieżka bezwzględna) lub względem bieżącego katalogu (ścieżka względna) * katalogi też są plikami, zawierają informację o innych plikach (katalogach), które się w nich znajdują. Każdy katalog zawiera plik o nazwie ''%%.%%'' (kropka) będący odniesieniem do tego katalogu oraz plik o nazwie ''%%..%%'' (dwie kropki) będący odnośnikiem do katalogu położonego wyżej * urządzenia zewnętrzne (drukarki, terminale, dyski itp.) oraz kanały komunikacji międzyprocesorowej reprezentowane są za pomocą plików "specjalnych" umieszczonych w katalogu ''%%/dev%%'') * działające procesy również dostępne są w postaci plików w katalogu ''%%/proc%%'' * nazwy plików są dowolne, nie dłuższe niż 255 znaków. Pliki których nazwy rozpoczynają się od kropki (np. ''%%.tcshrc%%'') są plikami ukrytymi * każdy plik jest własnością określonego użytkownika oraz jest skojarzony z pewną grupą użytkowników. Dla każdego pliku istnieją jasno określone uprawnienia dostępu (odczytu, edycji i uruchamiania) dla każdego użytkownika. * wszystko w UNIXie jest plikiem Struktura katalogów: * korzeń drzewa katalogów * katalog zawierający najważniejsze polecenia systemowe (np. ''%%/bin/ls%%'', ''%%/bin/cp%%'', etc.) * katalogi domowe użytkowników (np. ''%%/home/marek%%'' to katalog domowy użytkownika ''%%marek%%'') * najważniejsze biblioteki (np. ''%%/lib/libc.so%%'' - biblioteka języka C, ''%%/lib/modules/%%'' - moduły jądra, itp.) * katalog domowy administratora systemu * najczęściej używane miejsce do montowania nośników (systemów plików), np. dyskietek, dysków, płyt cdrom * globalne pliki konfiguracyjne (np. ''%%/etc/passwd%%'' - lista użytkowników (kont)) * pliki urządzeń (np. ''%%/dev/lp1%%'' - drukarka, ''%%/dev/hda1%%'' - pierwsza partycja głównego dysku) * pseudosystem plików z informacjami o procesach (np. ''%%/proc/cpuinfo%%'' - inf. dotyczące procesora) Ścieżka do pliku: * bezwzględna - od korzenia drzewa\\ przykład: ''%%/usr/share/local/%%'' * względna - poczynając od bieżącego katalogu\\ przykład: ''%%../../usr/share/local/%%'' ===== Rozpoczynamy pracę ===== Przed rozpoczęciem pracy w systemie Unix należy posiadać konto, czyli przydzielony identyfikator i hasło dostępu. Każdy użytkownik ma określone prawa dostępu do zasobów systemu. Zasady te ustala administrator (//ang. root//) czyli super użytkownik mający (nieomal) nieograniczoną władzę nad systemem.\\ **Serwery dostępne dla studentów WFAiIS:** * ''%%ferm7.fizyka.umk.pl%%'' - (ferm) serwer aplikacji dostępny dla studentów (dostęp wyłącznie z sieci lokalnej) * ''%%polon7.fizyka.umk.pl%%'' - (polon) serwer aplikacji dostępny dla studentów (dostęp wyłącznie z sieci lokalnej) * ''%%ameryk.fizyka.umk.pl%%'' - serwer dostępowy (ssh, scp, poczta) dostępny z internetu Regulamin sieci LAN można znaleźć pod adresem http://wwwold.fizyka.umk.pl/fizyka/?q=node/141\\ **Zdalna sesja w trybie tekstowym.**\\ Logowanie do powłoki linuksowej z systemu Windows możliwe jest za pomocą programu ''%%Putty%%'', który obsługuje bezpieczny protokół ''%%ssh%%''. Po uruchomieniu programu należy w odpowiednim miejscu podać adres serwera ''%%ferm.fizyka.umk.pl%%''. Rozpoczynamy pracę logując się do systemu podając identyfikator (//ang. login//) oraz hasło (//ang. password//) po czym terminal powinien przywitać nas linią zachęty w postaci:\\ ''%%student@ferm:~$%%''\\ Korzystając z powłoki linuksowej (dostępnej np. w środowisku Cygwin) zalogujemy się za pomocą polecenia ''%%ssh%%''. ''%%$ ssh identyfikator@ferm.fizyka.umk.pl%%''\\ Po zakończeniu pracy wydajemy polecenie ''%%logout%%'' lub ''%%exit%%''.\\ **Zdalna sesja w trybie graficznym:**\\ Chcąc uruchomić graficzne aplikacje na zdalnym serwerze można skorzystać z programu ''%%Cygwin%%'' (środowisko linuksowe w systemie Windows). Połączenie X-serwera ze zdalnym serwerem uzyskujemy wydając w powłoce Cygwina polecenie:\\ ''%%$ X -query ferm.fizyka.umk.pl :8%%''\\ Praca w trybie graficznym jest również możliwa za pośrednictwem VNC. W tym celu należy najpierw po zalogowaniu na wybrany serwer za pomocą ssh wydać komendę: ''%%$ vncserwer%%'' Polecenie uruchomi pulpit identyfikowany za pomocą liczby całkowitej. Przy pierwszym uruchomieniu zostaniemy poproszeniu o podanie hasła, które będzie używane przy łączeniu za pomocą aplikacji klienckiej. Teraz połączenie do pulpitu możliwe jest za pomocą dowolnej aplikacji klienckiej VNC (np. vncwiewer, RealVNC, itp.), gdzie w polu adresu należy podac adres serwera wraz z numerem pulpitu podanym przy uruchomieniu serwera, np:. ''%%ferm.fizyka.umk.pl:13%%'' **Zmiana hasła:**\\ Zmiana hasła na serwerze ''%%ferm%%'' dokonywana jest poprzez formularz dostępny na stronie UCI pod adresem http://www.uci.umk.pl/studenci/konto/korzystanie/. Na serwerach wydziałowych hasło jest uaktualniane raz na dobę (około godz. 2).\\ **Zasady nadawania hasła:** * co najmniej 9 znaków, w tym przynajmniej jedna duża litera i znak specjalny lub cyfra * prZeMIesZanE DUżE i małe litery oraz cyfry i znaki specj@1ne * nie podawać swoich danych osobistych, daty urodzenia itp. * nie należy stosować słów które można znaleźć w słowniku wyrazów polskich lub angielskich * nie używać prostych sekwencji np.: qwerty, 123456 Hasło powinno stanowić pozornie przypadkowy ciąg znaków ale powinno dać się łatwo zapamiętać.\\ Przykłady haseł: ''%%t@Jn3|ha51o%%'' albo ''%%s2Um1_d0kola=la5%%''\\ ====== Podstawowe polecenia ====== ===== Anatomia polecenia ===== Ogólna postać poleceń wydawanych w powłoce wygląda tak:\\ ''%%polecenie [-opcje]… [argumenty]…%%''\\ gdzie ''%%polecenie%%'' jest nazwą programu (polecenia), który chcemy uruchomić (program powinien znajdować się w jednym z katalogów zawartych w zmiennej systemowej ''%%$PATH%%'', jeśli tak nie jest to musimy podać pełną ścieżkę do danego polecenia, np. ''%%/bin/ls%%'') * **''%%-opcje%%''** to ciąg znaków poprzedzony myślnikiem. Opcje modyfikują działanie programu (polecenia). Na przykład ''%%ls -t%%'' wyświetli listę plików w kolejności posortowanej względem czasu modyfikacji. * **''%%argumenty%%''** to elementy na których operuje polecenie (np. nazwy plików, ciągi znaków). Na przykład ''%%ls /bin%%'' wyświetli listę plików w katalogu ''%%/bin%%''. Notacja stosowana w dokumentacji zakłada, że zawartość nawiasów kwadratowych ''%%[]%%'' jest opcjonalna zaś ''%%…%%'' (wielokropek) oznacza, że poprzednia część polecenia może się powtarzać wielokrotnie\\ Przykład:\\ ''%%ls [-la] [katalog]…%%''\\ oznacza, że polecenie ''%%ls%%'' może być modyfikowane za pomocą opcji ''%%-a%%'' lub ''%%-l%%'' i argumentem tego plecenia może być katalog lub lista katalogów oddzielona znakiem spacji.\\ ''%%$ ls -l /usr%%''\\ ''%%$ ls -a /usr /home /etc%%''\\ ''%%$ ls -l -a /etc%%''\\ ''%%$ ls -la /home /etc%%''\\ ===== Gdzie szukać pomocy? ===== Pomoc na temat sposobu użycia danego polecenia możemy otrzymać uruchamiając je z dodatkową opcją ''%%-h%%'' lub ''%%--help%%''.\\ Przykład:\\ ''%%$ ls —help%%''\\ ''%%$ man -h%%'' ==== Podręcznik systemowy ==== W systemie znajduje się podręcznik ''%%man%%'' zawierający opis wszystkich dostępnych poleceń i programów, opis funkcji systemowych oraz zainstalowanych bibliotek i wiele innych przydatnych informacji.
wyświetla strony podręcznika (manuala) dotyczące danego polecenia\\ Postać: ''%%man [rozdzial] [opcje] nazwa%%''[cmd:man]\\ Otrzymujemy opis składni i wszystkich opcji danego polecenia\\ Przykład:\\ ''%%$ man ls%%''\\ wyświetli opis polecenia ''%%ls%%'' zawarty w podręczniku man.\\ Program ''%%man%%'' oferuje wiele skrótów klawiszowych ułatwiających przeglądanie zawartości podręcznika oraz wyszukiwanie wyrażeń. Szczegółową pomoc na ten temat otrzymamy wciskając przycisk ''%%h%%''.
przeszukuje podręcznik (opisy poleceń) w poszukiwaniu danej nazwy.\\ Postać: ''%%apropos nazwa...%%''[cmd:whatis]\\ Przykład:\\ ''%%$ whatis ls less%%''\\ Wyświetli krótki opis poleceń ''%%ls%%'' i ''%%less%%''.
przeszukuje opisy poleceń podręcznika ''%%man%%'' w poszukiwaniu danego słowa (wyrażenia regularnego).\\ Postać: ''%%apropos słowo_szukane%%''[cmd:apropos]\\ Przykład:\\ ''%%$ apropos grep%%''\\ Wyświetli opisy zawierające słowo ''%%grep%%''.\\ Możliwe jest stosowanie wyrażeń regularnych (więcej informacji w rozdziale dotyczących narzędzi tekstowych).\\ Przykład:\\ ''%%$ apropos ’^l(..)?s$’%%''\\ Wyświetli wpisy które rozpoczynają się od litery ''%%l%%'', kończą na literą ''%%s%%'' a pomiędzy nimi mogą wystąpić dowolne dwa znaki lub brak znaku. Więc do tego wzoru pasuje zarówno opis polecenia ''%%ls%%'' jak i ''%%less%%''
podręcznik GNU\\ Postać: ''%%info [temat]%%''[cmd:info]\\ Pomiędzy tematami i zagadnieniami w podręczniku ''%%info%%'' można poruszać się poprzez odnośniki. Najważniejsze skróty klawiszowe: ''%%n%%'' - przejście do następnego rozdziału, ''%%p%%'' - przejście do poprzedniego rozdziału, ''%%u%%'' - wyjście do rozdziału nadrzędnego (np. do spisu rozdziałów), ''%%Enter%%'' - przejście do treści wskazanej w menu przez kursor. Pełną listę możliwych poleceń otrzymamy wciskając ''%%?%%''.
Przykład:\\ ''%%$ info%%''\\ wyświetli spis najważniejszych tematów opisanych w podręczniku\\ ''%%$ info coreutils%%''\\ wyświetli rozdział dotyczący podstawowych narzędzi dostarczonych z systemem\\ ''%%$ info ls%%''\\ opis polecenia ''%%ls%%''\\
pomoc dotycząca poleceń wbudowanych w powłokę\\ Postać: ''%%help [komenda]%%''[cmd:help]\\ Powłoka zawiera wiele wbudowanych poleceń. Aby poznać ich listę wystarczy uruchomić polecenie ''%%help%%'' nie podając żadnych argumentów. O wszystkich poleceniach powłoki można też dowiedzieć się z podręcznika ''%%man bash%%''. Polecenie ''%%type%%'' pozwala przekonać się o tym czy dane polecenie jest wbudowanym poleceniem powłoki.\\ ''%%$ type cd%%''\\ ''%%cd jest wewnętrznym poleceniem powłoki%%''
''%%$ type date%%''\\ ''%%date jest /bin/date%%''
lrwxrwxrwx 1 student stud 5 03-06 20:14 etc_link -> /etc/
-rw-r--r-- 2 student stud 465 2009-04-02 passwd_link
* **touch** zmienia datę modyfikacji pliku lub tworzy pusty plik\\
Postać: ''%%touch [opcje] plik…%%''[cmd:touch]\\
Przykład:\\
''%%$ touch nowyplik%%''\\
\\
* **file** wyświetla informację o zawartości pliku\\
Postać: ''%%file [opcje] plik…%%''[cmd:file]\\
Przykład:
$ file main.c index.html /etc/hosts
main.c: ASCII C program text
index.html: HTML document text
/etc/hosts: ASCII text
* **du** wyświetla rozmiar zajętej przestrzeni dyskowej\\
Postać: ''%%du [opcje] plik…%%''[cmd:du]\\
Najważniejsze opcje:\\
''%%-b%%'' w bajtach\\
''%%-k%%'' w kilobajtach\\
''%%-m%%'' w megabajtach\\
''%%-h%%'' w czytelnej formie\\
''%%-s%%'' tylko objętość całkowita dla każdego argumentu\\
''%%-c%%'' podsumowanie dla wszystkich plików\\
Przykład:\\
''%%$ du -ms dokumenty%%''\\
wyświetli zajętość w megabajtach katalogu ''%%dokumenty%%''\\
''%%$ du -h -s -c *%%''\\
wyświetli rozmiar wszystkich plików i katalogów w bieżącym katalogu w czytelnej postaci oraz z podsumowaniem.\\
Inne przydatne polecenia: stat, mkfifo, lsof, shred, mknod, dd, find, rename
==== Znaki specjalne powłoki - dopasowanie nazw plików ====
* ***** dopasowanie dowolnego ciągu znaków
* **?** dopasowanie pojedynczego znaku
* **[lista** ] dopasowanie jednego ze znaków z podanej listy
* **[^lista** ] dopasowanie jednego znaku nie należącego do listy
* **{ciag1,ciag2,…}** rozwinięcie napisu z użyciem wszystkich kombinacji ciągów znaków
Przykłady:\\
''%%$ ls *.txt%%''\\
''%%$ cp /etc/p*d \sim%%''\\
''%%$ rm plik?.txt %%''\\
''%%$ ls /etc/[abc]* %%''\\
''%%$ ls /bin/*[a-g] %%''\\
''%%$ rm *.[^a-z]%%''\\
''%%$ mkdir katalog_{1,2,3}%%''\\
''%%$ rmdir plik_[1-4]%%''\\
''%%$ echo {Ala,Ula,Ola}" ma "{psa,kota,rybkę}.%%''
==== Ćwiczenia ====
- Obejrzyj zawartość katalogów ''%%/etc%%'', ''%%/proc%%'', ''%%/dev%%'', ''%%/home%%'', ''%%/dev%%'', ''%%/lib%%''.
- Utwórz w swoim katalogu domowym katalogi według poniższego schematu. Spróbuj dokonać tego za pomocą jednego polecenia.
.
|-- katalog
| `-- katalog
|-- Moj nowy katalog
|-- nowy_katalog
`-- raz
`-- dwa
|-- cztery
`-- trzy
- Do katalogu ''%%katalog%%'' przekopiuj plik ''%%/etc/passwd%%''
- Do katalogu ''%%raz/dwa/trzy%%'' skopuj wszystkie pliki z katalogu ''%%/etc%%'' w których nazwach występuje litera ’a’, ’b’ lub ’p’.
- W katalogu ''%%nowy_katalog%%'' utwórz pusty plik o nazwie ''%%plik_testowy%%''
- W katalogu ''%%katalog%%'' utwórz dowiązanie do pliku ''%%nowy_katalog/plik_testowy%%'' o nazwie ''%%link%%''
- Za pomocą edytora tekstu (np. ''%%nano%%'') zmień treść pliku ''%%nowy_katalog/plik_testowy%%'' i zapisz w nim kilka linijek tekstu. Następnie go usuń i sprawdź zawartość pliku ''%%katalog/link%%''.
- W katalogu ''%%nowy_katalog%%'' utwórz dowiązanie symboliczne o nazwie ''%%link_symb%%'' do pliku ''%%katalog/link%%''. Zmień zawartość pliku ''%%nomy_katalog/link_symb%%'' i zmień jego zawartość. Następnie usuń plik ''%%katalog/link%%''. Na co wskazuje teraz utworzone dowiązanie symboliczne?
- Zmień nazwę katalogu ''%%nowy_katalog%%'' na ''%%stary_katalog%%''
- Przenieś katalog ''%%raz%%'' do katalogu ''%%stary_katalog%%'' zmieniając jego nazwę na ''%%jeden%%''
- Usuń wszystkie utworzone w tym zadaniu katalogi i pliki.
- Jaka jest różnica między wynikiem polecenia ''%%ls%%'' a ''%%ls *%%'' ?
- Ile dowiązań ma pusty katalog? Ile dowiązań ma katalog głowny ''%%/%%'' ?
===== Narzędzia tekstowe =====
Opis narzędzi służących do wyświetlania i modyfikowania zawartości plików tekstowych można znaleźć w dokumentacji systemowej pod hasłem ''%%textutils%%''.\\
==== Najważniejsze polecenia ====
wyświetla zawartość strumienia wejściowego lub zawartość plików\\ Postać: ''%%cat [opcje] [plik…]%%''[cmd:cat]
Przykład:\\ ''%%$ cat /etc/passwd%%''\\ wyświetli zawartość pliku ''%%/etc/passwd%%''. Polecenie ''%%cat%%'' może też posłużyć do tworzenia plików tekstowych\\ ''%%$ cat > pliktekstowy%%''\\ ''%%to jest tekst%%''\\ ''%%który zostanie umieszczony%%''\\ ''%%w pliku o nazwie pliktekstowy%%''\\ ''%%Aby zakończyć wciśnij Ctrl+ D%%''\\ lub do łączenia kilku plików w jedną całość - rezultat można przekierować do pliku:\\ ''%%$ cat pliktekstowy dane.txt > nowy.txt%%''\\
wyświetla zawartość pliku strona po stronie\\ Postać: ''%%more [opcje] plik%%''[cmd:more]\\ Przykład:\\ ''%%$ more /etc/passwd%%''\\ wyświetli zawartość pliku ''%%passwd%%''\\ ''%%$ ls /bin | more%%''\\ pozwala przejrzeć listę plików w katalogu ''%%/bin%%''\\
wyświetl zawartość pliku strona po stronie\\ Postać: ''%%less [opcje] plik%%''[cmd:less]\\ Jest to ulepszona wersja polecenia ''%%more%%'' pozwalająca poruszać się po pliku zarówno w przód jak i w tył.\\ Przykład:\\ ''%%$ less /etc/passwd%%''\\ \\ Programy ''%%more%%'' i ''%%less%%'' posiadają wiele funkcji dostępnych za pomocą skrótów klawiszowych o których możemy się dowiedzieć wciskając ''%%h%%''. Inne przydatne funkcje uzyskamy wciskając: ''%%q%%'' - wyjście z programu, ''%%/%%''//wyrażenie// - poszukuje //wyrażenia// w pliku, ''%%n%%'' - szuka następnego wystąpienia.\\
wyświetla początek pliku\\ Postać: ''%%head [opcje] plik…%%''[cmd:head]\\ Przykład:\\ ''%%$ head /etc/passwd%%''\\ wyświetli 10 pierwszych linii pliku ''%%passwd%%''\\ Najważniejsze opcje:\\ ''%%-n liczba%%'' wyświetli określoną liczbę początkowych linii\\ ''%%-c liczba%%'' wyświetli określona liczbę początkowych znaków\\ Przykład:\\ ''%%$ head -c 10 /etc/passwd%%''\\ wyświetli 10 pierwszych znaków pliku ''%%passwd%%''\\ ''%%$ ls | head -n 3%%''\\ wyświetli nazwy trzech pierwszych plików z bieżącego katalogu\\
wyświetla koniec pliku\\ Postać: ''%%tail [opcje] plik…%%''[cmd:tail]\\ Działanie i opcje takie same jak w poleceniu ''%%head%%'' z tą różnicą, że wyświetlane jest zakończenie pliku.\\ Przykład:\\ ''%%$ tail -n 4 /etc/passwd%%''\\ wyświetli cztery ostatnie linie pliku ''%%passwd%%''\\
porównuje pliki znak po znaku\\ Postać: ''%%cmp [opcje] plik1 plik2%%''[cmd:cmp]\\ Polecenie wyświetla pozycje pierwszego napotkanego znaku (bajtu) różniącego oba pliki.\\ Przykład:\\ ''%%$ cmp plik1.txt plik2.txt%%''\\ ''%%plik1.txt plik2.txt różnią się: bajt 30 linia 2%%''\\ Najważniejsze opcje:\\ ''%%-c%%'' wypisuje różniące się znaki\\
znajduje różnice pomiędzy plikami taktowymi\\ Postać: ''%%diff [opcje] plik1 plik2%%''[cmd:diff]\\ Przykład:\\ ''%%$ diff plik1.txt plik2.txt%%''\\ \\ Wynikiem działania jest wyświetlenie fragmentów tekstu, które są różne w obu plikach wraz z informacją jak należy zmienić pierwszy z plików aby otrzymać drugi z użyciem 3 operacji: zamień (''%%c%%''), usuń (''%%d%%''), dodaj (''%%a%%'') fragment tekstu.\\ Przykładowo komunikat ''%%1,10c2,5%%'' oznacza, że należy zamienić linie od 1 do 10 w pierwszym pliku na tekst który występuje w liniach od 2 do 5 w drugim pliku. ''%%3a5%%'' oznacza, że w linii trzeciej pierwszego pliku należy dodać 5 linię z drugiego pliku\\ Wyjście programu ''%%diff%%'' tworzy łatkę, którą można zaaplikować za pomocą polecenia ''%%patch%%'' na drugim pliku aby jego zawartość uczynić identyczną z zawartością pliku pierwszego.\\ Przykład:\\ ''%%$ diff plik1 plik2 > patch.txt%%''\\ ''%%$ patch plik1 patch.txt%%''
aplikuje łatkę z programu ''%%diff%%'' na pliku tekstowym\\ Postać: ''%%patch plikoryginalny plikzłatką%%''[cmd:patch]
liczy ilość znaków, słów i linii w pliku\\ Postać: ''%%wc [opcje] plik…%%''[cmd:wc]\\ Najważniejsze opcje:\\ ''%%-c%%'' drukuje liczbę znaków/bajtów w pliku\\ ''%%-w%%'' drukuje liczbę wyrazów w pliku\\ ''%%-l%%'' drukuje ilość linii w pliku\\ Przykład:\\ ''%%$ wc -c dane.txt%%''\\ wyświetli ilość bajtów zajętych przez plik\\ Przykład:\\ ''%%$ wc -l *.txt%%''\\ wyświetli liczbę linii we wszystkich plikach o rozszerzeniu .txt znajdujących się w bieżącym katalogu.\\ ''%%$ ls /bin/ | wc -l %%''\\ zwróci liczbę plików w katalogu ''%%/bin/%%''.
wypisuje posortowaną zawartość pliku tekstowego\\ Postać: ''%%sort [opcje] plik…%%''[cmd:sort]\\ Przykład:\\ ''%%$ sort dane.txt > posortowane.txt%%''\\ spowoduje posortowanie linii zawartych w pliku ''%%dane.txt%%'' i przesłanie wyniku do pliku ''%%posortowane.txt%%''\\ Niektóre opcje:\\ ''%%-r%%'' odwraca kolejność sortowania\\ ''%%-u%%'' usuwa duplikaty\\ ''%%-f%%'' wyłącza rozróżnianie małych i dużych liter\\ ''%%-n%%'' sortowanie liczb (standardowo dane sortowane traktowane są jako ciągi znaków)\\ Przykład:\\ ''%%$ du . | sort -n%%''\\ wyświetli listę plików w bieżącym katalogu posortowaną według rozmiaru\\ ''%%+liczba%%'' pozwala pominąć przy sortowaniu określoną liczbę pól (pola standardowo są rozdzielone białymi znakami (przestarzała wersja))\\ ''%%-k poz1[,poz2]%%'' pozwala specyfikować względem którego pola (kolumny) chcemy sortować\\ ''%%-t separator%%'' używa podanego znaku jako separatora pól (kolumn)\\ Przykład:\\ ''%%$ ls -l | sort +4 -n%%''\\ wyświetli posortowaną listę plików według piątej kolumny otrzymanej za pomocą polecenia ''%%ls -l%%''\\ ''%%$ sort -k 5 -t : /etc/passwd%%''\\ Wyświetli posortowana listę użytkowników (piąta kolumna pliku ''%%passwd%%'', gdzie kolumny sa oddzielone dwukropkami).
wyświetla linie pasujące do wzorca\\ Postać: ''%%grep [opcje] wzorzec [plik…]%%''[cmd:grep]\\ Przykład:\\ ''%%$ grep student /etc/passwd%%''\\ wyświetli linie z pliku ''%%/etc/passwd%%'' zawierającą słowo "student"\\ Często stosuje się to polecenie jako filtr w strumieniu, np:\\ ''%%$ ls /bin | grep z | wc -l%%''\\ wyświetli liczbę plików z katalogu ''%%bin%%'' zawierających w nazwie literę "z"\\ Najważniejsze opcje:\\ ''%%-v%%'' wyświetlane są wiersze w których wzorzec nie pojawia się\\ ''%%-l%%'' wyświetli tylko nazwę pliku w którym znaleziono wzorzec\\ ''%%-i%%'' nie rozróżnia dużych i małych liter we wzorcu\\ ''%%-A n%%'' wyświetla także $n$ kolejnych linii\\ ''%%-B n%%'' wyświetla także $n$ poprzedzających linii\\
Wypisuje wybrane fragmenty linii\\ Postać: ''%%cut [opcja]... [plik]...%%''[cmd:cut]\\ Niektóre opcje:\\ ''%%-b N%%'' wypisuje tylko podane bajty\\ ''%%-f N%%'' wypisuje tylko podane kolumny (standardowo separatorami kolumn są białe znaki)\\ ''%%-d znak%%'' użyj podanego znaku jako separatora kolumn\\ Przykład:\\ ''%%$ cut -c 1 /etc/passwd%%''\\ wyświetli tylko pierwszy znak z każdej linii.\\ ''%%$ cut -c 4-7 plik%%''\\ wyświetli znaki od 4-go do 7-go.\\ ''%%$ cut -f 2- plik%%''\\ Wyświetli linie bez pierwszej kolumny\\ ''%%$ cut -d : -f 5 /etc/passwd%%''\\ wyświetli imiona i nazwiska użytkowników (5 kolumna pliku ''%%passwd%%'', gdzie kolumny oddzielone są dwukropkiem).\\
łączy linie plików\\ Postać: ''%%paste pliki...%%''[cmd:paste]
Przykładowo:\\ ''%%$ paste plik1 plik2%%''\\ wypisze na standardowym wyjścuiu połoczone zawratości obu plików.
Zamienia znaki wczytane ze standardowego wejścia.\\ Postać: ''%%tr łańcuch1 łańcuch2 tr -d łańcuch tr -s łańcuch%%''[cmd:tr]\\ Najważniejsze opcje:\\ ''%%-d%%'' usuń podane w łańcuchu znaki\\ ''%%-s%%'' usuń wielokrotne wystąpienia tych samych znaków\\ Przykład:\\ ''%%$ echo $PATH | tr : ’ ’%%''\\ wyświetla wartość zmiennej $PATH zastępując dwukropki spacjami.\\ ''%%$ echo Witaj swiecie | tr ai ia%%''\\ w podanym haśle zamienia literę ’i’ na ’a’ oraz literę ’a’ na ’i’\\ ''%%$ echo Witaj swiecie | tr [a-z] [A-Z]%%''\\ zamienia małe litery na duże\\ ''%%$ cat plik | tr -d ’ ’%%''\\ usuwa spacje z pliku\\ ''%%$ cat plik | tr -s ’ ’%%''\\ usuwa powtórzenia spacji w pliku\\
drwxr-xr-x 3 marek users 4096 sty 5 03:40 .
drwxr-xr-x 9 marek users 4096 sty 4 23:34 ..
-rwxr-xr-x 1 marek users 7312 sty 4 23:54 a.out
-rw-r--r-- 1 marek users 572 sty 4 23:54 main.c
drwxr-xr-x 2 marek users 4096 sty 5 03:40 wynik
W kolejnych kolumnach otrzymujemy następujące informacje:\\
10 znaków określających typ i uprawnienia pliku, ilość dowiązań do pliku, nazwa właściciela, nazwa grupy, rozmiar w bajtach, data i godzina modyfikacji oraz nazwa pliku.\\
| - | rwx | rwx | rwx |
| typ | u | g | o |
| pliku | | | |
| | | | |
Pierwszy znak oznacza typ pliku: ''%%d%%'' to katalog, ''%%-%%'' to zwykły plik.\\
Następne 9 znaków określa uprawnienia pliku (''%%r%%'' - odczyt,''%%w%%'' - zapis, ''%%x%%'' - wykonywanie) odpowiednio dla trzech zbiorów użytkowników: dla właściciela, dla grupy oraz dla wszystkich innych. Z powyższego przykładu wynika więc, że plik ''%%main.c%%'' może być odczytywany przez wszystkich ale jego zawartość może zmieniać tylko właściciel ''%%marek%%''. Plik ''%%a.out%%'' może zostać uruchomiony przez wszystkich (nadane uprawnienie ''%%x%%''). Plik ''%% wynik%%'' jest katalogiem (d) i wszyscy mogą odczytywać jego zawartość (wyświetlać listę plików w katalogu) oraz mają prawa wykonywania (x), czyli mają dostęp do katalogu ale tylko właściciel może zmieniać zawartość tego katalogu (tworzyć lub usuwać pliki w tym katalogu).\\
Poniższe polecenia pozwalają na zmianę uprawnień plików:\\
zmienia prawa dostępu do pliku\\ Postać: ''%%chmod [opcje] prawa plik…%%''[cmd:chmod]\\ Polecenie służy do ustawiania praw odczytu (r), zapisu (w) i wykonywania (x) pliku. Prawa te można nadać jednemu z trzech zbiorów użytkowników: właścicielowi pliku (u), grupie (g) i całej reszcie (o). Można też zmienić prawa wszystkim użytkownikom (a). Możliwe są trzy operacje: (+) dodanie uprawnień, (-) cofnięcie uprawnień lub (=) zastąpienie starych uprawnień nowymi.\\ Składnia zmiany uprawnień powinna wyglądać tak: ''%%[[ugoa...][+-=][rwx...],...]%%''
Przykład:\\ ''%%$ chmod a+r dane.txt%%''\\ nadanie prawa do odczytu dla wszystkich\\ ''%%$ chmod u-x *.sh%%''\\ cofnięcie prawa do wykonywania przez właściciela plików o rozszerzeniu ''%%.sh%%''\\ ''%%$ chmod ug=r dane.txt%%''\\ nadanie prawa do odczytu przez właściciela i grupę\\ ''%%$ chmod ugo=rwx dane.txt%%''\\ nadanie wszystkim uprawnień do odczytu, zapisu i wykonywania pliku - równoważne poleceniu\\ ''%%$ chmod a=rwx dane.txt%%''\\ Najważniejsze opcje:\\ ''%%-v%%'' wyświetla komunikat o każdym zmienionym uprawnieniu\\ ''%%-R%%'' zmień uprawnienia katalogów i całej ich zawartości\\ Przykład:\\ ''%%$ chmod -R a+r %%''\\ zezwoli wszystkim na możliwość czytania wszystkich plików w domowym katalogu\\ \\ Innym sposobem nadawania uprawnień jest zapis numeryczny, np:\\ ''%%$ chmod 703 dane.txt%%''\\ Pierwsza cyfra określa uprawnienia użytkownika, druga - grupy a trzecia - reszty. Wartość (od 0 do 7) oznacza rodzaj uprawnień: wykonywanie (1), zapis (2) lub odczyt (4). W celu nadania kilku uprawnień należy zsumować odpowiednie cyfry. W powyższym przykładzie 7 oznacza nadanie praw do odczytu, zapisu i wykonywania (4+2+1) dla właściciela, 0 oznacza, że grupa nie posiada żadnych uprawnień a 3 odpowiada nadaniu prawa do zapisu i wykonywania (2+1) dla pozostałych użytkowników.\\
zmienia właściciela i grupę pliku\\ Postać: ''%%chown [opcje] użytkownik[:grupa] plik…%%''[cmd:chown]\\
zmienia grupę użytkowników pliku\\ Postać: ''%%chgrp [opcje] grupa plik…%%''[cmd:chgrp]\\ Uwaga: polecenia ''%%chown%%'' oraz ''%%chgrp%%'' mogą byż niedostępne dla zwykłego użytkonika.
podaje informacje o działających procesach\\ Postać: ''%%ps [opcje]%%''[cmd:ps]
Opcje polecenia ''%%ps%%'' moga byc podawane w różnej formie: poprzedzone myślnikiem (w stylu UNIX) np. ''%%ps -l%%'', bez myślinika (styl BSD), np. ''%%ls aux%%'' lub poprzedzone dwoma myślnikami (styl GNU), np. ''%%ps –help%%''. W razie niepewności zajrzyj do dokumentacji ''%%man ps%%''.\\ Najważniejsze opcje:\\ ''%%-l%%'' wyświetla więcej informacji o procesach\\ ''%%-f%%'' format ekstra-pełny\\ ''%%-A%%'' lub ''%%e%%'' wszystkie procesy\\ ''%%-U numer_użytkownika%%'' lub ''%%U%%'', lub ''%%–user%%'' procesy uruchomione przez danego użytkownika\\ ''%%u%%'' format zorientowany na użytkownika\\ ''%%f%%'' wyświetl drzewo procesów\\ Przykład:\\ ''%%$ ps%%''\\
PID TTY TIME CMD
3873 pts/2 00:00:00 su
3875 pts/2 00:00:00 bash
3893 pts/2 00:00:00 tcsh
3899 pts/2 00:00:00 vim
3904 pts/2 00:00:00 ps
PID (//ang. Process ID//) jest liczbą jednoznacznie identyfikującą proces w systemie. TTY to nazwa terminala z którego zostało uruchomione polecenie ''%%CMD%%''.\\ ''%%$ ps -l%%''\\
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
4 S 1002 3873 3211 0 76 0 - 710 wait pts/2 00:00:00 su
0 S 1002 3875 3873 0 75 0 - 1271 wait pts/2 00:00:00 bash
0 S 1002 3893 3875 0 75 0 - 908 rt_sig pts/2 00:00:00 tcsh
0 T 1002 3899 3893 0 78 0 - 997 finish pts/2 00:00:00 vim
0 R 1002 3945 3893 0 76 0 - 581 - pts/2 00:00:00 ps
Oznaczenia: UID - numer użytkownika, PPID - numer procesu rodzica (procesu z którego wywodzi się dany proces), PRI - priorytet, NI - wartość parametru NICE ustawianego poleceniem ''%%nice%%''
lista procesów w czasie rzeczywistym\\ Postać: ''%%top [opcje]%%''[cmd:top]\\ Polecenie ''%%top%%'' prezentuje listę działających procesów wraz z najważeniejszymi informacjami na temat obciążenia systemu (zajętość pamięci i obciążenie CPU). Program udostępnia wiele skrutów klawiszoych pozwalających na sortowanie i filtrowanie listy procesów:
wyświetla listę skrótów klawiszowych
''%%k%%'' zabija wskazany proces
''%%r%%'' zmienia parametr NICE wskazanego proesu
''%%f%%'' wybór pól prezentujących informacje o procesach
''%%q%%'' wyjście z programu
Polecenie:\\ ''%%$ top -u username%%''\\ wyświetla listę procesów wskazanego użytkonika.
lista procesów w czasie rzeczywistym\\ Postać: ''%%htop [opcje]%%''[cmd:htop]\\ Jest to bardizej przyjazna dla użytkownika wersja programu ''%%top%%''
wyświetla drzewo procesów\\ Postać: ''%%pstree [opcje]%%''[cmd:pstree]\\ Najważniejsze opcje:\\ ''%%-p%%'' dodaje numery PID\\ ''%%-H PID%%'' wyróżnia podany proces (''%%-h%%'' aktualny proces)\\
zabija proces\\ Postać: ''%%kill [-sygnal] PID...%%''[cmd:kill]\\ Polecenie wysyła sygnał do procesu o numerze PID. Jeżeli nie sprecyzujemy rodzaju sygnału wówczas ''%%kill%%'' wysyła sygnał ''%%SIGINT%%'' przerywający działanie procesu.\\ Opcja ''%%-l%%'' wyświetla listę sygnałów jakie można przesłać do procesów (więcej na ten temat w dokumentacji ''%%man 7 signal%%'')\\ Najważniejsze sygnały:\\ ''%%2 SIGINT%%'' przerwanie procesu (ten sygnał jest wysyłany do procesu gdy wciśniemy ''%%Ctrl+C%%'')\\ ''%%9 SIGKILL%%'' sygnał “zabicia” procesu\\ ''%%19 SIGSTOP%%'' zawieszenie procesu (''%%Ctrl+Z%%'')\\ ''%%18 SIGCONT%%'' wznowienie zatrzymanego procesu\\ ''%%$ kill -9 3899%%''\\ wysyła sygnał ''%%KILL%%'' o numerze 9 do podanego procesu\\ ''%%$ kill -9 -1%%''\\ wysyła sygnał ''%%KILL%%'' do wszystkich procesów (uwaga: spowoduje wylogowanie, gdyż zamknięty zostanie także proces powłoki)\\ ''%%$ kill -SIGSTOP 4008%%''\\ zawiesza działanie procesu\\ ''%%$ kill -18 4008%%''\\ wznawia działanie zawieszonego procesu\\ Wbudowanw w powłokę Bash polecenie ''%%kill%%'' umożliwia dodatkowo wystyłanie sygnałów do procesów identyfikowanych za pomocą numeru zadania JID (zobacz polecenie )
zabija procesy o podanej nazwie\\ Postać: ''%%killall [-s sygnal] nazwa ...%%''[cmd:killall]\\ Przykład:\\ ''%%$ killall sleep%%''\\
wyświetla numery PID procesów pasujących do wzorca\\ Postać: ''%%pgrep [opcje] wyrażenie%%''[cmd:pgrep]\\ Najważniejsze opcje:\\ ''%%-u użytkownik%%'' zawęża wyniki tylko do procesów danego użytkownika.\\ ''%%-l%%'' dodaj informację o nazwie procesu\\ Przykład:\\ ''%%$ pgrep -u marek sleep%%''\\ wyświetli numery procesów uruchomionych przez użytkownika ''%%marek%%'' zawierających w nazwie ''%%sleep%%''.\\ ''%%$ kill -9 $(pgrep -u marek sleep)%%''\\ wyśle syknał ''%%SIGKILL%%'' do procesów uruchomionych przez użytkownika ''%%marek%%'' zawierających w nazwie ''%%sleep%%''.\\
wysyła sygnał do procesów o nazwach pasujących do wzorca\\ Postać: ''%%pgrep [-sygnał] [opcje] wyrażenie%%''[cmd:pkill]\\ Polecenie to rozszerza działanie ''%%pgrep%%'' o możliwość wysłania sygnału do pasujących procesów.\\ Przykład:\\ ''%%$ pkill -9 -u marek sleep%%''\\ wyśle sygnał ''%%SIGKILL%%'' do procesów uruchomionych przez użytkownika ''%%marek%%'' zawierających w nazwie ''%%sleep%%''.\\
podaje status procesów uruchomionych w bieżącej powłoce\\ Postać: ''%%jobs [-l]%%''[cmd:jobs]\\ Przykład:\\ ''%%$ jobs%%''\\
[1]- Done sleep 100
[2]+ Stopped vim
W nawiasie kwadratowym podany jest numer zadania ''%%JID%%'' (//ang. Job ID//), obok stan procesu (zatrzymany, uruchomiony, itp.).\\ Opcja ''%%-l%%'' wyświetla dodatkowo ''%%PID%%'' procesu.\\
uruchamia zawieszone zadanie w tle\\ Postać: ''%%bg [JID…]%%''[cmd:bg]\\ Gdy nie podano numery zadania to wznawiane jest ostatio zawieszone zadanie.\\ Przykład wznowienia zadania o numerze JID 2:\\ ''%%$ bg %2%%''
uruchamia zatrzymane zadanie na pierwszym planie\\ Postać: ''%%fg [JID]%%''[cmd:fg]\\ Przykład:\\ ''%%$ fg %2%%''\\ spowodowałoby przeniesienie programu ''%%vim%%'' z poprzedniego przykładu na pierwszy plan
uruchamia program z zadanym priorytetem\\ Postać: ''%%nice -priorytet [opcje] polecenie%%''[cmd:nice]\\ Przykład:\\ ''%%$ nice +19 emacs%%''\\ uruchomi program ''%%emacs%%'' z parametrem ''%%NICE%%'' równym 19. Im większa wartość ''%%NICE%%'' tym mniej zasobów będzie pochłaniało wykonanie procesu, czas jego trwania ulegnie wydłużeniu dając pierwszeństwo procesom z mniejszym priorytetem.
pozwala zwiększyć priorytet działającego procesu\\ Postać: ''%%renice priorytet [PID] [-u użytkownik]%%''[cmd:renice]\\ Opcja ''%%-u%%'' pozwala zmienić priorytet procesom uruchomionym przez danego użytkownika.\\ Przykład:\\ ''%%$ renice 19 4343 -u student%%''\\ zwiększy priorytet do 19 procesu o numerze ''%%PID%%'' 4343 oraz wszystkim procesom uruchomionym przez użytkownika ''%%student%%'' .\\
uruchamia proces o zadanym czasie\\ Postać: ''%%at [-f plik] CZAS%%''[cmd:at]\\ Polecenie lub lista poleceń do uruchomienia wczytywana jest ze standardowego wejścia, lub po opcji ''%%-f%%'' możemy podać nazwę pliku w który zawarta jest lista poleceń do uruchomienia. ''%%CZAS%%'' może być wyrażony w wielu formach (po szczegóły zajrzyj do podręcznika ''%%man at%%''). Wynik działania polecenia wysyłany jest do skrzynki pocztowej użytkownika. Przykład:\\ ''%%$ at 10:21 -f plik%%''\\ spowoduje uruchomienie poleceń zawartych w pliku ''%%plik%%'' o godzinie 10.21\\ ''%%$ echo ls | at now +1minutes%%''\\ spowoduje uruchomienie polecenia ''%%ls%%'' dokładnie za minutę
wyświetla listę zadań ustawionych do wykonania za pomocą polecenia ''%%at%%''\\ Postać: ''%%atq%%''[cmd:atq]\\
usuwa z kolejki zadanie o podanym numerze\\ Postać: ''%%atm numer_zadania%%''[cmd:atm]\\
program zarządzający tabelami demona ''%%cron%%'', który służy do wykonywania zaplanowanych w czasie operacji\\ Postać: ''%%crontab [-e|-l|-r]%%''[cmd:crontab]\\ Opcje:\\ ''%%-e%%'' edycja tabeli zadań\\ ''%%-r%%'' usunięcie bieżącej tabeli zadań\\ ''%%-l%%'' wyświetla bieżącą tabele zadań\\ Tabela zadań powinna zawierać w każdej linii wpis następującej postaci:\\ ''%%MINUTY GODZINY DNI MIESIACE DNI_TYGODNIA polecenie%%''\\ gdzie ''%%MINUTY%%'' to liczba z zakresu 0-59, ''%%GODZINY%%'' - liczba z zakresu 0-23, ''%%DNI%%'' - liczba z zakresu 1-31, ''%%MIESIACE%%'' od 1 do 12, ''%%DNI_TYGODNIA%%'' od 1 do 7. Użycie gwiazdki ''%%*%%'' zamiast liczy oznacza dowolną wartość.\\ Przykładowa tabela zadań:
30 18 * * * rm -f ~/tmp
30 0 1 1,6,12 * mail student@fizyka.umk.pl < wiadomosc.txt
Powyższy zapis oznacza, że codziennie o godzinie 18:30 wykonywana jest komenda usuwająca katalog ''%%\sim/tmp%%'', zaś 30 minut po północy w pierwszy dzień stycznia, czerwca i grudnia wysyłany jest za pomocą poczty elektronicznej plik ''%%wiadomosc.txt%%'' do podanego użytkownika. Więcej szczegółów w podręczniku demona ''%%cron%%'' i polecenia ''%%crontab%%''.
uruchamia polecenie, które nie zostanie przerwane w momencie wylogowania\\ Postać: ''%%nohup polecenie%%''[cmd:nohup]\\ Przykład:\\ ''%%$ nohup sleep 1000 &%%''
identyfikuje procesy używające plików lub gniazd sieciowych\\ Postać: ''%%fuser [opcje] plik...%%''[cmd:fuser]\\ Polecenie ''%%fuser%%'' wyświetla listę numerów procesów PID, które wykorzystują w danym momencie wskazany plik, system plików lub gniazdo sieciowe.\\ Najważniejsze opcje:\\ ''%%-k%%'' zabij procesy zamiast wypisywać ich numery PID\\ ''%%-u%%'' podaj nazwę właściciela procesu wraz z numerem PID\\ ''%%-v%%'' wyświetl więcej szczegółów na temat procesów\\ Przykład:\\ ''%%$ fuser /home%%''\\ wypisze numery procesów używających plików w katalogu ''%%/home%%''
podaje datę i czas systemowy\\ Postać: ''%%date [opcje] [format]%%''[cmd:date]\\
wyświetla kalendarz\\ Postać: ''%%cal [opcje]%%''[cmd:cal]\\
wyświetla zmienne środowiskowe\\ Postać: ''%%printenv [zmienna]%%''[cmd:printenv]\\ Domyślnie polecenie wyświetli listę wszystkich zmiennych środowiskowych.\\ Przykład:\\ ''%%$ printenv PATH%%''\\ wyświetli wartość przypisaną do zmiennej ''%%PATH%%''.
wyświetla nazwę terminala\\ Postać: ''%%tty%%''[cmd:tty]\\
kim jestem\\ Postać: ''%%whoami%%''[cmd:whoami]\\
informacje o użytkowniku - GID, UID itp.\\ Postać: ''%%id [opcje] [użytkownik]%%''[cmd:id]\\
nazwy bieżących grup\\ Postać: ''%%groups [użytkownik]%%''[cmd:groups]\\
informacje o użytkowniku.\\ Postać: ''%%finger [użytkownik]%%''[cmd:finger]\\
lista zalogowanych użytkowników\\ Postać: ''%%who [opcje]%%''[cmd:who]\\
informacje o systemie\\ Postać: ''%%uname [opcje]%%''[cmd:uname]\\
nazwa hosta\\ Postać: ''%%hostname [opcje]%%''[cmd:hostname]\\
infromacje o zajęctości zamontowanych dysków\\ Postać: ''%%df [opcje]... [plik]...%%''[cmd:df]\\ Polecenie wypisuje listę wszystkich zamontowanych systemów plików wraz z informacją o ich zajętości i miejscu zamontowania.\\ ''%%$ df%%''
Filesystem 1K-blocks Used Available Use% Mounted on
udev 3997676 0 3997676 0% /dev
tmpfs 806444 3368 803076 1% /run
/dev/sda3 95596964 87020120 3677672 96% /
tmpfs 4032208 0 4032208 0% /sys/fs/cgroup
/dev/sdb1 507904 38664 469240 8% /boot/efi
/dev/sda5 546370624 491924808 26621944 95% /home
Najważniejsze opcje:\\ ''%%-m%%'' zajętość w MB\\ ''%%-k%%'' zajętość w KB\\ ''%%-h%%'' zajętość w formie czytelnej (wartość z odpoiednim przyrostkiem B, KB, MB, GB)\\ ''%%-T%%'' wyświetla inforamcje o typie systemu plików (np. ext4, NTFS, ...)\\ Jeżeli argumentem polecenia jest plik lub katalog to wyświetlana jest zajętość dysku na którym ten plik rezyduje.\\ ''%%$ df -h -T /%%''
Filesystem Type Size Used Avail Use% Mounted on
/dev/sda3 ext4 92G 83G 3,6G 96% /
informacje o zajętości pamięci w systmie\\ Postać: ''%%free [opcje]%%''[cmd:free]\\ Polecenie wyświetla informację o całkowitej zajętej pamięci fizycznej oraz pamięci wymiany. Opcje ''%%-b%%'', ''%%-k%%'', ''%%-m%%'', ''%%-g%%'' pozwalają określić w jakich jednostkach wyświetlane są wartości (B, kB, MB i GB odpowiednio). Opcja ''%%-h%%'' wypisze wartości w czytelnej formie dodając odpowiedni przyrotek okreslający rozmiar.\\ Przykład:\\ ''%%$ free -h%%''
total used free shared buff/cache available
Mem: 7,7G 3,0G 1,4G 219M 3,3G 4,2G
#!/bin/bash
# To jest skrypt ktory wyswietla komunikat
echo "Witaj świecie"
exit 0
===== Uruchamianie skryptu =====
Ciąg instrukcji zawartych w pliku tekstowym możemy uruchomić w powłoce Bash wydając polecenie:\\
''%%$ bash skrypt.sh%%''\\
Jeżeli skrypt zawiera poprawny //h//ashbang w pierwszej linii i jezeli plikowi nadamy\\
''%%$ chmod a+x skrypt.sh%%''\\
wówczas skrypt możemy uruchomić podając jego nazwę poprzedzoną ścieżką do pliku. Przykładowo, gdy ''%%skrypt.sh%%'' znajduje się w bieżącym katalogu polecenie\\
''%%$ ./skrypt%%''\\
uruchomi wszystkie instrukcje zawarte w pliku. Skrypt możemy umieścić też w jednym z katalogów ze zmiennej ''%%$PATH%%'' i wówczas do uruchomienia skryptu wystarczy podać jego nazwę.
Aby dodać bieżący katalog do zmiennej ''%%$PATH%%'' należy wydać polecenie\\
''%%$ export PATH=".:$PATH"%%''\\
===== Wykrywanie błędów w skrypcie =====
W przypadku wystąpienia błędu podczas interpretowania skryptu powłoka przerywa jego działanie wyświetlając stosowny komunikat. Podczas poszukiwania przyczyn powstawania błędu warto uruchomić skrypt poleceniem:\\
''%%$ bash -x skrypt.sh%%''\\
Opcja ''%%-x%%'' powoduje, że każda instrukcja skryptu przed uruchomieniem jest wypisywana na standardowe wyjście diagnostyczne.
===== Zmienne =====
Zmienne definiuje się używając składni ''%%zmienna=wartosc%%'' lub w przypadku zmiennych liczbowych ''%%let zmienna=liczba%%'', np.\\
''%%$ napis="Ala ma kota"%%''\\
''%%$ let wynik=10%%''\\
Nazwa zmiennej może składać się z dowolnych liter, cyfr (cyfra nie może być pierwszym znakiem nazwy zmiennej) oraz znaku podkreślenia.\\
Wartość umieszczoną w zmiennej wydobywamy umieszczając $ przed nazwą zmiennej ewentualnie otaczając nazwę zmiennej klamrami, np.:\\
''%%$ echo ${napis}%%''\\
''%%$ Ala ma kota%%''\\
''%%$ echo $HOME%%''\\
''%%$ /home/student%%''\\
''%%$ echo ${wynik}%%''\\
''%%$ 10%%''\\
=== Tablice ===
W powłoce Bash mamy do dyspozycji tablice jednowymiarowe. Nie muszą one być deklarowane. Do poszczególnych elementów tablicy odwołujemy sie poprzez nawiasy kwadratowe ''%%${zmienna[indeks]}%%'', gdzie ''%%index%%'' jest liczbą całowitą dodatnią.\\
''%%$ kolor[0]=bialy%%''\\
''%%$ kolor[1]=czarny%%''\\
''%%$ kolor[5]=zielony%%''\\
''%%$ echo Kolor pierwszy to ${kolor[1]}%%''\\
Kolor pierwszy to ''%%czarny%%''\\
''%%$ echo Wszystkie kolory: ${kolor[*]}%%''\\
''%%Wszystkie kolory: bialy czarny zielony%%''\\
Tablice indeksowane są liczbami całkowitymi począwszy od zera. Zmienną tablicową można zainicjować ciągiem wartości podanych w nawiasach ''%%zmienna=(wartosc1 wartosc2 ... wartoscN)%%'', np.\\
''%%$ dzien=(poniedzialek wtorek sroda czwartek piatek sobota niedziela)%%''\\
''%%$ echo ${dzien[6]}%%''\\
''%%sobota%%''\\
''%%$ echo "Dni tygodnia: ${dzien[*]}"%%''\\
''%%Dni tygodnia: poniedzialek wtorek sroda czwartek piatek sobota niedziela%%''\\
Liczbę elementów tablicy uzyskujemy wyrażeniem ''%%${#zmienna[*]}%%''\\
''%%$ echo "Ilosc dni tygodnia = ${#dzien[*]}"%%''\\
''%%Ilosc dni tygodnia = 7%%''\\
Wyrażenie ''%%${#zmienna[indeks]}%%'' zwraca ilość znaków zawartych w elemencie tablicy o podanym indeksie.\\
''%%$ echo Slowo ${dzien[1]} zawiera ${#dzien[1]} znakow%%''\\
''%%Slowo wtorek zawiera 6 znakow%%''\\
Polecenie ''%%unset zmienna%%'' usuwa podaną zmienną. Chcąc usunąc wybrany element tablicy należy wykonać ''%%unset tablica[index]%%''.\\
''%%$ unset kolor%%''\\
''%%$ unset dzien[4]%%''\\
=== Zmienne $, $#, $0, $1. ===
Zmienna ''%%$*%%'' zawiera listę wszystkich argumentów z jakimi został wywołany skrypt, zmienna ''%%$#%%'' podaje liczbę tych argumentów, zmienna ''%%$0%%'' zawiera nazwę skryptu, zaś zmienne ''%%$1%%'', ''%%$2%%'', ''%%$3%%'', itd. zawierają kolejne argumenty.
Przykład skryptu i nazwie ''%%argumenty.sh%%'', który wyświetli swoją nazwę, liczbę argumentów oraz pierwsze dwa argumenty:\\
#!/bin/bash
echo Nazwa skryptu=$0
echo Podales $# argumentow
echo Oto one: $*
echo Argument 1 = $1
echo Argument 2 = $2
exit 0
Przykładowe działanie:\\
''%%$ ./argumenty.sh%%''
Nazwa skryptu=./argumenty.sh
Podales 0 argumentow
Oto one:
''%%$ ./argumenty.sh Ala ma kota%%''
Nazwa skryptu=./argumenty.sh
Podales 3 argumentow
Oto one: Ala ma kota
Argument 1 = Ala
Argument 2 = ma
===== Operacje arytmetyczne i warunki logiczne =====
Powłoka ''%%bash%%'' pozwala na wykonywanie prostych operacji arytmetycznych na liczbach całkowitych za pomocą instrukcji ''%%let%%''.\\
Przykład:\\
''%%$ let suma=2+2%%''\\
''%%$ echo $suma%%''\\
''%%4%%''\\
''%%$ let liczba=$suma*2%%''\\
''%%$ echo $liczba%%''\\
''%%8%%''\\
Składnia polecenia ''%%let%%'' pozwala na używanie zmiennych liczbowych bez konieczności poprzedzania ich znakiem ''%%$%%''.\\
''%%$ let liczba=suma*suma+3%%''\\
''%%$ let suma++%%''\\
Dostępne operatory oraz priorytet ich wykonywania są takie same jak w języku C. Dodatkowo, dostępny jest operator ''%%**%%'' realizujący potęgowanie.\\
''%%$ let x=2**10%%''\\
''%%$ echo $x%%''\\
''%%1024%%''\\
Równoważne użyciu polecenia ''%%let%%'' jest zastosowanie ''%%(( wyrażenie ))%%''.\\
Przykłady:\\
''%%$ a=$((1+2))%%''\\
''%%$ a=$(($a*$a))%%''\\
''%%$ a=$((a+1))%%''\\
''%%$ ((a++))%%''\\
Proste operacje arytmetyczne można także wykonywać za pomocą instrukcji . Obliczenia o precyzji zmiennopozycyjnej (dla liczb rzeczywistych) można wykonywać za pomocą kalkulatorów lub ''%%dc%%''.
**Wyrażenia warunkowe** realizowane są za pomocą polecenia ''%%[ wyrażenie ]%%'' lub polecenie ''%%test%%''. Wartością zwracaną polecenia jest kod (status programu) 0 w przypadku gdy wyrażenie jest prawdziwe lub 1 gdy wyrażenie jest fałszywe.\\
Uwaga: wyrażenie ''%%[%%'' jest poleceniem, dlatego wszystkie argumenty muszą byc oddzielone spacją.\\
Porównywanie napisów odbywa się za pomocą argumentów ''%%==%%'', ''%%!=%%'', ''%%<%%'' i ''%%>%%''.\\
''%%$ [ $SHELL == /bin/bash ] && echo Uzywasz powloki Bash %%''\\
''%%$ test $USER != root && echo Nie jestes administratorem%%''\\
Porównując liczby całkowite należy skorzystać z operatorów ''%%-eq%%'' ((//ang. equal//) - równe), ''%%-ne%%'' ((//ang. not equal//) - nie równe), ''%%-lt%%'' ((//ang. less then//) - mniejsze niż), ''%%-gt%%'' ((//ang. greater than//) - większe niż), ''%%-le%%'' ((//ang. less equal//) - mniejsze równe) i ''%%-ge%%'' ((//ang. greater equal//) - większe równe).\\
''%%$ [ $RANDOM -lt 16384 ] && echo Reszka || echo Orzel%%''\\
''%%$ test $(cat /etc/passwd | wc -l) -gt 100 && echo Uzytkownikow jest wiecej niz 100%%''\\
Wyrażenie warunkowe może tez sprawdzać atrybuty plików:\\
| ''%%-e plik%%'' |plik istnieje |
| ''%%-f plik%%'' |plik istnieje i jest zwykłym plikiem |
| ''%%-d plik%%'' |plik istnieje i jest katalogiem |
| ''%%-r plik%%'' |użytkownik posiada prawo do czytania pliku |
| ''%%-w plik%%'' |użytkownik posiada prawo do zmiany zawartości pliku |
| ''%%-x plik%%'' |użytkownik posiada prawo do wykonywania pliku |
| ''%%-o plik%%'' |użytkownik jest właścicielem pliku |
[tab:testy]
''%%$ [ -e /etc/passwd ] && echo Plik /etc/passwd istnieje %%''\\
''%%$ test -d /etc/passwd && echo Plik /etc/passwd jest katalogiem %%''\\
Dostępne mamy też operatory ''%%&&%%'' (AND), ''%%||%%'' (OR) oraz zaprzeczenie ''%%!%%'' (NOT) pozwalające łączyć wyrażenia warunkowe w bardziej złożone warunki.\\
W takim przypadku złożone wyrażenie logiczne należy umieścić w dodatkowych nawiasach ''%%[]%%''.\\
''%%$ [[ $(($RANDOM%2)) -eq 1 && ! $USER == root ]] && echo Warunek jest spelniony%%''\\
''%%$ test ! -w /etc/passwd || $USER != root && echo Nie masz uprawnien do modyfikcaji /etc/passwd lub nie jestes root-em.%%''\\
Wyrażenia warunkowe znajdują zastosowanie wraz z instrukcją ''%%if%%'' oraz pętlą ''%%while%%'' oraz ''%%until%%''.\\
===== Instrukcje sterujące =====
=== Warunek if. ===
Składnia warunku:\\
----
''%%if %%''//wyrażenie//''%%;%%''\\
''%%then%%''\\
//instrukcje//\\
''%%fi%%''
----
\\
Gdy //wyrażenie// jest prawdziwe (zobacz wyrażenia warunkowe) wówczas wykonywane są //instrukcje// pomiędzy słowem ''%%then%%'' i ''%%fi%%''.\\
Przykład:
#!/bin/bash
if [ $# -eq 0 ];
then
echo "Nie podałeś żadnych argumentów "
fi
exit 0
Bardziej rozbudowane wyrażenie warunkowe:\\
----
''%%if %%''//wyrażenie//''%%;%%''\\
''%%then%%''\\
//instrukcje//\\
''%%else%%''\\
//instrukcje 2//\\
''%%fi%%''
----
\\
Instrukcje zawarte w bloku rozpoczynającym się od ''%%else%%'' są wykonywane gdy //wyrażenie// nie jest spełnione. Np.:
#!/bin/bash
if [ $# -eq 0 ];
then
echo "Nie podałeś żadnych argumentów. "
echo "Podaj liczbe calkowita "
echo "Sprobuj: $0 liczba"
exit 1
fi
if [ $1 -lt 0 ];
then
echo Liczba $1 jest mniejsza od zera
else
echo Liczba $1 jest wieksza lub równa 0
fi
exit 0
Przykład - skrypt o nazwie ''%%rzut.sh%%'' wyświetlający słowo Orzeł lub Reszka z prawdopodobieństwem 1/2.
#!/bin/bash
if [ $(($RANDOM%2)) -eq 1 ];
then
echo "Reszka"
else
echo "Orzeł"
fi
Przykład - skrypt o nazwie ''%%podglad.sh%%'' który dla danego w argumencie pliku wyświetla jego zawartość za pomocą ''%%less%%'', zaś jeżeli podany argument jest nazwą pliku wówczas wyświetlana jest zawartość tego katalogu.
#!/bin/bash
if [ $# -lt 1 ];
then
echo "Podaj plik lub katalog jako argument."
echo "Uzycie: $0 plik"
exit 1
fi
if [ -f $1 ];
then
less $1
else
if [ -d $1 ];
then
ls -l $1
else
echo "Blad: $1 nie jest plikiem ani katalogiem"
fi
fi
=== Pętla for. ===
Pętla ''%%for%%'' wykonuje zadane instrukcje tyle razy ile jest elementów na podanej //liście//.
----
''%%for%%'' //zmienna// ''%%in%%'' //lista//;\\
''%%do%%''\\
//instrukcje//\\
''%%done%%''
----
\\
W każdej iteracji kolejny element z //listy// jest podstawiany do //zmiennej//.\\
Przykład użycia w linii komend:\\
''%%$ for f in *; do echo "Plik $f zajmuje $(du -sb $f) bajtow"; done %%''\\
dla każdego pliku w bieżącym katalogu wyświetli komunikat o ilości zajmowanych bajtów. Przykład - skrypt zamieniający w nazwach plików duże litery na małe.
#!/bin/bash
if [[ $# -eq 0 || $1 == "-h" || $1 == "--help" ]];
then
echo "Uzycie: $0 [-h] plik..."
echo "Zamienia w nazwach podanych plikaow duze litery na male (np. Plik.TXT na plik.txt)."
echo "Opcja -h wyswietla pomoc."
exit 1
fi
for plik in $*
do
if [ -e $plik ];
then
nowy_plik=$(echo $plik | tr '[A-Z]' '[a-z]')
if [ $plik != $nowy_plik ];
then
echo "Zamieniam: $plik na $nowy_plik"
mv $plik $nowy_plik
fi
else
echo "Blad: $plik - nie ma takiego pliku"
fi
done
Powłoka ''%%Bash%%'' umożliwia także użycie pętli ''%%for%%'' znanej z języka C.\\
----
''%%for ((%%'' //wyrażenie1// ; //warunek// ; //wyrażenie2// ''%% ))%%''\\
''%%do%%''\\
//instrukcje//\\
''%%done%%''
----
Wszystkie //instrukcje// są wykonywane dopóki //warunek// jest spełniony. Początkowe //wyrażenie1// jest uruchomione tylko raz przed rozpoczęciem pętli, zazwyczaj służy do zainicjowania zmiennych. Końcowe //wyrażenie2// jest wykonywane na końcu każdej iteracji, zazwyczaj używane jest do zwiększenia (lub zmniejszenia) pewnego licznika.\\
Przykład - skrypt wyznaczający silnię:
#!/bin/bash
if [[ $# -eq 0 || $1 == "-h" || $1 == "--help" ]];
then
echo "Uzycie: $0 [-h] liczba"
echo "Oblicza silnie podanej liczby."
echo "Opcja -h wyswietla pomoc."
exit 1
fi
silnia=1;
for (( i=2 ; i<=$1 ; i++ ))
do
let silnia=silnia*i;
done
echo "Silnia wynosi $silnia"
Przykład - wielokrotne losowanie kostką:
#!/bin/bash
if [[ $1 == "-h" || $1 == "--help" ]];
then
echo "Rzut kostka"
echo "Uzycie: $0 [-h] liczba"
echo "Wyswietla wynik rzutu kostka powtorzenoge zadana liczbe razy."
echo "Opcja -h wyswietla pomoc."
exit 1
fi
ile=1
if [ $# -gt 0 ]; then ile=$1 ;fi
for (( i=1 ; i<=ile ; i++ )) do
wynik=$(($RANDOM%6+1))
echo $wynik
done
=== Pętla while. ===
Składnia pętli ''%%while%%'':\\
----
''%%while%%'' //warunek//\\
''%%do%%''\\
//instrukcje//\\
''%%done%%''
----
Podane //instrukcje// są wykonywana dopóki //warunek// jest prawdziwy.\\
Przykład - stoper, odlicza sekundy od rozpoczęcia działania skryptu:\\
#!/bin/bash
if [[ $1 == "-h" || $1 == "--help" ]];
then
echo "Stoper - po prostu uruchom bez argumentow."
echo "Ctrl+C konczy odliczanie."
echo "Opcja -h wyswietla pomoc."
exit 1
fi
let s=0
while true; do
echo $s
sleep 1
let s++
done
Instrukcja ''%%true%%'' zwraca zawsze wartość logiczną prawda. Analogicznie ''%%false%%'' daje odpowiedź negatywną.\\
=== Instrukcja case. ===
Instrukcja ''%%case%%'' pozwala na wykonanie wybranych instrukcji w zależności od wartości przyjmowanej przez pewną zmienną. Działanie bardzo podobne do instrukcji ''%%if%%'' jednak często wygodniejsze w użyciu, zwłaszcza gdy mamy więcej niż dwie możliwości do wyboru.\\
----
''%%case%%'' //zmienna// ''%%in%%''\\
//wartość_1//''%%)%%''\\
//instrukcje 1//\\
''%%;;%%''\\
//wartość_2//''%%)%%''\\
//instrukcje 2//\\
''%%;;%%''\\
…\\
''%%*)%%''\\
//instrukcje//\\
''%%;;%%''\\
''%%esac%%''
----
Przykład - skrypt wyświetla menu:\\
#!/bin/sh
while true
do
clear
echo "============================"
echo "[1] Wyświetl dzisiejszą datę"
echo "[2] Wyswietl listę plików w bierzącym katalogu"
echo "[3] Pokarz kalendarz"
echo "[4] Pokarz listę zalogowanych uzytkownków"
echo "[5] Zakończ"
echo "============================"
echo -n "Wybierz liczbę [1-5]: "
read akcja
case $akcja in
1) echo "Dzisiejsza data: $(date)"
;;
2) echo "Lista plików w katalogu $(pwd)"
ls -l
;;
3) cal ;;
4) echo "Lista zalogowanych" ; who ;;
5) echo "Do widzenia"
exit 0 ;;
*) echo "Blad!!! Proszę wybrać wartość 1,2,3,4, lub 5";
esac
echo "Wciśnij klawisz Enter"
read
done
=== Instrukcja exit. ===
Instrukcja ''%%exit%%'' kończy działanie skryptu. Liczba całkowita umieszczona po instrukcji ''%%exit%%'' jest zwracana do powłoki jako wynik działania skryptu. W przypadku poprawnego wykonania skrypt powinien kończyć się wyrażeniem ''%%exit 0%%''. Gdy skrypt nie został wykonany poprawnie wówczas po słowie ''%%exit%%'' wstawiamy dowolną liczbę różną od zera (wartość zwracanej liczby może w ten sposób sygnalizować rodzaj błędu który spowodował niepoprawne wykonanie skryptu). Wartość zwracana po słowie ''%%exit%%'' umieszczana jest w zmiennej ''%%$?%%''.\\
=== Instrukcja read. ===
Instrukcja ''%%read%%'' pozwala wczytać linie tekstu do podanej zmiennej.\\
Przykład:
#!/bin/bash
echo Podaj imie i nazwisko
read dane
echo Witaj $dane
Możliwe jet też czytanie tekstu z pliku linia po linii, np.:\\
#!/bin/bash
echo Podaj nazwe pliku do wyswietlenia
read plik
if [ ! -r $plik];
then
echo "Nie moge czytac z pliku $plik"
exit 1
fi
cat $plik | while read linia
do
echo $linia
done
=== Funkcje. ===
W powłoce ''%%bash%%'' możliwe jest definiowanie funkcji, czyli wyodrębnionych podprogramów oznaczonych pewną unikatową nazwą.\\
----
''%%nazwa_funkcji( )%%''\\
''%%{%%''\\
//instrukcje do wykonania//\\
''%%return%%''\\
''%%}%%''
----
\\
Funkcja wykonywana jest w momencie gdy pojawi się wywołanie jej nazwy.\\
Przykład:
#!/bin/sh
pomoc()
{
echo "Wyswietla liste i liczbe zalogowanych uzytkonikow"
echo "Opcje:"
echo "-h pomoc"
echo "-l liczba zalogowanych użytkoników"
echo "-w lista zalogowanych użytkoników"
return
}
# lista niepowtarzajacych sie nazw zalogowanych uzytkownikow
lista()
{
users=( $(who | cut -f 1 -d ' ' | sort | uniq ) )
return
}
case $1 in
"-h") pomoc ;;
"-l") lista
echo "Liczba zalogowanych uzytkonikow = ${#users[*]} "
;;
"-w") lista
echo "Lista uzytkownikow: ${users[*]}" ;;
*) pomoc ;;
esac
Do funkcji możemy przekazać argumenty dodając je przy wywołaniu po nazwie funkcji. Kolejne argumenty umieszczone są w zmiennych ''%%$1%%'', ''%%$2%%'', ''%%$3%%'', itd. Ilość argumentów dana jest poprzez ''%%$#%%'', lista wszystkich argumentów zawarta jest w zmiennej ''%%$%%'' a zmienna ''%%$0%%'' zawiera nazwę funkcji.
#!/bin/sh
funkcja()
{
echo "Argumenty funkcji $*"
echo "Ilość argumentów funkcji $#"
return 0
}
echo "Argumenty skryptu $*"
echo "Ilość argumentów skryptu $#"
echo Uruchamiam funkcje z argumentami: raz dwa trzy
funkcja raz dwa trzy
echo Uruchamiam funkcje z argumentami będącymi nazwami plików z bierzącego katalogu
funkcja *
exit 0
Zmienne użyte wewnątrz funkcji maja zakres globalny, tzn. ich wartość jest dostępna poza funkcją (np. zmienna ''%%users%%'' z pierwszego przykładu w tym paragrafie). Chcąc ograniczyć czas życia zmiennej wyłącznie do obszaru zdefiniowanego przez funkcję należy zadeklarować zmienną poprzedzając ja instrukcją ''%%local%%''. Używanie zmiennych lokalnych może uchronić przed wieloma trudnymi do wykrycia błędami, więc gdzie tylko jest to możliwe, wewnątrz funkcji należy je stosować.\\
Przykład:
#!/bin/sh
funkcja()
{
local zmienna="Zmienna lokalna"
echo "Jestem wewnątrz funkcji"
echo "zmienna=$zmienna"
return 0
}
zmienna="Zmienna globalna"
echo "Zmienna=$zmienna"
funkcja
echo "Zmienna=$zmienna"
exit 0
===== Przykłady =====
[[http://www.fizyka.umk.pl/~grochu/unix/skrypty_bash/|Tutaj]] znajdują się przykładowe skrypty w ''%%Bash%%''.
====== Indeks polecen ======
- ustawia lub wyświetla aliasy\\
- usuwa z kolejki zadanie o podanym numerze\\
- uruchamia proces o zadanym czasie\\
- kalkulator o dowolnej precyzji\\
- uruchamia zawieszone zadanie w tle\\
- kompresuje pliki\\
- wyświetla kalendarz\\
- wyświetla zawartość strumienia wejściowego lub zawartość plików\\
- zmienia bieżący katalog\\
- zmienia grupę użytkowników pliku\\
- zmienia prawa dostępu do pliku\\
- zmienia właściciela i grupę pliku\\
- porównuje pliki znak po znaku\\
- kopiuje pliki i katalogi\\
- Wypisuje wybrane fragmenty linii\\
- podaje datę i czas systemowy\\
- infromacje o zajęctości zamontowanych dysków\\
- znajduje różnice pomiędzy plikami taktowymi\\
- wyświetla rozmiar zajętej przestrzeni dyskowej\\
- wyświetla linię tekstu\\
- oblicza wartość wyrażenia matematycznego\\
- uruchamia zatrzymane zadanie na pierwszym planie\\
- wyświetla informację o zawartości pliku\\
- szuka plików w drzewie katalogów\\
- informacje o użytkowniku.\\
- informacje o zajętości pamięci w systmie\\
- połączenie z serwerem FTP pozwalającym na przesyłanie plików\\
- identyfikuje procesy używające plików lub gniazd sieciowych\\
- wyświetla linie pasujące do wzorca\\
- nazwy bieżących grup\\
- kompresuje pliki\\
- wyświetla początek pliku\\
- pomoc dotycząca poleceń wbudowanych w powłokę\\
- nazwa hosta\\
- podaje informacje o hoście\\
- lista procesów w czasie rzeczywistym\\
- informacje o użytkowniku - GID, UID itp.\\
- podręcznik GNU\\
- podaje status procesów uruchomionych w bieżącej powłoce\\
- zabija procesy o podanej nazwie\\
- zabija proces\\
- wyświetl zawartość pliku strona po stronie\\
- tworzy dowiązanie (sztywne lub symboliczne) do plików\\
- wyświetl ustawienia lokalizacji\\
- wyszukiwanie plików o podanej nazwie\\
- wyświetla zawartość katalogu\\
- przeglądarka stron WWW\\
- wysyłanie poczty elektronicznej\\
- wyświetla strony podręcznika (manuala) dotyczące danego polecenia\\
- tworzy katalog\\
- wyświetla zawartość pliku strona po stronie\\
- klient poczty elektronicznej\\
- przenosi pliki\\
- uruchamia program z zadanym priorytetem\\
- uruchamia polecenie, które nie zostanie przerwane w momencie wylogowania\\
- łączy linie plików\\
- wyświetla numery PID procesów pasujących do wzorca\\
- wysyła pakiet testowy do wybranego hosta\\
- wysyła sygnał do procesów o nazwach pasujących do wzorca\\
- wyświetla zmienne środowiskowe\\
- wypisuje sformatowany tekst\\
- podaje informacje o działających procesach\\
- wyświetla drzewo procesów\\
- wyświetla bieżący katalog\\
- pozwala zwiększyć priorytet działającego procesu\\
- usuwa puste katalogi\\
- usuwa pliki\\
- Edytor strumieniowy\\
- wyświetla sekwencję liczb\\
- szyfrowane połączenie z serwerem FTP pozwalającym na przesyłanie plików\\
- wypisuje posortowaną zawartość pliku tekstowego\\
- szyfrowane połączenie ze zdalnym komputerem\\
- wyświetla koniec pliku\\
- program do interaktywnej rozmowy z użytkownikiem\\
- narzędzie do archiwizowania danych\\
- czyta standardowe wejście i przesyła je na standardowe wyjście oraz do pliku.\\
- połączenie ze zdalnym komputerem\\
- lista procesów w czasie rzeczywistym\\
- zmienia datę modyfikacji pliku lub tworzy pusty plik\\
- wyświetla trasę pokonywana do danego hosta\\
- Zamienia znaki wczytane ze standardowego wejścia.\\
- wyświetla nazwę terminala\\
- usuwa alias o podanej nazwie z powłoki\\
- informacje o systemie\\
- liczy ilość znaków, słów i linii w pliku\\
- program do pobierania zasobów stron www i serwerów ftp\\
- przeszukuje podręcznik (opisy poleceń) w poszukiwaniu danej nazwy.\\
- wyszukuje (wszystkie) położenia plików binarnych, źródłowych i stron podręcznika danego polecenia\\
- kim jestem\\
- lista zalogowanych użytkowników\\
- wysyła wiadomość tekstową do użytkownika\\
- buduje i uruchamia polecenia powłoki na podstawie tekstu ze standardowego wejścia\\
- wyświetla w nieskończoność dany ciąg znaków\\
- kompresuje pliki i katalogi\\