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

Terminal i pomoc systemowa

1

13.03

Operacje na plikach i katalogach

2.1

20.03

System plików, prawa dostępu, dowiązania

2.2, 2.4

27.03

Wyszukiwanie plików i katalogów

2.3

3.04

Edytory tekstów vim i emacs

3 (bez 3.3)

10.04

Potoki i przekierowania strumieni standardowych

Zadania I (bez grep), 5 (bez 5.3), 6.2

17.04

Przetwarzanie tekstów

Zadania I (grep), Zadania II, 5.3, 10.2

24.04

Procesy

4

8.05

Interpreter poleceń

6 (bez 6.2 i 6.6)

15.05

Programowanie w Bash (I)

7

22.04

Programowanie w Bash (II)

8

29.05

Wybrane narzędzia, środowisko graficzne

9

5.06

Dostęp do plików w języku C

notes

12.06

Kolokwium

Poniżej kilka przydatnych odnośników:

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 lub exit 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 polecenia ls w sekcji 1, man 3 sleep wypisuje opis sleep w sekcji 3. Pliki wyświetlane są programem less. Dostępne sekcje:
1 - Programy wykonywalne lub polecenia powłoki
2 - 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 - Gry
7 - 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 sekcji
man -t komenda formatuje opis komendy w Postscript
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ły
d - 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 zalogowaniu

cd . 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 do rmdir 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 rozszerzeniem txt zawierające sł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 lub grep -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})
| - alternatywa
n - 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 literami
a* ł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 co aa*)
a{5} aaaaa
(wy)?nosi wynosi lub nosi
(Ala | Ola) słowo Ala lub Ola
a|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.