Systemy Operacyjne laboratoria 3 i 4 teoria


Systemy Operacyjne - laboratoria 3 i 4 - teoria

Pliki: rodzaje, właściwości, prawa, podstawowe operacje

Celem laboratorium jest zapoznanie studentów z podstawowymi informacjami na temat plików w

systemie UNIX. W szczególności z ich rodzajami (typami), właściwościami oraz powiązanymi z

nimi prawami. Dodatkowo na zajęciach tych studenci powinni poznać polecenia wykorzystywane

do różnorakich operacji na plikach.

Laboratorium obejmuje następujące tematy:

postać UNIX-owego systemu plików (polecenia: ls, dir, vdir, tree),

rodzaje plików w systemie UNIX,

właściwości plików, prawa do plików, typy plików (polecenia: chmod, chgrp, chown, ln)

wyświetlanie zawartości plików (polecenia: cat, more, less, head, tail, wc),

tworzenie, kopiowanie, przenoszenie i usuwanie plików (polecenia: touch, cp, mv, rm, mkdir,

rmdir).

Pliki

W UNIX-ie (Linux-ie), inaczej niż w innych systemach operacyjnych, pojęcie pliku ma kluczowe i

centralne znaczenie [3]. Na przykład polecenia (programy) są wykonywalnymi plikami,

przechowywanymi w z góry przewidywalnych miejscach drzewa katalogowego. Systemowe

przywileje i prawa dostępu kontrolowane są prawie wyłącznie przez prawa dostępu do

odpowiednich plików. Nawet realizacja operacji wejścia/wyjścia do urządzeń i do plików jest

nierozróżnialna z punktu wiedzenia użytkowników. Także komunikacja między procesami odbywa

się przy użyciu struktur reprezentowanych w systemie jako pliki. Dlatego więc pojęcie pliku oraz

struktura drzewa katalogowego są jednymi z pierwszych rzeczy, z którymi powinniście się Państwo

zapoznać jako użytkownicy UNIX-a.

Tak jak większość współczesnych systemów operacyjnych [1], UNIX charakteryzuje się

hierarchiczną, drzewiastą strukturą organizacyjną, nazywaną systemem plików. Pień tego drzewa

(lub jak kto woli jego korzeń) stanowi katalog główny (ang. root directory). Katalog ten jest

oznaczany jest zastrzeżonym symbolem “/” (ang. slash).

$ tree / -dxL 1

/

|-- bin

|-- boot

|-- dev

|-- etc

|-- home

|-- initrd

1

|-- lib

|-- mnt

|-- opt

|-- proc

|-- root

|-- sbin

|-- tmp

|-- usr

`-- var

15 directories

Ca a przestrze dyskowa przeznaczona dla u ytkowników systemu dost pna ł ń ż ę jest w ramach tego

jednego drzewa katalogowego. Ponadto UNIX-owy opis pliku nie zawiera informacji o fizycznym

dysku, na którym plik ten faktycznie się znajduje.

Dostęp do plików zależy od tego, kto jest właścicielem pliku oraz jakie są prawa dostępu.

Bezpieczeństwo zasobów systemu UNIX zależy w dużym stopniu właśnie od tego, jakich

właścicieli i prawa dostępu posiadają pliki w połączeniu ze strukturą kont i grup użytkowników

systemu.

Właściciel pliku

Przydzielanie właściciela plikom w UNIX-ie jest nieco bardziej skomplikowane, niż w innych

systemach operacyjnych. Oprócz zwykłego właściciela, każdy plik ma również właściciela

grupowego, czyli grupę pliku. Użytkownik będący właścicielem pliku wcale nie musi być nawet

członkiem grupy, która jest grupą pliku, chociaż oczywiście najczęściej zdarza się, że grupa pliku,

jest grupą główną (tzw. login grupą) właściciela pliku.

Aby wyświetlić informacje o właścicielu pliku można wykorzystać omawiane już polecenie “ls -l”.

$ ls -l

razem 2

-rwxrwxrwx 1 student student 15421 paź 10 11:15 asu_gk_l_03_teoria.pdf*

-rwxrwxrwx 1 student student 8148 paź 7 14:16 asu_gk_l_03_zadania.pdf*

Zgodnie z tym co powiedziano przy okazji omawiania polecenia ls, trzecia kolumna wyświetla

nazwę właściciela pliku a czwarta nazwę grupy pliku.

Właścicielem nowo zakładanego pliku jest użytkownik, który go tworzy. Grupa pliku jest jednak

przydzielana w nieco bardziej złożony sposób, odmienny w różnych systamch UNIX-owych:

w Systemie V grupa pliku jest taka sama, jak bieżąca grupa użytkownika tworzącego plik

(również w Linux-ie),

w systemach typu BSD grupa pliku jest taka sama, jak grupa katalogu, w którym dany plik jest

tworzony (można wymusić takie zachowanie w Linux-ie, dodając do katalogu atrybut SGID,

szczegóły można odnaleźć w [2] i [3]).

Do zmiany właściciela i grupy pliku można wykorzystać polecenia “chown” (zmiana użytkownika)

i “chgrp” (zmiana grupy), polecenia te są szczegółowo opisane w dalszej części tego dokumentu.

Typy praw dostępu do plików i katalogów

Kiedy określony jest właściciel pliku, naturalne jest ustalenie, w jaki sposób plik będzie chroniony

2

przed niepowo anym dost pem (z drugiej strony za , w jaki sposób umo liwi ł ę ś ż ć dostęp do pliku tym

użytkownikom, którzy go potrzebują). Ochronę taką stanowią w UNIX-iep rawa dostępu do pliku.

Prawa dostępu do pliku ustala się przy pomocy polecenia “chmod” (jest ono omawiane w dalszej

części).

W UNIX-ie występują trzy typy praw dostępu do pliku: prawo czytania, pisania i wykonywania,

oznaczane odpowiednio literami r, w oraz x. Poniższa tabela opisuje ich znaczenie [3].

Prawo Znaczenie dla zwykłych plików Znaczenie dla katalogów

r Oglądanie zawartości pliku. Przeszukiwanie zawartości katalogu (np. w

celu wykonania polecenia ls).

w Modyfikowanie zawartości pliku. Modyfikowanie zawartości katalogu (np.

usuwanie z niego plików).

x Uruchomienie pliku wykonywalnego.

Uczynienie danego katalogu katalogiem

bieżącym (np. przy pomocy polecenia cd).

Kolejna tabela podsumowuje możliwości wynikające z różnych praw do katalogów [3].

Typy praw

dostępu Rezultat

---

Brak praw

Brak możliwości wykonywania jakichkolwiek operacji na plikach bądź

podkatalogach danego katalogu.

r--

Prawo czytania

Użytkownicy mogą wyświetlać nazwy plików z danego katalogu, bez

możliwości oglądania jednak ich atrybutów (tzn. rozmiaru, właściciela, praw

dostępu itd.).

--x

Tylko prawo

wykonywania

Użytkownicy mogą wykonywać tylko te programy z danego katalogu, o których

wiedzą, że się w nim znajdują. Nie moga obejrzeć nazw pozostałych plików.

r-x

Prawo czytania

i wykonywania

Umożliwia użytkownikom pracę z programami z danego katalogu oraz

wyświetlanie jego zawartości, ale nie pozwala na tworzenie i usuwanie plików z

danego katalogu.

rwx

Prawo czytania,

pisania i

wykonywania

Użytkownicy moga pracować z dowolnymi plikami w danym katalogu,

wyświetlać jego zawartość oraz tworzyć i usuwać dowolne pliki z tego katalogu.

Klasy praw dostępu

Prawa dostępu do plików w UNIX-ie są definiowane niezależnie dla trzech klas użytkowników:

prawa dostępu dla właściciela “u” (ang. user) - przydzielone właścicielowi,

prawa dostępu dla grupy “g” (ang. group) - przydzielone wszystkim członkom grupy, która jest

grupą pliku,

prawa dostępu dla pozostałych “o” (ang. other) - przydzielone wszystkim pozostałym

użytkownikom systemu (z wyjątkiem root-a).

3

Ustawianie ochrony pliku czy katalogu w UNIX-ie polega na podaniu, jakie typy praw dostępu

przydzielamy poszczególnym klasom użytkowników.

Prawa dostępu możemy wyświetlić przy pomocy polecenia ls:

$ ls -l

razem 2

-rwxrwxrwx 1 student student 15421 paź 10 11:15 asu_gk_l_03_teoria.pdf*

-rwxrwxrwx 1 student student 8148 paź 7 14:16 asu_gk_l_03_zadania.pdf*

Są one prezentowane w pierwszej z kolumn. Znak “-” i litery występujące na początku każdej linii

reprezentują tryb pliku (czyli typ pliku i prawa dostępu). Znaczenie tych 10 znaków wyjaśnia

kolejna tabela [3].

Typ

pliku

Prawa dla

właściciela Prawa dla grupy Prawa dla

pozostałych

- r w x r w x r w x

Pozycja 1 2 3 4 5 6 7 8 9 10

Prawo czytania * * *

Prawo pisania * * *

Prawo wykonania * * *

Pierwszy znak opisuje typ pliku. Znak minus pojawiający się na tym miejscu oznacza plik zwykły,

litera “d” natomiast katalog (pozostałe typy plików opisano dalej). Pozostałe 9 znaków należy

rozpatrywać trójkami. Pierwsza trójka dotyczy właściciela, druga grupy pliku, ostatnia zaś

pozostałych użytkowników systemu. W każdej trójce znajdują się trzy znaki, reprezentujące prawo

czytania, pisania i wykonywania pliku. Jeżeli dane prawo jest ustawione, w odpowiedniej trójce

pojawia się reprezentująca je litera. Jeśli nie, zastępuje ją znak minus.

Typy plików

Występowanie wielu typów plików spowodowane jest tym, że w UNIX-ie wszytko traktowane jest

jako plik. Nawet operacje wejścia/wyjścia z urządzeń reprezentowane są jako operacje na

odpowiednich plikach. Każdy typ pliku pełni w systemie odrębne funkcje.

Pliki zwykłe (oznaczane znakiem “-”) są plikami zawierającymi dane. Często określane są po

prostu jako “pliki”. Mogą to być wykonywalne pliki binarne, pliki wejściowe lub wyjściowe

programów, pliki zawierające teksty ASCII i wiele innych.

Katalogi (oznaczane litera “d”) są to pliki binarne zawierające listę plików (w tym innych

katalogów), które się w nich znajdują.

Pliki specjalne są to pliki umożliwiające realizację operacji wejścia/wyjścia z urządzeń. Pliki te

są przechowywane standardowo w katalogu “/dev” oraz w jego podkatalogach. Możemy

wyróżnić dwa podstawowe typy plików specjalnych: pliki specjalne znakowe (oznaczane litera

“c”) oraz pliki specjalne blokowe (oznaczane litera “b”). Więcej szczegółów na ten temat

możecie Państwo odnaleźć w [2] i [3].

Linki czyli pliki umożliwiające tworzenie wielu nazw dla pojedynczego pliku dyskowego.

Wyróżniamy dwa rodzaje linków: linki twarde i linki symboliczne. Link twardy umożliwia

tworzenie dwóch lub więcej nazw dla jednego i-węzła (co to takiego “i-węzły” możecie się

Państwo dowiedzieć szczegółowo z [2], dla uproszczenia można powiedzieć, że jest to obszar

4

partycji dyskowej w którym jest zapisana zawarto c pliku). Linki twarde ś dotyczą więc tego

samego fizycznego pliku dyskowego, ale każdy z nich stanowi oddzielne wejście w

odpowiednich katalogach (dzieki temu po skasowaniu jednego pliku, nadal możemy się dostać

do jego zawartości wykorzystując drugą nazwę). Linki symboliczne natomiast są plikami

wskazującymi na nazwę innego pliku zlokalizowanego w dowolnym miejscu systemu (w ich

przypadku nie ma ograniczenia do obszaru jednej partycji). Ponieważ linki symboliczne

wskazują na nazwę pliku zamiast na jego fizyczną lokalizację, mogą przekraczać fizyczne

granice urządzeń. Jednakże inaczej niż w przypadku linków twardych, skasowanie pliku na

którego nazwę wskazuje link symboliczny, sprawi, że będzie on wskazywał na nieistniejący

obiekt (analogia: skróty w systemie Windows pokazujące na już usunięte pliki). W przypadku

wyświetlania zawartości katalogu mieszczącego plik i link twardy, okaże się, że są one

nierozróżnialne. Odmienna sytuacja występuje w przypadku linków symbolicznych oznaczanych

literą “l” w polu określającym typ pliku. Szczegółowe przykłady tworzenia i różnych

właściwości obu rodzajów linków możecie Państwo odnaleźć w dalszej części, przy okazji

omawiania polecenia “ln”.

Sockety (oznaczane literą “s”) czyli pliki specjalne wykorzystywane do komunikacji między

procesami. Sockety (gniazda) sa nierozerwalnie związane z oprogramowaniem sieciowym

TCP/IP.

Nazwane potoki (oznaczane litera “p”) są potokami, do których aplikacje mogą się odwoływać

za pomocą nazwy. Stanowią one, po socketach, kolejny mechanizm komunikacji między

procesami.

Wyświetlając zawartość katalogu przy pomocy polecenia “ls -l”, typ pliku rozpoznajemy zwracając

uwagę na znak poprzedzający prawa dostępu:

Znak Znaczenie

- Plik zwykły (twardy link).

d Katalog

l Link symboliczny

b Plik specjalny blokowy

c Plik specjalny znakowy

s Socket

p Nazwany potok

Dalsza część dokumentu zawiera krótkie opisy poleceń omawianych na laboratorium.

Polecenie ls

Polecenie ls było omawiane na poprzednich zajęciach, niniejszy opis stanowi uzupełnienie

prezentowanych tam treści.

W systemie UNIX większość plików konfiguracyjnych, czy też katalogów przechowujących

żnorakie ustawienia posiada tę własność, że ich nazwa rozpoczyna się od znaku “.”. Dzięki tej

zasadzie, polecenie ls może pomijać te pliki, wyświetlając zawartość katalogów, gdyż informacja o

nich byłaby w większości wypadków zbędna (podczas normalnej pracy z plikami). W związku z

tym polecenie to posiada specjalną opcję “-a”, umożliwiającą wyświetlanie wszystkich plików i

katalogów (również tych, których nazwa rozpoczyna się od znaku “.”).

5

Poni sze przyk ady pokazuj ró nic w dzia aniu ls z opcj “-ż ł ą ż ę ł ą a” i bez tej opcji:

$ mkdir tmp

$ cd tmp

$ > plik1.txt

$ > plik2.txt

$ > plik3.txt

$ > .plik4.txt

$ > .plik5.txt

$ > .plik6.txt

$ mkdir tmp1

$ mkdir .tmp2

$ ls -l

razem 4

-rw-r--r-- 1 student student 0 paź 12 14:42 plik1.txt

-rw-r--r-- 1 student student 0 paź 12 14:42 plik2.txt

-rw-r--r-- 1 student student 0 paź 12 14:42 plik3.txt

drwxr-xr-x 2 student student 4096 paź 12 14:43 tmp1/

$ ls -l -a

razem 16

drwxr-xr-x 4 student student 4096 paź 12 14:43 ./

drwxr-xr-x 21 student student 4096 paź 12 14:42 ../

-rw-r--r-- 1 student student 0 paź 12 14:42 plik1.txt

-rw-r--r-- 1 student student 0 paź 12 14:42 plik2.txt

-rw-r--r-- 1 student student 0 paź 12 14:42 plik3.txt

-rw-r--r-- 1 student student 0 paź 12 14:42 .plik4.txt

-rw-r--r-- 1 student student 0 paź 12 14:42 .plik5.txt

-rw-r--r-- 1 student student 0 paź 12 14:42 .plik6.txt

drwxr-xr-x 2 student student 4096 paź 12 14:43 tmp1/

drwxr-xr-x 2 student student 4096 paź 12 14:43 .tmp2/

Dodatkowo, z opcją “-a”, polecenie ls wyświetla również katalog bieżący (oznaczany “.”) oraz

katalog nadrzędny (oznaczany “..”).

Proszę pamiętać o tej dodatkowej opcji!

Polecenie cat

Polecenie cat (ang. concatenate file) jest wykorzystywane (między innymi) do wyświetlania

zawartości pliku na ekranie (można mówić o pewnym - niewielkim - podobieństwie do DOSowego

“type”). Polecenie to może być również wykorzystywane do połączenia ze sobą kilku plików

i zapisania wyniku takiego połączenia w zupełnie nowym pliku (jednak takie użycie cat będzie

przedmiotem naszych zainteresowań dopiero w czasie kolejnych zajęć). W czasie dzisiejszych zajęć

polecenie to posłuży nam wyłącznie do wyświetlania zawartości niewielkich plików tekstowych.

Przykład użycia (wyświetlenie na ekranie terminala zawartości przykładowego pliku o nazwie

“uzytkownicy.sh”):

$ cat uzytkownicy.sh

#!/bin/sh

#

# Prosty skrypt wyswietlajacy podstawowe informacje o uzytkownikach (login,

# pelna nazwe, sciezke do katalogu domowego i jego rozmiar). Dziala w

# oparciu o plik "/etc/passwd".

NAZWA_PLIKU='/etc/passwd'

while read LINIA

do

6

LOGIN=`echo $LINIA | awk -F: '{ print $1; }'`

NAZWA=`echo $LINIA | awk -F: '{ print $5; }'`

KATALOG=`echo $LINIA | awk -F: '{ print $6; }'`

echo "LOGIN : $LOGIN"

echo "NAZWA : $NAZWA"

if [ -d "$KATALOG" ] ; then

ROZMIAR=`du -bs $KATALOG | awk '{ print $1; }'`

if [ -z "$ROZMIAR" ]; then ROZMIAR=0; fi

echo "KATALOG : $KATALOG"

echo "ROZMIAR [B] : $ROZMIAR"

fi

echo;

done < $NAZWA_PLIKU;

Polecenie cat tak samo jak reszta UNIX-owych polece posiada wiele ró ń żnorodnych opcji, do

ciekawszych z nich można zaliczyć możliwość numerowania kolejnych linii wyświetlanego pliku:

$ cat -n uzytkownicy.sh

1 #!/bin/sh

2 #

3 # Prosty skrypt wyswietlajacy podstawowe informacje o uzytkownikach

(login,

4 # pelna nazwe, sciezke do katalogu domowego i jego rozmiar). Dziala w

5 # oparciu o plik "/etc/passwd".

6

7 NAZWA_PLIKU='/etc/passwd'

8 while read LINIA

9 do

10 LOGIN=`echo $LINIA | awk -F: '{ print $1; }'`

11 NAZWA=`echo $LINIA | awk -F: '{ print $5; }'`

12 KATALOG=`echo $LINIA | awk -F: '{ print $6; }'`

13 echo "LOGIN : $LOGIN"

14 echo "NAZWA : $NAZWA"

15 if [ -d "$KATALOG" ] ; then

16 ROZMIAR=`du -bs $KATALOG | awk '{ print $1; }'`

17 if [ -z "$ROZMIAR" ]; then ROZMIAR=0; fi

18 echo "KATALOG : $KATALOG"

19 echo "ROZMIAR [B] : $ROZMIAR"

20 fi

21 echo;

22 done < $NAZWA_PLIKU;

Polecenie to może być również wykorzystane do utworzenia i edycji niewielkich plików

tekstowych, bez konieczności użycia edytora tekstowego. Aby to osiągnąć należy wywołać

polecenie cat jak poniżej:

$ cat > nowy_plik.txt

następnie możemy wpisywać tekst,

TO JEST NOWY PLIK!

Na koniec wpisywania wciskamy CTRL+D. Po czym możemy jeszcze sprawdzić, że faktycznie

udało się nam utworzyć nowy plik.

$ ls -l

razem 14

-rw-r--r-- 1 student student 14 paź 6 19:15 nowy_plik.txt

Polecenie more

7

O ile polecenie cat mo e by przydatne do wy wietlania zawarto ci niewielkich ż ć ś ś plików, o tyle w

przypadku plików większych bardziej przydatne okaże się polecenie more. Polecenie to jest jednym

z wielu dostępnych w Linux-ie programów do wyświetlania tekstu strona po stronie lub linia po linii

(tak naprawdę polecenie man również korzysta z takiego dodatkowego polecenia do wyświetlania

stron z pomocą - i zazwyczaj jest to właśnie more lub opisane dalej less).

Polecenie to może być wykorzystywane jak poniżej:

$ more nazwa_pliku

W czasie pracy możecie Państwo uzyskać pomoc na temat użytkowania polecenia (wystarczy

wcisnąć klawisz “h”). Przemieszczanie do przodu (oglądanie kolejnych stron pliku) po naciśnięciu

spacji, ruch w stronę przeciwną po wciśnięciu “b”. Polecenie kończy swoje działanie po

wyświetleniu całej zawartości pliku (alternatywnie możemy wcisnąć “q”).

Polecenie less

Polecenie less stanowi rozbudowaną wersję more i oferuje znacznie wygodniejsze przeglądanie

plików, szczególnie gdy chodzi o możliwość przewijania ich zawartości (wykorzystanie strzałek) i

zaawansowane możliwości wyszukiwania. Polecenie nie kończy działania po wyświetleniu całej

zawartości pliku (inaczej niż more).

Polecenie head

Polecenie to nie służy w zasadzie do wyświetlania zawartości pliku strona po stronie, ale może być

wykorzystane do wyświetlenia początkowego fragmentu wskazanego pliku.

Najczęściej stosowaną opcją tego polecenia jest “-n x” gdzie x oznacza liczbę początkowych linii

pliku, które chcemy wyświetlić.

W kolejnym przykładzie wyświetlanie trzech pierwszych linii pliku “uzytkownicy.sh”:

$ head -n 3 uzytkownicy.sh

#!/bin/sh

##

Prosty skrypt wyswietlajacy podstawowe informacje o uzytkownikach (login,

Polecenie tail

Polecenie to stanowi swoiste przeciwieństwo do head, pozwalając wyświetlić wskazaną liczbę

ostatnich linii pliku. Mimo pozornej bezużyteczności takiego polecenia, bywa ono przydatne,

zwłaszcza wtedy, gdy mamy do przeglądnięcia duży plik a istotne informacje znajdują się na jego

końcu (np. wykaz literatury, przeglądanie plików “.log”).

Poniższy przykład ilustruje wykorzystanie tail (wyświetlenie trzech ostatnich linii pliku

“uzytkownicy.sh”):

$ tail -n 3 uzytkownicy.sh

fi

echo;

done < $NAZWA_PLIKU;

8

Polecenie wc

Polecenie wc (ang. word count) s u y do zliczania liczby bajtów, s ów oraz ł ż ł linii w plikach. W

pewnych sytuacjach informacje te mogą być bardzo przydatne (wypracowania o zadanej liczbie

słów).

Po wywołaniu (bez dodatkowych parametrów) polecenie wc dostarcza nam kompletu informacji

(kolejne liczby to: linie, słowa i bajty):

$ wc uzytkownicy.sh

22 106 672 uzytkownicy.sh

Polecenie touch

Polecenie touch może być w zasadzie wykorzystywane do dwóch celów: tworzenia nowych plików

i zmieniania daty modyfikacji pliku.

Aby utworzyć nowy plik za pomocą touch wystarczy wpisać:

$ touch nazwa_nowego_pliku.txt

$ ls -l nazwa_nowego_pliku.txt

-rw-r--r-- 1 student student 0 paź 7 12:06 nazwa_nowego_pliku.txt

gdzie:

“nazwa_nowego_pliku.txt” - stanowi nazwę nowego pliku, który zamierzamy utworzyć.

Polecenie touch tworzy jak widać nowy plik o rozmiarze równym zero bajtów.

Ten sam efekt można osiągnąć bez wykorzystywania jakiegokolwiek polecenia, wystarczy tzw.

przekierowanie wyjścia (ale o tym będziemy mówić na następnych zajęciach), jak w kolejnym

przykładzie.

$ > nazwa_nowego_pliku.txt

$ ls -l nazwa_nowego_pliku.txt

-rw-r--r-- 1 student student 0 paź 7 12:09 nazwa_nowego_pliku.txt

Efekt jest ten sam co w przypadku touch, po co więc stosować touch ? Po to właśnie by móc

zmienić datę modyfikacji pliku. Co istotne mamy możliwość ustawienia dowolnej (prawie) daty

zarówno z przeszłości jak i przyszłości. Własność tę możemy wykorzystać podczas archiwizacji

danych, czy też automatycznego oczyszczania systemu ze zbędnych plików.

$ touch -t 202901012359 nazwa_nowego_pliku.txt

$ ls -l --full-time nazwa_nowego_pliku.txt

-rw-r--r-- 1 student student 0 2029-01-01 23:59:00.000000000 +0100

nazwa_nowego_pliku.txt

Polecenie cp

Polecenie cp (ang. copy) służy do kopiowania plików i katalogów. Podobnie jak reszta poleceń,

również to posiada olbrzymią liczbę żnorakich opcji, dalsze przykłady pokazują sposób

wykorzystania niektórych z nich.

9

Najprostsz form wywo ania cp jest skopiowanie ą ą ł pliku jak poniżej:

$ cp plik1.txt plik2.txt

W wyniku takiego wywołania zawartość pliku “plik1.txt” jest kopiowana do nowotworzonego pliku

“plik2.txt” (jeżeli plik o tej nazwie istniał wcześniej zostanie on zastąpiony!). Aby zapobiec takiej

możliwości należy wykorzystać polecenie cp z opcjami “-i” lub “-b”.

$ cat > plik1.txt

Pierwszy

$ cat > plik2.txt

Drugi

$ cat > plik3.txt

Trzeci

$ ls -l p*.txt

-rw-r--r-- 1 student student 9 paź 7 12:35 plik1.txt

-rw-r--r-- 1 student student 6 paź 7 12:35 plik2.txt

-rw-r--r-- 1 student student 7 paź 7 12:36 plik3.txt

$ cp plik1.txt plik2.txt

$ ls -l p*.txt

-rw-r--r-- 1 student student 9 paź 7 12:35 plik1.txt

-rw-r--r-- 1 student student 9 paź 7 12:36 plik2.txt

-rw-r--r-- 1 student student 7 paź 7 12:36 plik3.txt

W wyniku powyższej serii poleceń zawartość pliku “plik2.txt” została zastąpiona poprzez

zawartość pliku “plik1.txt” (proszę zwrócić uwagę na rozmiary plików - zostały one celowo

zapisane czcionką wytłuszczoną). Poniżej przykład wykorzystania opcji “-i” (tryb interaktywny).

$ cp -i plik1.txt plik3.txt

cp: zamazać `plik3.txt'? y

$ ls -l p*.txt

-rw-r--r-- 1 student student 9 paź 7 12:35 plik1.txt

-rw-r--r-- 1 student student 9 paź 7 12:36 plik2.txt

-rw-r--r-- 1 student student 9 paź 7 12:41 plik3.txt

Polecenie cp może być również wykorzystane do kopiowania większej liczby plików za jednym

razem.

$ cp p*.txt tmp/

$ tree tmp

tmp

|-- plik1.txt

|-- plik2.txt

`-- plik3.txt

0 directories, 3 files

Polecenie cp może być również wykorzystywane do rekursywnego kopiowania zawartości

podkatalogów (w pewnych sytuacjach może być to niebezpieczne, lepiej stosować opcję “-R”).

$ cp p*.txt tmp/tmp1

$ cp p*.txt tmp/tmp2

$ tree tmp

tmp

|-- plik1.txt

|-- plik2.txt

|-- plik3.txt

|-- tmp1

| |-- plik1.txt

10

| |-- plik2.txt

| `-- plik3.txt

|-- tmp2

| |-- plik1.txt

| |-- plik2.txt

| `-- plik3.txt

`-- tmp3

3 directories, 9 files

$ cp -r tmp tmp4

$ tree tmp4

tmp4

`-- tmp

|-- plik1.txt

|-- plik2.txt

|-- plik3.txt

|-- tmp1

| |-- plik1.txt

| |-- plik2.txt

| `-- plik3.txt

|-- tmp2

| |-- plik1.txt

| |-- plik2.txt

| `-- plik3.txt

`-- tmp3

4 directories, 9 files

Kolejn ciekaw opcj jest “-P” (lepiej u y d ugiej formy “--parents”), przydaje ą ą ą ż ć ł się ona wtedy, gdy

chcemy nie tylko skopiować pliki, ale także zachować informację o strukturze katalogów.

$ cp tmp4/tmp/plik1.txt tmp5

$ tree tmp5

tmp5

`-- plik1.txt

0 directories, 1 file

$ cp --parents tmp4/tmp/plik1.txt tmp6

$ tree tmp6

tmp6

`-- tmp4

`-- tmp

`-- plik1.txt

2 directories, 1 file

Polecenie mv

Polecenie mv (ang. move) służy do przenoszenia plików i katalogów oraz zmieniania ich nazwy.

Najprościej wykorzystać polecenie mv do zmiany nazwy pliku:

$ ls

plik1.txt

$ mv plik1.txt plik2.txt

$ ls

plik2.txt

Podobie jak przy cp, również w przypadku mv możemy doprowadzić do zamazania jednego pliku

drugim (i podobnie możemy sobie z tym poradzić - “-i”).

11

Ciekaw opcj jest “-b” pozwalaj ca stworzy kopi bezpiecze stwa ą ą ą ć ę ń przed zamazaniem

docelowego pliku.

$ ls

plik1.txt plik2.txt

$ mv -bi plik1.txt plik2.txt

mv: zamazać `plik2.txt'? y

$ ls

plik2.txt plik2.txt~

Plik z kopią bezpieczeństwa z reguły (można to dowolnie zmieniać) ma rozszerzenie “~”.

Polecenie rm

Polecenie rm (ang. remove) służy do usuwania plików (w zasadzie również katalogów). Jest to

polecenie, podczas pracy z którym, powinniśmy zachowywać szczególną ostrożność (czymś w

rodzaju dowcipu może być zalogowanie się jako “root” i wydanie polecenia “rm -fr /*”, jednak ten

dowcip jest śmieszny tylko przez krótką chwilę).

Pliki usunięte za pomocą rm nie podlegają odtworzeniu (a w każdym razie nie w prosty sposób)!

Poniżej przykłady wykorzystania:

$ ls

plik1.txt plik2.txt plik3.txt

$ rm plik1.txt

rm: remove zwykły plik `plik1.txt'? y

$ ls

plik2.txt plik3.txt

$ rm *.txt

rm: remove zwykły plik `plik2.txt'? y

rm: remove zwykły plik `plik3.txt'? y

Jedną z bezpieczniejszych metod wykorzystania polecenia rm jest stosowanie opcji “-i” (jest ona

często domyślnie uaktywniona), w takim wypadku usunięcie każdego z plików wymaga

potwierdzenia (jak w powyższym przykładzie). Możemy ją jednak wyłączyć stosując “-f”, w takim

wypadku nie pojawią się pytania z prośbą o potwierdzenie kasowania.

$ ls

plik1.txt plik2.txt plik3.txt

$ rm -f plik2.txt plik3.txt

$ ls

plik1.txt

Możemy również dodać opcję “-r” oznaczającą rekursywne kasowanie zawartości podkatalogów. W

połączeniu z “-f” pozwala to usunąć katalog wraz z wszystkimi jego podkatalogami (oczywiście o

ile posiadamy odpowiednie prawa). Należy stosować te opcje bardzo uważnie (zmiany będą

nieodwracalne).

$ tree

.`

-- tmp

|-- plik1.txt

|-- plik2.txt

|-- plik3.txt

|-- tmp1

| |-- plik1.txt

12

| |-- plik2.txt

| `-- plik3.txt

|-- tmp2

| |-- plik1.txt

| |-- plik2.txt

| `-- plik3.txt

`-- tmp3

4 directories, 9 files

$ rm -fr tmp

$ tree

.

0 directories, 0 files

Jeszcze raz nale y podkre li - stosowanie rm powinno by ż ś ć ć dobrze przemyślane.

Polecenie mkdir

Polecenie mkdir (ang. make directory) służy do zakładania katalogów.

Jego najprostsze wykorzystanie pokazuje kolejny przykład:

$ mkdir tmp

$ ls

tmp/

Jedną z ciekawszych możliwości jest utworzenie całej struktury katalogów za pomocą

pojedynczego mkdir (wykorzystujemy do tego opcję “-p”).

$ ls

tmp/

$ mkdir -p tmp/tmp1/tmp2/tmp3

$ tree

.`

-- tmp

`-- tmp1

`-- tmp2

`-- tmp3

4 directories, 0 files

O ile nie dodalibyśmy “-p” polecenie zakończyłoby się niepowodzeniem.

$ tree

.

`-- tmp

`-- tmp1

`-- tmp2

`-- tmp3

4 directories, 0 files

$ mkdir tmp/tmp4/tmp5/tmp6

mkdir: nie można utworzyć katalogu `tmp/tmp4/tmp5/tmp6': No such file or

directory

Polecenie rmdir

Polecenie rmdir (ang. remove directory) służy do usuwania katalogów. Podobnie jak przy rm należy

13

go używać z uwagą.

Przykład użycia:

$ mkdir tmp7

$ ls

tmp/ tmp7/

$ rmdir tmp7

$ ls

tmp/

W przypadku, gdy katalog zawiera jakieś pliki lub katalogi wywołanie polecenia rmdir bez

dodatkowych opcji zakończy się niepowodzeniem.

$ tree

.`

-- tmp

`-- tmp1

`-- tmp2

`-- tmp3

4 directories, 0 files

$ rmdir tmp

rmdir: `tmp': Directory not empty

Właściwie jest to problem nie do rozwiązania za pomocą rmdir (pomijam rm z opcjami “-fr”).

Można co najwyżej zapoznać się z opcją “-p” i zobaczyć co to da.

Polecenie chown

Polecenie chown (ang. change owner) służy do zmieniania właściciela pliku. Oczywiście aby móc

zmieniać właściciela pliku, trzeba posiadać do niego odpowiednie prawa. Polecenie to może być

również wykorzystywane do zmiany grupy pliku (proszę zapoznać się z pomocą do tego polecenia i

prześledzić żne możliwości jego wykorzystania).

W systemach typu System V wszyscy użytkownicy będący właścicielami plików mogą zmieniać

właściciela pliku, w systemach z rodziny BSD takie działania są zarezerwowane wyłącznie dla

superużytkownika (root-a) [3].

Poniższe przykłady pokazują żne możliwości zamiany właściciela pliku z wykorzystaniem chown

(przykłady działają w przypadku użytkownika root, w pozostałych wypadkach ich działanie jest

uzależnione od wersji systemu):

# ls -l plik1.txt

-rw-r--r-- 1 student student 9 paź 7 12:43 plik1.txt

# chown root plik1.txt

# ls -l plik1.txt

-rw-r--r-- 1 root student 9 paź 7 12:43 plik1.txt

# chown student:root plik1.txt

# ls -l plik1.txt

-rw-r--r-- 1 student root 9 paź 7 12:43 plik1.txt

# chown root.root plik1.txt

# ls -l plik1.txt

-rw-r--r-- 1 root root 9 paź 7 12:43 plik1.txt

# chown :student plik1.txt

# ls -l plik1.txt

-rw-r--r-- 1 root student 9 paź 7 12:43 plik1.txt

14

# chown student plik1.txt

# ls -l plik1.txt

-rw-r--r-- 1 student student 9 pa ź 7 12:43 plik1.txt

Znak zachęty w postaci “#” oznacza pracę na koncie superużytkownika (root-a).

W przypadku zwykłego użytkownika operacja może się zakończyć niepowodzeniem:

$ chown root:root plik1.txt

chown: zmiana własciciela `plik1.txt': Operation not permitted

Polecenie chgrp

Polecenie chgrp (ang. change group) służy do zamiany grupy pliku. Podobnie jak w przypadku

chown, również to polecenie polega identycznym ograniczeniom w stosunku do użytkowników

mogących z niego korzystać.

Kolejne przykłady pokazują jego wykorzystanie:

# chgrp root plik1.txt

# ls -l plik1.txt

-rw-r--r-- 1 student root 9 paź 7 12:43 plik1.txt

# chgrp student plik1.txt

# ls -l plik1.txt

-rw-r--r-- 1 student student 9 paź 7 12:43 plik1.txt

Zwykły użytkownik może się spotkać z odmową wykonania polecenia:

$ chgrp root plik1.txt

chgrp: nie można zmienić grupy `plik1.txt': Operation not permitted

Polecenie chmod

Polecenie chmod (ang. change mode) służy do modyfikowania praw do plików i katalogów. Z jego

pomocą możemy określić kto będzie miał jakie prawa do tworzonych przez nas plików i katalogów.

Polecenie to może być wywoływane w bardzo różnorodny sposób, przedstawione w dalszej części

przykłady prezentują najczęściej wykorzystywane opcje, o pozostałych proszę sobie doczytać w

pliku manuala.

$ ls -l plik1.txt

-rw-r--r-- 1 student student 9 paź 7 12:43 plik1.txt

$ chmod u+rwx plik1.txt

$ ls -l plik1.txt

-rwxr--r-- 1 student student 9 paź 7 12:43 plik1.txt*

$ chmod u-x plik1.txt

$ ls -l plik1.txt

-rw-r--r-- 1 student student 9 paź 7 12:43 plik1.txt

$ chmod u=rx plik1.txt

$ ls -l plik1.txt

-r-xr--r-- 1 student student 9 paź 7 12:43 plik1.txt*

$ chmod u=rwx plik1.txt

$ ls -l plik1.txt

-rwxr--r-- 1 student student 9 paź 7 12:43 plik1.txt*

$ chmod u-rwx plik1.txt

$ ls -l plik1.txt

----r--r-- 1 student student 9 paź 7 12:43 plik1.txt

$ chmod u+rwx plik1.txt

15

$ ls -l plik1.txt

-rwxr--r-- 1 student student 9 pa ź 7 12:43 plik1.txt*

$ chmod g+rwx plik1.txt

$ ls -l plik1.txt

-rwxrwxr-- 1 student student 9 paź 7 12:43 plik1.txt*

$ chmod g-rw,o+rwx plik1.txt

$ ls -l plik1.txt

-rwx--xrwx 1 student student 9 paź 7 12:43 plik1.txt*

$ chmod u=rwx,g=,o= plik1.txt

$ ls -l plik1.txt

-rwx------ 1 student student 9 paź 7 12:43 plik1.txt*

$ chmod a=rx plik1.txt

$ ls -l plik1.txt

-r-xr-xr-x 1 student student 9 paź 7 12:43 plik1.txt*

$ chmod a-rx plik1.txt

$ ls -l plik1.txt

---------- 1 student student 9 paź 7 12:43 plik1.txt

$ chmod u=rw,g=r,o=, plik1.txt

$ ls -l plik1.txt

-rw-r----- 1 student student 9 paź 7 12:43 plik1.txt

Mam nadzieję, że analiza powyższych przykładów pozwoli Państwu poznać żnorodne metody

wywołania polecenia chmod.

Polecenie ln

Polecenie ln (ang. link) służy do tworzenia dowiązań symbolicznych do plików (twardych i

symbolicznych).

Poniżej kilka przykładów jego użycia.

Tworzenie twardych dowiązań do pliku “plik1.txt” pod nazwami “plik2.txt” i “plik3.txt” (proszę

zwrócić uwagę na drugą kolumnę wyświetlaną przez ls - zawiera ona liczbę dowiązań do pliku):

$ ls -l

razem 4

-rw-r--r-- 1 student student 9 paź 11 19:45 plik1.txt

$ cat plik1.txt

PIERWSZY

$ ln plik1.txt plik2.txt

$ ls -l

razem 8

-rw-r--r-- 2 student student 9 paź 11 19:45 plik1.txt

-rw-r--r-- 2 student student 9 paź 11 19:45 plik2.txt

$ cat plik2.txt

PIERWSZY

$ ln plik1.txt plik3.txt

$ ls -l

razem 12

-rw-r--r-- 3 student student 9 paź 11 19:45 plik1.txt

-rw-r--r-- 3 student student 9 paź 11 19:45 plik2.txt

-rw-r--r-- 3 student student 9 paź 11 19:45 plik3.txt

$ rm plik1.txt

$ ls -l

razem 8

-rw-r--r-- 2 student student 9 paź 11 19:45 plik2.txt

-rw-r--r-- 2 student student 9 paź 11 19:45 plik3.txt

$ cat plik3.txt

PIERWSZY

$ rm plik2.txt

$ ls -l

16

razem 4

-rw-r--r-- 1 student student 9 pa ź 11 19:45 plik3.txt

$ ln plik3.txt plik1.txt

$ ls -l

razem 8

-rw-r--r-- 2 student student 9 paź 11 19:45 plik1.txt

-rw-r--r-- 2 student student 9 paź 11 19:45 plik3.txt

$ cat plik1.txt

PIERWSZY

$ > plik3.txt

$ cat plik3.txt

$ cat plik1.txt

$ ls -l

razem 0

-rw-r--r-- 2 student student 0 paź 11 19:52 plik1.txt

-rw-r--r-- 2 student student 0 paź 11 19:52 plik3.txt

Jak widać twarde linki są wyświetlane tak samo jak zwykłe pliki i nie są w żaden sposób

rozróżnialne. Dodatkowo zmiana zawartości jednego z plików pociąga za sobą zmianę zawartości

drugiego (gdyż tak naprawdę to jeden i ten sam plik widoczny pod kilkoma różnymi nazwami).

Kolejny przykład pokazuje tworzenie linków symbolicznych:

$ ls -l

razem 4

-rw-r--r-- 1 student student 9 paź 11 19:56 plik1.txt

$ ln -s plik1.txt plik2.txt

$ ls -l

razem 4

-rw-r--r-- 1 student student 9 paź 11 19:56 plik1.txt

lrwxrwxrwx 1 student student 9 paź 11 19:56 plik2.txt -> plik1.txt

$ ln -s plik1.txt plik3.txt

$ ls -l

razem 4

-rw-r--r-- 1 student student 9 paź 11 19:56 plik1.txt

lrwxrwxrwx 1 student student 9 paź 11 19:56 plik2.txt -> plik1.txt

lrwxrwxrwx 1 student student 9 paź 11 19:57 plik3.txt -> plik1.txt

$ cat plik1.txt

PIERWSZY

$ cat plik2.txt

PIERWSZY

$ rm plik1.txt

rm: remove zwykły plik `plik1.txt'? y

$ ls -l

razem 0

lrwxrwxrwx 1 student student 9 paź 11 19:56 plik2.txt -> plik1.txt

lrwxrwxrwx 1 student student 9 paź 11 19:57 plik3.txt -> plik1.txt

$ cat plik2.txt

cat: plik2.txt: No such file or directory

Jak widać linki symboliczne są jedynie skrótami, co znajduje swoje odzwierciedlenie w sposobie

ich wyświetlania przez polecenie ls (typ pliku to w tym przypadku “l”, dodatkowo pojawia się

informacja w rodzaju “nazwa_linku -> nazwa_pliku_na_który_wskazuje”). W przypadku usunięcia

pliku na które wskazują linki symboliczne, po wyświetleniu zawartości katalogu z pomocą ls, takie

nie wskazujące już na nic skróty są dodatkowo zaznaczane.

Program mc

Program mc (ang. Midnight Commander) stanowi Linux-owy odpowiednik popularnych w systemie

DOS menedżerów plików. Można go porównywać z “Norton Commander-em”, “DOS Navigator-

17

em”, czy te dzia aj cym pod Windows “Windows Commander-em” (obecnie ż ł ą “Total Commanderem”).

Opanowanie jego obsługi może znacznie przyśpieszyć Państwa pracę z plikami, jakkolwiek

żaden szanujący się administrator systemu UNIX nie nazwałby takiego podejścia profesjonalnym

(nie wspominając o znacznie mniejszej funkcjonalności programu w porównaniu z poleceniami

systemu UNIX).

Więcej informacji o wymienionych poleceniach odnajdziecie Państwo w odpowiednich

podręcznikach man (polskie tłumaczenia części z nich stanowią załącznik do tego dokumentu).

Powyższe informacje powinny Państwu wystarczyć do rozwiązania załączonej listy zadań.



Wyszukiwarka

Podobne podstrony:
Systemy Operacyjne laboratorium 2 teoria
Systemy Operacyjne laboratorium 5 teoria
Systemy operacyjne laboratorimuiIi
Systemy Elektroenergetyczne Laboratorium Teoria
lab7, SEMESTRY, Sem 7, Interfejsy Programowe Systemow Operacyjnych, Laboratorium
Systemy operacyjne laboratorimuii
Systemy Operacyjne laboratorium 5 zadania
Systemy operacyjne laboratorimuV
Systemy Operacyjne laboratoria 3 i 4 zadania
Systemy operacyjne laboratorimu
Systemy Operacyjne laboratorium 2 zadania
Laboratorium Systemy operacyjne II lista 3
Teoria informatyki, Szkoła, Systemy Operacyjnie i sieci komputerowe, utk, semestr II
Unix - TCPIP, Laboratorium Systemów Operacyjnych
rso odp teoria, wisisz, wydzial informatyki, studia zaoczne inzynierskie, rozproszone systemy operac
Laboratorium systemów operacyjnych Robert Schaefer
Systemy operacyjne
5 Systemy Operacyjne 23 11 2010 Zarządzanie procesami

więcej podobnych podstron