Systemy Operacyjne - Lab.¶
Instruktor: dr hab. inż. Paweł T. Wojciechowski, prof. PP
Strona na e-kursach: https://ekursy.put.poznan.pl/course/view.php?id=37793
Konsultacje: przez e-mail
Celem tego kursu lab. jest wprowadzenie do systemu operacyjnego Unix, na przykładzie Linux, popularnej open source’owej wersji tego systemu. Materiał kursu obejmuje podstawowe polecenia języka Bash (“Bourne-Again SHell”), operujące na plikach, katalogach, i procesach. Wprowadzone zostaną też elementy programowania systemowego w języku Bash, oraz - głównie w następnym semestrze - w języku C.
Poniżej lista tematów i odnośniki do ćwiczeń.
Data |
Temat zajęć |
Ćwiczenia |
---|---|---|
28.02 |
Zagadnienia organizacyjne. |
|
6.03 |
||
13.03 |
||
20.03 |
||
27.03 |
||
3.04 |
||
10.04 |
||
17.04 |
||
24.04 |
||
8.05 |
||
15.05 |
||
22.04 |
||
29.05 |
||
5.06 |
notes |
|
12.06 |
Kolokwium |
Poniżej kilka przydatnych odnośników:
-
Krótki tutorial dla początkujących użytkowników Unixa (stary, ale wciąż dość aktualny).
-
Kompletny opis języka Bash.
Introduction to Bash scripting
Wstęp do programowania skryptów w języku Bash: “The guide is suitable for anyone working as a developer, system administrator, or a DevOps engineer and wants to learn the basics of Bash scripting.”
-
Podręcznik do openSUSE, tj. dystrybucji systemu operacyjnego Linux dostępnej w naszych laboratoriach. Przydatne rozdziały:
-
Wpisz linię poleceń w Bash, aby zobaczyć tekst pomocy, który pasuje do każdego argumentu.
-
Jeśli wciąż nie masz Unix-a na własnym komputerze..
Terminal i pomoc systemowa¶
- Tryby pracy
Ctr-Alt-F<i> przejście do trybu tekstowego (terminala)
Alt-F7 powrót do trybu graficznego
Alt-F<i> przełączanie terminali
logout
lubexit
lub Ctr-D wyjście z terminala- tab
uzupełnia litery polecenia Bash
- ↑, ↓
wybór wcześniejszych poleceń
- Składnia poleceń języka Bash
komenda OPCJE ARGUMENTY
, gdzie OPCJE i ARGMENTY mogą być opcjonalne. Opcje specyfikuje się używając myślnika, np.-a
lub--all
. Opcje można łączyć, np.-a -b -c
lub w skrócie-abc
- uname
wyświetla informacje o systemie, np.
undame -a
wyświetla wszystkie informacje- who
pokazuje kto jest zalogowany
who am i
wypisuje efektywny identyfikator użytkownika, który uruchomił komendę.- id
wyświetla rzeczywiste i efektywne identyfikatory użytkownika i grupy
- finger
user information lookup program
- man
- pomoc systemowa podzielona na sekcje, np.
man ls
wypisuje opis polecenials
w sekcji 1,man 3 sleep
wypisuje opissleep
w sekcji 3. Pliki wyświetlane są programemless
. Dostępne sekcje: - 1 - Programy wykonywalne lub polecenia powłoki2 - Wywołania systemowe (funkcje dostarczane przez jądro systemu)3 - Wywołania biblioteczne (funkcje w bibliotekach programów)4 - Pliki specjalne (które zazwyczaj można znaleźć w
/dev
)5 - Formaty plików i konwencje, np./etc/passwd
6 - Gry7 - Różnorodne (łącznie z pakietami makr i konwencjami)8 - Polecenia do administracji systemem (zazwyczaj tylko dla administratora)9 - Wywołania jądra [Niestandardowa]
man nr_sekcji intro
podaje więcej informacji o danej sekcjiman -t komenda
formatuje opis komendy w Postscript- pomoc systemowa podzielona na sekcje, np.
- info
alternatywna pomoc systemowa
- whatis
wyświetla jednolinijkowe opisy stron podręcznika systemowego
- whereis
znajduje pliki binarne, źródłowe i strony podręcznika dla danego polecenia
- apropos
przeszukuje nazwy i opisy stron podręcznika ekranowego
- echo
wyświetla wiersz tekstu
- more
filtrowa przeglądarka plików, np.
more plik
,more +/łańcuch plik
wyświetli plik od wiersza ze znalezionym łańcuchem- less
program podobny do
more
, ale mający o wiele więcej funkcji. Nawigowanie i wyszukiwanie:- nawigacja:
- j - w dół o linię, k - w górę o linię, f lub Space - okno niżej (forward), b - okno wyżej (backward), d - pół okna niżej (down), u - pół okna wyżej (up)g - idź do 1-ej linii (goto), G - idź do ostatniej linii, ng - idź do n-tej linii
- wyszukiwanie:
/wzór
- znajdź wystąpienie wyrażenia regularnego,?wzór
- j.w. do tyłu, n - powtórz ostatnie wyszukiwanie (next), N - j.w. do tyłu- inne:
- h - pomoc (help)q - wyjście z programu (quit)
Operacje na plikach i katalogach¶
Utwórz plik plik1 przy pomocy edytora emacs:
emacs plik1
Ctrl-x Ctrl-s zapisuje plik
Ctrl-x Ctrl-c wychodzi z edytora
Otwórz plik w edytorze:
emacs plik1
Wczytaj plik do edytora:
Ctrl-x Ctrl-f plik1
- man hier
wypisze opis systemowej hierarchii plików
W celu ustawienia polskiej wersji systemu należy zapisać do pliku .profile
:
LANG=pl_PL.UTF-8
export LANG
lub:
export LANG=pl_PL.UTF-8
lub w przypadku języka tcsh (nie omawianego na zajęciach):
setenv LANG pl_PL.UTF-8
- tree
wypisze zawartość katalogów w formacie drzewa, np.
tree /home/pawel
- -a
wypisuje także pliki ukryte (zaczynące się od
.
)- -d
wypisuje tylko katalogi
- ls
wypisuje zawartość katalogu, np.
ls katalog
,ls /
,ls -al
(wypisuje pełną zawartość katalogu bieżącego razem z atrybutami plików),ls ??
(wypisuje tylko dwuliterowe nazwy)- -a, --all
bez ukrywania plików zaczynających się od
.
- -l
używa długiego formatu wyjściowego (long), tj. wypisuje atrybuty plików: typ pliku (pierwszy znak), prawa dostępu, liczba dowiązań, właściciel (twórca) pliku, jego grupa, rozmiar pliku (w bajtach), oraz data ostatniej modyfikacji.
- Typy plikow:
-
- plik zwykłyd
- directory (directory)l
- dowiązanie (link)b
- plik specjalny, urządzenie blokowe (zob./dev
)c
- plik specjalny, urządzenie znakowe (zob./dev
)s
- gniazdo komunikacyjne (socket)p
- potok (pipe)
- -i, --inode
wyświetla numer i-węzła każdego pliku
- touch
Zmienia czas dostępu i modyfikacji każdego podanego pliku na czas bieżący. Jeśli podany plik nie istnieje, tworzony jest jako pusty (chyba że użyto opcji
-c
lub-h
).- pwd
wypisuje nazwę bieżącego katalogu roboczego
- cd
zmienia katalog roboczy; można podać ścieżkę bezwzględną, tj. zaczynającą się od
/
, np.cd /home/pawel
,cd ~
lub ścieżkę względną, np.cd katalog/
,cd ..
,cd ../lib
cd
bez argumentu powoduje przejście do katalogu domowego, tj. do katalogu w którym jesteśmy po zalogowaniucd .
powoduje pozostanie w katalogu bieżącym- mkdir
tworzy katalogi, np.
mkdir katalog
,mkdir -p a/b
- -p, --parents
tworzy brakujące katalogi nadrzędne
- rmdir
usuwa puste katalogi, np
rmdir katalog,
- -p, --parents
usuwa katalog i katalogi nadrzędne podanej ścieżki np.
rmdir -p a/b/c
działa podobnie dormdir a/b/c a/b a
- cp
kopiuje pliki i katalogi, np.
cp plik1 plik2 katalog
,cp -r katalog1 katalog2
- -r, -R, --recursive
kopiuje katalogi rekurencyjnie
- -i, --interactive
pyta przed nadpisywaniem
- -n, --no-clobber
nie nadpisuje istniejącego pliku
- rm
usuwa pliki lub katalogi, np.
rm -i plik
,rm -r katalog/*
- -r, -R, --recursive
rekurencyjnie usuwa katalogi i ich zawartość
- -i
pyta przed każdym usunięciem
- mv
przenosi pliki i katalogi lub zmienia ich nazwy, np.
mv f katalog
,mv nazwa katalog/nowa_nazwa
- -i, --interactive
pyta przed nadpisywaniem
- -n, --no-clobber
nie nadpisuje istniejącego pliku
- Wzorce w nazwach plików i katalogów, które można używać w każdym poleceniu bash:
- *
dowolny ciąg znaków, w tym pusty ciąg
- ?
dowolny jeden znak
- […]
dowolny jeden znak spośród wymienionych w nawiasach lub dowolne z zakresu, np.
[abc]
,[a-zA-Z]
(dowolna duża lub mała litera)- [^…]
dowolny znak spośród nie wymienionych w nawiasach, np.
[^xX]
[^0-9]
Przykłady:
.*
(pliki ukryte),a*
,a?b
,?[0-9].txt
,[aA]*.?
,[A-Z]*.jpg
,.[^.]*
(pliki ukryte bez.
i..
).Można też podać listę wzorców rozdzielonych
|
i poprzedzonych operatorem?
(zero lub jedno wystąpienie wzorca),*
(zero lub wiele wystąpień),+
(jedno lub więcej wystąpień),@
(jeden z podanych wzorców), lub!
(wszystko za wyjątkiem podanych wzorców), np.ls +(ab|def)*+(.jpg|.gif)
wylistuje wszystkie pliki JPEG i GIF, których nazwa zaczyna się od “ab” lub “fig”. Jest to odpowiednik
ls ab*.jpg ab*.gif fig*.jpg fig*.gif
ls ab+(1|2).jpg
wypisze ab1.jpg, ab2.jpg, ab1111.jpg, ab222.jpg, itd.
ls !(*.jpg|*.gif)
wypisze wszystkie pliki, które nie są plikami JPEG i GIF. (Zauważ, że polecenie
ls *!(.jpg|.gif)
nie da tego efektu. Dlaczego?)ls !(+(ab|fig)*+(.jpg|.gif))
wypisze wszystkie pliki, które nie są plikami JPEG i GIF i zaczynają się od albo “ab” albo “fig”.
Znaki specjalne w nazwach poprzedzamy znakiem \
, np:
echo \*\?\|\<\>\\
System plików, prawa dostępu, dowiązania¶
Wyszukiwanie plików i katalogów¶
Edytory tekstów vim i emacs¶
Potoki i przekierowania strumieni standardowych¶
Przetwarzanie tekstów¶
- grep
wypisuje wiersze pasujące do wzorca, np.
grep słowo *.txt
wypisze wiersze w plikach z rozszerzeniemtxt
zawierającesłowo
, zaśgrep "[0-9]*" *.txt
wypisze linie zawierające cyfrę. Składnia:grep [OPCJE...] WZORCE [PLIK...]
grep [OPCJE] -f PLIK ... [PLIK...]
Uwaga: Czasami trzeba objąć wyrażenie regularne znakami cudzysłowu, np.
grep -E "(a) (b) 2 1" plik
.- Przykładowe opcje:
- -E, egrep
interpretuje WZORCE jako rozszerzone wyrażenia regularne (extended regexp)
- -F, fgrep
interpretuje WZORCE jako listę ciągów znaków, a nie wyrażeń regularnych (fixed string), np.
fgrep '+++' *.txt
- -f PLIK
pobiera wzorce z PLIKU, po jednym na wiersz (file)
- -i
ignoruje różnicę wielkości liter (ignore case)
- -v
wybiera wiersze niepasujące do wzorca (invert)
- -w
wybiera tylko te wiersze, w których dopasowane wzorce tworzą całe słowa (words)
- -c
wypisuje liczbę wierszy pasujących (z opcją
-v
niepasujących) do wzorca (count)- --color
koloruje pasujące łańcuchy znaków
- -l
wypisuje nazwy plików zamiast dopasowań
- -L
wypisuje nazwy tych plików, w których nie dopasowano wzorca
- -o
wypisuje tylko znalezione frazy
- -r
czyta katalogi rekurencyjnie, bez dowiązań symbolicznych (recursive)
- -R
czyta katalogi rekurencyjnie, w tym dowiązania symboliczne (recursive)
- -n
podaje numery znalezionych wierszy
- -<n>
wypisuje kontekst, tj. dodatkowo <n> linii przed i za znalezionym wierszem
- Wyrażenie regularne (wzorzec opisujący zbiór łańcuchów) budujemy używając operatorów:
.
- pasuje do każdego pojedynczego znaku[...]
- pasuje do każdego znaku na liście^
- początek wiersza$
- koniec wiersza<
i>
- początek i koniec słowa*
- poprzedzający element będzie dopasowany zero lub więcej razy- Wyrażenie rozszerzone (użyj
egrep
lubgrep -E
): +
- poprzedzający element powtórzony co najmniej raz (r+
=rr*
){n}
- poprzedzający element powtórzony n-krotnie{n,m}
- poprzedzający element powtórzony co najmniej n-krotnie, ale nie więcej niżm
razy{n,}
- poprzedzający element powtórzony co najmniej n-krotnie ({1,}
=+
){,m}
={0,m}
?
- poprzedzający element powtórzony co najwyżej jeden raz (?
={,1}
)|
- alternatywan
- n-ty poprzedzający element w nawiasach- Przykłady wyrażeń regularnych:
[abc]
a lub b lub c[a-zA-Z]
dowolna litera mała lub duża[^0-9]
dowolny znak oprócz cyfry^abc$
wiersz zawierający tylko abc[^^]
dowolny znak oprocz ^[-^]
myślnik lub ^\<[a-z]+\>
słowo małymi literamia*
łańcuch pusty lub wielokrotność a.*
dowolny ciąg znaków.*ok.*
dowolny wiersz zawierający ok (w tym samo ok)a+
co najmniej jedno a (to samo coaa*
)a{5}
aaaaa(wy)?nosi
wynosi lub nosi(Ala | Ola)
słowo Ala lub Olaa|bc(d|e)
a, bcd, bce\<[a-z]+\>
słowo małymi literami(\<[a-z]+\>).*\1
tekst z powtórzonym słowem (małe litery)(a) (b) \2 \1
pasuje do tekstu: a b b a(a (b)) \2
pasuje do tekstu: a b b- Sprawdź jaka jest różnica między:
grep --color "[^x]" f
grep --color -v x f
- Znaki specjalne:
.
,[
,]
,^
,$
,*
,\
jako znaki we wzorcach poprzedzamy backslashem, np.\.
t
- tabulator
Przykładowe polecenia:
ls -l | grep ^d
wypisze podkatalogi w bieżącym katalogu
grep -rl ^abc *
find . -type f -name "*.txt" -exec grep -l ^abc {} \;
find . -type f -name "*.txt" -exec grep -lq ^abc {} \; -exec rm -f {} \;
gdzie
- -q
nic nie pisz na
stdout
(qiet)- -f
usuń bez potwierdzenia
Procesy¶
Proces w systemie Unix to działający program, razem z danymi programu i systemowymi, oraz zmiennymi środowiskowymi, strumieniami stdin, stdout, stderr, i deskryptorami otwartych plików, z których korzysta dany proces.
- ps
wypisuje status procesów
- -A, -e
wszystkie procesy
- -u USERS
procesy należące do wskazanych użytkowników, np.
ps -u pawel
- -f
pełny format atrybutów (UID, PID, PPID, C, STIME, TTY, TIME, CMD), gdzie komenda CMD jest wypisywana razem z argumentami
- -l
długa lista atrybutów (long)
- -x
also processes not connected to terms (daemons)
- -l
long
- -e
environment
- -u
user na poczatku ps -aux | grep ^pawel ps -u pawel Linux only
Interpreter poleceń¶
Programowanie w Bash (I)¶
Programowanie w Bash (II)¶
Wybrane narzędzia, środowisko graficzne¶
Dostęp do plików w języku C¶
Note
This page is under development.
This document was generated on May 08, 2024.