5. Linux - powłoka

Transkrypt

5. Linux - powłoka
5. Linux - powłoka
5.1. Kilka słów o powłoce
Powłoka (shell) jest interpretatorem poleceń przeczytanych z klawiatury lub pliku - jest
czymś w rodzaju command.cnm w systemach windowsowych.
Każde polecenie wpisane z klawiatury zostaje zamienione przez powłokę na język
zrozumiały dla jądra systemu, które może odpowiednio zareagować na to polecenie.
Linuks posiada kilka powłok: bash, sh, csh, tcsh, ale najczęściej stosowanym jest bash,
więc na nim się skupimy.
5.2. Zmienne systemowe
Zmienne można podzielić na cztery grupy:
•
•
•
•
zmienne lokalne
zmienne globalne
zmienne specjalne
zmienne programowe
Zmienne lokalne określają konfigurację powłoki i są widoczne tylko dla shell'a, dla
którego zostały zdefiniowane.
Aby zobaczyć ustawienia zmiennych lokalnych możemy wydać polecenie:
set
Ważniejsze zmienne to:
BASH=/bin/bash - nazwa naszej powłoki
BASH_VERSION=1.14.7(1) - wersja naszej powłoki
COLUMNS=80 - liczba kolumn znaków na naszym ekranie
LINES=25 - liczba linii na ekranie
HOME=/home/student - nasz katalog domowy
LOGNAME=student - nasz login
OSTYPE=Linux - typ systemu
PATH=/usr/bin:/sbin:/bin:/usr/sbin - domyślna ścieżka dostępu
PS1=[\u@\h \W]\$ - ustawienie znaku zachęty
PWD=/home/student - nasz aktualny katalog roboczy
SHELL=/bin/bash - nazwa naszej powłoki
USERNAME=student - nazwa użytkownika, który jest aktualnie zalogowany w
systemie
EDITOR=vim - nazwa domyślnego edytora tekstu
HISTFILE=/home/student/.bash_history - plik zawierający historię poleceń
MAIL=/var/spool/mail/$USER - określa plik, do którego dopisywane są listy
przychodzące na nasze konto
Jeśli chcemy zobaczyć ustawienie pojedynczej zmiennej wydajemy polecenie:
echo $HOME
Systemy operacyjne - Linux - powłoka
1
Aby zdefiniować zmienną lokalną służy, należy wydać polecenie:
nazwa_zmiennej=nowa_wartość
np.:
EDITOR=mcedit
I już. Od tej pory w tym shellu możemy używać tej zmiennej, ale tylko w nim, bo taka
deklaracja jest deklaracją lokalną.
Zmienne globalne są to zmienne widoczne w każdym podshellu.
Aby przekopiować wartość lokalnej zmiennej pod globalną należy wydać polecenie:
export nazwa_zmiennej
np.:
export EDITOR
Można też ją od razu przypisać, np:
export EDITOR=mcedit
Polecenia te stosujemy w plikach konfiguracyjnych, np.: .bashrc w katalogu domowym.
Są one (zmienne globalne) wtedy widoczne dla każdego shell'a, który jest startowany. Jeśli
ustawimy zmienną globalną w danym procesie shell'a, to jest ona widoczna dla tego procesu
shell'a i dla wszystkich jego podprocesów, czyli procesów z niego wyprowadzonych
(polecenia wywołane z procesu tej powłoki).
Jeśli nie istnieje dla danego konta plik .bashrc, to należy go stworzyć, po czym umieścić
w nim odpowiednie instrukcje, jakie mają być wczytane i wykonane podczas startu powłoki.
Ponieważ zazwyczaj podczas startu powłoki wykonywany jest jedynie plik .bash_profile,
który znajduje się w katalogu domowym użytkownika wywołującego powłokę, to aby
również plik .bashrc był wykonany, muszą znajdować się w .bash_profile następujące linie:
if [-f ~/.bashrc ]; then
source ~/.bashrc
fi
powodują one wywołanie pliku .bashrc, pod warunkiem, że istnieje on w katalogu
domowym użytkownika. Jeśli plik .bash_profile nie istnieje, należy go utworzyć. Jeśli nie
zawiera on powyższych linii, należy je dopisać.
Zmienne specjalne są definiowane przez system i w przeciwieństwie do innych
zmiennych nie można zmieniać ich wartości.
Najczęściej zmienne te wykorzystywane w skryptach do sterowania programem.
Przykładowe zmienne specjalne to:
$# - liczba parametrów przekazanych do programu
Systemy operacyjne - Linux - powłoka
2
#? - kod zakończenia polecenia lub programu wywołanego z programu powłoki
$0 - pod zmienna tą kryje się nazwa uruchomionego programu
$1,$2 - kolejne parametry programu
Zmienne programowe to zmienne definiowane przez użytkownika w skryptach
powłoki.
Definicja zmiennej programowej wygląda następująco:
nazwa_zmiennej=wartość
np.:
x=123
imie="Darek"
Pod zmienna programową można podstawić również wynik dowolnego polecenia, np.:
sciezka=`pwd`
Do zmiennej odwołujemy się poprzez podanie jej nazwy poprzedzonej znakiem $, np.:
echo $imie
5.3. 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 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 polecenie:
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łowiu. 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
Systemy operacyjne - Linux - powłoka
3
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.
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
5.4. Historia poleceń
Powłoka bash posiada zdolność przywoływania wcześniej wydawanych poleceń przez
użycie klawiszy kursora. Bash rejestruje je w pliku .bash_history , który znajduje się w
katalogu domowym użytkownika.
Historię poleceń określają dwa parametry:
HISTFILE - wskazuje na plik zawierający wywołane wcześniej polecenia
HISTSIZE - określa ile ostatnio wydanych poleceń ma być przechowywanych w pliku
historii
Aby obejrzeć listę ostatnio wydawanych poleceń bez otwierania powyższego pliku
należy skorzystać z polecenia history z parametrem określającym liczbę wierszy, które mają
być wyświetlone:
history 10
pokaże 10 ostatnio użytych poleceń.
Aby powtórzyć wcześniej wydane polecenie można użyć następującej komendy:
!3
gdzie 3 jest trzecią komendą z listy wyświetlonej poleceniem history .
5.5. Aliasy
Bash daje nam ciekawy mechanizm aliasów umożliwiających zastępowanie złożonych
poleceń krótszymi, łatwiejszymi do zapamiętania nazwami.
Aliasy tworzymy korzystając z polecenia alias, którego składnia jest następująca:
alias 'nasza_definicja'='polecenie'
Systemy operacyjne - Linux - powłoka
4
np.:
alias 'p'='ps -aux'
Teraz poprzez wydanie polecenia p otrzymamy listę wszystkich procesów.
Zdefiniowane aliasy możemy zlikwidować poleceniem unalias:
unalias p
Zdefiniowane w ten sposób aliasy "żyją" tylko do czasu zamknięcia przez nas sesji
shella. Aby były zdefiniowane na stałe, należy je wpisać do pliku .bashrc w katalogu
domowym.
5.6. Dowiązania stałe i symboliczne
Mechanizm dowiązań (linków) ułatwia dostęp do plików ukrytych głęboko w strukturze
katalogów lub umożliwia zgromadzenie potrzebnych plików w jednym katalogu.
Linki dzielimy na stałe i symboliczne.
Dowiązania stałe charakteryzują się tym, że posiadają ten sam i-węzeł co wskazywany
plik. W praktyce oznacza to, że dowiązanie takie zawiera pełną informację o pliku i w razie
skasowania oryginalnego pliku dowiązanie nadal będzie zawierać informacje o tym pliku
(jego zawartość).
Dowiązanie stałe tworzymy poleceniem:
ln plik_lub_katalog link
Dowiązania symboliczne służą jedynie do wskazywania na jakiś plik. Umożliwiają one
prace na danym pliku poprzez jego dowiązanie. W przypadku skasowania pliku, do którego
prowadzi link symboliczny niemożliwe staje się korzystanie z tego dowiązania (nie zawiera
on wówczas żadnych informacji).
Dowiązania symboliczne tworzymy poleceniem:
ln -s plik_lub_katalog link
5.7. Przekierowania wejścia i wyjścia
Przekierowania zazwyczaj wykorzystywane są do odczytania danych z jakiegoś
urządzenia lub pliku albo do wysłania danych na urządzenie lub plik.
Do przekierowań danych służą specjalne znaki:
< dane na wejście
> dane z wyjścia
Najprostszym przykładem przekierowania może być wyświetlenie zawartości jakiegoś
pliku poleceniem:
cat < plik.txt
Aby utworzyć nowy plik i wpisać do niego dowolny tekst możemy użyć przekierowania
danych z wyjścia:
Systemy operacyjne - Linux - powłoka
5
cat > plik.txt
Polecenie to utworzy nam plik plik.txt i umieści w nim tekst wpisany z klawiatury.
Jeśli będziemy chcieli ponownie dodać jakiś tekst do tego pliku należy użyć polecenia:
cat >> plik.txt
Spowoduje to dodanie następnych wierszy z informacją do pliku (bez kasowania
poprzedniej zawartości).
Innym przykładem przekierowań może być zapisanie do pliku zawartości jakiegoś
katalogu:
ls -la > plik.txt
5.8. Łączenie poleceń za pomocą potoków
Połączenie poleceń za pomocą potoków oznacza wysłanie wyniku z jednego polecenia
na wejście drugiego polecenia. Potoki są bardzo często wykorzystywane podczas pisania
wszelakich skryptów.
Polecenie :
ls -la | less
łączy ze sobą dwa polecenia :
ls -la - listuje zawartość katalogu
less - umożliwia przeglądanie dużych plików za pomocą klawiszy kursora.
Wynikiem tego połączenia jest możliwość obejrzenia zawartości dużego katalogu za
pomocą klawiszy kursora.
5.9. Metaznaki - powtórzonko :-)
Meta-znaki to pewien zbiór znaków pełniący specjalne funkcje w powłoce Linuksa.
Znaczenia meta-znaków :
* - oznacza dowolną sekwencję, dowolną ilość znaków
? - oznacza dowolny pojedynczy znak
[qwA1] - oznacza dowolny pojedynczy znak, wymieniony w nawiasach
[a-z] - oznacza dowolną małą literę
[A-G] - oznacza dowolną dużą literę od A do G
[a-zA-Z0-9] - oznacza dowolną małą lub dużą literę i dowolną cyfrę
Meta-znaki najczęściej wykorzystywane są do listowania zawartości katalogów :
ls * - wyświetla wszystkie pliki w katalogu z wyjątkiem zaczynających się od '.' kropki
(są to pliki ukryte)
ls *.* - wyświetla wszystkie pliki zawierające w nazwie '.'
Systemy operacyjne - Linux - powłoka
6
ls [A-B]* - wyświetla wszystkie pliki zaczynające się od A lub B
ls ??1 - wyświetla pliki, których nazwa składa się z dwóch dowolnych liter i jedynki na
końcu.
5.10. Polecenie echo i znaki cytowania
Do wyświetlenia tekstu lub wartości zmiennych na ekranie służy polecenie echo.
Polecenie to może być stosowane z kilkoma opcjami :
-n - nie wyświetlaj nic i przejdź do następnej linii
-e - włącz interpretację następujących komend występujących po \ :
\a - dzwonek
\b - kasuj ostatni znak
\c - przechodź do następnej linii
\n - nowa linia
\t - tabulator
\\ - znak \
Powłoka Bash odróżnia i inaczej interpretuje trzy rodzaje znaków cytowania :
• cudzysłów " " - umożliwia wyświetlenie tekstu, zmiennej ($), zacytowanie
polecenia (``) lub użycie znaków specjalnych występujących po \
• apostrof ' ' - wszystko to co zawarte jest między apostrofami interpretowane
jest jako zwykły tekst
• odwrotny apostrof ` ` - przydaje się w sytuacji gdy chcemy podstawić lub
zacytować jakieś polecenie
5.11. Zmiana powłoki logowania
Powłokę, którą system przydziela nam po zalogowaniu ustawia administrator podczas
procesu tworzenia nowego użytkownika.
Jako zwykły użytkownik mamy jednak możliwość zmiany przydzielonej nam powłoki
dzięki poleceniu:
chsh -s nowa_powłoka
Należy jednak pamiętać, że powłoka, którą chcemy wybrać musi być wyszczególniona
w pliku /etc/shells. Aby szybko go wyświetlić, wystarczy wydać:
chsh -l
5.12. Zarządzanie zadaniami
Każdy program uruchomiony z konsoli może zostać przeniesiony w tło, co oznacza, że
będzie on widoczny jedynie jako działający proces zwalniając wiersz poleceń i umożliwiając
dalszą pracę na konsoli.
Aby uruchomić jakiś program lub polecenie w tle należy skorzystać ze znaku & i
umieścić go na końcu nazwy programy lub polecenia:
ps -aux > procesy &
Systemy operacyjne - Linux - powłoka
7
Istnieje również możliwość przeniesienia w tło już uruchomionego zadania, poprzez
zatrzymanie go:
[Ctrl]+[z]
i przeniesienie w tło poleceniem :
bg numer_zadania
gdzie:
numer_zadania to liczba pojawiająca się w nawiasie kwadratowym przy nazwie
zatrzymanego programu.
Aby wyświetlić listę z uruchomionymi w tle lub zatrzymanymi zadaniami należy użyć
polecenia:
jobs
Każde zadanie przeniesione w tło możemy z powrotem umieścić na pierwszym planie
używając polecenia:
fg numer_zadania
5.13. Pliki związane z powłoką
Przed uruchomieniem powłoki system sprawdza pliki konfiguracyjne shell'a z katalogu
/etc/ i z katalogu macierzystego użytkownika.
Główne pliki konfiguracyjne z katalogu /etc/ :
bashrc , profile - podstawowe ustawienia powłoki
inputrc - konfiguracja edytora poleceń basha
Pliki konfiguracyjne z katalogu użytkownika :
.bash_profile , .bashrc - wykonywane podczas uruchamiania powłoki
.bash_logout - wykonywane podczas zamykania powłoki
Zadania
1. Utwórz zmienną lokalną o nazwie IMIE, która będzie przechowywała Twoje imię.
2. Przekonaj się, że nie jest ona widoczna w innym procesie konsoli.
3. Skonfiguruj pliki domowe tak, by przy starcie shell'a wczytywana była zmienna
globalna IMIE, która będzie przechowywała Twoje imię.
4. Zmień znak zachęty na następujący format:
[data,czas-identyfikator użytkownika,nazwa bieżącego katalogu]nazwa shell'a>
5. Przejrzyj plik .bash_history
6. Wyświetl 20 ostatnio wydanych komend i wykonaj jeszcze raz, tą która Ci się
najbardziej spodoba.
7. Dodaj alias (na stałe) tak aby pod znakiem l ukryte było polecenie 'ls -la'
8. Przekonaj się, że alias działa nawet po ponownym zalogowaniu się.
Systemy operacyjne - Linux - powłoka
8
9. Stwórz alias o nazwie p na czas życia procesu shell'a, pod którym będzie kryło się
polecenie pwd.
10. Wywołaj p, po czym usuń alias.
11. W katalogu domowym stwórz katalog Wazne, a w nim kolejny katalog o nazwie
Bardzo. W Bardzo stwórz plik o nazwie najwazniejsze i treści "Tu są bardzo ważne
informacje".
12. Do pliku najwazniejsze stwórz link stały w katalogu domowym o nazwie skrot1 i
link symboliczny o nazwie skrot2. Wyświetl ich zawartość.
13. Skasuj plik najwazniejsze. Teraz spróbuj ponownie wyświetlić zawartość linków
skrot1 i skrot2.
14. Stwórz plik plik.moj i napisz w nim "Hej! To ja!"
15. Dopisz do niego "Papapapa!"
16. Przekonaj się, że w pliku plik.moj jest cały tekst:
"Hej! To ja!
Papapapa!"
17. Posortuj zawartość katalogu /etc (sort - polecenie do sortowania). Ma być
możliwość poruszania się strzałkami (góra - dół) po wyniku polecenia.
18. Zmień powłokę logowania na jedną z możliwych, ale inną od bash.
19. Wykonaj polecenie links w tle. Przekonaj się, że jest uruchomione w tle. Przenieś je
na pierwszy plan. Po czym znów uśpij.
Systemy operacyjne - Linux - powłoka
9

Podobne dokumenty