KRÓTKI (czyt. “bardzo okrojony”) KURS UNIX’A (LINUX'A)

Linux jest 32-bitowym wielodostępnym i wielozadaniowym systemem operacyjnym. Wyposażony jest on w mechanizmy bezpieczeństwa i kontroli dostępu. Po zalogowaniu się do systemu na ekranie widzimy znak zachęty tzw. linię poleceń. Polecenia Linuxa w większości stanowią anglojęzyczne skróty, które należy poznać, aby właściwie korzystać z tego systemu. Pliki poukładane są w sposób hierarchiczny w katalogach, tworząc drzewo. Oto krótki opis drzewa katalogów Linuxa: 
W katalogu głównym ( oznaczanym jako / ) znajduje się szereg katalogów, i tak:
 programy i polecenia systemowe znajdują się w katalogach: /bin (dla zwykłych użytkowników) i /sbin (dla administratora).
/etc - zawiera pliki konfiguracyjne programów. 
/boot - zawiera pliki potrzebne przy uruchamianiu systemu. 
/var - zawiera pliki z zapisem pracy systemu. 
/usr - zawiera najczęściej uruchamiane pliki, biblioteki oraz programy. 
/home - zawiera katalogi domowe użytkowników systemu. 
/lib - zawiera zbiór bibliotek współdzielonych przez programy. 
/dev - zawiera pliki reprezentujące urządzenia. 
/tmp – katalog na pliki tymczasowe
/mnt – katalog do montowania dodatkowych systemów plików
/proc – zawiera pliki wirtualne (istniejące tylko w pamięci operacyjnej) reprezentujące poszczególne procesy
 
Przy podawaniu ścieżki dostępu należy pamiętać, że w Unix-ie nazwy katalogów oddziela znak "slash" / , (natomiast w DOS'ie znak "backslash" \). W Unix-ie ważna jest wielkość liter w nazwach plików (pliki Dane i dane - to 2 różne pliki) oraz, że nazwy plików mogą mieć więcej niż 8 znaków +3 na rozszerzenie (np. To-jest.bardzo_dluga-nazwa.pliku). Używamy duże i małe litery, cyfry, znaki specjalne: “_”, “-”“$”, “.” .
 kropki mogą występować w nazwach wielokrotnie. 
Oprócz zwykłych plików w katalogach mogą się pojawić:
	pliki 'ukryte' - każdy plik, którego nazwa zaczyna się od kropki jest plikiem 'ukrytym'. Jego nazwa nie jest
normalnie wyświetlana podczas listowania zawartości katalogu (dla polecenia ls należy użyć opcji -a) 
Zwykle są to pliki konfiguracyjne - nie powinny być usuwane ani modyfikowane przez użytkownika.
	pliki 'specjalne' - wszystkie pliki w katalogu /dev oznaczają naprawdę urządzenia dołączone do komputera - twarde dyski, urządzenia peryferyjne, itp. 

Zanim zaczniemy prace - musimy zalogować się do systemu. Unix pozwala na wpisanie:
	nazwy użytkownika - po login 
	hasła użytkownika - po password. 
Hasło nie jest wyświetlane na ekranie.
Nazwa użytkownika:
do 8 znaków, małe i duże litery są traktowane jako różne znaki. W nazwie mogą wystąpić litery, cyfry oraz znaki specjalne: _ - $
Hasło użytkownika:
również do 8 znaków, zestaw znaków - jak dla nazwy użytkownika
W momencie tworzenia konta użytkownika przez administratora systemu definiowane są następujące obiekty:
	nazwa użytkownika 
	hasło 
	unikalny numer użytkownika (UID: User Identification Number) 
	grupa, do której standardowo należy użytkownik (GID: Group Identification Number) 
	ewentualne ograniczenia na dopuszczalna ilość zajmowanego miejsca na dyskach (file quota) - o ile system quota jest aktywny 'długa' nazwa użytkownika - pozwalająca na identyfikacje użytkownika według jego prawdziwego nazwiska bazowy (domowy) katalog użytkownika – katalog, w którym znajdą się pliki zakładane przez użytkownika. Do katalogu tego kopiowane są zwykle standardowe pliki konfiguracyjne 
	nazwa standardowej powłoki jakiej używać będzie w swoich sesjach użytkownik (np. csh, tcsh, bash). 

Ogólne zasady wpisywania komend w systemie Unix:
	duże i małe litery w nazwach komend są traktowane jak różne znaki - większość komend Unix’a posiada nazwy zawierające wyłącznie małe litery ostatnio wprowadzone komendy są pamiętane w historii komend użytkownika. 
Na tak zapamiętanym zbiorze komend możemy wykonywać następujące operacje (wymieniono tylko te najważniejsze):
wyświetl listę wcześniej wykonywanych komend	history	
powtórz wykonanie ostatniej komendy	!!	
powtórz wykonanie ostatniej komendy zaczynającej się od podanego lancucha	!lancuch	
powtórz wykonanie ostatniej komendy zawierającej w sobie (w dowolnym miejscu) lancuch	!?lancuch	
wykonaj ponownie n-ta komende (komendy sa numerowane od 1)	!n	
Przyklad powtarzania komend:
nowak> history	aby powtórzyc:	
1: pwd	!pwd	
2: mkdir test	!?dir	
3: cd test	!3	
4: ls -l	!!	
nowak>		

Bazowy katalog użytkownika
Każdy użytkownik posiada swój katalog 'bazowy', w którym znajdujemy się bezpośrednio po zalogowaniu. Katalogi zakładane przez użytkownika są zwykle tworzone jako podkatalogi jego katalogu bazowego. Do katalogu bazowego możemy zawsze 'wrócić' w następujący sposób:
cd	komenda cd bez nazwy katalogu powoduje powrót do katalogu bazowego	
cd $HOME	istnieje zmienna systemowa - HOME - pamiętająca nazwę katalogu bazowego. Konstrukcja $HOME powoduje 'pobranie' tej nazwy	
cd ~username	ta komenda powoduje przejście do katalogu bazowego użytkownika username	
Konstrukcji ~username możemy również używać np. do kopiowania danych – komenda
cp ~nowak/* .
skopiuje wszystkie pliki użytkownika nowak do bieżącego katalogu (o ile mamy pozwolenie na czytanie z katalogu nowak)

Prawa dostępu
Każdy plik i katalog w systemie Unix posiada atrybuty, określające prawa dostępu do takiego obiektu. Prawa dostępu są definiowane w momencie tworzenia obiektu - według maski ustawionej przez administratora systemu. Właścicielem obiektu jest ten, kto go stworzył. Właściciel obiektu może w każdej chwili zmienić prawa dostępu do obiektu - zarówno dla siebie jak i dla innych użytkowników.
Prawa dostępu są zdefiniowane na trzech poziomach:
	dla właściciela obiektu (u) 
	dla grupy użytkowników (g) 
	dla pozostałych użytkowników (o) 
Z punktu widzenia użytkownika systemu Unix każdy obiekt posiada zawsze jakieś prawa dostępu, zdefiniowane przez właściciela obiektu. Prawa te są kombinacją następujących praw dostępu:
r	prawo do czytania obiektu	
w	prawo do wpisywania danych do obiektu. Pozwala to również na usuwanie obiektu	
x	prawo wykonania obiektu (program lub katalog)	
s	zmiana tożsamości właściciela lub grupy przy wykonaniu	
t	pozostawienie segmentu programu po wykonaniu w obszarze swap	
-	(kreska) brak uprawnienia. 	

Do zmiany praw dostępu służy komenda:
chmod komu jak prawa wzornik
gdzie:
	komu - dowolna kombinacja liter u, g i o oznaczających kolejno właściciela pliku, członków grupy do której należy właściciel pliku (z wyłączeniem właściciela obiektu) oraz pozostałych użytkowników. Dodatkowo można użyć litery a która oznacza 'wszystkich użytkowników' (a=ugo) 
	jak - jeden ze znaków +, - lub = oznaczających kolejno: 
+	dodaj wymienione w komendzie chmod prawa do już istniejących praw dostępu	
-	usuń wymienione w komendzie chmod prawa dostępu ze zbioru praw dostępu do obiektu	
=	usuń wszystkie wcześniej ustawione prawa dostępu do obiektu, po usunięciu - nadaj włącznie te prawa, które są wymienione w komendzie chmod	
	prawa - dowolna kombinacja liter r, w, x i s. Znaczenie - jak opisano to wcześniej 
	wzornik - obiekty których nazwy są zgodne z wzornikiem będą tymi obiektami, dla których zmieniamy prawa dostępu 
Przykłady:
chmod u-w *a
odbierz właścicielowi prawa zapisu i kasowania do wszystkich plików i podkatalogów z bieżącego katalogu, których nazwy kończą się literą a. 
Uwaga!!! Ta zmiana nie będzie dotyczyć obiektów których nazwa kończy się literą a ale zaczyna się od kropki.
chmod g=r .*z
odbierz użytkownikom, należącym do tej samej grupy co użytkownik wydający komendę chmod, wszystkie prawa z wyjątkiem praw do czytania dla obiektów z bieżącego katalogu, których nazwy zaczynają się od kropki a kończą literą z
chmod go-wx ~nowak/*
odbierz wszystkim użytkownikom - z wyjątkiem właściciela obiektów - prawa do zapisu i wykonywania wszystkich plików i katalogów z katalogu bazowego użytkownika nowak. Zmiana ta nie dotyczy obiektów w katalogu ~nowak, których nazwy zaczynają się od kropki
Uwagi:
	bieżąco ustawione prawa dostępu możemy wyświetlić używając komendy ls -l 
	w Unix’ie inaczej niż w MSDOS’ie zdefiniowane są programy. Programem jest plik o atrybucie x - niezależnie od tego jaką ma nazwę. Nie ma żadnych standardowych typów (rozszerzeń) nazw dla programów - atrybut x decyduje czy plik jest programem (lub skryptem) czy plikiem z danymi. 
	 jeżeli usuniemy atrybut x z katalogu, to nie będziemy w stanie przejść do tego katalogu (komenda cd) 

Nadawanie praw w postaci numerycznej:
0 brak
1 tylko wykonywanie
2 tylko zapis
3 zapis i wykonywanie
4 tylko odczyt
5 odczyt i wykonywanie
6 odczyt i zapis
7 odczyt, zapis i wykonywanie

Przykłady:
chmod ugo+r plik = chmod 444 plik
chmod go-w * = chmod 755 *
chmod go-w /usr/chriss/mid = chmod 755 /usr/chriss/mid

Wydając komendę ls -l zobaczymy np.:
-rw-r--r-- 1 root root 445591 Feb 11 11:12 vmlinuz
Pierwszy znak informuje o typie pliku:
- - zwykły plik, 
d - katalog, 
l - dowiązanie symboliczne
Następne 9 znaków (3 sekcje po trzy znaki) decyduje, kto może mieć dostęp do danego pliku lub katalogu. Pierwsze trzy znaki (czyli od drugiego do czwartego) określają prawa właściciela, następne trzy prawa grupy, trzy ostatnie - pozostałych użytkowników. 
W podanym przykładzie plik vmlinuz jest zwykłym plikiem, którego właścicielem jest root, z grupy root. Plik ma rozmiar 445591 bajtów i ostatnio był modyfikowany 11 lutego o 11:12. Właściciel może czytać i modyfikować ten plik, a członkowie tej grupy oraz inni użytkownicy mogą tylko odczytywać jego zawartość. 

Procesy
Następną ważną cechą Unix’a, nie występującą w MSDOS’ie jest to, że każdy program po uruchomieniu (zwany procesem) otrzymuje swój własny unikalny numer (tzw. PID). Dzięki temu, gdy program np. "odmówi współpracy" możemy usunąć go z pamięci "zabijając" jego proces. Do wyświetlenia aktualnie działających procesów służy polecenie ps - wyświetli ono np. coś takiego:
PID   TTY STAT TIME COMMAND
14552  a5 S    0:00 -bin/tcsh
14659  a5 S    0:00 lynx www.agh.edu.pl
14660  a6 S    0:00 -bin/tcsh
14670  a6 R    0:00 ps
Numer pierwszy z lewej to właśnie PID. Następnie jest podane urządzenie wyjściowe, jakiemu przypisany jest dany proces. Kolumna STAT przedstawi status procesu S - proces "uśpiony", R - proces w toku, D - proces w stanie głębokiego uśpienia T - proces zatrzymany. Na końcu jest nazwa programu, który został uruchomiony.
Jeżeli chcemy zakończyć działanie któregoś z programów, poprzez "zabicie" jego procesu piszemy kill numer_PID , np. kill 14659 - co spowoduje wyłączenie, usunięcie z pamięci, programu Lynx (jeśli nie należy użyć opcji -9).

Każdy uruchomiony w Unix’ie program jest traktowany jako niezależny proces. Unix pozwala uruchomić wiele procesów jednocześnie. Każdy z uruchomionych procesów posiada 3 standardowe strumienie danych:
	input - stąd wczytywane są dane do programu; domyślnie z klawiatury 
	output - na ten strumień wypisywane są wyniki i komunikaty; domyślnie na ekran terminala 
	error – strumień, na który wysyłane są komunikaty o błędach; domyślnie na ekran terminala 
Unix pozwala przedefiniować miejsce, skąd pobierane są dane wejściowe oraz miejsca gdzie wyświetlane są komunikaty za pomocą następujących konstrukcji:
proces < fname - pobieraj dane z pliku fname zamiast z klawiatury 
proces > fname - wpisuj wyniki, które normalnie byłyby wyświetlane na ekran terminala, do pliku fname 
process >> fname - dopisz ('append') wyniki, które normalnie byłyby wyświetlane na ekran terminala, do pliku fname 
process >& fname -wpisuj wyniki, normalnie kierowane na strumienie output i error do pliku o nazwie fname 
process >>& fname - dopisuj ('append') wyniki, normalnie kierowane na strumienie output i error do pliku o nazwie fname 
Przekierowanie wejścia i wyjścia. Przekierowanie wejścia służy do podania złożonych danych, które muszą być przekazane do programu. Zazwyczaj wykorzystywane jest to odczytywania danych z plików. Oto przykład:
sort < pliki_mp3
Program sort ustawi w kolejności listę plików, których nazwy  zapisane zostały w pliki_mp3.
Przekierowanie wyjścia jest częściej używane. Dzięki niemu będziemy mogli przesłać wyniki pochodzące od programu do pliku lub urządzenia. Potrzebne nam to będzie gdy zechcemy zapisać te wyniki do późniejszej analizy itp. Będzie je można oczywiście odczytać zwykłym edytorem tekstu. Oto dwa najprostsze przykłady przedstawiające działanie przekierowania wyjścia:

cat >> plik
To będzie pierwsza linia.
To będzie druga linia.
CTRL+D
# Korzystamy z programu cat, wpisujemy tekst i kończymy jego działanie wciskając CTRL+D
cat >> plik
To będzie trzecia linia.
To będzie czwarta linia.
CTRL+D
# Dopisujemy do tego pliku jeszcze dwie kolejne linie. Nasz plik wygląda teraz:
To będzie pierwsza linia.
To będzie druga linia.
To będzie trzecia linia.
To będzie czwarta linia.

Przyklady:
ls -ls a*z > pliki
zapamiętaj w pliki dane o wszystkich plikach z bieżącego katalogu posiadających nazwy zaczynające się od a i kończące się na z.
Unix pozwala również wykonywać kilka procesów tak, że ich wykonanie jest powiązane ze sobą:
proc1 ; proc2 ; ...	- wykonanie sekwencyjne: najpierw wykonany zostanie proces proc1, po jego zakończeniu uruchomiony zostanie proces proc2, itd.	
proc1 & proc2 & ...	- wykonanie równoległe: wszystkie procesy procn zostaną uruchomione jednocześnie i będą się wykonywać współbieżnie	
proc1 | proc2 | ...	- wykonanie potokowe: najpierw zostanie uruchomiony proces proc1. Wyniki, które ten proces wyświetla na ekranie zostaną przesłane do procesu proc2. Proces proc2 zostanie uruchomiony po zakończeniu procesu proc1. Dane przekazane z procesu proc1 są przesyłane do procesu proc2 tak jakby były wpisywane z klawiatury. To samo będzie się powtarzało dla pozostałych procesów uruchomionych potokowo	
wszystkie te sposoby uruchamiania procesów można łączyć ze sobą. Dodatkowo uruchamiane procesy mogą być łączone w grupy za pomocą nawiasów.
(p1 ; p2 ) & (p3 | p4 )
uruchom współbieżnie: 
wykonywane sekwencyjnie procesy p1 i p2 
równolegle proces p3, po jego zakończeniu uruchom p4 przekazując mu jako dane wejściowe dane wytworzone przez p3 

Potoki 
Potoki (pipe) służą do łączenia poleceń. Dzięki temu przyspieszymy naszą pracę oraz zwiększymy możliwości prostych poleceń. Potoki wykorzystywane są najczęściej w procesach przetwarzania danych, np. gdy chcemy wyszukać jakieś konkretne pliki bądź przeglądać logi systemowe, uruchomione procesy itd. Zasada działania potoków polega na tym, że wyście poprzedniego polecenia stanowi wejście następnego. Przykładowo polecenie: 
find /home/adam/Mp3 -name *.mp3 | sort > moje_mp3
najpierw wyszuka wszystkie pliki o rozszerzeniu .mp3 w katalogu /home/adam/Mp3, następnie je posortuje (tutaj wykorzystanie potoku), a na końcu wyjście programu sort zostanie skierowane do pliku moje_mp3, który będziemy mogli potem odczytać zwykłym edytorem.

Komunikacja pomiędzy komputerami.
Każdy komputer dołączony do sieci komputerowej posiada dwa adresy sieciowe: symboliczny i adres IP. Oba adresy są tworzone przez administratora systemu. Adres symboliczny własnego komputera możemy uzyskać za pomocą komendy
hostname
natomiast adres IP możemy znaleźć w pliku /etc/hosts - plik ten zawiera pary 'adres symboliczny – adres IP' dla komputerów, które są 'znane' naszemu komputerowi. Do komunikacji pomiędzy komputerami w sieci używane są najczęściej dwie komendy:
telnet
adres_IP_lub_symboliczny	Uruchom sesje użytkownika na zdalnym komputerze. 
Komenda ta łączy się z komputerem o podanym adresie. Jeżeli taki komputer nie istnieje (nie jest znany jego adres symboliczny lub nie ma możliwości zamiany adresu symbolicznego na IP) komenda kończy się z komunikatem o błędzie. Jeżeli uda się połączyć ze zdalnym komputerem - użytkownik zostanie poproszony o zalogowanie się - będzie musiał podać poprawną nazwę i hasło użytkownika zdefiniowanego na komputerze, do którego się dołączył. Jeżeli to zrobi - od tego momentu, siedząc przy terminalu własnego komputera, wykonuje polecenia na komputerze zdalnym.	
ftp adres_IP_lub_symboliczny	Uruchom program do transmisji plików pomiędzy komputerami. Najpierw - ftp próbuje połączyć się ze zdalnym komputerem - analogicznie jak telnet. Takie same mogą być również powody błędnego zakończenia ftp. Jeżeli uda się połączyć ze zdalnym komputerem - użytkownik musi się poprawnie zalogować. Wiele z komputerów udostępniających pamiętane na nich informacje pozwala zalogować się jako użytkownik anonymous z hasłem 'nazwa_użytkownika@adres_komputera_z_którego_się_lacze'. Po połączeniu możemy transmitować pliki pomiędzy naszym komputerem a komputerem, do którego się dołączyliśmy używając wewnętrznych komend ftp:	
	ascii
binary	przełącza tryb transmisji. W trybie ascii zawartości plików sa przesyłane 7bitowo - tryb ten służy najczęściej do przesyłania plików tekstowych. W trybie binary transmisja jest 8 bitowa	
	prompt	przełącza (jeżeli nie był włączony - to włącza, jeżeli był włączony - wyłącza) tryb pytania o każdy plik podczas transmisji wielu plików	
	status	wyświetla informacje o bieżąco ustawionych parametrach transmisji (ascii/ binary, prompt)	
	lcd katalog	zmienia bieżący katalog na naszym komputerze	
	cd katalog	zmienia bieżący katalog na komputerze, do którego się dołączyliśmy	
	get nazwa_pliku [ nazwa_lokalna ]	Skopiuj jeden plik o nazwie nazwa_pliku z komputera zdalnego na nasz komputer. Jeżeli wystąpi parametr nazwa_lokalna plik zostanie zapisany pod tą nazwą. Jeżeli nie wystąpi - pod nazwą jaką miał na komputerze zdalnym	
	put nazwa_pliku [ nazwa_zdalna ]	operacja odwrotna do get - skopiuj plik z naszego komputera na komputer zdalny ewentualnie zmieniając mu nazwę na nazwe_zdalna.	
	mget wzornik	Skopiuj wszystkie pliki, których nazwy są zgodne z wzornikiem ze zdalnego komputera na nasz komputer. Jeżeli prompt jest włączony - nazwa każdego pliku który ma być przesyłany będzie wyświetlana a użytkownik będzie pytany czy ten plik ma zostać przetransmitowany.	
	mput wzornik	komenda odwrotna do mget - kopiuje wszystkie pliki o nazwach zgodnych z wzornikiem z naszego komputera na komputer zdalny	
	help	wyświetl opis komend ftp (opisałem tylko najważniejsze z nich, jest ich więcej)	
	quit	zakończ pracę z ftp	

Powłoka (shell)
Interpreter poleceń powłoki jest to interfejs pomiędzy użytkownikiem, a jądrem systemu. Dzięki niemu, jeśli wydajemy za pomocą klawiatury polecenie powłoka zamienia dane na język zrozumiały przez jądro systemu, który wie, że ma np. uruchomić bądź zatrzymać program. Jedną z takich powłok jest BASH (Bourne Again SHell) stworzony przez Briana Foxa i Cheta Rameya i udostępniony na zasadach licencji GNU. Jest on jedną z lepszych powłok i w wielu systemach linuxowych wykorzystywany jako domyślna. Jest w pełni kompatybilny z powłoką sh (Bourne shell)oraz zawiera wiele ciekawych rozwiązań przejętych od powłok Korn i C (ksh i csh). 

Dokańczanie poleceń 
Dokańczanie poleceń jest bardzo wygodną i przyspieszającą pracę opcją powłoki Bash. Dzięki niej nie musimy już wpisywać pełnej nazwy programu (ścieżki do katalogu, pliku itp.) lub znać jego dokładnej nazwy. Wystarczy, że wpiszemy jego pierwszą literkę i wciśniemy klawisz TAB. Wtedy system spróbuje wyszukać wszystkie dostępne programy, katalogi, pliki, których pierwsza litera nazwy odpowiada wpisanej przez nas. Jeśli więcej programów zaczyna się na tę sam znak powłoka wylistuje nam ich nazwy i poinformuje nas za pomocą sygnału z głośniczka, że należy podać dodatkowe informacje. Dzieje się to zazwyczaj, gdy podamy tylko jedną, bądź dwie pierwsze litery, ale już np. wpisanie mut i wciśnięcie TAB, najprawdopodobniej spowoduje poprawne dokończenie nazwy programu na mutt! Jeśli wpiszemy nazwę z błędem np. mot, które nie ma odniesienia w rzeczywistości i naciśniemy TAB interpreter poinformuje nas o błędzie wydając z głośniczka charakterystyczny dźwięk.

Historia poleceń 
Bash zapamiętuje wydane przez użytkownika polecenia. Dzięki temu za pomocą klawiszy kursora (góra - dół), możemy szybko przywołać polecenie, które już wcześniej wydaliśmy. Jest to szczególnie przydatne gdy w bardzo skomplikowanym poleceniu zmieniamy np. tylko nazwę pliku, na którym ma zostać wykonane, a cała składnia polecenia nie ulega modyfikacjom. Lista wydanych przez nas poleceń jest ładowana z pliku historii, który domyślnie nosi nazwę .bash_history. Parametry nazwy pliku historii oraz ilości przechowywanych w nim ostatnio wydanych poleceń ustalają zmienne HISTFILE oraz HISTSIZE, ale o zmiennych powłoki Bash trochę później. W tym miejscu warto zaznaczyć, że w wielu dystrybucjach Linuxa zmienna HISTSIZE ma wartość 1000 co powoduje, że w pliku .bash_history zapisywanych jest 1000 wydanych ostatnio poleceń. Aby obejrzeć na ekranie dostępne z historii polecenia wystarczy użyć polecenia: 
history liczba_poleceń
Tak więc, jeśli chcemy obejrzeć 10 ostatnio wydanych poleceń wpiszmy history 10.

Zmienne środowiskowe
Zmienne środowiskowe służą do określania konfiguracji powłoki i są one dostępne dla wszystkich procesów potomnych. Wszystkie dostępne zmienne możemy wylistować poleceniem: 
printenv | more
Jeśli chcemy wyeksportować jakąś zmienną wydajemy polecenie według schematu:
export ZMIENNA=wartość.zmiennej
A oto i najbardziej użyteczne zmienne powłoki:
HISTFILE - określa nazwę pliku historii, [patrz: historia poleceń]
HISTSIZE - rozmiar bufora historii poleceń
EDITOR - określa domyślny edytor,
PATH - ścieżka przeszukiwania
PS1 - znak zachęty pierwszego poziomu, [patrz: znak zachęty]
PS2 - znak zachęty drugiego poziomu, [patrz: znak zachęty]
PWD - określa nazwę bieżącego katalogu,
HOSTNAME - nazwa komputera,
MAIL - ścieżka dostępu do katalogu, gdzie przychodzą dla nas listy

Dla przykładu, żeby ustawić domyślny edytor z vi na mcedit wydaj polecenie:
export EDITOR=mcedit
Wszystkie zmienne tracą ważność po wylogowaniu się! Aby były dostępne za każdym razem musimy je dodać do plików konfiguracyjnych powłoki.

Ścieżki przeszukiwania
Ścieżki przeszukiwania są określone zmienną PATH i służą do wyszukania w określonej lokalizacji programu bądź polecenia. Dzięki tym ścieżkom zamiast wpisywać /usr/bin/mutt by uruchomić program, wystarczy podać pine i klient pocztowy zostanie uruchomiony. Oczywiście w zmiennej PATH musi być podana ścieżka /usr/bin. Aby zobaczyć w jakich lokalizacjach Twój system szuka programów wydaj polecenie printenv i poszukaj zmiennej PATH. Poszczególne ścieżki oddzielone są dwukropkiem.

Zarządzanie zadaniami 
Powłoka Bash oferuje możliwość uruchamiania programów w tle. Jest to przydatne wtedy gdy mamy do dyspozycji tylko jedną konsolę i wtedy program, którego wykonanie musi chwilę potrwać (np. polecenie find) zajmuję nam nasze "stanowisko pracy". Przykładowo wydajmy polecenie:
find /usr -name kde* > pliki_z_kde &
Program find uruchomi się w tle, a my na ekranie otrzymamy numer przypisanego mu procesu. Find wyszuka wszystkie pliki z /usr, których nazwa zaczyna się kde i zapisze je do pliku pliki_z_kde. 
Można też wysłać działający program w tło używając kombinacji klawiszy CTRL+Z, która spowoduje, że program zostanie zatrzymany, a następnie uruchomimy go w tle wpisując bg Wydajemy polecenie:
find /usr -name kde* > pliki_z_kde
i wciskamy CTRL+Z. Następnie wpisujemy bg. Efekt ten sam. 
Aby ponownie przywrócić program na pierwszy plan skorzystajmy z polecenia fg %[numer zadania]. Ponieważ dowolnie możemy korzystać z bg i fg system musi wiedzieć, na którym procesie ma operować. Jeśli pamiętamy kolejność uruchamiania programów, możemy z głowy wpisać np. fg %2, lub jeśli nie pamiętamy, korzystamy z polecenia jobs. Zostanie wyświetlona lista wszystkich działających bądź zatrzymanych procesów wraz z ich numerem, którego potrzebowaliśmy.

Znak zachęty 
Znak zachęty to tekst, który informuje użytkownika, że system czeka na wprowadzenie przez niego danych. W powłoce bash istnieją dwa poziomy znaku zachęty - pierwszy, który otrzymamy zaraz po zalogowaniu informuje nas, że system czeka na wprowadzenie polecenia. Drugi poziom jest wyświetlany gdy interpreter potrzebuje dodatkowych danych, które musimy wprowadzić. Jest on przechowywany w zmiennej PS2 [patrz: zmienne powłoki] i standardowo ma postać ">". Można go zmienić, ale takie rozwiązanie jest wygodne, więc zajmiemy się tylko konfiguracją znaku zachęty pierwszego poziomu, który opisany jest w zmiennej PS1. Jeśli wydamy polecenie:
export PS1="podaj polecenie: "
wtedy nasz znak zachęty będzie wyglądał: "podaj polecenie: ". Nie jest to jednak rozwiązanie ani wygodne, ani estetyczne. Lepiej utworzyć znak zachęty przedstawiający dynamicznie zmieniające się dane jak na przykład czas, bieżący katalog, numer aktualnego polecenia itp. 
Zmienna standardowa PS1 może mieć postać: PS1="[\u@\h \W]\\$ ". Przyjrzyjmy się bliżej temu co zawarte jest w cudzysłowiu. Pierwszy znak [ - jest znakiem statycznym, dzięki niemu dane przedstawione są w estetycznej formie, kod \u wyświetla identyfikator użytkownika, @ to następny znak statyczny, \h pokazuje nazwę komputera, a \W wyświetla podstawową nazwę katalogu. Następnie znak ] zamyka nawias, a po nim następuje kod \$, który wyświetla znak # gdy jesteśmy zalogowani jako root, lub $ gdy jako zwykły użytkownik. Spacje są spacjami wyświetlanymi na ekranie. 
A teraz jak wygląda zapis PS1="[\u@\h \W]\\$ " po przetworzeniu: [root@soho /root]# lub [adam@soho /adam]$. 
Oto lista kodów specjalnych, które mogą zostać użyte do konfiguracji znaku zachęty:
\! - wyświetla numer polecenia historii,
\# - wyświetla numer aktualnego polecenia,
\$ - wyświetla # dla root`a i $ dla zwykłego użytkownika
\\ - wyświetla znak \
\d - wyświetla datę
\t - wyświetla czas
\h - wyświetla nazwę komputera
\n - przechodzi do nowego wiersza
\nnn - wyświetla znak, który odpowiada wartości ósemkowej nnn
\s - wyświetla nazwę powłoki
\u - wyświetla login użytkownika
\W - wyświetla podstawową nazwę bieżącego katalogu
\w - wyświetla nazwę bieżącego katalogu

Aliasy 
Aliasy - konstrukcje postaci: 
alias nazwa 'wartość'
występujące w plikach .cshrc i .login. Od momentu zdefiniowania aliasu każde wpisanie przez użytkownika tekstu nazwa będzie traktowane tak jakby użytkownik wpisał tekst wartość. Pozwala to definiować 'nowe' komendy w Unix’ie. wartość ujmujemy w apostrofy jeżeli wewnątrz tekstu tworzącego wartość występują spacje.
Aliasy przyspieszają naszą pracę z powłoką. Jeśli np. codziennie uaktualniamy naszą stronę główną, której plik startowy to /home/adam/linux/index.html to zamiast ciągle wpisywać vi /home/adam/linux/index.html możemy utworzyć do niego alias po wywołaniu którego otworzony zostanie do edycji ten właśnie plik. Nasz alias będzie nosił nazwę linux i właśnie to słowo będziemy musieli wpisać, aby wywołać do edycji plik index.html.
alias linux='vi /home/adam/linux/index.html'
Warto pamiętać, że utworzone z linii poleceń aliasy stają się nieaktualne po wylogowaniu się z powłoki. Aby były dostępne po każdym zalogowaniu się, należy je dopisać do jednego z plików konfiguracyjnych.

Jeśli dany alias nie jest nam już potrzebny możemy usunąć go korzystając z polecenia unalias:
unalias linux 
Aby wyświetlić listę wszystkich dostępnych aliasów wystarczy wydać polecenie alias, bez jakichkolwiek parametrów. 
Zbiór aliasów może wyglądać mniej więcej tak:
alias cd..='cd ..'
# Gdybym przez pomyłkę wpisał cd.. (tak jest to rozwiązane w DOS`ie),
alias cp='cp -i'
alias mv='mv -i'
alias rm='rm -i'
# Gdy wydaje jedno z powyższych poleceń, zostaje ono zamienione na polecenie z argumentem -i (interactive),
# dzięki, któremu polecenie pyta się czy nadpisywać istniejące pliki, bądź je usuwać. Służy to tylko i wyłącznie
# poprawieniu bezpieczeństwa.

alias rd='rmdir'
alias md='mkdir'
# Te aliasy zostały stworzone dla ludzi, którzy jeszcze niedawno używali systemu DOS i są przyzwyczajeni
# do poleceń tamtej powłoki.

alias ls='ls --color=auto -F'
alias ll='ls -l'
alias lsd='ls -d */'
alias la='ls -A -k'
# W tym wypadku aliasy zostały stworzone, aby zbędne stało się operowanie na parametrach polecenia ls.
# I tak wydanie polecenia ls spowoduje, że dane zostaną wyświetlone w kolorkach,
# oraz dodany zostanie do każdego pliku znak oznaczający jego typ.
# Po wpisaniu ll zostanie wywołane polecenie ls z parametrem l,  
# który wyświetli nam listę plików w formacie zawierającym o wiele
# więcej informacji. 

alias df='df -h -x supermount'
alias du='du -h'
# Aliasy, powodujące, że po wydaniu poleceń df i du, programy te będą wykonywane z odpowiednimi parametrami.

Polecenia unixowe:

cd (change directory)
Polecenie cd służy do zmiany bieżącego katalogu w systemie plikowym. Przy jego pomocy można przenieść się bezpośrednio do katalogu wskazanego jako argument. Na przykład, aby przejść do katalogu /usr/bin należy napisać:
cd /usr/bin 
cd ..  – przejście do katalogu nadrzędnego (poziom wyżej, ../.. – 2 poziomy wyżej itd.)
cd / - przejście do katalogu głównego
cd  lub cd ~  - przejście do katalogu bazowego (domowego – wskazywanego w zm. środ. HOME)
cd - -przejście do katalogu, w którym się ostatnio znajdowaliśmy
zamiast nazwy konkretnego katalogu można podać wzornik, o ile wyznacza on jednoznacznie katalog, np.:
cd k*
Jeżeli nazwa (lub wzornik) występująca w komendzie cd zaczyna się od / (slash) - Unix szuka katalogu począwszy od korzenia. W przeciwnym wypadku - szuka podkatalogu bieżącego katalogu. 

Wyświetlanie zawartości katalogów	
ls	ls [-abcdfiklmnopqrtuxABCFGLQRSX1] [katalog][plik]	
-a	(all) listuje również pliki ukryte zaczynające się znakiem "."	
-b	wyświetla znaki niedrukowalne jako liczby ósemkowe	
-c	sortuje listę zgodnie z datą zmiany stanu	
-d	wyświetla nazwy katalogów zamiast ich zawartości	
-f	sortuje listę według kolejności zapisu na nośnik	
-i	wyświetla numer i-węzła dla każdego pliku	
-k	podaje wielkość pliku w kilobajtach	
-l	(long) wyświetla również typ, prawa, właściciela, grupę, datę dokonania ostatniej zmiany itd.	
-m	wyświetla nazwy plików poziomo, pliki oddzielone są przecinkami	
-n	wyświetla ID użytkownika i grupy zamiast nazw	
-p	dołącza "/" do nazwy katalogów	
-r	(reverse) listuje w odwrotnej kolejności 	
-t	sortuje według daty ostatniej modyfikacji	
-u	sortuje według daty ostatniego dostępu do pliku	
-x	listuje w kolumnach posortowanych poziomo	
-A	listuje wszystkie pliki (ukryte również) z wyjątkiem "." i ".."	
-B	(backup) ignoruje pliki z końcówką "~"	
-C	wylistuje w kolumnach posortowanych pionowo (opcja domyślna)	
-F	dołącza do nazwy pliku symbole typu (* po nazwach programów, / po nazwach katalogów)	
-G	blokuje wyświetlanie grupy przy długim formacie wyjściowym	
-L	listuje zawartość katalogu, ale zamiast dowiązań pokazywane są pliki lub katalogi, na które wskazują te dowiązania	
-Q	listuje nazwę pliku w cudzysłowie	
-R	(recursive) rekursywnie wyświetla zawartość wszystkich podkatalogów	
-S	(size) sortuje według rozmiaru 	
-X	sortuje alfabetycznie według nazw rozszerzenia	
-1 	(jeden) wyświetla jedną szpaltę	
--color	kolorowanie wyświetlonej listy	

Tworzenie katalogu	
mkdir	mkdir [-m tryb] katalog [inny_katalog ]	
-m tryb	tworzy katalog z prawami tryb	
-p	umożliwia budowanie hierarchii katalogów	
Polecenie mkdir pozwala na utworzenie jednego lub więcej katalogów. Jeżeli chcemy utworzyć jeden katalog napiszemy:
mkdir katalog
Jeśli chcemy stworzyć kilka katalogów można napisać: 
mkdir katalog katalog2 katalog3

Usuwanie pustych katalogów	
rmdir	rmdir [-p] katalog [inny_katalog]	
-p	rekursywnie usuwa podkatalogi	

Wyświetlanie ilości zajętego miejsca na dysku	
du	du [-abcklsxLS][katalog]	
-a	(all) pokazuje ilość miejsca zajmowanego przez wszystkie pliki	
-b	pokazuje w bajtach ilość zajmowanego miejsca	
-c	pokazuje sumaryczną ilość zajmowanego miejsca	
-k	podaje ilość zajmowanego miejsca w kilobajtach	
-l	liczy również rozmiar twardych dowiązań	
-s	podaje tylko sumę dla każdego katalogu	
-x	ignoruje katalogi z innych systemów plików	
-L	dowiązania symboliczne są zastępowane ilością miejsca, jaką zajmuje wskazywany katalog	
-S	pokazuje ilość miejsca zajmowanego przez każdy katalog bez podkatalogów 	

Wyświetlenie nazwy ścieżki katalogu bieżącego (tego w którym się obecnie znajdujemy) (print working directory).
Wskazywana nazwa katalogu jest zawsze rzeczywista - nie jest linkiem symbolicznym.	
pwd	pwd	

Kopiowanie plików	
cp	cp [-abdfilprsuvxPRS] źródło cel	
-a	odpowiada -dpR	
-b	(backup) tworzy kopie zapasowe plików przed ich zniszczeniem (nadpisem)	
-d	(no- dereferece) zachowuje dowiązania sztywne i symboliczne podczas kopiowania	
-f	(force) pliki w katalogu docelowym posiadające analogiczne nawy będą nad pisywane bez zapytania	
-i	(interactive) oczekuje potwierdzenia przed nadpisem	
-l	(link) tworzy twarde dowiązania zamiast kopii 	
-P	(path) pliki źródłowe będą kopiowane do celu wraz z podkatalogami	
-p	(preserve) przypisuje plikowi docelowemu atrybuty pliku źródłowego	
-r	kopiuje podkatalogi wraz z plikami	
-s	(symbolic link) tworzy dowiązania symboliczne zamiast kopii	
-u	(update) nadpisuje pliki docelowe tylko przez nowsze pliki źródłowe	
-v	(verbose) wyświetla nazwę każdego pliku podczas kopiowania	
-x	(one- file- system) pomija podkatalogi z innych systemów plików	
-R	(recursive) kopiowanie rekursywne	
-S rozszerzenie	(suffix) zmienia rozszerzenie kopii starych plików na nowe 	

Źródło może stanowić wzornik, konkretny plik lub katalog. Cel może stanowić plik lub katalog. 
Uwaga!!! Komenda cp bez ostrzeżenia niszczy - o ile takie pliki już istnieją i nie użyto opcji “-i” - zawartość plików, do których kopiowana jest informacja!!!

Przeniesienie lub zmiana nazwy plików/ katalogów	
mv	mv [-bfiuvS] źródło cel	
-b	tworzy kopie bezpieczeństwa przed usunięciem plików/ katalogów	
-f	(force) pliki będą niszczone bez pytania o potwierdzenie, nawet gdy byly zabezpieczone przed zapisem	
-i	(interactive) oczekuje potwierdzenia przed nadpisaniem	
-u	(update) nadpisuje pliki docelowe tylko przez nowsze pliki źródłowe	
-v	(verbose) wyświetla dokładne komunikaty	
-S rozszerzenie	(suffix) patrz polecenie "cp"	

Wyświetlanie dowolnych plików na standartowym wyjściu. Często dane te są przekazywane do programów lub plików 	
cat	cat [ -benstvAET] plik [pliki]	
-b	numeruje wszystkie wiersze 	
-e	odpowiada –vE	
-n	wszystkie wiersze są numerowane	
-s	wszystkie wiersze puste występujące po kolei zbierane są w jeden wiersz pusty 	
-t	odpowiada –vT	
-v	wyświetlanie wszystkich znaków sterujących oprócz TAB i LF	
-A	odpowiada –vET	
-E	dołącza znak "$" na każdym końcu wiersza (EOL)	
-T	tabulatory wyświetlane są jako ^|	

Przykłady:
W celu złączenia kilku plików w jeden należy się posłużyć operatorem skierowania >> . Jeżeli chcemy połączyć plik1.txt i plik2.txt w trzeci plik o nazwie plik3.txt napiszemy:
cat plik1.txt plik2.txt >> plik3.txt
lub
cat plik* >> plik3.txt
Jeśli chcemy połączyć treść jednego pliku i drugiego bez tworzenia dodatkowego trzeciego pliku, należy najpierw zdecydować, czy chcemy zawartość pliku pierwszego dołączyć do drugiego, czy też odwrotnie. Następnie używając operatora skierowania >> możemy napisać:
cat plik1.txt >> plik2.txt

Usuwanie plików. Jeżeli brak jest odpowiednich praw do zapisu, wyświetlanie jest zapytanie o potwierdzenie	
rm	rm [ -firvR] [-] plik	
-f	(force) brak pytań przy każdym usuwanym pliku	
-i	(interactive) oczekuje na potwierdzenie	
-r	(recursive) podkatalogi i pliki również zostaną usunięte	
-v	(verbose) wypisuje nazwę pliku przed usunięciem	
-	następujące argumenty nie są opcjami; można usuwać pliki zaczynające się znakiem "-"	

Tworzenie dowiązań do pliku	
ln	ln [ -s]  plik dowiazanie	
	(brak opcji) tworzenie dowiązania sztywnego	
-s	tworzenie dowiązania symbolicznego	
Przykład:
ln plik1 plik2
Jak sprawdzimy zawartość tych plików zauważymy, że plik2 ma dokładnie taką samą zawartość jak plik1 . Jeśli skasujemy plik1, plik2 będzie nadal dostępny. Jeśli w pierwszym pliku wprowadzimy jakieś zmiany, na przykład dodamy nowy tekst, to pojawą się one również w drugim i odwrotnie.
Można również stworzyć dowiązanie symbolicze, na przykład:
ln -s plik1 plik2
Dowiązania symboliczne różnią się tym od stałych że zawierają jedynie ścieżkę dostępu do innego pliku. W przypadku skasowania wskazanego pliku odnośnik nam się do niczego nie przyda. Dowiązania symboliczne można, na przykład używać w odniesieniu do katalogów:
ln -s /usr/local/games gry
Teraz zamiast wpisywać długą ścieżkę możemy po prostu napisać:
cd gry

Zmiana hasła użytkownika	
Passwd	passwd [identyfikator_użytkownika]	
identyfikator_ użytkownika	dostępny tylko dla administratora (root), bez podania identyfikatora można zmienić tylko własne hasło	

Zmiana właściciela pliku, a opcjonalnie także grupy.	
chown	chown [-Rcfv] [właściciel] [:.][grupa] plik	
-R	(recursive) wraz z podkatalogami	
-c	(changes) będą wyświetlone nazwy plików, których właściciel się zmienił	
-f	(force) brak meldunków o błędach	
-v	(verbose) wyświetla dokładny opis każdej zmiany	

chgrp grupa plik – zmiana grupy mającej dostęp do pliku

Zmiana praw dostępu do plików lub katalogów.	
chmod	chmod [-Rcfv] tryb plik	
-c	(changes) będą wyświetlone tylko te pliki, których prawa dostępu zostały rzeczywiście zmienione 	
-f	(force) brak meldunków o błędach	
-v	(verbose) wyświetla dokładny opis każdej zmiany	
-R	(recursive) wraz z podkatalogami 	

Wyszukuje w plikach których nazwy są zgodne z wzorcem wszystkie linie w których występuje tekst. Wyszukane linie są przesyłane na standardowe wyjście 	
grep 	grep [ opcje ] tekst wzorzec	
-v 	wyświetlane są linie które nie zawieraja tekstu 	
-c 	wyświetla tylko ilość wyszukanych linii 	
-l 	wyświetla tylko nazwy plików w których znaleziono tekst 	
-n 	wyświetla numery linii przed wyświetlanymi liniami 	
Przykłady:
Wyświetl informacje o bieżąco zalogowanych użytkownikach, którzy w informacji o sobie maja słowo 'programista' 
finger | grep programista

Polecenie screen pozwala na używanie kilku wirtualnych ekranów i wykonywanie kilku niezależnych programów jednocześnie. Początkujący użytkownicy powinni być bardzo ostrożni w korzystaniu z tego polecenia, gdyż nieumiejętna obsługa tego programu może spowodować sporo zamieszania oraz niepotrzebne obciążanie serwera. Aby uruchomić ten program wpisujemy screen. Aby uruchomić kolejny wirtualny ekran wciskamy kombinację klawiszy [Ctrl]+[A], [C]. Klawiszami [Ctrl]+[A], [N] oraz [Ctrl]+[A], [P] poruszamy się pomiędzy ekranami odpowiednio następny i poprzedni. Aby zamknąć wirtualny ekran (i działający w nim program) używamy klawiszy [Ctrl]+[A], [K]. Dzięki programowi screen możemy zostawić sobie dowolne procesy i wylogować się, a przy kolejnym logowaniu możemy dalej korzystać z uruchomionych wcześniej programów. Aby zamknąć screen'a i zachować uruchomione programy piszemy screen -d. Zamkniętego screen'a "otwieramy" poleceniem screen -r. 

df - wyświetla informacje o fizycznej ilości miejsca na dysku. Podawana jest nazwa urządzenia (/dev/...), fizyczna ilość miejsca na urządzeniu, ilość użytych kilobajtów, ilość pozostałego miejsca (w kilobajtach), procentowa ilość wolnego miejsca oraz nazwę katalogu, do której 'dołączone' jest urządzenie
Przykład:
df
Filesystem	1024-blocks	Used	Available	Capacity	Mounted on	
/dev/hda3	201176	126269	64172	66%	/	
/dev/hda1	235592	231464	4128	98%	/dos_c	
/dev/hda5	235592	164284	71308	70%	/dos_d	
Jak znaleźć informacje o ilości wolnego miejsca na dysku, na którym zapisywane są nasze pliki?
Najpierw musimy znaleźć informacje o tym, gdzie zapisywany jest nasz katalog bazowy. Możemy to zrobić za pomocą wykonywanych po sobie komend 
cd
pwd
Pierwsza z nich ,przeniesie' nas do naszej katalogu bazowego, druga wyświetli nazwę tego katalogu. załóżmy, że komenda pwd wyświetliła nazwę /home/nowak jako nazwę naszego katalogu bazowego.
Następnie wykonujemy komendę pwd i szukamy nazwy katalogu, której początek jest najbardziej zgodny z nazwą katalogu zwrócona przez pwd 
df
Filesystem	1024-blocks	Used	Available	Capacity	Mounted on	
/dev/hda3	201176	126269	64172	66%	/	
/dev/hda1	235592	231464	4128	98%	/home	
/dev/hda5	235592	164284	71308	70%	/usr/local	
w powyższym przykładzie widzimy, ze nasz katalog bazowy znajduje się na dysku /dev/hda1, na którym pozostało około 4.1 MB wolnego miejsca

man nazwa_komendy - wyświetla pełny opis komendy o podanej nazwie dzieląc ten opis na strony (ekrany monitora). Podczas wyświetlania takiego opisu działają następujące klawisze kontrolne:
spacja	wyświetl następny ekran (stronę)	
Enter	wyświetl następną linie	
q	przerwij wyświetlanie opisu komendy	
Jeżeli nie pamiętamy nazwy komendy możemy za pomocą 
man -k slowo_kluczowe
spowodować wyświetlenie nazw wszystkich komend, które w nagłówkach swych opisów posiadają podane przez nas słowo kluczowe

Wyświetlanie danych o innych użytkownikach:
Zanim spróbujemy skomunikować się z jakimś użytkownikiem powinniśmy sprawdzić czy jest on bieżąco zalogowany - możemy wtedy nie tylko wysłać mu list lecz również 'porozmawiać' z nim poprzez sieć.
Komenda 
w
wyświetla informacje o użytkownikach którzy pracują bieżąco na naszym komputerze
w
2:55pm up 3 min, 2 users, load average: 0.02, 0.05, 0.01	
User	tty	from	login@	Idle	JCPU	PCPU	what	
root	tty2		2:53pm				w	
fidi	tty1		2:52pm		2		-tcsh	
dodatkowo otrzymujemy informacje o tym kiedy zalogowali się poszczególni użytkownicy ('login@'), z jakiego komputera ('from' - w tym przypadku nie było użytkowników zalogowanych spoza naszego komputera) oraz jaką komendę wykonali ostatnio ('what')
Pełniejsze dane o użytkownikach otrzymamy używając komendy
finger [ nazwa_użytkownika ]
jeżeli nie podamy nazwy użytkownika otrzymamy skrótową informację o bieżąco zalogowanych użytkownikach:
Login	Name	Tty	Idle	Login Time	Office	Phone	
arcio	Arek Luksarek - r	4	1	Nov 8 19:41			
t_user	Uzytkownik 'testowy'	3	1	Nov 8 19:41	Comp	229622	
fidi	'Fider' Letko	1		Nov 8 19:40			
natomiast podanie nazwy użytkownika spowoduje wyświetlenie 'pełnej' informacji o użytkowniku:
finger arcio
Login: arcio Name: Arek Luksarek - rowerzysta
Directory: /home/arcio Shell: /bin/tcsh
Last login Tue Nov 7 19:05 (MET) on tty1
No mail.
No Plan.	
można również wyświetlać dane o użytkowniku z innego komputera
finger user@adres_sieciowy_komputera
lub wyświetlić informacje o wszystkich użytkownikach zalogowanych aktualnie na 'innym' komputerze:
finger @adres_sieciowy_komputera

Wysyłanie komunikatów do innych użytkowników:
aby wysłać komunikat do aktualnie zalogowanego użytkownika możemy użyć komendy
write nazwa_użytkownika [nazwa_terminala]
nazwa_użytkownika służy do wskazania do kogo ma być wysłany komunikat. Jeżeli użytkownik jest zalogowany na kilku terminalach możemy jawnie wskazać, na który terminal ma być przesłany komunikat wpisując nazwa_terminala jako ostatni parametr komendy write.
Po wpisaniu komendy write użytkownik wysyłający komunikat wpisuje w kolejnych liniach tekst, który zostanie przesłany. Tekst może być wieloliniowy - przechodzimy do nowej linii naciskając klawisz Enter. Kończymy wpisywanie naciskając Ctrl-D jako pierwszy znak nowej linii.
Użytkownik, do którego wysyłamy komunikat zobaczy na swoim ekranie wiadomość postaci:
Message from root@barylkaPC on tty at 14:56 ...
Koniec pracy - zamykamy!!!
Twoj PC.
EOF	

Interaktywna komunikacja z innymi użytkownikami:
aby 'porozmawiac' z innym użytkownikiem użyjemy komendy
talk user[@adres_komputera] [nazwa_terminala]
komenda ta pozwala na 'rozmowę' z użytkownikiem, który jest bieżąco zalogowany. Podanie po nazwie użytkownika adresu_komputera umozliwi 'rozmowę' z użytkownikiem zalogowanym na innym niż nasz komputerze.
Nawiązanie połączenia pomiędzy dwoma użytkownikami wygląda wtedy następująco:
	załóżmy, że użytkownik nowak zalogowany na komputerze alfa chce porozmawiać z użytkownikiem kowalski pracującym na komputerze beta 
	nowak wysyła komunikat 
talk kowalski@beta
	na ekranie komputera kowalskiego pojawia się komunikat: 
Message from TalkDaemon@beta
talk: connection requested by nowak@alfa
talk: respond with talk nowak@alfa	
	kowalski wykonuje komendę 
talk nowak@alfa
połączenie zostaje nawiązane. Ekrany komputerów nowaka i kowalskiego zostają podzielone na połowy - na jednej z nich pojawiają się komunikaty wysyłane, na drugiej odbierane - połaczenie zostało nawiązane.
Aby zakończyć połączenie jeden z użytkowników naciska Ctrl-C - to przerywa połączenie.

Wysyłanie listów
Wymienione wcześniej metody komunikacji pomiędzy użytkownikami wymagają żeby obaj respondenci byli bieżąco zalogowani. To nie zawsze jest możliwe. Aby skomunikować się z użytkownikiem, który nie jest zalogowany - w najprostszym przypadku - używamy komendy mail
mail [ użytkownik[@adres_komputera]]
jeżeli nie podamy nazwy użytkownika - mail sprawdzi czy są do nas jakieś listy. Jeżeli nie ma żadnych listów po wypisaniu komunikatu 'no mail messages' mail zakończy działanie.
Jeżeli są jakieś listy do nas - mail wyświetli naglówki tych listów:
Mail version 5.5 6/1/90. Type ? for help.
"/var/spool/mail/root": 2 messages
> 1 root Thu Sep 15 02:23 132/4322 "Register with the Lin"
2 vol@mhd1 Thu Sep 15 02:53 65/2683 "Welcome to Linux!"
&	
jesteśmy teraz w trybie wykonywania komend maila. Najczęściej używane komendy to:
num	wyświetl list numer num	
d num	usuń list numer num	
u num	przywróć list numer num. Do momentu zakończenia pracy z mailem wszystkie usunięte listy mogą być odzyskane - komenda u	
s num fname	dopisz ('append') list numer num do pliku o nazwie fname	
R num	wyślij odpowiedź na list numer num - tylko do nadawcy tego listu	
r num	wyślij odpowiedź na list o numerze num do wszystkich, którzy go otrzymali	
m user [@adres_komp]	zacznij tworzyć list który zostanie wysłany do użytkownika user	
h	ponownie wyświetl naglówki listów	
q	zakończ prace z mailem	
jako num możemy użyć pojedynczego numeru (komenda dotyczy wtedy pojedynczego listu), dwóch numerów oddzielonych myślnikiem (komenda dotyczy wszystkich listów o numerach od - do) lub * (gwiazdki) - w tym ostatnim przypadku komenda dotyczy wszystkich listów.
Jeżeli zaczniemy wysyłać list - podając nazwę adresata - będziemy proszeni o wpisanie:
	cc - pole do którego wpisujemy nazwy użytkowników (z ewentualnymi adresami komputerów) którzy powinni otrzymać kopie naszego listu. Komenda r wysyła odpowiedź do nadawcy listu oraz wszystkich użytkowników wymienionych w polu cc 
	następnie wpisujemy treść listu. Treść może być dowolnie długa - kończymy wpisywanie naciskając Ctrl - D lub wpisując ”.” (kropkę) na początku pustej linii (list zostaje wysłany). 
 Użytkownicy Unixa dość szybko używają bardziej 'wygodnych' programów - elm i pine. 	

Inne polecenia:
find
Polecenie find służy do wyszukiwania plików. Jeżeli chcemy znaleźć program spell w katalogu /usr/bin wystarczy napisać:
find [skąd zacząć] -name [nazwa] -print
a więc
find /usr/bin -name spell -print 
Można użyć go do znalezienia plików poprzez datę, można również wprowadzić przedział dat. Jeżeli chcemy znaleźć wszystkie programy w katalogu /usr/bin , które nie były wykorzystane przez ostatnie 100 dni można użyć polecenia:
find /usr/bin -type f -atime +100 -print
Aby znaleźć pliki, które zostały utworzone lub zmodyfikowane w ciągu ostatniego dnia można napisać:
find /usr/bin -type f -mtime -1 -print
Polecenie find akceptuje również nazwy plików w formie maski:
find /usr -name *.ps -print
Polecenie find ma przydatną opcje -xdev , która pozwala na ograniczenie poszukiwań do bieżącej partycji (partycja Linuxa). Bez użycia opcji -xdev polecenie find obejmuje swym zakresem wszystkie partycje (np. DOS-u) lub zamontowane w systemie CD-ROM-y.
find . -name "plik*" -exec lpr {}”;” szuka plików rozpoczynających się nazwą “plik” w bieżącym katalogu i od razu je drukuje ; - koniec polecenia shella

more plik
wyświetla zawartość pliku, strona (ekran) po stronie. W czasie wyświetlania działają następujące klawisze:
space	nastepna strona	
Enter	nastepna linia	
q	koniec wyświetlania	

less
Polecenie less służy do tego samego co more lecz jest bardziej rozbudowane. Jeżeli chcemy przejrzeć jakiś plik napiszemy: 
less plik
Do przeglądania plików skompresowanych można użyć polecenia zless .

head
Polecenie head służy do wyświetlania początkowych linii pliku. Podobnie jak w przypadku polecenia cat, head może być używane do obsługi plików binarnych. Jeżeli chcemy wyświetlić pierwszych 5 linii pliku messages napiszemy:
head -5 /var/log/messages

tail
Polecenie tail służy do wyświetlania końcowych linii pliku. Jeśli chcemy się przyjrzeć 12 ostatnim liniom pliku messages napiszemy:
tail -12 /var/log/messages

touch - zmienia datę i godzinę ostatniej modyfikacji pliku na wartości aktualne w chwili wydania polecenia (jeśli plik nie istnieje to zostanie utworzony).

sh, bash, csh, ksh – uruchomienie odpowiedniej powłoki
su - chwilowa zmiana użytkownika

clear - czyszczenie ekranu
exit - zamknięcie sesji

cmp -porównuje dwa pliki, wyświetlając napotkane róznice
diff - porównuje dwa pliki, wyświetlając napotkane róznice
sdiff - porównuje dwa pliki wyświetlając je obok siebie
diff3 - porównuje nawzajem trzy pliki
dircmp -<directory compare> - porównanie dwóch katalogów

compress - kompresuje pliki (także: uncompress, pack, unpack, pcat i zcat)
tar – archiwizowanie plików
ar - <archive> - tworzy archiwum

gcc plik - kompilacja programu w jez. c
help - pomoc 
man - <manual> - wyświetla stronę podręcznika

at - <at time> - nastawia wykonanie polecenia na określona porę
crontab - tworzy spis, które będą wykonywane codziennie o tej samej porze
batch - umożliwia wprowadzenie grupy poleceń, które zostaną wykonane, gdy komputer nie będzie zajęty

id - <identify> - informuje o przynależności do grupy
stty - ustawia opcje mojego terminala
tty - podaje identyfikator mojego terminala

banner - dziwne drukowanie na ekranie

bc - kalkulator bez zaokrągleń
dc - kalkulator w odwrotnej notacji polskiej
cal - <calendar> - drukuje kalendarz na miesiąc albo rok
date - podaje aktualna datę i bieżąca godzinę
sum - oblicza sumę kontrolna pliku 
wc - podaje ilość słów (-w), wierszy (-l) lub znaków (-c) w pliku

news - umożliwia przeczytanie wiadomości umieszczonych na serwerze przez administratora
spell - przegląda plik tekstowy i podaje słowa, których nie ma w słowniku UNIXa

script - {tylko BSD i SVR4} - rejestruje w pliku konwersacje z UNIXem
tee - kopiuje infor. za standardowego urządzenia wejściowego, zapisuje je w pliku i wyświetla na ekranie

 uname - <UNIX name> - podaje nazwę systemu UNIX, z którego korzystam

env (lub printenv) - <environment> - wyświetla informacje dotyczące zmiennych środowiska użytkownika UNIXa
set - pokazuje, które zmienne shella zostały zdefiniowane
setenv - <set environment> - {tylko C shell} - ustawia wartość zmiennej środowiskowej
unset - usuwa zmienną środowiskową
export - {tylko Bourne lub Korn shell} - modyfikuje zmienne środowiskowe, polecenie przekazuje je poleceniom
i podshellom wykonywanym ze skryptu

file – wyświetla informacje o pliku (analizuje zawartość pliku)
od - wyświetla zawartość pliku w kodzie ósemkowym
rehash - odświeżenie listy wykonywalnych programów
rlogin - rozpoczyna sesje na zdalnym komputerze( z flaga -l jeśli pod inna nazwa)
rsh - wykonuje polecenie na innym komputerze
sed - <stream ed> umożliwia stosowanie uprzednio zarejestrowanych poleceń do wprowadzania zmian w pliku tekstowym
tr - zastępuje wszystkie wystąpienia jednego znaku w pliku drugim znakiem
awk – program zawierający własny język programowania
cut - umożliwia wydostanie zadanych kolumn z pliku tekstowego zawierającego dane uporządkowane w kolumnach
paste (lub join) - umożliwia ponowne połączenie kolumn
echo - wypisuje wszystko, co napisze się w wierszu polecenia (głownie w skryptach shella)
sort - sortuje wiersze w pliku tekstowym
uniq - usuwa identyczne powtórzone wiersze z pliku

umask - mówi systemowi, jakie prawa nadać nowo tworzonym plikom
uucp - <UNIX to UNIX copy> - robi kopie UNIX na UNIX
cpio - kopiuje pliki z i na urządzenia inne, niż dyski twarde

xargs - tworzy listę argumentów(nazw plików) i wykonuje z nią polecenie
pg - <page> - podobne do more, ale mniej możliwości

basename - wyodrębnia ostatni człon ścieżki; wynikiem jest nazwa pliku lub katalogu
dirname - <directory name> - wyświetla nazwę katalogu zawierającego konkretny plik lub katalog
 read - {tylko Bourne lub Korn shell} - przyjmuje wiersz znaków (używane w skryptach)
sleep - wprowadza opóźnienie mierzone w sekundach
test – sprawdza wartość logiczna wyrażenia (prawda lub fałsz)

fdformat - niskopoziomowy format dyskietki
mknod - tworzenie specjalnego inode'a (pliku-urządzenia lub kolejki fifo)
dpkg - zarządzanie pakietami w systemie Debian
rpm - zarządzanie pakietami w systemie Red Hat
mount - montowanie systemu plików
umount - odmontowanie systemu plików

top - listuje procesy o największym obciążeniu procesora i wyświetla ich statystyki w czasie rzeczywistym. Pozwala na monitorowanie określonych procesów.
ps - <process status> - podaje informacje o procesach
bg - <background> - uruchamia zatrzymane w tle zadanie
fg - <foreground> - wznawia zatrzymane zadanie na pierwszym planie (przeniesienie procesu w tło)
jobs - podaje spis poleceń wykonywanych w tle
kill - wysyła sygnał do procesu
nice - wykonuje polecenie z niższym priorytetem
nohup - polecenie w tle będzie w dalszym ciągu wykonywane, nawet po zamknięciu sesji
time - informuje, ile czasu zajęło wykonanie polecenia, do chwili pojawienia się następnego zgłoszenia shella

insmod - instalowanie modułu jądra
rmmod - usuwanie modułu
lsmod - listowanie aktywnych modułów
depmod - obsługuje zależności modułów
modinfo - informacje o modułach
modprobe - instalowanie modułu z potrzebnymi opcjami i modułami

ifconfig - konfigurowanie połączenia sieciowego
netstat - statystyki połączenia

finger - podaje informacje o użytkownikach systemu
write login - dialog wierszami z drugim użytkownikiem
write login ttyp1 - do konkretnego użytkownika na danym terminalu
talk zibi@hotmail.coml - dialog na podzielonym ekranie
wall - komunikat dla wszystkich aktualnych użytkowników sieci
who am i (kim ja jestem) - podaje moja nazwę użytkownika oraz informacje na mój temat 
who - wyświetla informacje o zalogowanych użytkownikach. 
mesg - <messages> - umożliwia określenie, czy inni użytkownicy używający write mogą przerywać mi prace komunikatami

login - umożliwia podjęcie sesji jako ktoś inny
logout – wylogowanie użytkownika
shutdown, halt - zamknięcie systemu
reboot – restart systemu

pine - program pocztowy
bitchx - klient IRC
lynx - tekstowa przeglądarka stron www
mc - menedżer plików Midnight Commander
ftp - klient ftp

Jednym z najważniejszych poleceń jest man - który wyświetla pomoc do danego polecenia, dzięki czemu szybko możemy się dowiedzieć w jaki sposób należy korzystać z danego programu czy polecenia: np. man lynx - wyświetli opis do przeglądarki stron www.

Lista dos’owych odpowiedników poleceń linuxowych:
Linux	DOS	Opis	
ls	dir	Listowanie zawartości katalogów	
rm	del	Kasowanie plików	
mkdir	mkdir,md	Tworzenie katalogów	
rmdir	rmdir,rd	Kasowanie katalogów	
mv	move	Zmiana nazwy lub przenoszenie pliku	
cp	copy	Kopiowanie plików	
chmod	attrib	Zmiana atrybutów pliku	
cfdisk	fdisk	Partycjonowanie	
mkfs	format	Tworzenie systemu plików	
defrag	defrag	Defragmentator	
fsck	scandisk	Testowanie systemu plików	
bash	command	Interpreter poleceń	
date	date	Zmiana daty	

Wzorniki
Oprócz nazw plików i katalogów możemy używać wzorników. We wzornikach mogą wystąpić - oprócz liter, cyfr, znaków _ - $ i . (kropki) - znaki specjalne:
	* - oznacza dowolny łańcuch dowolnych znaków 
	? - oznacza pojedynczy dowolny znak 
	[znak, ..., znak] - dowolny z wymienionych znaków 
	[od-do] - dowolny znak o kodzie w podanym zakresie 
Przykłady wzorników:
*a	dowolna nazwa kończąca się litera a	
a??b*c*	dowolna nazwa zaczynająca się od litery a, po której występują dwa dowolne znaki a następnie litera b, dowolny ciąg dowolnych znaków, litera c i dowolny ciąg dowolnych znaków kończących nazwę	
[0-9]*[xyz]	dowolna nazwa zaczynająca się od cyfry, po której występuje dowolny ciąg dowolnych znaków. Nazwa kończy się jedną z liter x, y lub z	
Jeżeli chcemy, żeby wzornik obejmował nazwy zaczynające się od kropki ('ukryte') - musimy jawnie wymienić kropkę we wzorniku
*z	dowolna nazwa kończąca się litera z - z wyjątkiem nazw zaczynających się od kropki	
.*z	dowolna nazwa zaczynająca się od kropki, po której występuje dowolny ciąg dowolnych znaków zakończonych literą z	
Uwaga ! Nie można zdefiniować wzornika obejmującego zarówno nazwy 'ukryte' (zaczynające się od kropki) jak i nazwy 'nie ukryte'.
Aby określić szczegółowo jakie pliki mają być kopiowane użyjemy trzeciego symbolu wieloznacznego [...]. Przypuśćmy, że w katalogu mamy pliki: plik1, plik2, plik3 i plik4. Chcemy skopiować tylko pliki z numerami 1,2 i 3. Wydajemy zatem polecenie:
cp plik[123].txt linux/
lub 
cp plik[1-3].txt linux/

Skrypty powłoki
Skrypty pozwalają na spisanie ciągu komend Unixa a następnie ich wykonanie.
Wewnątrz skryptu możemy używać następujących konstrukcji:
parametry - symbole $1, ... , $9 są zastępowane wartościami parametrów występujących w linii uruchamiającej skrypt 
zmienne - są to obiekty, tworzone przez programistę lub zdefiniowane w systemie. Każda zmienna ma swoją nazwę - poprzez tę nazwę odwołujemy się do zmiennej. 
wartość zmiennej nadajemy instrukcją
nazwa_zmiennej = wartosc
natomiast wartość zmiennej pobieramy używając konstrukcji $nazwa_zmiennej
Jeżeli wartością zmiennej alfa jest łańcuch beta to komenda
echo Wartosc zmiennej alfa: $alfa
wyświetli na monitorze komunikat:
Wartosc zmiennej alfa: beta
Pamiętajmy, aby pierwsza linia skryptu rozpoczynała się od ciągu znaków #!, po których występuje ścieżka dostępu do shella, który będzie interpretował polecenia skryptu, np.:
#!/bin/bash
Wewnątrz skryptu wpisujemy normalne komendy Unixa. Dodatkowo mamy możliwość użycia dodatkowych instrukcji.
warunek	wykonanie dowolnego ciagu instrukcji Unixa - uruchomienie procesów, komendy wbudowane Unixa. warunek ma wartość TRUE o ile uruchomione programy wykonaly się bez bledów – dokladniej dopóki beda zwracać wartość 0 
dodatkowo jako warunek może wystapic konstrukcja -f fname - ma wartość TRUE jeżeli plik o nazwie fname istnieje	
ciag instrukcji	dowolny ciąg instrukcji Unix’a	

Najważniejsze z dodatkowych instrukcji, których możemy użyć w skryptach:
while warunek;
do
ciag instrukcji;
done	wykonuj krotnie ciag instrukcji - tak długo jak długo spełniony zostanie warunek	
For zmienna in lista_wartosci
do
ciag instrukcji
done	lista_wartosci to ciąg nazw oddzielonych spacją. zmienna otrzymuje kolejno wartości z listy_wartosci - dla każdej z nich wykonywany jest ciąg instrukcji. 
Jako lista_wartosci może wystąpić również wzornik – wartością zmiennej będą nazwy plików zgodnych z wzornikiem.	
if [ warunek ];
then
ciag instrukcji1
else
ciag instrukcji2
fi	jeżeli spełniony jest warunek - wykonaj ciąg instrukcji1, jeżeli nie jest - wykonaj ciąg instrukcji2	
Uwaga! Przed wykonaniem pliku ze skryptem musimy mu nadać atrybut 'executable' – komenda:
chmod u+x nazwa_pliku
Przykład:
Sprawdź, czy plik o podanej jako parametr skryptu nazwie istnieje. Jeżeli tak - sprawdź czy w tym pliku występuje linia z tekstem będącym drugim parametrem skryptu. Jeżeli oba warunki są spełnione - utwórz plik o nazwie zgodnej z nazwą pliku bazowego oraz rozszerzeniem '.tekst_szukany.RESULT'. W pliku tym powinny znajdować się wyłącznie linie zawierające szukany tekst 
plik: do_find
#!/bin/bash
for fname in $1;
do
if [ -f $fname ];
then
if grep $2 $fname
then
grep $2 $fname > $fname.$2.RESULT
echo Zalozono plik $fname.$2.RESULT ...
else
echo W pliku $fname nie ma szukanych linii $2
fi
else
echo Plik $fname nie istnieje
fi ;
done	

Programy w Unix’ie uruchamiamy wpisując ich nazwy. Jeśli program nie zostanie znaleziony, należy wskazać ścieżkę dostępu do pliku, chociażby następującą: “./”. Ewentualnie można zmodyfikować wartość zmiennej środowiskowej PATH.
Większość programów, czy poleceń można zakończyć używając kombinacji klawiszy [Ctrl]+[C].