Pracownia Komputerowa III UNIX i Internet Rafał Jakubowski Zespół Teoretycznej Biofizyki Molekularnej Email: rjakubowski@fizyka.umk.pl http://www.fizyka.umk.pl/~rjakubowski Pokój 573 Konsultacje: środy, 10-12
Warunki zaliczenia Obecność (max. 2 nieusprawiedliwione nieobecności) Kolokwium (lub dwa) Możliwe WEJŚCIÓWKI
Kolokwia i wejściówki Jedno duże pod koniec semestru bądź dwa mniejsze (jedno np. pod koniec kwietnia) Wejściówka forma motywowania do pracy
Dlaczego UNIX/Linux? Źródło: http://top500.org/charts/list/37/osfam
Kilka kart z historii 1969 pierwszy UNIX z powłoką, kod maszynowy (Thompson, Richie, Bell Labs i AT&T) 1973 jądra UNIX'a w C == przenaszalność systemu 1975 Unix zaczyna być używany do celów naukowych 1983 pierwszy komercyjny UNIX (AT&T) Początek lat 80 XX wieku blokada kodów źródłowych UNIX'a, początki ruchu open source
Kilka kart z historii cd. 1983 - Richard Stallman tworzy Free Software Foundation 1984 początki internetu; zostaje wydany UNIX z zaimplementowanym protokołem TCP/IP W międzyczasie powstają różne wersje (komercyjne i wolne) UNIX'ów brak standardu 1988 specyfikacja POSIX ujednolicenie 1991 Linus Torvalds publikuje pierwsze jądro Linuxa
Kilka kart z historii cd. 1994 powstaje Red Hat Linux dziś jedna z najbardziej dojrzałych dystrybucji
Linux dzisiaj Ogromna ilość dystrybucji (Red Hat/Fedora/CentOS, Debian/Ubuntu, Slackware, SuSE, Arch...) Ogromna ilość darmowych aplikacji Powszechne wykorzystywanie UNIXa/Linuxa w nauce i przemyśle, a także coraz częściej w domach Mnóstwo sprzętu i oprogramowania, w których siedzi zaszyty Linux (routery, drukarki, Android...)
Dostęp do serwerów wydziałowych Login: numer indeksu OpenVPN wydziałowa furtka na świat Hasło: to samo co w USOSWebie ferm.fizyka.umk.pl (dostęp tylko z sieci wewnętrznej) tor, nobel, uran... Zewnętrzny serwer dostępowy: ameryk.fizyka.umk.pl
Ważne Regulamin wydziałowej sieci: http://www.fizyka.umk.pl/lan/
Główne cechy systemu Linux Wielozadaniaowość system z podziałem czasu, pozwala na uruchamianie wielu procesów jednocześnie Wielodostępowość umożliwia pracę wielu użytkownikom jednocześnie
Budowa systemu Jądro (kernel) niskopoziomowe oprogramowanie obsługujące sprzęt, dostarczające określone usługi programów (w tym: realizacja systemów plików, przydziału czasu procesora itp.) Powłoka (shell) interpreter poleceń, łącznik pomiędzy użytkownikiem a procesami/sprzętem, najpopularniejsze: tcsh, sh, bash
Budowa systemu cd. Biblioteki systemowe Oprogramowanie...
Pliki Ciąg bajtów Organizacja w postaci tzw. drzewa z korzeniem (root) / Do każdego pliku można odwołać się podająć ścieżkę względem korzenia (ścieżka bezwzględna) lub względem bieżącej lokalizacji(ścieżka względna) Katalog również jest plikiem zawiera informacje o innych plikach (lub katalogach)
Pliki Urządzenia zewnętrzne (drukarki, skanery, terminale...) również posiadają w swoim systemie własne, specjalne pliki, ułatwiające komunikację - /dev Również procesy (działające programy) posiadają własne procesy - /proc Nazwy max. 255 znaków, case sensitive! Prawa dostępu...
Gdzie szukać pomocy? man manual danego polecenia whatis krótki opis komendy Internet...
Komenda ls Składnia: ls -opcje Najważniejsze opcje: -l wyświetla dokładne informacje o plikach -a pokazuje pliki ukryte -s wyświetla rozmiar plików -R rekurencyjnie wyświetla zawartość katalogów wraz z podkatalogami -t wyświetla listę sortując względem czasu modyfikacji -S sortowanie wg rozmiarów plików
Komenda mkdir Tworzenie katalogów Składnia: mkdir nazwa_katalogu Opcja -p pozwala na utworzenie od razu całej gałęzi katalogów, np.: mkdir -p kat1/kat2/kat3...
Ćwiczenie: Komenda mkdir Utworzyć zestaw katalogów o następującym drzewie: zaj_2 ------kat_1 --------kat_1_1 ---------kat_1_1_1 --------kat_1_2 ---------kat_1_2_1 ---------kat_1_2_2
Ścieżka do bieżącego katalogu Komenda pwd Ćwiczenie: wykonać komendę pwd w aktualnym katalogu Wykonać komendy: cd /etc pwd Jaki jest wynik?
Ilość miejsca na dysku komenda du Komenda du służy do wyświetlania rozmiaru zajętej (i wolnej/dostępnej) przestrzeni dyskowej Składnia: du [opcje] plik Najważniejsze przełączniki: -b - podaje rozmiary w bajtach -k - podaje rozmiary w kilobajtach -m - podaje rozmiary w megabajtach -h - podaje rozmiary w ludzkiej formie -c - podsumowanie dla wszystkich plików
Tworzenie pustych plików Polecenie touch Wykonane na istniejącym pliku zmienia jego datę ostatniej modyfikacji touch nazwa_pliku Ćwiczenie: Utworzyć katalog zaj_touch utworzyć w nim pusty plik sprawdzić datę modyfikacji zmodyfikować datę modyfikacji sprawdzić poprawność wykonanego zadania
Komenda cp Kopiowanie plików i katalogów cp źródło przeznaczenie Jak skopiować katalog wraz z jego zawartością? cp -r nazwa_katalogu
Komenda cp Kopiowanie rekurencyjne Różnica między cp -r a cp -R
Usuwanie plików - rm nazwa_pliku Usuwanie pustych katalogów - rmdir nazwa_katalogu Jak usunąć niepusty katalog?
Usuwanie niepustych katalogów rm -r nazwa_katalogu opcja -f nie pytaj o potwierdzenie ( wymuszone usuwanie)
Podstawowe informacje o pliku Komenda: file nazwa_pliku
Znaki specjalne * - dopasowuje DOWOLNY ciąg znaków? - dopasowanie POJEDYNCZEGO znaki [znaki ] - dopasowuje jeden ze listy podanych znaków [^znaki ] - dopasowuje jeden znak, który NIE NALEŻY do podanej listy znaków {znaki1,znaki2,... } - dopasowuje jeden z podanych ciągów znaków np. ls *.txt wylistuje wszystkie pliki z rozszrzeniem txt
Informacje o systemie date podaje datę i czas systemowy cal wyświetla kalendarz finger: - informacje o aktualnie zalogowanych użytkownikach składnia: finger lub o konkretnym użytkowniku: składnia: finger user_id (login :)) whoami informacja o użytkowniku którym aktualnie jesteśmy
Informacje o systemie who lista zalogowanych użytkowników ZADANIE: sprawdzić jaka jest różnica między działaniem polecenia finger a who uname informacje o bieżącej maszynie
Narzędzia tekstowe cat wyświetla zawartość pliku, np.: cat /etc/passwd more wyświetla zawartość pliku strona po stronie, np.: more /etc/passwd less działa podobnie jak more, ale pozwala na poruszanie się po stronach w przód i w tył, np.: less /etc/passwd less i more wiele skrótów klawiszowych, dostępne po wciśnięciu h (q - wyjście)
Narzędzia tekstowe head wyświetla początek pliku, najważniejsze opcje: head -c X wyświetla X pierwszych znaków head -n X wyświetla Y pierwszych linii tail wyświetla koniec pliku, opcje takie same jak przy head (oczywiście w tym przypadku odnoszą się do końca pliku)
Porównywanie plików cmp porównuje pliki znak po znaku, składnia: cmp [opcje] plik1 plik2 Wiele przełączników (zajrzyj do man!), np. -c podaje różniące się znaki diff znajduje różnice między plikami; wynikiem działania polecenia jest wyświetlenie różniących się fragmentów każdego z plików wraz z informacją jakich zmian należy dokonać aby pliki stały się identyczne, np.: diff plik1 plik2
Informacje/operacje na plikach wc podaje informacje o ilości znaków/słów/linii w pliku, np.: wc -c /etc/passwd podaje liczbę znaków/bajtów wc -w /etc/passwd podaje liczbę słów w pliku wc -l /etc/passwd podaje liczbę linii w pliku
Edytory tekstu ci/vim lekki, dostępny (prawdopodobnie) wszędzie emacs potężne możliwości, również bardzo powszechny JOE łatwy w obsłudze
Kolejne polecenia Sortowanie zawartości pliku: sort [opcje] plik np.: sort jakis_plik.txt > plik_posortowany.txt posortuje linie pliku jakis_plik.txt i wynik zapisze w pliku o nazwie plik_posortowany.txt wybrane opcje: -u usuwa duplikaty -f wyłącza rozróżnianie wielkich i małych liter -r odwraca kolejność sortowania -n włącza sortowanie w trybie liczbowym (domyślnie sortowanie odbywa się wg łańcuchów znaków)
Polecenie sort cd. -k pozwala wybrać według której kolumny nastąpi sortowanie +liczba pozwala pominąć liczba pierwszych pól (domyślnie separatorem są znaki białe) -t separator pozwala zmienić typ separatora kolumn (domyślnie: znaki białe), np. sort -t ; -k 2 plik.csv posortuje plik.csv wg drugiej kolumny, używając ; jako separatora kolumn
Wyszukiwanie łańcuchów polecenie grep grep -opcje WZORZEC plik.txt Komenda poszukuje w zadanym pliku łańcucha znaków (można korzystać ze znaków specjalnych, a także tworzyć tzw. wyrażenia regularne) Najważniejsze opcje: -v wyświetla linie niepasujące do wzorca -i wyłączenie case sensitive -A liczba wyświetla liczba kolejnych linii -B liczba wyświetla liczba poprzednich linii
Potoki System umożliwia przekierowywanie standardowego wejścia/wyjścia właściwie każdego programu/komendy... Daje to potężne możliwości Potoki poleceń realizowane są za pomocą znaku, np.: cat /etc/passwd grep student wyszuka w pliku /etc/passwd linii ze słowem student
Potoki przekierowywanie operacji I/O komenda > plik przekierowuje wynik działania (wyjście) komendy do pliku (NADPISUJE w przypadku istnienia pliku o podanej nazwie) komenda >> plik przekierowuje wynik działania (wyjście) komendy do pliku (DOPISUJE na koniec pliku) komenda < plik Przekierowuje zawartość pliku do wejścia komendy/programu komenda << słowo przekierowuje wejście programu z klawiatury aż do wystąpienia zadanego słowa
Program do obsługi poczty PINE Konsolowy, ze stosunkowo przyjemnym interfejsem graficznym Pomoc dostępna cały czas u dołu ekranu
Polecenie tr Zamienia łańcuchy znaków, składnia: tr lancuch1 lancuch2 Najważniejsze przełączniki: -d usuwa podane w łańcuchu znaki -s usuwa wielokrotne występowanie podanych znaków Ćwiczenie: wyszukać swoją linijkę w pliku /etc/passwd i zamienić imię na słowo ja
Dowiązania do plików Dowiązania symboliczne a sztywne Komenda: ln plik nazwa_dowiązania dowiązanie symboliczne: ln -s plik nazwa_dowiązania Informacje o liczbie dowiązań: ls -l
Procesy, diagnostyka Wielozadaniowość wiele procesów wielu użytkowników jednocześnie Uruchamianie procesu w tle - na końcu polecenia dodajemy znaczek &, np.: sleep 100 & uruchomi proces sleep (który nic nie robi :)) w tle na zadaną ilość sekund Ctrl+Z zatrzymanie procesu Ctrl+C zabicie procesu
Polecenie ps Podaje informacje o działających procesach Podstawowe przełączniki: -A lub e wyświetla wszystkie procesy -l pełniejsze informacji o procesach -f format ekstra-peany f procesy w postaci drzewa -U numer procesy użytkownika o podanym user ID
Objaśnienia PID Process ID unikalny identyfikator każdego procesu PPID Parent Process ID identyfikator procesu-rodzica UID User ID unikalny identyfikator użytkownika PRI priorytet procesu NI poziom nice (przyjaźni ;) - uprzywilejowanie procesu
Komenda pstree Wyświetla procesy w postaci drzewa man pstree :)
Zabijanie procesów polecenie kill pozwala na wysyłanie sygnałów (specjalny typ komunikatu dla działającego procesu) Składnia: kill [-sygnał] numer_procesu Typy sygnałów: 2 (SIGINT) przerwanie procesu odpowiednik poznanego już Ctrl+c 9 (SIGKILL) zabicie procesu 19 (SIGSTOP) zawieszenie procesu (to samo gdy Ctrl+Z) 18 (SIGCONT) wznowienie zatrzymanego procesu
Zabijanie i wyszukiwanie procesów killall pozwala na zabicie wszystkich procesów o podanej nazwie, składnia: killall [-s sygnał] nazwa pgrep pozwala na na wyświetlenie numerów PID procesów o podanej nazwie, składnia: pgrep [opcje] nazwa Podstawowe przełączniki: -u nazwa wyszukiwanie wśród procesów użytkownika nazwa -l dodaje informacje do nazwy procesu
Procesy cd. pkill pozwala na wysłanie sygnału (domyślnie - zabicie) procesu o podanej nazwie, np.: pkill firefox zabije proces o nazwie firefox Można używać zarówno sygnałów, jak i przełącznika -u jobs wyświetla stan procesów uruchomionych w bieżącej powłoce (-l) top, htop...
Narzędzia sieciowe host [opcje] parametr podaje informacje o numerze IP lub nazwie hosta (na podstawie podanego numeru IP), np.: host ferm ping adres wysłanie pakietów próbnych (ICMP) na podany adres, np.: ping wp.pl traceroute cel wyświetla trasę do zadanego celu, np.: traceroute google.com
Narzędzia sieciowe write wysła wiadomość tekstową do użytkownika, składnia: write uzytkownik[@adres] talk program do interaktywnej rozmowy z użytkownikiem, np.: talk uzytkownik[@adres] mesg zablokowanie możliwości komunikacji poleceniami talk i write mesg [n y]
Poczta mail wysyłanie poczty elektronicznej, składnia: mail uzytkownik[@adres] [-s temat] [-c adres innego adresata] Przykład: > mail rjakubowski@ferm Aby wysłać treść zawartą w pliku tekstowym jest zawartość można umieścić w w strumieniu wejściowym programu, np.: cat plik_tekstowy.txt mail rjakubowski@ferm mail rjakubowski@ferm < plik_tekstowy.txt
Połączenie z innym komputerem telnet zdalne połączenie z innym komputerem telnet uzytkownik[@adres] Rzadko używany NIEBEZPIECZNY!
Połączenie z innym komputerem ssh szyfrowane połączenie ze zdalnym komputerem ssh uzytkownik[@adres] Pozwala na uruchomienie zdalnie powłoki Ćwiczenia...
VI
Uprawnienia Każdy plik może dawać inne uprawnienia dla właściciela, grupy i pozostałych osób ls -ltrh
Rodzaje uprawnień r odczyt w zapis x wykonywanie (execute) 9 znaków: - rwx rwx rwx typ pliku właściciel grupa wszyscy
Uprawnienia UWAGA: nie odbieramy sobie uprawnień zapisu/odczytu :) Zmiany uprawnień: chown zmiana właściciela pliku chown [opcje] user[:group] file chgrp zmiana grupy chgrp [opcje] grupa plik
Uprawnienia chmod zmiana uprawnień pliku chmod [opcje] uprawnienia plik Dwa rodzaje zmiany uprawnień: liczbowe i literowe Pamiętamy, że: - u user - g group - a - all
Uprawnienia chmod o+x plik dodanie możliwości wykonywania pliku właścicielowi Aby cokolwiek uruchomić (plik/skrypt) dany plik dla konkretnego użytkownika MUSI posiadać możliwość wykonywania (czyli uprawnienie x) chmod a=rwx dane.txt chmod ug=r dane.txt chmod a+r dane.txt
Uprawnienia Zapis numeryczny: zestaw trzech liczb: - 1 zapis - 2 odczyt - 4 wykonywanie Sumarycznie od 0 do 7 jednoznacznie określa uprawnienia np. chmod 700 plik
Narzędzia sieciowe ciąg dalszy ftp file transfer protocol protokół komunikacyjny typu klient-serwer, umożliwiający dwukierunkowy transfer plików Składnia: ftp user@adres sftp secured file transfer protocol szyfrowana wersja ftp, składnia analogiczna: sftp user@adres
sftp podstawowe operacje help pomoc get nazwa pobranie pliku nazwa put nazwa przesłanie pliku nazwa dir wylistowanie zawartości zdalnego katalogu quit rozłączenie Kiedy jest to możliwe ZAWSZE WARTO (należy?) stosować szyfrowane wersje protokołów
Narzędzia sieciowe scp szyfrowane kopiowanie plików z serwerów ssh i sftp Składnia: scp [-r] user@adres:/sciezka/do/pliku cel wget pobieranie zawartości zawartości stron www i serwerów ftp, umożliwia np. pobranie całej zawartości strony, np.: wget -m http://www.fizyka.umk.pl/~rjakubowski/?s=contact
Kompresja plików zip - kompresuje plików i katalogów, składnia: zip [-r] nazwa_archiwum pliki_do_spakowania Utworzony zostanie plik z rozszerzeniem.zip, kompresja całych katalogów: opcja -r bzip2 kompresuja plików, składnia: bzip2 pliki_do_spakowania
Dekompresja plików gunzip - rozpakowywanie plików *.gz oraz *.tgz, składnia: gunzip [-r] plik unzip - rozpakowywanie plików *.zip, składnia: unzip plik bunzip2 - rozpakowywanie plików *.bz2, składnia: bunzip2 plik
Archiwizacja plików tar narzędzie służące do archiwizacji, składnia: tar [opcje] pliki Pierwszą nazwą musi być nazwa tworzonego archiwum Najważniejsze opcje: - c - stwórz archiwum - x - rozpakuj archiwum - l wyświetla zawartość archiwum f - zapisz do pliku z kompresja archiwum przy użyciu programu gzip j kompresja archiwum przy użyciu bzip2 v - dodatkowe komunikaty
Wprowadzenie do tworzenia skryptów programowanie w bashu Po co nam pisanie skryptów? Pamiętamy: aby COKOLWIEK uruchomić plik MUSI mieć prawa uruchomienia (+x)
Struktura skryptu #!/bin/bash #to jest skrypt ktory wyswietla komunikat echo "Witaj swiecie!" exit 0
Struktura skryptu wybór powłoki #!/bin/tcsh - skrypt w powłoce tcsh #!/bin/bash - skrypt w powłoce Bash #!/bin/sh - skrypt w powłoce sh a nawet: #!/bin/python - skrypt w Pythonie #!/bin/perl - skrypt w Perlu
Uruchamianie skryptu bash nazwa_skryptu.bash lub:./nazwa_skryptu Adresowanie względne vs bezwzględne
Zmienne $ Powłoka dostarcza rodzinę zmiennych specjalnych $* - podaje wszystkie argumenty z którymi został uruchomiony skrypt $# - podaje liczbę argumentów z którym uruchomiono skrypt $0 podaje nazwę uruchomionego skryptu $1 $n podaje kolejne argumenty skryptu
Podstawowe instrukcje echo wypisuje tekst na standardowe wyjście (u nas zwykle będzie to ekran konsoli), np. poniższy skrypt wypisze na ekranie nazwę skryptu: #!/bin/bash echo $0
Podstawowe instrukcje read interaktywne wczytywanie znakow z konsoli, np. poniższy skrypt wczyta imię użytkownika i wyświetli je na ekranie: #!/bin/bash echo Podaj imię: read imie echo Witaj $imie
Instrukcje warunkowe - if #!/bin/bash if [ $# -eq 0 ]; then echo "Nie podano zadnych argumentow" else echo "Podano $# argumentow fi exit 0
Dostępne warunki Arytmetyczne -lt mniejsze niż, np. if [ 2 -eq 3 ]; -gt większe niż, np. if [ 4 -eq 3 ]; -ge większe lub równe, np. if [ 5 -eq 4 ]; -le mniejsze lub równe, np. if [ 4 -eq 5 ];
Dostępne warunki Plikowe -a sprawdza, czy plik istnieje, np. #!/bin/bash if [ -e jakis_plik ] then echo "jakis_plik istnieje" fi
Wybrane warunki -b plik istnieje i jest blokowym plikiem specjalnym - plik istnieje i jest plikiem znakowym -e plik istnieje -h plik istnieje i jest linkiem symbolicznym = sprawdza czy wyrażenia są równe!= sprawdza czy wyrażenia są różne -r sprawdzenie uprawnień do odczytu pliku -w sprawdzenie uprawnień do zapisywania w pliku -x sprawdzenie uprawnień do wykonywanie pliku -f plik istnieje i jest plikiem zwykłym -p plik jest łączem nazwanym -N plik istnieje i był zmieniany od czasu jego ostatniego odczytu
Pętla for for zmienna in lista_zmiennych; do instrukcje done Lub jak w C++: for (wyrazenie1; warunek;wyrazenie2) do instrukcje done
case zmienna in wartosc_1 ) instrukcje 1 ;; wartosc_2 ) instrukcje 2 ;;... *) instrukcje ;; esac Konstrukcja case
Skrypt obliczający wartość silni Wg Wiki: Silnią liczby naturalnej n (w notacji matematycznej: n!, co czytamy n silnia ) nazywamy iloczyn wszystkich liczb naturalnych nie większych niż n. 0!=1 zatem zawsze przyjmuje minimalnie wartość 0...
Pętla while Składnia: while warunek do instrukcje done
funkcje Składnia: nazwa_funkcji() { instrukcja1; instrukcja2; return 0; }
Funkcje Wywołanie funkcji: nazwa_funkcji Argumenty przekazywane podobnie jak w przypadku uruchamiania skryptu, czyli np.: funkcja jeden dwa trzy wywołuje funkcję funkcja z trzema argumentami
Funkcje zmienne globalne a lokalne Domyślnie zmienne użyte wewnątrz funkcji mają zakres globalny ryzyko nadpisania zmiennych! Aby to zmienić należy użyć dyrektywy local, np.: local i=1 wówczas czas życia zmiennej zostanie ograniczony do czasu w którym będzie wykonywana funkcja