System operacyjny UNIX dla poczatkujacych i zaawansowanych, rozdzial3


Rozdzial

System plików

Charakterystyka systemu plików

W systemie L7NIX jeden logiczny system plików widziany przez użytkowników może składać się z kilku fizycznych systemów plików znajdujących się na różnych urządzeniach (rys. 3.1). Z kolei każde urządzenie fizyczne może być podzielone na urządzenia logiczne, a każde z nich może definiować własny system plików. Jednakże w systemie musi istnieć jeden wyróżniony system plików zawierający katalog pierwotny ­korzeń całego systemu. System ten znajduje się na dyskach niewymiennych i do niego są dołączane inne systemy plików przechowywane na nośnikach wymiennych, np. dyskietkach.

Dany logiczny system plików jest ciągiem bloków ponumerowanych kolejno 0 ... n, przy czym kolejne bloki stanowią:

• blok 0 (ang. boot block),

• blok nadrzędny (ang. super block),

• lista tzw. i-węzłów plików (ang. i-pode list), • bloki danych,

• obszar do wymiatania programów (ang. .swapping space).

Blok 0 jest zawsze zarezerwowany dla programu ładującego i startującego system. W bloku nadrzędnym zawarte są następujące informacje o systemie plików: • rozmiar w blokach,

nazwa urządzenia logicznego, nazwa systemu plików,

• rozmiar listy węzłów plików,

• wskaźnik na pierwszy element listy wolnych bloków, • wskaźnik na pierwszy element listy węzłów plików, • data ostatniej modyfikacji,

• data ostatniego dostępu, • rozmiar bloku.

N

W i.r b 04 A 3 b o, 0

Logiczny system plików

korzeń obszar dla wymia­tania

u

Urządzenia Urządzenia logiczne fizyczne

0x01 graphic

Składowe systemy plików

0x01 graphic

,5'Y.sdem plików 29

System operacyjny UNIX zaprojektowano tak, aby przede wsrystkim przetwarzał pliki, a więc każdy zbiór informacji traktuje on jako plik, przy czym nieważne, jak i na czym ta informacja jest zapisana. Informacja zewnętrzna o plikach (tj. nazwa, wielkość, właściciel, czas powstania i prawa dostępu) jest zapisana w katalogu (ang. directory), który sam jest plikiem. W ogólności, katalog jest plikiem zawierającym listę nazw plików wraz z odpowiednimi numerami węzłów informacyjnych (ang. i-pode) tych plików (rys. 3.2). Węzły informacyjne pliku będziemy dalej nazywać w skrócie i-węzłami pliku.

Bajty : 2 14

Nazwa pliku Numer węzła informacyjnego

Rys. 3.2. Budowa katalogu w systemie UNIX [13]

Informacja wewnętrzna pliku (dane, program, tekst dokumentu itp.) stanowi zawartość pliku. Interesujące jest, że plik w systemie UNIX nie ma struktury wewnętrznej, w szczególności nie dzieli się na mniejsze jednostki. Formalnie jest on ciągiem znaków zakończonym znakiem EOF (ang. F.nd-Of-File, Ctrl-d). Jedynymi znakami zawartymi w pliku są znaki umieszczone tam przez użytkownika. Ponieważ nie ma wstępnej alokacji miejsca na dysku, plik może mieć dowolną długość, w szczególnym przypadku może zajmować cały dysk.

System plików jest zorganizowany hierarchicznie, tzn. każdy plik wyższego poziomu może zawierać odsyłacze do plików niższego poziomu, a każdy plik niższego poziomu musi znajdować się w wykazie co najmniej jednego pliku wyższego poziomu. W praktyce katalogiem nadrzędnym wobec wszystkich innych jest tzw. katalog pierwotny (ang. rool - korzeń), zawierający wykaz katalogów kilku podstawowych rodzajów (rys.3.3):

bin - programy usługowe w wersji gotowej do wykonania (binarnej), • deo - pliki specjalne odpowiadające urządzeniom zewnętrznym,

• lih - programy biblioteczne, związane z językami wysokiego poziomu, wywołaniami systemowymi, obsługą wejścia/wyjścia,

• usr - wykaz wszystkich katalogów niższego poziomu, w których przechowują swoje pliki użytkownicy, zazwyczaj sporządzony według nazw użytkowników,

lmp - pliki tymczasowe, tzn. mające ograniczony czas istnienia, używane przez inne programy,

• elc - dane i programy podlegające szczególnej ochronie,

• inne katalogi - np. losl+ jodmd, zawierające pliki utracone, tzn. takie, które straciły właściwe powiązania z systemem plików.

Oprócz wymienionych katalogów w katalogu pierwotnym znajduje się jeden plik o nazwie onix - nie będący katalogiem. Jest to jądro systemu operacyjnego.

.3~ Rnzdziaf 3.

Pliki

Rys. 3.3. Hierarchiczna struktura systemu plików w systemie operacyjnym Unix

Pliki specjalne reprezentujące urządzenia zgrupowane są w katalogu ldev. Wpisane są w nim pliki pseudourządzeń i urządzeń rzeczywistych. Do pseudourządzeń należą między innymi:

ldevlconsole - konsola systemowa, na którą wyprowadzane są komunikaty systemowe,

~dev~kmem - odwzorowanie wirtualnej pamięci operacyjnej,

dev'swap - urządzenie logiczne reprezentujące obszar, do którego są wymiatane programy z pamięci operacyjnej,

~dev%tty - wirtualny terminal, z którego został zainicjowany proces.

Urządzenia rzeczywiste to:

/dev/fdn - stacja dysków elastycznych, i~lev~hdn - stacja dysków twardych, /dev/lp - drukarka,

. ldevlmtn - stacja taśm magnetycznych.

Na rys. 3.3 w katalogu pierwotnym występuje plik o nazwie u.sr. W naszym przypadku jest to katalog zawierający wykaz programów i innych katalogów pracowników i studentów instytutu naukowego. Katalogi podrzędne w stosunku do katalogu usr dzielą się na dwie grupy: katalog teacher.s - zawierający pliki i katalogi pracowników oraz katalog .students - zawierający pliki i katalogi studentów.

0x01 graphic

Katalogi

~1'vslem plików

W każdym katalogu (z wyjątkiem pierwotnego) występuje ponadto element domyślny, stanowiący nazwę katalogu nadrzędnego (ang. parem), oznaczony dwoma kropkami (..), oraz inny element, stanowiący nazwę katalogu, w którym on sam się znajduje, oznaczony kropką (.). Innymi słowy, każdy katalog wskazuje na samego siebie (.) oraz na swój katalog nadrzędny (..).

Zasada odwoływania się do plików ułożonych w opisanej strukturze hierarchicznej polega na podaniu pełnej nazwy ścieżki prowadzącej przez drzewo katalogów do odnośnego pliku. Specyfikacja ścieżki stanowi pełną i właściwą nazwę pliku - nawo .ścieżkowq. Nazwa ścieżkowa składa się z listy nazw katalogów - węzłów drzewa, przez które trzeba przejść, aby osiągnąć plik, np.

.studentl/teksty/lekst a

bdzie tekst a jest nazwą pliku docelowego, a studentl musi być katalogiem dostępnym w danej chwili, tzn. podkatalogiem wstawionym do bieżącego katalogu użytkownika, innymi słowy - po prostu katalogiem bieżqcym.

Przy rejestrowaniu nazwy użytkownika w systemie zostaje z nią związany katalog osohisty danego użytkownika. Katalog ten staje się katalogiem bieżącym w chwili rozpoczynania przez użytkownika sesji przy terminalu. Każda nazwa pliku, którą podaje wówczas użytkownik, np. jako parametr polecenia, odnosi się do plików z katalogu bieżącego.

Pliki nie umieszczone w żadnym podkatalogu bieżącego katalogu użytkownika można znaleźć rozpoczynając przeszukiwanie od katalogu pierwotnego, tj. od korzenia drzewa katalogów. Katalog pierwotny jest jedynym katalogiem bez nazwy. Na przykład, jeśli katalogiem bieżącym jest katalog studenty to plik teksta może być identyfikowany na kilka sposobów:

stvderrtl/teksty/tekst_a - od katalogu bieżącego,

. ~studentl/teksty/tekst a - od katalogu bieżącego (kropka użyta jako nazwa pliku odnosi się do katalogu bieżącego),

hrsr~śW dentsiśtTrdentl Teksty/tekst a - od korzenia.

Jeśli katalogiem bieżącym jest w danym momencie katalog studerrtl, a chcemy wydać polecenie dostępu do pliku prog-I w katalogu krolikou~ski, to powinno ono zawierać argument:

.. . %teachers/krolikowski/prog I

przy czym dwie kropki (..) wskazują katalog nadrzędny (tutaj powtórzone dwa razy wskazują na katalog u.sr) i z niego rozpocznie się poszukiwanie pliku pros-I przez katalogi teachers i krolikowski.

Jak wynika z przedstawionych powyżej rozważań, z punktu widzenia użytkownika plik jest identyfikowany przez nazwę ścieżkową. Na jej podstawie system operacyjny musi zlokalizować bloki dyskowe pliku, czyli miejsce, w którym plik jest przechowywany na dysku. Rozważmy stosowaną w systemie L1NIX metodę lokalizacji bloków dyskowych na przykładzie pliku tekst ą identyfikowanego przez ścieżkę nsr-sttrderrlsattrdentl -teksty% tekst_a (rys. 3.4).

Szukany jest najpierw pierwszy składnik ścieżki dostępu, tj. rrsr. Przeszukiwanie rozpoczyna się od katalogu pierwotnego w celu znalezienia i-węzła pliku usr. Z tego węzła system lokalizuje katalog ursr (blok 132) i szuka następnego elementu, tj. katalogu sW derrts. Na podstawie i-węzła numer 78 jest lokalizowany blok dyskowy o adresie 207, zawierający katalog .strrdmrts. Proces ten jest kontynuowany, aż wreszcie w katalogu teksty (blok 651) zostaje znaleziony wskaźnik (adres dyskowy) do bloku zawierającego plik tekst a.

32 ~~ZdZlar 3.

Katalog pierwotny

1

1 * *

a dev

7 bin

g tmp

6 usr

Katalog studenfs

7s

6 * *

asl studentl

asz student2

asa studenta

asa student4

i - węzeł nr 6 katalogu lusr tryb

roaniar czas

132

Katalog lusr znajduje się w bloku 132

i - węzeł nr 451 katalogu student1 tryb

roaniar

123

Katalog studentl znajduje się w bloku 123

Katalog /usr(blok 132)

6 *

1 * *

7a students

79 teachers

Katalog studenłl (blok 123)

451 *

78 * *

sol roboczy

soz teksty

soi programy

i - węzeł nr 78 katalogu lstudents b

rozmiar czas

207

Katalog lstudents znajduje się w bloku 207

i -węzeł nr 502 katalogu teksty tryb

roaniar

651

Katalog (eksry znajduje się w bloku 651

Rys. 3.4. Lokalizacja bloków dyskowych pliku w systemie UNIX

Jak wynika z rys. 3.4, podstawą lokalizacji bloków dyskowych pliku są węzły informacyjne plików. Zawierają one zestaw informacji opisujących plik (tzw. atrybuty pliku) oraz opis organizacji fizycznej pliku (wskaźniki do dyskowych bloków danych). Atrybuty pliku zawarte w jego węźle informacyjnym przedstawiono na rys. 3.5.

Przy otwieraniu pliku większość informacji zawartych w węźle jest przekazywana do tablicy aktywnych węzlów (ang. active i-pode table). Wszystkie adresy dyskowe plików o rozmiarze nie przekraczającym 10 bloków są przechowywane bezpośrednio w węźle informacyjnym. Jeśli plik jest większy niż 10 bloków, potrzebny jest dodatkowy blok zawierający adresy pozostałych bloków pliku, natomiast w węźle informacyjnym przechowywany jest adres tego bloku, tj. wskaźnik na wskaźnik pośredni. W zależności od rozmiaru bloku dyskowego i długości adresu pojedynczy blok pośredni może zawierać od 128 do 256 adresów. Na przykład dla bloku o rozmiarze 1 KB i 32-bitowym adresie blok pośredni zawiera 256 adresów bloków na dysku. Taki sposób adresowania wystarcza dla plików składających się z 266 bloków (10 w i-węźle i 256 w pojedynczym bloku pośrednim). Dla plików powyżej 266 bloków wykorzystywany jest wskaźnik na wskaźnik drugiego stopnia adresowania. 256 wskaźników stanowi adresy 256 pojedynczych bloków pośrednich, z których każdy wskazuje 256 bloków na dysku. Tak więc, wykorzystując drugi stopień adresowania można zidentyfikować 266 + 256 = 65 802 bloki na dysku. Dla plików większych niż 64 MB wprowadzany jest trzeci stopień adresowania. Maksymalny rozmiar pliku wynosi więc 16 GB.

System plików

33

Typ pliku i prawa dostępu Rozmiar pliku

Liczba łączników do pliku Identyfikator właściciela Identyfikator grupy

Data utworzenia pliku

Data ostatniej operacji dostępu I Data ostatniej modyfikacji

10 wskaźników bloków danych Wskaźnik na wskaźnik adresowy pośredni Wskaźnik na wskaźnik adresowy drugiego stopnia Wskaźnik na wska: adresowy trzeciegc

wskaźniki adresowe bloków danych

wskaźniki adresowe bloków danych

wskaźniki adresowe bloków danych

Rys. 3.5. Struktura wpiła informacyjnego pliku (10, 13]

0x01 graphic

0x01 graphic

34 Rozdział 3.

Pliki specjalne (np. pliki urządzeń) nie mają bloków danych alokowanych na dysku. Jądro systemu odnotowuje pliki tego typu na podstawie informacji z i-węzłów, a następnie wywołuje odpowiednie moduły obsługi urządzeń w celu wykonania operacji wejścia/wyjścia dla tych plików.

Podstawowym elementem wykorzystywanym przez system w zarządzaniu plikami są omówione węzły informacyjne plików. Oprócz nich system (rys. 3.6) wykorzystuje również łahlicę otwartych plików bieżącego procesu, tablicę struktury pliku oraz wewnętrzny i-węzel (tj. węzeł informacyjny przechowywany w pamięci operacyjnej). Wywołania systemowe, które dotyczą otwartych plików, wskazują plik poprzez tzw. deskryptor pliku. Deskryptor jest wykorzystywany przez jądro systemu jako indeks do tablicy otwartych plików bieżącego procesu. Każdy zapis w tej tablicy zawiera wskaźnik do tablicy struktury pliku i dalej do wewnętrznego i-węzła. Tablica struktury pliku została wprowadzona ze względu na to, że kilka procesów może działać na tym samym pliku, każdy w innym jego miejscu. Każdy proces działający na danym pliku "widzi" go inaczej; mówimy, że proces dysponuje określonym przesunięciem (ang. offset) w obrazie pliku (patrz rys.3.6).

Aby zapisać plik na dysku, system plików musi dysponować informacją o rozmieszczeniu bloków wolnych tego dysku. Informacja o blokach wolnych w systemie LTNIX jest najczęściej utrzymywana w postaci listy łańcuchowej [14] przechowywanej w bloku nadrzędnym. Lista ta jest obsługiwana na zasadzie mechanizmu stosu.

W systemie L1NIX ten sam plik może występować pod dwiema lub więćej nazwami, a co więcej - z możliwością ich występowania w różnych katalogach. Typowym wykorzystaniem jest tutaj pozwolenie np. kilku członkom jednego zespołu programistycznego na współdzielenie tego samego pliku, przy czym może on występować w różnych katalogach pod różnymi nazwami (nie są to prywatne kopie). Zmiany w pliku dokonywane przez jednego użytkownika są widoczne dla innych. Taką możliwość uzyskuje się przez mechanizm tak zwanych łączników. Łączniki do plików tworzy się po to, aby uniknąć niepotrzebnego kopiowania i przechowywania wielokrotnych kopii tego samego pliku. W przypadku utworzenia łącznika specjalnym poleceniem plik otrzymuje drugą nazwę (traktowaną jako synonim), lecz jego właścicielem pozostaje poprzedni użytkownik. Przy tworzeniu łączników obowiązują pewne ograniczenia, np. nie można utworzyć łącznika do katalogu i nie można zmienić praw dostępu do pliku przez łącznik (może to uczynić tylko jego właściciel).

b ó

~e h w h c 0 0 a A ~E i9 9 c ó

ź,

W

read(...)

Przestneń użytkownika

Tablica otwartych Tablica plików bie~ącego struktury procesu pliku

Przestrzeń systemowa

t ~ Bloki danych

Węzeł informa­cyjny pliku Wewnętrzny synchronizacja

węzeł informa­cyjny pliku

Przestrzeń dyskowa

W

36 Rozdział 3.

Zasady nazywania plików

W systemie może istnieć wiele plików należących do wielu użytkowników. Prrydzielenie osobnego katalogu każdemu użytkownikowi oznacza, że pracuje on na plikach utworzonych przez niego oraz plikach zdefiniowanych przez system jako polecenia systemowe.

Nazwa pliku może składać się z 14 dowolnych znaków ASCII, z wyjątkiem znaku spacji. Jednak w praktyce w systemie LJNIX nie należy używać w nazwach plików następujących znaków:

ze względu na ich specjalne znaczenie. Użycie tych znaków może dawać niespodziewane efekty. Nie należy też zaczynać nazwy kropką. Należy pamiętać, że w systemie ilNIX duże i małe litery są odróżnialne, w przeciwieństwie do większości innych systemów operacyjnych. Dlatego dodatkowa reguła zaleca używanie tylko małych liter. Jak wynika z definicji, nazwa pliku w systemie UNIX jest po prostu ciągiem dowolnych znaków. System operacyjny nie rozpoznaje żadnych rozszerzeń nazw, jednakże mogą je rozpoznawać niektóre programy usługowe. Tak więc do nazw plików zwykłych często dodaje się jednoliterowy przyrostek oddzielony kropką od właściwej nazwy. Istnieje kilka przyrostków rozpoznawanych przez powszechnie używane programy:

.a archiwa (często z danymi systemowymi), .c programy źródłowe w jezyku C,

. f programy źródłowe w Fortranie, .p programy źródłowe w Pascalu,

.s programy źródłowe w jezyku asemblerowym,

.h zbiory wierszy definicyjnych dla programów w języku C, .i pliki wynikowe preprocesora C,

.o moduły programowe w postaci wynikowej.

Należy pamiętać, że z punktu widzenia systemu operacyjnego kropka i przyrostek są po prostu częścią nazwy pliku zwykłego. Zajmują one w sumie dwa znaki, a więc aby całość mieściła się w przepisowej długości 14 znaków, poprzedzająca część nazwy może mieć co najwyżej 12 znaków.

Nazwy plików stanowią argumenty wielu poleceń, dlatego aby ułatwić operowanie plikami, używa się następujących znaków uogólniających:

• gwiazdka (*) - użyta w nazwie zastępuje dowolny ciąg znaków, np. tekst* może oznaczać dowolny plik spośród następujących: tekst a, tekst c,

• znak zapytania (?) - użyty w nazwie zastępuje dokładnie jeden dowolny znak, np. prog? - może oznaczać dowolną z nazw: progi, progu itp.,

• nawiasy kwadratowe [] - użyte w nazwie zastępują dokładnie jeden znak spośród wyliczonych wewnątrz tych nawiasów, np.: tekst fl,1,cJ oznacza dowolną z nazw: tekst 1, tekst 2, tekst c.

Zwróćmy uwagę, że znak gwiazdki pasuje do czegokolwiek, wyjąwszy ten szczególny przypadek, gdy kropka jest pierwsrym znakiem nazwy danego pliku. Tak więc wzorzec * obejmuje wszystkie zwykłe pliki z danego katalogu, natomiast nie obejmuje pliku .profile. Plik ten zastępuje wzorzec .*. W tym sensie mamy coś podobnego

,S'vctem plików 3 %

do pytajnika, ale o zawężonej liczbie dopuszczalnych znaków - za pytajnik można podstawić jeden dowolny znak. Oto przykład [3]:

~AEOJIa Jest to wzorzec obejmujący nazwy: Ala Ela Ola.

Omówimy tutaj jeszcze rolę nawiasów kwadratowych [3]. Otóż podaje się w nich zestaw znaków, które mogą wystąpić na danej pozycji we wzorcu (musi wystąpić dokładnie jeden znak z podanego zestawu). A oto przykład wzorca, do którego pasują nazwy składające się z jednej małej litery alfabetu łacińskiego: jahcclęfyhijklmnopyrstnvwxyz%. Przykład ten można zapisać w skrócie tak: ja-zJ. Podobnie dowolną cyfrę można oznaczyć jako (0-9J, dużą literę jako (A-ZJ, natomiast dowolną literę (duźa lub mała) zapisem (A-Za-zJ, a dowolny znak alfanumeryczny - (A­7_a-~ 0->/

Prawa dostępu

Każdy plik ma ściśle określone prawa dostępu stwierdzające, czy określony użytkownik jest uprawniony do odczytania lub zapisania pliku, lub do jego wykonania, jeźeli jest to program lub plik poleceń. Użytkownik może z wielu powodów pragnąć zachowania poufności niektórych swoich plików. Dostęp do takich plików innym użytkownikom powinien być więc zabroniony. Innym powodem odmowy dostępu do określonych plików jest to, ie nawet drobny błąd może spowodować poważne zniszczenia w systemie, np. uszkodzenie pliku zawierającego korzeń drzewa katalogów uniemożliwia korzystanie z jakichkolwiek plików. Zarówno ze względu na poufność, jak i na bezpieczeństwo UNIX zawiera schemat uprawnień do korzystania z plików, Najczęściej użytkownicy mają pełne prawo do korzystania z własnych plików, ograniczone prawo dostępu do wybranych plików systemowych, nie mają natomiast żadnych praw do korzystania z plików należących do innych użytkowników,

Użytkownikowi można przyznać lub cofnąć trzy rodzaje praw dostępu do pliku lub katalogu reprezentowane przez następujące litery:

r (react) - prawo czytania, w (write) - prawo pisania,

x (execrcte) - prawo wykonywania.

Każdy użytkownik może mieć dowolną kombinację tych praw. Są one całkowicie niezależne i posiadanie jakiegokolwiek z nich nie jest warunkiem posiadania innego. W przypadku plików prawa te są interpretowne w następujący sposób. Prawo pisania oznacza zezwolenie na zmianę zawartości pliku, w tym także na jego zniszczenie. Prawo czytania w gruncie rzeczy oznacza jednocześnie prawo do kopiowania. Wynika to ze specyfiki systemu operacyjnego LJNIX. Ponieważ system nie rozróżnia plików i urządzeń, wypisywanie pliku na terminalu jest traktowane jako kopiowanie do pliku specjalnego, reprezentującego terminal. Nie ma więc żadnych różnic pomiędzy czytaniem i kopiowaniem. Prawo wykonywania oznacza, że zawartość pliku może być potraktowana jako program do wykonania; nie wiąże się ono z prawem do czytania, gdyź uźytkownik, aby wykonać program zapisany w pliku, nie musi go kopiować.

Takie same trzy kategorie praw: czytania, pisania i wykonywania odnoszą się do katalogów. Prawo czytania jest w tym przypadku interpretowane jako prawo

(ay az ` - snurur `auE~EUr~Snn;saC oMEJd az `EZaEUZO . ExdoJ~) ~fE~EUr~CM MEJd yayEf qaE~o~E~Ex qnj qaEyld Eu auEM~CuoySM rosouu~Czo arxEf `ouorME~spazJd fazruod `nd~lsop MEJd aa~za~i~op EruEZEMZOJ ~ azsEU aźfnMOIUnspod

ur~u M EmESVd c EmE~Cza oMEJd npld rMO~amrosEłM ~moJM~SzJd odam zaz.rdod t nxt~d o~a~ op yuzo~f ~~CzJOM~n Euzouz `aMExata oo `zaa~ `nyid Eu IfoEJado qa~CUpEZ ~EUOyCM EUZOCU alU aIU2W Cj?~Eld '~EMOIdOxS Oń aZOUi aIU ZEJO `IA EJOjOpa Z pEł3~~ZJd EU ~~CEjS~CZJO~

`~EMO~y~Cpouaz o~ azoua am `npld ~y~arMS~inn azotu aru MoyuMO~~izn z uapEZ o~

qosods ~Coźfnd~;sEU M auolE~sn ~CłElsoz nxyd op nd~;sop EMEJd 'uzd `npld o~auEp op nd~~sop MEJd qo~CupEZ ~fEpErsod aru ~Carunno~vCzn mur zad ruE `~idru~ o~af alMOxuofza ruE `punnox~izn ruE yazar '(gEUOyCM ~faEJado ~1 aayo ouMad Eu ~tunno~l~Czn ~Cza `E~Cd ura~s~fs) ~~unsn xyd ~alsaru Euzoy~ pA EJOvtpa z pEłx~CzJd Eu aźfE;s~CzJO~ `uErmz xaiM~o~qayEf qEM.Cuoxop Euzoua aru nxild M o~ :qosods ~Ca~fnd~;szu M auolsaJxo źuE~soz npld op nd~~sop EMEJd rasa f

qay~s~izsM E~p EmEM~Cuo~~inn op oMEJd am~Ćpaf t ~Cdru~ E~p EIUEM~iuo~~Cm c n~Czapo op oMEJd `ElamrasEfM~EIp nd~lsop EMEJd aufad EzaEUZO oa x-_x_,,xnu­

:nd~~sop EMEJd aożfnd~lsEU fBZadnnzEZ afnuuCzJio yId muaz.roM~n od orupaJSOdzag 'EruEM~Cuox~iM c ~SMZEU ~CuErutz `EruEMnsn `MOxiuza~ł EWaz.IOMj `EIUEMOrdOx afJEJado ~EM~uo?~~M n3~yd .Lll~j Eu aZOUi po?Izsaz.Id zaq ~atOr~sEł~j

~nq~J~E ao~fnd~~sEU farm ~Cumnnod `EjararosEłM EIp o~i~Cl aud~~sop 'uzd `au~EM~iJd yrld 'I~SOj1EMEZ I~OI ~EIUBIUIZ a~0ó0 M ~EUZOm alu~az `EZOEUZO oa x-ax-.rx-r­

:~nq~SJ~E ao~fnd~lsEU ~fEUZ anno~nłsn ~CmEJ~oJd amomals~CS yazomsE~M qm oxj~ yoiu Eu ~EM~Cuoxfnn azotu nsrdez afo2Jado 'uzd x-.~x-.rxnup

:~C~nq~CJlE ao~fnd~lsEu fEZa£MZEZ ~fEUZ `rńojEjEx auur rl~izo `o~au~oMJard n~o~E1Ex z rxrld `omopEłx~CzJd daEJado qo~Cuo~saJ~o EmEM~Cuox6M op yaruMEJdn ~s aru ~iarunnox~Czn ~Cz.ro;xaiN

xnuxnuxnu­O?jEf OSIM AIS EZOEUZO

Mo~runnoxuCzn qar~ls~zsM EIp doEJado qon~~s~SzsM EIUEM~fuox~inn op .oMEJd Mopunnox~tzn qo~CłE~sozod qa~x~s~CzsM EIp EMEJd arupainnodpo - (pi-g) ałE~sozod ~CzJl E `MOpuMOxaizn ~Cdru~ EIp EruEM~iuox~Cnn r nsrdEZ `t>~Czopo op oMEJd ~fEZaEUZo ~-5 qoEfo~izod Eu ~Syq ~SzJ~ amqopod 'nxyd EIaroIasE~M EIp x EruEM~uox~inn r nt nsrdEz `.! EIUE~CZO OME1d :oufa~ox ~fzzaEUZO (ti-Z qaEfo~Szod Eu) ~rq aufalox ~zJ,i, 'mar~olE~Ex ~saf ~rld ~Czo `E~saJ~o `Ifo~Czod fazsMJard Eu `irq ónnoxlEpoQ '(nd~~sop EMEJd) ~nq~C.r~E o~af qa~Ca~fE~saJxo Moyq ~~rM2IZp qU~UEMOxp~ZJOd~ŚZJC~ Eur ~~Id ~CpzEX 'qo~E~sozod yayls~CzsM o ~Ćdru~ Moxuofza~`Eja~orosEłM :MO~~uMO~~Czn MofazpoJ qoazJi z o~apzEx op nxunso~s M auEMOOmzoJZ ~~iq ~~om `rurelnq~ir~E zad auEMZ `EMEJd auoruarunM

'qa~CuESIdzz urEl Moxi~d op d~;sop Eu EIEMZOd n~oIE~Ex op nxunso~s M EruEM~Cuox~CM EMEJd aruzpE~sod 'n~ore~E~ z Moxtld qo~innosEZOqo~op EruEMnsn zEJo qa~Cnnou EruEMEpop oMEJd EzoEUZO EruESId OME1d jSEIUiO;EU `IOSOjJEMEZ ~EruEM~Csrd~SM

y tnpzpzob

ó~

System plików 39

Wykonywane czynności Plik Katalog

rwx r wx Przeglądanie, jakie pliki znajdują się w katalogu - - - • - ­Utworzenie nowego pliku w katalogu - - - - • ­Zmiana nazwy pliku - - - - • ­Usunięcie pliku - - - - • ­Czytanie pliku • - - - ­Zapis do pliku - • - - ­Wykonywanie pliku - - • - ­

Do zmiany uprawnień użytkowników w stosunku do pojedynczego pliku służy polecenie chmod (ang. change mode - zmień tryb). Wymaga ono określenia, cryje uprawnienia należy zmienić, na jakie i w stosunku do którego pliku. Polecenie chmod ma zatem trzy parametry:

chmod kto uprawnienia nazwa~liku

Znaki a (ang. all - wszyscy),

u (ang. user - użytkownik, właściciel), g (ang. group - grupa),

o (ang. others - inni, reszta)

określają, czyje uprawnienia mają być zmienione. Brak specyfikacji kto jest równoważny specyfikacji a - wszyscy. Zmianę podaje się jako znak +, - lub =, poprzedzający jeden ze znaków r, w, x. Na przykład polecenie

$ chmod u-w plik_1

oznacza, że użytkownik pragnie cofnąć (znak minus) sobie samemu (u) prawo pisania (w) w pliku plik-1.

Znaki +, -, = oznaczają odpowiednio: - odebranie prawa,

+ dodanie prawa,

= ustala nowe uprawnienia niezależnie od stanu poprzedniego. Na przykład

$ chmod a=rac plik_1

ustala nowy stan uprawnień na r-xr-xr-x, tzn. przyznaje wszystkim prawo czytania i wykonywania, a odmawia wszystkim prawa pisania. Określenie osób, znaki +, - = oraz litery r, w, x nie mogą być rozdzielone spacjami. Spacja powoduje pojawienie się komunikatu o błędzie, gdyż pierwszy znak po pierwszej spacji jest uznawany za początek nazwy pliku.

Bity 2-9 określające w całości atrybuty pliku można określić również poleceniem chmod o nieco innej składni:

chmod tryb dostępu nazwa~liku

podając prawa dostępu reprezentowane przy pomocy liczb, według następującej zasady:

tf ~ Rozdziat 3.

prawo czytania - 4, prawo pisania - 2, prawo wykonywania - 1.

Punkty przysługujące poszczególnym kategoriom użytkowników należy złożyć razem. Na przykład prawa dostępu do pliku tekst-I w postaci:

rw-r--r-­należy interpretować następująco:

prawom dostępu właściciela: rw - odpowiada 4 + 2 + 0 = 6, prawom dostępu grupy: r - - odpowiada 4 + 0 + 0 = 4, prawom dostępu innym: r - - odpowiada 4 + 0 + 0 = 4,

a cały zestaw praw dostępu dla pliku tekst_I można przedstawić jako trzycyfrową liczbę 644. Zmiana praw dostępu w odniesieniu do pliku tekst 1 poleceniem

$ chmod 740 tekst_1

zapewni pełny dostęp właścicielowi (4 + 2 + 1 = 7), ustanowi tylko prawo odczytu dla członków grupy (4 + 0 + 0 = 4) oraz zabroni dostępu wszystkim innym użytkownikom (0 +0+0=0),tzn.

rwxr----­

Polecenia dotyczące katalogów

Omówimy obecnie polecenia odnoszące się wyłącznie do katalogów, natomiast polecenia dotyczące katalogów i plików zwykłych zostaną omówione w rozdziale następnym.

Polecenie mkdir (ang. make a directory) dotycry utworzenia katalogu. Przykładowo wymieniony uprzednio katalog students należy utworzyć poleceniem:

$ mkdir /usr/students

Przy tworzeniu katalogu automatycznie tworzone są dwa jego elementy standardowe, oznaczające katalog tworzony (.) i katalog nadrzędny (..). Użycie polecenia mkdir wymaga prawa do zapisu w katalogu nadrzędnym. Można utworzyć jednocześnie wszystkie katalogi użytkowników wydając polecenie:

$ mkdir /usr/students/student1 /usr/students/student2 \ /usr/students/student3 /usr/students/student4

lub

$ mkdir student1 student2 studenta student4

W pierwszej wersji tego polecenia wykorzystuje się pełne nazwy ścieżkowe j podkatalogów użytkowników. Występuje tutaj również znak kontynuacji zapisu polecenia, tj.(\ backslash) - w niektórych wersjach systemu może to być pionowa kreska.

Druga wersja tego polecenia jest znacznie prostsza. Wydanie go w tej postaci jest możliwe tylko w przypadku, gdy katalogiem bieżącym, z którego wydano to polecenie, jest katalog students.

,S'v.ctem plikdw t/I

Przy próbie utworzenia błędnego lub już istniejącego katalogu system wyświetla odpowiednie komunikaty informujące o błędach. Zostaną one omówione po przećwiczeniu przez Czytelnika tych zagadnień w ramach kolejnej sesji przy terminalu.

Polecenie rmdir służy do usuwania katalogów. Usunięcie katalogu jest możliwe tylko wtedy, gdy jest on pusty, tzn. nie zawiera żadnego pliku, a ponadto nie jest katalogiem bieżącym, z którego wydano polecenie. Odpowiednie komunikaty systemowe wyświetlane podczas próby niedozwolonego lub błędnego usuwania katalogów zostaną omówione w następnej sesji przy terminalu.

Polecenie pwd (ang. prirrt working directory) służy do określania katalogu bieżącego. Po wydaniu polecenia pwd uzyskuje się pełną nazwę ścieżki prowadzącej od katologu pierwotnego do katalogu bieżącego. Przykładowo do katalogu bieżącego .atnderrtl od katalogu pierwotnego oznaczonego zawsze niejawnym znakiem "/" prowadzi ścieżka przez katalogi rrsr oraz strrderrts.

W pracy z systemem operacyjnym rzeczą równie istotną, jak znajomość bieżącego katalogu jest możliwość jego zmiany. Do tego celu służy polecenie cd (ang. charge c/irectory). Przykładowo chcąc zmienić katalog bieżący ze .strrderrtl na studerrts należy wydać polecenie:

lub

$ cd /usr/students

$cd..

Próba zmiany katalogu bieżącego na błędny lub nie istniejący powoduje wyprowadzenie komunikatu: had directory. Na ogół nie wiadomo z góry, jaka jest przyczyna błędu sygnalizowanego tym komunikatem, ponieważ równie dobrze oprócz sytuacji wspomnianych powyżej może to być spowodowane próbą odwołania się do zwykłego pliku zamiast do katalogu, jak i próbą odwołania się do katalogu bez prawa dostępu do niego.

Po skutecznym lub nieskutecznym wykonaniu polecenia cd warto zawsze wydać polecenie pwd w celu sprawdzenia, w jakim katalogu aktualnie pracujemy.

Wydając polecenie cd bez żadnego argumentu powodujemy przejście do katalogu osobistego, tzn. przypisanego użytkownikowi po zarejestrowaniu się w systemie. W argumentach polecenia ed niedozwolone jest używanie znaków uogólniających.

. ~ Polecenia dotyczące plików

Poleceń dotyczących operacji na plikach jest najwięcej, gdyż praktycznie każde polecenie systemu IJNIX jest związane z określonym plikiem.

Polecenie ls (ang. list sorted) jest chyba najczęściej wykorzystywane. Powoduje wyprowadzenie nazw plików zawartych w katalogu bieżącym lub innym wymienionym z nazwy. Zwróćmy przy tym uwagę, że wymaga ono prawa czytania danego katalogu przez użytkownika wydającego to polecenie. Przykładowo wydanie tego polecenia z katalogu .striderrts spowoduje wyprowadzenie następującej informacji:

42 Rozdzia! 3.

$ IS student1 student2 studenta student4

Jak widać, polecenie Is bez dodatkowych argumentów (opcji) wyświetla informacje o katalogu bieżącym. W poleceniu tym często używa się opcji zaznaczonych myślnikiem "-". Najczęściej wykorzystywane są dwie z nich:

-a (ang. all - wszystkie pozycje katalogu), -l (ang. lonk - pełna informacja).

Posługując się tym poleceniem z wymienionymi opcjami można określić pełną zawartość katalogów, na przykład:

$ pwd /usr/students $ Is -al

powoduje wyprowadzenie następującej informacji:

total

drwxr-xr-x 4 root sys 1024 Jun 10 10:41

drwxr-xr-x 8 root sys 1024 Sep 30 11:34 ..

drwxr-xr-x 2 student1 student 1024 May 10 09:44 student1

drwxr-xr-x 2 student2 student 1024 May 10 09:54 student2

drwxr-xr-x 2 studenta student 1024 May 10 09:59 studenta

drwxr-xr-x 2 student4 student 1024 May 10 10:07 student4

Pierwsza kolumna powyższego wydruku zawiera informacje dotyczące praw dostępu do plików. Pierwszy znak w tej kolumnie w naszym przypadku informuje o tym, że wszystkie te pliki są katalogami (litera d - od directory na pierwszej pozycji). Tym pierwszym znakiem może również być:

- - jeśli pozycja katalogu jest zwykłym plikiem,

b - jeśli pozycja katalogu jest plikiem specjalnym odpowiadającym urządzeniu blokowemu,

c - jeśli pozycja katalogu jest plikiem specjalnym odpowiadającym urządzeniu znakowemu,

s - jeśli pozycja katalogu jest semaforem,

m - jeśli pozycja katalogu jest współdzielonym obszarem pamięci.

Jak już wspomnieliśmy, następnych 9 znaków interpretuje się jako trzy trójznakowe sekwencje określające prawa dostępu. W naszym przykładzie prawo do odczytania i dostępu do zawartości katalogów mają wszyscy użytkownicy, natomiast prawo zapisu przysługuje tylko właścicielom. W drugiej kolumnie znajduje się liczba łctcznikcSw (inaczej dowiqzań) do wymienionych katalogów. Wynosi ona 2, co oznacza, że dany katalog jest dołączony do katalogu nadrzędnego (..) i samego siebie (.). W trzeciej kolumnie wymienione są nazwy właścicieli katalogów (np. studentl) oraz nazwy grup użytkowników (np. student). W czwartej kolumnie zawarta jest informacja dotycząca rozmiaru katalogu lub pliku w bajtach (np.. 1024) (jeśli plik jest plikiem specjalnym, pole wielkości pliku zawierać będzie główny i poboczny numer urządzenia). W przedostatniej

System plików 43

kolumnie występują data i czas utworzenia katalogu lub ostatniej modyfikacji pliku. W kolumnie ostatniej znajdują się nazwy katalogów. W nasrym prrykładzie pokrywają się one z nazwami użytkowników.

Podobnie można sprawdzić zawartość katalogu bin, który w praktyce zawiera ponad 100 programów usługowych. Poniżej wymienione zostały jedynie niektóre programy omawiane w tym rozdziale.

$ cd /bin

$ pwd

/bin

$ Is -I

total

-rwxr-xr-x 1 bin bin 13312 Jan 13 1991 cat

-rwxr-xr-x 1 bin bin 14572 Jan 13 1991 cp

-rwxr-xr-x 1 bin bin 20480 Jan 13 1991 file

-rw~cr-xr-x 1 bin bin 26624 Jan 13 1991 Is

-rwxr-xr-x 1 bin bin 12288 Jan 13 1991 mkdir

-rwxr-xr-x 1 bin bin 13342 Jan 13 1991 mv

-rwxr-xr-x 1 bin bin 12888 Jan 13 1991 pwd

-rwxr-xr-x 1 bin bin 14336 Jan 13 1991 rmdir

Są to pliki zwykłe (myślnik "-" na pierwszej pozycji pierwszej kolumny wydruku), które mogą być wykonywane przez wszystkich użytkowników (atrybut x dla wszystkich rodzajów użytkowników). Liczba łączników we wsrystkich przypadkach wynosi 1, tzn. że pliki nie są dołączone do żadnego innego katalogu. Nazwy poszczególnych plików stanowią odpowiednie polecenia systemowe.

W niektórych realizacjach systemu UNIX polecenie Is może zawierać 22 opcje. Tutaj ograniczymy się do omówienia najważniejszych spośród nich:

-cf - jeśli argumentem polecenia jest nazwa katalogu, opcja ta powoduje wyświetlenie jedynie jego nazwy (bez listy zawartości); opcja ta jest często używana z opcją -l w celu uzyskania statusu katalogu;

-n - opcja identyczna jak -1, z tym wyjątkiem, że zamiast nazw użytkownika i grupy wyświetlane są numery identyfikacyjne UID i GID;

-t - polecenie sortowania według czasu modyfikacji zamiast według nazw (nazwa najpóźniej modyfikowanego pliku znajdzie się na początku);

-r~ - polecenie posłużenia się czasem ostatniego dostępu zamiast czasem ostatniej modyfikacji przy sortowaniu (dla opcji -t) lub wyświetlaniu (dla opcji -~.

Jeśli jako parametr polecenia ls zostanie podana nazwa pliku lub katalogu, to jest wypisywana informacja wyłącznie o tym właśnie pliku lub katalogu.

44 Rozdzial 3.

Sesja nr 6 przy terminalu 1 . Zarejestruj się w systemie.

2. Sprawdź, pod jaką pełną nazwą jesteś zarejestrowany w systemie (logname).

3. Określ nazwę ścieżki katalogu bieżącego, w którym obecnie się znajdujesz. Przypominamy, że w tym momencie będzie to jednocześnie nazwa Twojego katalogu osobistego.

4. Wyświetl zawartość katalogu bieżącego. Zbadaj różnicę w działaniu poleceń Is, Is -la, Is -I, Is -a oraz innych omówionych wcześniej opcji. Czym różni się polecenie Is od polecenia Is * ? Zbadaj reakcję systemu na próbę wprowadzenia tych poleceń w błędnej postaci.

Jak widać to na ekranie, system wyświetla echo błędnie wprowadzonego polecenia wraz z komentarzem, na przykład: Is-la: not found, co znaczy: programu polecenia Is-la nie znaleziono w katalogach (po s powinna być spacja).

5. Przećwicz różne warianty zakładania katalogów:

utwórz podkatalog teksty podając w odpowiednim poleceniu nazwę ścieżki absolutnej;

wykorzystując fakt, że katalogiem nadrzędnym podkatalogu, który ma być utworzony, jest katalog bieżący, utwórz podkatalog do usunięcia;

utwórz podkatalogi roboczy i programy podrzędne w stosunku do katalogu studentl; wybierz metodę, która Ci bardziej odpowiada; zwróćmy jednak uwagę, że jeśli znajdujemy się w katalogu student1, to wszystkie te podkatalogi jako podrzędne w stosunku do katalogu student1 można utworzyć jednym poleceniem:

$ mkdir roboczy programy teksty

sprawdź, czy utworzenie nowego katalogu zmienia katalog bieżący (pwd);

sprawdź, jakie prawa dostępu do danego katalogu musisz posiadać, aby założyć w nim podkatalog.

6. Zbadaj reakcje systemu na błędne próby utworzenia katalogów • Spróbuj utworzyć katalog: lusrlstudenciltest.

Jak widać na ekranie przy próbie utworzenia tego katalogu zostaje wyświetlony komunikat o błędzie:

mkdir: cannot access /usr/studenci

Błąd jest spowodowany tym, że wcześniej nle został utworzony katalog studenci, lecz students;

• Spróbuj ponownie utworzyć katalog student1.

System plików

Przy próbie utworzenia katalogu już istniejącego system wyświetla komunikat:

mkdir: cannot make directory usr/students/student1 co oznacza: "nie można utworzyć katalogu student? ".

7. Spróbuj usunąć katalog student> (rmdirlusrlstudentslstudentl).

Przy próbie usunięcia niepustego katalogu (np. utworzonego wcześniej katalogu lusrlstudentslstudent>) otrzymamy komunikat o błędzie, tzn.:

$ rmdir/usr/students/student1

rmdir: /usr/students/student1 Directory not empty

ponieważ zawiera on kilka katalogów podrzędnych: roboczy, programy i testy.

Próba usunięcia katalogu, którego jeszcze nie utworzono, również spowoduje wyprowadzenie komunikatu o błędzie. Spróbuj usunąć katalog lusrlstudentslstudentllaplikacje wydając polecenie:

$ rmdir aplikacje

System zareagował wyświetlając komunikat:

rmdir: aplikacje nonexistent lub No such file or directory co oznacza: "Taki katalog nie istnieje". W taki sam sposób system zareaguje, jeśli parametr polecenia rmdir zostanie wprowadzony z btędem.

8. Usuń katalog do usuniecia.

9. Przećwicz operacje zmiany katalogów wykorzystując w tym celu polecenia cd i pwd. Jak już to sprawdzaliśmy, tworzenie i suwanie katalogów nie powoduje zmiany katalogu bieżącego. Tak więc użytkownik nadal pracuje w katalogu student>. Sprawdź to poleceniem pwd.

• Zmień katalog bieżący na znajdujący się niżej w hierarchii: roboczy. Możesz to zrobić na dwa sposoby: wykorzystując fakt, że znajdujesz się w katalogu bieżącym student> lub też podając nazwę ścieżki absolutnej nowego katalogu bieżącego.

• Spróbuj zmienić katalog bieżący na błędny, np. lusrlstudentslcos nie tak.

Oczywiście wydanie tego polecenia spowoduje wyprowadzenie komunikatu:

/usr/students/cos nie_tak: bad directory ponieważ wcześniej nie utworzono poprawnie tego katalogu.

Przejdź do katalogu roboczy, a następnie zmień katalog bieżący na Twój katalog osobisty podając nazwę ścieżki absolutnej lub

45

~iÓ IZozd~inl 3.

polecenie cd .. lub po prostu cd i sprawdź, czy jest możliwe utworzenie całej hierarchii katalogów (np. lusrlstudentslstudentllkatalogllkatalog2) wjednym poleceniu mkdir. Jak wynika z treści komunikatu:

mkdir: cannot access /usr/students/student1/katalog1 wyświetlanego na ekranie, niestety nie jest to możliwe - system sygnalizuje brak możliwości dostępu do katalogu katalogi.

,~ .~ '

Polecenie cp (ang. topy) służy do kopiowania plików. Ma ono następującą składnię:

lub

Na przykład

cp plik wejściowy plik wyjściowy

cp pliki wejściowe katalog

$ cp /usr/students/student1/tekst a /usr/students/student1/roboczy/tekst a

spowoduje skopiowanie pliku tekst a z katalogu studentl do katalogu roboczy z zachowaniem tej samej nazwy pliku.

Kopiując pliki poleceniem cp należy pamiętać, że poprzednia zawartość pliku wyjściowego ulega zniszczeniu, bez ostrzeżenia, chyba że użytkownik wyda to polecenie z opcją -i. (Omawiane niżej polecenia mv i rm również są wyposażone w tę opcję.) Opcja -i stanowi pewnego rodzaju zabezpieczenie przed przypadkowym skasowaniem pliku. Jeżeli wydamy polecenie cp w następującej postaci:

$ cp -i tekst a tekst_b

to system ostrzeże nas, że plik teksth już istnieje na dysku i poprosi o potwierdzenie zamiaru wykonania tej operacji:

Overwrite tekst b?

Jeżeli naciśniemy y (ang. yes), a potem Fnter, kopiowanie dojdzie do skutku. Jeżeli odpowiemy w jakikolwiek inny sposób, operacja zostanie zaniechana.

Prry kopiowaniu plików obowiązują naturalne zasady, że do istniejącego katalogu lub pliku w tym katalogu można skopiować tylko plik istniejący, jeśli ma się prawo do jego odczytu i zapisu w katalogu. W obu przypadkach, tj. przy nieprawidłowym odczycie lub zapisie, sygnalizowane są błędy. Zostaną one omówione w następnej sesji przy terminalu.

Druga z postaci polecenia cp wskazuje, że pliki można kopiować całymi grupami Po słowie ep musi nastąpić lista nazw plików oddzielonych znakami spacji, po czym musi być podana nazwa katalogu docelowego, do którego należy wymienione pliki skopiować. W ogólności polecenie cp pozwala na kopiowanie większej ilości plików naraz: przez bezpośrednie podanie ich nazw lub użycie znaków uogólniających. Dodajmy jedynie, że katalog docelowy w powyższej formie polecenia cp musi już istnieć na dysku (nie zostanie automatycznie założony). Polecenie cp można również stosować dla całych

S'yc(enr plików 4%

katalogów razem z ich podkatalogami, uzupełniając składnię polecenia cp o opcję -r. Możliwe jest zatem wygodne powielanie całych struktur katalogów wraz z wszelkimi plikami znajdującymi się w nich. Oto przykład polecenia, które kopiuje katalog studentl wraz z całą jego zawartością, tworząc jego kopię w katalogu studentl0:

$ cp -r /usr/śtudents/student1 /usr/students/student10

Użycie opcji -r (ang. recursive) jest konieczne prry tego rodzaju konstrukcji, tzn. przy kopiowaniu hierarchicznej struktury katalogów z ich zawartością.

Poleceniem cp kopiuje się plik wejściowy nie niszcząć go, tak że powstają dwa identyczne jego egzemplarze. Polecenie mv działa podobnie, jednak plik wejściowy ulega zniszczeniu, tzn. operacja:

mv plik wejściowy plik wyjściowy

powoduje nadanie nowej nazwy plikwyjściowy plikowi o nazwie plikwejściowy, tzn. przemianowuje go. Przykładowo, operacja

$ cd /usr/students/student1 $ mv tekst a tekst 1

powoduje zmianę nazwy pliku w obrębie tego samego katalogu, a operacja:

$ mv tekst a /usr/students/student1/roboczy/tekst_roboczy

spowoduje umieszczenie pliku teksta w innym katalogu, pod inną nazwą i zniszczenie go w bieżącym katalogu.

Podobnie jak w prrypadku polecenia cp z wykorzystaniem mv, można przesłać jednocześnie większą liczbę plików pod warunkiem, że plikiem wyjściowym jest katalog. W niektórych realizacjach systemu i1NIX polecenie mv wydane w postaci:

mv nazwa~liku nazwa_katalogu

powoduje przeniesienie pliku do innego katalogu. Przenoszenie polega na przepisywaniu dowiązań łączących węzły drzewa, a nie na fizycznym tworzeniu kopii pliku.

Typowe błędy popełnione prry operowaniu tym poleceniem polegają na próbie przepisania pliku nie istniejącego lub podjęciu próby przepisania bez posiadania prawa odczytu. Próba przepisania do istniejącego pliku wyjściowego bez prawa zapisu może zakończyć się powodzeniem, gdyż w tym przypadku nie jest wyświetlany komunikat o błędzie, lecz ostrzeżenie z pytaniem, czy mimo takiej sytuacji należy dokonać przepisania.

Nieumiejętne używanie polecenia mv może doprowadzić do spustoszenia w systemie plików.

Sesja nr 7 przy terminalu

~ . Zarejestruj się w systemie.

2. Wykonaj kilka wariantów operacji kopiowania plików tekst a i tekst b z katalogu lusrlstudentslstudentl do własnego podkatalogu założonego wcześniej, np. studentl/teksty.

Zmień katalog bieżący na usrlstudentslstudent1. Wykorzystaj to, że znajdujesz się w tym katalogu, do odpowiedniego sformułowania

48

Rozdziaf 3.

składni operacji kopiowania pliku tekst a (do określenia pliku wejściowego i pliku wyjściowego nie są konieczne ścieżki absolutne; dla pliku wyjściowego wskazujemy podkatalog teksty za pomocą ścieżki relatywnej, rozpoczynającej się od katalogu bieżącego).

Zmień katalog bieżący na studentllteksty i skopiuj do tego katalogu plik tekst b znajdujący się w katalogu studentl. Czy podobnie jak poprzednio możesz wykorzystać nazwę ścieżki relatywnej ? Miejscem przeznaczenia tego pliku jest katalog bieżący. W składni polecenia cp możesz go wskazać nazwą ścieżki absolutnej lub z wykorzystaniem . (kropki). Zwróćmy przy tym uwagę, że polecenie to nie może być sformułowane w postaci:

cp /usr/students/student1/tekst b teksty

jeśli przez nazwę teksty użytkownik rozumie nazwę katalogu bieżącego.

System interpretuje słowo teksty jako nazwę pliku wyjściowego w katalogu bieżącym. Jak widać, nazwy plików i katalogów mogą być identyczne.

• Utwórz kopie zapasowe plików tekst a i tekst b w katalogu student1/teksty - odpowiednio pod nazwami tekst 1z i tekst 2z ­formułując operacje kopiowania w różny sposób, np. cp tekst a .ltekst_ 1 z

• Sprawdź, czy działanie polecenia cp dla powyższego przypadku zależy od tego, czy plik o nazwie tekst 1z istniał uprzednio na dysku.

• Sprawdź, czy polecenie cp tekst a tekst a jest poprawne.

Przejdź do katalogu studentllroboczy i spróbuj skopiować kilka plików jednocześnie (np. tekst a i tekst b z katalogu student1) do katalogu roboczy:

cp /usr/students/student1/tekst a /usr/students/student1/tekst b . Zbadaj reakcję systemu na próbę skopiowania pliku tekst b do nie istniejącego katalogu (lub podanego z błędną nazw, na przykład:

cp tekst b /usr/studentki/tekst b

Zbadaj reakcję systemu na próbę skopiowania dowolnie wybranego pliku z katalogu teksty do pliku bez zapisu w katalogu student1. System zareagował wyświetlając następujący komunikat:

cp: cannot create /usr/students/student1/bez zapisu

Przejdź do katalogu studentl. Sprawdź prawa dostępu do pliku bez zapisu (Is -la bez zapisu). Jak wynika z analizy tych praw, użytkownik nie ma prawa zapisu w tym pliku.

Podobnie spróbuj skopiować wybrany plik do katalogu innego użytkownika, np. usrlstudentslstudent8.

,S'vstent plików 49

3. Sprawdź zawartość katalogu roboczy. Powinny tam znajdować się pliki tekst a i tekst b. Wykorzystując polecenie mv zmień ich nazwy na łekst lusunac i teksf 2usunac, pozostawiając je w tym katalogu. Wykonaj następujące operacje zmiany nazwy pliku:

Spróbuj przemianować plik bez odczytu w katalogu student1. System wyświetla komunikat o błędzie. Sprawdź prawa dostępu do tego pliku.

Jak wynika z analizy atrybutów pliku, użytkownik nie ma prawa do jego odczytu, tak więc operacja mv nie może być wykonana. Niestety, nie we wszystkich wersjach systemu UNIX.

• Spróbuj przepisać plik teksł lusunac z katalogu roboczy do pliku bez zapisu.

Omówione do tej pory polecenia umożliwiają niszczenie plików, jednakże jest to efekt uboczny ich działania. Poleceniem przeznaczonym specjalnie do tego celu jest rm (ang. remone - usuń). Jeżeli plik jest chroniony przed zapisem, tzn. teoretycznie nie mamy prawa do zniszczenia go, otrzymamy w odpowiedzi ostrzeżenie z pytaniem, czy na pewno chcemy go zniszczyć. Podanie odpowiedzi zaczynającej się od y (ang. yes - tak) powoduje zniszczenie pliku. Jednak w niektórych realizacjach systemu L1NIX nie jest to możliwe i użytkownik wtedy otrzymuje odpowiedź:

rm: file not removed

Polecenie to powinno być stosowane szczególnie ostrożnie w przypadku wykorzystywania uogólniających nazw plików (*), gdyż łatwo jest zniszczyć za dużo, tracąc szanse na późniejsze odtworzenie niepotrzebnie zniszczonych plików.

Polecenie rm zawiera trzy opcje:

-i polecenie usunięcia pliku z potwierdzeniem decyzji,

-r polecenie usunięcia niepustego katalogu lub usunięcia pliku bez czekania na potwierdzenie,

-f polecenie usunięcia pliku bez czekania na potwierdzenie.

Najbezpieczniej jest wykorzystywać polecenie rm z opcją-i, np.

rm -i nazwa~liku

Przed usunięciem pliku system zadaje użytkownikowi pytanie:

rm: remove nazwa_pliku ?

żądając potwierdzenia decyzji o usunięciu danego pliku. Plik ten zostanie usunięty, jeśli użytkownik udzieli odpowiedzi y (ang. yes - tak).

Jeżeli chcemy używać pliku innego użytkownika lub naszego własnego pliku zapisanego w innym katalogu, to nie musimy go kopiować. Wystarczy dołączyć go do naszego katalogu poleceniem In (ang. lirek - przyłącz), które powoduje dołączenie wybranego pliku do wybranego katalogu. Innymi słowy, polecenie to powoduje utworzenie łącznika do żądanego pliku. System LINIX umożliwia tzw. "twarde" lub "miękkie" dołączenie pliku.

SD Rozdziat 3.

Dołączenie "twarde" polega na dokonaniu odpowiedniego wpisu do katalogu użytkownika, który przyłącza się do danego pliku, tak jak w przypadku zwykłego pliku. W konsekwencji program usługowy file określający rodzaj pliku badanego nie rozróżnia pliku dołączonego i pliku zwykłego. Jednakże pliki dołączone to nie "indywidualne" kopie plików użytkowników. Zmiana praw dostępu w jednym z dołączonych plików automatycznie zmienia prawa w innych dołączeniach. Można dokonać dołączenia do pliku, który sam jest już plikiem przyłączonym, jednakże w rzeczywistości dowiązanie zostanie wykonane do rzeczywistego, macierzystego pliku. Skutkiem tego dołączenie nie zostaje usunięte, gdy zostanie usunięte dowiązanie, z którego powstało dane dowiązanie. Plik rzeczywisty może zostać usunięty dopiero wtedy, gdy zostaną skasowane wszystkie dowiązania do niego.

Składnia polecenia wykonującego tzw. "twarde" dołączanie pliku jest następująca: In plik rzeczywisty plik doł~czany

Przykładowo, zamiast kopiować plik tekst_a z katalogu studenty możemy go dołączyć do katalogu robocry poleceniem:

$ In lusrlstudentslstudent1 ftekst a /usr/students/student1/roboczy/tekst 1_In

Argumentami polecenia In w tej postaci mogą być tylko zwykłe pliki, natomiast nie mogą nimi być katalogi. Żaden katalog nie może figurować w wykazie więcej niż jednego, innego katalogu. Ponadto, nie można dołączyć pliku z innego systemu plików, a więc z innego urządzenia fizycznego.

Dołączanie "miękkie" ma miejsce, gdy polecenie In zostanie wywołane z opcją -s, na przykład:

$ In -s plik a plik b

Zwróćmy uwagę, że gdy wyświetlimy informacje o pliku plikb korzystając z polecenia Is, to w ostatniej kolumnie, gdzie normalnie wyświetlana jest po prostu nazwa pliku (czyli w naszym przypadku - plik b), teraz pojawi się następujący zapis:

plik_b --> plik a

Wywołanie polecenia Tile z parametrem plik_b daje w odpowiedzi informację, że jest to symboliczne przyłączenie. Skasowanie pliku plika powoduje również usunięcie pliku plikb, jednakże jest to interpretowane w dość specyficzny sposób, a mianowicie, jeśli dokonujemy edycji pliku plik_b wykorzystując w tym celu edytor vi (a plika został tymczasem skasowany), to po zakończeniu pracy z edytorem poleceniem ZZ okazuje sie, że plik plika zostanie ponownie utworzony. Poleceniem In z opcją -.s można dołączać katalogi.

Po wykonaniu polecenia rm zawartość dołączonego pliku nie ulega zniszczeniu, usuwane są jedynie łączniki do pliku. Tak więc możliwa jest sytuacja, że plik dołączony przez jednego użytkownika, tzn. odnotowany z liczbą łączników równą 2, zniszczony następnie przez właściciela, będzie istniał nadal w katalogu nowego użytkownika, lecz z liczbą łączników równą 1. Nie będąc właścicielem pliku nowy użytkownik nie będzie mógł zmienić praw dostępu.

Polecenie cat służy do łączenia i wyświetlania plików. Umożliwia odczytanie podanych plików, a następnie zapisanie ich w pliku wyjściowym lub na standardowym urządzeniu wyjścia (ekran terminala). Jeśli nie zostanie podany plik wejściowy lub jeśli podany zostanie znak "-", polecenie cat pobiera dane ze standardowego źródła danych

System plików SI

wejściowych (klawiatura). Naleźy jednak pamiętać, źe podstawowym celem tego polecenia jest scalanie plików. Polecenie cat w postaci

cat pliki plik2 > plika

łączy pliki pliki i plik2 oraz powoduje umieszczenie ich łącznej zawartości w pliku plika. Następujące polecenie powoduje dopisanie pliku pliki do pliku plik2:

cat plik1»plik2

Polecenie cat moźna wykorrystać do wyświetlania zawartości wskazanych plików, jednakże w zasadzie jest ono przeznaczone do innych celów. Na przykład polecenie to podane bez żadnych argumentów może służyć do zakładania niewielkich plików tekstowych [3]:

$ cat > plik tekstowy Enter Zestaw znaków stanowiacy Enter zawartosc pliku Enter

Ctri-d

Wyświetlanie pliku z wykorzystaniem polecenia cat odbywa się w sposób ciągły, co jest niestety dość uciążliwe. Chcąc wstrzymać wyświetlanie należy wcisnąć klawisze Ctrl-s, a wznowienie wyświetlania następuje po wciśnięciu klawiszy Ctrl-q. Jeżeli polecenie cat wydamy z opcją -n, to wtedy podczas wyświetlania dodatkowo wszystkie wiersze zostaną ponumerowane. Dodanie opcji -b spowoduje, że puste wiersze zostaną wyłączone z numeracji.

Sesja nr 8 przy terminalu

~ . Zarejestruj się w systemie.

2. Przeanalizuj prawa dostępu do pliku łeksł a w katalogu słudenłl. Wykonaj zmianę atrybutów tego pliku dla reszty użytkowników poza właścicielem i jego grupą.

3. Zmień atrybuty pliku teksł lusunac dla wszystkich użytkowników. Nabaj im prawo do wykonywania tego pliku. Zwróćmy uwagę, źe jest to zwyczajny plik tekstowy, a jednak można nadać mu atrybut - x, wykonywalny. Oznacza to, że wykonujac polecenie chmod system nie analizuje zawartości pliku, pomimo że w ogólności taka operacja może być przez system wykonana.

4. Spróbuj usunać plik bez zapisu z katalogu studentl. System reaguje wyświetlajac komunikat:

rm: override protection 444 for bez zapisu

co znaczy: "ominać prawa dostępu pliku bez zapisu". Odpowiadając na to pytanie yes - tak, udzielamy pozwolenia na skasowanie pliku. Sprawdź, czy można usunać plik, którego nie jest się właścicielem.

52 Rozdziaf 3.

5. Wykorzystaj nazwy uogólniające do usunięcia plików tekst lusunac i tekst 2usunac z katalogu roboczy.

6. Przyłącz do własnego katalogu roboczy plik tekst b znajdujący się w katalogu studentl zmieniając jego nazwę na tekst b In. Poleceniem Is sprawdź liczbę łączników do tego pliku.

Sprawdź, czy można dołączyć do własnego katalogu pliki bez zmiany ich nazwy oraz czy można zmienić prawa dostępu dołączanych plików.

7. Zbadaj reakcję systemu na próbę dołączenia do własnego katalogu katalogu innego użytkownika. Spróbuj dołączyć wybrany plik z katalogu innego użytkownika.

8. Usuń dołączony plik poleceniem rm. Sprawdź, czy istnieje w oryginalnym katalogu i ile ma łączników.

9. Sprawdź, czy łącznik symboliczny może wskazywać na inny łącznik symboliczny 10. Wydaj kolejno następujące polecenia:

$ In -s tekst b tekst b In $ In -s tekst b In tekst b

tworząc w ten sposób zapętlony łącznik. Sprawdź, jaki komunikat zostanie wyświetlony po wydaniu polecenia cat tekst b.

Do wyświetlania plików na ekranie terminalu przeznaczone są polecenia more i

Pg~ Polecenia te wyświetlają zawartość podanego pliku na ekranie terminalu, lecz

wstrrymują wypisywanie po zapełnieniu ekranu. Wznowienie wyświetlania następuje po wciśnięciu klawisza d (przesunięcie o pół ekranu) lub spacji (przesunięcie o cały ekran), lub Enter (przesunięcie o jeden wiersz). Użytkownik może zadeklarować liczbę wierszy w porcji tekstu do jednorazowego wyświetlenia w następujący sposób:

$ more -20 plik

Jednorazowo wyświetlanych będzie 20 wierszy pliku. Program more posiada pewną ilość opcji, z których warte wymienienia wydają się dwie: -c (ang. elear .screen) oraz f (ang. fold lines). Pierwsza z nich powoduje każdorazowe mazanie ekranu przed wyświetleniem kolejnej partii tekstu, natomiast opcja f to, iż długie wiersze wyświetlanego tekstu (zbyt długie, aby w całości zmieścić się na ekranie) nie są przełamywane, a na ekranie pojawia się tylko ich fragment - tyle znaków, ile zmieści się na monitorze danego typu. Kolejna grupa argumentów [3) - poprzedzanych znakiem plus - dotyczy ustalenia miejsca, od którego należy rozpocząć wyświetlanie zawartości pliku. Możemy rozpocząć przeglądanie od wiersza o określonym numerze, na przykład od wiersza setnego:

$ more +100 plik

System plików .53

Program more pozwala również na wyświetlanie od wiersza zawierającego tekst pasujący do podanego wcześniej wzorca. Postać polecenia more jest wtedy następująca:

more +lwzorzec plik

W programie more nie ma niestety możliwości cofania zawartości wyświetlanego pliku. Bezpośrednio z programu more można rozpocząć pracę z edytorem vi. Naciśnięcie klawisza z literą v powoduje rozwidlenie i utworzenie nowego procesu, wykonującego program edytora vi. Można przetwarzać ten fragment tekstu, prry którym zatrzymał się program more. Po zakończeniu edycji następuje powrót do programu more.

W podobny sposób wygląda praca z programem pg. Spacja i d dają taki sam efekt, jak w poleceniu more. Poprzedzenie ich liczbą ze znakiem + lub - powoduje przesunięcie o podaną liczbę ekranów w przód lub tył, np. -3spacja oznacza przesunięcie tekstu o trzy ekrany w tył. Dodatkowe możliwości tego programu to przejście bezpośrednio do ostatniej strony (polecenie $). Pełną informację o jego możliwościach użytkownik może uzyskać wciskając klawisz h (ang. help). Z poziomu polecenia pg można również wywoływać edytor vi, jednakże w tym przypadku v trzeba zastąpić !vi nazwa pliku. Wciśnięcie klawisza q końcry pracę z tym programem.

Polecenie copy służy do sporządzania kopii zawartości katalogów do innych katalogów. Możliwe jest kopiowanie całych systemów plików, jako że w razie potrzeby tworzone są konieczne katalogi podrzędne. Składnia tego polecenia jest następująca:

copy ~opcjeJ miejsce~ochodzenia miejsce~przeznaczenia

przy czym miejsce_pochodzeniajest to plik lub katalog, który musi istnieć.

Jeśli nie jest to katalog, wtedy polecenie działa w taki sam sposób, jak cp. Miejscem przeznaczenia kopii musi być albo plik, albo katalog, który jest różny od pierwowzoru. Jeśli zarówno miejsce~ochodzenia, jak i miejsce-przeznaczenia nie są katalogami, to polecenie copy działa podobnie jak cp.

Jeśli pliki, katalogi oraz pliki specjalne nie istnieją jeszcze w miejscu przeznaczenia, są one tam tworzone z powtórzeniem tych samych parametrów, co ich pierwowzory w miejscu pochodzenia. Użytkownik oraz parametry dostępu nie ulegają zmianie.

Wszystkie opcje muszą być podane jako osobne argumenty i mogą pojawiać się w dowolnej kolejności nawet za pozostałymi argumentami. Polecenie copy jest najczęściej używane z następującymi argumentami:

-at - polecenie uzyskania potwierdzenia użytkownika przed przystąpieniem do operacji kopiowania. Jeśli jego odpowiedź nie rozpoczyna się od litery "y", do kopiowania nie dochodzi. Opcja ta również powoduje załączenie opcji -ad;

-l - polecenie zastosowania tam, gdzie to jest możliwe, powiązań międry plikami zamiast sporządzania kopii. Przypomnijmy, że powiązań nie tworzy się nigdy dla plików specjalnych i katalogów;

-n - polecenie sporządzenia kopii tylko wtedy, kiedy plik docelowy jeszcze nie istnieje. Jeśli istnieje, istniejący już plik pozostaje bez zmian. Opcja -n nie dotyczy katalogów;

-o - załączenie tej opcji powoduje powtórzenie dla każdego z kopiowanych plików parametrów właściciela pliku i przynależności do grupy według

.S4 Rozdział 3. parametrów plików źródłowych. Jeśli opcji tej nie ma, właścicielem kopii zostaje użytkownik, który uruchomił polecenie copy;

-m - załączenie tej opcji powoduje ustalenie terminu ostatniej modyfikacji i dostępu do każdego z kopiowanych plików według parametrów pliku źródłowego. Jeśli ópcji tej nie ma, termin modyfikacji ustalany jest według czasu sporządzania kopii;

-r - zastosowanie tej opcji stanowi polecenie rekurencyjnego analizowania każdego z napotkanych katalogów. W przeciwnym wypadku wszelkie katalogi są ignorowane;

-ad - polecenie uzyskania potwierdzenia od użytkownika, czy opcja -r ma zostać zastosowana w stosunku do danego katalogu. Jeśli odpowiedź użytkownika nie rozpoczyna się od litery "y", katalog zostanie zignorowany;

-v - polecenie wyświetlania komunikatów informujących o przebiegu programu. Polecenie Ip powoduje wydrukowanie na drukarce plików o podanych nazwach wraz ze związanymi z nimi informacjami (informacje te nazywa się ogólnie etykietą zgłoszenia). Składnia tego polecenia jest następująca:

Ip [opcje)[pliki...)

Jeśli nie poda się żadnych nazw plików, dane wejściowe pobierane są z klawiatury. Pliki zostaną wydrukowane w kolejności, w jakiej ich nazwy podane zostały w wierszu polecenia.

Opcje polecenia Ip mogą pojawiać się w dowolnej kolejności i mogą być przemieszane z nazwami plików. Najważniejsze z nich są następujące:

-d drukarka - opcja ta umożliwia specyfikację konkretnej drukarki lub klasy drukarek, które miałyby wykonać zlecenie. Jeśli argument drukarka oznacza pojedynczą drukarkę, zlecenie zostanie zrealizowane na tej konkretnej drukarce. Jeśli natomiast ma to być klasa drukarek, zlecenie zostanie zrealizowane na pierwszej dostępnej drukarce należącej do tej klasy. Standardowo argument drukarka jest pobierany ze zmiennej systemowej Lptest, jeśli została ona zadeklarowana. Jeśli nie, zlecenie kierowane jest na standardową drukarkę całego systemu;

-n liczba - opcja ta umożliwia podanie liczby kopii wydruku. Standardowo przyjmuje się jeden wydruk każdego pliku;

-r - polecenie usunięcia pliku po wykonaniu wydruku;

-t tytui - polecenie wydrukowania tytułu na pierwszej stronie wydruku pliku;

-w lub . m - polecenie wyświetlenia komunikatu na terminalu użytkownika po zakończeniu wydruku plików.

W systemie UNIX proces drukowania jest obsługiwany przez tzw. mechanizm spooler (ang. System Peripherials Operating On-Line - systemowe urządzenie zewnętrzne obsługiwane w trybie on-line). Przed drukowaniem pliki są wstawiane do kolejki plików oczekujących na dostęp do drukarki. Mechanizm spooler zostaje uruchomiony automatycznie w chwili włączenia systemu.

Polecenie lp ustala dla każdego zgłoszenia niepowtarzalną etykietę zgłoszenia, która wyświetlana jest na ekranie terminalu. Etykietę tę można wykorzystać do anulowania zgłoszenia wydruku poleceniem cancel.

System plików 55

Argumentami polecenia cancel mogą być albo etykiety zleceń (to znaczy etykiety podawane przez polecenie Ip), albo nazwy drukarek. Składnia polecenia cancel jest następująca:

cancel etykieta zlecenia) ~drukarkaJ

Wydanie polecenia cancel wraz z odpowiednią etykietą zlecenia powoduje jego anulowanie, nawet jeśli jego wydruk właśnie trwa. Podanie w poleceniu cancel nazwy drukarki anuluje zgłoszenie, którego wydruk przebiega właśnie na drukarce o podanej nazwie.

O stanie zlecenia drukowania możemy się dowiedzieć wydając polecenie Ipstat z opcją -o. W odpowiedzi system wyświetla informacje o wsrystkich zleconych mu procesach drukowania, podając etykiety zleceń, nazwy użytkowników zlecających, czas każdego zlecenia oraz wskazując, które zlecenie jest aktualnie realizowane i na której drukarce. Pominięcie opcji -o powoduje wyświetlenie tychże informacji, ale dotyczących tylko zleceń użytkownika wydającego to polecenie. Polecenie Ipstat może być również wykorzystane do określenia stanu wybranego zlecenia wydruku:

Ipstat etykieta zlecenia

lub stanu drukarek, lub określonej drukarki w systemie (opcja p):

Ipstat pdrukarka

Sesja nr 9 przy terminalu

1. Zmień katalog bieżący na teksty. Wykorzystując polecenie cat wyświetl na ekranie terminalu tekst a (wstrzymywanie przesuwu ekranu - CM-s, wznawianie przesuwu - CM-q).

2. Wyświetl zawartość tego samego pliku wykorzystujac z kolei polecenie pg. Przećwicz przesuwanie ekranu w przód i w tył. Z poziomu programu pg wywołaj edytor vi i w dowolnie wybranym miejscu pliku tekst a wprowadź następujacą sentencję: UNIX !! To jest to !!

3. Wykorcystaj program more w odpowiedniej postaci (tzn. z odpowiednim wzorcem) do wyszukania fragmentu pliku tekst a, który zawiera zdanie UNIX !! To jest to !! Czy podczas wyszukiwania wzorca w tekście program more ustawia znacznik dokładnie w wierszu zawierajacym wzorzec ?

Sprawdź, jak zachowa się program more w razie, gdy nie znajdzie żadanego fragmentu tekstu.

4. Wykorzystujac polecenie cat połacz pliki:

. tekst_1z i tekst 2z z katalogu teksty, a plik wynikowy nazwij tekst 3z;

sprawdź stan odpowiednich katalogów po wykonaniu tego polecenia;

.S6 Rozdzial 3.

dopisz zawartość pliku tekst 1z do pliku tekst 2z; sprawdź stan katalogów;

wyświetl na ekranie terminalu zawartość plików tekst 3z i tekst 2z wykorzystuj~,c w tym celu polecenia cat i pg.

5. Wykorzystaj polecenie copy (z opcjami a, I, v) do skopiowania katalogu teksty. Nowy katalog nazwij teksty_kopia. Spróbuj skopiować katalog innego użytkownika (z opcja m, o).

ó. Wyprowadź pliki tekst a i tekst 3z z katalogu teksty na drukarkę (Ip). Wykorzystujac polecenie cancel anuluj polecenie drukowania pliku tekst 3z. Wykorzystaj opcję w oraz [-t tytufj do wyprowadzenia tytułu na pierwszej stronie wydruku pliku.

Programy pomocnicze dotyczące plików

Każdy, nawet doświadczony użytkownik, może zapomnieć, w którym katalogu jest przechowywany potrzebny plik. Należy wówczas wykorzystać polecenie find. Umożliwia ono przeszukanie całego drzewa katalogów, począwszy od podanego katalogu, w celu znalezienia wsrystkich plików odpowiadających podanemu opisowi. Typowa postać polecenia fnd jest następująca:

find katalog opisJnliku

gdzie katalog określa wierzchołek drzewa do przeszukania (przeszukanie obejmuje jego wszystkie podkatalogi, wsrystkie ich podkatalogi itp.). Zgodnie z ogólnymi regułami, bieżący katalog może być oznaczony jako kropka (.), a katalog nadrzędny jako dwie kropki (..). Natomiast opis-pliku jest zbiorem warunków ustalających cechy charakterystyczne szukanego pliku. W postaci najprostszej może to być po prostu nazwa pliku. Na przykład, gdy znana jest tylko nazwa pliku bez pełnej ścieżki dostępu, polecenie

$ find .. -name advacom tekst -print

spowoduje rozpoczęcie przeszukiwania od katalogu nadrzędnego w stosunku do katalogu bieżącego, przez wszystkie podkatalogi - w celu znalezienia pliku zwykłego o nazwie advacom_tekst (opcja -name oznacza, że poszukuje się plików, które mają określoną nazwę). Po znalezieniu tego pliku na terminalu będzie wypisana pełna nazwa ścieżkowa, jako że w poleceniu występuje print (opcja prim oznacza żądanie wyświetlenia nazw ścieżek dla wsrystkich plików, które mają żądaną nazwę). W podobny sposób można szukać plików, których nazwy zawierają podane ciągi znaków, plików o podanym rozmiarze, plików należących do podanych właścicieli itp. Opisy można łącryć w logiczne kombinacje korzystając z operatorów alternatywy (-o), koniunkcji i negacji (!). Na przykład następujące polecenie

$ find . -name "*tekst*" -mtime -5 -atime +1 -print

Svstem plików 5 %

spowoduje wypisanie listy nazw ścieżek wsrystkich plików zawierających w nazwie ciąg znaków tekst, zmodyfikowanych nie wcześniej niż 6 dni temu, z których korzystano co najmniej 2 dni temu. Jeżeli chcemy podać dokładną liczbę dni, które upłynęly od ostatniej operacji na pliku (atime lub mtime), podajemy po prostu tę liczbę. Znak plus (minus) poprzedzający daną liczbę oznacza okres dłuższy (krótszy) od podanego. Przeszukanie, w tym przypadku, dotycry drzewa o wierzchołku z katalogu aktualnego. Użycie apostrofów w nazwie pliku pozwala na wprowadzenie do niej znaków uogólniających *, [ i ?. Innymi słowy, jeżeli w parametrach polecenia Pind używa się znaków specjalnych, wówczas należy poprzedzić je znakiem \ (backslash) albo umieścić cały ciąg znaków w pojedynczych apostrofach.

Jeżeli w tekście polecenia dwa kryteria wymienione są jedno za drugim (jak w przykładzie wyżej), ze zwykłym odstępem, wówczas wyszukiwane są pliki spełniające obydwa kryteria naraz. Jest to koniunkcja, czyli iloczyn logiczny kryteriów.

Alternatywę dwóch warunków oznaczamy przez umieszczenie między nimi parametru -o (ang. or). Regułą jest wówczas ujęcie całego wyrażenia logicznego w nawiasy w postaci ' \( ' oraz ' \) ' (zwróć uwagę na odstępy i znaki backslash).

Ostatnim operatorem logicznym, który stosuje się w poleceniu find, jest znak (wykrzyknik) - jest on traktowany jako znak negacji następującego po nim warunku. Polecenie End posiada jeszcze kilka opcji prrydatnych w codziennej pracy. Najważniejsze z nich są następujące:

-type x - poszukiwanie plików typu x, gdzie x może przyjmować między innymi następujące wartości:

b - plik specjalny blokowy, c - plik specjalny znakowy, d- katalog,

• f - plik zwykły;

-links n - poszukiwanie plików, które posiadają n dowiązań;

-sine n~cJ - poszukiwanie plików o rozmiarze n bloków (1 blok - 512 bajtów); jeśli po n zostanie umieszczona litera c, to znaczy, że wielkość pliku została wyrażona w znakach;

-user uname - poszukiwanie plików, które należą do użytkownika uname; -exec-cmd - po znalezieniu wyspecyfikowanych plików powoduje wykonanie polecenia cmd; na końcu tego polecenia musi być umieszczony średnik; argumenty polecenia cmd należy opatrryć nawiasami klamrowymi;

-ok cmd - opcja ta stanowi uzupełnienie opcji poprzedniej, a powoduje to, że przed wykonaniem polecenia cmd jest ono wyświetlane na ekranie wraz z zapytaniem, czy ma być wykonane.

Na przykład następujące polecenie

$ find \ (-name core -o -name "".out") -atime +7 -exec rm {} \;

spowoduje skasowanie w systemie wsrystkich plików o nazwie core lub dowolnej nazwie kończącej się znakami .ort, które nie były używane przez ostatnich 7 dni. Polecenie umieszczone we frazie -exec lub -ok musi być zawsze zakończone sekwencją znaków ' \;' (odstęp, backslash, średnik).

Polecenie find służy do wyszukiwania plików, ale nie bada ich zawartości. Stosując polecenie Is można dowiedzieć się, jaki jest typ pliku (zwykły, specjalny, katalog), polecenie to cue określa jednak, jakiego rodzaju materiale phk zav~iiera. W tym

ss

Rozdział 3.

celu należy wykorrystać polecenie file, które sprawdza nie tylko bity określające typ pliku, lecz również zawartość pliku. Ma ono następującą postać:

file nazwa~liku

W poleceniu można podać kilka nazw plików lub nazwy ze znakami uogólniającymi. Wypisuje ono rodzaj zawartości każdego badanego pliku.

Sesja nr 10 przy terminalu

~ . Wykorzystaj polecenie find do odszukania wszystkich plików, które zawierają w nazwie ciąg znaków tekst. Określ rodzaje tych plików wykorzystujac w tym celu polecenia Is i file. Przeanalizuj różnice w działaniu tych poleceń.

2. Sprawdź, co robi polecenie Pind wydane w następujacej postaci: $ find / -print

3. Wprowadź polecenie fnd z opisem nie istniejacego pliku. Jaki komunikat zostanie wyświetlony, jeśli nie znaleziono żadnego pliku spełniajacego zadane kryterium ?

4. Wykorzystaj polecenie Pind do przeniesienia wszystkich swoich plików, które nie były używane od co najmniej 15 dni, do katalogu pliki stare.

5. Wykonaj kopię pliku tekst a, wykorzystuj~,c jak poprzednio polecenie find. Plik wynikowy o nazwie tekst ą bis umieść w katalogu teksty.

Ó. Wykorzystując edytor vi utwórz w katalogu roboczy dwa pliki: pracownicy_1 i pracownicy_2 o następujacej zawartości:

pracownicy_ 7:

5 Królikowski Zbyszko 1 Brzeziński Jerzy

3 Morzy Tadeusz 2 Jezierski Juliusz 4 Januchta Marcin 6 Kokowski Tomasz

pracownicy_2

bazy danych, systemy operacyjne rozproszone systemy komputerowe bazy danych, grafika komputerowa obiektowe bazy danych

bazy danych, bazy wiedzy sieci komputerowe

7 Matysiak Maciej bazy danych i systemy CASE

9 Sajkowski Michał sieci i systemy operacyjne

8 Koszlajda Tomasz bazy danych

10 Krzyżagórski Piotr systemy komputerowe

11 Szulczyński Jacek bazy danych

12 Stroiński Maciej sieci komputerowe

System plików .59

7. Usuń duplikaty różnych plików znajdujacych się w twoich katalogach. Po zakończeniu tej sesji katalog student1 powinien zawierać trzy podkatalogi: teksty, roboczy i programy (przy czym ten ostatni powinien być pusty).

Katalog teksty powinien zawierać jedynie pliki: tekst a, tekst b oraz tekst a_bis, a katalog roboczy - pliki: pracownicy_1 oraz pracownicy_2.

$. Usuń podkatalog teksty_kopie i pliki stare, pamiętajac o tym, że nie można usuwać niepustych katalogów.

9. Zakończ sesję przy terminalu.

W celu dołączenia nowego hierarchicznego systemu plików do już istniejącego konieczne jest wykonanie polecenia mount, tzn. zamontowanie drzewa reprezentującego dołączany system plików w systemie już istniejącym. Operacja montowania dotyczy najczęściej wymiennych jednostek pamięci zewnętrznej (jak np. dyskietki) i polega na umieszczeniu katalogu pierwotnego (ang. root) dołączanej jednostki w istniejącym katalogu jednostki stałej, zamiast innego pustego katalogu należącego do tego użytkownika. Polecenie to ma następującą składnię:

mount ldevlurradzenie katalog zasłąpiony

Prrykładowo, zamontowanie systemu plików z dyskietki w katalogu robocry (musi on być pusty) może mieć następującą postać:

$ mount /dev/dfo/ /usr/students/studentl/roboczy

Zarówno plik specjalny reprezentujący urządzenie, jak i zastępowany pusty katalog muszą istnieć przed wydaniem polecenia mount. W większości realizacji systemu UNIX polecenie to jest zastrzeżone dla administratora systemu.

Polecenie umount służy do zdemontowania przenośnej jednostki pamięci zewnętrznej i ma następującą składnię:

umount ldevlurzadzenie

Przykładowo, wydanie polecenia umount /dev/dfo0 oznacza odłączenie dyskietki uprzednio dołączonej poleceniem mount. Katalog zawierający uprzednio katalog pierwotny tej jednostki staje się pusty.

Istnieje więcej poleceń dotyczących operowania plikami, lecz nie są one tak istotne dla początkujących użytkowników. Zostaną przedstawione przy okazji omawiania programów usługowych systemu UI~1IX w rozdziale następnym, przeznaczonym dla nieco bardziej zaawansowanych urytkowników.



Wyszukiwarka

Podobne podstrony:
System operacyjny UNIX dla poczatkujacych i zaawansowanych, rozdzial1 i2
System operacyjny UNIX dla poczatkujacych i zaawansowanych, rozdzial8 i reszta
System operacyjny UNIX dla poczatkujacych i zaawansowanych, rozdzial6
System operacyjny UNIX dla poczatkujacych i zaawansowanych, rozdzial5
System operacyjny UNIX dla poczatkujacych i zaawansowanych, podsumowanie
System operacyjny UNIX dla poczatkujacych i zaawansowanych, skorowidz
Strzelecki - kolos-wejściówka -pytania i odp, WAT, semestr VI, systemy operacyjne UNIX
Pierwsza wersja systemu operacyjnego Unix powstała w Bell Labs firmy AT
Pierwsza wersja systemu operacyjnego Unix powstała w Bell Labs firmy AT
Solaris pytania 02, WAT, semestr VI, systemy operacyjne UNIX
Systemy operacyjne unix polecenia podstawowe
Przepisy z wołowiny dla początkujących i zaawansowanych
System operacyjny UNIX

więcej podobnych podstron