4823


Lekcja 8

Zarządzanie systemem Unix

Celem zajęć jest zapoznanie słuchaczy z możliwością konfigurowania środowiska pracy użytkownika poprzez definiowanie i modyfikowanie zmiennych, aliasów oraz tworzenie skryptów.

  1. Systemowe środowisko pracy

Środowisko pracy użytkownika w shellu tworzone jest poprzez informacje zawarte w pliku ewidencyjnym /etc/passwd, deskryptory otwartych plików oraz wartości zmiennych predefiniowanych w powłoce lub ustalanych przez użytkownika. Do wartości przypisanych do zmiennych odwołujemy się poprzez nazwę zmiennej poprzedzoną znakiem $ ($zmienna). Istnieją trzy główne typy zmiennych shella:

Zmienne specjalne

Ich wartości przypisywane są w trakcie uruchamiania shella i dostarczają użytkownikowi informacji o procesie powłoki. Zmienne te są własnością shella i nie można ich zmieniać. Najczęściej wykorzystuje się je w programach shellowych do kontrolowania wykonania skryptu.

Zmienna

Modyfikacja ?

Opis

$#

NIE

Liczba argumentów skryptu

$0

NIE

Nazwa skryptu

$1, $2...$9

TAK

Kolejne argumenty skryptu

$*

NIE

Wszystkie argumenty jako jeden ciąg „$1 $2 ... $9”

$@

NIE

Wszystkie argumenty jako oddzielne ciągi „$1” „$2” ...

$-

NIE

Opcje shella z polecenia set

$?

NIE

Kod powrotu ostatniego polecenia

$$

NIE

Numer procesu bieżącego shella

$!

NIE

Numer procesu ostatniego zadania wsadowego

Zmienne środowiska

Zmienne środowiska wykorzystywane są przez shell do przekazywania danych pomocniczych wykorzystywanych do nadzorowania sesji shella. Użytkownik ma pełen dostęp do tych zmiennych i może je modyfikować za pomocą zwykłej instrukcji przypisania zmienna=wartość. Część zmiennych środowiska nie ma przypisanych wartości i musi to zrobić użytkownik.

Zmienna

Opis

CDPATH

ścieżka poszukiwań dla polecenia cd

HOME

Katalog domowy użytkownika

MAIL

Nazwa pliku pocztowego użytkownika

PATH

ścieżka poszukiwań katalogów z poleceniami

PS1

Znak gotowości shella (standardowo $ dla wszystkich i # dla roota)

PS2

Pomocniczy znak gotowości shella

HISTFILE

Nazwa pliku z historią poleceń

HISTSIZE

Liczba pamiętanych poleceń

IFS

Wewnętrzny separator pól dzielący polecenie na części składowe

PWD

Bieżący katalog

EDITOR

Edytor wykorzystywany do edycji wiersza poleceń

MAILCHECK

Czas w sekundach sprawdzania nowo nadesłanej poczty

TMOUT

Czas nieaktywności, po którym shell zakończy sesję (sekundy)

LOGNAME

Nazwa logowania użytkownika

TERM

Tryb pracy terminala

TZ

Symbol strefy czasowej

Zmienne programowe (użytkownika)

Shell umożliwia definiowanie własnych zmiennych użytkownikowi, których zadaniem jest przechowywania wartości potrzebnych podczas przetwarzania skryptu. Nazwy zmiennych mogą być dowolne ale muszą rozpoczynać się literą lub znakiem podkreślenia „_”. W nazwie zmiennej mogą występować dowolne znaki „_ a-z A-Z 0-9”. Shell rozróżnia wielkość liter.

Zmiennej można przypisać wartość wielokrotnie i wielokrotnie można się do niej odwoływać. Należy zwrócić uwagę, że przypisując zmiennej wartość za pomocą operatora „=” nie można stosować spacji pomiędzy znakiem = a nazwą zmiennej oraz jej wartością.

2. Cytowanie

Technika nadzorowania podstawiania wartości zmiennych nazywa się cytowaniem (quoting). Shell rozróżnia cztery sposoby cytowania:

Brak cytowania

Brak cytowania oznacza, że każde słowo oddzielone za pomocą spacji jest interpretowane przez shell.

Apostrofy 'napis'

Cały napis jest przesyłany do polecenia jako jeden argument. Wszystko co jest umieszczone w apostrofach jest chronione. Shell nie interpretuje umieszczonych w apostrofach znaków specjalnych np. * czy ?. Jest to najbardziej restrykcyjny sposób cytowania.

Cudzysłowy ”napis”

Napis umieszczony w cudzysłowach też traktowany jest jako jeden argument, ale shell interpretuje niektóre znaki specjalne. Są to $, \ oraz ` (akcent). Jeżeli zostaną napotkane w ciągu umieszczonym w cudzysłowie shell wykonuje związane z nimi działanie. Wszystkie inne znaki są chronione.

Akcenty `napis`

Polecenie umieszczone w akcentach jest wykonywane przez specjalnie w tym celu wywołany podshell i w to miejsce podstawiany jest uzyskany wynik. Podshell dokonuje analizy polecenia w zwykły sposób, biorąc pod uwagę włączone znaki cytowania. Znaki akcentu są bardzo użyteczne w skryptach, ponieważ sprawiają, że shell uważa wszystko co znajduje się pomiędzy nimi za polecenie, które należy zastąpić jego wynikiem. Mechanizm ten nazywany jest podstawianiem poleceń.

3. Pliki konfiguracyjne

Środowisko użytkownika i shella tworzą pliki, które są przetwarzane podczas otwierania i zamykania sesji Unixa. Kolejność wczytywania plików konfiguracyjnych w poszczególnych shellach przedstawia poniższa tabelka:

Lp

Bourn

Korn

Bash

C

1

/etc/profile

/etc/profile

/etc/profile

/etc/csh.login

2

$HOME/.profile

$HOME/.profile

$HOME/.bash_profile lub

$HOME/.bach_login lub

$HOME/.profile

$HOME/.cshrc

3

$HOME/.kshrc

$HOME/.login

W shellu Korna najpierw wykonywane są polecenia z pliku /etc/profile. Definiowany jest przez administratora systemu i jego zadaniem jest ustanowienie ogólnego środowiska dla wszystkich użytkowników. Te domyślne ustawienia można zmienić lub rozszerzyć za pomocą poleceń umieszczonych w pliku .profile, który znajduje się w katalogu domowym każdego użytkownika. Plik ten jest doskonałym miejscem do umieszczania zmiennych globalnych, własnych aliasów lub skryptów startowych. Jego przeznaczeniem jest ustalenie indywidualnego środowiska pracy dla każdego użytkownika. Najczęściej użytkownik określa w nim swoją ścieżkę dostępu do plików wykonawczych (PATH), ustala maskę praw dostępu (umask), wygląd znaku zgłoszenia shella (PS1), edytor linii komend (EDITOR).

W zmiennej ENV można zdefiniować nazwę dodatkowego pliku, który jest wykonywany zarówno podczas otwierania sesji, jak i podczas uruchamiania nowego shella poleceniem ksh. Powszechnie używana nazwa tego pliku to .kshrc.

4. Skrypty

Shell może być używany za pomocą wiersza poleceń jako interfejs systemu Unix, ale zawiera również konstrukcje programistyczne, pozwalające na powtarzanie ciągu poleceń i zautomatyzowanie ich w skrypcie. W skryptach można wykorzystywać wszystkie poznane komendy, odwoływać się do zmiennych systemowych, definiować własne zmienne. Znak # jest symbolem komentarza, następujące po nim znaki nie są interpretowane przez shell, chyba że jest to pierwszy znak w pierwszym wierszu. Umieszczenie w pierwszej linii skryptu napisu #! /bin/ksh traktowane jest jako nazwa shella, w którym ma być wykonany skrypt. Niektóre systemy Unix i Linux wymagają tej linii do uruchomienia skryptu.

Należy również pamiętać, aby po zapisaniu skryptu w pliku nadać mu uprawnienia wykonywania (execute). Skrypty uruchamia się jak polecenia shella, wpisując ich nazwę.

Prostszą odmianą skryptów są aliasy - nowe komendy zdefiniowane z poleceń systemu Unix. Aliasy stosuje się aby najczęściej wykonywanym poleceniom nadać krótsze lub łatwiej kojarzące się nazwy.

  1. Lista komend

ksh - uruchomienie nowego shella Korna

ksh - uruchamia shell potomny

exit - zakończenie pracy shella

exit - zamyka aktywny shell (w przypadku uruchomienia tylko jednej powłoki komenda ta kończy pracę w systemie Unix)

export - udostępnienie zmiennej we wszystkich procesach powoływanych przez użytkownika czyli zadeklarowanie zmiennej globalnej

export - wyświetlenie wszystkich zmiennych globalnych

export zmienna - przesłanie wyszczególnionej zmiennej do procesów podrzędnych czyli zadeklarowanie jej jako zmienna globalna widoczna w otoczeniu

typeset - ustawienie typu zmiennej

typeset -opcje zmienna=wartość - przypisanie zmiennej określonej typu zgodnie z zastosowanymi opcjami

typeset +opcje zmienna - odebranie zmiennej określonego typu

wybrane opcje:

-i - zmienna typu całkowitego (integer)

-l - zmiana liter na małe

-u - zmiana liter na wielkie

-r - nadanie zmiennej atrybutu tylko do odczytu

-x - zmienne są automatycznie eksportowane do środowiska shella

unset - usunięcie zmiennych shella ze środowiska

unset zmienna - usuwa niepotrzebną zmienną z shella

history - wyświetla zawartość pliku historii wydanych poleceń

history - wyświetlenie listy ostatnio wydanych poleceń

Wydawane przez użytkownika polecenia zapisywane są w pliku .sh_history w katalogu domowym. Można obejrzeć je komendą more .sh_history.

alias - definiuje nazwę zastępczą polecenia

alias nazwa_zastępcza=”polecenia” - zdefiniowanie nowego aliasu o podanej nazwie, który wykonuje wymienione polecenia

unalias - usuwa istniejący alias

unalias nazwa_zastępcza - usunięcie istniejącego aliasu o podanej nazwie

shift - przesunięcie przesłanych do skryptu argumentów w lewo

shift - przesuwa argumenty o jeden w lewo

shift liczba - przesuwa argumenty w lewo o określoną jednostkę

Komenda shift jest niezbędna aby uzyskać dostęp do argumentów o numerach powyżej 9 (patrz zmienne specjalne $1 ÷ $9). Argumenty, które zostaną przesunięte w lewo poza $1, nie są już więcej dostępne. Podczas przesuwania argumentów odpowiednio zmienia się wartość zmiennej $# (ilość argumentów).

  1. Ćwiczenia

Nawiąż połączenie z serwerem solaris.wlodkowic.pl i zaloguj się swoim nazwiskiem i hasłem (patrz lekcja wprowadzająca). System powinien wyświetlić znak zgłoszenia shella Korna - $.

Wykonaj zadania z bieżącej lekcji:

  1. zadeklaruj zmienną imie i przypisz jej Swoje imię

imie=Andrzej

  1. wyświetl wartość zmiennej imie

echo $imie

Andrzej

  1. uruchom shell potomny, sprawdź uruchomione procesy, wyświetl wartość zmiennej imie

ksh

ps -f

masz dwa procesy ksh, są dwa shelle (porównaj PID pierwszego i PPID drugiego)

echo $imie

zmienna imie nie jest widoczna w shellu potomnym

  1. wróć do shella macierzystego i sprawdź zmienną imie

exit

ps -f

echo $imie

w shellu macierzystym zmienna jest zadeklarowana, aby była widoczna w shellach potomnych należy ją wyeksportować.

  1. eksportuj zmienną imie i sprawdź, czy jest widoczna w shellu potomnym, wróć do shella macierzystego

export imie

ksh

echo $imie

Andrzej

exit

  1. podstaw pod zmienna imie nową wartość robert

imie=robert

echo $imie

robert

stara wartość została przesłonięta przez nowe podstawienie

  1. odwołaj zmienną imie i sprawdź to

unset imie

echo $imie

zmienna imie została usunięta z shella

  1. zadeklaruj ponownie zmienną imie ale tylko do odczytu, pisana wielkimi literami

typeset -ru imie=andrzej

echo $imie

ANDRZEJ

  1. spróbuj podstawić do zmiennej imie nową wartość robert

imie=robert

/bin/ksh: imie: is read only

zmienna imie jest tylko do odczytu, nie można zmienić jej wartości

  1. spróbuj usunąć zmienną imie ze środowiska shella

unset imie

/bin/ksh: imie: is read only

zmienna imie jest tylko do odczytu, nie można jej usunąć

  1. wejdź do katalogu /dane/raporty i wyświetl jego zawartość

cd /dane/raporty; ls

  1. zadeklaruj zmienna ilosc i przypisz jej wartość 20

ilosc=20

echo $ilosc

20

  1. wyświetl komunikat: W magazynie jest $ilosc towarów, wyświetlić raport?

echo W magazynie jest $ilosc towarów, wyświetlić raport?

W magazynie jest 20 towarów, wyświetlić raport1 raport2 raport3 raport4 raport5 raport6 raporty

końcowy znak zapytania potraktowany został przez system jako znak specjalny zastępujący dowolny znak dlatego system wyświetlił nazwy plików, których nazwa zaczyna się od słowa raport i mają w nazwie jeszcze jeden dowolny znak (raport1, raport2, .. raporty)

  1. wyświetl ten sam komunikat ujęty w apostrofy

echo 'W magazynie jest $ilosc towarów, wyświetlić raport?'

W magazynie jest $ilosc towarów, wyświetlić raport?

apostrofy są najbardziej rygorystyczną odmiana cytowania, dlatego komunikat został przepisany w identycznej postaci jak został wprowadzony.

  1. wyświetl ten sam komunikat ujęty w cudzysłowy

echo ”W magazynie jest $ilosc towarów, wyświetlić raport?”

W magazynie jest 20 towarów, wyświetlić raport?

shell interpretuje znajdujący się w cudzysłowie znak $ jako symbol specjalny, ale nie robi tego ze znakiem zapytania

  1. przypisz do zmiennej dzis dzisiejszą datę

dzis=date jest błędne, shell przypisze do zmiennej ciąg date (sprawdź echo $dzis)

aby zmiennej dzis przypisać datę bieżącą należy komendę date wykonać w podshellu i wynik podstawić do zmiennej, umożliwia to cytowanie w akcentach

dzis=`date`

echo $dzis

  1. zmień znak gotowości shella na napis wpisz komende =>

PS1=”wpisz komende =>”

  1. wywołaj shell potomny, sprawdź jaki jest znak zgłoszenia i dlaczego?

ksh

$

zmienna PS1 nie została wyeksportowana

exit

  1. przy pomocy zmiennej systemowej ustaw znak zgłoszenia aby pokazywał bieżący katalog

PS1='$PWD $>'

  1. zdefiniuj pomocniczy znak zgłoszenia shella na napis: co dalej...

PS2=”co dalej...”

  1. sprawdź nowo zdefiniowany znak, wpisz nie dokończoną komendę echo i zatwierdź enterem, powinien pojawić się pomocniczy znak zgłoszenia shella

echo ”tekst

co dalej...

Ctrl +C

  1. wyświetl listę wydanych poleceń

history

more .sh_history

  1. zdefiniuj edytor linii komend na program vi, sprawdź w jaki sposób możesz edytować poprzednio wydane komendy?

EDITOR=vi

naciśnięcie klawisza [Esc] powoduje wywołanie edytora vi do edycji komend

klawisz [k] przywołuje poprzednio wykonane komendy, klawisz [j] przechodzi do następnych, klawisz [h] i [l] przesuwają kursor w linii komend

edycja możliwa jest jak w edytorze vi [i] - wstawianie, [a] - dopisanie, [x] - skasowanie, [r] - zamiana

[Enter] zatwierdza poprawioną komendę i kieruje ją do wykonania przez shell

  1. zadeklaruj ponownie zmienną imie i przypisz jej Swoje imię

[Esc] [k] aż pokaże się komenda imie=Andrzej

echo $imie

zmienna imie znowu jest w środowisku aktywnego shella

  1. dopisz do znaku zgłoszenia nazwę uruchomionego shella i numer komendy

PS1='$PWD (ksh:!) $>'

  1. zdefiniuj alias dir, który wyświetla zawartość katalogu w formie długiej z ukrytymi plikami, sprawdź jego działanie

alias dir=”ls -la”

dir

dir /

  1. zdefiniuj alias dom, który powoduje przejście do Twojego katalogu domowego i wyświetlenie jego zawartości

alias dom=”cd; dir”

dom

  1. usuń alias dom i sprawdź to

unalias dom

dom

ksh: dom: not found

  1. wyświetl zawartość pliku .profile w Twoim katalogu domowym, zrób jego kopię zapasową

more .profile

cp .profile .profile_stare

  1. dopisz w pliku .profile definicje zmiennych i aliasy, aby były dostępne po każdym logowaniu

vi .profile

dopisz te deklaracje, które Ci odpowiadają np. PS1, EDITOR, dir itp.

[Esc] [:] [w] [q]

  1. przy pomocy edytora vi utwórz plik tekstowy, który będzie skryptem wyświetlającym zmienne specjalne shella zgodnie ze wzorem:

echo ”*** Oto zmienne specjalne ***”

echo ”=======================”

echo ”nazwa programu -> $0”

echo ”liczba parametrów -> $#”

echo ”pierwszy parametr -> $1”

echo ”drugi parametr -> $2”

echo ”trzeci parametr -> $3”

echo ”wszystkie parametry -> $*”

echo ”=======================”

vi zmienne

wpisz tekst skryptu

[Esc] [:] [w] [q] [Enter]

  1. dodaj wszystkim użytkownikom systemu prawo wykonywania tego pliku

chmod a+x zmienne

ls -l

  1. wywołaj skrypt z parametrami aa bb cc dd ee

zmienne aa bb cc dd ee

*** Oto zmienne specjalne ***

======================

nazwa programu -> zmienne

liczba parametrów -> 5

pierwszy parametr -> aa

drugi parametr -> bb

trzeci parametr -> cc

wszystkie parametry -> aa bb cc dd ee

======================

  1. dopisz w pierwszej linii skryptu polecenie shift 2, sprawdź działanie skryptu

vi zmienne

[i] shift 2 [Enter]

[Esc] [:] [w] [q] [Enter]

zmienne aa bb cc dd ee

*** Oto zmienne specjalne ***

======================

nazwa programu -> zmienne

liczba parametrów -> 3

pierwszy parametr -> cc

drugi parametr -> dd

trzeci parametr -> ee

wszystkie parametry -> cc dd ee

======================

komenda shift 2 przesuwa parametry o dwa w lewo, co powoduje usunięcie dwóch pierwszych parametrów aa i bb



Wyszukiwarka

Podobne podstrony:
4823
praca-licencjacka-b7-4823, Dokumenty(8)
4823
4823
4823
4823
4823
4823
4823
praca-licencjacka-b7-4823, Dokumenty(8)

więcej podobnych podstron