BASH Bourne Again SHell




BASH - Bourne Again SHell











 






 
BASH - Bourne Again
SHell
Interpreter poleceń
powłoki BASH
Interpreter poleceń
powłoki jest to interfejs pomiędzy użytkownikiem, a jądrem systemu.
Dzięki niemu, jeśli wydajemy za pomocą klawiatury polecenie powłoka
zamienia dane na język zrozumiały przez jądro systemu, który wie, że
ma np. uruchomić bądź zatrzymać program. Jedną z takich powłok jest
BASH stworzony przez Briana Foxa i Cheta Rameya i udostępniony na
zasadach licencji GNU. Jest on jedną z lepszych powłok i w wielu
systemach linuxowych wykorzystywany jako domyślna, przez co zapewne
i Ty jej używasz :-) Zawiera 48 wbudowanych poleceń (biult-in) oraz
12 funkcji wywołania. Jest w pełni kompatybilny z powłoką sh oraz
zawiera wiele ciekawych rozwiązań przejętych od powłok Korn i C (ksh
i csh).
Dokańczanie poleceń

Dokańczanie poleceń
jest bardzo wygodną i przyspieszającą pracę opcją powłoki Bash.
Dzięki niej nie musimy już wpisywać pełnej nazwy programu (ścieżki
do katalogu, pliku itp) lub znać jego dokładnej nazwy. Wystarczy, że
wpiszemy jego pierwszą literkę i wciśniemy klawisz TAB. Wtedy
Linux spróbuje wyszukać wszystkie dostępne programy, katalogi,
pliki, których pierwsza litera nazwy odpowiada wpisanej przez nas.
Jeśli więcej programów zaczyna się na tę sam znak powłoka wylistuje
nam ich nazwy i poinformuje nas za pomocą brzęczyka, że należy podać
dodatkowe informacje. Dzieje się to zazwyczaj, gdy podamy tylko
jedną, bądź dwie pierwsze litery, ale już np wpisanie mut i
wciśnięcie TAB, najprawdopodobniej spowoduje poprawne dokończenie
nazwy programu na mutt! Jeśli wpiszemy nazwę z błędem np. mot, które
nie ma odniesienia w rzeczywistości i naciśniemy TAB interpreter
poinformuje nas o błędzie wydając z brzęczyka systemowego
charakterystyczny dzwięk. Jest to dla nas sygnał, że coś jest nie w
porządku i należy poprawić.
Historia poleceń

Bash zapamiętuje
wydane przez użytkownika polecenia. Dzięki temu za pomocą klawiszy
kursora (góra - dół), możemy szybko przywołać polecenie, które już
wcześniej wydaliśmy. Jest to szczególnie przydatne gdy w bardzo
skomplikowanym poleceniu zmieniamy np. tylko nazwę pliku, na którym
ma zostać wykonane, a cała składnia polecenia nie ulega
modyfikacjom. Lista wydanych przez nas poleceń jest ładowana z pliku
historii, który domyślnie nosi nazwę .bash_history. Parametry
nazwy pliku historii oraz ilości przechowywanych w nim ostatnio
wydanych poleceń ustalają zmienne HISTFILE oraz
HISTSIZE, ale o zmiennych powłoki Bash trochę później. W tym
miejscu warto zaznaczyć, że w wielu dystrybucjach Linuxa zmienna
HISTSIZE ma wartość 1000 co powoduje, że w pliku .bash_history
zapisywanych jest 1000 wydanych ostatnio poleceń. Aby obejrzeć na
ekranie dostępne z historii polecenia wystarczy użyć polecenia:





history liczba.poleceń

Tak więc, jeśli
chcemy obejrzeć 10 ostatnio wydanych poleceń wpiszmy history 10.

Aliasy

Aliasy są to skróty,
które przyspieszają naszą pracę z powłoką. Jeśli np. codziennie
uaktualniamy naszą stronę główną, której plik startowy to
/home/artur/linux/index.html to zamiast ciągle wpisywać mcedit
/home/artur/linux/index.html możemy utworzyć do niego alias po
wywołaniu którego otworzony zostanie do edycji ten właśnie plik.
Nasz alias bedzie nosił nazwę linux i właśnie to słowo będziemy
musieli wpisać, aby wywołać do edycji plik index.html.




alias linux='mcedit
/home/artur/linux/index.html'

Warto pamiętać, że
utworzone z linii poleceń aliasy stają się nieaktualne po
wylogowaniu się z powłoki. Aby były dostępne po każdym zalogowaniu
się, należy je dopisać do jednego z plików konfiguracyjnych, ale o
tym w dziale Dostosowywanie powłoki.
Jeśli dany alias nie
jest nam już potrzebny możemy usunąć go korzystając z polecenia
unalias:




unalias linux

Aby wyświetlić listę
wszystkich dostępnych aliasów wystarczy wydać polecenie alias, bez
jakichkolwiek parametrów.
Mój skonfigurowany
przez ludzi z Mandrake-Soft zbiór aliasów wygląda mniej więcej tak:





alias cd..='cd ..'# Gdybym przez
pomyłkę? wpisał cd.. (tak chyba jest to rozwiązane w
dos`ie,alias cp='cp -i'alias mv='mv -i'alias
rm='rm -i'# Gdy wydaje jedno z powyższych poleceń, zostaje
ono# zamienione na polecenie z argumentem -i
(interactive),# dzięki, któremu polecenie pyta się czy
nadpisywać istniejące# pliki, bądź je usuwać. Służy to
tylko i wyłącznie# poprawieniu
bezpieczeństwa.alias rd='rmdir'alias
md='mkdir'# Te aliasy zostały stworzone dla ludzi, którzy
jeszcze # niedawno używali systemu DOS i są
przyzwyczajeni# do poleceń tamtej powłoki.alias
ls='ls --color=auto -F'alias ll='ls -l'alias lsd='ls
-d */'alias la='ls -A -k'# W tym wypadku aliasy
zostały stworzone, aby zbędne stało# się operowanie na
parametrach polecenia ls. I tak wydanie# polecenia ls
spowoduje, że dane zostaną wyświetlone w kolorkach,# oraz
dodany zostanie do każdego pliku znak oznaczający jego
typ.# Po wpisaniu ll zostanie wywołane polecenie ls z
parametrem l,# który wyświeli nam listę plików formacie
zawierającym o wiele# wiecej informacji. Pozostałe
parametry musicie poszukać w# dokumentacji ls - man ls, bo
artykuł ten nie ma zamiaru omawiać# poleceń, ani ich
składni.alias df='df -h -x supermount'alias du='du
-h'# Aliasy, powodujące, że po wydaniu poleceń df i du,
programy# te będą wykonywane z odpowiednimi
parametrami.alias l='ls'alias p='cd -'alias
s='cd ..'alias d='ls'# Inne aliasy, skracające
wpisywanie :-)

Symbole wieloznaczne

Powłoka bash
obsługuje trzy rodzaje symboli wieloznaczych. Są to: *, które
zastępuje dowolny znak lub ich ciąg, ? - zastępuje dowolny
znak (tylko jeden!) oraz [...], które zastępuje dowolny znak
występujacy pomiędzy nawisami. Symbole wieloznaczne wykorzystywane
są najczęściej do wykonywania tego samego polecenia na różnych
plikach, bądź katalogach. Jeśli chcemy skopiować wszystkie pliki
zawarte w katalogu linux do katalogu linux-kopia wystarczy wydać
polecenie:




cp linux/* linux-kopia/

Następny symbol
wieloznaczny (?) zastępuje pojedynczy znak. Wydając polecenie:





cp plik?.txt linux/

spowodujemy, że
zostaną skopiowane wszystkie pliki, których nazwa brzmi plik[jakiś
symbol], np. plik5, pliks.
Aby określić
szczegółowo jakie pliki mają być kopiowane użyjemy trzecieko symbolu
wieloznacznego [...]. Przypuśćmy, że w katalogu mamy pliki: plik1,
plik2, plik3 i plik4. Chcemy skopiować tylko pliki z numerami 1,2 i
3. Wydajemy zatem polecenie:




cp plik[123].txt linux/lub
cp plik[1-3].txt linux/

Przekierowanie
wejścia i wyjścia
Przekierowanie
wejścia służy do podania złożonych danych, które muszą być
przekazane do programu. Zazwyczaj wykorzystywane jest to
odczytywania danych z plików. Oto przykład:




sort < pliki_mp3# program sort
ustawi w kolejności listę plików, których nazwy# zapisane
zostały w pliki_mp3

Przekierowanie
wyjścia jest częściej używane. Dzięki niemu będziemy mogli przesłać
wyniki pochodzące od programu do pliku lub urządzenia. Potrzebne nam
to będzie gdy zechcemy zapisać te wyniki do późniejszej analizy itp.
Będzie je można oczywiście odczytać zwykłym edytorem tekstu. Oto dwa
najprostsze przykłady przedstawiające działanie przekierowania
wyjścia:




ls > lista# Spowoduje to
zapisanie listy plików i katalogów w bieżącym# katalogu do
pliku lista.ps -A > procesy# Spowoduje to
zapisanie listy procesów do pliku procesy
7
UWAGA: Przy
korzystaniu z przekierowań musimy być szczególnie uważni, gdyż w
przypadku skierowania wyjścia do pliku jego poprzednia zawartość
zostanie skasowana!
Istnieje też
możliwość dopisywania do orginalnego pliku. Wtedy jego przednia
zawartość zostanie zachowana oraz uzupełniona o nowe dane. Służą do
tego znaki: <<. A oto i przykład:




cat >> plikTo będzie
pierwsza linia.To będzie druga linia.CTRL+D#
Korzystamy z programu CAT, wpisujemy tekst i kończymy
jego# działanie wciskając CTRL+Dcat >>
plikTo będzie trzecia linia.To będzie czwarta
linia.CTRL+D# Dopisujemy do tego pliku jeszcze
dwie kolejne linie.

Nasz plik wygląda
teraz:To będzie pierwsza linia.To będzie druga
linia.To będzie trzecia linia.To będzie czwarta linia.

Potoki

Potoki (pipe) służą
do łączenia poleceń. Dzięki temu przyspieszymy naszą pracę oraz
zwiększymy możliwości prostych poleceń. Potoki wykorzystywane są
najczęściej w procesach przetwarzania danych np. gdy chcemy wyszukać
jakieś konkretne pliki bądź przeglądać logi systemowe, uruchomione
procesy itd. Zasada działania potoków polega na tym, że wyście
poprzedniego polecenia stanowi wejście następnego. Przykładowo
polecenie:




find /home/artur/Mp3 -name *.mp3 |
sort > moje_mp3

najpierw wyszuka
wszystkie pliki o rozszerzeniu .mp3 w katalogu /home/artur/Mp3,
następnie je posortuje (tutaj wykorzystanie potoku), a na końcu
wyjście programu sort zostanie skierowane do pliku moje_mp3, który
będziemy mogli potem odczytać zwykłym edytorem.
Zmienne

Zmienne służą do
określania konfiguracji powłoki i są one dostępne dla wszystkich
procesów potomnych. Wszystkie dostępne zmienne możemy wylistować
poleceniem:




printenv | more

Jeśli chcemy
wyeksportować jaką zmienną wydajemy polecenie według schematu:





export ZMIENNA=wartość.zmiennej


A oto i najbardziej
użyteczne zmienne powłoki:




HISTFILE - określa nazwę pliku
historii, [patrz: historia poleceń]HISTSIZE -
rozmiar historii, [patrz: znak zachęty]EDITOR -
określa domyślny edytor,PATH - ścieżka
przeszukiwania, [patrz: ścieżki przeszukiwania]PS1
- znak zachety pierwszego poziomu, [patrz: znak
zachęty]PS2 - znak zachety drugiego poziomu,
[patrz: znak zachęty]PWD - określa nazwę bieżącego
katalogu,HOSTNAME - nazwa komputera,MAIL
- ścieżka gdzie przychodzą dla nas listy

Dla przykłady, żeby
ustawić domyślny edytor z vi na mcedit wydaj polecenie:




export EDITOR=mcedit

Pamiętaj, że
wszystkie zmienne tracą ważność po wylogowaniu się! Aby były
dostępne za każdym razem musimy je dodać do plików konfiguracyjnych
bash`a, ale o tym za chwilę.
Znak zachęty

Znak zachęty to
tekst, który informuje użytkownika, że system czeka na wprowadzenie
przez niego danych. W powłoce bash istnieją dwa poziomy znaku
zachęty - pierwszy, który otrzymamy zaraz po zalogowaniu informuje
nas, że system czeka na wprowadzenie polecenia. Drugi poziom jest
wyświetlany gdy interpreter potrzebuje dodatkowych danych, które
musimy wprowadzić. Jest on przechowywany w zmiennej PS2 [patrz:
zmienne powłoki] i standardowo ma postać ">". Można go
zmienić, ale takie rozwiązanie jest wygodne, więc zajmiemy się tylko
konfiguracją znaku zachęty pierwszego poziomu, który opisany jest w
zmiennej PS1. Jeśli wydamy polcenie:




export PS1="To mój komputer"


wtedy nasz znak
zachęty będzie wyglądał: To mój komputer. Nie jest to jednak
rozwiązanie ani wygodne, ani estetyczne. Lepiej utworzyć znak
zachęty przedstawiający dynamicznie zmieniające się dane jak na
przykład czas, bieżący katalog, numer aktualnego polecenia itp.

Zerknijmy na
standardową zmienną PS1. U mnie ma ona postać: PS1="[\u@\h \W]\\$
". Przyjrzyjmy się bliżej temu co zawarte jest w cudzysłowi.
Pierwszy znak [ - jest znakiem statycznym, dzięki niemu dane
przedstawione są w estetycznej formie, kod \u wyświetla
identyfikator użytkownika, @ to następny znak statyczny,
\h pokazuje nazwę komputera, a \W wyświetla podstawową
nazwę katalogu. Następnie znak ] zamyka nawias, a po nim
następuje kod \$, który wyświetla znak # gdy jesteśmy
zalogowani jako root, lub $ gdy jako zwykły user. Spacje są spacjami
wyświetlanymi na ekranie.
A teraz jak wygląda
zapis PS1="[\u@\h \W]\\$ " po przetworzeniu: [root@soho
/root]# lub [artur@soho /artur]$.
Oto lista kodów
specjalnych, które mogą zostać użyte do konfiguracji znaku zachęty:





\! - wyświetla numer polecenia
historii,\# - wyświetla numer aktualnego polecenia,\$
- wyświetla # dla root`a i $ dla zwykłego użytkownika\\ -
wyświetla znak \\d - wyświetla datę\t - wyświetla
czas\h - wyświetla nazwę komputera\n - przechodzi do
nowego wiersza\nnn - wyświetla znak, który odpowiada
wartości ósemkowej nnn\s - wyświetla nazwę powłoki\u -
wyświetla login użytkownika\W - wyświetla podstawową nazwę
bieżącego katalogu\w - wyświetla nazwę bieżącego katalogu


Ścieżki
przeszukiwania
Ścieżki
przeszukiwania są określone zmienną PATH i służą do wyszukania w
określonej lokalizacji programu bądź polecenia. Dzięki tym ścieżką
zamiast wpisywać /usr/bin/mutt by uruchomić program, wystarczy podać
mutt i klient pocztowy zostanie uruchomiony. Oczywiście w zmiennej
PATH musi być podana ścieżka /usr/bin. Aby zobaczyć w jakich
lokalizacjach Twój Linux szuka programów wydaj polecenie printenv i
poszukaj zmiennej PATH. Poszczególne ścieżki oddzielone są
dwukropkiem.
Zarządzanie zadaniami

Powłoka Bash oferuje
możliwość uruchamiania programów w tle. Jest to przydatne wtedy gdy
mamy do dyspozycji tylko jedną konsolę i wtedy program, którego
wykonanie musi chwilę potrwać (np. polecenie find) zajmuję nam nasze
"stanowisko pracy". Przykładowo wydajmy polecenie:




find /usr -name kde* > pliki_z_kde
&

Program find uruchomi
się w tle, a my na ekranie otrzymamy numer przypisanego mu procesu.
Find wyszuka wszystkie pliki z /usr, których nazwa zaczyna się kde i
zapisze je do pliku pliki_z_kde.
Można też wysłać
działający program w tło używając kombinacji klawiszy CTRL+Z, która
spowoduje, że program zostanie zatrzymany, a następnie uruchomimy go
w tle wpisując bgWydajemy polecenie:




find /usr -name kde* > pliki_z_kde


i wciskamy CTRL+Z.
Następnie wpisujemy bg. Efekt ten sam.
Aby ponownie
przywrócić program na pierwszy plan skorzystajmy z polecenia fg
[numer zadania]. Ponieważ dowolnie możemy korzystać z bg i fg
system musi wiedzieć, na którym procesie ma operować. Jeśli
pamiętamy kolejność uruchamiania programów, możemy z głowy wpisać
np. fg 2, lub jeśli nie pamiętamy, zapodajemy polecenie jobs.
Zostanie wyświetlona lista o wszystkich działających bądź
zatrzymanych procesach wraz z ich numerem, którego potrzebowaliśmy.

Konfiguracja powłoki

Do tej pory wszelkie
ustawienia, których dokonywaliśmy na powłoce stawały się nieaktualne
po wylogowaniu. Można jednak ustawić je w plikach konfiguracyjnych
tak by były odczytywane podczas każdego uruchamiania powłoki
(logowania). W przypadku powłoki bash zmienne można umieścić
(zapewne są już tam umieszczone) w plikach /etc/profile, gdy
jesteśmy administratorem lub w katalogu użytkownika w pliku o nazwie
.profile lub .bash_profile. Właśnie w nich dodajemy aliasy, zmienne,
ścieżki itp.
UWAGA:
Modyfikowanie plików z katalogu /etc takich jak /etc/profile może
doprowadzić do tego, że nie będziemy mogli uruchomić powłoki,
dlatego bezpieczniej jest testować nowe konfiguracje jako zwykły
użytkownik i zapisywać je do domowych plików konfiguracyjnych!












2k Artur Pęczak
arturoza@send.pl

14.04.2000
15:00


 


Wyszukiwarka