460 likes | 608 Views
Wybrane aspekty informatyki. Wojciech St. Mościbrodzki PIN PJWSTK, Wykład dla SNM Gdańsk, 2011. echo. echo – wyświetlenie tekstu na standardowym wyjściu $echo „Hello world” Hello world Każde polecenie ma zwykle dość rozbudowany help: man <polecenie> - man, czyli (manual). tar.
E N D
Wybrane aspekty informatyki Wojciech St. Mościbrodzki PIN PJWSTK, Wykład dla SNM Gdańsk, 2011
echo echo – wyświetlenie tekstu na standardowym wyjściu $echo „Hello world” Hello world Każde polecenie ma zwykle dość rozbudowany help: man <polecenie> - man, czyli (manual)
tar tar [opcje] [plik tar] [pliki do tarowania] – program służący do archiwizacji Podstawowe opcje: -c (create) – utwórz archiwum -x (extract) – wydobądź z archiwum -t (test) – listuj zawartość archiwum -v (verbose) – wypisuj pełne komunikaty podczas pracy -r (append) – dołączaj do archiwum -f (file) – użyj pliku -z (gzip) – uzyj gzipa tar –cvf plik.tar * - archiwizacja wszystkich plików do plik.tar tar –xvf plik.tar – wypakowanie z archiwum
gzip/gunzip gzip [pilk] – kompresja pliku algorytmem LZ gunzip [pilk] – dekompresja pliku algorytmem LZ -c – bez kompresji (bywa używane jeśli plik jest już skompresowany) -l – podaje stopień kompresji -r – wejdź rekursywnie do podkatalogów -S – użyj innego rozszerzenia (standardowo .gz) -v (verbose) -t – testuj zawartość archiwum -#n stopień kompresji, gdzie n jest liczbą 1-9
ftp FTP to protokół transferu plików, typu klient-serwer (wymaga znajomości miejsca docelowego). ftp to także nazwa jednego z najprostszych programów klienckich protokołu (standardowo dołączanego do linuxa). Rolę serwera pełni zwykle program ftpd (ftp demon). Programy mogą się również nazywać inaczej, np. wsftp, ncftp itp. ftp – tak wywołujemy program klienta ftp w linuxie ftp – to także zwyczajowa nazwa użytkownika anonimowego (serwer może pozwalać na dostęp takim użytkownikiem), hasło jest nieobowiązkowe (zazwyczaj)
cat cat– najprostsze obok echo polecenie shella. Program cat przekierowuje swoje wejście na wyjście. Przykłady: cat plik.txt – wypisuje zawartość pliku plik.txt na ekranie cat plik.txt > plik2.txt – kopiuje znak po znaku zawartość jednego z plików do drugiego (przekierowanie wyjścia do pliku) cat > plik.txt – czyta z klawiatury (standardowe wejście) do pliku plik.txt
grep grep – służy do filtracji strumieni. Strumień jest odczytywany linia po linii, zaś na wyjście przedostają się tylko te linie, które są zgodne z podanym wzorcem. Tego polecenia używa się najczęściej z pipeline: cat /etc/passwd | grep wojmos – czyta plik z /etc/passwd i wypisuje na ekranie tylko linię zawierająca łańuch wojmos
Różnica między | a > Różnica między | a > jest następująca: | służy do łączenia wyjścia jednego procesu z wejściem drugiego > służy do określania pliku, który będzie pełnił rolę wyjścia dla procesu cat /etc/passwd | grep wojmos To polecenie oznacza odczytanie pliku /etc/passwd przez programik cat i przekierowanie wyjścia na wejście grep’a wywołanego z parametrem wojmos. Innymi słowy: odpalone będą dwa procesy (cat i grep) połączone ze sobą. cat /etc/passwd > grep wojmos To polecenie nie ma zbyt dużego sensu. Oznacza ono odpalenie cata, którego wyjście zostanie przekierowane do PLIKU grep (fraza wojmos będzie poddana próbie interpretacji jako parametr albo nazwa pliku). Zauważmy, że cat /etc/passwd > grep oznaczałoby wylistowanie całej zawartości pliku /etc/passwd do pliku tekstowego o nazwie grep!
awk Awk jest zaawansowanym programem do edycji strumieni tekstowych. Na razie poznajemy jego najprostszą postać, służącą do filtracji kolumn tekstu: ls –l – zwraca zawartość katalogu -rw------- 1 root root 1183 2008-02-16 03:27 anaconda-ks.cfg -rw-r--r-- 1 root root 1190 2008-12-14 10:18 grep -rw-r--r-- 1 root root 28071 2008-02-16 03:26 install.log -rw-r--r-- 1 root root 4352 2008-02-16 03:25 install.log.syslog ls –l | awk ‘{print $1 $8}’ – filtruje 1 i 8 kolumnę -rw-------anaconda-ks.cfg -rw-r--r--grep -rw-r--r--install.log -rw-r--r--install.log.syslog ls –l | awk ‘{print $1 ” ” $8}’ – filtruje 1 i 8 kolumnę rozdzielając je spacją -rw-------anaconda-ks.cfg -rw-r--r--grep -rw-r--r--install.log -rw-r--r--install.log.syslog
ls ls (list) – służy do wyświetlania zawartości katalogu (jak dir) Najczęściej stosowane opcje: -a (all) – wszystkie pliki (także ukryte, czyli zaczynające się od kropki) -A (almost all) – wszystkie poza . i .. -h (human-readable) – używane z l, podaje np. 1.3 Kb a nie 1320b -l (long form) – pełna informacja o plikach -S (sort by size) –srotuje wg wielkości
chmod chmod – zmienia atrybuty pliku, za pomocą 3 liczb pierwsza oznacza prawa dla właściciela druga – prawa dla grupy, do której należy właściciel trzecia – prawa dla pozostałych Liczby są kodowane binarnie w kolejności: Read-Write-eXecute: RWX = 111bin = 7 czyli wszystkie prawa RWX = 100bin = 4 czyli tylko read RWX = 110bin = 6 czyli tylko read i write
chown chown – zmienia właściciela pliku (i/lub) jego grupę chown wojmos plik – zmienia właściela pliku plik na użytkownika wojmos chown www.wojmos plik – zmienia właściela pliku plik na użytkownika wojmos, należącego do grupy www chown –R www.wojmos * – zmienia rekursywnie właściciela wszystkich plików na użytkownika wojmos, należącego do grupy www
mkdir mkdir – tworzy katalog o podanej nazwie
rm i rmdir rm – usuwa plik/pliki rm –r – wchodzi do podkatalogów rm –f – nie prosi o potwierdzenie rmdir – usuwa pusty katalog
cd Cd – zmienia katalog bieżący cd .. – zmienia katalog na nadrzędny cd – zmienia katalog na domowy
pico Pico – jeden z najprostszych i najprzyjemniejszych w obsłudze edytorów tekstowych. ^C – podaje numer linii ^W – szukanie ^X – zapis i wyjście ^O – zapis ^K – wytnij linię ^U – wklej linię
pwd pwd – podaje katalog, w którym jesteśmy
Skrypty Skrypt – wykonywalny programik w języku powłoki (w shellu). Musi mieć ustawiony atrybut wykonywalności. Plik powinien (choć nie musi) rozpoczynać się sekwencją: #!/bin/sh albo #!/bin/bash Co oznacza wymuszenie wykonania przez określonego shella Inne linie zaczynające się od # są interpretowane jako komentarze. Działający skrypt jest podłączony do standardowych strumieni: Wejścia (stdin), wyjścia (stdout) i błędów (stderr)
Skrypty - przekierowywanie mojskrypt > xxx.txt – przekierowanie wyjścia do pliku xxx.txt mojskrypt < ccc – przekierowanie wejścia do linii pliku ccc mojskrypt 2>errors.txt – przekierowanie błędów Standardowe strumienie mają przypisane numery, a więc można też: mojskrypt 1>xxx.txt – przekierowanie wyjścia do pliku xxx.txt mojskrypt 2>/dev/null – przekierowanie błędów do /dev/null
du du – disku usage, podaje wielkość plików w katalogu du –sh – sumuj pliki, podaj w postaci human-readable
df df – disc free, podaje wolne miejsce na dyskach
who i whoami who – podaje loginy pracujących użytkowników whoami – podaje login użytkownika
Zmienne lokalne i środowiskowe Zmienne środowiskowe to zmienne nie wymagające ustawienia: globalne - są elementem każdego shella (wykonywane skrypty dziedziczą ich wartość) lokalne – są elementem tego shella, w którym zostały zdefiniowane (wykonywane skrypty dziedziczą ich wartość) Zmienne skryptowe to zmienne ustawione w konkretnym skrypcie (formalnie są one zmiennymi lokalnymi skryptu, który do pracy wywołuje „swojego” shella) Typowe: $PATH – zmienna zawiera domyślnie przeszukiwane ścieżki $USER – użytkownik (właściciel shella) $TERM – rodzaj terminala
Zmienne lokalne i środowiskowe Wypisywanie wartości zmiennych środowiskowych: echo $PATH Zmiana wartości zmiennej w konkretnym shellu (zmienna lokalna): zmienna=”wartosc” echo $zmienna Globalizowanie zmiennej: export –n zmienna Tworzenie zmiennej globalnej (to samo co export): declare –x zmienna
Sprawdzanie zakresu widoczności zmiennych mojazmienna=”wojmos” – tworzymy zmienną echo $mojazmienna – wypisujemy wartość wojmos – to jest wartość zmiennej mojazmienna bash – wywołujemy nowego shella echo $mojazmienna – wypisujemy wartość - wartość zmiennej jest nieustawiona exit – opuszczamy shella echo $mojazmienna – wypisujemy wartość wojmos – to jest wartość zmiennej mojazmienna export –n mojazmienna bash – wywołujemy nowego shella echo $mojazmienna – wypisujemy wartość wojmos - wartość zmiennej jest nieustawiona
printenv printenv – służy do wypisywania zawartości wszystkich zmiennych środowiskowych Podobny (ale nie identyczny) efekt uzyskamy stosując export
Zmienne specjalne $$ - zawiera numer PID procesu $1...$9 – argumenty podane do wywołania $0 – nazwa skryptu, który wywołał proces $@ - wszystkie argumenty $? – kod wykonania ostatniego polecenia
Zmienne skryptu Tworzone jak zmienne środowiskowe (de facto są nimi): zmienna=wartość (nie może być spacji!) Bash dopuszcza także zmienne tablicowe: tablica=(element1 element2 element3) echo ${tablica[0]} echo ${tablica[1]} echo ${tablica[2]} lub echo ${tablica[*]} Usunięcie zmiennej: unset zmienna
Zmienne skryptu Ustawienie wartości zmiennej: zm=wartosc Przypisanie zmiennej wyniku działania polecenia (skryptu) zm=`ls –l` (tzw. odwrotny apostrof!) Zmienne łańcuchowe: Cudzysłowy – pozwalają na rozwinięcie zmiennych znajdujących się w łańcuchu do ich wartości Apostrofy – NIE pozwalają na rozwinięcie zmiennych znajdujących się w łańcuchu do ich wartości
Rozwijanie wartości zmiennych w łańcuchu Przykład: Zmienna jest rozwijana do swojej wartości: $ echo ”To jest proces. Jego PID to $$. Fajnie?” To jest proces. Jego PID to 30928. Fajnie? Zmienna nie jest rozwijana do swojej wartości: $ echo ’To jest proces. Jego PID to $$. Fajnie?’ To jest proces. Jego PID to $$. Fajnie?
Wczytywanie zmiennych z stdin read – czyta zmienną z klawiatury Przykład: read x; echo $x; Opcje: -p coś - komunikat zachęty
Pętla for Pętla for służy do iterowania poleceń wobec wartości zmiennej. Przykład listy: for x in jeden dwa trzy do echo "To jest $x”; done; jeden dwa trzy
Pętla for Pętla for służy do iterowania poleceń wobec wartości zmiennej. Przykład listy związanej z plikie: for x in `cat plik` do echo "To jest $x”; done; X1 X2 X3
Sprawdzanie warunku if Postać instrukcji if: if warunek then polecenie1; else polecenie2; fi; warunek jest zwykle realizowany poleceniem test. Polecenie to zapisuje się przeważnie w skróconej formie: [ ] Przykład: [ $zm = ” napis” ]
Przykład if Typowy przykład działania test w połączeniu z if: #!/bin/sh zm="R2"; if [ $zm = "R" ] then echo "OK"; else echo "NOT OK"; fi;
Parametry dla test • -a plik istnieje • -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 • -n wyrażenie ma długość większą niż 0 • -d wyrażenie istnieje i jest katalogiem • -z wyrażenie ma zerową długość • -r można czytać plik • -w można zapisywać do pliku
Parametry dla test • -x można plik wykonać • -f plik istnieje i jest plikiem zwykłym • -p plik jest łączem nazwanym • -N plik istnieje i był zmieniany od czasu jego ostatniego odczytu • plik1 -nt plik2 plik1 jest nowszy od pliku2 • plik1 -ot plik2 plik1 jest starszy od pliku2 • -lt mniejsze niż • -gt większe niż • -ge większe lub równe • -le mniejsze lub równe
If sprawdzający, czy plik istnieje #!/bin/sh zm="R2"; if [ -e /etc/passwd ] then echo "OK"; else echo "NOT OK"; fi;
at at –f plik data – wykonuje plik o oznaczonym czasie
Shell • Shell, czyli powłoka, jest środowiskiem, w którym uruchamiane są skrypty. Środowisko to zawiera pewien zestaw zmiennych (zmienne środowiskowe), można także tworzyć w nim dodatkowe zmienne lokalne. • Typowe shelle: • sh (podstawowy) • ash • bsh (Bourne shell) • csh • ksh • bash (tzw. Bourne-again shell) - najpopularniejszy
Skrypty • Skrypty shella powinny (formalnie – nie muszą) zaczynać się od komentarza, który określa rodzaj shella, którym powinny być interpretowane. • #!/bin/sh • Powyższa linia, choć jest komentarzem ZOSTANIE przetworzona: dla uruchomienia tego skryptu zostanie wywołany shell sh • Mechanizm ten służy do zabezpieczania skryptów napisanych w jednym shellu przed błędnym wykonaniem w innym.
Zmienne shella • Dostęp do zmiennej shella odbywa się poprzez jej nazwę. • Utworzenie zmiennej: • x=5; • UWAGA! Shell jest dość stary językiem, dlatego stosuje przestarzałe metody parsowania – m.in. Jest „czuły na spacje”. • Poniższy zapis NIE JEST poprawny: • x = 5;
Wartość zmiennej • Dostęp do wartości zmiennej uzyskujemy przez operator $: • Na przykład: • echo $x; • echo ”$x”; • W przypadku 2 zmienna zostanie skonwertowana na łańcuch tekstowy równy wartości zmiennej (zgodnie z regułami rozwijania zmiennych w cudzysłowach) • echo ‘$x’; - wypisuje po prostu napis: $x
Zmienne specjalne • Najczęściej używane zmienne specjalne to: • $# - liczba parametrów polecenia • Przykładowo, skrypt o nazwie moj: • #!/bin/sh • echo $#; • Przy wywołaniu ($ - znak zachęty shella): • $ ./mój Alfa Beta Gamma • Zwraca: • 3
Inne ważne zmienne: • $@ - zawiera wszystkie parametry przekazane • #!/bin/sh • echo "Parametry: $@"; • echo "Liczba parametrow: $#"; • $ ./my Alfa Beta Gamma • Parametry: Alfa Beta Gamma • Liczba parametrow: 3 • $$ - PID (process ID) • #!/bin/sh • echo „PID: $$";
Wyrażenia • Do ustalania wartości wyrażeń służy polecenie expr • UWAGA: pamiętać należy o spacjach! • expr 3+3; <===== zwraca NAPIS 3+3 • expr 3 + 3; <===== zwraca WARTOSC 6 • Do testowania wartości wyrażeń służy [] (test): • Jest on stosowany najczęściej z instrukcją if: • if [ 3 –ge 2 ]; • then • echo ”3 jest wieksze”; • else • echo ”3 jest mniejsze”; • fi;