Professional Documents
Culture Documents
PRZYKADOWY ROZDZIA
SPIS TRECI
KATALOG KSIEK
KATALOG ONLINE
ZAMW DRUKOWANY KATALOG
TWJ KOSZYK
DODAJ DO KOSZYKA
CENNIK I INFORMACJE
ZAMW INFORMACJE
O NOWOCIACH
ZAMW CENNIK
CZYTELNIA
FRAGMENTY KSIEK ONLINE
Wydawnictwo Helion
ul. Kociuszki 1c
44-100 Gliwice
tel. 032 230 98 63
e-mail: helion@helion.pl
Spis treci
O autorze ..................................................................................................... 19
Wprowadzenie ............................................................................................ 21
Spis treci
Spis treci
10
10
Spis treci
11
11
12
12
Spis treci
13
13
14
14
Spis treci
15
15
16
Cz VI Programowanie ...................................................................537
Rozdzia 28. Korzystanie z GCC i innych narzdzi programistycznych ....539
Podstawy programowania w C pod Linuksem ...................................................................................540
Prosty program w jzyku C ..........................................................................................................540
Korzystanie z GNU Compiler Collection ...........................................................................................541
Budowanie aplikacji Java za pomoc Eclipse ....................................................................................543
Korzystanie z Eclipse Workbench ...............................................................................................543
Tworzenie maej aplikacji Java w Eclipse ...................................................................................545
Zintegrowane rodowisko programistyczne KDevelop .....................................................................546
Tworzenie aplikacji dla GNOME za pomoc narzdzia Anjuta ........................................................549
Zarzdzanie wieloosobowymi projektami programistycznymi za pomoc CVS i Subversion ..........551
Tworzenie pakietw RPM ..................................................................................................................553
Tworzenie pliku specyfikacji .......................................................................................................553
Tworzenie listy plikw i generowanie poprawek ........................................................................555
Budowanie i testowanie pakietu RPM .........................................................................................556
Inne zasoby programistyczne dla Linuksa ...........................................................................................556
Odnoniki ............................................................................................................................................557
16
Spis treci
17
17
18
Dodatki .................................................................................................627
Dodatek A Wersje SUSE Linux firmy Novell ............................................. 629
Dodatek B SUSE i Linux zasoby internetowe ...................................... 633
Skorowidz .................................................................................................. 661
18
Rozdzia 8.
Praca z powok
Na pocztku by wiersz polece. Tako rzecze Neal Stephenson w swoim rewelacyjnym
eseju na temat historii komputerowych systemw operacyjnych. I tak te jest w rzeczywistoci w Linuksie wiele rzeczy najatwiej i najszybciej mona zrobi wprost z wiersza polece, zwanego powok (ang. shell). Dlaczego powoka? W jzyku angielskim
orzech skada si z jdra (ang. kernel) i skorupy (ang. shell). Wprawdzie w jzyku polskim shell oznacza powok, jednake w tym kontekcie jest te skorup otaczajc
jdro systemu.
Interfejs graficzny typu wska i kliknij jest atwy w uyciu. Z drugiej strony, potga
wiersza polece i zdolno do wykonywania wielu zada przez nacinicie kilku klawiszy jest tak dua, e czasem trudno sobie wyobrazi narzdzie atwiejsze w uyciu. Problem tkwi w krzywej uczenia si. W interfejsie graficznym (GUI) wystarczy przyzwyczai
si do kilku zasad uywania myszy i mona wykona wikszo zada. W przeciwiestwie
do GUI puste okno wiersza zachty powoki nie zawiera adnych wskazwek, jak wykonywa okrelone prace.
Nawet najwikszy ekspert od graficznego interfejsu uytkownika moe potrzebowa
przywrcenia systemu, a wtedy do dyspozycji otrzymuje tylko wiersz polece. Znajomo kilku polece jest konieczna, by jako sobie z nim poradzi. W caej niniejszej
ksice Czytelnik spotka mnstwo pomysw, jak za pomoc wiersza polece szybko
wykona rne dziaania.
W niniejszym rozdziale skoncentrujemy si na powoce jako jzyku programowania.
Wikszo powok zawartych w dystrybucji SUSE Linux pozwala czy polecenia w jeden
cig w edytorze tekstu i zapisywa wynik jako skrypt. Znajc skadni powoki, moemy
definiowa zmienne, przypisywa wartoci, tworzy funkcje i ewaluowa rne wyniki
robi rzeczy dostpne w prawdziwych jzykach programowania, takich jak C, Java
lub C++. Wiele standardowych polece powoki jest w rzeczywistoci skryptami. By
moe Twj skrypt te ktrego dnia bdzie w powszechnym uyciu.
155
156
dostpu, aby znale polecenie (o ile nie wpisalimy go z podaniem penej cieki).
3. Po zlokalizowaniu polecenia powoka wywouje funkcj fork w jdrze Linuksa,
aby skopiowa powok (dziki czemu po ukoczeniu pracy przez program powrci
do wiersza zachty). Program nastpnie wywouje kolejn funkcj jdra exec,
aby wykona polecenie.
4. Na koniec powoka na podstawie okrelonych regu ustala, co polecenie,
np. cat *.txt *.sxw > doclist ma osign (tu odbywa si interpretacja)
i dostarcza wynik.
Powoka moe uruchomi kilka polece w jednym cigu, jak w powyszym przykadzie.
Przykad ten jest stosunkowo prosty, lecz powoka wykonuje w nim kilka dziaa:
156
157
Do moliwoci powoki (oprcz listy Wygodne cechy wsplne dla wszystkich powok
z rozdziau 5., Rozpoczcie pracy) nale:
157
158
\X dopasowuje lub rozpoczyna sekwencj unikow dla znaku specjalnego, na przykad ?. Ponisze polecenie tworzy plik o nazwie zawierajcej znak zapytania:
touch foo\?
Tabela 8.1 przedstawia kilka innych popularnych znakw specjalnych. Bardziej wyczerpujc list zawiera dokument Advanced Bash Scripting Guide, wymieniony w podrozdziale Odnoniki.
Tabela 8.1. Znaki specjalne w powoce bash
Znak
Znaczenie
Separator polece.
Katalog biecy.
..
Katalog nadrzdny.
(tylda) Katalog macierzysty uytkownika. Znak mieci si na klawiszu po lewej stronie klawisza
cyfry 1; uzyskasz do niego dostp, przytrzymujc klawisz Shift.
>
>>
Docza wyjcie skryptu do istniejcego pliku. Jeli plik nie istnieje, zostanie utworzony.
Potok. Pomaga czy w acuch polecenia i skrypty, przekierowujc wyjcie jednego polecenia
na wejcie nastpnego.
&
Wskazane polecenie ma zosta uruchomione w tle. Pozwala powrci do wiersza zachty powoki.
Uywajc znakw specjalnych, naley zawsze uwaa. Jak wida, niektre znaki specjalne maj rne znaczenia zalenie od kontekstu, skrypt moe zatem zachowywa si
niewaciwie, jeli znak nie zostanie uyty poprawnie. Niektre znaki mog by nawet
szkodliwe, wobec czego musimy upewni si, e uywamy waciwych.
Aby uy znaku specjalnego jako zwykego, naley poprzedzi go w skrypcie znakiem unikowym, ktrym w tym przypadku jest lewy ukonik (\). Na przykad, ponisze
polecenie wywietla wynik obliczenia kwoty w dolarach:
echo $((5153 + 654863))
158
159
Potokowanie danych
Wiele polece linuksowych mona uruchomi razem w jednym wierszu polecenia, aby
przeksztaci dane z jednej postaci w inn. czenie polece w ten sposb nazywane jest
potokowaniem lub prac potokow. Potok (ang. pipe) pobiera wyjcie jednego polecenia i wprowadza jako wejcie nastpnego. Ten proces mona powtarza niemal w nieskoczono.
W powoce do tworzenia potoku suy symbol pionowej poprzeczki (|). Uywany jest
w tej roli tak czsto, e zyska sobie potoczn nazw pipe. Zamy, e administrator
systemu chce sprawdzi, kto w danej chwili jest zalogowany. Poczenie kilku polece
potokowo, jak poniej, zwrci uporzdkowan, czyteln list:
who | cut -c1-8 | sort -u | pr -l1 -8 -w78 -t
159
160
w omiu kolumnach.
Jest to prosta technika, a dysponujc wystarczajcym dowiadczeniem, Czytelnik bdzie
mg robi naprawd zadziwiajce rzeczy za pomoc kilku polece i kilku potokw.
Przetwarzanie w tle
W niniejszej ksice czsto bd pojawia si polecenia zakoczone znakiem &, zwaszcza
w przypadku uruchamiania z powoki aplikacji graficznych. Czytelnik moe zastanawia si, do czego to suy. Symbol & wykorzystuje zdolno powoki do przetwarzania
informacji w tle i do jednoczesnego uruchamiania innych programw z tego samego
wiersza polece.
Zamy, e chcemy uruchomi z powoki monitor systemu GKrellM. Po wpisaniu gkrellm
w wierszu polece program oczywicie si uruchomi. Lecz gdy spojrzymy nastpnie
na okno powoki, zobaczymy martwy kursor, ktry nie pozwoli wprowadzi adnego
innego polecenia, przynajmniej do chwili wyjcia z programu GKrellM.
Po zakoczeniu pracy GKrellM (przez kliknicie prawym przyciskiem myszy dowolnego
miejsca w oknie programu i wybraniu Quit z menu) wiersz zachty powrci do okna powoki i bdzie w nim mona ponownie wpisywa polecenia. Nacinicie klawisza strzaki
w gr, aby przywoa ostatnio wydane polecenie z historii polece, wywietli ponownie gkrellm w wierszu zachty. Tym razem moemy doda na koniec wiersza znak &.
Po naciniciu Enter program GKrellM uruchomi si jak poprzednio, lecz tym razem
powoka bash zwrci numer procesu aplikacji i powrci do wiersza zachty, w ktrym
bdzie mona wpisywa kolejne polecenia.
160
161
Czytelnikom dopiero zaczynajcym pisa skrypty powoki radz nie przesadza. To troch
jak nowy program wicze. Nie naley prbowa zrobi zbyt duo za jednym razem,
lecz skoncentrowa si na automatyzacji uywanego ju procesu (albo takiego, ktry wydawa si zbyt skomplikowany, by go wykonywa).
Najwaniejsze przy pisaniu skryptu jest to, by nigdy nie uywa procesora tekstu! Tworzymy plik tekstowy, i standardowy edytor tekstu w zupenoci wystarczy. Pomijajc ju
dodawane do tekstu formatowanie, procesory tekstu stosuj automatyczne zawijanie wierszy, ktre moe z atwoci namiesza w skrypcie. Radz przyjrze si edytorom przedstawionym w rozdziale 5. i poeksperymentowa z nimi, by wybra najlepszy dla siebie.
SUSE Linux automatycznie tworzy w katalogu macierzystym uytkownika podkatalog /bin.
Jest to dobre miejsce do przechowywania skryptw, poniewa znajduje si na pierwszym
miejscu w ciece wyszukiwania.
+='pushd .'
-='popd .'
..='cd ..'
...='cd ../..'
beep='echo -en "\007"'
dir='ls -'
l='ls -alF'
la='ls -la'
ll='ls -l'
ls='/bin/ls $LS_OPTIONS'
ls-l='ls -l'
mc='. /usr/share/mc/bin/mc-wrapper.sh'
md='mkdir -p'
o='less'
rd='rmdir'
rehash='hash -r'
unmount='echo "Error: Try the command: umount" 1>&2; false'
which='type -p'
you='su - -c "/sbin/yast2 online_update"'
161
162
Zapisz plik i wyjd z edytora. Wyloguj si i ponownie zaloguj, a nastpnie otwrz okno
powoki i wpisz alias. Zdefiniowane aliasy powinny teraz znale si na licie.
162
163
163
164
Parametry pozycyjne
Do skryptu powoki mona przekaza opcje z wiersza polece lub innego skryptu. Opcje
te nosz nazw parametrw pozycyjnych i maj specjalne nazwy, zdefiniowane przez
system. Pisanie zaawansowanych skryptw powoki wymaga umiejtnoci korzystania
z parametrw pozycyjnych i pobierania wartoci z wiersza polecenia.
Nazwami parametrw pozycyjnych s w istocie liczby; pierwszy parametr ma nazw 1,
nastpny 2, trzeci 3 i tak dalej. Dostp do nich odbywa si przez $1, $2 itd. Nie mona
wywoa 2 przed 1, lecz mona pomin 3, aby uzyska wynik, jeli 1 i 2 s obecne.
Zamy, e mamy skrypt powoki wymagajcy dwch parametrw: imienia i nazwiska.
Jeli podamy tylko imi (1), to w porzdku. Jeli tylko nazwisko (2), otrzymamy bd.
Poniszy skrypt o nazwie myname1 pobiera jeden parametr (imi) i wywietla na ekranie:
#!/bin/sh
# skrypt wywietlajcy imi
if [ $# -eq 0 ]
then
echo "Imi nie zostao podane"
else
echo "Podane imi to "$1
fi
zwrci wynik:
Imi nie zostao podane
Ponisze polecenie:
bash myname1 Mike
Czytelnik moe zastanawia si, co w tym skrypcie oznacza kod $#. Jest to zmienna
wbudowana, udostpniana przez jdro dla powoki i zwracajca liczb parametrw pozycyjnych, przekazanych do programu powoki. Wicej o tych wbudowanych zmiennych
powiemy poniej.
164
165
165
166
Powyszy skrypt tworzy zmienn $log_report, w ktrej zapisuje nazw pliku generowanego raportu. Sowo kluczowe $1 i pierwszy argument w wierszu polece su do
zbudowania nazwy pliku wraz z biec dat. Nagwek raportu zawiera kilka wierszy
sformatowanego tekstu, nazw systemu (wzit z wyjcia polecenia uname), nazw hosta
i dat. Skrypt rejestruje pocztek wyszukiwania, a wszystkie dopasowane sowa kluczowe
z pliku dziennika zostaj dodane do raportu. Do raportu zostaje dodana stopka zawierajca
nazw i dat raportu, ktry nastpnie zostaje wysany do uytkownika root wiadomoci
e-mail z wyszukiwanym terminem zapisanym jako tytu wiadomoci, a plik $log_report
zostaje usunity.
Aby przetestowa skrypt, upewnij si, e w systemie uruchomiony jest demon syslogd.
Podaj sowo kluczowe i ciek do dziennika zdarze systemowych /var/log/messages,
na przykad:
greplog FAILED /var/log/messages
Jeli w systemie wystpiy jakie bdy logowania, uytkownik root powinien otrzyma
wiadomo e-mail. Jeeli usugi poczty elektronicznej zostay poprawnie skonfigurowane
(zobacz Konfiguracja konta pocztowego w SUSE Linux w rozdziale 13.), wiadomo
powinna dotrze do superuytkownika.
Zmienne wbudowane
Jdro Linuksa udostpnia powoce kilka zmiennych wbudowanych, ktrych wartoci uytkownik nie moe zmieni. Nale do nich:
$# liczba parametrw pozycyjnych przekazanych do powoki (tej zmiennej
166
167
Odnoniki
http://www.filibeto.org/sun/lib/development/shell/config_the_bash_shell.html
konfiguracja powoki bash.
http://www.justlinux.com/nhf/Shells/Basic_Console_Commands.html nauczenie
si tych polece pozwoli Czytelnikowi mwi, e zna bash wystarczajco dobrze.
167