Pliki

Jeśli jesteśmy nowym użytkownikiem, to nasz katalog macierzysty (tak jak to widzieliśmy podczas poprzedniej lekcji) będzie pusty. Pora więc założyć w nim jakieś pliki.

Tworzenie plików

Utworzymy teraz kilka plików. Zwykle używa się do tego edytorów, dla naszych potrzeb wystarczy jednak systemowe polecenie cat. Każde polecenie używa dwóch strumieni danych: standardowego wejścia do wczytywania danych (o ile są one potrzebne, dotychczas nie poznaliśmy takich poleceń) oraz standardowego wyjścia do wypisywania wyników. Normalnie oba te strumienie powiązane są z terminalem użytkownika.

Dotychczas poznane polecenia nie używały standardowego wejścia, całą ewentualnie potrzebną informację otrzymując w argumentach. Używały natomiast standardowego wyjścia do wypisywania swoich wyników, na przykład polecenie ls wypisywało na nie zawartość katalogu, dzięki czemu mogliśmy ją oglądać na ekranie terminala.

Polecenie cat używa również standardowego wejścia. Powoduje ono przepisanie swojego standardowego wejścia (czyli normalnie danych z klawiatury) na swoje standardowe wyjście (normalnie ekran terminala).

$ cat
Pierwsza linia.
Pierwsza linia.
Druga linia.
Druga linia.
Ostatnia linia.
Ostatnia linia.
^D
$ _

Akord <CTRL-D> napisany na początku linii służy do sygnalizowania końca danych. Jest to logiczny koniec danych, umożliwiający zakończenie ich wprowadzania.

Zauważmy, że każda linia wyświetlona została dwukrotnie. Pierwszy raz dzięki temu, że znaki wprowadzane z klawiatury są natychmiast wyświetlane (pozwala to piszącemu korygować na bieżąco błędy pisania). Drugie wyświetlenie natomiast to wynik działania polecenia cat --- przesłanie gotowej linii na standardowe wyjście, którym także jest ekran terminala.

Standardowe wejście i wyjście polecenia można zmienić, co właśnie wykorzystamy. Zmianę powiązania standardowych strumieni nazywamy ich przeadresowaniem. Przeadresowanie standardowego wyjścia powinno podawać nazwę urządzenia lub pliku, na który mają być wypisywane wyniki. Nazwę tę podajemy jako argument polecenia, poprzedzając ją znakiem >, jak w przykładzie poniżej.

$ ls
$ cat >postacie
Krzyś
Kubuś Puchatek
Prosiaczek
Kłapouchy
Królik
Sowa Przemądrzała
^D
$ ls
archiwum
postacie
$ _

Zauważmy, że tym razem linie nie były wyświetlane dwukrotnie, ponieważ standardowym wyjściem był plik postacie. Wynikiem wykonania polecenia było utworzenie tego pliku i zapisanie na nim linii z wejścia. Przekonajmy się, że tak istotnie było.

$ cat postacie
Krzyś
Kubuś Puchatek
Prosiaczek
Kłapouchy
Królik
Sowa Przemądrzała
$ _

Tym razem użyliśmy argumentu polecenia cat. Polecenie cat przepisuje treść pliku wskazanego argumentem na swoje standardowe wyjście. Jeśli jednak nie podaliśmy żadnego argumentu, to argumentem domyślnym jest standardowe wejście. Utwórzmy jeszcze jeden plik.

$ cat nowe.postacie
Kangurzyca
Maleństwo
Tygrys
^D
$ ls
archiwum
nowe.postacie
postacie
$ _

Polecenie cat może mieć także kilka argumentów. Powinny być one nazwami plików. Treść tych plików wypisywana jest po kolei na standardowe wyjście.

$ cat postacie nowe.postacie
Krzyś
Kubuś Puchatek
Prosiaczek
Kłapouchy
Królik
Sowa Przemądrzała
Kangurzyca
Maleństwo
Tygrys
$ cat postacie nowe.postacie >wszyscy
$ ls
archiwum
nowe.postacie
postacie
wszyscy
$ cat wszyscy
Krzyś
Kubuś Puchatek
Prosiaczek
Kłapouchy
Królik
Sowa Przemądrzała
Kangurzyca
Maleństwo
Tygrys
$ _

Przeadresowanie powinno zawsze znajdować się na końcu listy argumentów polecenia.

Przeglądanie plików

Przeglądanie większych plików poleceniem cat jest niewygodne. Wyświetlana informacja zbyt szybko przesuwa się po ekranie. Można oczywiście skorzystać z akordów <CTRL-S> i <CTRL-Q>. Istnieją jednak dwa polecenia more i pg, specjalnie przystosowane do oglądania większych plików (w Linuksie używa się raczej polecenia less).

Przedtem jednak musimy mieć taki plik. Zamiast tracić czas na pisanie go, spróbujmy wykorzystać do jego utworzenia systemowe polecenie man. Normalnie pisze ono na ekran, możemy mu jednak przeadresować standardowe wyjście, na przykład na plik opis.man.

$ man echo >opis.man
$ ls
archiwum
nowe.postacie
opis.man
postacie
wszyscy
$ _

Polecenia more i pg spełniają te same funkcje, różniąc się minimalnie sposobem reakcji na poszczególne klawisze. Oba wyświetlają pojedynczą porcję linii z pliku tak, aby wypełnić ekran, a następnie czekają na naciśnięcie klawisza sterującego. Dla polecenia pg jest to klawisz <Return>, zaś dla polecenia more podłużny klawisz spacji. Po naciśnięciu klawisza wyświetlana jest kolejna porcja informacji.

$ pg opis.man
...
<Return>
...
...
$ more opis.man
...
<Spacja>
...
...
$ _

Argumentem obu poleceń jest nazwa pliku do obejrzenia.

Aby obejrzeć początek pliku możemy użyć polecenia head. Przy okazji przypomnimy sobie pojęcie opcji -- specjalnej postaci argumentu, rozpoczynającej się od myślnika. Polecenie head używa opcji do podania liczby linii do wypisania.

$ head -3 wszyscy
Krzyś
Kubuś Puchatek
Prosiaczek
$ _

Dualne polecenie tail pozwala obejrzeć kilka ostatnich linii pliku. Pozwala to czasem szybko sprawdzić, czy jest on kompletny.

$ tail -4 wszyscy
Sowa Przemądrzała
Kangurzyca
Maleństwo
Tygrys
$ _

Poleceniami head oraz tail można też tworzyć nowe pliki. Korzysta się wtedy z możliwości przeadresowania standardowego wyjścia, na które wypisywany jest wybrany fragment pliku.

$ head -3 wszyscy >niektórzy
$ cat niektórzy
Krzyś
Kubuś Puchatek
Prosiaczek
$ _

Inne sposoby operowania zawartością plików poznamy podczas lekcji piątej.

Kopiowanie i usuwanie plików

Opiszemy teraz kilka poleceń, które nie wnikają w zawartość plików, traktując je jako całości. Zaczniemy od polecenia kopiowania pliku.

Przydaje się ono do zrobienia zapasowej kopii pliku. Takie zapasowe kopie plików powinny być przechowywane w archiwum. Archiwizacji poświęcona jest osobna lekcja, na razie zaś zapasową kopię przechowywać będziemy w katalogu macierzystym. Pliki można kopiować poleceniem cp.

$ cp postacie postacie.kop
$ cp niektórzy niektórzy.kop
$ ls
archiwum
niektórzy
niektórzy.kop
nowe.postacie
opis.man
postacie
postacie.kop
wszyscy
$ _

Można też (ale jest to mniej wygodne) użyć do kopiowania polecenia cat.

$ cat wszyscy >wszyscy.kop
$ ls
archiwum
niektórzy
niektórzy.kop
nowe.postacie
opis.man
postacie
postacie.kop
wszyscy
wszyscy.kop
$ _

Zbędne pliki warto usuwać, bowiem zajmują one miejsce na dysku. Całkowite zapełnienie dysku prowadzi do katastrofy, bowiem przestaje być możliwa normalna praca systemu. Użytkownikom mającym tendencję do nadmiernego zapełnienia dysku administrator systemu może więc ustawić ograniczenie na rozmiar przestrzeni dyskowej wykorzystywanej przez ich pliki.

Lepiej unikać tej niedogodności, dlatego usuniemy niepotrzebne nam pliki. Rozpoczniemy od pliku opis.man.

$ rm opis.man
$ ls
archiwum
niektórzy
niektórzy.kop
nowe.postacie
postacie
postacie.kop
wszyscy
wszyscy.kop
$ _

Polecenie rm usuwa plik, którego nazwa została podana jako argument polecenia. Uwaga: usunięty plik nie może być odzyskany. Można podać więcej argumentów, usunięte zostaną wtedy wszystkie pliki o podanych nazwach.

$ rm niektórzy niektórzy.kop
$ ls
archiwum
nowe.postacie
postacie
postacie.kop
wszyscy
wszyscy.kop
$ _

Zmiana nazwy pliku

Czasami chcemy zmienić nazwę pliku (np. aby powrócić do poprzedniej zawartości zachowanej w kopii archiwalnej). Można by to zrobić kopiując plik, a następnie usuwając z katalogu macierzystego. Wygodniej będzie zrobić to poleceniem mv. Polecenie to przeznaczone jest również do przenoszenia plików w ramach struktury katalogów, ale tym zajmiemy się w następnym rozdziale.

Rozpoczniemy na razie od najprostszego przypadku. Zmienimy nazwę jednego z plików bez przenoszenia go do innego katalogu (czyli będzie to ,,przeniesienie'' w ramach tego samego katalogu).

$ mv nowe.postacie przybysze
$ ls
archiwum
postacie
postacie.kop
przybysze
wszyscy
wszyscy.kop
$ _

Argumentami polecenia były tu dotychczasowa i nowa nazwa pliku. Po wykonaniu polecenia plik przestał być widoczny pod dotychczasową nazwą nowe.postacie, zaś zaczął być widoczny pod nazwą przybysze. Wbrew swojej nazwie (ang. move) polecenie mv w tym przypadku nie ,,przeniosło'' pliku. Uwaga: gdyby przed wykonaniem polecenia mv (a także polecenia cp) istniał już plik o nazwie podanej drugim argumentem, jego dotychczasowa zawartość zostanie utracona.