WSTĘP DO SYSTEMU UNIX - LABORATORIUM

Ostatnia aktualiazcja: 02.01.20

Zasady zaliczenia przedmiotu

Laboratoria ze Wstępu do systemu UNIX odbywają się w każdy poniedziałek w godzinach 17:00 - 19:15 (bez przerw), dla grupy nr 1 (Astronomia s1, rok II) oraz w czwartki pomiędzy 14:15 a 17:00 (przerwa 15:30 - 16:00), dla grupy nr 7 (AiR s1, rok I).

Obowiązują następujące kryteria zaliczenia przedmiotu:

  • Obecności (możliwa jedna nieusprawiedliwiona nieobecność na zajęciach - 3h zajęć stanowią 10% wszystkich zajęć przewidzianych planem!)
  • Zaliczenie dwóch kolokwiów praktycznych na co najmniej 50% łącznej ilości punktów możliwych do zdobycia
  • Zaliczenie dodatkowych sprawdzianów/kartkówek dotyczących zagadnień poruszanych w ramach zajęć
Każdemu studentowi, w przypadku niespełnienia dwóch ostatnich punktów, przysługuje możliwość podejścia do kolokwium poprawkowego.

Ustalone terminy kolokwiów:

  1. Kolokwium 1 - polecenia systemu UNIX - TBA
  2. Kolokwium 2 - skrypty powłoki BASH - TBA
  3. Kolokwium poprawkowe - TBA

Zagadnienia poruszane w trakcie zajęć

Zajęcia dotyczyć będą obsługi systemu GNU/Linux - unixopodobnej rodziny systemów operacyjnych o otwartym kodzie źródłowym. Poruszane będą tematy związane głównie z użytkową stroną systemu GNU/Linux. Głównym środowiskiem pracy będzie emulator teminala, uruchamiany na maszynie wirtualnej z wykorzystaniem środowiska VirtualBox. Na potrzeby zajęć, na stanowiskach studenckich utworzone zostały maszyny wirtualne z systemem Linux Mint 19.2 "Tina". Każdy ze studentów może utworzyć sobie na nich konto i korzystać z maszyn bez większych obaw o możliwe uszkodzenia systemu. Zainstalowane środowisko graficzne to bardzo lekkie i szybkie Xfce.

Wraz z postępem zajęć przekazane zostaną studentom maszyny wirtualne z odpowiednio zmodyfikowaną dystrybucją Slackware.

Połączenie z serwerem

Ćwiczenia w ramach laboratoriów wykonywać można również na serwerze WFAiIS. aDo użytku studenckiego przewidziane są dwie maszyny - tor i polon. Maszyny te widoczne są z sieci Instytutu Fizyki UMK. Połączenie z nimi możliwe jest z poziomu pracowni komputerowych, pracowni terminali studenckich lub własnego komputera wyposażonego w certyfikat OpenVPN. Szczegółowe informacje na temat certyfikatu znajdują się tutaj.


Serwerem dostępowym widocznym z poza sieci IF jest serwer ameryk.


Połączenie z wybraną maszyną realizowane może być poprzez terminal tekstowy. W tym celu należy wydać polecenie:
ssh użytkownik@maszyna.fizyka.umk.pl, gdzie użytkownik to nazwa użytkownika (w przypadku studentów WFAiIS tożsama z numerem indeksu), a maszyna to nazwa maszyny, do której następuje logowanie. Polecenie powinno zostać wydane w terminalu systemu Linux lub innego systemu z rodziny Unix-like. W przypadku systemu Windows skorzystać można z aplikacji udostępniających funkcjonalność protokołu ssh - cygwin lub putty.


Istnieje również możliwość skorzystania z terminala graficznego. Aby zalogować się do jednego z serwerów IF z możliwością korzystania z okien graficznych, wykorzystać należy polecenie ssh z opcją -X. Wywołanie aplikacji udostępniającej okno graficzne spowoduje załadowanie okna graficznego po stronie klienta. Rozwiązanie to jest wolne, a praca mało komfortowa.


Najwygodniejszą formą pracy z terminalem graficznym jest uruchomienie po stronie maszyny serwera vnc. Aby tego dokonać należy wydać polecenie vncserver -geometry szerxwys , gdzie wys jest wysokością wirtualnego ekranu, a szer jego szerokością. Efekt działania polecenia jest analogiczny do podanego poniżej:


New 'tor:1 (piotra)' desktop is tor:1

Starting applications specified in /home/piotra/.vnc/xstartup
Log file is /home/piotra/.vnc/tor:1.log

W tym przypadku należy zapamiętać numer przydzielonego biurka, który pojawia się w pierwszej linii, tuż za znakiem :. Aby podłączyć się do niego należy skorzystać z dowolnego klienta VNC, wskazać maszynę na której biurko zostało uruchomione oraz jego numer. Zakończenie pracy w tym trybie wiąże się z zamknięciem wirtualnego ekranu (poprzez zamknięcie aplikacji klienta VNC) oraz wydaniem polecenia vncserver -kill :numer_biurka po stronie serwera.
UWAGA! Warto jest przed pierwszym uruchomieniem serwera VNC wykonać podstawową konfigurację środowiska graficznego. Maszyny IF UMK udostępniają środowisko graficzne xfce. Dla mniej zaawansowanych użytkowników najlepszym rozwiązaniem będzie wykorzystanie gotowej konfiguracji udostępnionej przez administratora serwerów IF UMK. W tym celu wykonać należy następujące dwie komendy:
wget http://www.fizyka.umk.pl/~jkob/misc/xstartup
mv ./xstartup ~/.vnc/xstartup

Pomoc systemu UNIX

Proszę niniejszych materiałów nie traktować jako głównego podręcznika do nauki obsługi systemów Unix-like. Materiały zostały przygotowane w formie notatek prezentujących tok ćwiczeń i pozwalających na szybką powtórkę materiału z ostatnich zajęć. Najlepszym źródłem wiedzy dotyczącej zagadnień poruszanych w ramach zajęć są oczywiście strony podręcznika systemowego.

Aby go uruchomić należy wydać komendę man polecenie lub info polecenie, gdzie polecenie to komenda, do której potrzebna jest nam strona podręcznika systemowego. Większość programów posiada dodatkowo możliwość wywołania stron podręcznika poprzez wywołanie ich z opcją -h lub --help.

Do dokładnego zrozumienia zagadnień poruszanych w ramach laboratoriów przydatna może być lektura dodatkowych materiałów wydawanych w postaci podręczników czy leksykonów dotyczących systemu Unix czy Linux. Warto również przejrzeć dokumentację techniczną oraz strony pomocy popularnych dystrybucji systemu Linux (np. Ubuntu czy Arch Linux).

STRUKTURA KATALOGOWA W SYSTEMIE LINUX

W poniższym podrozdziale omówiona zostanie struktura katalogowa systemu Linux. Organizacja plików jest różna od tej znanej z systemu Windows. W systemie Linux użytkownik nie musi posiadać bezpośredniej wiedzy o organizacji danych na dysku oraz rozdzieleniu dysku na partycje. Organizacja fizycznej struktury nośników trwałych i ich podział pozostaje domeną administratora, który to decyduje o podmontowaniu odpowiednich nośników w strukturze drzewa katalogowego. Z punktu widzenia użytkownika ważna jest wiedza na temat wspomnianej struktury. Jej głównym punktem jest /, czyli korzeń drzewa katalogowego (ang. root oraz slash). Najprościej rzecz ujmując / jest początkiem drzewa katalogowego oraz partycją, na której instalowany jest system operacyjny. Dostęp do fizycznych dysków i partycji udostępniany jest przez system w postaci plików dostępnych w katalogu /dev. To dzięki nim system operacyjny komunikuje się z fizycznym sprzętem komputera. Dyski oznaczane są jako sdX, gdzie X odpowiada literze powiązanej bezpośrednio z dyskiem twardym (np. sda, sdb czy sdc, odpowiadające dyskowi pierwszemu, drugiemu i trzeciemu podłączonemu do interfejsu SATA, a dla starszego interfejsu ATA oznaczenie dysku to hdX, gdzie X ma analogiczne znaczenie). Dodatkowo po literowym oznaczeniu fizycznego urządzenia znajduje się cyfra odpowiadająca numerowi partycji na dysku (a więc pełny format odpowiadający partycjom na urządzeniu fizycznym podłączonym do interfejsu SATA to np. sda1, odpowiadające pierwszej partycji pierwszego fizycznego dysku. Tak jak wcześniej wspomniano montowanie odpowiednich urządzeń w strukturze drzewa katalogowego systemu Linux pozostaje decyzją administratora systemu, a dla zwykłego użytkownika ma znaczenie wyłącznie w przypadku tworzenia dowiązań sztywnych, o których będzie mowa w kolejnych podrozdziałach przedstawionego opracowania. Dostęp do plików zgromadzonych na konkretnych partycjach możliwy jest, w przypadku większości dystrybucji systemu Linux, z poziomu katalogu /mnt. Poniżej przedstawiona została struktura katalogowa w systemie Linux, wraz z krótkim opisem poszczególnych katalogów:

  1. / - korzeń drzewa katalogowego
  2. /bin - binarne pliki systemowe
  3. /boot - pliki niezbędne do uruchomienia systemu operacyjnego (bootloader, jądro systemu i usługi)
  4. /dev - pliki urządzeń, dzięki którym system operacyjny komunikuje się z fizycznym sprzętem
  5. /etc - pliki konfiguracyjne i ustawienia systemowe
  6. /home - katalogi domowe użytkowników wraz z ich danymi
  7. /lib - biblioteki systemowe
  8. /media - nośniki wymienne (miejsce montowania nośników wymiennych w większości dystrybucji)
  9. /mnt - miejsce montowania dysków w większości dystrybucji (UWAGA! W dystrybucjach opartych na Ubuntu dyski montowane są w /media
  10. /proc - wirtualny katalog zawierający informacje na temat uruchomionych procesów
  11. /root - ustawienia administratora
  12. /sbin - pliki wykonywalne poleceń administratora
  13. /tmp - pliki tymczasowe
  14. /usr - dodatkowe programy dostępne dla zwykłego użytkownika
  15. /var - pliki systemowe, których zawartość szybko się zmienia (dane zapisywane przez system operacyjny)

Warto jest pamiętać również o zwyczajowych oznaczeniach niektórych katalogów systemowych, gdyż ich znajomość może znacznie skrócić wydawane polecenia, szczególnie gdy ich argumentem są ścieżki (zarówno względne jak i bezwzględne) Oto najważniejsze oznaczenia:

  1. / - katalog główny, początek ścieżki bezwzględnej każdego pliku i katalogu w systemie
  2. . - bieżący katalog
  3. .. - katalog nadrzędny
  4. ~ - katalog domowy danego użytkownika (odpowiada /home/user/)
  5. ~user - katalog domowy użytkownika user

Oprócz znajomości struktury katalogowej, użytkownik systemu Linux, wykazać musi się znajomością komend. Poniżej przedstawione zostaną komendy wykorzystywane w ramach laboratorium, dotyczące przeglądania, modyfikowania i poruszania się po strukturze katalogowej systemu Linux.i

  1. pwd - wypisz bieżący katalog (odpowiada wypisaniu katalogu .)
  2. cd katalog - przjście do katalogu o nazwie katalog (PAMIĘTAJ! Ważne jest używanie ścieżek względnych oraz bezwzględnych)
  3. ls - wypisz zawartość bieżącego katalogu jeśli wywołano polecenie bez argumentu, a jeśli z argumentem to wypisanie zawartości katalogu będącego argumentem wywołania
    1. -a - wypisuje wszystkie pliki, również ukryte (a więc takie, których nazwa zaczyna się od . oraz ..
    2. -l - wypisuje dodatkowo atrybuty plików
    3. -h - podaje rozmiar plików w KB, MB i GB
    4. -F - nazwy plików uzupełnione zostają symbolami, które oznaczają typy plików:
      1. / - katalog
      2. * - plik wykonywalny
      3. @ - dowiązanie symboliczne
      4. | - potok nazwany
      5. = - gniazdo
    5. -i - numery węzłów i-node (i-węzłów)
    6. -s - wypisuje rozmiary plików
    7. -R - wypisuje zawartości katalogów rekurencyjnie (z zawartością podkatalogów)
  4. cp co gdzie - kopiowanie pliku co do gdzie
  5. mv co gdzie - przeniesienie pliku co do gdzie
  6. touch -
  7. mkdir -
  8. cat -
  9. more -
  10. less -
  11. rm -
  12. rmdir -
  13. alias -
  14. ln -
  15. del -
  16. mc -
  17. scp -

ZMIENNE POWŁOKI

  1. $DISPLAY - nazwa urządzenia wyświetlającego wyjście X-ów
  2. $HOME - nazwa katalogu domowego użytkownika (tożsama z ~)
  3. $LOGNAME - nazwa użytkownika wykorzystana przy logowaniu
  4. $MAIL - ścieżka do katalogu z pocztą użytkownika
  5. $OLDPWD - poprzedni katalog roboczy powłoki
  6. $PATH - ścieżka przeszukiwania powłoki
  7. $PWD - aktualny katalog roboczy (tożsamy z .)
  8. $SHELL - ścieżka do powłoki wykorzystywanej przez użytkownika
  9. $TERM - tryb wykonawczy terminala
  10. $USER - nazwa użytkownika

Zmienne specjalne:

  1. $0 - nazwa aktualnie wykonywanego polecenia
  2. $1, $2, ... , $n - argumenty wykonania programu
  3. $* - ciąg wszystkich parametrów wywołania programu
  4. $@ - lista wszystkich parametrów wywołania programu
  5. $# - liczba parametrów wywołania programu
  6. $? - status ostatnio zakończonego procesu
  7. $- - flagi, z którymi została wywołana powłoka
  8. $$ - numer PID aktualnie wykonywanego procesu
  9. $! - numer PID ostatnio wykonywanego procesu w tle
  10. $_ - ostatni argument ostatnio wywołanego procesu

Polecenia:

  1. shift - przesuwa w lewo parametry wywołania programu
  2. set --lista_argumentów - zmiana bieżących wartości argumentów wywołania na podaną listę
  3. printenv - wypisanie wszystkich zmiennych powłoki
  4. export zmienna=wartość - udostępnienie zmiennej zmienna o wartości wartość wszystkim powłokom (zmienna globalna)

Tworzenie zmiennych:

  1. nazwa_zmiennej="wartość" - utworzenie zmiennej o nazwie nazwa_zmiennej i o wartości wartość, będącej ciągiem znaków
  2. nazwa_zmiennej=wartość - utworzenie zmiennej o nazwie nazwa_zmiennej i o wartości wartość, będącej zmienną liczbową
  3. nazwa_zmiennej=`polecenie` lub nazwa_zmiennej=$(polecenie) - utworzenie zmiennej o nazwie nazwa_zmiennej i o wartości będącej wynikiem działania komendy polecenie

Wyświetlanie wartości zmiennych

echo $nazwa_zmiennej - wyświetlenie wartości zmiennej o nazwie nazwa_zmiennej (jeśli zmienna nie istnieje, to jej wartość jest pustym znakiem)

Zmienne liczbowe

Aby uzyskać liczbową wartość zmiennej o nazwie zmienna, wykorzystać można notację $((zmienna)) oraz $[zmienna]. Aby wykonywać na zmiennych operacje matematyczne należy użyć polecenia let:
let wynik=zmienna1*zmienna2, gdzie na zmiennej wynik zapisany zostanie wynik operacji matematycznej pomiędzy zmiennymi zmienna1 i zmienna2. Operator * może zostać oczywiście zastąpiony innym operatorem matematcznym.

Zmienne tablicowe

Tworzenie zmiennej tablicowej: zmienna=(wartosc1 wartosc2 ... wartoscN)

Wypisanie n-tego elementu zmiennej tablicowej o nazwie tablica: echo ${tablica[n]}

Liczba znaków n-tego elementu tablicy tablica: echo ${#tablica[n]}

Wypisanie wszystkich elementów zmiennej tablicowej o nazwie tablica, może być realizowane na dwa sposoby: echo ${tablica[*]} oraz echo ${tablica[@]}.

Aby usunąć element tablicy skorzystać należy z polecenia unset.

PRAWA DOSTĘPU

  1. chown właściciel plik - zmiana właściciela pliku
  2. chgrp właściciel plik - zmiana właściciela grupowego pliku
  3. chmod uprawnienia pliki - zmiana uprawnień dostępu do pliku

Uprawnienia podawane są w kolejności UŻYTKOWNIK GRUPA RESZTA (ugo, ang. user group other). Modyfikować można uprawnienia czytania pliku r, zapisu pliku w oraz jego wykonania x.

  1. r - czytanie, wartość liczbowa 22=4 (binarnie 100)
  2. w - pisanie, wartość liczbowa 21=2 (binarnie 010)
  3. x - wykonanie, wartość liczbowa 20=1 (binarnie 001)

Operatory modyfikacji uprawnień:

  1. + - operator nadania (dodania) uprawnień
  2. - - operator odebrania uprawnień
  3. = - operator bezwzględnego nadania uprawnień (niweluje poprzednie prawa dostępu)
Ustawianie uprawnień dla poszczególnych użytkowników odbywa się poprzez włączanie i wyłączanie odpowiednich bitów odpowiadających pisaniu/czytaniu/wykonaniu. Przydzielając prawa dostępu stosować można dwie notacje:
  1. korzystając z operatorów modyfikacji uprawnień: chmod zmiana_uprawnień plik, gdzie zmiana określa komu i jakie uprawnienia podlegają modyfikacji (np. u+rw oznacza dodanie użytkownikowi możliwości czytania i pisania, a o=rwx nadaje wszystkie uprawnienia dla wszystkich.
  2. korzystając z notacji cyfrowej i podając ciąg trzech cyfr odpowiadających uprawnieniom dla ugo(cyfry dodają się, tak więc wszystkie uprawnienia to 7, a brak uprawnień to 0).

EDYTORY TEKSTU

  1. pico
  2. nano
  3. joe
  4. mcedit
  5. vim
  6. emacs

STRUMIENIE

  1. > - przekierowanie standardowego wyjścia do pliku (nadpisanie pliku istniejącego lub utworzenie nowego)
  2. >> - przekierowanie standardowego wyjścia do pliku (dopisanie do pliku istniejącego lub utworzenie nowego)
  3. 1> - przekierowanie standardowego strumienia wyjścia do pliku
  4. 2> - przekierowanie standardowego strumienia błędów do pliku
  5. &> - przekierowanie standardowych strumieni wyjścia i błędów do pliku
  6. < - treść pliku z prawej strony jako wejście dla polecenia z lewej stronu
  7. | - wyjście polecenia z lewej strony staje się wejściem dla polecenia z prawej strony
  8. pico

OPERACJE NA PLIKACH

  1. head -
  2. tail -
  3. sort -
  4. unique -
  5. grep oraz egrep -
  6. sed -

INNE PRZYDATNE POLECENIA SYSTEMOWE

  1. date -
  2. time -
  3. find -
  4. who -
  5. w -
  6. du -
  7. which -
  8. where -
  9. finger -

WYRAŻENIA REGULARNE

Cenną umiejętnością w trakcie pracy z systemami UNIX-Like jest posługiwanie się wyrażeniami regularnymi. Są to wzorce opisujące łańcuchy symboli lub ich fragmenty. Dzięki ich zastosowaniu przeszukiwanie plików czy wyników działania poleceń jest znacznie łatwiejsze i efektywniejsze. Poniżej przedstawione zostały najważniejsze symbole związane z wyrażeniami regularnymi.

Krotności dopasowań wzorców

* - dopasowanie elementu zero lub więcej razy
? - dopasowanie elementu zero lub dokładnie jeden raz
+ - dopasowanie elementu jeden lub więcej razy

Ilość powtórzeń wzorca może zostać podana również w postaci określenia konkretnych ilości wystąpień lub ich przedziałów, stosując odpowiednie nawiasowanie (rozszerzenie perla):


{n} - dopasowanie wzorca dokładnie n razy
{n,} - dopasowanie wzorca co najmniej n razy
{,n} - dopasowanie elementu co najwyżej n razy
{n,m} - dopasowanie wzorca co najmniej n razy, ale nie więcej niż m razy

Miejsce wystąpienia wzorca

^wzor - słowo "wzor" wystąpi na początku linii
wzor$ - słowo "wzor" wystąpi na końcu linii
\<wzor - poszukiwanie wzorca na początku słowa
\>wzor - poszukiwanie wzorca na końcu słowa
\bwzor - słowo zaczyna się lub kończy na "wzor" (wzorzec jest krawędzią słowa)
\Bwzor - słowo nie zaczyna się i nie kończy na "wzor" (wzorzec nie jest krawędzią słowa)

Podawanie wzorców

a - pojedynczy znak (w tym przypadku będzie nim litera "a")
ab - dwa znaki obok siebie (w tym przypadku połączenie znaków "a" i "b")
. - dowolny znak z wyłączeniem znaku nowej linii
[abc] - słowa zawierające literę "a" lub "b" lub "c"
[^abc] - słowa nie zawierające liter "a" lub "b" lub "c"

Aby uniknąć konieczności podawania wzorców w postaci długich ciągów znaków zastosować można wzorce przedziałowe:

[a-z] - mała litera od "a" do "z"
[A-Z] - wielka litera od "A" do "Z"
[0-9] - cyfra z przedziału od "0" do "9"

Przedziały można ze sobą łączyć poprzez oddzielenie kolejnych przedziałów znakiem "," oraz dzielić na mniejsze ograniczając zakresy (np. [b-v] oznacza literę z zakresu od "b" do "v"), lecz pamiętać należy, że w przypadku wyrażeń liczbowych skonstruować należy odpowiednie wyrażenie, gdyż zakresy działają dla pojedynczych znaków, a więc dla pojedynczych cyfr.

Istnieje również możliwość grupowania większej ilości znaków celem znalezienia ich wielokrotnego wystąpienia w słowie lub znalezienia słów czy linii zaczynających się lub kończących się określonym szeregiem znaków (podsłowem). Przydatny w tym przypadku okazuje się zapis (wzor), który odpowiada poszukiwaniom słowa "wzor". Dodanie na końcu takiego zapisu odpowiedniego operatora umożliwia poszukiwanie chociażby powtórzeń zbitków literowych w słowach czy linii zawierających kilka wystąpień danego słowa.

Przydatny jest również operator alternatywy |, który pozwala na dopasowanie jednego z podanych wyrażeń. Wykorzystanie operatora | w postaci (wzor1|wzor2|...|wzorN) pozwoli na dopasowanie jednego z podanych wzorców.


Znaki specjalne

Jak widać niektóre ze znaków, które mogą być wyszukiwane, zarezerwowane są na potrzeby wyrażeń regularnych. Nazywane są one znakami specjalnymi. Ich pełna lista znajduje się poniżej:

\ : . ^ $ * + = ? [ ] ( ) { } |

Znaki specjalne poprzedzane muszą być \, tak więc wzorzec zawierający znak "." oznaczony musi zostać jako \. (a sam znak "." oznacza dokładnie jedną, dowolną literę)

Klasy znaków zgodne z POSIX

Jednym ze sposobów definiowania szerszego zakresu znaków jest wykorzystanie klas znaków zdefiniowanych przez standard POSIX. Klasy znaków obejmują większą liczbę znaków mających określone właściwości. Ich definicja zaczyna się od `[:, a kończy :]'. Pomiędzy podanymi symbolami umieszcza się słowo kluczowe oznaczające konkretną klasę. Poniżej przedstawione zostały klasy znaków zdefiniowane przez standard POSIX:

`[:alnum:]' - znaki alfanumeryczne (litery i cyfry)
`[:alpha:]' - znaki alfabetyczne (wielkie i małe litery)
`[:blank:]' - znaki spacji i tabulacji (znaki puste)
`[:cntrl:]' - znaki sterujące (znaki z zakresu 000-037 oraz 177)
`[:digit:]' - znaki numeryczne (cyfry)
`[:graph:]' - znaki graficzne (drukowalne i widoczne)
`[:lower:]' - znaki reprezentujące małe litery
`[:upper:]' - znaki reprezentujące wielkie litery
`[:print:]' - znaki drukowlane (wszystkie znaki nie będące znakami sterującymi)
`[:punct:]' - znaki interpunkcyjne
`[:space:]' - znaki tabulacji, nowej linii, tabulacji pionowej, wysuwu strony, powrotu karetki oraz spacji
`[:xdigit:]' - cyfry w formacie szesnastkowym

Wskazówki

W trakcie uczenia się wykorzystania wyrażeń regularnych polecam wykorzystywać program grep (lub jego wersję rozszerzoną egrep) oraz program sed. Warto również zajrzeć do stron podręcznika systemowego dotyczących wymienionych wyżej programów (dla przypomnienia - man polecenie). Znaleźć tam można kilka cennych porad dotyczących zastosowania wyrażeń regularnych.

Przykładowe zadania - wyrażenie regularne

1) Podaj wyrażenie regularne odpowiadające dacie w formacie:
dd.mm.rrrr, hh:mm:ss
2) Podaj wyrażenie regularne dla dowolnego adresu e-mail.
3) Podaj wyrażenie regularne odpowiadające wyrazom, któtre rozpoczynają się na samogłoskę i mają nieparzystą liczbę liter
4) Podaj wyrażenie regularne sprawdzające poprawność nazwiska (nazwisko rozpoczyna się wielką literą, może być dwuczłonowe a znakami rozdzielającymi człony może być spacja lub -)
5) Podaj wyrażenie regulane, które odpowiada wyrazowi z parzystą liczbą wystąpień litery 'c' i kończącemu się na 'ot'.
6) Podaj wyrażenie regularne, które sprawdzi poprawność podanego kodu pocztowego (jako jego format przyjmij 'XX-XXX'
7) Podaj wyrażenie regularne, które odpowiada liniom zaczynającym się literą "A", a kończącym się podsłowem "oc".
8) Podaj wyrażenie regularne rezprezentujące wszytskie liczby ośmiocyfrowe.
9) Podaj wyrażenie regularne, które sprawdzi poprawność zapisu koloru RGB w formacie szesnastkowym (przyjmij, że jego postać to '#XXXXXX', gdzie X to odpowiednia cyfra)
10) Podaj wyrażenie regulane, które sprawdzi poprawność adresu IPv6
11) Podaj wyrażenie regularne, które odpowiadać będzie Twojemu nazwisku w formie męskiej i żeńskiej
12) Podaj wyrażenie regularne, które sprawdzi czy podany adres IPv4 należy do zakresu adresów prywatnych

PROGRAMY POCZTOWE I KOMUNIKACJA

  1. mail -
  2. mutt -
  3. pine - (nieobowiązkowy, ale warto przejrzeć)
  4. write -
  5. mesg -

ARCHIWA

  1. gzip -
  2. gunzip -
  3. tar -
  4. cpio -

PROCESY

  1. ps -
  2. kill -
  3. killall -
  4. top -
  5. htop -
  6. nice -
  7. renice -
  8. jobs -
  9. proces &
  10. bg
  11. fg