Linux
II
System plików
Struktura katalogów pozwala na wskazywanie położenia plików za pomocą ścieżki dostępu. Ścieżka dostępu danego pliku wymienia wszystkie katalogi i katalogi podrzędne, począwszy od katalogu głównego a skończywszy na katalogu podrzędnym, który bezpośrednio zawiera ten plik.
System plików rozprzestrzenia się zwykle na kilka partycji (które zostały utworzone podczas instalacji), nie jest to jednak bezwzględnie konieczne. Można zmieścić cały system plików na jednej, dużej partycji, albo na różnych dyskach fizycznych,, albo wreszcie w różnych komputerach połączonych z siecią. W Linuksie nie ma to znaczenia - gdy posługujesz się systemem plików wydaje się, jak gdyby każdy plik znajdował się w drzewie katalogów jednego komputera. Dzieje się tak, ponieważ każda partycja znajdująca się na dowolnym dysku twardym jest montowana do katalogu znajdującego się na partycji głównej (root). Gdy już system plików zostanie zamontowany, cały system zachowuje się tak, jak gdyby wszystkie partycje, dyski i odległe systemy plików były podrzędnymi katalogami katalogu głównego.
Montowanie systemu plików oznacza po prostu udostępnienie go. Wszystko, czego potrzeba w Linuksie, to punkt zamontowania, będący katalogiem, za pośrednictwem którego dany system plików został dodany do głównego systemu plików. Ponieważ każdy zamontowany system plików wygląda, jakby był katalogiem podrzędnym katalogu /, całość funkcjonuje jako jeden system plików.
Partycja główna (/) zawiera katalog główny systemu plików. Główny system plików jest montowany do katalogu głównego już podczas rozruchu. Gdy już ten system zostanie zamontowany, pozostałe partycje są montowane do katalogów podrzędnych na partycji głównej poprzez punkty montowania. Punkty montowania informują jądro systemu, gdzie mają być zamontowane poszczególne partycje lub systemy plików, dzięki czemu staną się one częścią głównego systemu plików. Np. katalog /usr jest punktem montowania partycji /usr. Jeśli katalog /usr nie jest odrębną partycją, to jest po prostu kolejnym katalogiem w partycji głównej.
Jeśli dysponujesz innymi systemami operacyjnymi lub urządzeniami w rodzaju napędów
CD-ROM lub dyskietek, musisz je zamontować do systemu plików Linuksa, zanim uzyskasz dostęp do plików. Jeśli na przykład zamierzasz użyć CD-ROM, najpierw powinieneś go zamontować posługując się punktem montowania , którym domyślnie jest /mnt/cdrom,dla dyskietek jest /mnt/floppy .
Struktura katalogów
/ zawiera punkty montowania podstawowych systemów plików. W systemie RedHat katalog główny nie obejmuje żadnych plików, jedynie katalogi służące do montowania pozostałych systemów plików.
/bin zawiera podstawowe polecenia używane przez wszystkich użytkowników (cat, cp, ping, vi, su ls). Polecenie cd jest poleceniem wbudowanym w jądro systemu
/boot zawiera pliki używane przez program ładujący (taki jak LILO) służący do ładowania systemu operacyjnego
/dev zawiera specjalne pliki dla różnych urządzeń wchodzących w skład systemu.
W katalogu tym jest wiele plików dotyczących urządzeń, które nie znajdują się w Twoim systemie. Pliki te nie zajmują zbyt wiele miejsca, najlepiej ich nie ruszać. W przeciwnym wypadku potrzebne byłoby ich odtwarzanie podczas dołączania nowego sprzętu.
/etc zawiera pliki konfiguracyjne systemu, używane przez wszystkich użytkowników. Czasem użytkownicy mają pliki konfiguracyjne w swoich własnych katalogach macierzystych (pliki .), które mają pierwszeństwo przed plikami zawartymi w /etc.
/home zawiera katalogi macierzyste wszystkich użytkowników.
/lib zawiera wspólne biblioteki niezbędne do funkcjonowania programów. Różne programy współużytkują niektóre biblioteki funkcji.
/mnt zawiera punkty montowania napędów zewnętrznych takich jak CD-ROM, dyskietki i napędy ZIP.
/proc jest pseudo-systemem plików, używanym jako interfejs w stosunku do jądra systemu. Jądro tworzy system plików /proc w pamięci, aby dostarczał informacji o systemie. Każdy proces realizowany w systemie ma swój katalog podrzędny w /proc. Zawierają one pseudopliki z informacjami o poszczególnych procesach. Ponieważ są one tworzone w pamięci, katalog /proc nie zajmuje miejsca na dysku twardym.
/root jest katalogiem macierzystym administratora.
/sbin zawiera polecenia specjalne, na ogół wykorzystywane przez administratora, np.: fsck, clock, dump...
/tmp jest przeznaczony na pliki tymczasowe
/usr zawiera wszystkie polecenia, aplikacje, dokumentację i biblioteki, które są potrzebne do funkcjonowania systemu. Pliki /usr z założenia są współużytkowane przez wszystkich użytkowników i są na ogół przeznaczone tylko do odczytu. Często katalog /usr jest katalogiem największym
/var zawiera pliki, których zawartość zmienia się regularnie. Znajdują się w nim pliki dzienników (logów) i pozostałe pliki tymczasowe, na przykład związane z pocztą lub drukowaniem
Partycja wymiany
Obszar wymiany jest to specjalna partycja na dysku twardym, używana jako rodzaj pamięci wirtualnej, uzupełniającej podstawową pamięć RAM. Jeśli nie dysponujesz dostateczną pojemnością pamięci fizycznej, aby obsłużyć wszystkie uruchamiane programy, jądro zapisuje dane w obszarze wymiany dysku twardego w sposób podobny jak w pamięci fizycznej.
Nawigacja w systemie plików
Katalog ..
$cd .. przechodzi do katalogu nadrzędnego
$cd ../katalog -przechodzi do katalogu „równoległego”
$cd ../.. - przechodzi do katalogu nadrzędnego, który jest nadrzędnym naszego katalogu nadrzędnego
Katalog .
Katalog . jest równoważnikiem „bieżącego katalogu”.
Wszystko to, co znajduje się w bieżącym katalogu zamiast pisać całą ścieżkę bezwzględną możemy odwołać się poprzez ./. Np. jeśli chcemy uruchomić plik test znajdujący się w naszym katalogu domowym, zamiast pisać:
$/home/user/test
wystarczy wpisać:
$./test
Linux szuka plików wykonywalnych tylko w pewnych katalogach wchodzących w skład systemu plików. Jeśli plik wykonywalny nie znajduje się w jednym z trzech specjalnych katalogów, musisz nakazać Linuksowi poszukać wykonywalnego pliku w innym katalogu.
Tworzenie łącz
W Linuksie można posługiwać się łączami, aby nadawać temu samemu plikowi dwie całkowicie różne nazwy, lub w celu pozorowania, że plik znajdujący się w określonym miejscu systemu plików w rzeczywistości jest w całkowicie innym miejscu.
Tworzenie łącz jest użyteczne, gdy dwa różne programy poszukują tego samego pliku w różnych miejscach. Trzeba wtedy sprawić, żeby plik znajdował się w obydwu tych miejscach. Załóżmy, że brakuje Ci miejsca w partycji /usr. Jeśli w tej sytuacji chcesz dodać więcej plików do /usr, możesz utworzyć katalog w /var i powiązać ten katalog łączem z /usr, dzięki czemu wszystkie pliki znajdujące się w nowym katalogu pozornie będą się znajdowały w /usr.
Łącza stałe (linki twarde)
Łącze stałe jest inną nazwą istniejącego pliku. Obydwa pliki wykorzystuję ten sam węzeł informacyjny w systemie plików, w rzeczywistości są więc tym samym plikiem. Sytuacja taka jest odmienna od pary kopia-oryginał w którym to przypadku istnieją dwa odrębne pliki z odrębnymi węzłami informacyjnymi, zajmujące różne bloki dysku twardego. Węzeł informacyjny jest specjalnym plikiem informującym jądro systemu, które bloki dysku twardego zawierają dany plik. Ponieważ łącze stałe do pliku tym samym, co plik oryginalny, nie ma możliwości stwierdzenia, który plik jest oryginałem, który zaś łączem stałym.
Każdy plik w systemie plików ma dwie etykiety służące do identyfikacji: nazwę pliku oraz numer węzła informacyjnego (i-węzła). Gdy poszukujesz pliku posługujesz się jego nazwą, natomiast gdy jądro systemu poszukuje pliku używa numeru węzła informacyjnego. Numer węzła informacyjnego można wyświetlić za pomocą polecenia:
ls -i
Każdy numer węzła jest unikalny, jednak w przypadku łącza stałego mamy do czynienia z dwiema nazwami plików odwzorowanymi w tym samym węźle informacyjnym.
Poleceniem służącym do utworzenia łącza stałego jest ln:
$ln plik_oryginalny nazwa_lacza
Łącza symboliczne (linki miękkie)
Łącze symboliczne różni się od łącza stałego tym, że jest specjalnym plikiem zawierającym nazwę pliku oryginalnego, podobnie jak skrót w Windows. Gdy tworzysz łącze symboliczne, powstaje plik łącza symbolicznego zawierający wskaźnik pliku oryginalnego (docelowego). Jeśli zechcesz przejrzeć łącze symboliczne za pomocą polecenia cat, otworzy się plik otworzy się plik oryginalny. Podobnie, jeśli wprowadzisz zmiany w pliku łącza symbolicznego, ukażą się one również w pliku oryginalnym.
Aby zamiast łącza stałego utworzyć łącze symboliczne, użyj polecenia :
$ln -s plik_oryginalny plik_łącza
W wyniku polecenia ls -l łącza symboliczne są etykietowane znakiem l na początku ciągu zezwoleń. Plik docelowy jest wymieniony obok łącza symbolicznego po strzałce.
!!! Jeżeli zostaje usunięty plik docelowy bez usunięcia łącza symbolicznego, łącze takie nosi nazwę łącza martwego. Próba otworzenia takiego łącza prowadzi do wyświetlenia komunikatu o błędzie.!!!
Powłoki
Gdy się logujesz, system przenosi cię do powłoki. To samo robi okno xterm w X-ach. Powłoka jest środowiskiem, które interpretuje i wykonuje wszystkie wydawane polecenia.
Niektóre powłoki dostępne w Linuksie:
bash
Najczęściej używana powłoka w Linuksie. Oferuje edytowanie wiersza poleceń, historię poleceń i zgodność z powłoką Bourne'a (najstarsza powłoka opracowana dla Linuksa).
csh
Powłoka C.W większości zgodna z powłoką Bourn'a przy interaktywnym działaniu, ale ma zupełnie inny interfejs programistyczny.Nie edytowania wiersza poleceń.
ksh
powłoka Korna. Najbardziej popularna w systemach Uniksowych. Zgodna z powłoką Bourne'a. Oferuje edytowanie wiersza poleceń
sh
Powłoka Bourne'a. Oryginalna powłoka. Nie posiada edytowania wiersza poleceń.
tch
Rozszerzona powłoka C.Oferuje edytowanie wiersza poleceń.
zsh
Powłoka Z. Jedna z najnowszych powłok. Zgodna z powłoką Bourne'a.Oferuje edytowanie wiersza poleceń.
Aby dowiedzieć się z jakiej powłoki korzystasz, wydaj polecenie:
$echo $SHELL
Zanim użytkownik będzie mógł wybrać konkretną powłokę, musi ona zostać zainstalowana, a administrator systemu musi ją udostępnić przez wpisanie jej do pliku /etc/shells.
Zapamiętywanie wyników
Jeśli po jakimś poleceniu wpiszesz znak > (większości) i nazwę pliku, to wynik tego polecenia zostanie wysłany do tego pliku. Np.:
$ls -al /root > ~/wynik
Jeśli plik wynik już istnieje, to zostanie on nadpisany (poprzednie dane zostaną skasowane).
Jeśli zamienimy w powyższym przykładzie znak > na znak >> to wynik polecenia zostanie dopisany do istniejącego pliku wynik.
Znak > nie przekierowuje standardowego błędu. Przydaje się on wtedy, gdy chcesz zapamiętać właściwe wyniki bez zaśmiecania pliku komunikatami o błędach. Aby zapisać komunikaty i błędy do pliku należy umieścić znak & po znaku >.
$ polecenie >& plik_wynikowy
lub
$ polecenie &> plik_wynikowy (dla bash i ksh)
Aby zapisać tylko błędy do pliku należy umieścić cyfrę 2 przed znakiem >.
$ polecenie 2> plik_wynikowy
Jeśli chcesz, aby błędy były zapisywane w pliku, natomiast inne komunikaty nie pojawiały się na ekranie monitora (standardowym wyjściu), wydaj polecenie:
$ polecenie 2> plik_wynikowy > /dev/null
Znak < nakazuje poleceniu pobranie parametrów (danych wejściowych) z pliku.
Aby jakieś polecenie wykonać w tle, należy na końcu polecenia umieścić znak &.Np.:
$netscape &
[1] 23123
Znak zgłoszenia (zachęty) powraca i możesz wykonywać inne polecenia w czasie wykonywania innego polecenia (programu). Im więcej poleceń umieścisz w tle, tym wolniej działa twój system, wykonując je na zmianę.
Jeśli z jakiś powodów zatrzymasz zadanie wykonujące się w tle, możesz je przywrócić do wykonywania wydając polecenie:
$fg %1
$fg 23123
lub zakończyć jego wykonywanie poleceniem:
# kill %1
Prawa dostępu
Dokładny opis wyniku polecenia ls:
-rwxrwxrwx 2 janek users 193286 Mar 19 2002 nowy.txt
Rodzaj pliku
Prawa dostępu do pliku
Liczba twardych wiązań
Właściciel
Grupa
Rozmiar w bajtach
Data/godzina ostatniej modyfikacji
Nazwa pliku
Linux z natury jest systemem zorientowanym na wielu użytkowników. W katalogu /home mogą mieć swoje miejsce nawet setki użytkowników, współużytkujących aplikacje, drukarki, sieć i inne usługi oferowane w pozostałej części systemu plików. Aby zapobiec myszkowaniu po cudzym katalogu macierzystym lub skasowaniu (przypadkowym lub nie) plików/katalogów posługujemy się prawami dostępu.
W wyniku polecenia ls -l w pierwszej kolumnie ukazuje się ciąg liter.
Aby zrozumieć wyświetlany ciąg znaków, trzeba go najpierw w myśli podzielić na cztery sekcje. Pierwszą sekcję stanowi pierwszy znak, określający rodzaj pliku (d,-,l). Następne trzy sekcje mają po trzy znaki i określają prawa dostępu dla trzech kategorii użytkowników.
Linux klasyfikuje użytkowników na trzy kategorie: właściciel pliku, grupa do której należy właściciel oraz pozostali użytkownicy:
właściciel jest użytkownikiem, który utworzył dany plik
grupa jest zbiorem użytkowników, którzy wspólnie pracują nad pewnymi plikami. Określając zezwolenia grupowe można zapobiec dostępowi do plików ze strony nie upoważnionych użytkowników; jednocześnie dostęp ten może być otwarty dla współpracowników.
Ostatni zbiór zezwoleń dotyczy dowolnych użytkowników systemu.
Podobnie jak istnieją trzy rodzaje użytkowników, są również trzy rodzaje zezwoleń: odczyt, zapis i wykonywanie.
prawo odczytu - wskazywane przez r, oznacza, że użytkownik ma prawo otwierania pliku i przeglądania jego zawartości, jednak nie może dokonywać w pliku zmian, łącznie z edytowaniem lub przenoszeniem pliku do innego katalogu. Można jednak skopiować plik i wprowadzać zmiany w kopii,
prawo zapisu - (w)- oznacza, że użytkownik może wprowadzać zmiany w pliku, łącznie z edytowaniem, przenoszeniem lub usuwaniem,
wykonywanie -(x)- oznacza jedną z dwóch rzeczy, zależnie od tego, czy chodzi o plik czy tez o katalog. Zezwolenie na wykonywanie w odniesieniu do pliku wykonywalnego (na przykład aplikacji) oznacza, że użytkownik ma prawo uruchamiania danego programu. W przypadku katalogu zezwolenie to oznacza, że użytkownik może otworzyć katalog i przejrzeć jego zawartość.
Prawa odczytu i wykonywania w odniesieniu do katalogów współdziałają, więc jeśli nadajemy jakieś prawa, nadajmy oba lub żadnego.
Kreska (-) oznacza, że dana kategoria użytkowników nie ma określonych praw dostępu.
!!! W stosunku do łącz symbolicznych zezwolenia nie mają znaczenia; ważne są jedynie zezwolenia dotyczące pliku docelowego. Domyślnie, w odniesieniu do łącz symbolicznych wyświetlane są wszystkie zezwolenia !!!
Zmiana właściciela, grupy i praw dostępu
Polecenie chown zmienia właściciela pliku, a polecenie chgrp grupę. W Linuksie tylko użytkownik uprzywilejowany (root) może korzystać z polecenia chown, aby zmieniać prawa własności do pliku, lecz każdy użytkownik może zmieniać grupę do której należy.
Aby zmienić właściciela i grupę pliku wykonaj:
# chown użytkownik plik
# chgrp grupa plik
lub
# chown użytkownik.grupa plik
Polecenie służące do zmiany praw dostępu do pliku to chmod.
$chmod +x plik
Znak + oznacza : dodaj prawo dostępu, a x wskazuje, które prawo doda.
Jeśli wszystkich chcesz pozbawić prawa do wykonywania, użyj znaku minus zamiast plus:
$ chmod -x plik
To polecenie przypisuje prawo dostępu wszystkim poziomom - użytkownikowi, grupie oraz innym.
Możesz przydzielić prawo tylko sobie (właścicielowi) za pomocą polecenia:
$ chmod u+x plik
$ chmod ug+x plik
$ chmod ug+rwx plik
Możesz przyznać prawo odczytu sobie wykorzystując tzw. tryb absolutny
$ chmod 400 plik
$ chmod 444 plik - dla wszystkich prawo odczytu
Aby określić domyślny tryb, przypisywany każdemu plikowi, który utworzysz należy wydać polecenie: umask lub umieścić je w pliku startowym powłoki.
Polecenie umask ma takie argumenty jak polecenie umask w trybie absolutnym, ale wartości tych bitów są zanegowane.