Linuksowy system plików
Linuksowy system plików
1. Pliki i katalogi w systemie Linux. Poruszanie się po katalogach, operacje na plikach, kopiowanie,
przenoszenie, tworzenie linków
2. Struktura systemu plików, podstawowe katalogi i pliki systemu
3. Prawa dostępu do plików i katalogów, polecenia chmod, chown, chgrp
4. Konfigurowanie środowiska pracy systemu Linux, zmienne systemowe
5. Edytor
vi
1
Linuksowy system plików
1. Pliki i katalogi w systemie Linux.
Poruszanie się po katalogach, operacje na plikach,
kopiowanie, przenoszenie, tworzenie linków
Podczas procesu instalacji, opisanego w module pierwszym i wykonanego przez słuchacza
na dysku twardym, w komputerze zostały zapisane dane niezbędne do działania systemu
operacyjnego Linux. Dane te zostały zapisane w postaci plików, tak jak to jest
wykonywane w innych systemach operacyjnych, na przykład Windows. Pliki są
zapisywane w wielu katalogach, odpowiednio nazwanych i umieszczonych w strukturze
katalogów na dysku. Pod tym względem linuksowy system plików zasadniczo nie różni się
od znanego systemu występującego w środowisku Windows. W katalogu głównym są
katalogi, w których mogą znajdować się zarówno pliki, jak i katalogi niższego rzędu,
które tworzą drzewo, symbolizujące rozgałęziającą się strukturę podziału na katalogi
niższego rzędu. Użytkownicy systemu operacyjnego Windows wiedzą, że poszczególne
dyski logiczne oznacza się kolejnymi literami z dwukropkiem. Podstawowym dyskiem jest
dysk oznaczony jako C:, dalsze dyski lub napędy CD-ROM, DVD czy dyski wymienne
oznacza się kolejnymi literami D:, E: itd. W systemie Linux wszystkie zainstalowane dyski
tworzą jeden system plików, którego katalog główny jest oznaczony prawym ukośnikiem,
czyli znakiem „/”. Również ten znak (w systemach Windows znak „\”) jest
wykorzystywany w systemie Linux do oddzielania od siebie poziomów katalogów. Dla
użytkownika systemu nie ma znaczenia, czy dane są zapisane na pierwszym, drugim czy
kolejnym dysku. Najważniejsze, by znał położenie pliku (lub katalogu) w systemie plików,
czyli znał tzw. ścieżkę do pliku. Obecnie zostaną omówione podstawowe polecenia
służące do poruszanie się po linuksowym systemie plików. Podstawowym poleceniem
wyświetlającym zawartość katalogu, czyli nazwy i ewentualnie inne informacje o plikach
jest polecenie ls (skrót od angielskiego słowa list).
2
Linuksowy system plików
Rysunek 1. Przykład działania polecenia ls
Jak widać na rysunku, w bieżącym katalogu jest tylko jeden plik o nazwie procesy.txt
(plik ten został utworzony w poprzednim ćwiczeniu poleceniem ps). Zawartość tego pliku
można wyświetlić na ekranie poleceniem cat procesy.txt (należy przypomnieć
wiadomości z poprzedniego modułu, że do wykonania tego polecenia wystarczy napisać
na klawiaturze cat p i wcisnąć klawisz tabulatora).
Rysunek 2. Wyświetlanie zawartości pliku poleceniem cat
3
Linuksowy system plików
Plik ten jest na tyle duży, że jego zawartość nie mieści się na jednym ekranie.
Początkowe linie pliku można wyświetlić poleceniem head nazwa_pliku, a końcowe tail
nazwa_pliku.
Rysunek 3. Przykład działania poleceń head i tail
Wykonane wcześniej polecenie ls wyświetliło na ekranie zawartość katalogu bieżącego,
czyli jakiego? Jaki jest katalog bieżący? Łatwo jest to sprawdzić poleceniem pwd (od
angielskiego print working directory). Jak widać z rysunku poniżej, tym katalogiem jest
/home/jacnow. Jest to tak zwany katalog domowy użytkownika, czyli katalog, który staje
się bieżącym bezpośrednio po zalogowaniu się użytkownika. Katalogiem domowym
użytkownika test1 jest /home/test1, użytkownika test2 /home/test2.
4
Linuksowy system plików
Rysunek 4. Przykład działania polecenia pwd
Do poruszania się w systemie plików między katalogami służy polecenie cd (od
angielskiego change directory). Parametrem wywołania polecenia jest nazwa katalogu,
który ma stać się katalogiem bieżącym. Szczególne przypadki wywołania polecenia cd są
następujące:
cd .. — parametrem są dwie kropki (nie dwukropek), powoduje przejście do
katalogu nadrzędnego,
cd — polecenie wywołane bez parametru, powoduje przejście do katalogu domowego
użytkownika,
cd ~ — parametrem jest znak tyldy (~), tak jak powyżej powoduje przejście do
katalogu domowego użytkownika,
cd / — parametrem jest ukośnik „/”, powoduje przejście do głównego katalogu
systemu plików.
Przykłady użycia polecenia cd są pokazane na rysunku powyżej.
Opisane wcześniej polecenie cat procesy.txt spowodowało wyświetlenie na ekranie
zawartości pliku, który znajdował się w katalogu bieżącym. Często jednak korzysta się
z programów lub plików, które nie są w katalogu bieżącym, więc trzeba w takim
przypadku jednoznacznie określić położenie pliku w strukturze katalogów. Poza podanym
sposobem wykonania tego polecenia, można wywołać je, podając tzw. pełną ścieżkę
dostępu do pliku, czyli pisząc cat /home/jacnow/procesy.txt. Podany parametr, często
zwany bezwzględną ścieżką do pliku, musi rozpoczynać się od znaku ukośnika „/”, gdyż
jest to oznaczenie katalogu głównego. Parametr określający położenie pliku względem
5
Linuksowy system plików
katalogu bieżącego, czyli tzw. względna ścieżka do pliku, nie rozpoczyna się od ukośnika.
Na poniższym rysunku zostały pokazane różne przykłady wyświetlenia zawartości
katalogu, w którym jest plik procesy.txt, zarówno w przypadku prawidłowego podania
ścieżki bezwzględnej i względnej, jak i błędnego, na co system zareagował komunikatem
„Nie ma takiego pliku ani katalogu”.
Użytkownik systemu Linux ma możliwość zbudowania swojej, odpowiadającej jego
potrzebom, struktury podkatalogów w jego katalogu domowym. Do tworzenia katalogów
jest wykorzystywane polecenie mkdir nazwa_katalogu, a do usuwania katalogów
polecenie rmdir nazwa_katalogu. Parametrem jest nazwa katalogu mogąca zawierać
zarówno ścieżkę w postaci względnej (nierozpoczynającej się od znaku „/”), jak
i bezwzględnej (rozpoczynającej się od znaku „/”).
Rysunek 5. Przykłady określania ścieżki dostępu do pliku lub katalogu
W trakcie pracy użytkownik nieustannie zmienia zawartość swojego dysku, tworzy nowe
pliki, kasuje stare, kopiuje, przenosi, tworzy kopie zapasowe, czasami zachodzi
konieczność znalezienia pliku, który się zawieruszył na dysku. Oczywiście dysk powinien
być uporządkowany, odpowiednie pliki powinny się znajdować we właściwych katalogach
na dysku. Podstawa zachowania porządku na dysku to możliwość zarządzania
katalogami, ich tworzenie i usuwanie.
6
Linuksowy system plików
Polecenia pomagające użytkownikowi zapanować nad hierarchiczną strukturą danych:
mkdir nazwa_katalogu — służy do tworzenia katalogu,
rmdir nazwa_katalogu — służy do kasowania katalogu.
Nazwa katalogu, który zostanie utworzony, może być podana zarówno z pełną
(bezwzględną), jak i względną ścieżką. Przykład tworzenia i kasowania katalogów jest
pokazany na poniższym rysunku.
Rysunek 6. Przykład tworzenia katalogów
W łatwy sposób użytkownik może sprawdzić, czy utworzona struktura katalogów jest
prawidłowa. Polecenie tree wyświetla w prosty sposób strukturę katalogów na dysku, co
jest przedstawione na kolejnym rysunku. Komunikaty [error opening directory]
potwierdzają, że użytkownik jacnow nie ma praw dostępu do katalogów innych
użytkowników. Polecenie tree pozwala również na wyświetlenie struktury całego
linuksowego systemu plików. Należy podejść do tego zadania z rozwagą, gdyż wykonanie
tego polecenia może trwać kilka lub kilkanaście minut.
7
Linuksowy system plików
Rysunek 7. Wyświetlanie struktury katalogów poleceniem tree
Podstawowe operacje na plikach to ich kopiowanie, usuwanie i przenoszenie.
cp plik_źródłowy plik_docelowy — kopiowanie pliku,
rm plik_źródłowy plik_docelowy — usuwanie pliku,
mv plik_źródłowy plik_docelowy — zmiana nazwy lub położenia pliku.
W powyższych poleceniach zamiast plików mogą także wystąpić katalogi. Polecenie to
— choć wydaje się bardzo proste do wykonania — posiada kilka przydatnych opcji
opisanych skrótowo poniżej:
cp — i plik_źródłowy plik_docelowy — interaktywnie program pyta, czy
nadpisywać istniejące pliki docelowe,
cp — r plik_źródłowy plik_docelowy — operacja jest wykonywana rekurencyjnie
na całym drzewie podkatalogów,
cp — f plik_źródłowy plik_docelowy — usuwa pliki docelowe.
Poza możliwością skopiowania pliku, system Linux pozwala na utworzenie tak zwanego
linku, czyli dowiązania symbolicznego. Inaczej mówiąc, plik może mieć wiele nazw, co
pozwala na odwołanie się do pliku przez wiele identyfikatorów. Jak widać z poniższego
rysunku, pliki oznaczające dowiązania są wyświetlane w innym kolorze. sendmail to
w istocie dowiązanie (link) do pliku ../sbin/sendmail, podobnie X11 stanowi link do pliku
../X11R6/lib/X11.
8
Linuksowy system plików
Rysunek 8. Przykład wyświetlania zawartości katalogu
Korzystanie z linków ułatwia dostęp do plików i katalogów, gdyż można — korzystając
z krótkiej nazwy — odwołać się do pliku o długiej nazwie, znajdującego się głęboko
w strukturze katalogów. Tworzenie linków jest realizowane poleceniem:
ln oryginał link lub ln –s oryginał link.
Pierwsze z nich tworzy tzw. twardy link, czyli oryginał i link są nierozróżnialne.
Użytkownik — na przykład odczytując zawartość pliku — nie wie, czy pracuje
z oryginalnym plikiem, czy jego linkiem. Skasowanie pliku jest możliwe dopiero po
usunięciu wszystkich twardych linków do niego. Przykład utworzenia takiego twardego
linku jest pokazany na poniższym rysunku. Jak widać, oryginał i link mają takie same
rozmiary. Tworzenie twardych linków jest możliwe tylko w obrębie tego samego systemu
plików, czyli na przykład na tej samej partycji dysku. Liczba znajdująca się w drugim polu
informacji o pliku oznacza liczbę twardych dowiązań do pliku i — jak widać na przykładzie
— po utworzeniu twardego linku została zwiększona do 2.
9
Linuksowy system plików
Rysunek 9. Przykład tworzenia linku, czyli dowiązania symbolicznego
Drugie z poleceń służy do tworzenia tzw. miękkiego linku. Przykład jego utworzenia jest
przedstawiony na poniższym rysunku. Linki tego typu można tworzyć między obiektami
znajdującymi się na różnych systemach plików.
Rysunek 10. Przykład tworzenia tzw. miękkiego linku
10
Linuksowy system plików
Przy kopiowaniu bądź przenoszeniu plików można stosować tzw. znaki globalne, które
znacznie ułatwiają i przyspieszają pracę. Znak „?” (znak zapytania) może symbolizować
dowolny znak w nazwie występujący tylko na tej pozycji, a „*” dowolny znak do końca
pliku. Z tego wynika, że polecenie cp * wyklady spowoduje skopiowanie całej zawartości
bieżącego katalogu do folderu wyklady.
11
Linuksowy system plików
2. Struktura systemu plików,
podstawowe katalogi i pliki systemu
Po zalogowaniu się użytkownika katalogiem bieżącym jest jego katalog domowy. Nie
oznacza to, że pracujący w systemie Linux nie może „obejrzeć” zawartości dysku,
zorientować się, jakie dane są zapisane na serwerze linuksowym. W ramach bieżącego
tematu zostanie w zarysie przedstawiona struktura danych zawartych na dysku, ich
przeznaczenie i uprawnienia użytkowników do ich przeglądania i modyfikacji.
Przykładowo wyświetlenie zawartości katalogu głównego można wykonać
poleceniem ls /.
Rysunek 11. Przykład wyświetlania zawartości katalogu
Jak widać z rysunku w katalogu głównym znajduje się około 10 obiektów i są to katalogi
stanowiące poszczególne gałęzie systemu plików. Na jakiej podstawie można zorientować
się, że są to katalogi? Poleceniem ls –l zostały wyświetlone rozszerzone informacje
o zawartości katalogu, które należy odczytać następująco:
drwxr-xr-x 17 root root 77824 sie 26 19:28 dev
12
Linuksowy system plików
d
litera d umieszczona w pierwszej kolumnie oznacza katalog,
w przypadku pliku występuje znak „–” (minus),
rwxr-xr-x
kolejne znaki, które mogą być dowolną kombinacją liter r, w, x oraz
znaku „–” (minus) oznaczają uprawnienia użytkowników do danego
pliku lub katalogu,
20
oznacza liczbę dowiązań do danego pliku lub katalogu,
root
nazwa
użytkownika, który jest właścicielem pliku lub katalogu,
root
nazwa grupy użytkowników, do której należy plik lub katalog,
116736 rozmiar
wyrażony w bajtach,
sie 26 13:06 data i godzina ostatniej modyfikacji pliku lub katalogu,
dev
nazwa pliku lub katalogu.
Dodatkowym ułatwieniem jest to, że nazwy katalogów są wyświetlane w kolorze
niebieskim. Poniżej zostanie skrótowo opisana zawartość poszczególnych katalogów
Tabela 1. Zawartość podstawowych katalogów w systemie Linux
Nazwa Zawartość
/bin
Zawiera podstawowe programy narzędziowe, jego nazwa pochodzi od
binaries
/boot
Zawiera pliki z systemem operacyjnym wczytywane przy uruchamianiu
komputera
/dev
Zawiera pliki urządzeń. Linux traktuje wszystko, z czego może odczytać
dane lub je zapisać, jak pliki. W tym katalogu są pliki określające wszystkie
urządzenia znajdujące się w komputerze
/etc
W tym katalogu i podkatalogach są przechowywane pliki konfiguracyjne
systemu i wszystkie pozostałe pliki systemowe, stąd jego nazwa. Zazwyczaj
są to pliki tekstowe, które mogą być łatwo edytowane przez administratora
w celu zmiany konfiguracji systemu
/home
Są tu zawarte wszystkie katalogi domowe użytkowników systemu (tzw.
home directory)
/lib
Są tu zawarte biblioteki wykorzystywane przez kompilatory przy linkowaniu
programów
/lost+found
Zawiera pliki zagubione i odzyskane
/mnt
Katalog używany do montowania urządzeń: stacji dyskietek, CD-ROM-u,
partycji dyskowych
/proc
Zawiera informacje o różnych parametrach pracy systemu
13
Linuksowy system plików
/root
Katalog domowy administratora
/sbin
Zawiera programy służące do administrowania systemem i uruchamiane
automatycznie
/tmp
Zawiera pliki tymczasowe
/usr
Zawiera pliki i polecenia systemowe
/var
Zawiera pliki, które się zmieniają, np. pocztę, serwis WWW
Jest to wykaz orientacyjny i nie zawiera szczegółowego omówienia, większość
z katalogów jest bardzo rozbudowana. Przeglądając różne katalogi, można było
zauważyć, że nazwy plików i katalogów zazwyczaj są pisane małymi literami i rzadko
zawierają rozszerzenia nazwy, a jeżeli — to nazwy są wieloczłonowe i mogą zawierać
wiele kropek, przykładowo libBrokenLocale-2.2.4.so. W systemie Windows wiadomo, że
program wykonywalny ma rozszerzenie .exe. W systemie Linux rozszerzenie nazwy nie
ma wpływu na to, czy program jest wykonywalny. W zasadzie nie wydziela się
rozszerzenia nazwy pliku. Polecenie file nazwa_pliku
pozwala na określenie typu pliku.
Przykłady określania typu pliku są pokazane na kolejnym rysunku.
Rysunek 12. Przykładowe rodzaje zawartości pliku rozpoznawane programem file
14
Linuksowy system plików
Do omówienia w ramach niniejszego tematu pozostało zagadnienie poszukiwania plików.
Do tego celu służy polecenie find, którego składnię można opisać następująco:
find katalog — opcje kryterium.
katalog oznacza katalog, w którym system będzie szukał plików, np. katalog /home
oznacza katalogi domowe wszystkich użytkowników, a zgodnie z wcześniejszymi
informacjami znak „/” (ukośnik) oznacza przeszukiwanie całego systemu plików.
Znaczenie opcji jest następujące:
name wzorzec — są poszukiwane pliki, których nazwa pasuje do wzorca,
size numerc — są poszukiwane pliki, których rozmiar jest równy podanej liczbie
wyrażonej w blokach lub bajtach (np. 1024c),
mtime numer — są poszukiwane pliki, które zostały zmodyfikowane numer dni temu,
newer wzorzec — są poszukiwane pliki, które były modyfikowane później niż ten,
którego nazwa pasuje do wzorca.
Rysunek 13. Przykład poszukiwania plików w systemie
15
Linuksowy system plików
3. Prawa dostępu do plików i katalogów,
polecenia chmod, chown, chgrp
Poniższy rysunek pokazuje część listy nazw z katalogu głównego serwera linuksowego
oraz zawartość katalogu /home. Nie jest to katalog domowy, co może sugerować jego
nazwa. Jest to katalog nadrzędny nad katalogiem domowym użytkowników.
Rysunek 14. Przykład wyświetlania pełnej informacji o zawartości katalogu
Właścicielem katalogów zawartych w katalogu głównym serwera jest użytkownik root
(czyli administrator komputera), należący do grupy root. W katalogu /home właścicielami
poszczególnych katalogów są poszczególni użytkownicy należący do grup, których nazwy
są takie same jak użytkownik, czyli właścicielem katalogu test1 jest użytkownik logujący
się do systemu jako test1, który jest członkiem grupy również o nazwie test1. Należy
przypomnieć, że podczas instalacji systemu Linux zostały utworzone takie konta
użytkowników, a jak widać również takie grupy użytkowników.
16
Linuksowy system plików
Rysunek 15. Przykład zmiany katalogu bieżącego z odmową dostępu
Na powyższym rysunku zostały przedstawione przykłady poleceń wydanych przez
użytkownika jacnow, których zadaniem były różne zmiany katalogów i przejrzenie ich
zawartości. Użytkownik przeszedł z katalogu /home do swojego katalogu domowego
(czyli /home/jacnow), wyświetlił jego zawartość w postaci szczegółowej (poleceniem
ls –l), a następnie z katalogu /home spróbował przejść do podkatalogu test1, czyli
katalogu domowego (często stosuje się określenie prywatnego) użytkownika, logującego
się jako test1. Okazuje się, że nie było to możliwe, system wyświetlił komunikat
Permission denied, co można przetłumaczyć jako dostęp zabroniony. Jest to prosty
przykład potwierdzający tezę, że system Linux zapewnia użytkownikowi ochronę jego
zasobów, czyli tylko on (i oczywiście administrator) ma do nich dostęp. Nie ma obawy
o to, że inny użytkownik zapozna się z zawartością katalogów i plików nienależących do
niego i tym bardziej ich nie zmodyfikuje lub nie usunie. W poprzednim punkcie został
omówiony wydruk pełnej informacji o pliku (poleceniem ls –l), w której w pierwszych
kolumnach są drukowane uprawnienia do pliku w postaci kombinacji znaków r, w, x oraz
minus (–). Ich znaczenie jest następujące:
r — oznacza prawo do odczytu (read),
w — oznacza prawo do zapisu (write),
x — oznacza prawo do wykonania (eXecute),
– — oznacza brak uprawnienia.
17
Linuksowy system plików
Kombinacja tych znaków powtarza się trzykrotnie. Pierwsza grupa oznacza uprawnienia
przysługujące właścicielowi pliku (lub katalogu), druga — innych użytkowników,
należących do tej samej grupy, co właściciel pliku, trzecia trójka znaków dotyczy
uprawnień pozostałych użytkowników systemu. Przykładowo oznaczenia dla pliku
–rwxr-xr-- należy odczytać następująco:
rwx — właściciel pliku ma do niego pełne prawa, może go odczytać, zapisać (co
również oznacza skasować) i wykonać,
r-x — inni użytkownicy, należący do tej samej grupy, co właściciel, mogą ten plik
odczytać i uruchomić,
r-- — pozostali użytkownicy systemu mogą ten plik odczytać.
Jak zmienić uprawnienia do pliku? Służy do tego polecenie chmod. Składnia polecenia jest
następująca:
chmod uprawnienia nazwa_pliku
Przykład: chmod a+r procesy.txt
Wyjaśnienia wymagają uprawnienia, które w przykładzie mają postać a + r. Pierwsza
litera oznacza użytkowników i może być jedną z następujących: u — właściciel pliku
(user), g — grupa (group), o — pozostali użytkownicy (others), a — wszyscy (all),
kolejny znak to „+” (plus), co oznacza dodanie uprawnień lub „–” (minus), symbolizujący
odebranie uprawnień i ostatni znak r, w, x określający rodzaj uprawnień opisany
powyżej. Pomiędzy znakami nie może wystąpić spacja. W systemie Linux można również
zmieniać prawa dostępu do plików, posługując się zapisem ósemkowym. Każdemu
z uprawnień odpowiada bit ustawiony w określonej pozycji, co pozwala na łatwą
konwersję liczby dwójkowej na ósemkową, jak w poniższym przykładzie:
r w x r w x r w x
4 2 1 4 2 1 4 2 1
7 7 7
Rysunek 16. Przykład konwersji uprawnień oznaczanych literami na liczby ósemkowe
Uprawnienia rwxrwxrwx można zapisać liczbowo jako 777, czyli polecenie chmod
a+ra+wa+x p* można również zapisać w postaci chmod 777 p*, a wynik działania będzie
taki sam.
18
Linuksowy system plików
r w x r – x r – –
4 2 1 4 0 1 4 0 0
7 5 4
Rysunek 17. Przykład konwersji uprawnień oznaczanych literami na liczby ósemkowe
Poniższy rysunek pokazuje różne przykłady działania polecenia chmod.
Rysunek 18. Przykłady działania polecenia chmod
Należy zwrócić uwagę na fakt wyświetlania pliku procesy.txt różnymi kolorami,
w zależności od tego, czy miał nadane uprawnienia do jego wykonania. Nadawanie
uprawnień prowadzi do kolejnego spostrzeżenia: o możliwości wykonania programu nie
decyduje rozszerzenie nazwy pliku (jak to ma miejsce w Windows), lecz prawo danego
pliku do wykonania (atrybut eXecute), które może być w każdej chwili nadane lub
odebrane przez uprawnionego użytkownika.
Nie tylko prawa dostępu do pliku mogą być zmieniane. Również właściciel pliku może
zostać zmieniony. Dokonuje się tego poleceniem
chown nowy_właściciel nazwa_pliku, jak w przykładzie: chown test2 procesy.txt.
19
Linuksowy system plików
Przykład sposobu zmiany właściciela pliku jest przedstawiony na poniższym rysunku.
Należy zwrócić uwagę na fakt, że ta operacja była możliwa do wykonania jedynie przez
administratora systemu. Podobnie działa polecenie chgrp nowa_grupa nazwa_pliku.
Polecenie chgrp pozwala na jednoczesną zmianę właściciela pliku i grupy, jeśli parametr
poda się w postaci nowy_właściciel:nowa_grupa.
Rysunek 19. Przykłady działania polecenia chown
W uprawnieniach dostępu do pliku występują również znaczniki (bity) SUID i SGID.
Ustawienie bitu SUID pozwala użytkownikowi uruchamiającemu program wykonanie go
z prawami administratora. Jest to potencjalna luka w bezpieczeństwie systemu i należy
rozważnie korzystać z nadawania tych uprawnień użytkownikom. W przypadku
ustawienia bitu SGID program jest wykonywany z prawami dostępu grupy, do której
należy, a nie uprawnieniami grupy, do której należy użytkownik uruchamiający ten
program. Dodawanie lub usuwanie bitów SUID i GUID jest wykonywane poleceniem:
chmod u+s nazwa_pliku — ustawienie bitu SUID,
chmod u-s nazwa_pliku — usunięcie bitu SUID,
chmod g+s nazwa_pliku — ustawienie bitu GUID,
chmod g-s nazwa_pliku — usunięcie bitu GUID.
20
Linuksowy system plików
Bity SUID i GUID można również ustawić poleceniem chmod, podając uprawnienia
w postaci liczbowej:
chmod 4755 nazwa_pliku ustawienie bitu SUID,
chmod 2755 nazwa_pliku ustawienie bitu GUID.
Do wyszukania w systemie plików z ustawionymi bitami SUID i GUID można użyć
polecenia find z odpowiednimi parametrami:
find /usr –perm +4000 — odszuka pliki z ustawionym bitem SUID, znajdujące się
w katalogu /usr i podkatalogach,
find /bin –perm +2000 — odszuka pliki z ustawionym bitem GUID, znajdujące się
w katalogu /bin i podkatalogach.
Informacja o ustawionych bitach SUID i GUID jest pokazana jako litera „s”
w uprawnieniach do pliku wyświetlanych poleceniem ls –l. Przykład zmian ustawienia
bitów SUID i GUID jest pokazany na następnym rysunku.
Rysunek 20. Przykłady informacji o plikach z ustawionymi bitami SUID
21
Linuksowy system plików
4. Konfigurowanie środowiska pracy systemu Linux,
zmienne systemowe
Zalogowanie się użytkownika do systemu powoduje uruchomienie programu powłoki
(shella) określonego w pliku /etc/passwd. W Linuksie domyślną powłoką jest /bin/bash.
Tak jak w przypadku wielu programów i jego konfiguracja jest zapisana w różnych
plikach tekstowych, które tworzą profil użytkownika. Są to następujące pliki:
.bashrc — jest umieszczany automatycznie w katalogu domowym użytkownika,
.bash_profile — jest umieszczany automatycznie w katalogu domowym użytkownika,
.bash_history — zawiera listę ostatnio uruchomionych poleceń,
/etc/bashrc — zawiera listę aliasów systemowych,
/etc/profile — zawiera definicje zmiennych środowiskowych.
Jak widać z powyższego wykazu, pierwsze trzy pliki są plikami ukrytymi, znajdującymi
się w katalogu użytkownika (nazwa pliku ukrytego rozpoczyna się od kropki).
Rysunek 21. Lista plików ukrytych w katalogu domowym użytkownika
Domyślne środowisko pracy jest określone przez zestaw zmiennych systemowych
zdefiniowanych w pliku /etc/profile. Listę i wartości wszystkich zmiennych systemowych
można wyświetlić poleceniem env lub printenv. To ostatnie polecenie pozwala również
22
Linuksowy system plików
na wyświetlenie wartości dowolnej wybranej zmiennej systemowej. Znaczenie wybranych
zmiennych systemowych jest przedstawione w poniższej tabeli.
Tabela 2. Znaczenie zmiennych systemowych
Zmienna Znaczenie
HISTSIZE
liczba poleceń zapamiętywanych w pliku historii
HOME
nazwa katalogu domowego aktualnego użytkownika
LOGNAME
identyfikator (login) aktualnego użytkownika
PATH
ścieżka przeszukiwania katalogów podczas uruchamiania programów
PS1
zgłoszenie systemowe linii poleceń
PS2
zgłoszenie systemowe w kolejnej linii poleceń, gdy są wymagane dodatkowe
parametry
Przykładowe wartości zmiennych systemowych wyświetlone poleceniem env są
przedstawione na poniższym rysunku.
Rysunek 22. Wyświetlone wartości zmiennych systemowych
23
Linuksowy system plików
Domyślne zgłoszenie systemowe można zastąpić innym, zmieniając definicje zmiennych
PS1 i PS2. Przy definiowaniu tych zmiennych można wykorzystać symbole zestawione
w poniższej tabeli. Symbole w definicji zmiennych PS1 i PS2 należy umieszczać
w cudzysłowach.
Tabela 3. Symbole stosowane w zgłoszeniu systemowym
Symbol Znaczenie
\!
wyświetla numer polecenia w historii
\#
wyświetla kolejny numer aktualnego polecenia
\$
wyświetla znak #, jeśli zalogowanym użytkownikiem jest root, znak $
w pozostałych przypadkach
\\
wyświetla znak \
\[
oznacza początek ciągu niewyświetlanych znaków
\]
oznacza koniec ciągu niewyświetlanych znaków
\d
wyświetla aktualną datę
\h
wyświetla nazwę hosta
\n
znak końca wiersza (złamanie linii)
\nnn
wyświetla znak o kodzie ósemkowym nnn
\s
wyświetla nazwę shella
\t
wyświetla aktualną godzinę
\u
wyświetla identyfikator użytkownika
\W
wyświetla ścieżkę do katalogu bieżącego
\w
wyświetla nazwę katalogu bieżącego
Zdefiniowane zmienne systemowe mają zasięg lokalny, czyli są „widoczne” tylko
w powłoce, w której zostały zdefiniowane. Uruchomienie innego programu lub skryptu
generuje podpowłokę, w której nowo zdefiniowane zmienne nie będą już widoczne. By
udostępnić zmienne dla wszystkich powłok (procesów), należy zmienną „wyeksportować”
za pomocą polecenia export z nazwą zmiennej systemowej jako parametrem,
np. export PS1. Do zdefiniowanych zmiennych można się odwoływać i wykorzystywać je
w programach, poprzedzając ich nazwę znakiem $, na przykład polecenie echo $PATH
wyświetli aktualną wartość zmiennej PATH, czyli ścieżkę przeszukiwania katalogów. Jak
widać z przedstawionych przykładów nazwy zmiennych są zazwyczaj pisane wielkimi
literami, ale oczywiście nie jest to konieczne. Zmienne systemowe są tradycyjnie
oznaczane w ten sposób, ale użytkownik może zdefiniować dowolną zmienną, której
nazwa jest pisana małymi literami, jak w poniższym przykładzie:
24
Linuksowy system plików
zm1=nowa_zmienna
export zm1
Nowa zmienna systemowa o nazwie zm1 została zdefiniowana, wyeksportowana i jest
dostępna dla wszystkich programów, gdyż jej wartość została wyświetlona poleceniem
printenv. Należy zwrócić uwagę na to, że przy definiowaniu zmiennych po obu stronach
znaku równości nie mogą wystąpić odstępy (spacje), co jest pokazane w pierwszej linii
powyższego przykładu.
Jedną z cech powłoki bash jest możliwość stosowania aliasów, czyli innych nazw poleceń.
Komenda alias bez parametrów wyświetla zdefiniowane aliasy.
Rysunek 23. Wyświetlanie aliasów poleceń
Jak widać, w systemie zostały już wcześniej zdefiniowane pewne aliasy. Są to aliasy
dostępne dla wszystkich użytkowników i są wpisane w pliku /etc/bashrc. Często
wykonywane polecenia, np. zawierające długie nazwy katalogów, można łatwo
przedefiniować na krótsze, jak w poniższym przykładzie:
alias xxx='cd /usr/X11/lib/X11config'
alias cp=’cp –i’
alias mv=’mv –i’
25
Linuksowy system plików
Przedefiniować również można polecenia. W powyższym przykładzie znane i często
stosowane polecenia cp oraz mv zostały przedefiniowane tak, że będą działać w trybie
interaktywnym, czyli żądać potwierdzenia skasowania istniejących plików, co nie jest
domyślnym trybem działania tych poleceń. Należy zwrócić uwagę na to, że wokół znaku
równości nie mogą wystąpić spacje. Usuwanie aliasu jest realizowane poleceniem
unalias zdefiniowany_alias. Przykłady definiowania i usuwania aliasów są pokazane
na kolejnym rysunku.
Rysunek 24. Przykłady definiowania i usuwania aliasów
Polecenia wprowadzane przez użytkownika są zapisywane w pliku .bash_history, a liczbę
linii tego pliku określa wartość zmiennej HISTSIZE. Domyślną wartością tej zmiennej jest
1000, czyli system pamięta ostatnich tysiąc poleceń. Użytkownik może wywołać dowolne
z poleceń wykonanych wcześniej, podając jego numer, początkowe znaki lub fragment
polecenia (wzorzec) poprzedzone wykrzyknikiem, jak w poniższych przykładach:
!5 — zostanie wykonane piąte polecenie w historii,
!cat — zostanie wykonane wydane wcześniej polecenie zaczynające się od cat,
!-8 — zostanie wykonane polecenie wydane osiem poleceń wcześniej.
Linie poleceń uruchomionych wcześniej można łatwo edytować. Służy do tego polecenie
fc. Uruchamia ono domyślny edytor (zazwyczaj vi) dla podanej linii. Parametry
wywołania po polecenia fc są takie same jak przy wywoływaniu poleceń z historii
26
Linuksowy system plików
opisanych powyżej. Poniżej jest pokazany przykład uruchomienia edytora historii
poleceniem fc cat. Po zakończeniu edycji poprawione polecenie jest wykonywane.
Rysunek 25. Przykład działania edytora historii poleceń
27
Linuksowy system plików
5. Edytor
vi
Parametry konfiguracyjne systemu Linux są zazwyczaj zapisane w plikach tekstowych,
których edycja pozwala na zmiany konfiguracji i wprowadzanie modyfikacji. Każdy
system operacyjny musi zapewniać podstawowe możliwości zapisania tekstu
wprowadzonego z klawiatury. W zasadzie do tego celu nie jest potrzebny edytor,
wystarczy wykorzystać możliwości terminala linuksowego. Przykład takiego wpisywania
tekstu z klawiatury jest przedstawiony na poniższym rysunku.
Rysunek 26. Przykład najprostszego edytora
Jak widać polecenie cat nowyplik umożliwia wpisanie tekstu z klawiatury i zapisanie go
w pliku. Nie jest możliwe poprawianie tekstu w taki sposób. Nieodłącznym składnikiem
systemu UNIX i Linux jest edytor vi, który wbrew powszechnym opiniom o swojej
prostocie ma bardzo szerokie możliwości edycji. Uruchomienia programu vi dokonuje się
w terminalu, podając nazwę pliku jako parametr, ale nie jest to konieczne.
28
Linuksowy system plików
Rysunek 27. Praca z edytorem vi
Powyżej jest pokazany widok ekranu po wydaniu polecenia vi nowyplik. Edytor vi może
pracować w dwóch trybach — wydawania poleceń i edycji tekstu. Domyślnym trybem
pracy po uruchomieniu edytora jest wydawanie poleceń. Na tym ekranie możliwe jest
tylko przesuwanie kursora po tekście, nie jest możliwe wpisywanie tekstu. Edytor pracuje
w trybie poleceń, które są najczęściej pojedynczymi znakami, nie zaś w trybie edycji.
Przejście w tryb edycji jest możliwe po wpisaniu jednego z poleceń (czyli litery):
a — przechodzi do trybu edycji w miejscu za kursorem,
A — przechodzi do trybu edycji na końcu linii,
i — przechodzi do trybu edycji w miejscu przed kursorem,
I — przechodzi do trybu edycji na początku linii,
o — wstawia nową linię pod kursorem i przechodzi do trybu edycji w tej linii,
O — wstawia nową linię nad kursorem i przechodzi do trybu edycji w tej linii.
29
Linuksowy system plików
Rysunek 28. Ekran edytora vi w trybie wpisywania tekstu
Praca edytora w trybie edycji jest sygnalizowana napisem INSERT wyświetlanym
w najniższej linii ekranu.
W trybie wydawania poleceń następujące polecenia pozwalają na usuwanie znaków:
x — usuwa znak wskazywany przez kursor,
X — usuwa znak przed wskazywanym przez kursor,
dw — usuwa słowo wskazywane przez kursor,
dd — usuwa linię wskazywaną przez kursor,
D — usuwa znaki od kursora do końca linii,
d0 — usuwa znaki od kursora do początku linii.
Edytor vi pozwala również na zaznaczanie, kopiowanie, usuwanie i wklejanie fragmentów
tekstu. Tryb zaznaczania włącza się poleceniem v (w trybie poleceń, w przeciwnym
wypadku zostanie napisana litera „v”). Po zaznaczeniu tekstu można użyć jednego
z poleceń:
d — usuwa zaznaczony tekst i przenosi do bufora,
y — kopiuje zaznaczony tekst do bufora,
U — zamienia małe litery na duże,
u — zamienia duże litery na małe.
Do wstawiania tekstu z bufora służy polecenie p.
30
Linuksowy system plików
Przejście z trybu edycji do trybu wydawania poleceń następuje po naciśnięciu klawisza
Esc. W tym trybie są dostępne tzw. liniowe polecenia edycyjne, bardzo ważne, gdyż
umożliwiają zapis danych. Te polecenia są poprzedzane dwukropkiem, a ich działania są
następujące:
:w — zapisuje dane na dysku i kontynuuje edycję,
:x — zapisuje dane na dysku i kończy pracę edytora,
:r nazwa_pliku — wstawia plik tekstowy,
:q — kończy pracę edytora bez zapisywania danych.
Rysunek 29. Przykładowy komunikat edytora vi
Jak widać z powyższego rysunku edytor nie zakończy pracy, jeśli dane zostały zmienione
od czasu ostatniego zapisu na dysku. Można jednak wymusić odrzucenie wprowadzonych
zmian, kończąc polecenie wykrzyknikiem, czyli :q!. Wtedy użytkownik świadomie nie
zapisze zmienionych danych. Edytor vi nie jest lubiany przez użytkowników systemu
Linux. Jest to jednak standard wywodzący się z UNIX-a i występuje we wszystkich
odmianach i dystrybucjach Linuksa. Powyżej zostały zebrane jedynie niezbędne
informacje wystarczające do pracy z tym edytorem, ale jego możliwości są zazwyczaj
niewykorzystywane. Jednak podstawy posługiwania się nim w Linuksie są niezbędnym
elementem kursu.
31
Linuksowy system plików
Innym — również popularnym edytorem — jest edytor pico. Widok ekranu z wczytanym
tym samym plikiem, co w edytorze vi jest przedstawiony na rysunku poniżej. Polecenia,
które są wyświetlane u dołu ekranu, są wywoływane przez naciśnięcie kombinacji
klawiszy Ctrl + litera.
Rysunek 30. Praca z edytorem pico
Obsługa najważniejszych poleceń jest następująca:
Ctrl + G — wyświetla pomoc do programu,
Ctrl + X — koniec pracy z edytorem, należy podać nazwę zapisywanego pliku
(jak na rysunku),
32
Linuksowy system plików
33
Rysunek 31. Zapisywanie pliku w edytorze pico
Ctrl + J — wyrównanie tekstu,
Ctrl + R — wczytanie pliku,
Ctrl + W — poszukiwanie ciągu znaków.
Znajomość podstawowych zasad pracy z systemem Linux, a przede wszystkim z jednym
z edytorów, pozwoli na taką pracę w systemie, że studenci będą mogli podjąć próby
dostosowywania komputera pracującego z tym systemem operacyjnym do swoich
potrzeb i oczekiwań. Interfejs znakowy, jaki jest dotychczas wykorzystywany, jest
niezbędny do postawienia pierwszych kroków przy pracy w tym systemie.