System operacyjny UNIX
1 Informacje wstępne
System operacyjny UNIX
Prof. dr hab. Grzegorz Kamieniarz
Zakład Fizyki Komputerowej
Wydział Fizyki UAM
LITERATURA:
[1]
J.C. Armstrong, D. Taylor,
”UNIX dla każdego”
, Helion, Gliwice 2000
[2]
S. Moritsugu,
”Poznaj UNIX”
, MIKOM, Warszawa 2000
[3]
M.K. Johnson, E.W. Troan,
”Oprogramowanie użytkowe w systemie LINUX”
,
WNT, Warszawa 2000
[4]
Z. Królikowski, M. Sajkowski,
”System operacyjny UNIX ...”
, NAKOM, Poznañ
2000
Dla kogo przeznaczony jest ten kurs?
Kurs ten jest przeznaczony dla studentów
Wydziału Fizyki UAM uczęszczających na
wykład
"System Operacyjnu UNIX"
, który
jest prowadzony przez prof. dr hab. Grzegorza
Kamieniarza.
Podstawowa obsługa
Klikając na przycisk treść, w górnej części ekranu po
lewej stronie, ujrzysz spis wszystkich rozdziałó
oraz podrozdziałów wchodząc w pełen widok.
Nawigacja po systemie odbywa się za pomocą
przycisków:
- przechodzi do kolejnej strony kursu
Czego można się dowiedzieć z kursu ?
Uczestnicząc w tym kursie dowiesz się o
2 Charakterystyczne cechy systemu UNIX
podstawowych właściwościach systemu
operacyjnego UNIX. Nauczysz siê wykonywania
operacji na plikach, poznasz edytory vi oraz sed
i emacs. Zapoznasz się z powłokami systemu i
skryptami powłokowymi. Poznasz obsługę
programów telnet i ftp. Nauczysz się
wyszukiwać informacje czy drukować w
systemie. Kurs porusza jeszcze kilka innych
ważnych zagadnień. Szczegółową zawartość
kursu możesz znaleźć w spisie treści
- przechodzi do poprzedniej strony kursu
- wraca na początek rozdziału
Podstawowe kolory używane w kursie:
- oznacza pole z przykładem
- oznacza pole z uwagami
- nagłówek tabeli
Czas trwania kursu?
Kurs ten jest odpowiednikiem kursu
stacjonarnego trwającego 30 godzin przez
jeden semestr.
Zalecane wymagania systemu
Aby w jak najbardziej efektywny sposób można by
korzystać z kursu zaleca się następujące parametry
systemu:
A.
Przeglądarkę Microsoft Internet Explorer 5.5
B.
Stałe łącze internetowe o szybkości przynajmniej
56Kbps lub 128Kbps. Oczywiście kurs również
dostępny, gdy szybkość łącza będzie mniejsza. Jednak
może to spowodować, że czas ściągania dokument
lub ładowania grafiki może być stosunkowo długi
C.
Zalecana rozdzielczość ekranu to 1024x768 pixeli.
-
wielodostępność
- liczba użytkowników zależy głównie od mocy obliczeniowej sprzętu i
wynosi zazwyczaj od 16 do kilkuset
-
wieloprocesowość
(wielozadaniowość) – jednostkami aktywnymi w systemie są procesy
pracujące współbieżnie, przy wykorzystaniu różnych mechanizmów synchronizacji i
komunikacji
-
hierarchiczny system plików
, z jednolitym potraktowaniem plików zwykłych, katalogów i
plików opisujących urządzenia zewnętrzne
-
wykonywanie operacji wejścia/wyjścia niezależnie od typu urządzeń zewnętrznych
-
duża liczba programów narzędziowych
, tj. kompilatorów języków programowania (C,
Pascal, Fortran 77, Basic, Cobol) wraz z otoczeniem wspomagającym uruchamianie
programów
-
duża liczba programów usługowych
-
przenoszenie oprogramowania systemowego dzięki zapisowi w języku C
Każde polecenie jest programem w systemie UNIX.
Flaga – argument wywołania programu w systemie UNIX, który modyfikuje jego działanie
(argumenty zawsze należy poprzedzić znakiem '-' myślnikiem).
Katalog domowy – katalog, do którego przenosi nas system bezpośrednio po zalogowaniu.
Informacje o użytkownikach.
Do uzyskania informacji o użytkownikach mogą służyć poniższe polecenia:
whoami
– wyświetla nazwę użytkownika pod jaką jesteśmy aktualnie zalogowani,
who am i
– to polecenie działa podobnie jak powyższe, jednak będzie podanych więcej informacji,
np. nr linii terminalowej,
id
– wyświetla: nazwę konta, liczbowy numer naszego identyfikatora, listę grup do których
użytkownik należy,
users
– lista aktualnie pracujących użytkowników,
who
– nazwy zalogowanych użytkowników, linie terminalowe,
w
– nazwy zalogowanych użytkowników, linie terminalowe oraz używane przez nich programy,
passwd
– polecenie służące do zmiany hasła (należy podać stare hasło, później dwukrotnie nowe).
2.1 Zmienne Środowiskowe
2.2 Dostępne powłoki
Tabela: Zmienne środowiskowe
zmienna
znaczenie
HOME
Katalog użytkownika (domowy)
SHELL
Rodzaj powłoki (shell)
TERM
Rodzaj emulacji terminala
PATH
Lista katalogów przeszukiwanych po wywołaniu polecenia
Plik do przechowywania poczty
LOGNAME
Nazwa konta
TZ
Strefa czasowa
UWAGA:
wielkość liter ma znaczenie w systemie UNIX
env, printenv
– powoduje wyświetlenie wszystkich zmiennych środowiskowych.
podobnie polecenie:
echo $nazwa
(
nazwa
to nazwa zmiennej środowiskowej, którą chcemy wyświetlić).
Tabela. Dostęp do powłoki
Nazwa
Polecenie
Opis
Bourne
sh
Dostępne we wszystkich wersjach
C
csh
Składnia podobna do języka C
Korn
ksh
Następca powłoki Bourne
Bash
bash
Cechy powłoki C i Korna
Tesh
tesh
Podobna do powłoki C
3 Wyświetlanie zawartości katalogów i zarządzanie miejscem na dysku
3.1 Polecenie du
3.2 Polecenie df
Wyświetlanie zawartości katalogów odbywa się za pomocą polecenia ls.
Składnia:
ls [opcje] [argumenty]
Tabela: Opcje polecenia ls
Opcja
Objaśnienie
-1
wyświetlanie listy plików w 1 kolumnie
-a
Wyświetlanie plików łącznie z ukrytymi
-C
Wyświetla listy plików w wielu kolumnach
-d
Informacja o katalogu bez jego zawartości
-F
Informacja o typie pliku (/ - katalog, * - program wykonalny, @ - dowiązanie)
-l
Dokładne informacje na temat plików i katalogów
-m
Lista plików oddzielona przecinkami
-r
Wyświetlanie w kolejności odwrotnej od zadanej
-R
Wszystkie podkatalogi wraz z zawartością
-s
Wielkość plików w blokach
-t
Lista wg czasu ostatniej modyfikacji
-x
Lista plików i katalogów ułożona wierszami
Wyświetlenia wielkości katalogu bieżącego i wszystkich katalogów znajdujących się poniżej odbywa
się za pomocą polecenia
du [opcje]
przy czym wielkość katalogów podana jest w blokach.
Tabela: Opcje polecenia du
Opcja
Objaśnienie
-s
Wyświetlenie tylko wielkości bieżącego katalogu
-a
Wyświetlenie wielkości pojedynczych plików
3.3 Kompresja plików
4 Prawa własności plików i katalogów oraz ich modyfikacja
Ilość wolnego miejsca w całym systemie podaje polecenie
df
, ale wyświetlona informacja nie jest
bezpośrednia i wymaga od użytkownika pewnych podliczeń.
Tabela: Wartości wyświetlane poleceniem
file system
Kbytes
used
available
capacity
mounted
Nazwa
urządzenia /
dysku
Wielkość
przestrzeni
dyskowej
Przestrzeń
zajęta (w
KB)
Przestrzeń
dostępna (w
KB)
Procent
zajętości
Miejsce
zamontowania
urządzenia w
systemie plików
Kompresji plików można dokonać za pomocą polecenia
compress nazwa_pliku
,
które powoduje dodanie do nazwy pliku przyrostka.
Z
. Operację odwrotną wykonuje się za pomocą
polecenia
uncompress nazwa_pliku
,
przy czym podanie rozszerzenia.
Z
jest opcjonalne.
Informację o stopniu kompresji uzyskuje się po wywołaniu
compress –v nazwa_pliku
.
Prawa własności lub uprawnienia określone są ciągiem 10 znaków wyświetlonych w pierwszej
kolumnie po wywołaniu
ls –l nazwa_pliku
.
Ciąg znaków składa się z 4 części, które mają następujące znaczenie: typ pliku, uprawnienia
właściciela (twórcy pliku), grupy (do której należą osoby określone przez administratora systemu)
oraz pozostałych użytkowników.
4.1 Zestawienie najczęściej spotykanych praw dostępu
Kolejnych 9 znaków dzieli się na 3 grupy trzyznakowe – kolejno dla właściciela pliku, grupy i
pozostałych użytkowników. Na każdym poziomie dostępu istnieją 3 rodzaje uprawnień (praw
dostępu) do plików:
Prawo do odczytu oznaczane literą
r
– umożliwia użytkownikowi tylko odczytanie zawartości pliku.
Po skopiowaniu tego pliku do katalogu, w którym użytkownik ma prawo zapisu, kopia pliku może
być modyfikowana
Prawo do zapisu oznaczane literą
w
– pozwala modyfikować plik
Prawo do uruchamiania reprezentowane literą
x
. Każdy plik, dla którego jest ono ustawione, może
być przez system traktowany jako program, jeżeli mieści się w katalogu wymienionym w zmiennej
PATH
.
Prawa powyższe są wyłączone znakiem
-
.
Tabela: Typy plików oraz ich reprezentacje
Znak
Objaśnienie – typ pliku
Znak
Objaśnienie – typ
pliku
d
Katalog
p
Potok
b
Plik specjalny blokowy
s
Gniazdo
c
Plik specjalny znakowy
-
Plik
l
Dowiązanie symboliczne
Prawa dostępu do katalogów są podobne do praw dostępu dla plików. Katalog jest przecież plikiem,
którego zawartością jest lista plików i katalogów w nim zawartych.
Tabela: Zestawienie najczęściej spotykanych praw dostępu
Uprawnienia
Znaczenie
- - -
Całkowity brak dostępu
r - -
Prawo do odczytu
r – x
Prawo do odczytu i uruchomienia (dla programów i skryptów
powłoki)
r w -
Prawo do odczytu i zapisu (dla plików)
r w x
Pełne uprawnienia (dla programów)
Tabela: Zestawienie najczęściej spotykanych ustawień praw dostępu do katalogów
Uprawnienia
Znaczenie
- - -
Całkowity brak dostępu
r – x
Prawo do odczytu, bez możliwości usuwania plików i tworzenia
nowych
r w x
Pełne uprawnienia
4.2 Modyfikacja praw dostępu
Prawa dostępu można także określić w sposób numeryczny. Wykorzystujemy do tego celu system
dwójkowy, bo prawa działają na zasadzie przełącznika o dwóch stanach. Może on być włączony lub
wyłączony. Odpowiednim stanom przypisujemy wartości binarne
1
i
0
. Prawa dostępu w zapisie
symbolicznym oraz ich odpowiedniki w zapisie binarnym i dziesiętnym podane są w Tabeli.
Tabela: Prawa dostępu do plików i katalogów w wersji symbolicznej, binarnej i
dziesiętnej
Zapis symboliczny
Zapis binarny
Zapis dziesiętny
- - -
000
0
- - x
001
1
- w -
010
2
- w x
011
3
r - -
100
4
r – x
101
5
r w –
110
6
r w x
111
7
Modyfikacja praw dostêpu realizowana jest za pomocą polecenia
chmod ciąg_znaków nazwa_pliku
,
którego nazwa jest skrótem pochodzącym od angielskich słów change mode. Zmienić uprawnienia mo
metodą symboliczną lub numeryczną.
W przypadku zapisu symbolicznego, pierwszym argumentem polecenia
chmod
jest ciąg znaków zbudowany
zgodnie z Tabelą notacji symbolicznej
Prawa dostępu w trybie numerycznym ustawione są w sposób bezwzględny dla wszystkich poziomów (klas
użytkowników), dlatego pierwszy argument polecenia
chmod
musi zawierać 3 cyfry.
Tabela: Notacja symboliczna polecenia
chmod
Dowolna kombinacja znaków
Jeden znak
Dowolna kombinacja znak
u
użytkownik
+
dodaj
r
odczyt
g
grupa
-
odbierz
w
zapis
o
pozostali
=
ustaw
x
uruchamianie
a
wszyscy
Tabela: Najczêściej stosowane prawa dostêpu w trybie symbolicznym i numerycznym
Zapis symboliczny
Wartości
Stosowalność
- - - - - - - - -
000
wszystkie pliki
r - - - - - - - -
400
pliki
4.3 Polecenie umask
5 Operacje na plikach i katalogach
.
r - - r - - r - -
444
pliki
r w - - - - - - -
600
pliki
r w - r - - r - -
644
pliki
r w – r w – r - -
664
pliki
r w – r w – r w -
666
pliki
r w x - - - - - -
700
programy i katalogi
r w x r - x - - -
750
programy i katalogi
r w x r - x r – x
755
programy i katalogi
Standardowe prawa dostępu nowo tworzonych plików można zmodyfikować za pomocą polecenia
umask [argument]
.
Polecenie wykonane bez argumentu podaje wartość maski – tzn. 3 cyfry przyjmujące wartości od 0
do 7. Polecenie działa na zasadzie filtru i uwzględnia fakt, że prawo do uruchomienia ma duże
znaczenie dla katalogów. W przypadku plików, prawo do wykonywania potrzebne jest tylko dla
programów, a to zachodzi stosunkowo rzadko. Tworząc zatem plik będący programem, należy
samodzielnie określić jego status, nadając mu prawo do wykonywania.
Jeżeli polecenie
umask
daje ciąg cyfr
m
1
m
2
m
3
(gdzie 0
≤
m
i
≤
7), to tworzymy ciąg cyfr
d
1
d
2
d
3
, gdzie d
i
= 7 - m
i
. Nowy ciąg cyfr określa prawa dostępu do katalogów. Jeżeli tworzony
jest zwykły plik, to system to rozpoznaje i nadaje mu uprawnienia
p
1
p
2
p
3
, gdzie p
i
= d
i
– 1 dla d
i
≠
0, a w przeciwnym wypadku p
i
= d
i
= 0.
UWAGA:
Ustawienie maski można zmienić wywołując polecenie z argumentem
umask
m
1
m
2
m
3
.
Tworzenie nowego katalogu odbywa się za pomocą polecenia
mkdir nazwa_nowego_katalogu
.
W danym katalogu możliwe jest utworzenie nowego katalogu, jeżeli ma on prawo do zapisu.
Polecenie to nie ma żadnych opcji.
6 Wyświetlanie zawartości plików
Polecenie
cp
(skrót copy) pozwala utworzyć kopię danego pliku i zapisać ją pod inną nazwą.
Składnia polecenia
cp plik nowy_plik
,
albo
cp lista_plików nowy_katalog
.
Polecenie
cp
nie stosuje się do katalogów.
Polecenie
mv [argumenty]
zmienia nazwę pliku, przenosi plik(i) do innego katalogu, kasując plik wyjściowy, przy czym jego
argumenty są takie same, jak dla polecenia
cp
.
Polecenie
rmdir
[argument]
usuwa pusty katalog, którego nazwa jest argumentem polecenia i nie ma możliwości odtworzenia
usuniętego katalogu.
Polecenie
rm [argumenty]
usuwa nieodwracalnie pliki, które wymienione są jako argumenty. Zabezpieczeniem jest opcja
–i
(od słowa interakcja), która wymusza potwierdzenie wykonania operacji.
UWAGA:
opcja
–i
zapobiega możliwości automatycznego nadpisania
pliku.
Do tego celu służy kilka poleceń.
Polecenie
file nazwa_pliku
,
podaje informację o typie pliku (bez otwierania go).
Polecenie
head [opcje] nazwa_pliku
wyświetla pierwszych 10 linii pliku o podanej nazwie. Dodanie opcji
–n
spowoduje wyświetlenie
dokładnie n wierszy.
Polecenie
tail [opcje] nazwa_pliku
wyświetla 10 ostatnich linii pliku o podanej nazwie. Dodanie opcji
–n
spowoduje wyświetlenie
dokładnie n ostatnich wierszy
Polecenie
cat [opcje] nazwa_pliku
wyświetla cały plik o podanej nazwie. Dodanie opcji
–s
redukuje następujące po sobie puste linie
do jednej.
Polecenie
more [opcje] nazwa_pliku
rozpoznaje wielkość ekranu i wyświetla pliki o podanej nazwie strona po stronie. Dodanie opcji
modyfikuje jego działanie.
Jest to program interakcyjny i po wyświetleniu danej strony czeka na polecenia. Może nim być
naciśnięcie klawisza spacji, co spowoduje wyświetlenie następnego ekranu. Szerszy zestaw poleceń
podany jest w Tabeli.
Tabela: Opcje programu
more
Opcja
Opis działania
-s
Redukuje liczbę pustych linii
+n
Zaczyna wyświetlanie od wiersza o numerze n
+/wzorzec
Wyświetla od linii zawierającej wzorzec
-d
Wyświetla komunikaty pomocnicze w ostatnim wierszu ekranu
-c
czyści ekran przed wyświetleniem kolejnego
Tabela: Polecenia interakcyjne programu
more
Opcja
Opis działania
[spacja]
Wyświetla kolejny ekran
n[return]
Wyświetla n kolejnych linii pliku
h
Wyświetla list dostępnych poleceń
d
Przewija plik w dół o połowę strony
q
Wyjście z programu
7 Przekierowania, filtry i potoki
7.1 Potok
ns
Przewija plik o n linii do przodu
nf
Przewija plik o n ekranów do przodu
b lub ^b
Przewija plik o 1 ekran do tyłu
=
Wyświetla numer aktualnej linii
/wzorzec
Przegląda plik w poszukiwaniu wzorca
n
Poszukuje kolejnego wystąpienia wzorca
v
Uruchamia edytor
vi
od bieżącej linii
:f
Wyświetla nazwę pliku oraz numer bieżącej linii
Omawiając poprzednie polecenia zakładało się, że są one wypisywane z klawiatury w wierszu
poleceń, a wynik jest wyświetlany na ekranie, który stanowi standardowe urządzenie wyjścia.
Można jednak zmienić zarówno standardowe urządzenie wejścia, jak i wyjścia za pomocą
mechanizmu przekierowań
. Do tego celu służy zestaw poleceń
>
,
<
,
>>
, których znaczenie jest
następujące:
<
oznacza przekierowanie strumienia danych wejściowych;
>
oznacza przekierowanie strumienia danych wyjściowych;
>>
przekierowuje dane wyjściowe i dopisuje do wskazanego pliku, którego nazwa jest
argumentem polecenia.
PRZYKŁAD:
ls –l nazwa_katalogu >
nazwa_pliku
ls –l nazwa_katalogu >>
nazwa_pliku
mail adres_internetowy <
nazwa_pliku
Potok
, to zestaw poleceń powiązanych jednym lub większą liczbą znaków przetwarzania
potokowego
|
. W potoku wynik działania jednego polecenia, przekazywany jest jako dane
wejściowe dla kolejnego polecenia.
7.2 Filtr
PRZYKŁAD:
ls –l nazwa_katalogu |
more
who | sort | more
Filtr
, to polecenie, które pobiera dane ze standardowego wejścia (strumień wejściowy danych dla
programu), przetwarza je i przekazuje wyniki na standardowe wyjście (strumień wyjściowy
programu). Nazwa ”filtr” bierze się stąd, że polecenia tego typu są wykorzystywane do ”filtrowania”
danych wejściowych. Mogą też być przeznaczone do działania w obrębie potoku lub w powiązaniu z
mechanizmem przekierowań.
PRZYKŁADY:
Polecenie
wc [opcje] nazwa_pliku
podaje 3 liczby, które oznaczają kolejno liczbę linii, słów i znaków w pliku o podanej nazwie. Opcje
-l
,
-w
,
-c
ograniczają informację odpowiednio do liczby wierszy, słów i znaków pliku.
Polecenie
uniq [opcje] nazwa_pliku
filtruje plik i nie wyświetla powtarzających się linii. Porównuje każdą odczytaną linię z poprzednią.
Jeżeli okaże się identyczna, to jej nie wyświetla. Obsługuje kilka opcji:
·
-u
powoduje wyświetlenie jedynie tych wierszy, które nie powtarzają się
·
-d
powoduje wyświetlenie tych wierszy, które powtarzają się
·
-c
wyświetla wiersze powtarzające się oraz określa liczbę ich wystąpień.
Polecenie
sort [opcje] nazwa_pliku
odczytuje informacje z pliku i zapisuje je w kolejności alfabetycznej. Obsługiwane opcje
wymienione są w tabeli.
Tabela: Opcje polecenia
sort
Opcja
Działanie polecenia
-b
pomijanie spacji
-d
sortowanie w porządku słownikowym
8 Symbole wieloznaczne i wyrażenia regularne
9 Wyszukiwanie informacji
-f
sortowanie bez uwzględniania wielkości liter
-n
sortowanie według porządku liczbowego
-r
odwrotny porządek sortowania
Symbole wieloznaczne w nazwach plików interpretowane przez powłokę:
(a)
*
zastępuje dowolny ciąg znaków o dowolnej długości (łącznie z zerem)
(b)
?
zastępuje dowolny pojedynczy znak
(c)
zakres znaków
- para nawiasów kwadratowych, pomiędzy którymi znajdują się albo
wyszczególnione konkretne znaki (jeden za drugim), albo dwa znaki rozdzielone
myślnikiem określającym właściwy zakres.
- jest to bardziej szczegółowa wersja znaku?
Wyrażenie regularne, to każde słowo traktowane jako wzorzec do porównania wewnątrz plików
albo wyrażenie zbudowane według specjalnej konwencji.
Tabela: Konwencja zapisu wyrażeń regularnych
Zapis
Znaczenie
c
znak c
\c
znak c jest traktowany jako litera c
^
początek wiersza
$
koniec wiersza (jeżeli jest on ostatnim znakiem)
.
dowolny pojedynczy znak
[xy]
dowolny pojedynczy znak z podanego zbioru
[^xy]
dowolny pojedynczy znak spoza podanego zbioru
c*
zero lub więcej wystąpień znaku c
Program
grep
wywołujemy poleceniem
10 Edytory vi
grep [opcje] wzorzec nazwa_bloku
wyświetla on te linie z pliku, w których znajduje się tekst zgodny z wzorcem
Program
find
poszukuje plików od zadanego miejsca w systemie plików (a określonego pierwszym
argumentem polecenia)
find katalog [opcje]
Tabela: Niektóre opcje programu
grep
Opcje
Znaczenie
-c
wyświetla jedynie liczbę odnalezionych wierszy
-i
podczas wyszukiwania ignoruje wielkość liter
-l
wyświetla nazwy plików, w których zostały odnalezione wiersze z tekstem
pasującym do wzorca
-n
wyświetla dodatkowo numery wierszy
UWAGA:
Jeżeli wzorcem jest wyrażenie regularne, to należy je umieścić pomiędzy apostrofami.
Tabela: Opcje programu
Opcja
Znaczenie opcji
-atime n
plik otwierany n dni wcześniej
-ctime n
plik utworzony n dni wcześniej
-exec polecenie
wykonanie danego polecenia
-mtime n
plik modyfikowany n dni wcześniej
-name wzorzec
poszukiwanie nazwy pliku zgodnie z wzorcem
wyświetlenie nazw znalezionych plików
-type c
poszukiwanie plików typu c:
d
– katalog,
f
- plik,
l
-dowiązanie
-user identyfikator
właścicielem pliku jest użytkownik o podanym identyfikatorze
UWAGA:
n może być podane jako: -n, n, +n
Uruchomienie edytora następuje poleceniem
vi [opcje] nazwa_pliku
które otwiera dany plik, a jego zamkniecie i zapisanie na dysk następuje poleceniem
ZZ
. Niektóre
opcje:
+n
otwiera plik w
n
-tej linii,
+/wzorzec
otwiera na pierwszej linii pasującej do wzorca
Po otwarciu pliku edytor znajduje się w trybie poleceń i umożliwia:
- wywołanie trybu wstawiania
- wprowadzenie poleceń edycyjnych
- zmianę pozycji kursora
- wywołanie polecenia
ex
- wywołanie powłoki
- zapisanie i zakończenie edycji
Składnia poleceń edycyjnych:
[n] operator [m] obiekt,
gdzie
operatorami
są:
c
– rozpoczęcie zmiany,
Tabela: Polecenia edytora
vi
wywołujące tryb wstawiania
Polecenie
Opis polecenia
a
dodaje tekst na prawo od kursora
A
dodaje tekst na końcu linii
c
rozpoczyna operację zamiany
C
zmienia do końca linii
i
wstawia tekst z lewej strony kursora
I
wstawia tekst na początku danej linii
o
otwiera linię poniżej bieżącej
O
otwiera linię powyżej bieżącej
R
zaczyna nadpisywać tekst
s
zastępuje znak wpisanym tekstem
S
zastępuje całą linię tekstem
Esc
kończy tryb wstawiania
10.1 Polecenia wiersza stanu
d
– rozpoczęcie usuwania,
y
– rozpoczęcie przywracania (kopiowania)
obiektem
jest dowolny z następujących bloków tekstowych:
- słowo – zawiera znaki aż do znaku odstępu lub znaku interpunkcyjnego. Obiekt z wielką
pierwszą literą rozpoznaje tylko znaki odstępu;
- zdanie – ciąg znaków aż do . , ! ? z następującymi dwoma spacjami
- akapit – tekst aż do następnej pustej linii
Jeżeli obiektem jest bieżąca linia, to powtarzamy operator: cc, dd, yy
PRZYKŁADY:
2cw
zamiana dwóch nastêpnych s³ów
d}
usunięcie tekstu do następnego akapitu
d^
usunięcie tekstu wstecz do początku linii
5yy
kopiowanie 5 linii do bufora
Zwykle polecenia nie są powtarzane na ekranie. Jednak wiersz stanu na dole ekranu jest używany
do powtórzenia wprowadzenia następujących poleceń:
/
poszukiwanie wzorca w przód
?
poszukiwanie wzorca wstecz
:
wywołanie polecenia edytora ex
!
wywołanie polecenia UNIXa
Polecenia te należy zakończyć naciśnięciem klawisza RETURN
10.2 Polecenia przenośne kursora
10.3 Polecenia edycyjne
h
,
j
,
k
,
1
1 znak w lewo, w dół, w górę, w prawo
w
,
W
,
b
,
B
do przodu, do tyłu o słowo
)
,
(
początek następnego, bieżącego zdania
}
,
{
początek następnego, bieżącego akapitu
0
,
$
pierwszy, ostatni znak w danej linii
^
pierwszy znak w linii nie będący odstępem
+
,
-
pierwszy znak następnej, poprzedniej linii
nH
n linii od góry ekranu
nL
n linii od dołu ekranu
/wzorzec
poszukiwanie wzorca do przodu
?wzorzec
poszukiwanie wzorca do tyłu
/
powtarza ostatnie poszukiwanie w przód
?
powtarza ostatnie poszukiwanie wstecz
n
powtarza poprzednie wyszukiwanie
G
przechodzi do ostatniej linii w pliku
nG
przechodzi do linii numer n
mx
zaznacza bieżącą pozycję znakiem x
‘x
przenosi do początku linii zawierającej x
cw
zamienia słowo
cc
zamienia literę
yy
kopiuje bieżącą linię do bufora
nyy
kopiuje n linii do bufora
„xyy
kopiuje bieżącą linię do bufora x
„xp
wkleja zawartość bufora x
„Xd
usuwa i dodaje do bufora x
ZZ
zakończenie pracy i zapis do pliku
:w
zapisanie do pliku
:w file
zapisanie do pliku file
:q
zakończenie pracy
:q!
zakończenie pracy bez zapisania zmian
:r file
wczytanie pliku file poniżej kursora
:s/stare/nowe
zastępuje pierwsze wystąpienie słowa w danym wierszu słowem
nowym
10.4 Dostęp do poleceń systemu UNIX
s:/stare/nowe/g
zamienia wszystkie wystąpienie słowa w bieżącym wierszu
:1,$
s/stare/nowe/g
zamienia wszystkie wystąpienia
:set nonumber
wyłączenie numeracji wierszy
:set number
włączenie numeracji wierszy
:ab a bcd
definicja skrótu wyrażenia bcd
C
zamienia od bieżącej pozycji do końca linii
dd
usuwa bieżącą linię
ndd
usuwa n linii
D
usuwa do końca linii
dw
usuwa słowo
d}
usuwa do następnego akapitu
d^
usuwa wstecz do początku linii
d/wzorzec
usuwa do wystąpienia wzorca
p
wstawia po kursorze ostatnio usunięty tekst
P
wstawia przed kursorem ostatnio usunięty tekst
rx
zamienia znak na x
Rtekst
nadpisuje poczynając od kursora
s
zastępuje znak
S
zastępuje całą linię
u
cofa ostatnie polecenie
U
przywraca bieżącą linie
.
powtarza ostatnie polecenie
~
zmienia wielkość litery
:!polecenie
uruchamia polecenie systemu UNIX i powraca do edytora vi
!!polecenie
bieżący wiersz zastąpiony jest wynikiem działania polecenia systemu
UNIX
!}polecenie
bieżący akapit zastąpiony jest wynikiem działania polecenia systemu
UNIX
:n,m!polecenie
zamienia linie n-m wynikiem polecenia UNIX
:r!polecenie
wczytuje do pliku po bieżącej linii wynik polecenia
11 Charakterystyka powłoki csh
Powłoka jest interfejsem pozwalającym na kontakt użytkownika z systemem UNIX.
UWAGI:
- Sprawdzenie rodzaju powłoki dostępnej w systemie.
Należy jej szukać w katalogu
/bin
lub
/usr/local/bin
, wydając polecenie ls z argumentem
- Zmiany powłoki domyślnej dokonuje się za pomocą polecenia
chsh
(change shell).
- Jeżeli nie działa
chsh
, to można uruchomić powłokę
C
poleceniem
csh
.
- Wyświetlenie parametrów środowiska pracy odbywa się poprzez wykonanie polecenia
env
(
printenv
)
- Zmienne środowiskowe można samemu definiować
(w
csh
:
setenv nazwa_zmiennej wartość
)
w wierszu poleceń lub w plikach konfiguracyjnych
- Polecenie set ustala parametry konfiguracyjne powłoki
C
(np.
set history=100
)
Pliki konfiguracyjne powłoki csh:
-
.login
– jest przetwarzany tylko podczas logowania się do systemu
-
.cshrc
– jest przetwarzany podczas każdego uruchomienia powłoki
C
Tabela: Zmienne środowiskowe pow
Zmienna
Opis zmiennej
HOME
Informacja o ścieżce dostępu do katalogu domowego. Jej wartość
sprawdzić poleceniem:
env HOME
lub
echo $HOME
SHELL
Określa rodzaj powłoki
TERM
Zawiera domyślny typ terminala. Jeżeli ma wartość unknown, można jej nada
wartość poleceniem
setenv TERM vt100
, (Visual Terminal 100 firmy DEC),
który jest najpowszechniej emulowanym typem terminala
USER
Określa identyfikator użytkownika
PATH
Określa przeszukiwane katalogi po wywołaniu poleceń o kolejność poszukiwania.
Separatorem nazw jest symbol
:
Lokalizuje skrzynkę odbiorczą poczty
LOGNAME
Synonim zmiennej
USER
NAME
Zawiera imię i nazwisko użytkownika, podawane przez niektóre programy
12 Mechanizmy obsługiwane przez powłokę C
12.1 Historia poleceń
- Składnia definicji aliasu:
alias nazwa polecenia
( np.
alias ll ‘ls –l’
)
- Historia poleceń
- Aliasy
- Konfiguracja znaku zachęty
Powłoka C pamięta tylko ostatnie wydane polecenie. Aby uaktywnić mechanizm historii poleceń, nale
wykonać polecenie
set history=n
,
gdzie
n
jest liczbę zapamiętanych poleceń.
Umieszczenie tego polecenia w pliku konfiguracyjnym
.cshrc
powoduje obsługę tego polecenia na sta
Jeżeli mechanizm jest aktywny, to polecenie
history
bez argumentów wyświetlania
n
ostatnich polece
System będzie pamiętał
n
ostatnich poleceń z poprzedniej sesji, jeżeli zmienna
savehist
będzie mia
nadaną wartość
set savehist=n
.
Tabela: Polecenia obsługi historii poleceń w powł
Polecenie
Funkcja danego polecenia
!!
Powtórzenie ostatniego polecenia
!$
Powtórzenie ostatniego wyrazu ostatniego polecenia
!*
Powtórzenie ostatniego polecenia z wyjątkiem pierwszego wyrazu
^a^b
Zastąpienie tekstu a tekstem b w poprzednim poleceniu
!n
Wykonanie n-tego polecenia z listy historii poleceń
12.2 Aliasy
12.3 Konfiguracja znaku zachęty
UWAGI:
W powłoce Korn lista poleceń pamięta domyślnie 128 poleceń, które można wyświetlić
poleceniem history. Polecenie
r
bez argumentów powoduje powtórne wykonanie ostatniego
polecenia, natomiast
r numer
lub
r nazwa_polecenia
, wykonuje odpowiednie polecenia jeszcze
raz.
Składnia polecenia definiującego aliasy:
alias nazwa polecenia
Polecenie
alias
bez argumentów wyświetla wszystkie zdefiniowane aliasy, a polecenie
alias nazwa
wyświetla alias o podanej nazwie. Jeżeli alias definiuje polecenie złożone z więcej niż jednego
słowa, należy je umieścić w cudzysłowie. Aliasy zapisane w pliku
.cshrc
będą zapamiętane przez
powłokę.
Aliasy wyłącza się poleceniem
unalias nazwa
.
UWAGA:
W powłoce Korn aliasy definiowane są poleceniem
alias nazwa=polecenia
.
Na stałe definiowane są w pliku
.profile
.
Dokonuje się jej poleceniem
set prompt=”wartość”
.
Występująca w definicji „wartość” może zawierać wartości zmiennych środowiskowych – np.
określającą nazwę bieżącego katalogu
cwd
w postaci
$cwd
.
Tabela: Wartości specjalne dostępne w konfigurowaniu znaku zachęty
Wartość
Znaczenie
13 Zarządzanie zadaniami
`cmd`
Wynik wykonania polecenia cmd
\!
Numer bieżącego polecenia
$zmienna
warytość zmiennej
zmienna
$zmienna:t
Ostatni wyraz wartości zmiennej
Każdy uruchomiony program nazywamy zadaniem lub procesem. Działający program można
zatrzymać poleceniem
^z
i ponownie uruchomić poleceniem
fg
. Zatrzymany program można
uruchomić w tle poleceniem
bg
. Każdy program można umieścić w tle kończąc polecenie znakiem
&
.
Informacje o uruchomionych zadaniach
- Polecenie
jobs
– wyświetla procesy zatrzymane lub ponownie uruchomione w tle przez
powłokę oraz podaje ich numery
[
w nawiasach kwadratowych
]
- Polecenie
ps
(processor status)
Polecenie
nohup polecenie [argumenty] &
wbudowane w powłoce C – przekazuje wykonanie polecenia do tła.
Domyślnie wyjście jest kierowane do
nohup.out
.
Tabela: Opcje polecenia
ps
.
Opcja
Znaczenie
-a
Wyświetla procesy związane z terminalami podłączonymi do systemu
-l
Rozszerzona informacja o procesach
-u
Informacja o procesach użytkownika
-x
Wszystkie procesy w systemie
Tabela: Wartości określające stan procesu
Wartość
Znaczenie
R
Program działający (ang. running)
S
Uśpiony (ang. sleeping) – nie działający przez mniej niż 20 sek.
I
Bezczynny (ang. idle) – nie działający przez więcej niż 20 sek.
T
Proces wstrzymany
14 Drukowanie w systemie UNIX
14.1 System drukowania BSD
Kończenie działania procesów poleceniem
kill #procesu
.
Numer
Nazwa
Znaczenie
1
SIGHUP
Zakoñcz pracê
2
SIGINT
Przerwanie
9
SIGKILL
Bezwarunkowe zakończenie pracy
15
SIGTERM
Programowy sygnał zakończenia
Drukowanie w systemie UNIX jest utrudnione ze względu na różnice formatu danych, jakie przesyłaj
systemy do drukarek oraz różnice w realizacji zarządzania drukowaniem. Systemy kolejkowania plik
wydruku inaczej działają w systemach BSD niż w Systemie V lub AIX.
Informację o nazwach drukarek (które są argumentami poleceń drukowania) oraz o ich mo
znajdują się w pliku konfiguracyjnym
/etc/printcap
. Format tego pliku jest skomplikowany, a informacje
trudne do zrozumienia. Linie zaczynające się od znaku
#
są komentarzami, a każda pozycja w pliku opisuj
cechy drukarki, jest oddzielona separatorem
:
. Drukarka domyślna jest zdefiniowana w pliku
/etc/printcap
na pozycji o nazwie
lp
.
W niektórych systemach (np. HP-UX, IRIX) dostępne są polecenia
lpstat
,
lpinfo –a
(mniej czytelne),
które wyświetlają listę drukarek dostępnych w systemie, a polecenie
lpstat –d
określa drukarkę domyślną!
UWAGA:
Sposobem na ułatwienie pracy jest zdefiniowanie drukarki domyślnej w zmiennej środowiskowej
PRINTER, co można zrealizować w powłoce
C
poleceniem
setenv PRINTER nazwa_drukarki
Wykorzystywany jest także w systemach ULTRIX i Linux. Składa się z:
- Polecenia
lpr [opcje] file
, które powoduje wydruk pliku o nazwie
file
. Faktycznie dodaje
14.2 System drukowania w Systemie V
zadanie (job) do kolejki wydruków, kopiując plik do odpowiedniego katalogu oraz przypisuje mu
numer identyfikacyjny
ID
. Katalogi wydruku mieszczą się zwykle w katalogu
/var/spool
, po
jednym dla każdej drukarki. Następnie demon
lpd
przesyła pliki do urządzeń drukujących.
- Programu
lpd
, odpowiedzialnego za przesyłanie do drukarki danych z katalogu wydruku
- Polecenia
lpq
, które wyświetla listę zadań oczekujących w kolejce drukarki domyślnej
lub drukarki określonej opcją
–Pdr
.
W przypadku składni
lpq user_id
, wyświetlone zostaną zlecenia wydane przez użytkownika
o identyfikatorze
user_id
- Polecenia
lprm
, które usuwa zadania z kolejki należące do danego użytkownika. Składnia
polecenia jest następująca
lprm [-Pdr] identyfikator_zadania
- Program
lpc
służący administratorowi do zarządzania drukarkami.
Tabela: Przydatne opcje polecenia lpr
Opcja
Znaczenie
-h
pomija stronę tytułową
-i
przesuwa wydruk o 8 spacji w prawo
-L
tryb pejzażowy (landscape)
-Pdr
wysyła zadanie do drukarki o nazwie dr
-R
drukowanie stron w odwrotnej kolejności
Przejęty jest także w systemach HP-UX i IRIX. W skład tego systemu drukowania określają następuj
- Polecenie
lp [opcje] file
, które inicjuje drukowanie. Danemu zleceniu (request) drukowania przypisany jest
unikalny numer (request
ID
), który służy do identyfikacji zlecenia
- Katalogi wydruku, w których przechowywane są informacje dotyczące zleceń. Same pliki przeznaczone do
wydrukowania pozostają na swoim miejscu. Można je jednak skopiować do obszaru kolejkowania, wywo
polecenie
lp
z opcją
–c
. Katalogi wydruku maja takie same nazwy jak nazwy odpowiadających im drukarek i
mieszczą się w katalogu
/usr/spool/lp/request
- Polecenie
cancel [opcje] [drukarka]
, które unieważnia wskazane zlecenie drukowania wykonane za
pomocą
lp
. Obsługuje opcje:
ID
– oznaczającą identyfikator zlecenia;
-u user
. Ta ostatnia anuluje zlecenie
skojarzone z użytkownikiem
user
- Polecenie
lpstat
, które wyświetla zawartość kolejki, podając zarówno
ID
, jak i nazwę drukarki. Wywo
bez parametrów, wyświetla wszystkie zlecenia należące do danego użytkownika i jest równowa
lpstat –u $USER
. Składnia
lpstat –p nazwa_drukarki
powoduje wyświetlenie statusu określonej drukarki
15 Komunikacja z użytkownikami
- Demon
lpsched
zarządzający kolejką wydruków i przesyłający zlecenia na odpowiednia drukark
- Polecenia przeznaczone dla administratora
(np. accept i reject zezwalające lub zabraniające dodawania nowych
zleceń do kolejki, enable i disable określające status konkretnych
drukarek, lpadmin, lpmove, lpusers)
- Polecenie
pr
służy do formatowania wydruków. Jest również przydatne do formatowania tekst
wyświetlanych na ekranie. Ma składnię
pr [opcje] pliki
.
Formatuje jeden lub większą liczbę plików zgodnie z opcjami i wysyła na standardowe wyjście. Ka
zawiera nagłówek składający się z numeru strony, nazwy pliku, daty i czasu.
Tabela: Przydatne opcje polecenia lp.
Opcja
Znaczenie
-ddr
wysyła zadanie do drukarki dr
-nliczba
określa liczbę kopii do wydrukowania
-Pn
drukuje stronę n lub zakres
-ttytuł
drukuje tytuł na stronie tytułowej
Tabela: Przydatne opcje polecenia
Opcja
Znaczenie
-n
umieszczenie
n
kolumn na stronie
+n
rozpoczęcie drukowania od
n
-tej strony
-f
wyłączenie druku nagłówka i stopki
-hnagłówek
na każdej stronie drukuje nagłówek
-wn
ustawienie szerokości strony w trybie pejzażowym na
n
znaków
-m
drukowanie wszystkich plików naraz po jednym w każdej kolumnie
UWAGA:
alias print ‘pr | lpr’
lub
alias print ‘pr | lp’
automatycznie wydrukuje plik, podając na każdej stronie w nagłówku jego nazw
strony
alias pq ‘lpq $USER -Pdr’
lub
alias pq ‘lpstat –u $LOGNAME -pdr’
wyświetli zadania drukowania oczekujące w kolejce danej drukarki zlecone przez użytkownika
- polecenie
mesg
wyświetla informację, czy inni użytkownicy mają prawo zapisu do bie
potrzebne do bezpośredniej (interaktywnej) komunikacji. Jeżeli zostanie dodany argument
y
nadane lub odebrane.
- polecenie
write nazwa_użytkownika[@adres]
- polecenie
finger
służy do sprawdzenia, którzy użytkownicy zalogowani są do systemu. Polecenie bez argumentu
podaje użytkowników pracujących w aktualnym systemie. Ogólniej, polecenie ma składnię:
finger [ID]@host.domena
- program
talk ID[@host.domena]
dzieli ekran na dwie części. W górnej części użytkownik mo
informacje, a w dolnej wyświetla się informacja od wywołanego użytkownika. Obaj użytkownicy mog
- polecenie
wall
umożliwia administratorowi przesłanie wiadomości do wszystkich pracuj
terminalu każdego użytkownika pojawia się specjalny komunikat poprzedzający wiadomość.
informacja dnia: W trakcie rozpoczynania sesji na terminalach użytkownika, wyświetlana jest tre
w której administrator wpisuje ważne informacje.
- programy obsługujące pocztę
oraz
(wygodniejszy, nazywany też Berkley Mail).
przypadku wysyłania listu:
Mail [opcje] adres
Polecenie bez argumentu udostępnia skrzynkę pocztową.
UWAGA:
mesg n
nie ogranicza administratora
Polecenie
Znaczenie
delete #
zaznacza wiadomość
#
do usunięcia
help
informacja o dostępnych poleceniach
headers
wyświetla bieżącą stronę nagłówków
print #
wyświetla wiadomość
#
quit
kończy program
reply
umożliwia odpowiedź na bieżący list
save katalog
zapisuje wiadomość w katalogu
undelete #
odwołuje polecenie delete
mail adres
pozwala wysłać pocztę
1) Większość poleceń można skrócić do pierwszej litery. Litera
N
w nagłówku informuje,
nie została dotąd odczytana. Znacznikiem bieżącej wiadomości jest
>
.jjlkjlkjl
2) wiadomości przeczytane, ale nie usunięte, są przenoszone do pliku
mbox
przeznaczone do usunięcia lub zapisane w pliku są kasowane. Pozostałe wiadomo
katalogu
/usr/mail
16 Programy telnet i ftp
- program
elm
lub
pine
ułatwiają obsługę poczty – mają wbudowany interfejs użytkownika
UWAGI:
3) w linii poleceń można dodać opcje np.
-s subject
, aby wysłać list z tematem wiadomo
przy korzystaniu z mechanizmu przekierowania)
4) podczas wpisywania wiadomości dostępne są polecenia, których listę wyświetla sekwencja
Najważniejsze z nich:
~v
uruchamia edytor vi
~r file
wczytuje plik do bufora
~w file
zapisuje wiadomość do pliku
~p
wyświetla zawartość bufora
~!polecenie
wywołuje polecenie powłoki
~h
pozwala edytowaæ nag³ówek wiadomości
- polecenie
telnet host.domena
rozpoczyna sesję na zdalnym komputerze.
Można przejść do wiersza poleceń programu wykonując
^]
.
- polecenie
ftp host.domena
służy do kopiowania plików w sieci Internet.
Tabela: Dostępne polecenia programu telnet
Polecenie
Opis
close
zamknięcie bieżącego połączenia
open
połączenie ze zdalnym komputerem
quit
wyjście z programu telnet
UWAGA:
Naciśnięcie klawisza
^]
i wydanie polecenia
close
zamyka połączenie. Można też
zamknąć sesję na zdalnym komputerze.
Tabela: Przydatne polecenia programu
Polecenie
Opis działania
ascii
tekstowy tryb transmisji plików
17 Programowanie w języku powłoki sh
binary
binarny tryb transmisji plików
bye
zakończenie programu ftp
cd dir
przejście do katalogu dir w systemie zdalnym
close
zamknięcie bieżącego połączenia
dir
lista plików w systemie zdalnym
get
kopiowanie plików ze systemu zdalnego
lcd dir
zmiana katalogu w systemie lokalnym
ls
lista plików w systemie zdalnym
mget
kopiowanie plików do systemu lokalnego z użyciem symboli wieloznacznych
mput
kopiowanie plików do systemu zdalnego z użyciem symboli wieloznacznych
open
nawiązanie połączenia z komputerem
put
kopiowanie do systemu zdalnego
pwd
wyświetlenie ścieżki dostępu do kat. bieżącego w systemie zdalnym
UWAGA:
Wiele węzłów umożliwia anonimowy dostęp do archiwów ftp. Jako nazwę konta należy
podać
guest
lub
anonymous
, a jako hasło – własny adres emailowy.
Powłoka Bourne’a jest standardem we wszystkich systemach.
Zmienne powłoki
Zmienne są interpretowane jako łańcuchy znaków, nawet, jeśli zawierają liczby. Nadanie wartości
zmiennym powłoki następuje poprzez:
- $ kolor=niebieski
$ echo $kolor
- $ echo Lubisz kolor ${innykolor:-zielony} czy ${kolor}?
-
$ echo kocham kolor ${desen=ciemno}$kolor oraz
${odcien}${innykolor}
- Polecenie
read
$ read miasto kraj podpis
Poznan Polska Wasz\ poznaniak
$ echo
Moim ulubionym miastem jest
$miasto
, a ojczyzną jest
$kraj
.
$podpis
- Przekazanie wartości przez argumenty wywołania skryptu:
skrypt arg1 arg2 arg3.
Wówczas nazwy
arg1
,
arg2
,
arg3
dostępne są w skrypcie jako wartości zmiennych
$1
,
$2
,
$3
. Zmienna
$0
zawiera nazwę pliku (skryptu), który został uruchomiony, a zmienna
$*-
zawiera wszystkie argumenty traktowane jako pojedynczy łańcuch znaków
Arytmetyka w języku powłoki
- Polecenie
expr
- Polecenie
test
- służy do przeprowadzania porównań liczb, łańcuchów znaków oraz sprawdzania stanu
systemu plików.
Operatory polecenia test dla porównań liczb:
-eq -ne -lt -le -gt -ge
.
Operatory polecenia
test
do obsługi łańcuchów znaków:
a) operatory jednoargumentowe
§ $ test –z $tekst
§ $ test –n $tekst
gdzie wyniki działania pierwszego polecenia (zawierającego operator
–z
) zwraca
logiczną prawdę, jeżeli zmienna tekst ma d³ugośæ zero lub jest niezdefiniowana, a
wynik drugiego zwraca logiczn¹ prawdê, jeśli ³añcuch tekst ma niezerow¹ d³ugośæ
b) operatory dwuargumentowe
§ $ test alfabet = Alfabet
§ $ alfabet != Alfabet
$ expr 2+2
$ expr 2 / 2
$ expr 2-2
$ expr 2 % 2
$ expr 2 „*” 2
$ zmienna=`expr ${zmienna:-2} + 1`
PRZYKŁAD:
- $ test 3 –eq 4
- $ test $wart –eq –l $tekst
- $ test `we –l plik` -ge 1000
17.1 Instrukcje warunkowe
Operatory dwuargumentowe polecenia
test
· $ test plik1 –nt plik2
· $ test plik1 –ot plik2
· $ test $zmienna –eq 0 –a ! –e plik
Tabela: Operatory (jednoarg.) polecenia
test
do obsługi systemu plików.
Operator
Warunek na zwrócenie logicznej prawdy
-d
Plik jest katalogiem
-e
Plik istnieje
-f
Plik istnieje i jest zwykłym plikiem
-g
Plik istnieje i należy do określonej grupy
-r
Plik istnieje i można go odczytać
-s
Plik istnieje i zawiera jakiś dane
-w
Plik istnieje i ma prawo zapisu
-x
Plik istnieje i jest wykonywalny
UWAGA:
Polecenie
test
istnieje również w innej
równoważnej formie z użyciem nawiasów
kwadratowych
[]
.
PRZYKŁAD:
test –f plik º [ -f plik ]
Składnia instrukcji
if
:
if
blok poleceń powłoki
then
blok poleceń powłoki
fi
Istnieje skrócona forma instrukcji
if
w przypadku łączenia dwóch
17.2 Instrukcje iteracyjne
UWAGA:
poleceń. Jeśli dwa polecenia są rozdzielone symbolem
&&
, to
drugie jest wykonywane tylko w sytuacji, gdy pierwsze zwraca
logiczną prawdę. Odwrotnie, łącząc dwa polecenia symbolem
||
,
drugie wykonywane jest w sytuacji, jeśli pierwsze zwraca
logiczny fałsz.
Istnieją dwa typy pętli – określone i nieokreślone. Pętla jest określona, jeśli liczba powtórzeń jest
znana przed wejściem do niej. Pętla nieokreślona, to taka, dla której blok poleceń jest wykonywany
dopóki pewien warunek jest spełniony.
instrukcja
for
$ for zmienna in lista
$ do
$ blok poleceń
$ done
gdzie lista zawiera dowolne wartości, jak zestaw liczb lub dane wyjściowe zwrócone przez
polecenie.
PRZYKŁADY:
$ for var in ‘ls’
$ do
$ if
$ [ -f $var]
$ then
$ echo $var to zwykły plik
$ fi
$ done
#!/bin/sh
j=0
for i in $*
do
j=`expr $j + 1`
echo “argument $j wynosi $i”
done
#!/bin/sh
j=0
for i
do
j=`expr $j + 1`
echo “argument $j wynosi $i”
done
DIR=$cwd
for FILE in `find $DIR –print`
do
if [ -f$FILE ]; then
compress $FILE
done
UWAGA:
Instrukcja for wykonuje się na wierszu
poleceń i powtarza pętlę dla wszystkich
argumentów polecenia wywołującego
skrypt.
instrukcja
while
realizuje pętlę nieokreśloną i ma składnię
while
wyrażenie
do
blok poleceń
done
PRZYKŁAD:
j=0
for i
do
j=`expr $j + 1`
echo $I argument wynosi $j
done
UWAGA:
Instrukcja
while
może też tworzyć pętle określone, wprowadzając
licznik pętli.
PRZYKŁAD:
i=0
while
[ $i –lt 100 ]
do
i=`expr $1 +
1`
polecenia
done
17.3 Skrypty powłoki Bourne'a
18 Przeadresowanie wejścia – wyjścia
#!/bin/sh
echo “Wczytaj miasto kraj podpis: \c”
read miasto kraj podpis
echo “\n Moim ulubionym miastem jest $miasto,\a ojczyzna -
$kraj. \n
$podpis”
#!/bin/sh
echo “Wczytaj miasto kraj podpis: \c”
read miasto kraj podpis
echo “\n Moim ulubionym miastem jest $1, a ojczyzna - $2. \n
$3”
echo “\nNazwa pliku: $0\nArgumenty skryptu: $*”
!/bin/sh
if [ $# -ne 3 ]; then
echo “Sorry wrong number of arguments”
exit
fi
echo “\n Moim ulubionym miastem jest $1,
a ojczyzna - $2. \n $3”
echo “\nNazwa pliku: $0\nArgumenty skryptu: $*”
Za pomocą przeadresowania można zmienić kierunek
stdin
,
stdout
i
stderr
lub dowolnego deskryptora pliku
określonego przez użytkownika. Deskryptor pliku jest liczbą (nazywaną też liczbowym uchwytem) s
identyfikacji plików otwartych do przetwarzania. Ponieważ można otworzyć do 20 plików, ich deskryptory przyjmuj
wartości w zakresie
0 – 19. Trzy pierwsze są zarezerwowane odpowiedni dla
stdin
,
stdout
i
stderr
.
Składnia przeadresowania:
deskryptor_pliku_1 operator nazwa_pliku
deskryptor_pliku_1 operator deskryptor_pliku_2
W powyższym przykładzie wszystkie błędy zostaną przekazane do pliku
błędy
. Można też łączyć
stderr
w jeden strumień wyjściowy i przesłać do pliku:
grep Kamieniarz < spis_publikacji 2>&1 > nowy_spis
Tabela. Deskryptory plik
Nazwa
I/O
Deskryptor
stdin
Wejście
stdout
Wyjście podstawowe
stderr
Wyjście diagnostyczne
określona przez użytkownika
Wejście- wyjście
Tabela. Operatory przeadresowania
Operator
Czynność
<
Otwarcie określonego pliku jako standardowe wejście
>
Otwarcie określonego pliku jako standardowe wyjście
>>
Dołączenie standardowego wyjścia do pliku
<&
Użycie deskryptora 2 na wejściu kiedy używany jest deskryptor 1
>&
Połączenie deskryptora 1 z deskryptorem 2
>>&
Dołączenie deskryptora 1 do deskryptora 2
|
Przekazanie w potoku standardowego wyjścia na standardowe wejście
PRZYKŁAD:
grep Kamieniarz < spis_publikacji >nowy_spis
grep Kamieniarz < spis_publikacji >nowy_spis 2 > b³êdy
19 Typy zmiennych powłoki
19.1 Zmienne specjalne
Możliwe jest przesłanie wyjścia diagnostycznego do innego polecenia. Służy do tego przeadresowanie do
standardowego wyjścia (2>&1), a następnie przesłanie go w potoku:
polecenie_1 argumenty 2>&1 | polecenie_2\
Powłoka Bourne’a umożliwia także zachowanie danych przekazanych w potoku. Służy do tego polecenie
zapisuje standardowe wejście do pliku oraz przesyła je na standardowe wyjście
who | tee user_list
UWAGA:
Polecenie przeadresowania tworzy nowy plik, jeżeli on nie istnieje. Jeżeli plik istnieje,
to zostanie nadpisany. Aby tego uniknąć, można korzystać z mechanizmu dołą
>>
.
Wyróżniamy:
1.
Zmienne specjalne
, którym nadawane są wartości w momencie uruchomienia powłoki.
2.
Zmienne środowiskowe
do nadzorowania środowiska użytkownika.
3.
Zmienne programowe
tworzone przez użytkownika dla potrzeb przetwarzania.
Polecenie
shift
przesuwa w lewo każdy argument skryptu od
$1
do
S#
. Umożliwia w ten sposób dost
Tabela. Zmienne specjalne
Zmienna
Działanie
$#
Liczba argumentów pozycyjnych
$0
Nazwa programu (skryptu)
$1, $2, ...
Argumenty pozycyjne przekazane do skryptu
$*
Rozwijanie argumentów skryptu do ”$1 $2 ...”
$@
Rozwijanie argumentów skryptu do ”$1” ”$2” ...
$?
Kod powrotu ostatniego polecenia
$$
Numer bieżącego procesu powłoki
$!
Numer procesu ostatniego zadania wsadowego
19.2 Zmienne środowiskowe
powyżej
$9
. Może być użyte w instrukcji
while
.
Przykład:
while [ ”$1” ]
do
process $1
shift
done
while [ ”$1” -a ”$2”
do
process $1 $2
shift; shift
done
Środowisko użytkownika tworzą pliki
a)
/etc/profile
– zdefiniowany przez administratora i przetwarzany
podczas otwierania sesji
b)
.profile
– wykonywany podczas otwierania sesji i ustawia środowisko
danego użytkownika. Mieści się w katalogu domowym
${HOME}
.
W pliku
${HOME}/.profile
można umieścić zmienne globalne.
PATH=${PATH}:${HOME}/bin
PS1=”#$ ”
PS2=”input> ”
Tabela. Podstawowe zmienne środowiskowe pow
Zmienna
Opis
CDPATH
Ścieżka przeszukiwań dla polecenia cd
HOME
Ścieżka katalogu domowego ustawiona w momencie otwierania sesji
Nazwa pliku pocztowego
PATH
Ścieżka przeszukiwań katalogów z poleceniami
PS1
Podstawowy znak zachęty
PS2
Pomocniczy znak zachęty wyświetlany po uruchomieniu podpowłoki (domyślnie >)
IFS
Wewnętrzny separator pól (spacja, tabulacja, nowa linia) do dzielenia polecenia na cz
PWD
Nazwa katalogu bieżącego (z podaniem pełnej ścieżki)
MAILCHECK
Odstępy czasu sprawdzania nadchodzącej poczty w sekundach
TMOUT
Czas nieaktywności, po którym powłoka kończy sesję (określany w sekundach)
19.3 Zmienne programowe tworzone przez użytkownika
TERM=vt100
export PATH PS1 PS2 TERM
Zmienna albo jest ustawiona (przypisana jej jest jakaś wartość) albo nie jest ustawiona (nigdy nie przypisano jej
wartości). Polecenie
unset
usuwa zmienną ustawioną. Zmiennej można przypisać wartość pustą lub pusty napis.
UWAGA:
Powłoka odróżnia zmienną ustawioną i zmienną pustą.
Tabela. Rozwijanie nazw zmiennych powłokowych
Operator
Opis
${nazwa_zmiennej}
Zwrócenie wartości zmiennej o podanej nazwie
${nazwa_zm:=wartość}
Zwrócenie jej wartości, jeżeli zmienna istnieje i nie
jest pusta. W przeciwnym wypadku przypisana jest
jej podana wartość i ta wartość jest zwracana
${nazwa_zm:+wartość}
Jeżeli zmienna istnieje i nie jest pusta, zwracana jest
podana wartość. W przeciwnym wypadku zwracana
jest wartość pusta
${nazwa_zm:-wartość}
Jeżeli zmienna istnieje i nie jest pusta, to zwracana
jest jej wartość. W przeciwnym wypadku zwracana
jest podana wartość, ale bez przypisania jej wartości
zmiennej.
${nazwa_zm:=komunikat}
Zwrócenie wartości zmiennej ustawionej, jeżeli nie
jest pusta. W przeciwnym wypadku wyświetlona jest
nazwa zmiennej i komunikat, a następnie kończy się
działanie skryptu.
UWAGA:
Dwukropek w operatorach jest opcjonalny. Pominięcie dwukropka
spowoduje nierozróżnianie zmiennej pustej.
PRZYKŁAD:
cd $temp; rm –rf *
cd ${temp:=/tmp}; rm –rf *
20 Zagadnienia dodatkowe
20.1 Cytowanie (quoting)
20.2 Konstrukcje sekwencyjne
a) Cytowanie (quoting)
b) Konstrukcje sekwencyjne
c) Konstrukcja warunkowa
case
d)
Zarządzanie zadaniami
e) Testowanie skryptów
Jest to technika nadzorowania podstawiania wartości zmiennych oraz generowania nazw plików.
Tabela. Znaki cytowania
Znak
Opis
brak cytowania
Każde słowo wydzielone za pomocą znaku odstępu jest interpretowane przez
powłokę.
apostrofy ‘napis’
Cały napis jest przesyłany do polecenia jako pojedynczy argument.
Wszystkie znaki są chronione.
cudzysłowy ”napis”
Wszystkie znaki są chronione z wyjątkiem
$
,
\
oraz
`
(znak akcentu). Je
zostaną napotkane, to wykonane zostanie związane z nimi działanie.
lewy ukośnik \c
Znak występujący po
\
jest chroniony przed interpretacją powłoki. Je
jest ostatnim znakiem w wierszu, to wskazuje na kontynuację polecenia.
`polecenie`
Polecenie jest wykonane przez podpowłokę, a uzyskany wynik podstawiany
jest w danym miejscu.
Tabela. Symbole nadzorujące sekwencje polece
Symbol
Znaczenie
;
Ogranicznik polecenia – w jednym wierszu można umieścić więcej niż jedno
20.3 Konstrukcja warunkowa case
polecenie
( )
Grupowanie poleceń do wykonania w podpowłoce
{ }
Grupowanie poleceń do wykonania w bieżącej powłoce
` `
Podstawianie poleceń – pozwala na przypisanie zmiennym wyników sekwencji
poleceń
&&
Sprawdzenie kodu powrotu i w przypadku prawdy wykonanie polecenia
||
Jw., lecz wykonanie polecenia w przypadku zwrócenia wartości ”fałsz”
PRZYKŁADY:
var=`grep ”line” chapter? | line`
( polecenie_1; polecenie_2 | grep
arg ) | wc
{ polecenie_1; polecenie_2 | grep
arg; } | wc
polecenie_1 && polecenie_2
polecenie_1 || polecenie_2
polecenie_1 || { polecenie_2;
polecenie_3; }
case $zmienna in
wartość_1)
czynność_1 ;;
wartość_2)
czynność_2 ;;
wartość_3 | wartość_4)
czynność_3 ;;
*)
czynność_domyślna ;;
20.4 Zarządzanie zadaniami
20.5 Testowanie skryptów
21 Programowanie w powłoce C
esac
nohup polecenie &
nice polecenie &
nohup nice polecenie &
at 6pm polecenie
kill $!
– anulowanie ostatniego zadania przesłanego do tła
Istnieje kilka sposobów interaktywnego sprawdzenia skryptu:
sh –v nazwa_skryptu
– wyświetlanie każdego przeczytanego wiersza przed jego wykonaniem
sh –x nazwa_skryptu
– wyświetla każde wykonane polecenie po dokonaniu wszystkich podstawień
Środowisko użytkownika tworzą pliki, które są przetwarzane podczas otwierania i zamykania sesji
obsługiwanej przez powłokę.
Tabela: Pliki konfiguracyjne powłoki C.
Nazwa pliku
Zawartość
.cshrc
Polecenia wykonywane podczas otwierania sesji oraz każdego
uruchomienia powłoki
.login
Zestaw poleceń wykonywanych tylko podczas uruchomienia powłoki
C obsługującej sesję (tzw. Login shell)
Sekwencja poleceń wykonywanych podczas zakończenia powłoki C
21.1 Podstawowe zmienne powłoki
21.2 Przykłady
.logout
obsługującej sesję
Tabela: Podstawowe zmienne pow
Nazwa
Opis
cwd
Pełna nazwa bieżącego katalogu
home
Ścieżka katalogu domowego ustawiona w momencie otwarcia sesji
Nazwa pliku pocztowego
path
Ścieżka przeszukiwanych katalogów z poleceniami
prompt
Podstawowy znak gotowości po otwarciu sesji; pomocniczym znakiem zachęty jest znak
history
Liczba uprzednio wydanych poleceń dostępnych w mechanizmie historii polece
ignoreeof
Zapobiega kończeniu działania powłoki za pomocą klawisza
^D
(trzeba wyda
exit
)
noclobber
Zapobiega zamazywaniu istniejących plików przy przeadresowaniu
noglob
Zapobiega rozwijaniu nazw plików za pomocą metaznaków
Przykład zawartości pliku
${HOME}/.cshrc
:
1)
Polecenia
określające
podstawowe
zmienne
powłoki C
-
set noclobber
-
set history=100
-
set prompt=”%\! ”
-
set path=${path}:${home}/bin:.
-
echo “Dobrego dnia”
2)
Aliasy poleceń
-
alias dir ‘ls -l’
-
alias tulip ‘ssh tulip.man.poznan.pl’
21.3 Zmienne specjalne powłoki C
W pliku
${HOME}/.logout
można umieścić takie polecenia, jak:
1)
clear
#wyczyść ekran
2)
echo “Do zobaczenia”
#pożegnanie
3) nohup nice find $HOME –name core –ctime +7 –exec /bin/rm –f {} \;&
Zmienne powłoki umożliwiają zapamiętanie i przetwarzanie informacji w programie powłoki. Mogą
być definiowane przez użytkownika drogą przypisania:
set zmienna=wartość
.
Powłoka C obsługuje tablice zmiennych:
set table=(Adam Jan Maria)
Przykład zawartości pliku
${HOME}/.login
:
1)
Określenie własności terminala – np. polecenie
stty erase
‘^H’
przypisujące funkcję kasowania klawiszowi Backspace;
2)
Ustawienie zmiennych środowiskowych za pomocą polecenia
setenv
– np.
setnv PRINTER
prince, które określa
drukarkę domyślną;
Przykład:
set t_d=/usr/tmp
set month=01
Tablica: Zmienne specjalne powłoki C
Zmienna
Przeznaczenie
${#argv}
Liczba argumentów pozycyjnych
$0
Nazwa skryptu
$argv[n]
Argumenty pozycyjne
$1
,
$2
,...
21.4 Przeadresowanie w powłoce C
21.5 Konstrukcje sterujące
$*, $argv[*]
Wszystkie argumenty opozycyjne
$1 $2
...
$$
Numer procesu bieżącej powłoki
Powłoka C nie łączy standardowego wyjścia stdout ze standardowym wyjściem błędów stderr oraz
zamazuje pliki istniejące podczas przeadresowania. Aby przydzielić stderr do stdout, a następnie
przeadresować oba wyjścia do pliku, trzeba użyć sekwencji znaków
>&
:
polecenie argumenty >& plik_wyjściowy
sed ‘s/shell/Shell/g’ plik1 >& plik2
.
Taka sama konwencja dotyczy dopisywania do pliku za pomocą polecenia
>>
:
polecenie argumenty >>& plik_wyjściowy
,
gdzie plik wyjściowy będzie zawierał informację przekazaną po wykonaniu polecenia zarówno na
stdout, jak i na stderr.
Mając ustawioną zmienną noclobber, można wymusić zapis do istniejącego pliku umieszczając
!
za
symbolem przeadresowania (
>!
,
>&!
), lub symbolem dołączania (
>>!
,
>>&!
). Jeżeli zmienna
noclobber nie jest ustawiona, to znak
!
jest ignorowany.
Aby przeadresować
stderr
na
stdout
i następnie oba wyjścia skierować w potoku na wejście
innego polecenia, trzeba dodatkowo użyć znaku
&
polecenie argumenty |& następne_polecenie
UWAGA:
Powłoka C realizuje prostą arytmetykę liczb całkowitych przy pomocy standardowych
operatorów arytmetycznych języka C. Do przypisania wartości zmiennym powłoki
używa się operatorów przypisania języka C.
Instrukcja
if
if ( warunek ) then
# w tej samej linii
lista poleceń
[ else
# część opcjonalna
lista poleceń ]
endif
Instrukcja
for
foreach nazwa_zmiennej ( wartość1 wartość2 ... )
lista poleceń z $nazwa_zmiennej
end
PRZYKŁAD:
if ( $var + 1> $max ) then
@ var1 += 5
@ var2 --
endif
UWAGA:
Polecenie wbudowane
@
służy do przypisania
zmiennej wartości wyrażenia.
PRZYKŁAD:
Przetwarzanie plików w
podkatalogach dr1,
dr2, dr3
foreach dir ( dr1 dr2 dr3 )
cd $dir
foreach file ( * )
if ( -f $file ) then
process $file
endif
end
cd ..
end
21.6 Skrypty w powłoce C
Instrukcja
while
while ( warunek )
lista poleceń
end
PRZYKŁAD:
set month=1
while
(
${month}
<13 )
prosess
${month}
@ month += 1
end
Podstawowe zasady są takie same jak dla powłoki Bourne’a.
#!/usr/bin/csh
# informacja o plikach o danej nazwie
set name=$1
set count=0
foreach dir ( `echo $PATH | sed ’s/:/ /g’` )
if ( -f $dir/$name ) then
ls –l $dir/$name
@ count ++
endif
end
22 Edytor sed
#!/bin/csh
# zapamiętywanie listów, w których nagłówku znajduje się #łańcuch znaków
SLOWO
, przekazywany jako argument skryptu.
echo ”h a” > mailCmd
mail –h < mailCmd > mailList
awk –v SLOWO=$1 ’{
if (index($0, SLOWO) !=0
print $1”\ns “\SLOWO}’ mailList > mailCmd
if (-z mailList) then
echo “brak listu”
else
mail –h <mailCmd > foo$$
rm foo$$
endif
rm mailCmd mailList
end
echo “$count file(s) $1 found“
Jest to edytor strumieniowy. Przetwarza strumień danych wiersz po wierszu, dokonując zmian
według poleceń edycyjnych.
Składnia:
sed ‘s/wzorzec/tekst/g’ nazwa-pliku
gdzie:
wzorzec
jest szukanym ciągiem znaków, a
tekst
jest ciągiem znaków zastępującym wzorzec.
Wzorzec może być zbudowany z wyrażeń regularnych.
Edytor
sed
nie modyfikuje pliku, tylko zmienia tekst na standardowym wyjściu. Ażeby zmienić
zawartość pliku, należy utworzyć plik tymczasowy i wykonać operację
mv
.
Możliwości edytora:
- Selektywne zastępowanie lub usuwanie przez podanie zakresu wierszy:
sed ‘1,25 s/wzorzec/tekst/g’ plik
sed ‘17,$ s/wzorzec/tekst/g’ plik
sed ‘/pattern/ s/wzorzec/tekst/g’ plik
sed ‘/pattern1/,/pattern2/ s/wzorzec/tekst/g’ plik
- Używanie zmiennych powłoki:
Co=IBM
sed ”s/wzorzec $Co/tekst $Co/g” plik
- Wykorzystanie znalezionego wzorca w ciągu
tekst
:
sed ‘s/^[ ]*Rozdział/Część/’ plik
sed ‘s/^\([ ]*\)Rozdział/\1Część/’ plik
Edytor zapamiętuje, jakie znaki zostały dopasowane do części wzorca znajdującymi się
pomiędzy nawiasami poprzedzonymi lewymi ukośnikami.
sed ‘s/\([0-9]\{1,3\}\)\([0-9]\{3\}\)/\1,\2/g’ plik
- Usuwanie wszystkiego oprócz szukanego wzorca:
sed ‘s/.*\(wzorzec\).*/\1/’ plik
- Zastępowanie całych wierszy zawierających wzorzec:
sed ‘s/.*wzorzec.*/tekst/’ plik
PRZYKŁAD:
sed ‘s/wzorzec/tekst/g’ plik > /tmp/sed$$
mv /tmp/sed$$ plik
UWAGA:
1) Usuwanie wierszy zawierających wzorzec należy dokonać z
użyciem polecenia
grep –v ‘wzorzec’ plik
, które pozostawi tylko
wiersze nie zawierające wzorca
2) Polecenia edytora
sed
dostępne są w ramach programu
vi
po
wykonaniu poleceń
:
lub
!obiekt
. Sam edytor daje się także
umieszczać w obrębie potoków, służąc do modyfikacji danych ”w
locie”.
23 Edytor emacs
23.1 Poruszanie się w obrębie pliku
Edytor jest niemodalny i konkuruje z
vi
, przez cały czas funkcjonuje w trybie wstawiania. Nie musi
jednak znajdować się w każdym systemie. Sprawdzenie jego obecności polega na wpisaniu w linii
poleceń nazw:
emacs
,
gnuemacs
,
gnumacs
.
Do wykonywania operacji edycyjnych potrzebne są klawisze specjalne: klawisz Control oraz tzw.
klawisz Meta, którym na ogół jest klawisz Alt. Stosuje się konwencje zapisu:
Ctrl-x
,
Alt-x
,
Ctrl-
Alt-x
, która oznacza jednoczesne wciśnięcie klawisza Control lub/i Alt oraz znaku x. Wyjście z
programu realizuje sekwencja
Ctrl-x Ctrl-c
.
Składnia polecenia wywołującego edytor jest następująca:
emacs nazwa_pliku
.
W trakcie edycji u dołu ekranu widoczny jest pasek stanu, w którym podana jest m.in. nazwa
edytora, typ edytowanego pliku. W przypadku zwykłych plików tekstowych wyświetla się czasem
słowo fundamental.
Tabela: Polecenia edytora emacs do poruszania się w obrębie tekstu.
Polecenie
Opis
Alt->
,
Alt-<
Koniec, początek pliku
Ctrl-v
,
Alt-v
Ekran do przodu, do tyłu
Ctrl-n
,
Ctrl-p
Kolejny, poprzedni wiersz
Ctrl-a
,
Alt-a
Początek wiersza, zdania
Ctrl-e
,
Alt-e
koniec wiersza, zdania
Ctrl-f
,
Alt-f
Znak, słowo do przodu
Ctrl-b
,
Alt-b
Znak, słowo do tyłu
UWAGA:
W większości systemów działają klawisze strzałek, ale nie zawsze.
23.2 Kasowanie znaków i słów
23.3 Wyszukiwanie i zamiana tekstu
Tabela: Polecenia edytora służące do kasowania tekstu.
Polecenie
Opis
Delete
Znak przed kursorem
Alt-Delete
Słowo przed kursorem
Ctrl-d
Bieżący znak
Alt-d
Słowo za kursorem
Ctrl-x Delete
Zdanie przed kursorem
Ctrl-k, Alt-k
Reszta wiersza, zdania
Ctrl-x u
Cofnięcie operacji
UWAGA:
Możliwe jest cofnięcie dowolnej liczby czynności.
Mechanizm ten uruchamiany jest poleceniem
Alt-x query-replace,
wpisywanym w pasku stanu. Polecenie to należy do grupy poleceń nazwanych. Edytor zakłada, że
chcemy znaleźć wystąpienie pewnego tekstu i zastąpić go innym. Pyta więc o szukany wzorzec oraz
nowy tekst. Po znalezieniu czeka na reakcję użytkownika wyrażoną przez wykonanie odpowiednich
poleceń (
y
,
n
,
q
,
!
), które podane są w Tabeli.
Do samego wyszukania wzorca w tekście służą polecenia
Ctrl-s
(do przodu)
Ctrl-r
(do tyłu). Po
odnalezieniu interesującego fragmentu tekstu, możemy opuścić tryb wyszukiwania naciskając
klawisz
Esc
(wtedy kursor pozostanie w nowym miejscu) lub powrócić do punktu wyjścia –
naciskając
Ctrl-g
.
Tabela: Opcje mechanizmu wyszukiwania i zamiany edytora emacs.
Polecenie
Opis działania
y
Zamiana odnalezionego wystąpienia wzorca
n
Pominięcie odnalezionego wystąpienia wzorca i kontynuacja wyszukiwania
q
lub
Esc
Wyjście z trybu wyszukiwania i zamiany bez zamiany odnalezionego
wzorca
!
Zamiana wszystkich wystąpień wzorca w edytowanym pliku
23.4 System pomocy edytora
23.5 Obsługa plików
System pomocy edytora jest rozbudowany. Można go uruchomić sekwencyjnie
Ctrl-h
, przy czym
dwukrotne naciśnięcie tej sekwencji wywołuje główny ekran pomocy. Sekwencja klawiszy
Ctrl-h
i
lub
Ctrl-h t
uruchamia przeglądarkę o nazwie info lub samouczek. Sekwencja
Ctrl-h m
podaje
informację o trybie, w którym edytor się znajduje.
Po uzyskaniu głównego ekranu pomocy można wybrać wskazane opcje. Np. opcja
K
wyświetla
pełny opis działania określonej sekwencji klawiszy.
Po wybraniu
K
należy nacisnąć interesującą nas sekwencję (np.
Alt-<
). Po zapoznaniu się z treścią
opisu,
Ctrl-x l
kończy tryb pomocy.
- Wstawianie zawartości określonego pliku do edytowanego tekstu umożliwia sekwencja:
Ctrl-x i
,
podając także nazwę tego pliku;
- Zapisanie edytowanego tekstu do pliku odbywa się za pomocą sekwencji:
Ctrl-x Ctrl-w
,
z następującym podaniem nazwy pliku;
- Zapisanie tekstu do domyślnego pliku realizują operacje
Ctrl-x Ctrl-s
lub
Ctrl-x s
;
- Możliwe jest edytowanie kolejnych plików, naciskając klawisze
Ctrl-x Ctrl-f
,
które powodują ładowanie edytowanego tekstu do nowego bufora.
Przełączanie pomiędzy buforami zawierającymi tekst możliwe jest wtedy za pośrednictwem
sekwencji
Ctrl-x b
. Naciskając znak
?
, system wyświetla listę edytowanych plików.
Wybierając odpowiednią nazwę, przełączamy się do właściwego pliku. System samoczynnie
24 Pisanie skryptów w jezyku awk
24.1 Pola
umożliwia przełączenie do domyślnego bufora i wtedy wystarczy potwierdzenie klawiszem
Return.
Program
awk
służy do poszukiwania wzorców i przetwarzania tekstów. Wiele elementów jego
konstrukcji jest zaczerpniętych z języka C, ale inne przypominają składnię edytora sed.
Składnia polecenia:
awk [-Fseparator_pól] ‘program’ plik
awk [-Fseparator_pól] –f program_awk nazwa_pliku
gdzie
program
oznacza sekwencję poleceń awk.
UWAGI:
- Opcja
–F
pozwala określić znak separatora pól. Jeżeli jest
podany, to
awk
używa tego znaku do dzielenia wiersza pliku
wejściowego
na
pola.
Pominięcie
opcji
oznacza,
że
separatorem będzie spacja lub tabulacja.
- Każde polecenie programu ma składnię
[wzorzec] [{procedura} ...]
gdzie
wzorzec
określa dopasowanie, zaś
procedura
(nazywana
też akcją) jest zestawem poleceń
awk
, które są wykonywane,
jeśli wzorzec odpowiada bieżącemu wierszowi.
- Każdy plik wejściowy jest przetwarzany wiersz po wierszu.
Pominięcie wzorca oznacza, że procedura dotyczy każdego
wiersza. Pominięcie procedury oznacza, że wiersz należy
przesłać na standardowe wyjście.
Przeczytany wiersz z pliku jest dzielony automatycznie na pola, aby umożliwić dokładniejsze
przetwarzanie. Pola są wydzielone na podstawie separatorów pola. Do każdego pola przypisany
24.2 Typy wzorców dopasowania
jest identyfikator pola o nazwie
$1
,
$2
, ...
$NF
. Każde pole może być przetwarzane niezależnie
za pomocą polecenia
awk
. Liczba pól w przetwarzanym wierszu jest podstawiana do wbudowanej
(inaczej predefiniowanej) zmiennej
NF
, natomiast cały wiersz jest przypisany do identyfikatora
$0
. Ostatnie pole ma identyfikator
$NF
.
Oprócz możliwości dopasowania wierszy lub zakresów wierszy za pomocą wyrażeń regularnych,
awk pozwala porównywać zawartości pola w wierszu.
PRZYKŁAD:
awk –F: ‘{ print $1,
$2 }’ plik
- Wzorce z wyrażeniem regularnym
Wyrażenia regularne umieszczane są pomiędzy ukośnikami:
/wyrażenie_regularne/
- Wzorce z wyrażeniem relacji
Wyrażenia relacji mogą być rozbudowane i zawierać zmienne, funkcje awk, wyrażenia regularne,
wyrażenia arytmetyczne.
PRZYKŁAD:
awk ‘/Kamieniarz/’ spis_prac
awk ‘/^Kamieniarz/’
spis_prac
PRZYKŁAD:
awk ‘$1 == “Kamieniarz” ’
spis_prac
Tabela. Operatory relacji w awk.
Operator
Opis
Przykład
==
Równy
$1==”Informatyka”
<
Mniejszy niż
$1<$2
<=
Mniejszy równy
$2<=$1 - NR
>
Większy
$10>100
>=
Większy równy
zmienna>=$2+3
Jeżeli wartością wyrażenia relacji jest prawda, to wtedy wiersz jest dopasowany i wykonana jest
związana z nim procedura awk.
- Wzorce specjalne
BEGIN
,
END
Te wzorce pozwalają zdefiniować procedury, które mają być wykonane przed przetworzeniem
pierwszego wiersza pliku wejściowego – w przypadku
BEGIN
i po przetworzeniu ostatniego
wiersza tego pliku – w przypadku
END
.
Wzorzec
BEGIN
musi być pierwszym wzorcem na liście wzorców, a wzorzec
END
– ostatnim,
zatem program
awk
ma stukturę:
BEGIN {procedura}
wzorzec {procedura}
.........
END {procedura}
Polecenie z wzorcem
BEGIN
służy do przypisywania zmiennym ich początkowych wartości lub do
!=
Nierówny
$5 != length($2)
~
Zawiera W. REG.
$NF ~ /[A-Z]/
!~
Nie zawiera W. R.
$7 !~ /..[a-z]/
UWAGA:
Wzorce mogą być rozbudowane za pomocą operatorów logicznych
(
&&
,
||
,
!
) i operatora zakresu (
,
) następująco:
wzorzec1 && wzorzec2
wzorzec1 || wzorzec2
wzorzec1, wzorzec2
!wzorzec
gdzie
wzorzec
oznacza wyrażenie regularne lub wyrażenie relacji.
PRZYKŁAD:
awk ‘($0 !~/^$/) && ($1 > 10)
{print $0}’ plik
24.3 Polecenia przypisania i drukowania
ustawiania separatora pól. Procedura związana ze wzorcem
BEGIN
może zawierać dowolne
działania. W procedurze związanej ze wzorcem
END
można umieścić obliczenia końcowe, sumy
składane podczas przetwarzania pliku i inne czynności wykonalne po przetworzeniu wszystkich
wierszy pliku.
Akcje programu awk są częścia polecenia mającego składnię:
[wzorzec] [{procedura}].
W polu procedura umieszczone jest jedno lub więcej poleceń, które określają działania dotyczące
bieżącego wiersza. Każde polecenie jest oddzielone średnikiem, znakiem nowej linii lub znakiem
prawego nawiasu klamrowego
}
.
PRZYKŁAD:
awk ‘BEGIN { FS=”:”; print ”Nazwa pliku ”,
FILENAME }’ plik
awk ‘END {print NR }’ plik
,
które działa podobnie do polecenia
wc –l plik
.
Polecenie przypisania:
zmienna=wyrażenie_awk,
gdzie wyrażenia dopuszczają wartości liczbowe i tekstowe. Są budowane ze stałych, zmiennych,
operatorów i wbudowanych funkcji.
Polecenia drukowania:
print [wyrażenie] [>plik]
: drukuj wyrażenie na standardowe wyjście, oddzielając przecinkami
drukowane zmienne (jeśli nie jest przeadresowane do pliku);
printf format [,wyrażenie] [>plik]
: drukowanie wzorowane na funkcji printf w języku C. Wynik
jest przekazywany na standardowe wyjście, jeśli nie jest przeadresowany do pliku.
Tabela. Wykaz poleceñ steruj¹cych awk.
Polecenie
Opis
if (warunek)
{lista_polec1}
Wykonaj polecenia z listy 1, jeżeli warunek jest spełniony,
w przeciwnym wypadku z listy 2
24.4 Zmienne awk
24.4.1 Zmienne definiowane
[else {lista_polec2}]
while (warunek)
{lista_poleceń}
Dopóki warunek jest spełniony, wykonuj polecenia z listy
for
(wyr_p;warunek;wyr_k)
{lista_poleceń}
Wykonaj wyr_p, a następnie polecenia z listy dopóki
warunek jest spełniony. Po każdym wykonaniu listy
poleceń znajdź wartość wyr_k
break
Przerwij wykonywanie bieżącej pętli
continue
Wykonuj następną iterację pętli, pomijając polecenia
występujące po continue
next
Pomiń sprawdzanie reszty wzorców
exit
Pomiń resztę wierszy pliku, przejdź do wzorca END (jeżeli
istnieje) i zakończ program awk
-
Zmienne definiowane
-
Zmienne wbudowane
-
Zmienne tablicowe
Zmienne awk składają się z liter, cyfr i znaku podkreślenia. Mogą być typu tekstowego lub
liczbowego. Typ wynika z kontekstu.
PRZYKŁAD:
awk ‘BEGIN {prev=””}
{if ($0 !=prev )
print $0}
{prev = $0}’
plik
24.4.2 Zmienne wbudowane
24.4.3 Zmienne tablicowe
Program ten zapamiętuje wczytany wiersz w zmiennej
prev
, która jest porównywana z następnym
wczytanym wierszem. Dany wiersz jest drukowany, jeśli różni się od poprzedniego. Tak działa
polecenie
uniq
!
Program ten można uruchomić inaczej w sposób bardziej czytelny:
awk –f awk_prog plik
,
gdzie program (skrypt) awk zapisany w pliku o nazwie awk_prog zawiera tekst będący
następującą sekwencją poleceń
BEGIN {prev=””}
{if ($0 !=prev ) print $0}
{prev = $0}
.
Użytkownik ma dostęp do tych zmiennych i może w programie zmienić ich wartość. Przechowuj
informacje związane z wykonywanym programem. Nazwy tych zmiennych oraz przypisywane im warto
podane są w Tabeli.
Tabela: Zmienne wbudowane w awk.
Nazwa
Opis
FS
Separator pól w pliku wejściowym. Domyślnymi wartościami są znaki spacji i
tabulacji.
NR
Liczba wczytanych wierszy pliku
NF
Liczba pól w bieżącym wierszu
FILENAME
Nazwa bieżącego pliku wejściowego
OFMT
Format wyjścia dla liczb
OFS
Separator pól dla wyjścia
ORS
Separator rekordów dla wyjścia (domyślnie jest nim znak nowej linii)
RS
Separator rekordów wejścia (domyślną wartością jest znak nowej linii)
24.5 Polecenia wbudowane
Dostępne są tablice jednowymiarowe, których się nie deklaruje, wystarczy przypisanie wartości jej
elementom. Do elementów tablicy odwołuje się za pomocą składni:
nazwa_tablicy[index]
,
gdzie indeks może mieć wartość liczbową lub tekstową. Wartości elementów tablicy mogą być typu
liczbowego lub tekstowego. Dostęp do elementów tablicy odbywa się za pomocą odwołania
zawierającego indeks elementu lub sekwencyjnie z użyciem pętli
for (n_zm in n_tablicy) lista_poleceń
,
gdzie n_zm jest nazwą zmiennej awk, która przebiega wartości wszystkich indeksów tablicy.
Polecenia listy są wykonywane w kolejności ich występowania.
Program awk obsługuje pewną liczbę funkcji wbudowanych, które mogą być używane w wyrażeniach.
Tabela: Funkcje wbudowane
Nazwa funkcji
Opis
cos(wyrażenie_awk)
Zwraca wartość cosinusa
exp(wyrażenie_awk)
Zwraca wartość wykładniczą
index(napis1,napis2)
Zwraca pozycje napisu2 w napisie1 lub 0, jeżeli napis1 !~
length(napis)
Zwraca długość napisu
sin(wyr_awk)
Zwraca wartość sinusa
sprintf(format,wyrażenie_awk)
Zwraca wartość sformatowaną
substr(napis,start,długość)
Zwraca fragment napisu o podanej długości od znaku na pozycji
start
PRZYKŁADY:
1)
awk ‘{if(($3~/[a-zA-Z]*/) && (length($3) == 6)) print $0}’
plik
awk –f tab_awk lista_studentów’
,
gdzie skrypt tab_awk ma postać
#program tab_awk
{lista[NR] = $0}
END {for (i=NR; i>0; i--) {print lista[i]}}
i powoduje odwrócenie kolejności na liście studentów.
2)
awk –f licz_awk lista_pub
,
gdzie skrypt licz_awk ma postać:
#program licz_awk podaje liczbę publikacji członków zespołu
BEGIN{
pub[“Kamieniarz”]
pub[“Florek”]
pub[“Musiał”]
pub[“Dębski”] }
{for (name in pub)
{for (i=1; i<=NF; i++) {
if ($i ~ name) {pub[name] ++}
}}
}
END{
for (name in pub) {
print name, “Liczba publikacji”,
pub[name]}
}
3)
awk –f zlicz_awk nazwa_pliku
#plik zlicz_awk podaje liczbę wystąpień słów w pliku tekstowym
25 Administracja systemu UNIX
{for (i = 1; i<= NF; i++) {
slowo = $i;
gsub(”,”,””,slowo);
gsub{”\.”,””,slowo);
slowaT[slowo]++
}
}
END{
for (slowo in slowaT)
if (slowo !=””) {print slowo, slowaT[slowo]}}
Tematem wykładu jest przedstawienie zadań administratora, omówienie plików używanych do
administrowania
systemem
oraz
automatyzacja
czynności
administratora
za
pomocą
programowania powłokowego. Powłoka jest kluczem do administrowania systemem w sposób
produktywny i na wysokim jakościowo poziomie ze względu na niezawodne sterowanie złożonymi
procesami.
Zadania administratora
1.
Dodawania, zmiana i usuwanie
a) kont użytkowników
b) oprogramowania
c) elementów sprzętu;
2.
Rutynowa konserwacja zapobiegająca wielu kłopotom
a) tworzenie kopii codziennego przetwarzania
b) odtwarzanie plików;
3.
Diagnostyka i bieżące usuwanie problemów w systemie
a) Monitorowanie wykorzystania systemu – dysku, procesora i sieci
25.1 Oprogramowanie wspierające administrację
25.1.1 Pliki i polecenia związane z administrowaniem systemem
b) Utrzymywanie usług – poczty, aplikacji internetowych, sieci;
4.
Zapewnienie bezpieczeństwa w dostępie do systemu
;
5.
Pomoc dla użytkowników
.
Pliki i polecenia związane z administrowaniem systemem
Lokalizacja najważniejszych plików administracyjnych
Rodzaje plików systemu UNIX
Znakowe i blokowe pliki specjalne
Pliki i polecenia związane z administrowaniem systemem umieszczone są w określonych katalogach,
których listę podaje tabela.
Tabela. Katalogi administracyjne
Katalog
Opis
/etc
Mieszczą się w nim pliki passwd i group oraz polecenia przydatne
dla administratora
/usr/bin
Zawiera pliki wykonywalne
/usr/adm lub /var/adm
Katalogi z plikami rozliczeń
/usr/lib lub /var/adm
Zawiera niektóre polecenia, dzienniki eksploatacji oraz tablice
polecenia
cron
/usr/lib/acct
Mieści polecenia rozliczeń
/usr/lib/uucp
Mieści polecenia
uucp
do komunikacji między systemami
/usr/lp
Obejmuje system buforowania drukarki (spooler)
/usr/news
Katalog wiadomości lokalnych
/usr/pub
Gromadzi pliki ”publiczne”
/usr/tmp
Katalogi tymczasowe
/tmp
Lokuje pliki tymczasowe
/usr/man
Zawiera strony podręcznika ekranowego
/usr/local
Gromadzi lokalne oprogramowanie
25.1.2 Lokalizacja najważniejszych plików administracyjnych
/usr/local/bin
Mieści moduły wykonalne lokalnych programów
Lokalizacja najważniejszych plików administracyjnych podana jest w tabeli ”Pliki i skrypty
administracyjne”
Tabela. Pliki i skrypty administracyjne
Plik lub polecenie
Opis
/etc
Nazwa katalogu
/etc/brc
Skrypt wykonywany przez program init po
uruchomieniu systemu
/etc/checklist
Domyślne systemy plików sprawdzane przez fsck
/etc/group
Lista identyfikatorów grup
/etc/inittab
Lista zdarzeń dla programu init
/etc/motd
Plik zawierający komunikat dnia
/etc/mnttbl
Lista wolumenów dołączonych do systemu plików
/etc/passwd
Lista użytkowników i haseł dostępu do konta
/etc/profile
Skrypt startowy sesji użytkownika
/etc/rc
Skrypt startowy systemu
/etc/termcap
Baza danych opisujących właściwości terminali
/etc/wtmp
Dziennik procesów logowania
/usr/adm
Nazwa katalogu
/usr/adm/pacct
Dziennik rozliczeń
/usr/lib
Nazwa katalogu
/usr/lib/cronlog
Dziennik działania programu cron
/usr/lib/crontab
Lista zdarzeń dla programu cron
Tabela. Polecenia administracyjne znajdujące się w katalogu /etc
Polecenie
Opis
config
Konfiguracja systemu UNIX
crash
Awaryjne zakończenie pracy systemu
cron
Wykonanie poleceń zawartych w /usr/lib/crontab
fsck
Sprawdzenie systemu plików
fsbd
Usunięcie błędów w systemie plików
init
Inicjalizacja systemu
killall
Zakończenie wszystkich procesów
labelit
Zapisanie etykiety wolumenu (nazwanego zbioru dysków) na dysku
lub na taśmie
mkfs
Utworzenie systemu plików
mknod
Utworzenie pliku specjalnego (np. nazwanego potoku)
mount
Dołączenie wolumenu do systemu plików
shutdown
Łagodne zamknięcie systemu
startup
Łagodne uruchomienie systemu
25.1.3 Rodzaje plików systemu UNIX
25.1.4 Znakowe i blokowe pliki specjalne
umount
Odłączenie wolumenu od systemu plików
volcopy
Kopiowanie systemu plików między wolumenami
wall
Wysyłanie wiadomości do wszystkich zalogowanych użytkowników
Administrator zajmuje się także urządzeniami (terminale, dyski, napędy taśmy, drukarki), któ
specjalnymi i dzielą się na dwie grupy. Pierwsza grupa, to pliki znakowe, a druga, to pliki blokowe. R
plików systemu UNIX podane są w tabeli. Pliki niestandardowe tworzy się za pomocą polecenia
mknod
Tabela. Rodzaje plików systemu UNIX
Rodzaj pliku
Opis
Zwykły
Standardowy plik
Katalog
Standardowy katalog
Urządzenia znakowe
widziane jako abstrakcyjna tablica znaków
/dev/acu
Samoczynne połączenia systemowe (cu, uucp)
/dev/console
Konsola systemowa
/dev/rdsk*
Dysk
/dev/rmt~
Taśma
/dev/lp
Drukarka
/dev/tty
Terminal
Urządzenia blokowe
widziane jako abstrakcyjna tablica bloków danych o stałej długo
/dev/dsk*
Napęd dysku
/dev/mt~
Napęd taśmy
Nazwany potok
Połączenie między dwoma niezależnymi procesami uruchamianymi na tej
samym komputerze; zlokalizowany w katalogu /dev
Dowiązanie sztywne
Dodatkowa nazwa pliku nadana w obrębie tego samego systemu plik
Dowiązanie symboliczne
Dodatkowa nazwa pliku lub katalogu (również w innym systemie plik
Gniazdo (BSD)
Plik specjalny umożliwiający połączenie między procesami (podobne do
nazwanego potok); związany jest z oprogramowaniem sieciowym TCP/IP
Znakowe pliki specjalne są urządzeniami sprzętowymi, ale zachowują się tak samo, jak zwykłe
pliki. Zapisywanie danych do plików znakowych odbywa się za pomocą poleceń powłoki.
25.2 Dodawanie, zmiana i usuwanie kont użytkowników
Posługiwanie się plikami specjalnymi przez użytkowników można ograniczyć, ustawiając
odpowiednio prawa dostępu do nich. Terminale (pliki
/dev/tty
) powinny w szczególności być
zabezpieczone trybem 700, który uniemożliwia zapis innym użytkownikom do aktywnego
terminala. Wyjątkiem jest polecenie
/etc/wall
, którym administrator przełamuje ten mechanizm
ochrony.
Blokowe pliki specjalne wymagają specjalnych poleceń. Większość plików specjalnych blokowych
i znakowych znajduje się w gestii administratora systemu. Wszystkie pliki, polecenia i katalogi
wspomagające pracę administratora dzielą się na następujące kategorie: stosowane dla codziennej
administracji, automatyzujące zarządzanie oraz używane podczas uruchamiania systemu i jego
zamykania.
PRZYKŁAD:
date > /dev/console
powoduje wyświetlenie daty
na konsoli;
find . –cpio /dev/rmt0
zapisuje kopię katalogu na
taśmie;
pr plik > /dev/lp
drukuje plik w sposób
sformatowany na drukarce.
Dodawanie, zmiana i usuwanie kont należy do codziennych czynności administratora. Oznacza
wprowadzenie nowych pozycji do pliku passwd i group, utworzenie nowych katalogów i plików,
ustawienie zmiennych środowiskowych. Czynności te warto wykonać automatycznie za pomocą
skryptów powłoki.
Niech adduser oznacza skrypt wspomagający otwarcie nowego konta i zapewniający
użytkownikowi podstawową konfigurację. Ta czynność wykonywana jest w kilku etapach opisanych
w tym skrypcie.
# ustalenie identyfikatora nowego użytkownika
usrno=`tail –1 /etc/passwd | cut –f3 –d:`
# znalezienie wartości UID
# ostatniego użytkownika
usrno=`expr $usrno + 1`
# ustalenie identyfikatora nowego użytkownika
echo ”Podaj nazwę grupy dla użytkownika:”
read group
grpno=`grep $group /etc/group | cut –f3 –d:`
echo ”Podaj nazwę konta użytkownika:”
read logname
echo ”Podaj nazwisko i telefon”
read usrname
echo ”Podaj nazwę systemu plików dla katalogu domowego:”
read fs
# Dodanie nowego użytkownika do pliku passwd
echo ”${logname}:..,:${usrno}:${grpno}:${usrname}:/${fs}\
/${logname}:/bin/sh” >> /etc/passwd
# Utworzenie niezbędnych katalogów i plików użytkownika
homedir=/${fs}/${logname}
mkdir ${homedir}
mkdir ${homedir}/public_html
mkdir ${homedir}/ftp
mkdir ${homedir}/src
cp /unixfs/proto/protofile ${homedir}/.profile
# Nadanie praw dostępu do plików i katalogów użytkownika
chmod 777 ${homedir} ${homedir}/*
# Modyfikacja praw dostępu do pliku .profile
chmod 700 ${logname}/.profile
# Przekazanie prawa własności utworzonych plików i katalogów
# nowemu użytkownikowi i jego grupie
chown ${logname} ${homedir} ${homedir}/* ${homedir}/.profile
chgrp ${group} ${homedir} ${homedir}/* ${homedir}/.profile
W podobny sposób należy dodać nową grupę do pliku /etc/group.
Niech deluser oznacza skrypt wspomagający procedurę usunięcia konta użytkownika. Jest to
związane z usunięciem z systemu katalogu domowego oraz odwołań do jego nazwy znajdujących
się w plikach /etc/passwd i /etc/group. Poszczególne czynności można opisać następująco.
# Usunięcie odwołania w pliku /etc/passwd i /etc/group
sed ”/^${logname}/d” < /etc/passwd > /etc/qpasswd
cp /etc/qpasswd /etc/passwd
cd /${fs}/${logname}
if [ $? –eq 0 ]
then
rm –rf *
cd ..
rmdir ${logname}
else
echo ”Nie ma konta /${fs}/${logname}”
fi
UWAGA:
Większość systemów UNIX zawiera zestawy narzędzi do
zarządzania kontami i grupami użytkowników. Należą do nich
polecenia useradd, userdel, usermod, groupadd,
25.3 Dodawanie, zmiana i usuwanie oprogramowania
25.4 Uruchamianie i zamykanie systemu
25.5 Rutynowa konserwacja systemu
groupdel i groupmod.
Dodawanie, zmiana i usuwanie oprogramowania powinno odbywać się w jednym centralnym
punkcie i te modyfikacje powinny być przekazywane do odległych systemów przez sieć, ładowane
na tych systemach powinno odbywać się w czasie mniejszego obciążenia, a zakończenie instalacji
powinno być potwierdzone.
Narzędziem pilotującym prace administracyjne jest program cron, nazywany demonem
zegarowym. Rezyduje w pamięci i sprawdza co pewien czas, czy są zadania do wykonania
umieszczone w kolejkach przez polecenia at, batch, crontab. Polecenia te spełniają następujące
zadania:
at
- przekazuje polecenia do kolejki z określonym czasem uruchomienia zadania;
batch
– ustawia wskazane polecenie w kolejce zadań uruchamianych w czasie dogodnym dla
systemu;
crontab
– obsługuje listę poleceń uruchamianych w określonych momentach czasowych.
Polecenie cron inicjuje się podczas uruchamiania systemu, a zatrzymuje się w chwili zamykania
systemu.
Uruchamianie i zamykanie systemu powinno odbywać się łagodnie. Proces uruchomienia
nadzorowany jest przez program init, którego czynności sterowane są przez plik /etc/inittab.
Bezpieczne zamknięcie systemu uzyskuje się za pomocą polecenia
shutdown
.
25.6 Bezpieczeństwo systemu
Rutynowa konserwacja systemu obejmuje regularne tworzenie kopii zapasowych, które w razie
potrzeby mogą być użyte do odtwarzania utraconych plików. Ważne też jest monitorowanie
wykorzystania przestrzeni dyskowej oraz okresowe sprawdzanie dzienników systemu w
poszukiwaniu opisu błędów.
Bezpieczeństwo systemu uzyskuje się przez:
a) Autoryzowany dostęp
b) Spójność systemu
c) Prywatność danych
d) Ciągłość usług
Zapobieganie nieautoryzowanemu dostępowi wymaga przestrzegania zasady, że wszyscy
użytkownicy i wszystkie grupy mają hasła, a identyfikatory użytkowników nie powtarzają się. Łatwo
to sprawdzić, wykonując polecenia:
awk –F: ‘if ( $2 == ”” ) {print }’ /etc/passwd /etc/group
cut –f1 –d: /etc/passwd | sort | uniq –d
cut –f1 –d: /etc/group | sort | uniq –d
Utrzymanie spójności systemu uzyskuje się przez nadzór nad prawami dostępu do katalogów i
plików wykonywalnych. Prawa dostępu omawiane poprzednio (rwx) nie wyczerpują wszystkich
możliwości ochrony plików. Pozostałe prawa dostępu podane są w Tabeli.
Prawa SUID/SGID powodują, że procesy wykonujące pewne polecenia mają taki sam dostęp do
zasobów systemowych, jak właściciel/grupa wykonywanych programów. Oznacza to, że
użytkownikom umożliwia się przyjęcie cudzej tożsamości (nawet roli administratora) na czas
wykonywania pewnych poleceń. Dotyczy to programów, których znaczniki dostępu przyjmują
wartości:
a) 4000 (SUID) – Wtedy identyfikator użytkownika zostaje ustawiony na
identyfikator właściciela wykonywalnego pliku;
b) 2000 (SGID) – Wtedy identyfikator grupy zostaje ustawiony na wartość
identyfikatora grupy, do której należy właściciel wykonalnego pliku;
c) 1000 (Sticky bit) – bit nieusuwalności programu z pamięci
Tabela. Rozszerzone prawa dostępu do plików
Kod
Nazwa
Znaczenie
t
Sticky bit
Zachowanie w pamięci wykonanego programu (po jego zakończeniu) –
np. vi
s
SUID
Ustawienie identyfikatora użytkownika dla procesu w czasie wykonywania
s
SGID
Ustawienie identyfikatora grupy dla procesu w czasie wykonywania
25.7 Pomoc
Potencjalnie najbardziej niebezpieczny jest pierwszy znacznik. Szczególne zagrożenie występuje,
jeżeli właścicielem takiego pliku jest administrator (root). Powinien on zatem okresowo (np.
wykorzystując polecenie cron) wyszukiwać takie programy. Sposób na to jest następujący:
find / –user root –perm 4000 –exec ls –lg {} \;
find / –perm 2000 –exec ls –lg {} \;
W odniesieniu do nadzoru katalogów, to należy okresowo sprawdzać te z nich, które mogą być
odczytywane lub zapisywane przez wszystkich. Oznacza to potrzebę uruchamiania polecenia
find / –perm 777 –type d –print
.
Prywatność danych osiąga się, nadzorując prawa dostępu do plików i katalogów. Ułatwia to
polecenie umask 027, umieszczone w pliku /etc/profile lub .profile (.cshrc). Wówczas tworząc
nowe pliki, tylko użytkownik (jako właściciel) i jego grupa mają do nich dostęp. Sprawdza się to
poleceniem
find / –perm 777 –type f –print
.
W przypadku użytkowników zewnętrznych, sposobem na zapobieganie przerwania ciągłości usług
jest udostępnianie systemu w środowisku o ograniczonej możliwości powłoki. Realizowane jest to
przez uruchomienie podczas logowania programu /bin/rsh zamiast /bin/sh. Wówczas
użytkownicy nie będą mogli po rozpoczęciu sesji wykonać polecenia cd, zmienić wartości zmiennej
środowiskowej PATH, zmienić przypisania strumienia wyjściowego oraz wykonać żadnego
polecenia zaczynającego się od ”/”. Ograniczenia te zostaną uaktywnione po wykonaniu się
wszystkich poleceń umieszczonych w pliku .profile użytkownika. Ten plik powinien być
zabezpieczony przed możliwością jego modyfikacji przez użytkownika i zawierać w zmiennej PATH
tylko dostęp do katalogów zawierających niezbędne i bezpieczne polecenia. Te niezbędne polecenia
dołącza się do ograniczonych zbiorów poleceń mieszczących się w katalogach /rbin i /usr/rbin.
Jeżeli plik .profile jest określony następująco,
PATH=:/rbin:usr/rbin
cd /unixfs/rdir
export PATH,
to użytkownicy mogą wykonać tylko polecenia mieszczące się w katalogu bieżącym oraz /rbin i
usr/rbin. Nie mają też możliwości poruszania się w systemie plików.
Pomaganie użytkownikom należy do codziennych czynności administratora. W szczególności
powinien systematycznie powiadamiać użytkowników o wprowadzonych zmianach. Do komunikacji
z użytkownikami służą polecenia mail, news, wall oraz plik /etc/motd zawierający wiadomość
26 Usługa cron
wyświetlaną podczas uruchamiania sesji przez użytkownika. Pliki zawierające wiadomości
umieszczone są w katalogu /usr/news. Polecenie news sprawdza katalog wiadomości celem
wyświetlenia zawartych w nich bieżących informacji. Jeżeli wywołane jest bez argumentów, to
drukuje wszystkie pliki z danego katalogu.
Pozwala na szeregowanie zadań w celu ich cyklicznego uruchamiania, a dane wyjściowe moż
przekazywać do wskazanego pliku lub do określonego użytkownika dzięki dostępowi do mechanizmu
poczty. Usługa ta realizowana jest przez demona cron, który nigdy nie przerywa swojego działania.
Jest on uruchamiany automatycznie podczas ładowania systemu. Zadania zlecane demonowi
zapisane
są
w
odpowiednich
plikach
systemowym
umieszczonych
w
podkatalogu /var/spool/cron/crontabs (w systemie HP-UX - /usr/spool/croc/crontabs; w
systemie Linux jest to katalog /usr/spool/cron/tabs). Nazwy tych plików pokrywają się
nazwami
kont
użytkowników,
zatem
administrator
umieszcza
zlecenia
w
pliku /var/spool/cron/crontabs/root. Użytkownicy dodają zadania w swoich plikach przez
wywołanie polecenia crontab.
Składnia polecenia crontab:
crontab [file]
crontab opcje [user]
.
W pierwszej wersji – bez podania nazwy pliku - polecenie crontab określa domyślny plik crontab i
umieszcza go w odpowiednim katalogu. Jeżeli jednak jest wywołane z nazwą pliku
file
, to dla
użytkownika o identyfikatorze
user
, sekwencja poleceń zapisana w pliku
file
zostanie skopiowana
do pliku crontab, czyli np. /var/spool/cron/crontabs/user. Jeżeli użytkownik
user
zapisa
wcześniej pewne pozycje do pliku crontab, to zostaną zastąpione przez polecenia umieszczone w
pliku
file
.
Administrator może uruchomić program crontab dla innego użytkownika. Wówczas korzysta z
drugiej wersji polecenia, podając jego identyfikator po dowolnej opcji. W ograniczonym zakresie ta
wersja polecenia jest dostępna dla wszystkich użytkowników. Dostępne opcje są następujące:
-e Edycja bieżącego pliku crontab lub tworzenie nowego;
-l Wyświetlenie bieżącego pliku użytkownika;
-r Kasowanie pliku crontab.
-u (opcja obsługiwana w systemie Linux) z następującym identyfikatorem użytkownika,
umożliwia administratorowi instalację plików crontab danemu użytkownikowi.
crontab –l > nazwa_pliku
vi nazwa_pliku
Plik crontab zawiera listę poleceń, które powinny być wykonane automatycznie o podanym czasie. W
jednej linii należy umieścić jedno polecenie lub grupę poleceń oddzielonych średnikami. Polecenie
jest poprzedzone podaniem czasu rozpoczęcia jego wykonywania. Do tego służy pięć pó
rozdzielonych znakiem odstępu. Poszczególne pola oznaczają kolejno:
minuty 0-59
godziny 0-23
dzień miesiąca 1-31
miesiąc 1-12
dzień tygodnia 0-6, gdzie 0 oznacza niedzielę.
Przyjęta jest konwencja, że przecinkiem oddziela się wybrane wartości, za pomocą średnika określa
się zakres, a gwiazdka służy do wskazania wszystkich możliwych wartości. Ostatnie pole, które jest
przeznaczone na polecenie, może zawierać spacje, natomiast pozostałe pola nie mogą zawiera
spacji. Jeśli pierwszym znakiem w linii jest #, to linia jest traktowana jako komentarz i jest
ignorowana. Jeśli zaś w poleceniu znajduje się znak %, tekst występujący po znaku procentu będzie
oznaczał standardowe wejście dla polecenia.
Usługa cron jest konfigurowana za pomocą plików cron.allow i cron.deny,
w których można umieszczać identyfikatory użytkowników – po jednym w każdej linii. Dostęp do tej
usługi określony jest w następujący sposób:
- Jeżeli istnieje plik cron.allow, to tylko użytkownicy wymienieni w tym pliku mog
uruchomić crontab;
- Jeżeli nie istnieje cron.allow, a istnieje cron.deny, to użytkownicy umieszczeni w tym
PRZYKŁADY:
crontab nazwa_pliku
crontab –l –u user
crontab –u
user /tmp/user_cron
PRZYKŁADY:
0,15,30,45 * * * * (echo ‘ \c’; date; echo ””)
> /dev/console
59 3 * * 6 find / -print |
program_backup
0 0 1,15 * * echo ” Dzień serwisowy” |
mail user
59 11 31 12 * /etc/wall%Szczęśliwego
Nowego Roku!
Powered by
ILIAS
2.4.4
pliku nie mają dostępu do polecenia crontab. W celu udostępnienia usługi cron wszystkim
użytkownikom, wystarczy, aby plik cron.deny był pusty;
- Jeżeli żaden z plików konfiguracyjnych nie istnieje, to tylko root ma dostęp do usługi.
UWAGA:
Lokalizacja plików konfiguracyjnych zezwalających na dostęp do polecenia
crontab:
HP-UX /usr/lib/cron/cron.{allow,deny}
IRIX, Solaris /etc/cron.d/cron.{allow,deny}
SunOS /var/spool/cron/cron.
{allow,deny}
Linux /var/spool/cron/{allow,deny}
AIX, Digital UNIX /var/adm/cron/cron.{allow,deny}