08.DOC

(150 KB) Pobierz

 

Rozdział 8.
System plików









              175










Rozdzia³ 8. ¨ System plików              175

Ed Trejis i Tim Parker

W tym rozdziale:

u        Pliki – informacje ogólne             

u        Katalogi – informacje ogólne             

u        Poruszanie się po systemie plików             

u        Tworzenie i usuwanie plików             

u        Usuwanie plików i katalogów             

u        Ważne katalogi systemu Linux             

Aby zrozumieć działanie Linuxa i używać go w stopniu więcej niż podstawowym, musisz wiedzieć, czym w Linuxie są pliki i jak są one zorganizowane. Jeśli pracowałeś wcześniej z innymi systemami operacyjnymi, takimi jak DOS czy Windows, znasz już tę problematykę, ponieważ zastosowana w nich koncepcja plików i katalogów bazuje na rozwiązaniu przyjętym w systemie UNIX. Jak się jednak przekonasz, UNIX-owy (i Linuxowy) system plików jest jednak o wiele bardziej elastyczny, niż systemy wykorzystywane w DOS-ie i Windows.

Pliki – informacje ogólne

Najprostsza koncepcja pliku – z którą pewnie spotkałeś się w innych systemach operacyjnych – to odrębny zbiór danych znajdujący się na dysku twardym. Słowo „odrębny” oznacza, że w systemie istnieć może wiele plików, ale ich zawartości nie mogą się pokrywać. Wynika stąd, że niezbędna jest metoda ich identyfikacji. W Linuxie, pliki identyfikowane są poprzez nazwę i położenie (miejsce) w systemie plików. W każdym miejscu (lub katalogu) może istnieć co najwyżej jeden plik o danej nazwie. Przykładowo, jeśli stworzysz plik o nazwie opowiadanie, a następnie do głowy wpadnie Ci inny świetny pomysł, musisz następny plik nazwać jakoś inaczej, np. opowiadanie2, albo umieścić go w innym katalogu (jeżeli nie chcesz zapisać go na miejsce starego, tracąc jego zawartość bezpowrotnie).

Popularne typy plików

Pliki mogą zawierać bardzo różne rodzaje informacji. Najczęściej w systemie Linux będziesz miał do czynienia z trzema typami plików.

u        Pliki użytkowników. Są to pliki, które tworzysz i modyfikujesz; w najprostszym przypadku mogą one zawierać tekst lub liczby – tego typu pliki nauczysz się tworzyć w dalszej części tego rozdziału. Bardziej skomplikowane pliki użytkowników muszą być interpretowane przez inne programy, by można było zrozumieć ich zawartość. Pliki pochodzące z arkuszy kalkulacyjnych nie zawierają na pierwszy rzut oka nic oprócz dziwnych znaczków, jeśli oglądać je bezpośrednio. By z nimi pracować, musisz uruchomić arkusz kalkulacyjny, który będzie umiał je zinterpretować.

u        Pliki systemowe. Zawierają one informacje (najczęściej w postaci tekstu ASCII), które są czytane i używane przez Linuxa, na przykład po to, by stwierdzić, kto ma prawo zalogować się do systemu. Jako administrator jesteś odpowiedzialny za modyfikowanie ich zawartości. Przykładowo, kiedy dodajesz do systemu nowego użytkownika, modyfikujesz plik /etc/passwd, zawierający właśnie informacje o użytkownikach. Zwykli użytkownicy raczej nie mają do czynienia z plikami tego typu, za wyjątkiem ich własnych plików startowych znajdujących się w katalogach domowych (macierzystych).

u        Pliki wykonywalne. Zawierają one kod, który może być wykonany przez komputer i przeważnie nazywane są po prostu programami. Polecenie wykonania takiego pliku nakazuje komputerowi zrealizowanie zawartych w nim instrukcji. Mimo że zawartość pliku wykonywalnego jest zupełnie niezrozumiała dla człowieka, jest jednak całkowicie jasna (przynajmniej powinna być) dla komputera. Tworzenie lub modyfikowanie plików tego typu wymaga specjalnych narzędzi. Dowiesz się o nich więcej w części piątej, „Linux dla programistów”.

Choć podzieliliśmy pliki na trzy kategorie, powinieneś zdawać sobie sprawę, że z punktu widzenia systemu plików nie różnią się one niczym. Każdy plik zawiera po prostu pewne dane zapisane na dysku twardym. To, co w jest w nim faktycznie zapisane, nie ma dla systemu znaczenia aż do momentu, gdy zechcesz użyć takiego pliku. Na przykład, interpreter poleceń bash potrafi uruchomić dowolny plik wykonywalny, ale może nie być w stanie zinterpretować pliku systemowego czy pliku z danymi użytkownika. Pliki danych zasadniczo zrozumiałe są tylko dla programów, które je utworzyły, nie są natomiast zrozumiałe dla samego systemu operacyjnego. Jedyne odstępstwo od tej reguły to pliki z danymi używane podczas uruchamiania i pracy systemu, których zawartość jest zrozumiała dla Linuxa.

Nazwy plików

W systemie Linux nazwy plików mogą mieć do 256 znaków długości. Mogą zawierać małe i wielkie litery, cyfry oraz kilka innych znaków (na przykład myślnik, podkreślenie, kropka czy spacja) Choć możesz używać nazw plików o długości do 256 znaków, musisz zdawać sobie sprawę z dwóch ograniczeń.

Po pierwsze, nie wszystkie znaki w nazwie są znaczące. Jeśli masz dwie nazwy plików o długości 250 znaków, różniące się tylko ostatnim znakiem, Linux potraktuje je jako jednakowe. Dzieje się tak, ponieważ rozpoznaje on pliki na podstawie pierwszych 32 (w niektórych wersjach 64) znaków nazwy. Reszta nazwy pliku jest po prostu dla wygody użytkownika; Linux zapisuje ją, ale nie wykorzystuje podczas identyfikacji pliku.

Po drugie, musisz pamiętać, że nazwy czasem trzeba wpisywać. Zdrowy rozsądek podpowiada, by nie używać nadmiernie długich nazw. Jeśli posiadasz plik zawierający dane statystyczne z lutego, lepiej nazwać go luty_stat (lub dane_luty), niż dane_statystyczne_ z_lutego. Oczywiście z punktu widzenia systemu druga nazwa jest równie dobra jak pierwsza.

Nazwy plików nie zawierają zwykle zarezerwowanych znaków specjalnych, takich jak gwiazdka, znak zapytania, lewy ukośnik (\) i spacja, ponieważ mają one szczególne znaczenie dla interpretera poleceń. Dwa z nich zostały omówione dokładniej w poprzednim rozdziale, przy okazji dyskutowania symboli wieloznacznych; inne zostaną przedstawione w rozdziałach poświęconych powłokom systemu. Choć możliwe jest tworzenie plików, których nazwy zawierają te znaki, nie jest to zalecane, gdyż są one potencjalną przyczyną problemów dla systemu operacyjnego i aplikacji.

Katalogi – informacje ogólne

Linux, podobnie jak wiele systemów komputerowych, organizuje pliki w katalogi. O katalogach można myśleć jak o szufladach w kartotece, zawierających teczki – pliki z danymi. Pomiędzy biurową kartoteką a linuxowym systemem plików jest jednak zasadnicza różnica: szuflada raczej nie zawiera w sobie innej szuflady, natomiast katalog może zawierać inne katalogi. W systemie Linux istnieje de facto jeden główny katalog, który zawiera wszystkie inne katalogi wchodzące w skład systemu plików – bezpośrednio lub poprzez inne katalogi.

Katalogi nadrzędne i podkatalogi

Jeśli w katalogu A znajduje się katalog B, mówimy, że B jest podkatalogiem A, oraz że A jest katalogiem nadrzędnym katalogu B. Z tymi określeniami spotkasz się jeszcze wiele razy.

W Linuxie nie ma formalnego ograniczenia głębokości zagnieżdżenia katalogów, podobnie jak nie ma ograniczenia dla liczby plików w katalogu. Limitem jest tylko ilość wolnego miejsca na dysku twardym. Katalog może zawierać dowolną liczbę podkatalogów, każdy z nich znów nieograniczoną liczbę własnych podkatalogów i tak dalej. W każdym katalogu czy podkatalogu może znajdować się dowolna ilość plików. Kluczem do zrozumienia sytemu plików w Linuxie jest fakt, że istnieje jeden katalog na najwyższym poziomie, który w swoich podkatalogach i podkatalogach podkatalogów itd. zawiera cały system plików.

Katalog główny

W systemie Linux katalog zawierający wszystkie inne katalogi nazywany jest katalogiem głównym (ang. root directory). Jest on nadrzędny dla wszystkich innych katalogów; każdy z nich znajduje się na którymś z poziomów jego podkatalogów. Katalog główny oznaczany jest symbolem /.

Struktura katalogów bywa też nazywana drzewem katalogów (ang. directory tree), gdyż rozgałęzia się ona na kształt drzewa, począwszy od katalogu głównego (ang. root – korzeń). Czasem jest ona również nazywana strukturą hierarchiczną, ponieważ istnieje w niej hierarchia poziomów, z katalogiem głównym (/) stojącym na samej górze.

Na koniec jeszcze krótka uwaga. Otóż w Linuxie (a zatem i w tej książce) często używa się określenia „system plików” (ang. file system) w miejsce „struktury katalogów” (directory structure). Wynika to z pewnych uwarunkowań historycznych (określenie file system używane jest w UNIX-ie).

Jak nazywane są katalogi

Nazwy katalogów podlegają takim samym regułom jak nazwy plików. Mogą zawierać małe i wielkie litery, cyfry oraz takie znaki, jak myślnik, kropka czy podkreślenie. Linux w zasadzie nie odróżnia nazw katalogów od nazw plików. Podobnie jak w przypadku plików, w systemie może znajdować się dowolna ilość katalogów o takich samych nazwach, pod warunkiem, że nie znajdują się one w tym samym katalogu nadrzędnym.

Znak / (ang. slash, ukośnik) jest używany do wskazywania na pliki i katalogi znajdujące się w innych katalogach. Przykładowo, usr/bin oznacza, że bin to coś, czego należy szukać w katalogu usr. Nie jest wcale powiedziane, czy jest to plik, czy katalog, ale wiadomo na pewno, że katalogiem jest usr (bo w pliku nie może być zawarty inny plik ani katalog). Jeśli dana jest ścieżka dostępu usr/bin/grep, wiadomo, że usr i bin to nazwy katalogów, ale niczego nie można powiedzieć na pewno o identyfikatorze grep. Polecenie ls, wyświetlając zawartość katalogu, zaznacza podkatalogi, pokazując przy ich nazwach znak / (czasem wymaga to podania opcji –F); na przykład jeśli bin jest podkatalogiem katalogu bieżącego, zostanie wyświetlony zostanie tekst bin/, co sugeruje, że może istnieć plik lub katalog o nazwie bin/bash, czyli że bin/ jest katalogiem.

Jak wspomniano wcześniej, katalog główny oznaczany jest symbolem / i nie ma innej nazwy. Łatwo jest określić, czy znak / jest użyty do rozdzielenia nazw katalogów, czy oznacza katalog główny. Jeśli nie znajdują się przed nim żadne inne identyfikatory, musi być to katalog główny. Na przykład /usr oznacza podkatalog usr w katalogu głównym, zaś /usr/bin oznacza coś o nazwie bin, znajdujące się w katalogu usr, który z kolei jest podkatalogiem katalogu głównego. Katalog główny, z definicji, nie może być podkatalogiem żadnego innego katalogu.

Katalog domowy

W systemie Linux każdy użytkownik posiada swój własny katalog, nazywany katalogiem domowym (macierzystym). W tym katalogu można przechowywać swoje pliki i zakładać podkatalogi. Użytkownik ma zazwyczaj pełną kontrolę nad tym, co znajduje się w jego katalogu domowym. Zwykle nie są tam przechowywane żadne pliki należące do innych użytkowników ani pliki systemowe, więc można tworzyć i usuwać pliki i katalogi według uznania.

 

Katalog domowy nie zapewnia prywatności. Normalnie każdy użytkownik może wejść do katalogu innego użytkownika i czytać (a także kopiować) jego pliki (choć nie może ich usuwać ani zmieniać). Kiedy Linux udostępnia katalog domowy, daje jakby własne biuro, które nie jest zamknięte, podobnie jak wszystkie szafki i szuflady.

Jeśli chcesz zachować prywatność, musisz zablokować dostęp do katalogu domowego. Temat ten jest omówiony w rozdziale 9. „Prawa dostępu do plików i katalogów”. Zaglądanie do czyjegoś katalogu domowego jest uważane za niegrzeczne i wścibskie, tak jak zaglądanie do czyjegoś biurka, ale świat jest pełny wścibskich ludzi.

Należy również wziąć pod uwagę to, że każdy użytkownik zalogowany jako root może czytać i manipulować wszystkimi plikami w systemie. Jeśli nie możesz zaufać administratorowi, to po prostu nie używaj systemu.

Położenie katalogu domowego w systemie plików nie może być zmienione przez użytkownika. Dzięki temu zapewniony jest względny porządek; nie bez znaczenia są również kwestie związane z bezpieczeństwem. Położenie katalogów domowych zależy od wersji Linuxa oraz upodobań administratora. Zwykle są one podkatalogami katalogu /home lub /usr. Po zalogowaniu się do systemu bieżącym katalogiem jest właśnie katalog domowy.

Poruszanie się po systemie plików

Poruszanie się po systemie plików w Linuxie jest bardzo proste. Wymaga opanowania jedynie dwóch poleceń, z których jedno nie wymaga żadnych parametrów.

Polecenie pwd – gdzie to ja jestem

Wpisz w wierszu poleceń polecenie pwd. Zostaną wyświetlone komunikaty:

 

darkstar:~$  pwd
/home/burek
darkstar:~$

Informacja, którą otrzymałeś, oznacza, że katalogiem bieżącym jest /home/burek (jeśli logujesz się jako użytkownik o identyfikatorze innym niż burek, zamiast burek wyświetlony zostanie tenże identyfikator). Jest to Twój katalog domowy. Znajdujesz się w nim zawsze po zalogowaniu się do systemu.

Nazwa pwd pochodzi od angielskich słów print working directory (wyświetl bieżący katalog) – twórcy UNIX-a jak zwykle skrócili ją, by była łatwiejsza do wpisania. Zamiast terminu katalog bieżący czasem używa się określenia katalog aktualny –mają one to samo znaczenie.

Możesz się zastanawiać, co to właściwie jest katalog bieżący. Określenie to oznacza, że wszystkie wydane polecenia będą domyślnie działać w tym właśnie katalogu. Po wydaniu polecenia ls wyświetlone zostaną informacje o zawartości katalogu bieżącego. Bieżący katalog zmienić można poleceniem cd, ale o tym za chwilę.

Absolutne i relatywne ścieżki dostępu

Jeśli podana zostanie tylko nazwa pliku, Linux szuka go w bieżącym katalogu. Polecenie more mojplik wyświetli na ekranie zawartość pliku mojplik, ale pod warunkiem, że znajduje się on w bieżącym katalogu – w przeciwnym przypadku program more nie będzie mógł go odnaleźć.

Czasem jednak chodzi o plik zapisany w jakimś innym miejscu. Załóżmy, że założyłeś katalog ksiazka, w którym znajduje się plik rozdzial1. Aby obejrzeć jego zawartość, powinieneś wydać polecenie more ksiazka/rozdzial1...

Zgłoś jeśli naruszono regulamin