08, ciekawostki, Linux - Ksiega Eksperta, Linux - ksiega eksperta, Linux - księga eksperta


Rozdział 8.
System plików


Ed Trejis i Tim Parker

W tym rozdziale:

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.

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.

0x01 graphic

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. Tak podana ścieżka nazywana jest relatywną (względną) ścieżką dostępu, ponieważ jest ona zależna od tego, w którym katalogu aktualnie się znajdujesz. Położenie pliku zostało podane względem katalogu bieżącego. Gdy zmienisz katalog bieżący, polecenie nie zadziała.

Istnieją dwie specjalne, zarezerwowane nazwy katalogów: „.” oraz „..”. Jedna kropka oznacza zawsze katalog bieżący, natomiast dwie kropki to katalog w stosunku do niego nadrzędny (jak używać tych nazw pokażemy w dalszej części tego rozdziału). Ścieżki dostępu zawierające te nazwy są z definicji ścieżkami względnymi.

Ścieżka dostępu, która jest prawidłowa bez względu na to, w jakim katalogu aktualnie się znajdujesz, nazywana jest ścieżką absolutną (czasem też pełną lub bezwzględną). Ścieżka taka zawsze rozpoczyna się od symbolu /, który - jak wiesz - oznacza katalog główny. Jeśli więc podasz ścieżkę /home/burek/ksiazka/rozdzial1, żaden program nie będzie miał wątpliwości, o jaki plik chodzi. Każdy plik w systemie posiada inną pełną ścieżkę dostępu (pełną nazwę). W podanym wyżej przykładzie Linux rozpocznie szukanie w katalogu głównym. Następnie znajdzie katalog home i na chwilę ustawi go jako bieżący. Potem poszuka katalogu burek, wejdzie do niego, znajdzie katalog ksiazka i dopiero po wejściu do tego katalogu będzie szukał pliku lub katalogu o nazwie rozdzial1. Pełna ścieżka dostępu jest swego rodzaju mapą, pozwalającą na odnalezienie pliku czy katalogu w systemie plików, bez względu na to, jak jest on rozbudowany.

Ktoś inny może mieć w swoim katalogu domowym katalog ksiazka, który również może zawierać plik rozdzial1. Używając ścieżki względnej, ksiazka/rozdzial1, nie można określić, o który z tych plików chodzi - zależy to od katalogu aktualnego. Jednak absolutne ścieżki dostępu do tych plików są różne, dajmy na to /home/burek/ksiazka/ rozdzial1 i /home/reksio/ksiazka/rozdzial1, nie pozostawiając żadnych wątpliwości. Pliki te zapisane są w dwóch różnych katalogach, a zbieżność nazw może być czysto przypadkowa. Mogą one oczywiście mieć zupełnie różne zawartości.

Idziemy na spacer: polecenie cd

Polecenie cd (ang. change directory, zmień katalog) pozwala na zmianę bieżącego katalogu. Jeśli pracowałeś wcześniej z systemem DOS, spotkałeś się już z tym poleceniem (tak, zostało ono przeniesione z UNIX-a!).

Jego składnia jest następująca:

cd <katalog>

Pomiędzy poleceniem cd a nazwą katalogu musi wystąpić spacja. Nazwa katalogu może być ścieżką absolutną lub względną. Oto przykład jego użycia.

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

Jak widać w powyższym przykładzie, rozpoczęliśmy nasz „spacer” w katalogu /home/ burek. Potem przeszliśmy poziom wyżej (używając symbolu „..”) - do katalogu /home. Następnie jeszcze poziom wyżej - do katalogu głównego. Wyżej już się nie da - próba zmiany katalogu na nadrzędny nie daje żadnych rezultatów.

Zauważ, że Linux zwykle podaje nazwę aktualnego katalogu w wierszu poleceń, więc nie trzeba co chwilę wpisywać polecenia pwd (będziemy to jednak robić w naszych przykładach, że by nie pozostawić żadnych wątpliwości). Nie jest to jednak bezwzględną regułą, ponieważ może być zmienione przez administratora.

Załóżmy, że chcesz przejść do jednego z podkatalogów katalogu domowego. Wrócimy więc do niego, a następnie przejdźmy do podkatalogu ksiazka:

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

W tym przykładzie, najpierw - używając pełnej ścieżki dostępu - zmieniliśmy katalog na /home/burek, a następnie weszliśmy do podkatalogu ksiazka. Ponieważ wiedzieliśmy, że katalog ksiazka jest podkatalogiem katalogu domowego, mogliśmy użyć krótszej ścieżki relatywnej. Gdy jednak chcesz uniknąć pomyłek, używaj ścieżek absolutnych, np.:

darkstar:~$ cd /usr/bin
darkstar:/usr/bin$ pwd
/usr/bin

Gdy podasz ścieżkę absolutną, polecenie zadziała prawidłowo bez względu na to, w jakim katalogu znajdujesz się, gdy je wydajesz. Katalog, w którym znajdziesz się po wydaniu polecenia cd .. zależy od tego, który katalog jest katalogiem bieżącym.

By przekonać się o skutkach zmiany katalogu bieżącego, wydaj polecenie ls. Lista plików jest bardzo długa. Polecenie ls wyświetla dane o zawartości katalogu bieżącego, czyli /usr/bin, w którym znajduje się o wiele więcej plików niż w Twoim katalogu domowym.

Wszędzie dobrze, ale w domu najlepiej

Istnieje pewna poręczna sztuczka, która - nie wiedzieć czemu - jest dość rzadko wykorzystywana przez użytkowników. Wydaj polecenie cd bez żadnych parametrów:

darkstar:/usr/bin$ cd
darkstar:~$ pwd
/home/burek

Polecenie cd bez parametrów zawsze przenosi Cię do katalogu domowego. Kiedy zagłębisz się bardzo w podkatalogi jakiegoś katalogu, możesz szybko wrócić do katalogu domowego, wpisując cd, albo do katalogu głównego, wydając polecenie cd /.

Znak ~ w wierszu poleceń ma szczególne znaczenie. Zastępuje on nazwę katalogu domowego. Mimo to nie ma powodu, by zamiast polecenia cd używać cd ~. Symbol ten bywa jednak przydatny w innych sytuacjach.

Linux symbolem ~ oznacza również katalog nadrzędny w stosunku do katalogów domowych użytkowników. Dzięki temu można użyć polecenia cd ~<użytkownik>, by przenieść się do katalogu domowego użytkownika o danym identyfikatorze. Jest to szczególnie przydatne w dużych systemach, w których katalogi domowe rozmieszczone są w katalogach innych niż /home (a nawet w kilku różnych katalogach).

Kiedy trzeba przejść do jakiegoś odległego katalogu, dobrze jest zrobić to w kilku krokach. Ułatwi to uniknięcie pomyłek podczas wpisywania nazw (czasem nawet trudno zorientować się, w którym miejscu wystąpił błąd). Zaoszczędzi również pisania w przypadku, gdy popełnisz jakiś błąd. Spójrzmy na następujący przykład:

darkstar:~$ cd /usr/docs/faq/unix
bash: /usr/docs/faq/unix: No such file or directory

A przecież dałbyś sobie głowę uciąć, że taki katalog istnieje. Spróbujmy inaczej:

darkstar:~$ cd /usr
darkstar:/usr$ cd docs
bash: docs: No such file or directory

A więc tu jest błąd. Spróbujmy go zidentyfikować:

darkstar:/usr$ ls
bin/ doc/ games/ info/ man/ sbin/ spool/

No tak. Katalog nie nazywa się docs, tylko doc.

darkstar:/usr$ cd doc
darkstar:/usr/doc$ cd faq/unix
darkstar:/usr/doc/faq/unix$ pwd
/usr/doc/faq/unix

Tworzenie i usuwanie plików

W Linuxie istnieje wiele sposobów tworzenia i usuwania plików. Niektóre z nich są tak łatwe, że trzeba bardzo uważać, by nie pozbyć się jakichś ważnych danych!

0x01 graphic

Przez następne podrozdziały przejdź bardzo uważnie, zalogowany jako zwykły użytkownik. Dopiero kiedy dokładnie zrozumiesz działanie podanych tu poleceń, będziesz mógł bezpiecznie używać ich zalogowany jako root.

W systemie Linux nie ma sposobu na przywrócenie usuniętych plików! Uważaj więc na wydawane polecenia.

Wróć do swojego katalogu domowego za pomocą polecenia cd. Upewnij się, że jesteś tam, gdzie powinieneś, wydając polecenie pwd.

W poprzednim rozdziale utworzyliśmy plik, wydając polecenie ls -l /bin >output. Spowodowało ono powstanie nowego pliku o nazwie output. Przekierowanie jest więc jedną z metod tworzenia plików.

A co w przypadku, jeśli chciałbyś do pliku zapisać tekst inny niż dane wyjściowe jakiegoś polecenia? Łatwym, choć niezbyt elastycznym sposobem jest użycie programu cat.

Polecenie cat

Polecenie cat jest jednym z najprostszych - a co za tym idzie - najużyteczniejszych poleceń Linuxa. Program ten pobiera znaki ze swojego wejścia (domyślnie jest to klawiatura) i przekazuje je na wyjście (domyślnie na ekran terminala). Do czego może służyć takie dziwadło? Spróbujmy. Uruchom program cat.

darkstar:~$ cat

Kursor przeniósł się do następnego wiersza, ale nic innego się nie stało. Polecenie cat oczekuje teraz na jakieś dane wejściowe, więc mu je podajmy:

hello
hello
co
co
asdf
asdf

Cokolwiek byśmy wpisali, zostanie jeszcze raz wyświetlone na ekranie po wciśnięciu klawisza Enter. Jak się z tego wydostać? Wciśnij ^D (Control+D). Jeśli nie jesteś na początku wiersza, będziesz to musiał zrobić dwa razy. ^D to w systemie Linux symbol końca pliku. Kiedy program cat natknie się w danych wejściowych na taki znak, wówczas uzna, że plik wejściowy się skończył i pora przejść do następnego. Jeśli nie ma następnego pliku, należy zakończyć działanie.

W naszym przykładzie cat pobierał dane z klawiatury i wypisywał je na ekran. Nie jest to zbyt użyteczne. Na szczęście jest to program o wiele bardziej elastyczny, niż mogłoby się wydawać.

0x01 graphic

Kiedy mówimy, że program zakończył działanie, mamy na myśli, że skończył on wykonywać wszelkie operacje i oddał sterowanie do interpretera poleceń. Może wydawać się dziwne, że mówimy „program zakończył działanie”, jeśli z punktu widzenia użytkownika to on zakończył działanie programu. Jest to pozostałość z wczesnych lat istnienia UNIX-a - programiści tworzący ten system mieli po prostu zwyczaj patrzeć na świat z perspektywy pisanych przez siebie programów.

Jak więc użyć programu cat do utworzenia pliku? Wystarczy przekierować jego wyjście:

darkstar:~$ cat >nowyplik
Ahoj, przygodo
jakis tekst

Można wpisać dowolną ilość tekstu. Kiedy skończysz, wciśnij w nowym wierszu klawisze ^D. Program cat zamiast na ekranie wyświetlać to, co pisałeś, posłał dane do pliku.

Chciałbyś teraz pewnie obejrzeć zawartość pliku nowyplik. Możesz oczywiście użyć w tym celu programów more lub less, ale dlaczego nie miałby zrobić tego program cat? W takim przypadku jego składnia jest następująca:

cat <nazwa_pliku_do_wyświetlenia>.

Spróbujmy:

darkstar:~$ cat nowyplik
Ahoj, przygodo
jakis tekst
darkstar:~$

Możliwe jest również dołączenie tekstu na koniec istniejącego pliku za pomocą symbolu >> (uwaga: znak ^D nie pojawi się na ekranie; został tu dodany dla poprawienia czytelności).

darkstar:~$ cat >>nowyplik
Inne wiersze tekstu
^D

darkstar:~$ cat nowyplik
Ahoj, przygodo
jakis tekst
Inne wiersze tekstu
darkstar:~$

Zobaczmy, co jeszcze potrafi program cat (jest to w zasadzie jego podstawowe przeznaczenie):

darkstar:~$ cat >innyplik
Calkiem inny tekst
^D
darkstar:~$

Spróbuj teraz wydać polecenia:

darkstar:~$ cat nowyplik innyplik > trzeciplik
darkstar:~$ cat trzeciplik
Ahoj, przygodo
jakis tekst
Inne wiersze tekstu
Calkiem inny tekst
darkstar:~$

Nazwa programu cat jest skrótem od angielskiego słowa concatenate, „czyli połącz, sklej”. Pobiera on wszystkie pliki z wejścia i skleja w jeden plik, przekazując go na wyjście.

Czasem jednak trzeba zmienić jeden wiersz tekstu w istniejącym pliku albo utworzyć większy, bardziej skomplikowany plik tekstowy. Trudno w takiej sytuacji korzystać z programu cat, który nie pozwala na poprawianie błędów powstałych w trakcie pisania. Powinieneś raczej użyć któregoś z edytorów tekstu dostarczanych z Linuxem. Są one omówione w rozdziale 16. „Edytory tekstu: vi i emacs”.

Tworzenie katalogów

Aby utworzyć nowy katalog, należy użyć polecenia mkdir. Jego składnia ma postać

mkdir <nazwa_nowego_katalogu>.

Utwórzmy w katalogu domowym podkatalog nowykat:

darkstar:~$ ls
innyplik nowyplik trzeciplik
darkstar:~$ mkdir nowykat
darkstar:~$ ls
innyplik nowykat/ nowyplik trzeciplik

0x01 graphic

Polecenie mkdir jest Ci pewnie znane z systemu MS-DOS. Mogło być tam skrócone do formy md. Mogłoby się wydawać, że w Linuxie skrót taki powinien również być dostępny, ponieważ jak dotąd wszystkie polecenia miały nazwy skrócone do granic możliwości. Tak jednak nie jest. Linux upiera się przy pełnej formie mkdir.

Jeśli często przełączasz się pomiędzy systemami Linux i DOS, warto używać w obu tych systemach polecenia mkdir - dzięki temu unikniesz pomyłek. Często również zdarzają się pomyłki polegające na tym, że w systemie MS-DOS użytkownik próbuje wydawać polecenia linuxowe, na przykład ls, zamiast ich DOS-owych odpowiedników.

Polecenie mkdir tworzy wpis dla podkatalogu w linuxowej tablicy zawierającej informacje o plikach i katalogach, nazywanej tablicą I-node. Żadne inne dane nie są na razie zapisywane na dysku, ponieważ katalog nie zawiera jeszcze żadnych fizycznych plików. Katalogi są używane w Linuxie jako udogodnienie dla użytkownika.

Parametrami polecenia mkdir mogą być ścieżki absolutne i relatywne, na przykład:

darkstar:~$ pwd
/home/burek
darkstar:~$ ls
darkstar:~$ mkdir ksiazka1
darkstar:~$ ls
ksiazka1/
darkstar:~$ mkdir /home/burek/ksiazka2
darkstar:~$ ls
ksiazka1/ ksiazka2/

W pierwszym przypadku użyliśmy ścieżki względnej, tworząc podkatalog ksiazka1 w katalogu bieżącym; w drugim - absolutnej, tworząc podkatalog ksiazka2 w tym samym miejscu. Obie metody dają taki sam wynik.

Przenoszenie i kopiowanie plików

Przenoszenie i kopiowanie plików to jedne z najczęściej wykonywanych przez administratora i użytkowników czynności. Polecenie mv służy do przenoszenia (co sprowadza się zazwyczaj do zmiany nazwy), a cp do kopiowania plików. Składnia obu poleceń jest podobna:

mv <źródło> <cel>

cp <źródło> <cel>

Jak widać, są to polecenia bardzo proste w użyciu. Oto kilka przykładów:

darkstar:~$ ls

innyplik nowykat/ nowyplik trzeciplik
darkstar:~$ mv innyplik przeniesionyplik
darkstar:~$ ls
nowykat/ nowyplik przeniesionyplik trzeciplik
darkstar:~$ cp trzeciplik xyz
darkstar:~$ ls
nowykat/ nowyplik przeniesionyplik trzeciplik xyz

Można teraz użyć polecenia cat (albo more czy less), by przekonać się, że zawartość pliku innyplik jest teraz w pliku przeniesionyplik, oraz że plik xyz ma taką samą zawartość jak plik trzeciplik.

Przenoszenie i kopiowanie plików może być nieco trudniejsze w momencie, gdy pliki znajdują się w różnych katalogach, ponieważ rzeczywiste nazwy plików zawierają pełną ścieżkę dostępu do nich. Mimo tego Linux pozwala na opuszczenie części pełnej nazwy pliku, dzięki czemu polecenia stają się nieco krótsze.

Przypuśćmy, że chcesz przenieść plik nowyplik do katalogu nowykat. Jeśli chcesz, aby zachował on swą nazwę, możesz wydać polecenie:

darkstar:~$ mv nowyplik nowykat/nowyplik

Ale łatwiej jest wpisać

darkstar:~$ mv nowyplik nowykat

ponieważ jest to polecenie krótsze. Ponieważ jako cel podana została nazwa katalogu, Linux domyśli się, że plik ma zostać do niego przeniesiony bez zmiany nazwy.

Można również użyć polecenia cd, zmieniając katalog na katalog docelowy, i z niego właśnie rozpocząć kopiowanie:

darkstar:~$ cd nowykat
darkstar:~/nowykat$ cp ../nowyplik .

Ten przykład nie jest już tak intuicyjny jak dwa poprzednie. Jako źródło podano ../nowyplik, czyli plik o nazwie nowyplik znajdujący się w katalogu nadrzędnym w stosunku do bieżącego. Jako cel został podany katalog bieżący (kropka na końcu polecenia). Innymi słowy, polecenie cp przechodzi poziom wyżej w strukturze katalogów, znajduje tam plik nowyplik, wraca i kopiuje go do bieżącego katalogu. Ponieważ taka procedura jest mniej intuicyjna, zwykle kopiowanie przeprowadza się, będąc w katalogu zawierającym plik źródłowy.

Podczas przenoszenia i kopiowania pliku można również zmienić jego nazwę w następujący sposób:

darkstar:~$ cp trzeciplik nowykat/innanazwa

Polecenie to utworzy kopię pliku trzeciplik, o nazwie innanazwa w katalogu nowykat.

0x01 graphic

Podczas kopiowania lub przenoszenia plików pomiędzy katalogami należy zawsze sprawdzić, czy katalog docelowy istnieje. Załóżmy, że tak nie jest; co się wtedy stanie? Spójrzmy na dwa przykłady.

Przypuśćmy, że do polecenia mv nowyplik nowykat wkradnie się literówka, i w efekcie zostanie wydane polecenie mv nowyplik mowykat. Plik nie zostanie wówczas przeniesiony do katalogu nowykat, zamiast tego jego nazwa zostanie zmieniona na mowykat.

Może zdarzyć się odwrotna sytuacja, kiedy nie zdajesz sobie sprawy, że istnieje katalog o danej nazwie. Załóżmy, że chcesz utworzyć w bieżącym katalogu kopię pliku tekstowego o nazwie plik.txt, nazywając ją kopia1. Należy w tym celu wydać polecenie cp plik.txt kopia1. Nie zadziała ono jednak zgodnie z oczekiwaniami, jeśli w katalogu bieżącym znajduje się podkatalog o nazwie kopia1 - wówczas w tym podkatalogu znajdzie się kopia pliku plik.txt, o takiej samej nazwie.

Polecenie mv jest o wiele bardziej wydajne niż polecenie cp, ponieważ tak naprawdę nie dotyka ono zawartości pliku, a jedynie zmienia jego nazwę (wliczając w nią pełną ścieżkę dostępu), informując system, że dane zapisane już na dysku mają być dostępne pod inną etykietą.

Kiedy używasz polecenia cp, tworzysz na dysku drugą fizyczną kopię danych. Jest to procedura trwająca o wiele dłużej, niż zmiana nazwy (choć w przypadku małych plików różnica jest niezauważalna). Nie warto kopiować plików, jeśli trzeba je tylko przenieść.

Przenoszenie i kopiowanie plików
za pomocą symboli wieloznacznych

Co zrobić, jeśli w katalogu jest 20 plików i trzeba skopiować je wszystkie do innego katalogu? Można w takim przypadku użyć symboli wieloznacznych: * oraz ?.

Jeśli chcesz skopiować wszystkie pliki znajdujące się w danym katalogu, użyj znaku *:

darkstar:~$ cp * /tmp

Powyższe polecenie kopiuje wszystkie pliki z bieżącego katalogu do podkatalogu tmp w katalogu głównym.

Można używać symbolu * w połączeniu z innymi literami po to, by wzorzec pasował tylko do niektórych plików. Załóżmy, że w katalogu znajdują się pliki ksiazka1, ksiazkapomysl, ksiazka-rozdzial-1 i wiersz.ksiazka. Jeśli trzeba skopiować pierwsze trzy pliki, powinieneś wydać polecenie cp ksiazka* /tmp. W miejsce tekstu ksiazka* Linux podstawi wszystkie nazwy plików znajdujących się w katalogu zaczynające się od liter ksiazka. Plik wiersz.ksiazka nie spełnia tego kryterium, nie zostanie więc skopiowany (ale zostałby skopiowany plik o nazwie ksiazka.wiersz).

Jak się okazało, polecenia cp i mv nie są skomplikowane, za to dość skomplikowane jest podawanie, jakich plików mają one dotyczyć. Jeśli wydaje Ci się to bardzo zawiłe, nie przejmuj się zbytnio. Nawet eksperci czasem mylą się przy wydawaniu tych „prostych” poleceń. Przećwicz podane przykłady i przemyśl je. Używanie symboli wieloznacznych rządzi się bardzo ścisłymi regułami, ale potrzeba chwili na ich zrozumienie i treningu, by stały się oczywiste.

Przenoszenie katalogów

Aby przenieść katalog, można użyć polecenia mvdir. Jego składnia jest następująca:

mvdir <katalog> <cel>.

Przenieśmy na przykład katalog nowykat z katalogu domowego do katalogu /tmp:

darkstar:~$ mvdir nowykat /tmp
darkstar:~$ cd /tmp
darkstar:/tmp$ ls
nowykat/

nowykat jest teraz podkatalogiem katalogu /tmp.

Podczas przenoszenia katalogu przenoszone są również wszystkie jego podkatalogi.

Aby zmienić nazwę katalogu nie przenosząc go, można użyć polecenia mv. Przykładowo, aby zmienić nazwę katalogu nowykat na starykat, należy wydać polecenie:

mv nowykat starykat

Wszystkie pliki będące wcześniej w katalogu nowykat znajdują się teraz w katalogu starykat.

Usuwanie plików i katalogów

Teraz, kiedy potrafisz już tworzyć pliki i katalogi, przyszedł czas by dowiedzieć się, jak usunąć wyniki Twoich zabaw.

Do usuwania plików służy polecenie rm <nazwa_pliku>. Na przykład polecenie

darkstar:~$ rm zdechla_kaczka

usuwa plik zdechla_kaczka z katalogu domowego. Polecenie

darkstar:~$ rm /tmp/zdechla_kaczka

usuwa plik o tej samej nazwie z katalogu /tmp.

Z tym poleceniem również można używać symboli wieloznacznych, ale pamiętaj, że może to spowodować mnóstwo kłopotów, jeśli polecenie zostanie wydane w złym miejscu. Na przykład polecenie

darkstar:~$ rm *

usuwa bezpowrotnie wszystkie pliki z katalogu domowego. Nie ma żadnej możliwości odzyskania ich, jeśli więc polecenie takie wydałeś przez pomyłkę, masz pecha. Polecenie rm należy wydawać bardzo ostrożnie.

Można używać łącznie ścieżek dostępu i symboli wieloznacznych, np. polecenie

darkstar:~$ rm /tmp/*kaczka

usuwa z katalogu /tmp wszystkie pliki, które na końcu nazwy mają słowo kaczka.

Kiedy plik zostanie usunięty, przepada na zawsze! Powinieneś więc pomyśleć dwa razy przed usunięciem każdego pliku. Jeśli chcesz uniknąć problemów, możesz stosować się do którejś z poniższych wskazówek.

darkstar:~$ ls *nic
drugie_nic picnic pierwsze_nic

Prawdopodobnie nie chodziło Ci o usunięcie pliku picnic, a stało by się tak, gdybyś nie sprawdził, co zostanie usunięte.

darkstar:~$ rm -i *nic
rm: remove `drugie_nic'? y
rm: remove `picnic'? n
rm: remove `pierwsze_nic'? y

Wpisanie y lub Y potwierdza usunięcie pliku, każdy inny znak traktowany jest jako odpowiedź przecząca. Niestety, metoda ta może być dość irytująca podczas usuwania większej ilości plików.

Usuwanie katalogów

Polecenie rm służy do usuwania plików. Jeśli spróbujesz za jego pomocą usunąć katalog, otrzymasz komunikat o błędzie. Do usuwania katalogów służy polecenie rmdir <katalog>. Zanim jednak będzie można usunąć dany katalog, należy usunąć z niego wszystkie pliki i podkatalogi. W przeciwnym przypadku otrzymasz komunikat:

rmdir: <katalog>: Directory not empty

Sytuacje takie jak ta mogą Cię nieco zdziwić:

darkstar:/home$ ls
burek/ reksio/ lopez/
darkstar:/home$ ls reksio
core proba obw1
darkstar:/home$ rm reksio/*
darkstar:/home$ ls reksio
darkstar:/home$ rmdir reksio
rmdir: reksio: Directory not empty
darkstar:/home$

Powodem wyświetlenia takiego komunikatu są pliki w katalogu reksio, których nazwa zaczyna się od kropki - czyli ukryte pliki systemowe. Nie są one normalnie wyświetlane przez polecenie ls, nie pasują też do wzorca *. Aby je zobaczyć, wydaj polecenie ls -a; polecenie rm .* pozwala je usunąć.

darkstar:/home$ ls -a reksio
./ ../ .bashrc .profile
darkstar:/home$ rm reksio/.*
rm: cannot remove '.' or '..'
darkstar:/home$ ls -a reksio
./ ../
darkstar:/home$ rmdir reksio
darkstar:/home$ ls
burek/ lopez/
darkstar:/home$

Problemy tego typu mogą zdarzać się przy pracach administracyjnych.

Czasem zachodzi potrzeba usunięcia katalogu mającego wiele poziomów podkatalogów. Z pomocą przyjdzie wtedy opcja r (ang. recursive) polecenia rm: rm -r <katalog>. Dany katalog zostanie usunięty wraz ze wszystkimi podkatalogami i plikami w nim zapisanymi.

0x01 graphic

Opcji -r polecenia rm należy używać tylko w wyjątkowych przypadkach. Pomyłkowo użyta może ona mieć katastrofalne konsekwencje. Przykładowo, jeśli jesteś zalogowany jako root i wydasz polecenie rm -r /, to będziesz miał okazję do powtórzenia procedury instalacyjnej. Wierz lub nie, ale takie sytuacje zdarzają się zaskakująco często.

Kompresja

Większość plików na dyskach CD-ROM z dystrybucją Linuxa przechowywanych jest w postaci skompresowanej, co umożliwia zapisanie większej ilości informacji. Jeśli pracowałeś w systemie DOS lub Windows, widziałeś pewno programy pozwalające na spakowanie wielu plików do jednego archiwum, takie jak PKZIP czy WINZIP. Te same techniki stosowane są w programach UNIX-owych od lat, nieco tylko różnią się nazwami i metodami kompresji.

Podczas instalacji Linuxa ogromna ilość plików zostaje rozpakowana na dysku twardym. Mimo tego nadal można na nim znaleźć pliki skompresowane.

Każdy plik z rozszerzeniem .gz, na przykład pak.gz, jest plikiem skompresowanym. By rozpakować ten typ pliku, wydaj polecenie gunzip <nazwa_pliku>, na przykład gunzip pak.gz. Polecenie to utworzy plik rozpakowany, nie posiadający już rozszerzenia .gz, czyli o nazwie pak. Aby ponownie skompresować plik, użyj polecenia gzip: gzip pak.

Innym rodzajem plików spakowanych są pliki z rozszerzeniem .zip. Można je rozpakować poleceniem unzip <plik>, a spakować poleceniem zip <plik>.

W systemie Linux dostępnych jest jeszcze kilka innych mechanizmów kompresji. Pliki kompresowane z zastosowaniem tych mechanizmów mają rozszerzenia .z oraz .Z (te dwa rozszerzenia nie są generowane przez ten sam program).

Ważne katalogi systemu Linux

Większość katalogów systemu Linux posiada standardowe nazwy. Inne systemy UNIX-owe zawierają takie same katalogi, a w nich podobne programy. Ten podrozdział omawia krótko kilka najważniejszych katalogów.

/

Jest to katalog główny. W nim i w jego podkatalogach znajduje się cały system plików. Nie zaśmiecaj go swoimi plikami!

/home

W tym katalogu znajdują się katalogi domowe użytkowników. W niektórych systemach UNIX-owych nazywa się on /usr lub /u.

/bin

Ten katalog zawiera wiele podstawowych programów linuxowych. Jego nazwa pochodzi od angielskiego słowa binaries, czyli pliki binarne, które mogą być wykonywane przez komputer.

/usr

W tym katalogu przechowywane są podkatalogi związane z użytkownikami; niektóre z nich opisane są w następnych podrozdziałach, z pozostałych najważniejsze są następujące katalogi:

docs zawiera dokumentację programów i inne przydatne informacje,

man strony man,

games różne zabawne programy.

/usr/bin

Katalog ten zawiera programy dostępne dla użytkowników.

/usr/spool

Ten katalog zawiera kilka podkatalogów: mail przechowuje pliki poczty, spool - pliki, które mają zostać wydrukowane, a uucp pliki, które mają zostać skopiowane do innego systemu UNIX-owego.

/dev

Linux traktuje wszystko, z czego można odczytywać lub zapisywać dane, jak pliki. Katalog /dev zawiera pliki urządzeń. Są to specjalne pliki, które obsługują fizyczne części komputera. Na przykład, kopiując zawartość jakiegoś pliku do pliku /dev/fd0, faktycznie wysyłasz go do stacji dysków. Twój terminal to jeden z plików /dev/tty. Partycje dysku twardego to /dev/hda0 itp. Nawet pamięć RAM jest urządzeniem i posiada odpowiedni plik.

Ciekawym urządzeniem jest /dev/null. Dane wysyłane do tego urządzenia wędrują do nikąd, są po prostu tracone.

/usr/sbin

W tym katalogu przechowywane są programy przeznaczone dla administratora.

/sbin

Tu przechowywane są programy uruchamiane automatycznie przez system Linux.

/etc

Ten katalog i jego podkatalogi zawierają systemowe pliki konfiguracyjne. Są one zazwyczaj plikami tekstowymi, mogą więc być edytowane przez administratora w celu zmiany konfiguracji systemu.

Podsumowanie

Teraz powinieneś już czuć się pewnie pracując z Linuxem. Zrozumienie i umiejętność poruszania się po systemie plików jest bardzo ważna; na szczęście prawie wszystkie systemy Linuxowe zorganizowane są w standardowy sposób.

Jeśli kiedyś natkniesz się na problem związany z plikami i katalogami, pamiętaj, że zawsze masz pod ręką strony man. Linux jest bardzo elastyczny, jeśli chodzi o tworzenie plików, podawanie ścieżek dostępu do plików i katalogów oraz ustawianie praw dostępu. Nie bój się eksperymentować (jeśli jesteś zalogowany jako normalny użytkownik). Każda operacja może zostać wykonana na wiele sposobów - nie poprzestawaj na podanych na papierze receptach.

Powinieneś również przejrzeć rozdział 9. „Prawa dostępu do plików i katalogów”, rozdział 10. „Programy użytkowe projektu GNU”, a także rozdział 13. „tcsh”, szczególnie jeśli zamierzasz tworzyć programy czy makropolecenia na bazie poleceń systemowych, albo jeśli chcesz dowiedzieć się czegoś więcej o pomocnych w obsłudze Linuxa mechanizmach wbudowanych w interpreter poleceń. Rozdział 16. zawiera również wiele użytecznych informacji o edytowaniu plików tekstowych.

Kiedy już zapoznasz się z powłoką i nabierzesz wprawy w manipulowaniu plikami i katalogami, możesz przejść do bardziej zaawansowanych tematów w części trzeciej, „Edycja i skład” i części ósmej, „Programowanie dla zaawansowanych”.

Praca z edytorami tekstów dostarczanymi z Linuxem omówiona jest w rozdziale 16. „Edytory tekstu: vi i emacs”.

O konfigurowaniu systemu X mówi rozdział 22. „Instalacja i konfiguracja XFree86”.

Jeśli chcesz dowiedzieć się czegoś więcej o administrowaniu systemem, zajrzyj do części szóstej, rozpoczynając od rozdziału 32. „Podstawy administracji systemem”.

Można wymyślić ścieżkę bezwzględną zawierającą te symbole, na przykład /usr/bin/../lib, ale takie konstrukcje nie mają zastosowania w praktyce (przyp. tłum.).

Użytkownik może również dokonać takiej zmiany (przyp. tłum.).

Chyba że plik przenoszony jest do podkatalogu zapisanego w innym fizycznym systemie plików, czyli np. na innym dysku twardym czy na dyskietce (przyp. tłum.).

178 Część II Poznawanie Linuxa

178 E:\Moje dokumenty\HELION\Linux Unleashed\Indeks\08.DOC

E:\Moje dokumenty\HELION\Linux Unleashed\Indeks\08.DOC 161

Rozdzia³ 8. System plików 167



Wyszukiwarka

Podobne podstrony:
43, ciekawostki, Linux - Ksiega Eksperta, Linux - ksiega eksperta, Linux - księga eksperta
34, ciekawostki, Linux - Ksiega Eksperta, Linux - ksiega eksperta, Linux - księga eksperta
58, ciekawostki, Linux - Ksiega Eksperta, Linux - ksiega eksperta, Linux - księga eksperta
26, ciekawostki, Linux - Ksiega Eksperta, Linux - ksiega eksperta, Linux - księga eksperta
10, ciekawostki, Linux - Ksiega Eksperta, Linux - ksiega eksperta, Linux - księga eksperta
57, ciekawostki, Linux - Ksiega Eksperta, Linux - ksiega eksperta, Linux - księga eksperta
29, ciekawostki, Linux - Ksiega Eksperta, Linux - ksiega eksperta, Linux - księga eksperta
46, ciekawostki, Linux - Ksiega Eksperta, Linux - ksiega eksperta, Linux - księga eksperta
60, ciekawostki, Linux - Ksiega Eksperta, Linux - ksiega eksperta, Linux - księga eksperta
36, ciekawostki, Linux - Ksiega Eksperta, Linux - ksiega eksperta, Linux - księga eksperta
49, ciekawostki, Linux - Ksiega Eksperta, Linux - ksiega eksperta, Linux - księga eksperta
62, ciekawostki, Linux - Ksiega Eksperta, Linux - ksiega eksperta, Linux - księga eksperta
D, ciekawostki, Linux - Ksiega Eksperta, Linux - ksiega eksperta, Linux - księga eksperta
55, ciekawostki, Linux - Ksiega Eksperta, Linux - ksiega eksperta, Linux - księga eksperta
28, ciekawostki, Linux - Ksiega Eksperta, Linux - ksiega eksperta, Linux - księga eksperta
61, ciekawostki, Linux - Ksiega Eksperta, Linux - ksiega eksperta, Linux - księga eksperta
42, ciekawostki, Linux - Ksiega Eksperta, Linux - ksiega eksperta, Linux - księga eksperta
03, ciekawostki, Linux - Ksiega Eksperta, Linux - ksiega eksperta, Linux - księga eksperta
31, ciekawostki, Linux - Ksiega Eksperta, Linux - ksiega eksperta, Linux - księga eksperta

więcej podobnych podstron