6175


Komendy w Unixie

Układ katalogów w Linuksie

W Linuksie każdy standardowy katalog ma przypisane pewne funkcje, tzn. tworzony jest po to, aby przechowywać dane konkretnego typu. Tworzy się tzw. drzewo katalogów. Poniżej postaram się przedstawić co i gdzie się znajduje w systemie Linux.

Przedstawiony poniżej układ powinien być taki sam dla każdego Linuksa (układ taki możemy też spotkać w Uniksie i jego klonach). W zależności od dystrybucji może on być nieco inny (zróżnicowanie powinno być minimalne).

Nie opisałem wszystkich katalogów jakie można znaleźć w tym drzewie. Skupiłem się na ważniejszych.

Są dwa tryby pracy systemu: tekstowy i graficzny. Pierwszy to taki, który zaczyna się od wpisania loginu i hasła. Następnie widzimy znak zachęty oznaczający gotowość do przyjmowania poleceń.

Tryb graficzny jest wywoływany z trybu tekstowego. Zwykle towarzyszą mu nakładki graficzne. Tryb graficzny ma określoną rozdzielczość i odświeżanie. W Linuksie spotkamy się z popularnym XFree86 lub X.Org (oparte o X11) - są to implementacje trybu graficznego (ang. X Window System). Ze względu na problemy z licencją coraz częściej będziemy się spotykać z X.Org.

Nakładki (środowiska) graficzne, tj. KDE, GNOME, FluxBox i inne również dają nam możliwość wpisywania poleceń. Do tego służą terminale działające w trybie graficznym. Popularniejsze terminale to aterm, xterm, eterm, a także Gnome Terminal itp. Oprócz terminali możliwe jest tworzenie ikon programów, lub użycie opcji uruchom (wykonaj polecenie). Istnieje również możliwość wyjścia z trybu graficznego z pozostawieniem trybu tekstowego. Najczęściej jednak w trybie graficznym używa się terminali.

Przed znakiem zachęty...

Standardowo przed znakiem zachęty występują pewne informacje.

Przykładowo:

login@domena: /usr/bin$

lub

domena: /usr/bin#

Oba przykłady różnia się jedną charakterystyczną rzeczą - ostatnim znakiem (przed znakiem zachęty).

Znak $ oznacza, że polecenia wpisuje użytkownik, natomiast # (ang. hash) oznacza administratora. Zarówno domena jak i katalog nie muszą być wyświetlane (zależy od ustawień w konfigu).

Polecenia

Warto wiedzieć, że polecenia w systemach uniksowych to zwykłe programy, które można uruchomić w dowolnym katalogu (poprzez dowiązanie). Można napisać swoje własne programy i ich używać w taki sam sposób. Programy te nazywane są "poleceniami", ponieważ spełniają określone funkcje w systemie.

Inaczej - polecenie stanowi wywołanie programu (również z parametrami). Zatem np. polecenie cp plik1 /katalog/ oznacza użycie programu CP (copy) z parametrami określającymi plik źródłowy i miejsce gdzie ma zostać przekopiowany.

Przedstawione niżej polecenia stanowią podstawę pracy z systemem...

Polecenia wejścia i wyjścia

Polecenie we/wy

Opis

shutdown -r now / reboot

restart systemu (tylko superuser lub root)

shutdown -h now / halt

wyłączenie komputera (j/w.)

su użytkownik

zamiana użytkownika (ang. switch user)

login

zalogowanie się do nowej sesji

exit / logout

zakończenie zalogowanej sesji (jeśli to jedyna sesja - powoduje opuszczenie środowiska pracy i wywołanie okna logowania)

startx

rozpoczęcie pracy w środowisku graficznym X Window

kdm, gdm, xdm

dla managera logowania w trybie graficznym, odpowiednio KDE, GNOME i XFree86 (wywołanie managera nie oznacza wyboru środowiska graficznego)

Poruszania się i operacje na plikach

Polecenie

Opis

cd nazwa_katalogu

przejście do katalogu. Można wpisać pełną ścieżkę, np. cd /home/użytkowni/katalog lub będąc w katalogu użytkownika poprostu katalog. wpisanie samego cd powoduje przeniesienie do katalogu domowego /home/uzytkownik (ang. Come in Directory - [przypuszczalnie]).

mkdir nazwa_katalogu

tworzy katalog o podanej nazwie (ang. Make Directory)

rmdir nazwa_katalogu

usuwa katalog (ang. Remove Directory)

cp plik katalog

kopiuje plik do podanego katalogu (ang. Copy). Aby skopiować cały katalog musimy użyć opcji -r, czyli cp -r katalog inny_katalog

mv plik katalog

przenosi plik do podanego katalogu (ang. Move) lub zmienia nazwę pliku. Aby zmienić nazwę pliku należy wpisać mv nazwa_pliku nowa_nazwa.

rm plik

usuwa plik o podanej nazwie (ang. Remove), aby usunąć katalog wraz z zawartością należy użyć opcji -r

touch nazwa_pliku

tworzy plik o podanej nazwie (lub dla ambitnych - zmienia czas pliku). Plik można edytować dowolnym edytorem i nadać mu odpowiednie prawa i atrybuty

pwd

podaje ścieżkę obecnego katalogu

ls

pokazuje listę plików znajdujących się w danym katalogu (ang. List). Działanie podobne do dir w DOSie. Szczegółowe opisano tę opcję w innym artykule

ln -s /.../katalog/plik nazwa

wykonuje dowiązanie symboliczne (ang. Link), od tej pory plik będzie można wykonywać (wywoływać) poleceniem ./nazwa, przydatne gdy instalujemy program ze źródeł i chcemy zrobić do niego skrót

whereis nazwa_pliku

poszukuje plików źródłowych, binarnych lub stron podręcznika (ang. manual), z ang. Where is? - dosł. Gdzie jest?

Jeżeli chodzi o katalogi można podawać je w różnej postaci. Już wcześniej podawana pełna ścieżka, ma postać np. cp /home/me/my_file /usr/bin. Aby cofnąć się o jeden katalog możemy posłużyć się kropkami, np. cp ../file_name /home/me/ - spowoduje to skopiowanie pliku z katalogu, znajdującego się przed aktualnym katalogiem. Można cofać się o kilka katalogów, np. ../../../file.

- pamiętaj, że pierwszy "/" oznacza - root (ang. Root - korzeń) - jest to pierwszy podstawowy katalog w systemie (główna partycja).

Procesy

Polecenie

Opis

ps

wyświetla stan procesów

ps -x

wyświetla aktualne procesy użytkownika

kill nr_pid

kończy proces, nr_pid jest wyświetlany w pierwszej kolumnie po wywołaniu polecenia ps

Uzyskiwanie informacji

Polecenie

Opis

man nazwa_polecenia

wyświetla stronę podręcznika programu (o ile taka istnieje)

uname -a

wyświetla informacje: nazwa jądra systemu, sieciowa nazwa systemu, numer kernela, wersja jądra, architektura i nazwa systemu

who

wyświetla informacje o użytkowniku (z ang. kto)

finger

rozbudowane who, (z ang. palec, dotykać palcem)

who am I

wyświetla informacje o aktualnym użytkowniku w danej sesji

file plik

wyświetla informacje o pliku (tj. kodowanie, rodzaj pliku)

df

informacje o stanie dysku twardego (zużycie miejsca), jednostki można określić np. -m - Megabajty, -k - kilobajty

du

wielkość pliku lub katalogu (określenia j/w.)

Program ls - listowanie zawartości katalogu

W Linuksie dosyć często używa się poleceń tekstowych. W obsłudze systemu niezbędna jest zatem znajomość tych poleceń. Jednym z nich jest ls - narzędzie do listowania zawartości w danym katalogu. Jest to jeden z programów, który warto poznać bliżej.

0x01 graphic
0x01 graphic
0x01 graphic
0x01 graphic
0x01 graphic
0x01 graphic
Podobne polecenie można znaleźć chyba w każdym innym systemie operacyjnym. Przykładowo w DOS-ie taki program nosił nazwę dir. Można było dokładać mu pewne parametry, dzięki którym wyświetlała się zawartość odpowiednio zdefiniowanych nazw plików (np. wszystkie zaczynajace się na literę a).

W Linuksie również istnieje polecenie dir oraz rozszerzone vdir. Mogą one stanowić dowiązanie symboliczne do programu ls (z odpowiednimi parametrami). Ich działanie jest bardzo podobne do ls, z resztą zostały wszystkie napisane przez tych samych autorów - Richarda Stallmana i Davida MacKenzie.

Program wywołany bez specjalnych parametrów wyswietli tylko katalogi i pliki (w obecnym katalogu lub podanym), np.:

ja@home:/$ ls /usr
bin doc gam
es include info lib local sbin share src X11R6

- dostajemy to samo co dzięki dir

Jest możliwość podania bardziej szczegółowych informacyji, wtedy musimy wpisać:

ls -l

    (małe "L")

ja@home:/$ ls -l /usr
razem 108

drwxr-xr-x
drwxr-xr-x
drwxr-xr-x
drwxr-x
r-x
lrwxrwxrwx
drwxr-xr-x
drwxrwsr-x
drwxr-xr-x
drwxr-xr-x
drwxrwsr-x
drwxr-xr-x

2
2
2
53
1
109
9
2
207
2
6

root
root
root
root
root
root
root
root
root
root
root

root
root
root
root
root
root
staff
root
root
src
root

32768
4096
4096
4096
10
45056
4096
4096
4096
4096
4096

2006-04-22 19:37
2006-04-13 23:46
2006-04-13 17:43
2006-04-13 23:46
2006-04-13 15:00
2006-04-23 19:37
2006-04-13 15:00
2006-04-13 23:46
2006-04-23 19:37
2004-12-15 23:55
2006-04-13 17:38

bin
doc
games
include
info -> share/info
lib
local

sbin
share
src
X11R6

- efekt jak w przypadku vdir

Dzieki takiej postaci otrzymujemy informacje takie jak (kolejno):

typ pliku (katalog, dowiązanie, plik wykonywalny itp., np. d) i prawa dostępu - rwxr-xr-x, następnie liczba powiązań, właściciel, grupa przypisana do pliku, rozmiar, data modyfikacji i nazwa elementu.

ls -a

Parametr umożliwia wyświetlenie także ukrytych plików (poprzedzonych kropką) oraz symbole "." lub "..", które oznaczają odpowiednio katalog aktualny i nadrzędny.

ja@home:/temp$ ls -a
.
  ..  katalog  kopia_zapas~  plik  .ukryty

Jeżeli, nie chcesz widzieć tych pierwszych kropek użyj ls -A.

ls -B

Parametr określa ukrycie pliku kopii zapasowej (w moim katalogu temp jest to kopia_zapas~) - nie wyświetla plików oznaczonych znakiem tyldy:

ja@home:/temp$ ls -B
katalog  plik

ls -d

Pokazuje tylko katalogi w obecnym lub wskazanym katalogu:

ja@home:/temp$ ls -d
katalog

ls -I wzorzec

      (duże "i")

Ignoruje pliki i katalogi, których nazwy odpowiadają wzorcowi:

ja@home:/temp$ ls -I p???
katalog 
kopia_zapas~

Wzorzec można określić np. że zaczyna sie od litery "p", wtedy użyjemy gwiazdki: ls -I p*; lub że po "p" są jeszcze 3 znaki: ls -I p???; albo konkretny wyraz: ls -I plik

Jezeli chcemy natomiast wyświetlić odwrotne działanie powyższej komendy, wywołujemy wszystko tak samo tylko bez parametru -I - zamiast ignorować pliki określone wzorcem, wyświetli pliki spełniające określone kryteria.

ls -R

Umożliwia wyświetlanie zawartości katalogów podrzędnych (ang. recursive):

ja@home:/temp/katalog$ ls -R
.:
katalog_w_katalogu  plik_w_katalogu

./katalog_w_katalogu:

ls -r

Polecenie spowoduje odwrócenie kolejności wyświetlania plików (ang. reverse):

ja@home:/temp$ ls -r
plik  kopia_zapas~  katalog

ls -S

Sortowanie plików wg. rozmiarów - największy będzie pierwszy.

ls -t

Sortowanie plików wg. czasu modyfikacji.

ls -u

Sortuje wg. ostatniego dostępu do pliku (nie ostatniej modyfikacji).

ls -U

Powoduje niesortowanie zawartości katalogu.

ls -x

Opcja spowoduje posortowanie plików wg. ich rozszerzeń (alfabetycznie).

ls -i

Pokazuje, po lewej stronie nazwy pliku, numer indeksowy (seryjny) tego pliku:

ja@home:/temp$ ls -i
915899  katalog  507908  kopia_zapas~  507907  plik

ls -o

Szczegółowy format listowania (jak z -l - małe "L"), ale nie wyświetla informacji o grupie:

ja@home:/temp$ ls -o
razem 4

drwxr-xr-x

3

root

4096

2006-04-29 17:27

katalog

-rw-r--r--

1

root

0

2006-04-29 17:13

kopia_zapas~

-rw-r--r--

1

root

0

2006-04-29 17:13

plik


itd...

ls -s

Pokazuje rozmiar (ang. size) pliku po lewej stronie jego nazwy.

Wymienione wyżej opcje wydają mi się najbardziej przydatne. Najczęsciej jednak używa się parametrów wzorcowych (z ignorowaniem wzorca lub bez), pokazywanie plików ukrytych i długiej listy plików.

Warto wiedzieć, że parametry możemy ze sobą łączyć, np. ls -la. Kolejność parametrów raczej nie ma znaczenia (chyba, że przy sortowaniu), ścieżkę również można podać za lub przed parametrami (odzielone spacją).

Wiedza uzupełniająca

Prawa dostępu do plików

Wszystkie pliki systemów uniksowych posiadają swoje prawa dostępu dla zapisu, odczytu i wykonywania. W Linuxie istnieje podział na przynajmniej dwóch użytkowników - root-a i normalnego. Tego drugiego możemy zrobić, kiedy nam się podoba, root jest tworzony podczas instalacji. Dla roota nie ma ograniczeń. On może ustawiać prawa jak mu się podoba. Ale musi ograniczać je dla pozostałych użytkowników... Dlaczego? Linux jest systemem przystosowanym do sieci. Posiada konta dla wielu użytkowników. Z komputerem można się łączyć zdalnie lub lokalnie. Konta też mogą być udostępniane zdalnie (shell - SSH). Jak widać swoboda użytkowania nie wchodzi tutaj w grę.

Linux umożliwa przydzielanie praw dostępu do plików użytkownikom i grupom. W systemie istnieje podział na właściciela pliku, grupy przypisanej do pliku i innych użytkowników (nie będących ani przydzieloną grupą, ani właścicielem pliku).

W jaki sposób dowiedzieć się jakie prawa ustawiono dla danego pliku?

Tutaj nie ma problemu. Wpisz ls -l nazwa_pliku. Dla przykładu utworzyłem taki plik wcześniej, popatrz:

home:/temp/katalog# ls -l example
-rw-r--r--  1 root root 0 2006-04-29 17:27 example

Po wpisaniu tego polecenia, wyświetlono informacje dotyczące mojego pliku example (z angielska - przykład). Pierwsza informacja z lewej to właśnie prawa dostępu, druga do ilość powiązań, trzecia z kolei to użytkownik (właściciel), a czwarta to grupa przypisana do tego pliku. Na końcu widzimy jeszcze datę i czas modyfikacji oraz nazwę pliku.

Jak interpretować informacje dot. praw dostępu?

Weźmy powyższą informację: -rw-r--r--. Jest tutaj 10 znaków.

Pierwszy znak oznacza zawsze typ pliku (np. zwykły plik, albo katalog).

Znak

Znaczenie

-

zwykły plik

b

specjalny plik blokowy (ang. Block)

c

specjalny plik znakowy (ang. Character)

d

katalog (ang. Directory)

l

małe ("L") - dowiązanie symboliczne (ang. Symbolic link)

p

nazwany potok

s

gniazdo

- w takim razie mój obiekt to zwykły plik.

Następnie widzimy oznaczenia typu r, w oraz "-". Oprócz tego może również wystąpić x. Litery te oznaczają:

Znak

Angielski

Plik

Katalog

r

Read

prawo do odczytu

prawo do przeszukania zawartości

w

Write

prawo do zapisu

prawo do zmiany zawartości

x

eXecute

prawo do wykonywania

prawo do wejścia do katalogu

- myślnik - oznacza brak danego prawa (występuje w miejscu odpowiedniej litery).

Bierzemy jeszcze raz mój przykład bez pierwszego znaku: rw-r--r--

Te 9 kolejnych znaków oznaczają po 3 prawa kolejno dla każdego z 3 użytkowników.

Od lewej pierwsze 3 symbole przeznaczone są dla właściciela pliku (ang. owner ale oznaczany jako ang. user - dalej dowiesz się dlaczego), drugie 3 symbole dla grupy przypisanej do tego obiektu, a ostatnie 3 dla innych użytkowników (nie będących właścicielami, ani grupą do której plik czy katalog został przydzielony).

Właściciel katalogu lub pliku to użytkownik, który stworzył ten plik lub któremu go przypisano. Grupa to określona grupa użytkowników (wg. grup można ustalać jakie kto ma prawa bez potrzeby ustalania ich konkretnemu użytkownikowi - wiecej o grupach przeczytasz w innym artykule).

Czyli interpretacja ma się następująco:

"Plik jest zwykłym plikiem, właściciel ma prawo do odczytu i zapisu, grupa tylko do odczytu, pozostali - również tylko do odczytu".

Jak nadać użytkownikowi lub grupie jakiś plik?

Standardowo plik przydzielany jest do użytkownika (i jego grupy), który go stworzył. Jeżeli chcemy zaś właścicielem pliku uczynić innego użytkownika lub inną grupę to przydadzą nam się dwa programy: chown - do użytkownika i chgrp - do grupy. Użycie jest bardzo proste:

Zamiast dwukropka można wstawić kropkę. Jako grupę można podać albo nazwę grupy, albo identyfikator numeryczny. Pomiędzy użytkownikiem a dwukropkiem oraz dwukropkiem a grupą nie ma odstępów! Jeżeli istnieje potrzeba przydzielenia wszystkich plików do użytkownika i/lub grupy (w obrębie katalogu) można posłużyć się poleceniem chown -r...

chown - z ang. Change Owner - zmień właściciela,
chgrp - z ang. Change Group - zmień grupę

Nadanie praw właścicielowi, grupie i innym

Nadanie i zmianę praw dostępu dla użytkownika lub grupy możemy wykonać na kilka sposobów. Do tego posłuży nam program o nazwie chmod (ang. Change Mode).

Sposób pierwszy - za pomocą liter i znaków

Sposób ten określa ustawienia praw dostępu do pliku takich samych dla wszystkich - tzn. możemy ustalić takie same prawa dla wszystkich albo właścicielowi, grupie czy innym użytkownikom. W ten sposób nie ustawimy praw osobno dla właściciela, osobno dla grupy itd. (chyba, że użyjemy polecenia kilka razy).

Przykład:

chmod a+w nazwa_pliku

Dzieki temu możemy spowodować nadanie wszystkim prawa do zapisu dla pliku o podanej nazwie.
Wyjaśnienie składni tego polecenia:

  1. Określamy kto ma dostac te prawa:

Litera

Znaczenie

a

(ang. all) - wszyscy (użytkownik, grupa, inni)

u

(ang. user) - użytkownik - właściciel pliku

g

(ang. group) - grupa, której przypisano plik

o

(ang. others) - inni

Napisałem wcześniej, że właściciel określany jest jako user (użytkownik), a nie owner (właściciel), oto dlaczego - nie może być dwóch typów użytkowników zaczynających się na o (owner, others), więc jeden nich jest zastępowany przez user.

Programiści wymyślili rozwiązanie, które i tak nie koliduje z prawidłowościami - (u)ser - użytkownik (któremu nadano plik - właściciel), (o)thers - inni użytkownicy w systemie - nie należą do grupy, do której przypisano plik i nie są właścicielami pliku.

2. Określamy znaczenie polecenia:

Znak

Znaczenie

+

nadanie prawa (dodanie)

-

odebranie prawa

=

zastąpienie prawa - kasuje poprzednie i zastępuje nowym

3. Ustalamy prawa:

Argumenty możemy ze sobą łączyć, np. chmod ug+rwx nazwa_pliku - nada właścicielowi i grupie prawo do czytania, zapisu i wykonywania, natomiast dla innych użytkowników (others) pozostaną one bez zmian.

Sposób drugi - za pomocą liczb oktalnych (ósemkowych)

- system oktalny polega na wykorzystywaniu cyfr od 0 - 7 (8 cyfr).

Z tym sposobem napewno zetknęli się już webmasterzy mający strony na serwerze uniksowym, obsługującym język PHP. Polecenie jest bardzo proste, wystarczy wpisać chmod 777 aby ustawić wszystkim prawa do odczytu, zapisu i wykonywania.

Tym sposobem ustalamy różne (lub takie same) prawa dla wszystkich użytkowników. Jak zwykle pierwsze kolejne cyfry od lewej to: właściciel-grupa-inni.

A oto rozkład cyfr:

Znaki

Cyfra

Znaczenie

---

0

brak praw

--x

1

tylko wykonywanie

-w-

2

tylko zapis

-wx

3

zapis i wykonywanie

r--

4

tylko odczyt

r-x

5

odczyt i wykonanie

rw-

6

pokazuje informacje na temat komendy

rwx

7

zapis, odczyt i wykonywanie

Oczywiście w przypadku katalogów znaczenie zmienia się odpowiednio. Jest jescze możliwość ustawienia czwartej cyfry. Ustawia się ją przed tymi trzema odnoszącymi się do u, g i o. A oto ich oznaczenia:

Zatem polecenie z chmod ustawiające "lepki bit" i jakieś prawa może wyglądać tak:

chmod 1770

Maska

Gdy w systemie Linux jakiś plik jest tworzony musi mieć od razu ustalone prawa dostępu. Dla przykładu możesz utworzyć dowolny plik i sprawdzić jakie prawa posiada (polecenie ls -l nazwa_pliku) - w każdym razie jakieś ma.

Istnieje polecenie, które pozwala określić jakie prawa nie mają być nadawane domyślnie dla nowo utworzonego pliku - umask.

Przykład:

umask 444

Będzie oznaczać, że standardowo nie bedą przyznawane prawa do odczytu. Czyli jeśli stworzysz teraz nowy plik, to będzie on miał takie prawa: -w--w--w-. Zwykle maska ustawiana jest na 022 (rw-r--r--). Jak widać 0 ustawia zapis i odczyt (a raczej nie wyłącza go). Można zauważyć, że prawa do wykonywania są pomijane!

Możliwe cyfry to:

Cyfra

Znaczenie

0

brak ograniczeń praw (zapis i odczyt)

2

wyłącza zapis (ustawia tylko odczyt)

4

wyłącza odczyt (ustawia tylko zapis)

6

wyłacza zapis i odczyt (brak praw do pliku)

Podane opcje są prawidłowymi, ale można też użyć standardowych 0-7 (zostanie wyłączona opcja zapis i/lub odczyt - wykonywanie i tak zawsze będzie wyłączone).

Tłumaczenie dla ambitnych

Zwykle standardowe prawa dostępu (mode) ustawione są na 666 (rw-rw-rw-). Poleceniem umask ustawiamy jakie prawa odejmujemy od standardowego, czyli od 666 - ustawiamy tzw. maskę. Zatem jeśli maska ustawiona jest na 444 (umask 444) to układamy równanie 666 - 444 = 222 [mode]co nam daje: -w--w--w-.

Jeżeli w równaniu wyjdzie jakieś prawo wykonywania - zostanie ono ustawione jako brak (-). Jeśli przekroczymy zakres odejmowania, czyli odejmiemy większą liczbę od mniejszej to prawa ustawione będą ustawione na 000 (---------), czyli w normalnym wypadku wszelkie prawa będą odejmowane począwszy od mode 666.

Polecenie umask bez podanych parametrów wyświetli nam aktualny status maski.

domena@home:~$ umask
0022

Jak można zauważyć mamy tutaj 4 cyfry.

Zamiast 0 mogą pojawiać się inne wartości:

Cyfra

Opis

1

Ustawiony lepki bit

2

Ustawiony bit SGID

4

Ustawiony bit SUID

Jeżeli chcesz na stałe ustawić wartość umask, zmień jego wartość w pliku /etc/profile (lub profiles); dla konkretnego użytkownika w systemie Linux - w .bashrc, natomiast Unix - .profile (w katalogu domowym użytkownika).

Ponadto poleceniem umask -S można sprawdzić jakie prawa będą przydzielane standardowo (nie podaje maski):

domena@home:~$ umask -S
u=rwx,g=rx,o=rx

Cały czas posługiwałem się określeniem pliku, ale jeśli chodzi o prawa odczytu, zapisu i wykonania to ich odpowiedniki dla katalogów nie ulegają zmianie (przeszukiwanie, zmiana zawartości, wejście).



Wyszukiwarka

Podobne podstrony:
6175
6175
6175
06 ZABURZENIA W KRĄŻENIU KRWIid 6175 ppt
6175
6175
6175
6175

więcej podobnych podstron