Systemy operacyjne ZSOP. Wykład 1

Michał Goliński

2017-10-14

Sprawy organizacyjne

Kontakt

Treść wykładu

  • Wstęp teoretyczny
  • Powłoka bash jako środowisko pracy
    • operacje na plikach
    • operacja na procesach
    • operacje na tekście
    • obsługa kompilatora
    • potoki
  • Skrypty powłoki bash
  • Funkcje systemowe POSIX w języku C
  • (Współbieżność)

Wymagania wstępne

  • Umiejętność czytania ze zrozumieniem dokumentacji w języku angielskim
  • Rozumienie pętli, instrukcji warunkowych i innych podstawowych koncepcji programistycznych
  • Podstawy języka C/C++

Literatura

Zaliczenie przedmiotu

  • Ćwiczenia/laboratoria
    • zadania domowe – bash (50% punktów)
    • projekt – funkcje systemowe w C (50% punktów)
  • Wykład
    • egzamin testowy, sprawdzający głownie wiedzę praktyczną
    • osoby z oceną db+ i bdb z ćwiczeń zwolnione

Wstęp

System operacyjny

System operacyjny to główny program uruchomiony na komputerze, zarządzający sprzętem:

  • procesorem
  • pamięcią operacyjną
  • dyskami twardymi
  • kartami graficznymi i ekranami
  • kartami sieciowymi i siecią

Pozostałe zadania

Oprócz tego „pełnowymiarowy” system operacyjny

  • zarządza uruchomionymi programami (procesami użytkownika)
  • dba o bezpieczeństwo uruchomionych usług/procesów
  • udostępnia jednolity interfejs, niezależny od sprzętu
  • zarządza użytkownikami i ich uprawnieniami

Główne zadania – CPU

Wirtualizacja procesora – każdemu działającemu procesowi użytkownika wydaje się, że działa jako jedyny proces na procesorze; programista nie musi martwić się tym, że jego program po uruchomieniu dzieli czas procesora z innymi procesami.

Główne zadania – RAM

Wirtualizacja pamięci – każdy proces dostaje na starcie tak samo wyglądającą, pustą pamięć operacyjną. System operacyjny dba, aby w momencie działania programu adresy logiczne w ramach procesu były tłumaczone na odpowiedni adres fizyczny w kościach pamięci. Poza oczywistym uproszczeniem dla programisty, podnosi to bezpieczeństwo i pozwala (poprzez stronicowanie i plik wymiany) systemowi operacyjnemi „udawać”, że ma więcej pamięci operacyjnej niż ma jej w rzeczywistości.

Jądro

Główną częścią systemu jest jądro – uprzywilejowany program, działający przez cały czas działania komputera, z reguły w trybie najniższej ochrony (jądro ma niczym nieograniczony dostęp do pamięci, sprzętu itp.).

Jeżeli większość sterowników urządzeń, usług obsługujących systemy plików itp. działa w pamięci, która jest wspólna dla całego jądra, to mówimy o jądrze monolitycznym (np. Linux).

Jądro cd.

Jeżeli jądro zawiera tylko podstawową funkcjonalność (współdzielenie procesora, pamięć wirtualną), a reszta usług systemowych działa w oddzielnej pamięci, to mówimy o mikrojądrze (np. GNU Mach, GNU Hurd).

Jądro cd.

Niektóre systemy operacyjne próbują łączyć oba podejścia, są to tzw. jądra hybrydowe (np. Windows NT, macOS, iOS).

Niektórzy uważają, że są to po prostu jądra monolityczne z dobrym marketingiem.

Historia

Historia systemów uniksowych

  • połowa lat 60-tych – Multics (MIT, AT&T Bell Labs, General Electric)
  • przełom lat 60-tych i 70-tych – UNIX (Ken Thompson, Dennis Ritchie)

PDP-7

Historia systemów uniksowych cd.

  • Lata 70-te i 80-te – popularyzacja, standaryzacja i komercjalizacja Uniksa
  • 1983 – startuje projekt GNU
  • 1988 – pierwsza wersja standardu POSIX

Historia systemów uniksowych cd.

  • 1991 – pierwsza wersja (0.0.1) klona Uniksa – Linuksa (Linux is not Unix).
  • 1992 – ustalenie licencji na GNU GPLv2
  • 1996 – wersja 2.0, obsługa wielu procesorów
  • 2003 – wersja 2.6, nowy scheduler, znacznie lepiej radzący sobie na maszynach wieloprocesorowych, wywłaszczanie jądra, usunięto większość odwołań do tzw. Big Kernel Lock
  • współczesne jądro (4.13) bez zmiany systemu numeracji miałoby oznaczenie 2.6.73

Drzewo genealogiczne

Współczesny rynek systemów operacyjnych

  • PC – Windows >90%, macOS 6%, Linux 3%
  • smartfony – Android 88%, iOS – 11%
  • serwery WWW – Unix/Linux - >70%, Windows <30%
  • Top 500 – 494 Linux, 6 AIX (odmiana Uniksa)

Wprowadzenie do Linuksa

Dystrybucja

Dystrybucja Linuksa – kompletny system oprogramowania zawierający jądro Linux i programy użytkownika z wielu różnych źródeł. Z reguły dystrybucje mają jakiś ustalony cel, np.:

  • przyjazne dla początkujących
  • dostosowane do starszych komputerów
  • do zainstalowania na routerze
  • do zainstalowania na serwerze
  • dla zaawansowanych
  • płatne, ze wsparciem komercyjnej firmy

GNU

Projekt GNU – rozpoczęty w latach 80-tych przez Richarda Stallmana projekt stworzenia systemu operacyjnego z otwartym kodem źródłowym.

Projekt od początku skupił się na pisaniu otwartych zamienników poleceń uniksowych, zostawiając pisanie samego jądra na później. Jądro (Hurd) jest do dzisiaj w powijakach. Za to stworzono sporo programów użytkowych, używanych przez większość dystrybucji Linuksa. Stąd nazwa GNU/Linux.

Linux nie jest częścią projektu GNU.

GNU GPL

GNU General Public License – licencja oprogramowania o otwartym kodzie źródłowym. Zakłada, że każdy użytkownik oprogramowania na tej licencji może zażądać kopii kodu źródłowego od twórców, modyfikować go i dalej rozpowszechniać, ale tylko na licencji GPL.

Co więcej, jeżeli fragment oprogramowania jest objęty licencją GPL, to całe oprogramowanie musi być nią również objęte. Mówi się, że licencja GPL ma charakter wirusowy.

Najważniejsze dystrybucje

  • Debian – serwery
  • Ubuntu – dla początkujących, serwery, komercyjna
  • Red Hat Linux – komercyjna
  • CentOS – serwery
  • Fedora – komputery osobiste, wolne oprogramowanie
  • OpenSUSE – komputery osobiste, serwery
  • Arch Linux – dla zaawansowanych, rolling release

Instalacja na maszynie wirtualnej

Maszyna wirtualna to program udający komputer, pozwala zainstalować system operacyjny (gościa) bez obaw o uszkodzenie posiadanego systemu (gospodarza). Bardzo dobrą, darmową maszyną wirtualną jest VirtualBox. Na tej maszynie zainstalujemy Manjaro KDE. Obraz płyty do instalacji można poprać stąd.

Wprowadzenie do powłoki bash

Filozofia Uniksa

Zasady mające przyświecać programistom:

  • Pisz programy tak, by robiły jedną określoną czynność i robiły ją dobrze.
  • Pisz programy tak, by mogły łatwo ze sobą współpracować.
  • Pisz programy tak, by operowały na tekście – uniwersalnym i łatwym do zrozumienia formacie.

Wszystko jest plikiem

Znaczy to, że system eksponuje urządzenia i pewne interfejsy jako specjalne rodzaje plików, dla których zwykłe operacje mają specjalne znaczenie. Np.:

  • dyski – pozwalają na zapis i odczyt obrazów dysków.
  • połączenia sieciowe – pozwalają na odbieranie i wysyłanie danych przez sieć
  • katalog /proc – pozwala poznać różne informacje o systemie poprzez odczytywanie plików.
  • katalog /proc/sys – pozwala zmienić pewne opcje działającego jądra Linuksa.

Terminal

Po co komu tryb tekstowy?

  • te same operacje na wielu plikach
  • powtarzalne polecenia
  • przetwarzanie wsadowe
  • program konsolowy jest częściej prostszy od graficznego
  • skrzynka z narzędziami

Powłoka

Powłoka — interpreter linii poleceń uruchamiany jako ostatni etap logowania do systemu (chyba, że zażądano logowania graficznego). Czeka na polecenia użytkownika, uruchamia żądane programy z zadanymi argumentami.

Historycznie istotne powłoki:

  • powłoka Bourne’a – sh
  • powłoka C – csh
  • tcsh
  • Bourne-Again shellbash

Anatomia polecenia

$ <polecenie> <argument1> <argument2> ...

Pierwszy znak to tzw. znak zachęty (prompt). Przy domyślnych ustawieniach jest on wyświetlany przez powłokę, nigdy nie wpisujemy go sami. Przyjmujemy konwencję, że poprzedzenie polecenia w zapisie znakiem $ oznacza, że wykonujemy je jako normalny użytkownik. Nic nie stoi na przeszkodzie, by takich poleceń używać też jako administrator. Kiedy polecenie poprzedzone jest jednak znakiem #, oznacza to, że prawdopodobnie jego wykonanie ma sens tylko jako administrator.

Anatomia polecenia cd.

<polecenie> jest wyszukiwane kolejno wśród:

  • zdefiniowanych przez użytkownika aliasów
  • zdefiniowanych przez użytkownika funkcji
  • poleceń wbudowanych powłoki
  • plików wykonywalnych w kolejnych katalogach zmiennej środowiskowej $PATH

Wielkość znaków ma znaczenie. Jeżeli odpowiednie polecenie nie zostanie znalezione, wyświetlany jest komunikat o błędzie.

Anatomia polecenia cd.

Argumenty są dowolnymi ciągami znaków, porozdzielanymi spacjami (lub innymi białymi znakami). Znaczenie argumentów zależy od konkretnego polecenia. W większości języków programowania argumenty otrzymujemy jako tablicę w czasie uruchamiania programu. Co do zasady kolejność argumentów ma znaczenie.

Anatomia polecenia cd.

Poniższy program w C wyświetla otrzymane parametry (oraz zmienne środowiskowe):

#include <stdio.h>
int main(int argc, char *argv[], char *env[]) {
for (int i = 0; i < argc; ++i) {
printf("Argument %d: %s\n", i, argv[i]);
}
for (int i = 0; env[i] != NULL; ++i) {
printf("Zmienna środowiskowa: %s\n", env[i]);
}
return 0;
}

Spacje w argumentach

Czasami zdarza się, że chcemy do polecenia przekazać argument, który zawiera spacje. Nie możemy tego zrobić tak:

$ cat Nowy plik tekstowy.txt

Aby spacje nie dzieliły argumentu, możemy użyć dowolnej z poniższych konstrukcji:

$ cat Nowy\ plik\ tekstowy.txt
$ cat "Nowy plik tekstowy.txt"
$ cat 'Nowy plik tekstowy.txt'

Automatyczne uzupełnianie

Oczywiście wpisywanie wszystkich poleceń od początku do końca jest bardzo męczące i podatne na błędy. Powłoka potrafi automatycznie uzupełniać nazwy poleceń i nazwy plików w argumentach. Służy do tego klawisz TAB. Jeżeli powłoka nie może jednoznacznie wskazać pełnego uzupełnienia, po dwukrotnym naciśnięciu TAB wyświetli wszystkie możliwości.

$ abc<Tab><Tab>
abcdiff abcechobounds abcstitcher
abcecho abcls abctree

Automatyczne uzupełnianie cd.

Mechanizm podpowiedzi jest elastyczny i rozszerzalny, a dla niektórych poleceń (niestety nie dla wszystkich) istnieją mechanizmy podpowiedzi wykraczające poza nazwy plików i poleceń.

Wzorce wyszukiwań

Powłoka jest szczególnie przydatna podczas pracy z wieloma plikami. Mechanizm wzorców wyszukiwań (globbing) pozwala w łatwy sposób odwoływać się do wielu plików. Wzorce wyszukiwań to napisy zawierające metaznaki. Powłoka bash rozumie w kontekście wzorców następujące metaznaki:

  • * – oznacza dowolny ciąg znaków (także pusty)
  • ? – oznacza dowolny jeden znak
  • [] – oznacza dowolny znak spośród podanych

Wzorce wyszukiwań cd.

  • *.txt – oznacza wszystkie pliki z rozszerzeniem .txt
  • a*b?c – oznacza wszystkie pliki o nazwach zaczynających się na a, mających na końcu b, dowolny znak i c
  • ?.py – oznacza wszystkie pliki o nazwie składającej się z czterech znaków, z których ostatnie 3 to .py
  • [abc]* – oznacza wszystkie pliki o nazwie zaczynającej się od a, b lub c

Powłoka po napotkaniu wzorca, zastępuje go listą pasujących plików, tak jakbyśmy sami ją wpisali. Jeżeli plików takich nie ma, to zostawia wzorzec bez zmian.

Opcje poleceń

Pogramy tekstowe dbają o to, by nie trzeba było za dużo pisać. Dlatego najczęściej mają ustalone dość sensowne zachowanie domyślne. Najczęstszym sposobem zmiany wybranego przez programistę domyślnego zachowania są opcje. Standard POSIX dostarcza funkcji (getopt, getopt_long), które są szeroko wykorzystywane do przetwarzania opcji w programach konsolowych.

Opcje poleceń cd.

  • Opcje poleceń to argumenty zaczynające się od znaku łącznika/minusa (-).
  • Kolejność opcji najczęściej nie ma znaczenia
  • Opcje krótkie poprzedzone są jednym minusem, można je łączyć ze sobą (np. -l -R to to samo co -lR).
  • Opcje długie poprzedzone są dwoma minusami, nie można ich łączyć ze sobą (np. --human-readable).
  • Zarówno opcje długie jak i krótkie mogą przyjmować dodatkowe argumenty.

Inne powszechne konwencje

  • Wiele programów udostępnia opcje długie i dla niektórych najczęściej używanych funkcjonalności również opcje krótkie.
  • Krótką pomoc do polecenia najczęściej wyświetlimy z opcją -h lub --help.
  • Wersję programu wyświetlimy z -V lub --version.
  • Często „gadatliwe” wyjście włączymy z opcją -v lub jeszcze bardziej z -vv.

Przykłady

$ ls
$ ls -a
$ ls --all
$ ls -A
$ ls -lR
$ ls -Rlh
$ ls --color=always
$ rm -plik_z_łącznikiem_w_nazwie.txt
$ rm -- -plik_z_łącznikiem_w_nazwie.txt
$ ssh -p 23 golinski@faculty.wmi.amu.edu.pl

Przydatne skróty klawiszowe

  • Ctrl+C – wysyła do aktualnie działającego programu sygnał kończący najczęściej jego pracę
  • Ctrl+R – wyszukiwanie w historii poleceń
  • strzałki góra/dół – przeglądanie historii poleceń
  • strzałki lewo/prawo – poruszanie kursorem
  • Ctrl+D – wysyła znak końca pliku

Pomoc i dokumentacja

Pomoc wbudowana w polecenie

Jak już widzieliśmy, wiele poleceń wyświetla krótszą bądź dłuższą pomoc po dodaniu opcji --help lub -h, np.:

$ cp --help
$ mpv --help

Starsza przeglądarka pomocy: man

Program man wyświetla strony tzw. podręcznika. Z reguły trzeba po prostu podać nazwę interesującego nas polecenia. Znajdziemy też dokumentację dotyczącą funkcji języka C. Czasami do zapytania pasuje więcej niż jedna strona, wtedy trzeba dodać numer interesującej nas sekcji. Możemy szukać tekstu na otwartej stronie klawiszem /, stronę zamykamy wciskając q. Więcej informacji uzyskamy wciskając h.

$ man man
$ man printf
$ man 3 printf

Przeszukiwanie podręcznika: apropos

Do wyszukiwania stron podręcznika według słów kluczowych służy polecenie apropos:

$ apropos printf

Jest ono przydatne, jeśli tylko z grubsza wiemy czego szukamy.

Nowsza przeglądarka pomocy: info

Wadą systemu man jest konieczność opisania działania polecenia na jednej, czasami bardzo długiej stronie (np. gcc). Program info wyświetla dokumentację przypominającą bardziej wielostronicową książkę, w szczególności podzieloną tematycznie na rozdziały oraz umożliwia podążanie za hiperłączami.

$ info info
$ info elinks
$ info gcc

info cd.

Obsługa info jest nieco bardziej skomplikowana, głównie przez konieczność nawigacji stron i hiperłączy:

  • n – następna strona
  • p – poprzednia strona
  • l – przejdź wstecz
  • H – wyświetl pomoc
  • h – wyświetl podręcznik info dla info
  • q – wyjdź

System plików

Zadanie systemu plików

Nowy, niesformatowany dysk nie zawiera żadnej struktury, jest po prostu dużą tablicą pustych bajtów. System plików to część systemu operacyjnego nadająca dyskowi strukturę, a więc sposób organizacji zapisywanych danych i metadanych, najczęściej w postaci katalogów, plików i ich atrybutów.

Dobry system plików jest szybki, efektywny i odporny na błędy.

Virtual File System

Z reguły to jądro zajmuje się utrzymywaniem systemu plików w stanie bez błędów, oraz odczytywaniem istniejących plików i zapisywaniem nowych, na rzecz działających procesów. System udostępnia procesom pewnego rodzaju abstrakcję czy idealizację – działania wykonujemy tak samo bez względu na konkretny używany właśnie system plików. Warstwa jądra Linuksa, która zapewnia ten wspólny interfejs nazywa się Virtual File System (VFS).

Montowanie i odmontowywanie

Aby używać w systemie systemu plików, należy go zamontować. Przed wysunięciem nośnika, system plików należy odmontować. Dzięki temu zmniejszamy ryzyko utraty danych.

W Linuksie systemy plików montujemy poleceniem mount i odmontowujemy poleceniem umount. Przy montowaniu systemu plików użytkownik może przekazać wiele opcji dla konkretnych systemów plików. Sczegóły można znaleźć w dokumentacji.

Sprawdzanie i naprawianie

Do sprawdzania i naprawiania ewentualnych błędów w systemach plików służą różne odmiany polecenia fsck – po jednym dla każdego systemu plików.

Formatowanie

Formatowanie to tworzenie na nośniku nowego, najczęściej pustego systemu plików. Do tworzenia nowych systemów plików służą różne odmiany polecenia mkfs – po jednym dla każdego systemu plików.

Najważniejsze systemy plików

Najważniejsze używane dzisiaj systemy plików to:

  • FAT, FAT16, FAT32, exFAT – starsze i względnie proste, korzeniami sięgające jeszcze DOS-a systemy plików
  • NTFS – nowoczesny windowsowy system plików
  • ext2/3/4 – standardowe linuksowe systemy plików (kolejne wersje)
  • ZFS, Btrfs – systemy plików z interesującymi możliwościami, dobre dla dużych serwerów
  • ISO 9660, UDF – systemy plików na dyskach optycznych
  • HFS+, APFS – systemy plików firmy Apple

Programy do zarządzania plikami

Katalog bieżący

Powłoka (jak i każdy inny program) pamięta tzw. katalog bieżący, czyli miejsce w systemie plików w którym aktualnie się znajduje. W graficznych menedżerach plików odpowiada to katalogowi aktualnie wyświetlanemu w okienku. Do tego katalogu odwołują się ścieżki względne.

Ścieżka bezwzględna

Ścieżka bezwzględna do pliku to nazwa pliku wraz ze wszystkimi katalogami w hierarchii katalogów od korzenia, np.

/home/michal/Dropbox/Adiunkt/Dydaktyka/ZSOP-wykład/lecture01.md

W systemie Linux nie ma odpowiednika windowsowych dysków C:, D: itp., wszystkie dyski są montowane w jednym drzewie katalogów rozpoczynającym się od /. To znaczy, że różne katalogi mogą w istocie być zapisane na różnych nośnikach używających różnych systemów plików.

Ścieżka względna

Ścieżka względna to ścieżka, która zaczyna się w katalogu bieżącym, np.:

Dropbox/Adiunkt/Dydaktyka/ZSOP-wykład/lecture01.md
ZSOP-wykład/lecture01.md
./ZSOP-wykład/lecture01.md
../ZSOP-wykład/lecture01.md

Specjalne katalogi . i .. obecne w każdym katalogu oznaczają kolejno: ten katalog i katalog nadrzędny.

Zmiana katalogu bieżącego: cd

Aby zmienić katalog bieżący używamy polecenia wbudowanego powłoki cd:

$ cd /
$ cd /home/michal
$ cd ~ #~ oznacza katalog domowy
$ cd ..
$ cd ../ZSOP-wykład
$ cd #bez argumentów przechodzi do katalogu domowego
$ cd - #przechodzi do poprzedniego katalogu

Wyświetlenie katalogu bieżącego: pwd

Aby wyświetlić aktualny katalog bieżący, używamy polecenia pwd:

$ pwd
/home/michal/Dropbox

Listowanie katalogu: ls

Aby wyświetlić zawartość katalogu, używamy polecenia ls:

$ ls # wyświetla katalog bieżący
$ ls /home/michal # wyświetla podany katalog
$ ls Dropbox # wyświetla podany katalog
$ ls *txt # wypisuje podane pliki

Najczęstsze opcje

  • -R – listuj podkatalogi rekurencyjnie
  • -l – wyświetlaj więcej informacji
  • -a – pokaż także pliki ukryte
  • -h – używaj przyrostków K, M, G przy wyświetlaniu rozmiaru

Kopiowanie plików: cp

Aby skopiować plik/katalog, używamy polecenia cp:

$ cp plik.txt nowy_plik.txt
$ cp plik1.txt plik2.txt katalog
$ cp -R katalog inny_katalog
$ cp katalog/* katalog/.* inny_katalog

Najczęstsze opcje

  • -R – kopiuj katalogi rekurencyjnie
  • -v – wyświetlaj nazwy kopiowanych aktualnie plików
  • -n – nie nadpisuj plików
  • -i – pytaj przed nadpisaniem

Przenoszenie plików: mv

Aby przenieść plik/katalog, używamy polecenia mv:

$ mv plik.txt nowy_plik.txt
$ mv plik1.txt plik2.txt katalog
$ mv katalog inny_katalog
$ mv katalog/* katalog/.* inny_katalog

Najczęstsze opcje

  • -n – nie nadpisuj plików
  • -i – pytaj przed nadpisaniem

Usuwanie plików: rm

Aby usunąć na stałe plik używamy polecenia rm:

$ rm plik.txt plik2.txt
$ rm -d pusty_katalog
$ rm -r katalog

Najczęstsze opcje

  • -R, -r – usuwaj pliki i katalogi rekurencyjnie
  • -f – nie pytaj
  • -d – usuwaj tylko puste katalogi
  • -i – pytaj przed usunięciem każdego pliku

Tworzenie katalogów: mkdir

Aby utworzyć nowy katalog używamy polecenia mkdir:

$ mkdir nowy_katalog
$ mkdir -p nowy_katalog/nowy_katalog

Najczęstsze opcje

  • -p – twórz katalogi nadrzędne w razie potrzeby

Usuwanie katalogów: rmdir

Aby usunąć pusty katalog można użyć polecenia rmdir, w praktyce częściej stosuje się rm -d lub rm -r.

Tworzenie dowiązań: ln

Aby stworzyć nowe dowiązanie używamy polecenia ln:

$ ln cel nazwa_dowiązania # tworzy dowiązanie twarde
$ ln cel # tworzy dowiąznie o nazwie cel w bieżącym katalogu
$ ln cel istniejący_katalog # tworzy dowiąznie o nazwie cel w podanym katalogu
$ ln -s cel nazwa_dowiązania # tworzy dowiązanie miękkie

Najczęstsze opcje

  • -s – twórz dowiązanie miękkie (symboliczne)

Uprawnienia plików

Każdy plik pod Linuksem należy do jakiegoś użytkownika i do jakiejś grupy. Mamy trzy grupy uprawnień: dla właściciela, dla grupy i dla reszty świata. W każdej grupie mamy trzy prawa:

  • odczytu (r) – możliwość odczytu zawartości pliku, wyświetlenia zawartości katalogu
  • zapisu (w) – możliwość modyfikacji zawartości pliku, zmiany zawartości katalogu
  • wykonania (x) – możliwość uruchomienia pliku jako programu, użycia katalogu jako bieżącego

Uprawnienia plików cd.

Obok notacji symbolicznej (rwx) przyjęło się stosować także notację liczbową (ósemkową). Uprawnienia w formacie ósemkowym dostaniemy dodając do siebie liczby 4, 2 i 1, w zależności od tego czy dany plik ma uprawnienia do odpowiednio odczytu, zapisu i wykonania.

Dla przykładu 743 odpowiada uprawnieniom rwx dla właściciela, r-- dla grupy i -wx dla reszty użytkowników.

Zmiana uprawnień: chmod

Narzędzie chmod w notacji symbolicznej pozwala dodawać lub odejmować pojedyncze uprawnienia, np:

$ chmod u+rw plik #dodaj właścicielowi prawa odczytu i zapisu
$ chmod g-x #odejmij grupie prawo wykonywania
$ chmod o=rx #nadaj reszcie prawa odczytu i wykonywania
$ chmod a=rwx #nadaj wszystkim wszystkie prawa

Zmiana uprawnień: chmod cd.

Narzędzie chmod w notacji ósemkowej pozwala tylko ustalać wszystkie uprawnienia, np:

$ chmod 644 plik #nadaj uprawnienia rw-r--r--
$ chmod 755 katalog #nadaj uprawnienia rwxr-xr-x

Zmiana czasu dostępu: touch

Narzędzie touch pozwala zmienić czas ostatniego dostępu i modyfikacji pliku, domyślnie na chwilę obecną. Nieistniejący plik zostaje utworzony.

Bywa to przydatne przy korzystaniu z make, jeśli chcemy wymusić ponowne wykonanie kompilacji bez konieczności zmiany plików źródłowych.