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)
źródło:
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żytkownikamarek
) - 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:
ferm.fizyka.umk.pl
- serwer aplikacji dostępny dla studentów (dostęp wyłącznie z sieci lokalnej)ameryk.fizyka.umk.pl
- serwer dostępowy (ssh i pop3)
Regulamin sieci LAN można znaleźć pod adresem
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
Zmiana hasła:
Zmiana hasła na serwerze ferm
dokonywana jest poprzez formularz dostępny na stronie UCI pod adresem . 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
Wstępne ustawienia powłoki tcsh
:
Na serwerze ferm
domyślną powłoką jest tcsh
. Jednak bardziej powszechną i być może wygodniejszą w użytkowaniu jest powłoka Bash
. Jedna z zalet powłoki Bash
sa ustawienia dopełniania składni i wyświetlania podpowiedzi po wciśnięciu klawisza TAB
. Chcąc uzyskać identyczne zachowanie w powłoce tcsh
należy zdefiniować zmienną powłoki autolist
. Można zachować te ustawienia umieszczając odpowiedni wpis w pliku konfiguracyjnym .tcshrc
znajdującym się w katalogu domowym wydając polecenia:
echo "set autolist" >> ~/.tcshrc source ~/.tcshrc
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ładls -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ładls /bin
wyświetli listę plików w katalogu/bin
.
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
Powyższa notacja używana jest do opisu poleceń oficjalnej dokumentacji.
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 poleceń ułatwiających poruszanie się po dokumentacji oraz wyszukiwanie wyrażeń. Pomoc na ten temat otrzymamy wciskając h
.
Przeszukuje podręcznik (opisy poleceń) w poszukiwaniu danej nazwy.
Postać: apropos nazwa...
[cmd:apropos]
Przykład:
$ whatis ls less
Wyświetli krótki opis poleceń ls
i less
.
Przeszukuje podręcznik (opisy poleceń) 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. Pełna 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
Zarządzanie plikami
Opis narzędzi służących do zarządzania plikami można znaleźć w dokumentacji systemowej pod hasłem fileutils
.
Najważniejsze polecenia
wyświetla zawartość katalogu
Postać: ls [opcje] [plik…]
[cmd:ls]
Przykład:
$ ls
wyświetli zawartość bieżącego katalogu
$ ls /bin
wyświetli listę plików w katalogu /bin
Polecenie ls
może być uruchamiane z wieloma parametrami (zobacz man ls
).
Najczęściej używanymi są:
-l
wyświetla dokładne informacje o plikach (rodzaj pliku, uprawnienia, nazwę właściciela, datę modyfikacji)
-a
wyświetla także pliki ukryte (ich nazwa zaczyna się od kropki)
-s
wyświetla dodatkowo rozmiar plików
-R
rekurencyjne wyświetlanie zawartości katalogu (wraz z podkatalogami)
-t
posortowanie wyniku według czasu modyfikacji pliku
-S
posortowanie wyniku według rozmiaru plików
Przykład:
$ ls -la /etc /home
wyświetli dokładną informację o wszystkich plikach w katalogach /etc
i /home
tworzy katalog
Postać: mkdir [-p] katalog…
[cmd:mkdir]
Przykład:
$ mkdir nowykatalog
utworzy katalog o nazwie nowykatalog
Najważniejsze opcje:
-p
pozwala tworzyć “gałęzie” katalogów
Przykład:
$ mkdir -p kat1/kat2/kat3/kat4
utworzy cztery puste katalogi (jeden wewnątrz drugiego)
usuwa puste katalogi
Postać: rmdir [-p] katalog…
[cmd:rmdir]
zmienia bieżący katalog
Postać: cd [katalog]
[cmd:cd]
Przykład:
$ cd /usr/bin
spowoduje przejście do katalogu /usr/bin
$ cd ~
spowoduje powrót do katalogu domowego
$ cd ..
przejście do katalogu położonego wyżej
usuwa pliki
Postać: rm [opcje] plik…
[cmd:rm]
Przykład:
$ rm dane.txt
usunie plik o nazwie dane.txt
$ rm *.txt
usunie wszystkie pliki z rozszerzeniem .txt
Najważniejsze opcje:
-f
nie pytaj o potwierdzenie podczas usuwania
-r
usuń rekurencyjnie, przydatne przy usuwaniu katalogów wraz z zawartością
Przykład:
$ rm -fr katalog
usunie cały katalog
kopiuje pliki i katalogi
Postać: cp plik1 plik2 cp plik... katalog cp -r katalog1... katalog2
[cmd:cp]
Przykład:
$ cp dane.txt kopia_dane.txt
tworzy kopię pliku dane.txt
o nazwie kopia_dane.txt
$ cp * jakis_katalog/
stworzy kopie plików z bieżącego katalogu w katalogu jakis_katalog
Najważniejsze opcje:
-r
rekurencyjnie - pozwala kopiować całe katalogi
Przykład:
$ cp -r /usr/src .
kopiuje katalog /usr/src
do bieżącego katlogu
$ cp -r /usr/src nowykatalog
kopiuje katalog /usr/src
do bieżącego katlogu zmieniając jego nazwę na nowykatalog
przenosi pliki
Postać: mv plik1 plik2 mv plik… katalog
[cmd:mv]
Przykład:
$ mv dane.txt nowedane.txt
zmienia nazwę pliku dane.txt
na nowedane.txt
$ mv *.c programy/
przeniesie wszystkie pliki z bieżącego katalogu posiadające rozszerzenie *.c
do katalogu programy
wyświetla bieżący katalog
Postać: pwd
[cmd:pwd]
/home/student
tworzy dowiązanie do pliku
Postać: ln [opcje] plik nazwa_dowiazania
[cmd:ln]
Przykład:
$ ln dane.txt lndane.txt
tworzy dowiązanie do pliku dane.txt
o nazwie lndane.txt
Uwaga: każdy plik istnieje dopóki nie usuniemy wszystkich jego dowiązań
Najważniejsze opcje:
-s
tworzy dowiązanie symboliczne, pozwala na tworzenie dowiązań do katalogów oraz do plików położonych w obrębie innego systemu plików.
O liczbie dowiązań do pliku informuje wynik polecenia ls -l
(druga kolumna)
$ ln -s /etc etc_link
$ ln /etc/passwd passwd_link
$ ls -l
lrwxrwxrwx 1 student stud 5 03-06 20:14 etc_link -> /etc/ -rw-r--r-- 2 student stud 465 2009-04-02 passwd_link
zmienia datę modyfikacji pliku lub tworzy pusty plik
Postać: touch [opcje] plik…
[cmd:touch]
wyświetla informację o zawartości pliku
Postać: file [opcje] plik…
[cmd:file]
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 - 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,…} dopasowanie jednego z ciągów znaków
Przykłady:
$ ls *.txt
$ cp /etc/p*d
$ rm plik?.txt
$ ls /etc/[abc]*
$ ls /bin/*[a-g]
$ rm *.[^a-z]
$ ls *.{jpg,txt,mp3}
Ćwiczenia
<HTML><ol></HTML>
<HTML><li></HTML><HTML><p></HTML>Obejrzyj zawartość katalogów /etc
, /proc
, /dev
, /home
, /dev
, /lib
.<HTML></p></HTML><HTML></li></HTML>
<HTML><li></HTML><HTML><p></HTML>Utwórz w swoim katalogu domowym katalogi według poniższego schematu. Spróbuj dokonać tego za pomocą jednego polecenia.<HTML></p></HTML>
. |-- katalog | `-- katalog |-- Moj nowy katalog |-- nowy_katalog `-- raz `-- dwa |-- cztery `-- trzy
<HTML></li></HTML>
<HTML><li></HTML><HTML><p></HTML>Do katalogu katalog
przekopiuj plik /etc/passwd
<HTML></p></HTML><HTML></li></HTML>
<HTML><li></HTML><HTML><p></HTML>Do katalogu raz/dwa/trzy
skopuj wszystkie pliki z katalogu /etc
w których nazwach występuje litera ’a’, ’b’ lub ’p’.<HTML></p></HTML><HTML></li></HTML>
<HTML><li></HTML><HTML><p></HTML>W katalogu nowy_katalog
utwórz pusty plik o nazwie plik_testowy
<HTML></p></HTML><HTML></li></HTML>
<HTML><li></HTML><HTML><p></HTML>W katalogu katalog
utwórz dowiązanie do pliku nowy_katalog/plik_testowy
o nazwie link
<HTML></p></HTML><HTML></li></HTML>
<HTML><li></HTML><HTML><p></HTML>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
.<HTML></p></HTML><HTML></li></HTML>
<HTML><li></HTML><HTML><p></HTML>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?<HTML></p></HTML><HTML></li></HTML>
<HTML><li></HTML><HTML><p></HTML>Zmień nazwę katalogu nowy_katalog
na stary_katalog
<HTML></p></HTML><HTML></li></HTML>
<HTML><li></HTML><HTML><p></HTML>Przenieś katalog raz
do katalogu stary_katalog
zmieniając jego nazwę na jeden
<HTML></p></HTML><HTML></li></HTML>
<HTML><li></HTML><HTML><p></HTML>Usuń wszystkie utworzone w tym zadaniu katalogi i pliki.<HTML></p></HTML><HTML></li></HTML><HTML></ol></HTML>
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ść plików
Postać: cat [opcje] [plik…]
[cmd:cat]
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ł.
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, /
- poszukuje wyrażenia w pliku.
wyświetla początek pliku
Postać: head [opcje] plik…
[cmd:head]
Przykład:
$ head /etc/passwd
wyświetli 10 pierwszych linii w 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 pierwszej napotkanej różnicy w zawartości plików.
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
Postać: diff [opcje] plik1 plik2
[cmd:diff]
Wynikiem działania jest wyświetlenie fragmentów które są różne w obu plikach wraz z informacją jak należy zmienić pierwszy z plików aby otrzymać drugi (c
zamień, d
usuń, a
dodaj fragment tekstu).
Np.:
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
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.
sortuje 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 gdzie kolumny oddzielone są dwukropkiem).
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
Edytor strumieniowy
Postać: sed [-n] [-e skrypt] [opcja]... [plik]...
[cmd:sed]
Odczytuje kolejne linie ze strumienia wejściowego (lub pliku), dokonuje edycji zgodnie z podanym skryptem i wynik wyświetla na standardowym wyjściu.
Najważniejsze opcje:
-n
hamuje normalne wyjście (wyświetlanie tylko linii wskazanych w skrypcie komendą p
)
-e
wykonają podany skrypt (pojedyncze polecenie). Jeśli podajemy tylko jedną komendę ta opcja nie jest wymagana.
Składnia skryptu:
[adres[,adres]] funkcja [argumenty]
adres
to numer linii pliku ($
oznacza numer ostatniej linii) lub wyrażenie regularne umieszczone pomiędzy znakami /
. Określa on zakres linii strumienia na których będę dokonywane operacje. Na przykład 1,3
pasuje do pierwszych trzech linii, /bash/
pasuje do wszystkich linii zawierających wyrażenie bash
, zaś /begin/,/end/
dotyczy wszystkich kolejnych linii z których pierwsza zawiera słowo begin
a ostatnia słowo end
. funkcja
do wyboru mamy wiele możliwości edycji strumienia. Najważniejsze to:
a tekst
dodaj podany tekst przed następną linią
c tekst
zamień linię podanym tekstem
d
usuń linię
i tekst
wstaw podany tekst
p
wyświetl bufor (aktualnie edytowaną linię)
s/wyrażenie/łańcuch/
zastępuje podanym łancuchem
pierwsze znalezione w buforze wyrażenie
s/wyrażenie/łańcuch/g
zastępuje podanym łancuchem
wszystkie znalezione w buforze wyrażenia
=
wyświetla numer linii
Przykłady:
$ sed -n ’1p’ plik
wyświetli pierwsza linię pliku
$ sed -n ’3,$p’ plik
wyświetli wszystkie linie od 3-ciej to końca pliku
$ sed ’3,$d’ plik
usunie wszystkie linie od 3-ciej do końca pliku
$ sed -n ’/Marek/p’ /etc/passwd
wyświetla linie zawierające słowo Marek
z pliku /etc/passwd
$ sed ’/UNIX/c Linux’ plik
Zamienia linie w których występuje słowo UNIX
zwrotem Linux
$ sed -n ’/UNIX/=’ plik
wyświetla numery linii w których występuje wyrażenie UNIX
$ sed ’s/UNIX/Linux/g plik
zamienia wszystkie wystąpienia słowa UNIX
na Linux
$ sed -n ’s/UNIX/Linux/g plik
tak jak wyżej ale wyświetlane są wyłącznie linie w których nastąpiła zmiana
Wyrażenia regularne
Wybrane metaznaki wyrażeń rozszerzonych wyrażeń regularnych (POSIX ERE, ang. Extended Regular Expressions)
[lista]
pasuje do pojedynczego znaku z danej listy
[^lista]
pasuje do znaku nie podanego na liście
.
(kropka) pasuje do dowolnego pojedynczego znaku
\w
jest równoważne [0-9a-zA-Z]
lub [[:alnum:]]
, czyli zastępuje dowolna literę lub cyfrę
\W
oznacza to samo co $[^[[:alnum:]]]
^
i $
to odpowiednio początek i koniec linii
\<
oraz \>
początek i koniec słowa
Po wyrażeniu regularnym mogą stać operatory powtórzenia:
?
poprzedzający element pasuje zero lub jeden raz, np. miark?a
pasuje do miarka
ale też miara
*
poprzedzający element pasuje zero lub więcej razy, np W*in
pasuje zarówno do słowa Windows
jak i do Linux
+
poprzedzający element pasuje jeden lub więcej razy,
{n}
poprzedzający element pasuje dokładnie n
razy
|
operator LUB, np. Fizyka|fizyka
pasuje do fizyka
oraz Fizyka
()
grupowanie, np. fizy(ka|cy)
pasuje zarówno do fizyka
i fizycy
.
Uwaga: w podstawowych wyrażeniach regularnych (POSIX BRE ang. Basic Regular Expressions) stosowanych w większości narzędzi UNIXowych metaznaki ?
, +
, {}
, ()
, |
tracą swoje szczególne znaczenie; zamiast nich należy użyć \?
, \+
, \{\}
, \(\)
, \|
.
Przykłady:
grep 'bash$' /etc/passwd
linie zakończone słowem bash
w pliku /ert/passwd
grep '\<[aA]' plik
linie w których występuje wyraz rozpoczynający się literą a
lub A
grep '^From: ' /var/mail/$USER
lista odebranej poczty (linie rozpoczynające się słowem From:
)
grep -v '^$' plik
wszystkie linie, które nie są puste
grep '[0-9]\{9\}' plik
dziewięciocyfrowe ciągi liczb, np. numery telefonów
grep '(.\+) plik'
psuje do dowolnego ciągu składającego się przynajmniej z jednego znaku zawartego w nawiasach
Inne przydatne polecenia i narzędzia (textutils): nano, emacs, vi, vim, awk, join, paste, tac, nl, od, split, csplit, uniq, comm, ptx, tsort, tr, fold
Przekierowanie wejścia i wyjścia programu w powłoce tcsh
polecenie > plik
przekierowanie wyjścia programu do pliku (zawartość pliku zostanie nadpisana)
polecenie >> plik
przekierowanie wyjścia programu z dopisywaniem do pliku
polecenie >& plik
przekierowanie wyjścia diagnostycznego programu do pliku
polecenie < plik
przekierowanie wejścia programu z pliku
polecenie << słowo
przekierowanie wejścia programu z klawiatury do momentu wystąpienia danego słowa
Przykłady:
$ ls /etc > lista
$ head -n 3 /etc/passwd >> lista
$ haed -n 3 /etc/passwd >& lista
Zwróć uwagę na błąd w pisowni polecenia w ostatnim przykładzie.
$ cat < lista
$ cat < lista > nowalista
$ cat << KONIEC > tekst
Potoki
polecenie1 | polecenie2
połączenie wyjścia programu 1 z wejściem programu 2
Przykłady:
$ cat /etc/passwd | wc -l
$ grep Marek /etc/passwd | cut -f 5 -d : | sort | head -n 1 > wybraniec
czyta standardowe wejście i przesyła je na standardowe wyjście oraz do pliku.
Postać: tee [-a] plik
[cmd:tee]
Najważniejsze opcje:
-a
dopisuje zawartość strumienia wyjściowego do pliku (bez tej opcji zawartość pliku zostałaby nadpisana)
Przykład:
$ grep Marek /etc/passwd | tee plik1.txt | wc -l
zapisze linie z pliku /etc/passwd
zawierające słowo marek
w pliku plik1.txt
, zaś na ekranie wyświetlona zostanie ilość tych linii.
Podstawianie wyników polecenia
Wyjście polecenia zawartego pomiędzy `` (pochyłe ”uszy”) jest umieszczane w miejscu wywołania. Na przykład:
$ echo `ls /bin`
W powłoce Bash to samo działanie można osiągnąć także używając $(polecenie)
.
W ten sposób wyjście polecenia może być podstawione do zmiennej:
$ set pliki=`ls /bin`
Mechanizm ten jest przydatny w przypadku gdy chcemy podstawić wyjcie polecenia jako argument innego polecenia (zwłaszcza gdy to polecenie nie potrafi czytać ze strumienia wejściowego). Np.:
$ rm `cat lista_plikow.txt`
Ćwiczenia
- Korzystając z polecenia
cut
utwórz krótką notatkę tekstowa w plikutekst.txt
. - Korzystając z polecenia
cut
skopuj pliktekst.txt
pod nazwątekst2.txt
- Korzystając z polecenia
cut
oraz pliku/etc/passwd
utwórz plikusers.txt
zawierający posortowaną listę użytkowników (imiona i nazwiska). Wyświetl użytkowników których nazwiska kończą się literamiski
. - Wyświetl plik (katalog) z twojego katalogu domowego o największej objętości
- Wyświetl całkowitą liczbę plików znajdujących się w katalogach wymienionych w zmiennej
$PATH
- Polecenie
ps -A
wyświetla listę wszystkich uruchomionych procesów. Wykorzystaj to polecenie do stworzenia plikuprocesy.txt
zawierającego listę posortowanych i niepowtarzających się nazw działających procesów - Połącz wszystkie pliki tekstowe
*.txt
z bieżącego katalogu w jeden plik o nazwiecalosc.txt
Uprawnienia
W systemie Unix/Linux każdy plik posiada właściciela i grupę do której jest przyporządkowany oraz zestaw uprawnień definiujących dostęp właściciela, grupy oraz wszystkich pozostałych użytkowników. Uprawnienia te dotyczą możliwości odczytu (ang. read), zapisu (ang. write) oraz wykonywania (ang. execute) plików. Informacje o uprawnieniach plików uzyskamy wydając polecenie ls -l
Przykład:
$ ls -la
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 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]
zmienia prawa dostępu do pliku
Postać: chmod [opcje] prawa plik…
[cmd:chmod]
Polecenie służy do ustawiania praw odczytu ®, 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.
Ćwiczenia
- Sprawdź ustawienia plików
/etc/passwd
,/etc/shadow
. - Sprawdź uprawnienia katalogów domowych pozostałych użytkowników systemu.
- Ustaw uprawnienia swojego katalogu domowego (łącznie z całą zawartością) tak abyś tylko ty miał możliwość przeglądania zawartości.
- Utwórz katalog
~/public_html
i umieść w nim plik o nazwieindex.html
. Ustaw uprawnienia tak aby możliwe było wyświetlenie twojej strony domowej. Serwer WWW na serwerzeferm
jest tak skonfigurowany, że strona znajdująca się w katalogupublic_html
jest dostępna pod adresemhttp://www.fizyka.umk.pl/~identyfikator
.
Procesy
System UNIX pozwala na uruchomienie wielu procesów działających równocześnie.
Wydanie polecenia zazwyczaj uruchamia proces na pierwszym planie, chcąc uruchomić kolejny program użytkownik musi zaczekać na zakończenie działającego procesu.
Istnieje możliwość uruchomienia wielu procesów działających w tle. Powłoka uruchomi proces w tle jeśli na końcu polecenia dodamy &
.
Polecenie sleep
uruchamia proces który nic nie robi i kończy działanie po określonej liczbie sekund.
Do działającego procesu można wysłać sygnał aby zakończył swoje działanie albo się zatrzymał.
W przypadku działającego na pierwszym planie programu można:
- zakończyć działanie procesu wciskając Ctrl+C
- zatrzymać proces wciskając Ctrl+Z
, proces można wówczas przywrócić do działania w tle lub na pierwszym planie za pomocą poleceń powłoki bg
i fg
.
Najważniejsze polecenia
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
drzewo procesów
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
.
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
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] nr_procesu
[cmd:kill]
Polecenie wysyła sygnał do procesu, gdy nie sprecyzujemy 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
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:pgrep]
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]
[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 [nr_zadania…]
[cmd:bg]
uruchamia zadanie na pierwszym planie
Postać: fg [nr_zadania]
[cmd:fg]
Przykład:
$ f
g %2spowodował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 [nr_procesu] [-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]
[cms: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 /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
.
Inne przydatne polecenia: fuser, iotop, atd, atrun, pidof, lsof
Dodatkowe informacje
W systemach UNIXopodobnych występuje katalog /proc
zawierający informacje o procesach. Każdy proces jest tu reprezentowany w postaci katalogu o nazwie odpowiadającej numerowi PID. Wewnątrz każdego z nich można znaleźć pliki opisujące status danego procesu, np.: cmdline
zawiera pełną linie uruchomionego polecenia, stat
zawiera informacje o stanie procesu (z tego pliku korzysta ps
), status
- informacje o stanie procesu w bardziej przystępnej formie, itp.
Przykład:
$ cat /proc/1231/status
wyświetli inf. o stanie procesu 1231.
Ćwiczenia
- Polecenie
xclock -update 1
uruchamia w środowisku graficznym zegar z sekundnikiem. Uruchom zegar na pierwszym planie, zawieś jego działanie za pomocąCrtl+Z
i wznów działanie w tle. - Wyślij sygnał
SIGSTOP
do procesu wyświetlającego zegar. - Uruchom w tle polecenie
xclock -update 1
- Wyślij sygnał
SIGCont
do wstrzymanego procesu wyświetlającego zegar. - Wyświetl wszystkie uruchomione przez siebie procesy.
- Zabij procesy związane z wyświetlaniem zegarów.
Informacje o systemie i użytkownikach
podaje datę i czas systemowy
Postać: date [opcje] [format]
[cmd:date]
wyświetla kalendarz
Postać: cal [opcje]
[cmd:cal]
wyświetla zmienne środowiska
Postać: printenv [zmienna]
[cmd:printenv]
wyświetla nazwę terminala
Postać: tty
[cmd:tty]
informacje o użytkowniku - GID, UID itp.
Postać: id [opcje] [użytkownik]
[cmd:id]
informacje o użytkowniku.
Postać: finger [użytkownik]
[cmd:finger]
kim jestem
Postać: whoami
[cmd:whoami]
nazwy bieżących grup
Postać: groups [użytkownik]
[cmd:groups]
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]
Inne przydatne polecenia: users, w, dnsdomianname, chfn
Wyszukiwanie plików
wyszukuje położenie programu w katalogach ze zmiennej $PATH
Postać: which polecenie
[cmd:which]
Przykład:
$ which find
/usr/bin/find
wyszukuje (wszystkie) położenia plików binarnych, źródłowych i stron podręcznika danego polecenia
Postać: whereis polecenie…
[cmd:whereis]
Przykład:
$ whereis find
find: /usr/bin/find /usr/man/man1/find.1.gz
szuka plików w drzewie katalogów
Postać: find [katalog] [wyrażenie]
[cmd:find]
Argumentem polecenia jest katalog
w którym chcemy odnaleźć plik określony za pomocą wyrażenia
.
Najważniejszymi opcjami stosowanymi w wyrażeniu są:
-name nazwa_pliku
znajdź plik o podanej nazwie
-iname nazwa_pliku
znajdź plik o podanej nazwie (nie rozróżnia wielkości liter)
-group nazwa_grupy
plik należy do danej grupy
-user nazwa_użytkownika
właścicielem pliku jest użytkownik
-type [f|d|l|b]
typ pliku: f - zwykły plik, d- katalog, l - link, b - plik blokowy
-atime [+|-]liczba
plik był otwierany określoną liczbę godzin temu
-mtime [+|-]liczba
plik był modyfikowany określoną liczbę dni temu
-size [+|-]liczba[c|k|M|G]
plik o określonym rozmiarze (c - bajty, k - kilobajty, M - megabajty, G - gigabajty
Znak + lub - przed liczba
oznacza poszukiwanie odpowiednio większej lub mniejszej wartości
Przykład:
$ find dane/ -name plik.txt
szuka pliku plik.txt
w katalogu dane
$ find ~ -name ’*.jpg’ -user kazik
znajdzie wszystkie pliki o rozszerzeniu .jpg w domowym katalogu należące do użytkownika kazik
$ find . -mtime -2
znajdzie pliki w bieżącym katalogu które były modyfikowane w ciągu ostatnich dwóch dni
$ find /usr -iname ’[a-d]*’ -user root -type f -size -2M
wyszuka w katalogu /usr
pliki o nazwie zaczynającej się od liter a, b, c lub d, których właścicielem jest root
i które maja rozmiar nie większy od 2 megabajtów
W momencie znalezienia pliku spełniającego dane wyrażenie można wykonać określoną akcje (standardowo jest to -print
czyli wyświetlenie lokalizacji pliku
Dodając opcje -exec
możemy wykonać dowolne polecenie. Takie polecenie musi być zakończone znakami $\backslash$;
$ find . -name ’*.txt’ -exec echo znalazłem \backslash;
wyświetli komunikat znalazłem
dla każdego znalezionego pliku
Aby wykonać polecenie na znalezionym pliku należy dodać {}, w to miejsce zostanie wstawiona jego nazwa
$ find . -name ’*.txt’ -exec rm -f ’{}’ \backslash;
spowoduje usuniecie wszystkich znalezionych plików
Dużo więcej na temat polecenia find
można znaleźć w dokumentacji man
Inne narzędzia
wyświetla linię tekstu
Postać: echo [opcje] ciąg_znaków
[cmd:echo]
Przykład:
$ echo witaj świecie
witaj świecie
Polecenie echo
pomaga zobaczy co zostanie wstawione w miejsce znaków specjalnych *, ?, []
$ echo rm -f unix.*
rm -f unix.aux unix.dvi unix.gz unix.log unix.out unix.pdf unix.tex
wyświetla w nieskończoność dany ciąg znaków
Postać: yes [ciąg_znaków]
[cmd:yes]
oblicza wartość wyrażenia matematycznego
Postać: expr wyrażenie
[cmd:expr]
Liczby i operatory muszą być oddzielone spacjami
$ expr 2 + 2
4
$ expr 2 ’*’ 3
6
Znak * z powodu swojego specjalnego znaczenia musi być zawarty w cudzysłowie
wyświetla sekwencję liczb
Postać: seq [opcje] [początek] [krok] koniec
[cmd:seq]
Przykład:
$ seq 3 2 10
3 5 7 9
Narzędzia sieciowe
podaje informacje o hoście
Postać: host [opcje] adres
[cmd:host]
Standardowo host
tłumaczy nazwy domen na adresy IP i na odwrót. Przykład:
$ host ferm
158.75.5.47
$ host 127.0.0.1
localhost
wysyła pakiet testowy do wybranego hosta
Postać: ping adres
[cmd:ping]
Pakiet próbny jest wysyłany aż nie przerwiemy procesu za pomocą Ctrl-C. Przykład:
$ ping www.google.pl
$ ping 127.0.0.1
wyświetla trasę pokonywana do danego hosta
Postać: traceroute [opcje] nazwa_hosta
[cmd:traceroute]
Przykład:
$ traceroute www.google.com
traceroute: Warning: www.google.com has multiple addresses; using 64.233.183.99 traceroute to www.l.google.com (64.233.183.99), 30 hops max, 38 byte packets 1 phys-to-torman (158.75.5.190) 0.242 ms 0.297 ms 0.231 ms 2 * * * 3 war-b2-pos11-0.telia.net (213.248.68.53) 8.753 ms 8.797 ms 8.856 ms 4 ffm-bb1-pos6-3-2.telia.net (213.248.96.21) 33.833 ms 33.679 ms 33.705 ms 5 ffm-b2-link.telia.net (213.248.69.93) 34.974 ms 34.810 ms 34.968 ms 6 google-111945-ffm-b2.c.telia.net (213.248.69.86) 33.758 ms 34.057 ms 33.071 ms 7 72.14.238.119 (72.14.238.119) 51.698 ms 40.944 ms 41.185 ms MPLS Label=162573 CoS=0 TTL=1 S=1 8 64.233.175.246 (64.233.175.246) 44.573 ms 43.413 ms 44.210 ms 9 216.239.43.42 (216.239.43.42) 43.819 ms 45.157 ms 44.443 ms 10 216.239.43.34 (216.239.43.34) 44.962 ms 44.667 ms 64.233.183.99 (64.233.183.99) 44.965 ms
wysyła wiadomość tekstową do użytkownika
Postać: write uzytkownik[@adres]
[cmd:write]
program do interaktywnej rozmowy z użytkownikiem
Postać: talk uzytkownik[@adres]
[cmd:talk]
zablokowanie możliwości komunikacji poleceniami talk
i write
Postać: mesg [n|y]
[cmd:mesg]
wysyłanie poczty elektronicznej
Postać: mail uzytkownik[@adres] [-s temat] [-c adres innego adresata]
[cmd:mail]
Przykład:
$ mail grochu@ferm
Chcąc wysłać treść zawartą w pliku plik_tekstowy
można jego zawartość umieścić w strumieniu wejściowym programu mail
, np:
$ cat plik_tekstowy.txt | mail grochu@ferm
$ mail grochu@ferm < plik_tekstowy.txt
połączenie ze zdalnym komputerem
Postać: telnet uzytkownik[@adres]
[cmd:telnet]
Ze względów bezpieczeństwa dziś rzadko używany, wyparty przez szyfrowane połączenie ssh
.
szyfrowane połączenie ze zdalnym komputerem
Postać: ssh uzytkownik[@adres]
[cmd:ssh]
Pozwala na uruchomienie zdalnie powłoki, np: $ ssh unix@158.75.5.136
lub uruchomienie polecenia na zdalnej maszynie, np: $ ssh unix@158.75.5.136 ls
wyświetla listę plików w katalogu domowym zdalnej maszyny
połączenie z serwerem FTP pozwalającym na przesyłanie plików
Postać: ftp uzytkownik[@adres]
[cmd:ftp]
W Internecie można znaleźć wiele publicznie dostępnych serwerów FTP (logowanie jako użytkownik anonymous
). Na stronie archie.icm.edu.pl
znajduje się wyszukiwarka ułatwiająca przeszukiwanie takich serwerów.
szyfrowane połączenie z serwerem FTP pozwalającym na przesyłanie plików
Postać: sftp uzytkownik[@adres]
[cmd:sftp]
Polecenia dostępne po zalogowaniu można zobaczyć wpisując polecenie help
Najważniejsze polecenia to:
get nazwa_pliku
- pobranie pliku
put nazwa_pliku
- wysłanie pliku
quit
- rozłączenie
szyfrowane kopiowanie plików z serwerów ssh
i sftp
Postać: scp [-r] uzytkownik[@adres]:plik_zrodlowy plik_docelowy scp [-r] plik_zrodlowy uzytkownik[@adres]:plik_docelowy
[cmd:scp]
Składnia i działanie podobne do polecenia cp
z tą różnicą, że kopiowanie odbywa się pomiędzy maszyna lokalna i zdalna przy użyciu szyfrowanego protokołu.
Przykłady:
$ scp unix@158.75.5.136:paczka.tar.gz paczka.tar.gz
pobranie pliku paczka.tar.gz
$ scp paczka.tzr.gz unix@158.75.5.136:.
wysłanie pliku paczka.tar.gz
$ scp -r unix@158.75.5.136:/gry .
pobranie całej zawartości (rekurencyjnie) z katalogu gry
do bieżącego katalogu
program do pobierania zasobów stron www i serwerów ftp
Postać: wget [-rkx] adres_strony_lub_pliku
[cmd:wget]
Program oferuje wiele możliwości (patrz man wget
)
Jedna z ciekawych opcji jest możliwość pobierania całych witryn internetowych z zachowaniem hierarchii katalogów i plików (tworzenie tzw. mirrorów).
Przykład:
$ wget -m http://www.phys.uni.torun.pl/grochu/unix/materialy/index.html
Archiwa, kompresja danych
Najczęściej używane programy służące do kompresji danych:
kompresuje pliki
Postać: gzip [-r] plik
[cmd:gzip]
Skompresowane pliki automatyczne uzyskują rozszerzenie .gz
Opcja -r
pozwala skompresować wszystkie pliki w podanym katalogu (każdy plik kompresowany jest osobno).
Przykład:
$ gzip archiwum.tar
utworzy skompresowany plik o nazwie archiwum.tar.gz
kompresuje pliki i katalogi
Postać: zip [-r] nazwa_archiwum pliki_do_spakowania
[cmd:zip]
Tworzy plik o podanej nazwie dodając rozszerzenie .zip
zawierający skompresowaną zawartość podanych plików.
Opcja -r
pozwala skompresować zawartość całego katalogu.
Przykład:
$ zip dokumenty *.txt
utworzy plik dokumenty.zip
zawierający skompresowaną zawartość wszystkich plików posiadających rozszerzenie *.txt
$ zip -r konto
w pliku konto.zip
powinna znaleźć się zawartość całego katalogu domowego
kompresuje pliki
Postać: bzip2 pliki_do_spakowania
[cmd:zip]
Skompresowane pliki otrzymują rozszerzenie .bz2
Aby rozpakować plik utworzony za pomocą jednego z powyższych algorytmów należy wykonać:
rozpakowanie pliku *.gz
oraz *.tgz
Postać: gunzip [-r] plik
[cmd:gunzip]
rozpakowanie pliku *.zip
Postać: unzip plik
[cmd:unzip]
rozpakowanie pliku *.bz2
Postać: bunzip2 plik
[cmd:bunzip2]
Polecenia gzip
i bzip2
kompresują pojedyncze pliki dlatego chcąc skompresować kilka plików w jedną całość należy utworzyć archiwum za pomocą programu tar
.
narzędzie do archiwizowania danych
Postać: tar [opcje] pliki
[cmd:tar]
Tworząc archiwum pierwszą nazwa pliku podaną jako argument musi być nazwa tego archiwum.
Najważniejsze operacje i opcje:
c
- stwórz archiwum
x
- rozpakuj archiwum
l
- wyświetl zawartość archiwum
f
- zapisz do pliku (standardowo tar
pracuje na strumieniach wejściowym i wyjściowym)
z
- skompresuj archiwum za pomocą programu gzip
j
- skompresuj archiwum za pomocą bzip2
v
- wyświetla dodatkowe komunikaty
Przykłady tworzenia archiwum:
$ tar fcv arch.tar kat/
utworzy archiwum o nazwie arch.tar
zawierające zawartość katalogu kat
$ tar fcvz arch.tar.gz *
stworzy spakowane (gzip
) archiwum o nazwie arch.tar.gz
zawierające wszystkie pliki i katalogi z bieżącego katalogu
$ tar fvcj arch.tar.bz2 plik1.txt plik2.txt
utworzy archiwum skompresowane za pomocą bzip2
o nazwie arch.tar.bz2
zawierające dwa pliki o nazwach plik1.txt plik2.txt
Otwieranie archiwum:
$ tar fx arch.tar
$ tar fxvz arch.tar.gz
$ tar fxvj arch.tar.bz2
Edytory tekstu
Emacs
Vim
Inne
Powłoka tcsh
Powłoka jest programem który udostępnia użytkownikowi środowisko pracy. W skład powłoki wchodzą: linia komend, zestaw wbudowanych poleceń, narzędzia obsługi zadań, narzędzia sprawdzające pisownię wpisywanych poleceń. Standardową powłoką użytkową na serwerze ferm jest tcsh
.
Najważniejsze funkcje powłoki tcsh
Dostosowanie powłoki do swoich potrzeb
Zmienne powłoki
Aliasy
Specjalne aliasy powłoki tcsh
Skrypty - wstęp do programowania w powłoce
Skrypty to pliki tekstowe zawierające ciągi instrukcji (po jednej na linię). W odróżnieniu od zwykłych plików tekstowych, skrypty możemy uruchamiać tak jak zwykłe programy. W systemach UNIX/GNU Linux skrypty pozwalają na zautomatyzowanie wielu czynności za pomocą jednego pliku.
Przykład prostego skryptu:
#!/bin/tcsh #to jest skrypt ktory wyswietla komunikat echo "Jestem skryptem" exit 0
Struktura skryptu
- w pierwszej linii powinna znajdować się informacja dotycząca powłoki w jakiej ma być interpretowany skrypt
#!/bin/tcsh
- skrypt w tcsh
#!/bin/bash
- gdy skrypt napisany jest w powłoce Bash
#!/bin/ah
- gdy skrypt napisany jest w powłoce sh
- w każdej kolejnej linii możemy umieścić:
- lub instrukcję uruchamiającą program
- instrukcję uruchamiającą inny skrypt
- instrukcję sterującą (np. pętle while
,for
, warunek if
, itp.)
- skrypt powinien kończyć się instrukcją
exit
- tekst zawarty po znaku # aż do końca linii jest komentarzem i nie jest interpretowany przez powłokę (z wyjątkiem pierwszej linii skryptu)
Uruchamianie skryptu
Skrypt korzystający ze składni tcsh
uruchamiamy wydając polecenie:
$ tcsh nazwa_skryptu
Analogicznie dla powłoki sh
i Bash
wydajemy odpowiednio polecenie
$ sh nazwa_skryptu
lub
$ bash nazwa_skryptu
Plikowi tekstowemu zawierającemu skrypt możemy nadać
$ chmod +x nazwa_skryptu
wówczas skrypt uruchamiamy tak jakby to był program lub polecenie powłoki, wpisując jego nazwę
$ nazwa_skryptu
Bieżący katalog powonień znajdować się na liście katalogów umieszczonych w zmiennej środowiskowej $PATH
(w powłoce tcsh
można wykorzystać także zmienną $path
), w przeciwnym wypadku należy podać ścieżkę do pliku który ma zostać uruchomiony, np.:
$ ./nazwa_skryptu
Aby dodać bieżący katalog do zmiennej $PATH
należy wydać w powłoce tcsh
polecenie
$ setenv PATH ${PATH}:.
lub w powłoce sh
lub Bash
$ export PATH=${PATH}:.
Więcej na temat zmiennych w powłoce tcsh
oraz w powłoce Bash
.
Wykrywanie błędów w skrypcie
Zarówno powłoka tcsh
jak i bash
w przypadku napotkania błędu w składni skryptu przerwa jego działanie wyświetlając stosowny komunikat. Poszukiwanie błędów można ułatwić dzięki opcjom -v
oraz -x
.
Przykład:
$ tcsh -v skrypt.sh
$ bash -x skrypt.sh
Opcja -v
uruchamia tryb gadatliwy, każda instrukcja skryptu zostanie wyświetlona przed uruchomienia.
Opcja -x
wyświetla kolejne instrukcje dodatkowo wykonując podstawienie aktualnych wartości zmiennych.
Powłoka sh (Bash)
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
Zmienne środowiskowe (globalne) tworzymy poleceniem export
.
$ export zmienna
$ export PATH=$PATH:.
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
$ 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]}
$ kolor[1]=bialy
$ kolor[2]=czarny
$ kolor[3]=zielony
$ echo Kolor pierwszy $kolor[1]
$ echo Wszystkie kolory $kolor[*]
Tablice indeksowane są liczbami całkowitymi począwszy od zera. Automatyczne przypisanie kolejnych wartości do tablicy uzyskujemy wpisując zmienna=(wartosc1 wartosc2 ... wartoscN)
, np.
$ dzien=(poniedzialek wtorek sroda czwartek piatek sobota niedziela)
$ echo $dzien[6]
$ echo Dni tygodnia: $dzien[8]
$ dzien[0]=Monday
Liczbę elementów tablicy uzyskujemy wyrażeniem ${#zmienna[*]}
$ echo Ilosc dni tygodnia = $#dzien[*]
Wyrażenie ${#zmienna[indeks]}
poda ilość znaków zawartych w elemencie tablicy i podanym indeksie.
$ echo Slowo $dzien[1] zawiera $#dzien[1] znakow
Polecenie unset zmienna
usuwa podaną zmienną. Chcąc usunąc wybrany element tablicy nalezy 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, np.:\\
<code>
#!/bin/bash
echo Nazwa skryptu=$0
echo Podales $# argumentow
echo Oto one: $*
echo Argument 1 = $1
echo Argument 2 = $2
</code>
==== Operacje arytmetyczne i warunki logiczne ====
Powłoka ''tcsh'' 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 (Zobacz tabelę [tab:operatory_tcsh]).\\
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 ''%%expr%%''. Obliczenia o precyzji zmiennopozycyjnej (dla liczb rzeczywistych) można wykonywać za pomocą kalkulatorów ''%%bc%%'' lub ''%%dc%%''.
**Wyrażenia warunkowe** realizowane są za pomocą ''%%[ wyrażenie ]%%'' lub poprzez polecenie ''%%test%%''. Wartością zwracana jest kod (status programu) 0 w przypadku gdy wyrażenie jest prawdziwe lub 1 gdy wyrażenie jest fałszywe. Porównywanie napisów odbywa się za pomocą operatoró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%%''\\
''%%$ test ‘cat /etc/passwd
$ 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
).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 0Bardziej 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 0Przykł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ł" fiPrzykł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ętlafor
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 uzycia 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 donePowł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ętliwhile
:while
warunekdo
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++ doneInstrukcja
true
zwraca zawsze wartość logiczną prawda. Analogicznie false
daje odpowiedź negatywną.Instrukcja case
Instrukcjacase
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
Instrukcjaexit
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
Instrukcjaread
pozwala wczytać linie tekstu do podanej zmiennej.Przykład:
#!/bin/bash echo Podaj imie i nazwisko read dane echo Witaj $daneMoż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łocebash
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 ;; esacDo 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 nazwe 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 0Zmienne 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
Powłoka tcsh
Zmienne
Zmienne definiuje się przy pomocy polecenia:set
(zmienne lokalne), setenv
(zmienne środowiskowe) lub @
(zmienne lokalne liczbowe).$ set napis=Ala ma kota
$ setenv HOME=/home/student
$ @ wynik=10
Nazwa zmiennej może zawiać 20 znaków - dowolne litery, cyfry (cyfra nie może być pierwszym znakiem nazwy zmiennej) oraz znak podkreślenia.
Wartość umieszczoną w zmiennej wydobywamy umieszczając $ przed nazwą zmiennej
$ echo $napis
$ Ala ma kota
$ echo $HOME
$ /home/student
$ echo $wynik
$ 10
Zmienne kasujemy poleceniem
unset
oraz odpowiednio (zmienne środowiskowe) unsetenv
$ unset napis
$ unset wynik
$ unsetenv HOME
Należy pamiętać, że wartości umieszczone w zmiennych są ciągami znaków. Zmienna
$wynik
zawiera napis składający się ze znaków ’1’ i ’0’. Możliwe jest jednak wykonywanie prostych .
Tablice
Tablice deklarujemy w następujący sposób:$ set dzien=(poniedzialek wtorek sroda czwartek piatek sobota niedziela)
$ echo $dzien
$ poniedzialek wtorek sroda czwartek piatek sobota niedziela
Elementy tablicy numerowane są liczbami naturalny (startując od 1), np.
$dzien[3]
odnosi się do trzeciego elementu tablicy $dzien
$ echo $dzien[3] $dzien[5]
$ sroda piatek
$ echo $dzien[2-4]
$ wtorek sroda czwartek
$ set dzien[7]=sunday
$ echo $dzien
$ poniedzialek wtorek sroda czwartek piatek sobota sunday
Inny przykład:
$ set liczby=( ‘seq 1 10‘)
$ echo $liczby
$ 1 2 3 4 5 6 7 8 9 10
Wyrażenie $#zmienna i $?zmienna
Za pomocą wyrażenia$#zmienna
możemy dowiedzieć się ile elementów zawiera tablica zmiennych, np:$ set dzien=(poniedzialek wtorek sroda czwartek piatek sobota niedziela)
$ echo $#dzien
$ 7
Operator
$?zmienna
zwraca wartość 1 jeśli zmienna jest zadeklarowana - 0 w przeciwnym wypadku, np.:$ echo $?dzien
$ 1
$ unset dzien
$ echo $?dzien
$ 0
Polecenie
unset
[pol:unset] usuwa zmienną, stąd operacja $?
w tym wypadku zwraca 0.Tablica $argv oraz zmienne $.
Zmienna$argv
jest tablicą zawierającą parametry z jakimi został wywołany skrypt. Np. jeżeli uruchomimy skrypt:$ nazwa_skryptu -n 10 ala
wówczas w zmiennej
$argv
umieszczone zostaną wszystkie parametry, odpowiednio: $argv[1]
zawiera “-n”, argv[2]
- “10”, $argv[3]
“ala”. W podobny sposób można używać zmiennych $1 $2 $3
itd., które również zawierają wartości kolejnych argumentów z wywołania skryptu jednak dodatkowo w zmiennej $0
zawarta jest nazwa wywoływanego skryptu.Przykład - skrypt
argv.sh
:#!/bin/tcsh set n = $#argv echo "Liczba argumentów = $n" echo "Nazwa skryptu: $0" set i=1 while ( $i <= $n ) echo "Argument $i = $argv[$i]" set i=`expr $i + 1` end exit 0Uruchomienie skryptu:
$ ./argv.sh ala ma kota
Liczba argumentów = 3 Nazwa skryptu: ./argv.sh Argument 1 = ala Argument 2 = ma Argument 3 = kotaArgumenty wywołania skryptu zawarte są także w zmiennej
$
a kolejne argumenty dostępne są w zmiennych $1
, $2
, $3
, itd.
Operacje arytmetyczne i warunki logiczne
Powłokatcsh
pozwala na wykonywanie prostych operacji arytmetycznych za pomocą instrukcji @
.Przykład:
$ @ suma = 2 + 2
$ echo $suma
$ 4
$ @ liczba = $suma * 2
$ echo $liczba
$ 8
$ @ suma ++
$ echo $suma
$ 5
Operator
++
zwiększa liczbę zawartą w zmiennej o 1. W tcsh
mamy do dyspozycji operatory występujące w języku C, ich lista zawarta jest w tabeli [tab:operatory_tcsh]:l | l | l |
$+$ & dodawanie &
@ a = $liczba + 1
$-$ & odejmowanie &
@ a = $liczba - 2
$/$ & dzielenie &
@ a = $liczba / 2
$*$ & mnożenie &
@ a = $liczba * $liczba
$\%$& reszta z dzielenia & @ a = $liczba % 2
>
& większy od & $liczba > 3
<
& mniejszy od & $liczba < 3
==
& równy & $liczba == $zmienna
!=
& różny od & $liczba != 2
&&
& AND & $liczba < 3 && $liczba < 7
||
& OR & $liczba == 1 || $liczba == 2
!
& NOT & !( $liczba < 2 )
$++$ &
@ a = $a + 1
& @ a ++
$--$ &
@ a = $a - 1
& @ a --
$+=$ &
@ a = $a + $liczba
& @ a += $liczba
$-=$ &
@ a = $a - $liczba
& @ a -= $liczba
$*=$ &
@ a = $a * $liczba
& @ a *= $liczba
$\slash=$ &
@ a = $a / $liczba
& @ a \slash= $liczba
[tab:operatory_tcsh] Wartością wyrażeń zawierających operatory relacji jest 0 (fałsz) gdy wyrażenie nie jest prawdziwe lub 1 (prawda) gdy wyrażenie jest spełnione.
Proste operacje arytmetyczne można także wykonywać za pomocą instrukcji
expr
. Tak jak w każdym poleceniu argumenty instrukcji expr
muszą byc oddzielone od siebie pustymi znakami.Przykłady zastosowania:
$ set a=‘expr 1 + 1‘
$ set porownanie=‘expr $a == 2‘
$ set a=‘expr $a + 5‘
Obliczenia na liczbach zmiennopozycyjnych (rzeczywistych) nalezy wykonywac przy pomocy odpowiednich narzędzi (kalkulatorów).Kalkulator dowolnej precyzji
bc
, przykład:$ echo ’1.5 * 3.1’ | bc
$ set a=echo 3.14*2’ | bc‘
$ set wynik=‘echo scale=2; 1/$a | bc‘
Zmienna
scale
w kalkulatorze bc
określa liczbę miejsc po przecinku w wyświetlanym wyniku.
Instrukcje sterujące
Warunek if
Składnia warunku:if (
wyrażenie ) then
instrukcje
endif
Jeśli wyrażenie jest prawdziwe wówczas wykonywane są instrukcje zawarte po słowie
then
.Przykład:
#!/bin/tcsh if( $#argv == 0) then echo "Nie podałeś żadnych argumentów " endif exit 0Bardziej rozbudowane wyrażenie warunkowe:
if (
wyrażenie ) then
instrukcje 1
else
instrukcje 2
endif
Instrukcje zawarte w bloku rozpoczynającym się od
else
są wykonywane gdy wyrażenie nie jest spełnione. Np.:#!/bin/tcsh if( $#argv == 0 ) then echo "Nie podałeś argumentów" else echo "Podałeś argumenty: $argv" endif exit 0Za pomocą wyrażenia
if
możemy sprawdzać różne własności plików. Np.:#!/bin/tcsh if( -e $argv[1] ) then echo "Plik o nazwie $argv[1] istnieje" else echo "Nie ma takiego pliku" endifWyrażenie
-e nazwa_pliku
powoduje sprawdzenie czy plik o danej nazwie istnieje.W analogiczny sposób możemy sprawdzić inne własności plików. Najważniejsze z nich zawarte są w tabeli ([tab:testy])
-e | plik istnieje |
-f | plik istnieje i jest zwykłym plikiem |
-d | plik istnieje i jest katalogiem |
-r | użytkownik posiada prawo do czytania pliku |
-w | użytkownik posiada prawo do zmiany zawartości pliku |
-x | użytkownik posiada prawo do wykonywania pliku |
-o | użytkownik jest właścicielem pliku |
which.sh
poszukuje podanego polecenia w jednym z katalogów zawartych w zmiennej i jeśli go znajdzie to wyświetla pełną ścieżkę do tego polecenia (czyli działa analogicznie do programu ):#!/bin/tcsh if ( $#argv != 1 ) then echo "Skrypt określa położenie polecenia" echo "Skladnia: $0 polecenie" exit 1 endif foreach katalog ( $path ) set plik=${katalog}/$argv[1] if ( -f $plik && -x $plik ) then echo "Znalazlem: $plik" exit 0 endif end echo "Nie znalazlem" exit 2Uruchomienie skryptu:
$ ./which.sh finger Znalazlem: /usr/bin/finger
$ ./whitch.sh fing Nie znalazlem
Jeszcze bardziej rozbudowane wyrażenie warunkowe:if (
wyrażenie 1 ) then
instrukcje 1
else if (
wyrażenie 1 ) then
instrukcje 2
endif
Przykład:
#!/bin/tcsh if ( $#argv != 1 ) then echo "Podaj liczbe calkowita lub -h pomoc" exit 1 endif if ( $1 == "-h" ) then echo "Skrypt demonstruje uzycie zlozonego warunku if." echo "Dla danej liczby calkowitej dowiesz sie czy jest wieksza, mniejsza czy rowna 0." else if ( $1 > 0) then echo "Podales liczbe dodatnia." else if ( $i < 0 ) then echo "Podales liczbe ujemna" else if ($i == 0 ) then echo "Podales zero." else echo Podales argument $1 - nie wiem co z tym zrobic. endif exit 0
Pętla while
Składnia pętliwhile
:while (
wyrażenie )
instrukcje
end
Pętla jest wykonywana dopóki spełnione jest wyrażenie.
Przykład - skrypt o nazwie
silnia.sh
liczący silnię:
#!/bin/tcsh if ( $#argv != 1 ) then echo "Skrypt oblicza silnie z podanej liczby całkowitej" echo "Skladnia: $0 liczba" exit 1 endif set i=1 set silnia=1 while( $i < $argv[1]) @ i = $i + 1 @ silnia = $silnia * $i end echo "Silnia z liczby $argv[1] wynosi $silnia" exit 0Uruchomienie skryptu:
$ ./silnia.sh 6 Silnia z liczby 6 wynosi 720
Pętla foreach
Pętlaforeach
wykonywana jest dla każdej wartości z zadanej lisy elementów.
foreach
zmienna ( lista elementów ) instrukcje
end
W każdym kroku zmienna przybiera wartość kolejnego elementu z listy.
Przykład - skrypt
home.sh
dla każdego pliku (katalogu) zawartego w katalogu /home
sprawdza uprawnienia do odczytu:#!/bin/tcsh set pliki=`ls /home` foreach zmienna ( $pliki ) if ( -r /home/$zmienna ) then echo "Katalog /home/$zmienna - moge z niego czytac" endif end exit 0Uruchomienie skryptu:
$ ./home.sh Katalog /home/212598 - moge z niego czytac Katalog /home/grochu - moge z niego czytac Katalog /home/pk2-8 - moge z niego czytac
Instrukcja switch
Instrukcjaswitch
pozwala na wykonanie wybranych instrukcji w zależności od warości przyjmowanej przez pewną zmienną. Działanie bardzo podobne do instrukcji if
jednak często wygodniejsze w użyciu.switch (
zmienna )
case
wartość 1 :
instrukcje 1
breaksw
case
wartość 2 :
instrukcje 2
breaksw
default:
instrukcje
endsw
Przykład:
#!/bin/tcsh switch ( $1 ) case "-h" : echo "Opcja -h wyswietla pomoc. Sprobuj takze opcji -v." breaksw case "-v": echo "Opcja -v wyswietla ten oto komunikat." breaksw default: echo "Podales nieobslugiwana opcje $1" endsw
Instrukcja skoku goto
Instrukcjagoto
powoduje przeskoczenie do linii skryptu oznaczonego pewną etykietą
pomijając wszystkie pośrednie instrukcjegoto
etykieta
instrukcje 1
etykieta:
instrukcje 2
Wszystkie instrukcje 1 zostaną pominięte.
Przykład - skrypt
goto.sh
:#!/bin/tcsh if ( $#argv == 0 ) then goto blad endif echo "Podales nastepujace argumenty wywolania sktyptu:" echo "$argv" echo "Milego dnia" exit 0 blad: echo "Nie podales argumentow - Nastapil skok do etykiety blad" exit 1Uruchomienie skryptu:
$ ./goto.sh pewien argument Podales nastepujace argumenty wywolania sktyptu: pewien argument Milego dnia
$ ./goto.sh Nie podales argumentow - Nastapil skok do etykiety blad
Instrukcja exit.
Instrukcjaexit
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 $?
.Przykład - skrypt
exit.sh
:
#!/bin/tcsh if ( $#argv == 0 ) then echo "Podaj nazwe pliku jako argument" exit 1 endif if ( -f $argv[1] ) then echo "Ok, plik $argv[1] istnieje" exit 0 else echo "Blad, plik $argv[1] nie istnieje" exit 2 endifUruchomienie skryptu:
$ ./exit.sh Podaj nazwe pliku jako argument
$ echo $? 1
$ ./exit.sh pewienplik Blad, plik pewienplik nie istnieje
$ echo $? 2
$ ./exit.sh /bin/ls Ok, plik /bin/ls istnieje
$ echo $? 0
Przykłady
znajdują się przykładowe skrypty wtcsh
.
Indeks polecen
- Przeszukuje podręcznik (opisy poleceń) w poszukiwaniu danego słowa (wyrażenia regularnego).- usuwa z kolejki zadanie o podanym numerze
- wyświetla listę zadań ustawionych do wykonania za pomocą polecenia
at
- uruchamia proces o zadanym czasie
- uruchamia zawieszone zadanie w tle
- rozpakowanie pliku
*.bz2
- kompresuje pliki
- wyświetla kalendarz
- wyświetla 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
- program zarządzający tabelami demona
cron
, który służy do wykonywania zaplanowanych w czasie operacji- Wypisuje wybrane fragmenty linii
- podaje datę i czas systemowy
- znajduje różnice pomiędzy plikami
- wyświetla rozmiar zajętej przestrzeni dyskowej
- wyświetla linię tekstu
- oblicza wartość wyrażenia matematycznego
- uruchamia zadanie na pierwszym planie
- wyświetla informację o zawartości pliku
- szuka plików w drzewie katalogów
- informacje o użytkowniku.
- połączenie z serwerem FTP pozwalającym na przesyłanie plików
- wyświetla linie pasujące do wzorca
- nazwy bieżących grup
- rozpakowanie pliku
*.gz
oraz *.tgz
- kompresuje pliki
- wyświetla początek pliku
- nazwa hosta
- podaje informacje o hoście
- 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 do pliku
- wyświetla zawartość katalogu
- wysyłanie poczty elektronicznej
- wyświetla strony podręcznika (manuala) dotyczące danego polecenia
- zablokowanie możliwości komunikacji poleceniami
talk
i write
- tworzy katalog
- wyświetla zawartość pliku strona po stronie
- przenosi pliki
- uruchamia program z zadanym priorytetem
- 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 środowiska
- podaje informacje o działających procesach. Opcje polecenia
ps
moga byc podawane w różnej formie: poprzedzone myślnikiem (w stylu UNIX) np. ps -l
, - wyświetla drzewo procesów- wyświetla bieżący katalog
- pozwala zwiększyć priorytet działającego procesu
- usuwa puste katalogi
- usuwa pliki
- szyfrowane kopiowanie plików z serwerów
ssh
i sftp
- Edytor strumieniowy
- wyświetla sekwencję liczb
- szyfrowane połączenie z serwerem FTP pozwalającym na przesyłanie plików
- sortuje 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
- 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
- informacje o systemie
- rozpakowanie pliku
*.zip
- 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
- wyszukuje położenie programu w katalogach ze zmiennej
$PATH
- kim jestem
- lista zalogowanych użytkowników
- wysyła wiadomość tekstową do użytkownika
- wyświetla w nieskończoność dany ciąg znaków
- kompresuje pliki i katalogi
99 A bib entry. Another bib entry.