Komendy w Unixie
Układ katalogów w Linuksie
W Linuksie każdy standardowy katalog ma przypisane pewne funkcje, tzn. tworzony jest po to, aby przechowywać dane konkretnego typu. Tworzy się tzw. drzewo katalogów. Poniżej postaram się przedstawić co i gdzie się znajduje w systemie Linux.
Przedstawiony poniżej układ powinien być taki sam dla każdego Linuksa (układ taki możemy też spotkać w Uniksie i jego klonach). W zależności od dystrybucji może on być nieco inny (zróżnicowanie powinno być minimalne).
Nie opisałem wszystkich katalogów jakie można znaleźć w tym drzewie. Skupiłem się na ważniejszych.
/ - główny katalog w systemie. W nim znajdują się kolejne katalogi. Często oznaczany jest jako korzeń - z angielska root (każde drzewo się od tego zaczyna).
bin/ - katalog zawiera zestaw niezbędnych poleceń dla wszystkich użytkowników Linuksa. Znajdują się tutaj takie programy, jak: mv, cp, ls, tar itp...
boot/ - tutaj znajdują się pliki niezbędne do ładowania systemu. Znajdziemy tu przede wszystkim pliki konfiguracyjne programu ładującego (lilo, grub), konfigi jądra systemu, vmlinuz (jądro systemu - kernel), system.map (przechowuje adresy i nazwy funkcji oraz zmiennych z pliku binarnego jądra), initrd (plik wspomagający załadowanie pewnych modułów np. przed zamontowaniem głównej partycji) ...
dev/ - pliki urządzeń ( m.in. dysków twardych, napędów i innych... )
etc/ - pliki konfiguracyjne (programy do konfiguracji):
X11/ - pliki i konfigi dla środowiska X Window,
home/ - tutaj znajdują się domowe katalogi użytkowników (a w tych katalogach ich pliki),
lib/ - miejsce przechowywania bibliotek systemowych Linuksa (np. wymaganych do bootowania) oraz modułów jądra:
modules/ - moduły jądra ładowane przez system,
mnt/ - znajdują się tutaj katalogi przeznaczone do montowania urządzeń (partycje, cd-romy, pendrive). Katalogi te często trzeba utworzyć samemu. W niektórych dystrybucjach można znaleźć również katalog (lub dowiązanie symboliczne) /media/.
opt/ - katalog, w którym powinno się instalować oprogramowanie,
proc/ - katalog ten fizycznie nie istnieje - tworzy go jądro podczas startu systemu. Jest to katalog wirtualny, w którym przechowywane są informacje o pracy jądra i procesach. Dzięki niemu można się dowiedzieć m.in. jakie urządzenia są wykrywane przez system.
root/ - katalog domowy roota (administratora). Jedyny katalog użytkownika, który nie znajduje się w katalogu /home/,
sbin/ - zestaw niezbędnych programów dla administratora. Można znaleźć tutaj programy takie, jak: fdisk, modprobe, shutdown itp. (narzędzia do uruchamiania i naprawy systemu),
tmp/ - przechowuje pliki tymczasowe systemu (ang. Temporary), które zostają usuwane przy starcie systemu operacyjnego,
usr/ - jest to kolejne ogromna gałąź katalogów w systemie. Przechowywane tam informacje może modyfikować zazwyczaj tylko root.
bin/ - programy wykorzystywane przez zwyczajnego użytkownika,
games/ - gry i rozrywka,
include/ - pliki nagłówkowe dla języka C - są oznaczane rozszerzeniem *.h (np. stdio.h),
info/ - skompresowane pliki info niektórych programów,
lib/ - biblioteki (np. programów z intefejsem graficznym), pliki obiektowe oraz binaria,
local/ - zawiera szereg katalogów lokalnych, w których znajdują się pliki lokalne (też dokumentacje i manuale),
sbin/ - kolejne binaria nie koniecznie niezbędne - używane przez administratora,
share/ - zawiera kolejną listę katalogów, w których zostały zawarte informacje tylko do odczytu. Pliki, które tam się znajdują są niezależne od architektury, (również dokumentacje i manuale),
src/ - miejsce przechowywania nielokalnych kodów źródłowych (np. źródło jądra Linuksa),
var/ - katalog, w którym przechowywane są dane ulegające ciągłej zmianie, np. logi systemowe, kolejki, pliki tymczasowe itp.:
cache/ - miejsce przechowywania pamięci podręcznej (keszu) aplikacji,
games/ - zmieniające się dane o grach (z /usr/games),
lib/ - przechowuje informacje na temat stanu systemu i programów,
local/ - zmieniające się dane dla /usr/local,
log/ - logi systemowe,
tmp/ - pliki tymczasowe (dotyczące ładowania systemu), np. ustawienia pulpitu dla użytkownika (np. kde).
Są dwa tryby pracy systemu: tekstowy i graficzny. Pierwszy to taki, który zaczyna się od wpisania loginu i hasła. Następnie widzimy znak zachęty oznaczający gotowość do przyjmowania poleceń.
Tryb graficzny jest wywoływany z trybu tekstowego. Zwykle towarzyszą mu nakładki graficzne. Tryb graficzny ma określoną rozdzielczość i odświeżanie. W Linuksie spotkamy się z popularnym XFree86 lub X.Org (oparte o X11) - są to implementacje trybu graficznego (ang. X Window System). Ze względu na problemy z licencją coraz częściej będziemy się spotykać z X.Org.
Nakładki (środowiska) graficzne, tj. KDE, GNOME, FluxBox i inne również dają nam możliwość wpisywania poleceń. Do tego służą terminale działające w trybie graficznym. Popularniejsze terminale to aterm, xterm, eterm, a także Gnome Terminal itp. Oprócz terminali możliwe jest tworzenie ikon programów, lub użycie opcji uruchom (wykonaj polecenie). Istnieje również możliwość wyjścia z trybu graficznego z pozostawieniem trybu tekstowego. Najczęściej jednak w trybie graficznym używa się terminali.
Przed znakiem zachęty...
Standardowo przed znakiem zachęty występują pewne informacje.
Przykładowo:
login@domena: /usr/bin$ |
Oba przykłady różnia się jedną charakterystyczną rzeczą - ostatnim znakiem (przed znakiem zachęty).
Znak $ oznacza, że polecenia wpisuje użytkownik, natomiast # (ang. hash) oznacza administratora. Zarówno domena jak i katalog nie muszą być wyświetlane (zależy od ustawień w konfigu).
Polecenia
Warto wiedzieć, że polecenia w systemach uniksowych to zwykłe programy, które można uruchomić w dowolnym katalogu (poprzez dowiązanie). Można napisać swoje własne programy i ich używać w taki sam sposób. Programy te nazywane są "poleceniami", ponieważ spełniają określone funkcje w systemie.
Inaczej - polecenie stanowi wywołanie programu (również z parametrami). Zatem np. polecenie cp plik1 /katalog/ oznacza użycie programu CP (copy) z parametrami określającymi plik źródłowy i miejsce gdzie ma zostać przekopiowany.
Przedstawione niżej polecenia stanowią podstawę pracy z systemem...
Polecenia wejścia i wyjścia
Polecenie we/wy |
Opis |
shutdown -r now / reboot |
restart systemu (tylko superuser lub root) |
shutdown -h now / halt |
wyłączenie komputera (j/w.) |
su użytkownik |
zamiana użytkownika (ang. switch user) |
login |
zalogowanie się do nowej sesji |
exit / logout |
zakończenie zalogowanej sesji (jeśli to jedyna sesja - powoduje opuszczenie środowiska pracy i wywołanie okna logowania) |
startx |
rozpoczęcie pracy w środowisku graficznym X Window |
kdm, gdm, xdm |
dla managera logowania w trybie graficznym, odpowiednio KDE, GNOME i XFree86 (wywołanie managera nie oznacza wyboru środowiska graficznego) |
Poruszania się i operacje na plikach
Polecenie |
Opis |
cd nazwa_katalogu |
przejście do katalogu. Można wpisać pełną ścieżkę, np. cd /home/użytkowni/katalog lub będąc w katalogu użytkownika poprostu katalog. wpisanie samego cd powoduje przeniesienie do katalogu domowego /home/uzytkownik (ang. Come in Directory - [przypuszczalnie]). |
mkdir nazwa_katalogu |
tworzy katalog o podanej nazwie (ang. Make Directory) |
rmdir nazwa_katalogu |
usuwa katalog (ang. Remove Directory) |
cp plik katalog |
kopiuje plik do podanego katalogu (ang. Copy). Aby skopiować cały katalog musimy użyć opcji -r, czyli cp -r katalog inny_katalog |
mv plik katalog |
przenosi plik do podanego katalogu (ang. Move) lub zmienia nazwę pliku. Aby zmienić nazwę pliku należy wpisać mv nazwa_pliku nowa_nazwa. |
rm plik |
usuwa plik o podanej nazwie (ang. Remove), aby usunąć katalog wraz z zawartością należy użyć opcji -r |
touch nazwa_pliku |
tworzy plik o podanej nazwie (lub dla ambitnych - zmienia czas pliku). Plik można edytować dowolnym edytorem i nadać mu odpowiednie prawa i atrybuty |
pwd |
podaje ścieżkę obecnego katalogu |
ls |
pokazuje listę plików znajdujących się w danym katalogu (ang. List). Działanie podobne do dir w DOSie. Szczegółowe opisano tę opcję w innym artykule |
ln -s /.../katalog/plik nazwa |
wykonuje dowiązanie symboliczne (ang. Link), od tej pory plik będzie można wykonywać (wywoływać) poleceniem ./nazwa, przydatne gdy instalujemy program ze źródeł i chcemy zrobić do niego skrót |
whereis nazwa_pliku |
poszukuje plików źródłowych, binarnych lub stron podręcznika (ang. manual), z ang. Where is? - dosł. Gdzie jest? |
Jeżeli chodzi o katalogi można podawać je w różnej postaci. Już wcześniej podawana pełna ścieżka, ma postać np. cp /home/me/my_file /usr/bin. Aby cofnąć się o jeden katalog możemy posłużyć się kropkami, np. cp ../file_name /home/me/ - spowoduje to skopiowanie pliku z katalogu, znajdującego się przed aktualnym katalogiem. Można cofać się o kilka katalogów, np. ../../../file.
- pamiętaj, że pierwszy "/" oznacza - root (ang. Root - korzeń) - jest to pierwszy podstawowy katalog w systemie (główna partycja).
Procesy
Polecenie |
Opis |
ps |
wyświetla stan procesów |
ps -x |
wyświetla aktualne procesy użytkownika |
kill nr_pid |
kończy proces, nr_pid jest wyświetlany w pierwszej kolumnie po wywołaniu polecenia ps |
Uzyskiwanie informacji
Polecenie |
Opis |
man nazwa_polecenia |
wyświetla stronę podręcznika programu (o ile taka istnieje) |
uname -a |
wyświetla informacje: nazwa jądra systemu, sieciowa nazwa systemu, numer kernela, wersja jądra, architektura i nazwa systemu |
who |
wyświetla informacje o użytkowniku (z ang. kto) |
finger |
rozbudowane who, (z ang. palec, dotykać palcem) |
who am I |
wyświetla informacje o aktualnym użytkowniku w danej sesji |
file plik |
wyświetla informacje o pliku (tj. kodowanie, rodzaj pliku) |
df |
informacje o stanie dysku twardego (zużycie miejsca), jednostki można określić np. -m - Megabajty, -k - kilobajty |
du |
wielkość pliku lub katalogu (określenia j/w.) |
Program ls - listowanie zawartości katalogu
W Linuksie dosyć często używa się poleceń tekstowych. W obsłudze systemu niezbędna jest zatem znajomość tych poleceń. Jednym z nich jest ls - narzędzie do listowania zawartości w danym katalogu. Jest to jeden z programów, który warto poznać bliżej.
Podobne polecenie można znaleźć chyba w każdym innym systemie operacyjnym. Przykładowo w DOS-ie taki program nosił nazwę dir. Można było dokładać mu pewne parametry, dzięki którym wyświetlała się zawartość odpowiednio zdefiniowanych nazw plików (np. wszystkie zaczynajace się na literę a).
W Linuksie również istnieje polecenie dir oraz rozszerzone vdir. Mogą one stanowić dowiązanie symboliczne do programu ls (z odpowiednimi parametrami). Ich działanie jest bardzo podobne do ls, z resztą zostały wszystkie napisane przez tych samych autorów - Richarda Stallmana i Davida MacKenzie.
Program wywołany bez specjalnych parametrów wyswietli tylko katalogi i pliki (w obecnym katalogu lub podanym), np.:
ja@home:/$ ls /usr
bin doc games include info lib local sbin share src X11R6
- dostajemy to samo co dzięki dir
Jest możliwość podania bardziej szczegółowych informacyji, wtedy musimy wpisać:
ls -l
(małe "L")
ja@home:/$ ls -l /usr
razem 108
drwxr-xr-x |
2 |
root |
root |
32768 |
2006-04-22 19:37 |
bin |
- efekt jak w przypadku vdir
Dzieki takiej postaci otrzymujemy informacje takie jak (kolejno):
typ pliku (katalog, dowiązanie, plik wykonywalny itp., np. d) i prawa dostępu - rwxr-xr-x, następnie liczba powiązań, właściciel, grupa przypisana do pliku, rozmiar, data modyfikacji i nazwa elementu.
ls -a
Parametr umożliwia wyświetlenie także ukrytych plików (poprzedzonych kropką) oraz symbole "." lub "..", które oznaczają odpowiednio katalog aktualny i nadrzędny.
ja@home:/temp$ ls -a
. .. katalog kopia_zapas~ plik .ukryty
Jeżeli, nie chcesz widzieć tych pierwszych kropek użyj ls -A.
ls -B
Parametr określa ukrycie pliku kopii zapasowej (w moim katalogu temp jest to kopia_zapas~) - nie wyświetla plików oznaczonych znakiem tyldy:
ja@home:/temp$ ls -B
katalog plik
ls -d
Pokazuje tylko katalogi w obecnym lub wskazanym katalogu:
ja@home:/temp$ ls -d
katalog
ls -I wzorzec
(duże "i")
Ignoruje pliki i katalogi, których nazwy odpowiadają wzorcowi:
ja@home:/temp$ ls -I p???
katalog kopia_zapas~
Wzorzec można określić np. że zaczyna sie od litery "p", wtedy użyjemy gwiazdki: ls -I p*; lub że po "p" są jeszcze 3 znaki: ls -I p???; albo konkretny wyraz: ls -I plik
Jezeli chcemy natomiast wyświetlić odwrotne działanie powyższej komendy, wywołujemy wszystko tak samo tylko bez parametru -I - zamiast ignorować pliki określone wzorcem, wyświetli pliki spełniające określone kryteria.
ls -R
Umożliwia wyświetlanie zawartości katalogów podrzędnych (ang. recursive):
ja@home:/temp/katalog$ ls -R
.:
katalog_w_katalogu plik_w_katalogu
./katalog_w_katalogu:
ls -r
Polecenie spowoduje odwrócenie kolejności wyświetlania plików (ang. reverse):
ja@home:/temp$ ls -r
plik kopia_zapas~ katalog
ls -S
Sortowanie plików wg. rozmiarów - największy będzie pierwszy.
ls -t
Sortowanie plików wg. czasu modyfikacji.
ls -u
Sortuje wg. ostatniego dostępu do pliku (nie ostatniej modyfikacji).
ls -U
Powoduje niesortowanie zawartości katalogu.
ls -x
Opcja spowoduje posortowanie plików wg. ich rozszerzeń (alfabetycznie).
ls -i
Pokazuje, po lewej stronie nazwy pliku, numer indeksowy (seryjny) tego pliku:
ja@home:/temp$ ls -i
915899 katalog 507908 kopia_zapas~ 507907 plik
ls -o
Szczegółowy format listowania (jak z -l - małe "L"), ale nie wyświetla informacji o grupie:
ja@home:/temp$ ls -o
razem 4
drwxr-xr-x |
3 |
root |
4096 |
2006-04-29 17:27 |
katalog |
-rw-r--r-- |
1 |
root |
0 |
2006-04-29 17:13 |
kopia_zapas~ |
-rw-r--r-- |
1 |
root |
0 |
2006-04-29 17:13 |
plik |
itd...
ls -s
Pokazuje rozmiar (ang. size) pliku po lewej stronie jego nazwy.
Wymienione wyżej opcje wydają mi się najbardziej przydatne. Najczęsciej jednak używa się parametrów wzorcowych (z ignorowaniem wzorca lub bez), pokazywanie plików ukrytych i długiej listy plików.
Warto wiedzieć, że parametry możemy ze sobą łączyć, np. ls -la. Kolejność parametrów raczej nie ma znaczenia (chyba, że przy sortowaniu), ścieżkę również można podać za lub przed parametrami (odzielone spacją).
Wiedza uzupełniająca
Prawa dostępu do plików
Wszystkie pliki systemów uniksowych posiadają swoje prawa dostępu dla zapisu, odczytu i wykonywania. W Linuxie istnieje podział na przynajmniej dwóch użytkowników - root-a i normalnego. Tego drugiego możemy zrobić, kiedy nam się podoba, root jest tworzony podczas instalacji. Dla roota nie ma ograniczeń. On może ustawiać prawa jak mu się podoba. Ale musi ograniczać je dla pozostałych użytkowników... Dlaczego? Linux jest systemem przystosowanym do sieci. Posiada konta dla wielu użytkowników. Z komputerem można się łączyć zdalnie lub lokalnie. Konta też mogą być udostępniane zdalnie (shell - SSH). Jak widać swoboda użytkowania nie wchodzi tutaj w grę.
Linux umożliwa przydzielanie praw dostępu do plików użytkownikom i grupom. W systemie istnieje podział na właściciela pliku, grupy przypisanej do pliku i innych użytkowników (nie będących ani przydzieloną grupą, ani właścicielem pliku).
W jaki sposób dowiedzieć się jakie prawa ustawiono dla danego pliku?
Tutaj nie ma problemu. Wpisz ls -l nazwa_pliku. Dla przykładu utworzyłem taki plik wcześniej, popatrz:
home:/temp/katalog# ls -l example |
Po wpisaniu tego polecenia, wyświetlono informacje dotyczące mojego pliku example (z angielska - przykład). Pierwsza informacja z lewej to właśnie prawa dostępu, druga do ilość powiązań, trzecia z kolei to użytkownik (właściciel), a czwarta to grupa przypisana do tego pliku. Na końcu widzimy jeszcze datę i czas modyfikacji oraz nazwę pliku.
Jak interpretować informacje dot. praw dostępu?
Weźmy powyższą informację: -rw-r--r--. Jest tutaj 10 znaków.
Pierwszy znak oznacza zawsze typ pliku (np. zwykły plik, albo katalog).
Znak |
Znaczenie |
- |
zwykły plik |
b |
specjalny plik blokowy (ang. Block) |
c |
specjalny plik znakowy (ang. Character) |
d |
katalog (ang. Directory) |
l |
małe ("L") - dowiązanie symboliczne (ang. Symbolic link) |
p |
nazwany potok |
s |
gniazdo |
- w takim razie mój obiekt to zwykły plik.
Następnie widzimy oznaczenia typu r, w oraz "-". Oprócz tego może również wystąpić x. Litery te oznaczają:
Znak |
Angielski |
Plik |
Katalog |
r |
Read |
prawo do odczytu |
prawo do przeszukania zawartości |
w |
Write |
prawo do zapisu |
prawo do zmiany zawartości |
x |
eXecute |
prawo do wykonywania |
prawo do wejścia do katalogu |
- myślnik - oznacza brak danego prawa (występuje w miejscu odpowiedniej litery).
Bierzemy jeszcze raz mój przykład bez pierwszego znaku: rw-r--r--
Te 9 kolejnych znaków oznaczają po 3 prawa kolejno dla każdego z 3 użytkowników.
Od lewej pierwsze 3 symbole przeznaczone są dla właściciela pliku (ang. owner ale oznaczany jako ang. user - dalej dowiesz się dlaczego), drugie 3 symbole dla grupy przypisanej do tego obiektu, a ostatnie 3 dla innych użytkowników (nie będących właścicielami, ani grupą do której plik czy katalog został przydzielony).
Właściciel katalogu lub pliku to użytkownik, który stworzył ten plik lub któremu go przypisano. Grupa to określona grupa użytkowników (wg. grup można ustalać jakie kto ma prawa bez potrzeby ustalania ich konkretnemu użytkownikowi - wiecej o grupach przeczytasz w innym artykule).
Czyli interpretacja ma się następująco:
"Plik jest zwykłym plikiem, właściciel ma prawo do odczytu i zapisu, grupa tylko do odczytu, pozostali - również tylko do odczytu".
Jak nadać użytkownikowi lub grupie jakiś plik?
Standardowo plik przydzielany jest do użytkownika (i jego grupy), który go stworzył. Jeżeli chcemy zaś właścicielem pliku uczynić innego użytkownika lub inną grupę to przydadzą nam się dwa programy: chown - do użytkownika i chgrp - do grupy. Użycie jest bardzo proste:
chown użytkownik nazwa_pliku - zmienia użytkownika, grupa pozostaje,
chown użytkownik: nazwa_pliku - zmienia użytkownika, natomiast grupę na główną,
chown użytkownik:grupa nazwa_pliku - zmienia użytkownika i grupę,
chown :grupa nazwa_pliku - zmienia tylko grupę,
chgrp grupa nazwa_pliku - zmienia grupę, j/w.
Zamiast dwukropka można wstawić kropkę. Jako grupę można podać albo nazwę grupy, albo identyfikator numeryczny. Pomiędzy użytkownikiem a dwukropkiem oraz dwukropkiem a grupą nie ma odstępów! Jeżeli istnieje potrzeba przydzielenia wszystkich plików do użytkownika i/lub grupy (w obrębie katalogu) można posłużyć się poleceniem chown -r...
chown - z ang. Change Owner - zmień właściciela,
chgrp - z ang. Change Group - zmień grupę
Nadanie praw właścicielowi, grupie i innym
Nadanie i zmianę praw dostępu dla użytkownika lub grupy możemy wykonać na kilka sposobów. Do tego posłuży nam program o nazwie chmod (ang. Change Mode).
Sposób pierwszy - za pomocą liter i znaków
Sposób ten określa ustawienia praw dostępu do pliku takich samych dla wszystkich - tzn. możemy ustalić takie same prawa dla wszystkich albo właścicielowi, grupie czy innym użytkownikom. W ten sposób nie ustawimy praw osobno dla właściciela, osobno dla grupy itd. (chyba, że użyjemy polecenia kilka razy).
Przykład:
chmod a+w nazwa_pliku |
Dzieki temu możemy spowodować nadanie wszystkim prawa do zapisu dla pliku o podanej nazwie.
Wyjaśnienie składni tego polecenia:
Określamy kto ma dostac te prawa:
Litera |
Znaczenie |
a |
(ang. all) - wszyscy (użytkownik, grupa, inni) |
u |
(ang. user) - użytkownik - właściciel pliku |
g |
(ang. group) - grupa, której przypisano plik |
o |
(ang. others) - inni |
Napisałem wcześniej, że właściciel określany jest jako user (użytkownik), a nie owner (właściciel), oto dlaczego - nie może być dwóch typów użytkowników zaczynających się na o (owner, others), więc jeden nich jest zastępowany przez user.
Programiści wymyślili rozwiązanie, które i tak nie koliduje z prawidłowościami - (u)ser - użytkownik (któremu nadano plik - właściciel), (o)thers - inni użytkownicy w systemie - nie należą do grupy, do której przypisano plik i nie są właścicielami pliku.
2. Określamy znaczenie polecenia:
Znak |
Znaczenie |
+ |
nadanie prawa (dodanie) |
- |
odebranie prawa |
= |
zastąpienie prawa - kasuje poprzednie i zastępuje nowym |
3. Ustalamy prawa:
r, w, x - wiadomo,
u, g, o - ustawie takie same prawa jak ma (u)ser, (g)roup lub (o)thers
t - oznacza, że usunąc katalog może tylko jego właściciel(e) (tzw. Lepki bit - ang. sticky bit); oznacza też plik tekstowy
l - obowiązujące zabezpieczenie (małe "L")
Argumenty możemy ze sobą łączyć, np. chmod ug+rwx nazwa_pliku - nada właścicielowi i grupie prawo do czytania, zapisu i wykonywania, natomiast dla innych użytkowników (others) pozostaną one bez zmian.
Sposób drugi - za pomocą liczb oktalnych (ósemkowych)
- system oktalny polega na wykorzystywaniu cyfr od 0 - 7 (8 cyfr).
Z tym sposobem napewno zetknęli się już webmasterzy mający strony na serwerze uniksowym, obsługującym język PHP. Polecenie jest bardzo proste, wystarczy wpisać chmod 777 aby ustawić wszystkim prawa do odczytu, zapisu i wykonywania.
Tym sposobem ustalamy różne (lub takie same) prawa dla wszystkich użytkowników. Jak zwykle pierwsze kolejne cyfry od lewej to: właściciel-grupa-inni.
A oto rozkład cyfr:
Znaki |
Cyfra |
Znaczenie |
--- |
0 |
brak praw |
--x |
1 |
tylko wykonywanie |
-w- |
2 |
tylko zapis |
-wx |
3 |
zapis i wykonywanie |
r-- |
4 |
tylko odczyt |
r-x |
5 |
odczyt i wykonanie |
rw- |
6 |
pokazuje informacje na temat komendy |
rwx |
7 |
zapis, odczyt i wykonywanie |
Oczywiście w przypadku katalogów znaczenie zmienia się odpowiednio. Jest jescze możliwość ustawienia czwartej cyfry. Ustawia się ją przed tymi trzema odnoszącymi się do u, g i o. A oto ich oznaczenia:
1 - to samo co prawo t - lepki (ang. sticky) bit,
2 - ustawianie ogólnego zabezpieczenia (lub ustawia identyfikator grupy podczas uruchomienia),
4 - ustawienie identyfikatora użytkownika podczas uruchamiania
Zatem polecenie z chmod ustawiające "lepki bit" i jakieś prawa może wyglądać tak:
chmod 1770 |
Maska
Gdy w systemie Linux jakiś plik jest tworzony musi mieć od razu ustalone prawa dostępu. Dla przykładu możesz utworzyć dowolny plik i sprawdzić jakie prawa posiada (polecenie ls -l nazwa_pliku) - w każdym razie jakieś ma.
Istnieje polecenie, które pozwala określić jakie prawa nie mają być nadawane domyślnie dla nowo utworzonego pliku - umask.
Przykład:
umask 444 |
Będzie oznaczać, że standardowo nie bedą przyznawane prawa do odczytu. Czyli jeśli stworzysz teraz nowy plik, to będzie on miał takie prawa: -w--w--w-. Zwykle maska ustawiana jest na 022 (rw-r--r--). Jak widać 0 ustawia zapis i odczyt (a raczej nie wyłącza go). Można zauważyć, że prawa do wykonywania są pomijane!
Możliwe cyfry to:
Cyfra |
Znaczenie |
0 |
brak ograniczeń praw (zapis i odczyt) |
2 |
wyłącza zapis (ustawia tylko odczyt) |
4 |
wyłącza odczyt (ustawia tylko zapis) |
6 |
wyłacza zapis i odczyt (brak praw do pliku) |
Podane opcje są prawidłowymi, ale można też użyć standardowych 0-7 (zostanie wyłączona opcja zapis i/lub odczyt - wykonywanie i tak zawsze będzie wyłączone).
Tłumaczenie dla ambitnych
Zwykle standardowe prawa dostępu (mode) ustawione są na 666 (rw-rw-rw-). Poleceniem umask ustawiamy jakie prawa odejmujemy od standardowego, czyli od 666 - ustawiamy tzw. maskę. Zatem jeśli maska ustawiona jest na 444 (umask 444) to układamy równanie 666 - 444 = 222 [mode]co nam daje: -w--w--w-.
Jeżeli w równaniu wyjdzie jakieś prawo wykonywania - zostanie ono ustawione jako brak (-). Jeśli przekroczymy zakres odejmowania, czyli odejmiemy większą liczbę od mniejszej to prawa ustawione będą ustawione na 000 (---------), czyli w normalnym wypadku wszelkie prawa będą odejmowane począwszy od mode 666.
Polecenie umask bez podanych parametrów wyświetli nam aktualny status maski.
domena@home:~$ umask |
Jak można zauważyć mamy tutaj 4 cyfry.
Zamiast 0 mogą pojawiać się inne wartości:
Cyfra |
Opis |
1 |
Ustawiony lepki bit |
2 |
Ustawiony bit SGID |
4 |
Ustawiony bit SUID |
Jeżeli chcesz na stałe ustawić wartość umask, zmień jego wartość w pliku /etc/profile (lub profiles); dla konkretnego użytkownika w systemie Linux - w .bashrc, natomiast Unix - .profile (w katalogu domowym użytkownika).
Ponadto poleceniem umask -S można sprawdzić jakie prawa będą przydzielane standardowo (nie podaje maski):
domena@home:~$ umask -S |
Cały czas posługiwałem się określeniem pliku, ale jeśli chodzi o prawa odczytu, zapisu i wykonania to ich odpowiedniki dla katalogów nie ulegają zmianie (przeszukiwanie, zmiana zawartości, wejście).