Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 1. LINUX COMMAND LINE BASH I PRZYJACIELE Oskar Wyciślak (oskar.wycislak@gmail.com)
- 2. Agenda
- Co to jest powłoka?
- Bash
- Interaktywna praca
- Metody wprowadzania (emacs, vi)
- Pliki i katalogi
- Historia i jej przeszukiwanie
- Pliki konfiguracyjne
- .bashrc
- .bash_profile
- Zmienne
- Specjalne zmienne
- Strumienie i potoki
- Przydatne komendy
- Wczytywanie danych
- Co to jest skrypt?
- Pierwszy skrypt 2 oskar.wycislak@gmail.com
- 3. Agenda dzień 2
- Dopełnianie
- Arytmetyka
- Instrukcje warunkowe
- Logika
- Pliki (czy istnieje np.)
- If / case
- test
- Pętle
- for
- while
- until
- Funkcje
- Praca w tle
- Pułapki i sygnały
- Tablice 3 oskar.wycislak@gmail.com
- 4. Czym jest powłoka?
- Program uruchamiający inne programy
- Interfejs między użytkownikiem a systemem (jądrem).
- Typy powłok
- Tekstowe
- Bash, linia poleceń windows
- Graficzne
- Windows explorer, fluxbox, xfce, kde, gnome 4 oskar.wycislak@gmail.com
- 5. Bash <xxx> Pomorze ktos? <Unf> Niestety, mazowsze. <kubaaa> co robisz ? <kambys> nic <kambys> w pracy jestem 5 oskar.wycislak@gmail.com
- 6. Bash – Bourne again shell Brian Fox Stworzył bash’a jak miał 30 lat. To znaczy, że mamy jeszcze czas! Jedna z najpopularniejszych powłok systemów Unixowych. Standard w większośći dystrybucji Linux’a oraz w OS X. 6 oskar.wycislak@gmail.com
- 7. Praca interaktywna - emacs
- bash/set –o emacs – standardowo
- C(ctrl)-a – początek linii
- C-e – koniec linii
- C-f –znak do przodu
- C-b –znak do tyłu
- A(alt)-f – słowo do przodu
- Słowo – litery i cyfry, znak specjalny przerywa słowo
- A-b – słowo do tyłu
- C-l – czyści ekran (clear)
- C-k – kasuje wszystkie znaki za kursorem oraz znak pod kursorem
- C-u – kasuje wszystkie znaki przed kursorem
- C-w – kasuje jedno słowo przed kursorem
- A-d – kasuje jedno słowo za kursorem
- C-x C-u – cofnij
- C-x C-e – otwiera edytor do edycji komend
- A-# – komentuje linię i rozpoczyna nową 7 oskar.wycislak@gmail.com
- 8. Praca interaktywna – vi
- bash/set –o vi (tryb wprowadzania – input mode)
- esc – tryb poleceń
- i – wstaw znak przed kursorem
- a – wstaw znak za kursorem
- x – skasuj znak pod kursorem
- h, l – lewo prawo, jeden znak
- w, b – początek poprzedniego, kolejnego słowa
- 0, ^, $ - bezwzględny początek, pierwszy niebiały znak, koniec linii
- % - pasujący nawias
- D – kasuje wszystkie znaki za kursorem oraz znak pod kursorem
- C-u – kasuje wszystkie znaki przed kursorem
- u – cofnij
- U – cofnij wszystkie
- A(alt)-# - komentuje linię i rozpoczyna nową Można też # w trybie poleceń 8 oskar.wycislak@gmail.com
- 9. Pliki i katalogi
- ls – wyświetla listę plików oraz katalogów
- -l – wyświetla informacje w postaci listy
- -a – pokazuje również ukryte pliki i katalogi
- pwd – pokazuje w jakim znajdujemy się aktualnie katalogu
- cd – zmienia aktualny katalog na inny
- chmod – zmienia uprawnienia
- chown – zmienia właściciela
- mkdir – tworzy katalog
- -p – tworzy od razu całą ścieżkę
- cp – kopiuje plik lub katalog
- mv – przenosi plik lub katalog
- rm – usuwa plik lub katalog 9 oskar.wycislak@gmail.com
- 10. Drzewo katalogów 10 oskar.wycislak@gmail.com
- 11. Historia
- history
- ~/.bash_history
- shopt -s histverify
- Zmienne środowiskowe
- HISTFILE, HISTLIFE, HISTSIZE
- HISTCONTROL
- ignorespace:ignoredups
- !, !!, !n, !-2
- !!:gs/foo/bar/ - substytucje jak w sedzie
- sudo !!
- cd - to też historia ;-) 11 oskar.wycislak@gmail.com
- 12. Wyszukiwanie w historii CTRL+ 12 oskar.wycislak@gmail.com
- 13. Pliki konfiguracyjne
- .bashrc Wykonuje się z każdym odpaleniem powłoki zmienne, funkcje, etc
- /etc/bashrc
- ~/.bashrc
- .bash_profile Wykonuje się za każdym interaktywnym logowaniem uptime, motd, etc
- /etc/profile
- ~/.bash_profile
- Często załącza .bashrc http://tldp.org/LDP/abs/html/sample-bashrc.html 13 oskar.wycislak@gmail.com
- 14. Zmienne
- Czym jest zmienna?
- Deklaracja zmiennych w Bash’u
- bash$ zmienna=“wartość”;
- bash$ unset zmienna;
- export – zmienne lokalne oraz globalne
- env i set
- Wynik komendy w zmiennej
- Średni sposób – bash$ zmienna=`ls`; - ``
- Dobry sposób – bash$ zmienna=$(ls); - $() 14 oskar.wycislak@gmail.com
- 15. Zmienne specjalne
- $1, $2, $3 … $(10), $(11), … - parametry
- $# - liczba przekazanych parametrów
- $@ - tablica ze wszystkimi parametrami
- Bardzo ważne – używając zmiennej $@ koniecznie brać ją w cudzysłów ( “$@” ). W przeciwnym wypadku przy iteracji np. w pętli mogą wystąpić problemy z przekazanymi parametrami.
- $* - wszystkie parametry jako string
- $0 – nazwa skryptu
- $$ - PID procesu
- $? – kod wyjścia ostatniej komendy
- $! – PID ostatniego procesu odpalonego w tle 15 oskar.wycislak@gmail.com
- 16. Zmienne systemowe
- $HOME – katalog domowy
- $HOSTNAME – nazwa hosta
- $IFS – osobny slajd
- $OLDPWD (cd -) – poprzedni katalog
- $PATH – ścieżka wyszukiwania
- $PPID – PID procesu matki
- $PS1 – osobny slajd
- $PWD – aktualny katalog
- $RANDOM – losowa liczba całkowita http://tldp.org/LDP/abs/html/internalvariables.html 16 oskar.wycislak@gmail.com
- 17. IFS – wewnętrzny separator pól IFS jest używany przez Bash do rozpoznawania słów (lub linii). Standardowo jest to znak biały, spacja, tabulator oraz znak nowej linii. mbp:~ canto$ IFS=“:" && for i in $(echo ”a:b:c:d"); do echo $i; done a b c d mbp:~ canto$ IFS=$’n’ && for i in $(cat); do echo $i; done a b c d aD b c d 17 oskar.wycislak@gmail.com
- 18. IFS cd.
- Dlaczego $’n’ a nie po prostu “n”?
- $’n’ – jeden bajt mbp:~ canto$ echo -n $'n' | hexdump 0000000 0a 0000001
- “n” – dwa bajty mbp:~ canto$ echo -n "n" | hexdump 0000000 5c 6e 0000002 18 oskar.wycislak@gmail.com
- 19. PS1 19 oskar.wycislak@gmail.com
- 20. Strumienie
- Strumienie
- stdin – standardowe wejście, fd 0
- stdout – standardowe wyjście, fd 1
- stderr – strumień błędów, fd 2
- Przekierowanie strumienia
- Wejścia <
- Wyjścia >
- Wyjścia do fd >&n 20 oskar.wycislak@gmail.com
- 21. Potoki
- Potok, pipe, |
- Mechanizm komunikacji między procesami
- Najczęściej łączy stdout pierwszego procesu z stdin drugiego cat plik | sed coś | grep coś | sort 21 oskar.wycislak@gmail.com
- 22. Przydatne komendy i przełączniki
- man
- echo
- touch
- cat
- grep
- seq
- cut
- sort
- uniq
- paste
- less
- more Find head Tail tee Awk sed tr ps which wc wget/curl md5sum/digest 22 oskar.wycislak@gmail.com
- 23. man, info, whatis/apropos
- man man
- -s - Sekcje
- 1 komendy
- 2 wywołania systemowe (syscall)
- 3 funkcje bibliotek
- 4 pliki specjalne
- 5 format plików
- 6 gry i wygaszacze ekranu
- 7 różne
- 8 komendy i demony administracyjne
- 9 wewnętrzne funkcje jądra
- /usr/share/man, /usr/share/man/whatis
- /usr/share/info 23 oskar.wycislak@gmail.com
- 24. echo, touch, cat
- echo – wyświetla dany tekst
- -n
- -e
- Echo… echo… Wbudowane oraz /bin/echo
- touch – uaktualnia ostatni czas dostępu oraz modyfikacji
- Zwykle używany do tworzenia nowego pustego pliku
- cat – łączy oraz wyświetla pliki
- -v – wyświetla także znaki kontrolne
- tac – odwrotność cat 24 oskar.wycislak@gmail.com
- 25. grep
- grep – Jedno z najczęściej używanych narzędzi, wyświetla linie pasujące do wzorca
- -R – wyszukiwanie rekursywne
- -A – pokaż n lini za znalezionym wzorcem
- -B - pokaż n lini przed znalezionym wzorcem
- -C - pokaż n lini za i przed znalezionym wzorcem
- -c – pokaż ilość znalezionych lini
- -i – ignoruje wielkość liter
- -v – pokaż linie niepasujące do wzorca
- -q – tryb cichy, nie wyświetla nic. Wychodzi z kodem błędu 0 jeśli wzorzec pasował lub 1 jeśli nie znaleziono pasujących linii bash$ netstat -an | grep -i listen bash$ grep –v –e ^# -e ^$ /etc/apache2/httpd.conf 25 oskar.wycislak@gmail.com
- 26. seq, cut
- seq – tworzy sekwencję liczb
- -s – string pomiędzy liczbami, standardowo jest to nowa linia bash$ for i in $(seq 1 255); do ping -c 1 192.168.1.$i & done
- cut – wycina zdefiniowane fragmenty pliku
- -d – znak rodzielający
- -f – pola, które zostaną wyświetlone
- n, n,m, n-m bash$ cut -d : -f 1,5 /etc/passwd bash$ for i in $(seq 1 255); do ping -c 1 192.168.1.$i | grep “bytes from” | cut -d " " -f4 | cut -d : -f1 & done 26 oskar.wycislak@gmail.com
- 27. sort
- sort – sortuje plik tekstowy
- -n - sortowanie numeryczne
- -r - odwraca wynik sortowania
- -f - ignoruje wielkość liter
- -T - katalog na plik tymczasowy, bardzo przydatne przy sortowaniu plików większych niż ilość pamięci RAM
- -u - nie wyświetla duplikatów
- -k - ustaw klucz sortowania na pozycji n
- -t - separator pól, często używane razem z –k bash$ sort –u –n –t. –k1,1 –k2,2 –k3,3 –k4,4 ip 27 oskar.wycislak@gmail.com
- 28. uniq
- uniq – filtruje unikalne linie w pliku. Plik musi być posortowany
- -u – pokaż tylko unikalne linie
- -d – pokaż tylko zduplikowane linie
- -c – pokaż ilość wystąpień każdej linii
- -i – ignoruj wielkość liter bash$ sort –n –t. –k1,1 –k2,2 –k3,3 –k4,4 ip | uniq -c 28 oskar.wycislak@gmail.com
- 29. paste, less, more
- paste – wyświetla linie plików obok siebie
- less – pozwala przeglądać zawartość pliku
- -f, działa jak tail –f, podąża za zmianami w pliku
- more – uboga wersja less’a 29 oskar.wycislak@gmail.com
- 30. find
- find – wyszukuje pliki lub foldery
- -type – typ
- b - urządzenie blokowe
- c – urządzenie “wskazujące”
- d – katalog
- f – plik
- l – link symboliczny
- p – kolejka fifo
- s – gniazdo (socket)
- -name – nazwa
- -iname – nazwa bez rozróżniania wielkości liter
- --maxdepth – “głębokość” wyszukiwania
- -mtime, -atime, -ctime – czas od ostatniego zmodyfikowania, dostępu, stworzenia pliku
- -exec – uruchomienie komendy, {} przekazuje ścieżkę
- -ls – wykonuje ls na każdym znalezionym pliku/katalogu
- -size – określa wyszukiwaną wielkość pliku
- Logika - -and, -not, -or bash$ find /var/log -type f -mtime +30d -ls bash$ find /var/log -type f -mtime +30d -exec ls -la {} ; bash$ find / -type f ( -perm 4000 -or -perm 2000 ) -ls 30 oskar.wycislak@gmail.com
- 31. head, tail, tee
- head – wyświetla n pierwszych linii pliku
- tail – wyświetla n ostatnich linii pliku
- -f – tail będzie czekał aż na końcu pliku pojawią się nowe dane I je wyświetli
- -F – lepsza wersja –f, nie wszędzie dostępna
- tee – przyrządza herbatę kopiuje stdin do stdout oraz do pliku. Bardzo przydatne przy logowaniu bash$ netstat -an| tee /tmp/tee.out 31 oskar.wycislak@gmail.com
- 32. awk
- AWK – interpretowany język programowania bash$ cat /etc/passwd | awk –F ‘:’ ‘{print $1 “ “ $5}’ bash$ awk 'length > 64’ /etc/passwd bash$ awk NF plik bash$ awk 'FS=":" { if ($3 == 0) {print $0} }' /etc/passwd 32 oskar.wycislak@gmail.com
- 33. sed
- sed – edytor strumieniowy, używany do edycji tekstu bash$ sed s/jedno/drugie/ plik bash$ sed s/jedno/drugie_zawsze/g plik bash$ sed s/jedno/drugie/g plik1 > plik2 bash$ sed –i s/jedno/drugie/g plik1 bash$ sed ‘/^$/d’ plik bash$ sed ‘5d’ ~/.ssh/known_hosts 33 oskar.wycislak@gmail.com
- 34. tr
- tr – zamienia znak w strumieniu
- -d – usuwa znak
- [:class:] – zestaw znaków
- alnum – znaki alfanumeryczne
- alpha – znaki alfabetu
- blank – białe znaki
- cntrl – znaki kontrolne
- digit – cyfry
- lower – małe litery
- upper – wielkie litery bash$ tr ‘[:lower:]’ ‘[:upper:]’ bash$ tr ‘n’ ‘ ‘ 34 oskar.wycislak@gmail.com
- 35. ps
- ps – wyświetla status procesów
- -a – pokaż procesy innych użytkowników
- -x – pokaż procesy bez terminali
- -u – pokaż formacje o procesach
- -o – opcje
- user, pid, ppid, pgid, sess, jobc, state, tt, time, comm 35 oskar.wycislak@gmail.com
- 36. Wczytywanie danych
- read – wczytuje stdin do zmiennej/zmiennych while IFS=: read name passwd uid gid fullname ignore do echo "$name $fullname" done < /etc/passwd 36 oskar.wycislak@gmail.com
- 37. Czym jest skrypt?
- Listą komend dla interpretera
- Narzędziem pracy administratora 37 oskar.wycislak@gmail.com
- 38. Po co nam skrypty?
- Automatyzować powtarzalne zadania
- Udostępniać funkcjonalność dla innych użytkowników systemu
- Upraszczać skomplikowane zadania
- Planować pracę 38 oskar.wycislak@gmail.com
- 39. Pierwszy skrypt #!/bin/bash #mój pierwszy super skrypt! - komentarz echo “Witaj świecie”; 39 oskar.wycislak@gmail.com
- 40. Prosty skrypt wykonujący kopie zapasowe #!/bin/bash #To jest pierwsza bardzo prosta wersja skryptu do kopii zapasowych. #W kolejnej części będziemy ten skrypt ulepszać i dodawać nowe funkcjonalności echo "Kopiuje pliki starsze niz 30 dni z /var/log do /var/backup"; mkdir -p /var/backup; find /var/log/ -type f -mtime +30 | xargs tar -zcvf /var/backup/bak-$(date "+%d%m%y").tar.gz find /var/log/ -type f -mtime +30 –exec rm -f {} ; echo "Koniec." 40 oskar.wycislak@gmail.com
- 41. Dopełnianie i rozwijanie
- TAB
- Komend
- Nazw plików
- Nazw zmiennych
- Nawiasy klamrowe [canto@localhost ~]$ echo {a..z} a b c d e f g h i j k l m n o p q r s t u v w x y [canto@localhost ~]$ echo /var/tmp/{oskar,zdzisiek,marta.*} /var/tmp/oskar /var/tmp/zdzisiek /var/tmp/marta.* 41 oskar.wycislak@gmail.com
- 42. Zamiany zmiennych (-.-)
- ${foo:-bar}
- Jeśli foo puste lub nie istnieje wyświetl bar, w przeciwnym wypadku wyświetl foo – zamiana
- ${foo:=bar}
- Tak jak powyżej z tą różnicą, iż zamiast zamiany następuje przypisanie (permamentne)
- ${foo:?bar}
- Jeśli foo jest puste lub nie istnieje zwróć błąd (stderr) i bar, w przeciwnym wypadku zwróć foo
- ${foo:+bar}
- Jeśli foo jest puste lub nie istnieje nie rób nic. Jeśli istnieje lub niepuste zamień na bar (zamiana)
- ${#foo}
- Zwraca długość foo lub ilość elementów jeśli foo jest tablicą
- ${foo:ofset:długość}
- Wyświetl długość znaków foo zaczynając od ofset 42 oskar.wycislak@gmail.com
- 43. Ciekawsze zamiany zmiennych (-.-)
- ${foo#bar}
- Jeśli bar (regex) pasuje do początku foo wtedy zwróć foo pozbawiony tekstu do pierwszego dopasowania
- ${foo##bar}
- To samo co powyżej jednak zwraca foo pozbawione tekstu aż do ostatniego dopasowania [canto@localhost ~]$ export foo=/var/tmp/jacek.txt.bak.old [canto@localhost ~]$ echo ${foo#*.} txt.bak.old [canto@localhost ~]$ echo ${foo##*.} old
- ${foo%bar}
- Podobnie jak w przypadku „#” lecz zwraca foo pozbawione tekstu do pierwszego dopasowania od końca foo
- ${foo%%bar}
- Jak wyżej lecz po ostatnim dopasowaniu od końca foo [canto@localhost ~]$ echo ${foo%.*} /var/tmp/jacek.txt.bak [canto@localhost ~]$ echo ${foo%%.*} /var/tmp/jacek 43 oskar.wycislak@gmail.com
- 44.
- ${foo/wzorzec/bar}
- Zamień (jeden) wzorzec w foo na bar
- Jeśli wzorzec zaczyna się od
- / - zamień wszystkie wystąpienia
- # - dopasuj od początku foo
- % - dopasuj od końca foo [canto@localhost ~]$ echo $foo a b c d e f g h i j k l m n o p q r s t u v w x y z+n [canto@localhost ~]$ echo ${foo//n/Z} a b c d e f g h i j k l m Z o p q r s t u v w x y z+Z [canto@localhost ~]$ echo ${foo/n/Z} a b c d e f g h i j k l m Z o p q r s t u v w x y z+n 44 oskar.wycislak@gmail.com
- 45. Arytmetyka
- $((2+2*2))
- ++foo, --foo, foo++, foo--
- &&, ||
- Operacje logiczne (I i LUB)
- &, |, ^
- Operacje bitowe (I, LUB, XOR)
- <=, >=, <, >, ==, != 45 oskar.wycislak@gmail.com
- 46. Instrukcje warunkowe if warunek then pracuj fi 46 oskar.wycislak@gmail.com
- 47. if warunek then pracuj else obijaj się fi 47 oskar.wycislak@gmail.com
- 48. [canto@localhost ~]$ if [ -f /var/log/messages1 ] > then > echo "Plik istnieje"; > else > echo "Plik NIE istnieje"; > fi Plik NIE istnieje 48 oskar.wycislak@gmail.com
- 49. [ vs [[
- [[, lepsze, nowsze, ciekawsze, więcej funkcji
- Dostępne tylko w bashu
- &&, ||, =~
- [, dobre, przenośne 49 oskar.wycislak@gmail.com
- 50. test
- !, negacja wyrażenia
- WYRAŻENIE -a WYRAŻENIE, „AND”, „i” oba wyrażenia są prawdziwe
- WYRAŻENIE -o WYRAŻENIE, „OR”, „lub” jedno z wyrażeń jest prawdziwe Powyższe są niezalecane, nie powinno się ich używać a zamiast nich używać [[.
- -b, plik istnieje i jest urządzeniem blokowym
- -c, plik istnieje i jest urządzeniem znakowym
- -d, plik istnieje i jest katalogiem (w linuxie wszystko jest plikiem ;-)
- -e, plik istnieje
- -f, plik istnieje i jest „normalnym” plikiem
- -h, plik istnieje i jest linkiem symbolicznym
- -k, plik istnieje i ma ustawiony sticky bit
- -r, plik istnieje i mamy prawa do jego odczytu
- -s, plik istnieje i ma wielkość większą niż 0
- -w, plik istnieje i mamy prawo do zapisu w nim
- -x, plik istnieje i mamy prawo do wykonania
- TEXT == TEXT, prawda jeśli teksty są takie same
- TEXT != TEXT, prawda jeśli teksty są różne
- -eq, -ne, -ge, -gt, -le, -lt, porównywanie liczb, prawda jeśli, równe, różne, większe równe, większe, mniejsze równe, mniejsze 50 oskar.wycislak@gmail.com
- 51. case case "$1" in start) # $1 == „start” start ;; stop) # $1 == „stop” stop ;; status) # $1 == „status” status ;; *) # $1 =~ „*”, czyli reszta echo $"Usage: $0 {start|stop|restart}" exit 1 esac 51 oskar.wycislak@gmail.com
- 52. Przykład #!/bin/bash if [ -w "$1" ] then echo "Plik istnieje i mozemy do niego pisac"; wielkosc=$(du $1 | awk '{print $1}'); echo "Jego wielkosc to $wielkosc bajt/y/ow"; elif [ -f "$1" ] then echo "Plik istnieje ale nie mozemy do niego pisac"; else echo "Plik nie istnieje - $1"; fi 52 oskar.wycislak@gmail.com
- 53. Przykład nr 2 #!/bin/bash if [ $1 == "costam" ] then echo "OK" else echo "NOK" fi 53 oskar.wycislak@gmail.com
- 54. Przykład nr 2 lepiej #!/bin/bash if [ x$1 == "xcostam" ] then echo "OK" else echo "NOK" fi 54 oskar.wycislak@gmail.com
- 55. Przykład nr 3 #!/bin/bash if [ x$1 == "x" ] then echo "Uzycie $0 nazwa_uzytkownika"; exit 1 fi grep -q $1 /etc/passwd if [ $? -eq 0 ] then echo "Uzytkownik $1 istnieje"; else echo "Uzytkownik $1 nie istnieje"; fi 55 oskar.wycislak@gmail.com
- 56. backup.sh #!/bin/bash co=${1:-"/var/log"}; gdzie=${2:-"/var/backup"}; if [ ! -d $co ] then echo "Katalog $co nie istnieje"; exit 1 fi echo "Kopiuje pliki starsze niz 30 dni z $co do $gdzie"; mkdir -p $gdzie; find $co -type f -mtime +30 | xargs tar -zcvf $gdzie/bak-$(date "+%d%m%y").tar.gz find $co -type f -mtime +30 .exec rm -f {} ; echo "Koniec." 56 oskar.wycislak@gmail.com
- 57. Pętle
- for
- while
- until 57 oskar.wycislak@gmail.com
- 58. for for ZMIENNA in LISTA do PRACA; done 58 oskar.wycislak@gmail.com
- 59. for [canto@localhost ~]$ for i in a b c d; do echo $i; done a b c d 59 oskar.wycislak@gmail.com
- 60. for, ciekawszy przykład [canto@localhost ~]$ for i in *; do echo $i; done backup.sh d.sh f.sh hardcopy.2 nltk_data space.sh s.sh veelobot 60 oskar.wycislak@gmail.com
- 61. for, jeszcze ciekawszy przykład for i in $(netstat -an | grep ^tcp | grep -v LISTEN | awk '{print $5}' | awk -F ":" '{print $1}'); do whois $i; done 61 oskar.wycislak@gmail.com
- 62. for [canto@localhost ~]$ for host in $(cat plik_z_hostami); do ping -c1 $host; done [canto@localhost ~]$ for host in $(cat plik_z_hostami); do scp /var/log/{messages,authlog,syslog, costam_jeszcze} –i ~/.ssh/mój_tajny_klucz ja@$host:/backup/logs/; done 62 oskar.wycislak@gmail.com
- 63. while
- while WARUNEK_JEST_PRAWDZIWY do coś coś coś done
- W praktyce najczęściej używane do pętli nieskończonych while true do ping -c1 host.domain; sleep 10; done 63 oskar.wycislak@gmail.com
- 64. until
- until WARUNEK_BĘDZIE_PRAWDZIWY do coś coś coś; done
- until działa podobnie jak while z tą różnicą, że zawartość wykonuję się dopóki warunek nie będzie prawdziwy włącznie num=1; until [ $num -eq 3 ] do ((num++)); echo $num; done 2 3 64 oskar.wycislak@gmail.com
- 65. break i continue
- break przerywa pętlę
- continue przechodzi do kolejnej iteracji
- Działa dla pętli for, while, until i select 65 oskar.wycislak@gmail.com
- 66. Funkcje
- Funkcja, zbiór komend
- function NAZWA { CIAŁO_FUNKCJI; } NAZWA() { CIAŁO_FUNKCJI; }
- Parametry, działają tak samo jak w skrypcie, tj $1..$n 66 oskar.wycislak@gmail.com
- 67. Praca w tle
- jobs, wyświetla liczbę zadań
- bg, wznawia zadanie w tle
- fg, wznawia zadanie
- kill, wysyła sygnał
- &, praca w tle
- Ctrl+z, przerwij 67 oskar.wycislak@gmail.com
- 68. Pułapki i sygnały
- Sygnał, co to jest sygnał
- Lista sygnałów w linuxie
- 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP
- 6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1
- 11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM
- 16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
- 21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ
- 26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR
- 31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3
- 38) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8
- 43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
- 48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
- 53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX- 7
- 58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX- 2
- 63) SIGRTMAX-1 64) SIGRTMAX 68 oskar.wycislak@gmail.com
- 69. trap oskar.wycislak@gmail.com 69
- trap, przechwytuje sygnały
- 70. backup.sh oskar.wycislak@gmail.com 70 #!/bin/bash #Prosty skrypt do backupow # # version 0.1 - 06.5.2013 - Oskar Wycislak #funkcja szukajaca i pakujaca pakuj() { if [ ! -d $1 ] then echo "Katalog $1 nie istnieje"; exit 1 fi echo "Kopiuje pliki starsze niz 30 dni z $1 do $2"; mkdir -p $2; find $1 -type f -mtime +30 2>/dev/null | xargs tar -zcvf $2/bak-$(date "+%d%m%y")- $RANDOM.tar.gz; }
- 71. backup.sh oskar.wycislak@gmail.com 71 #kasowanie plikow kasuj() { find $1 -type f -mtime +30 -exec rm -f {} ; 2>/dev/null } co=${1:-"/var/log"}; gdzie=${2:-"/var/backup"};
- 72. backup.sh oskar.wycislak@gmail.com 72 #ignoruj sygnal INT (ctrl+c) trap "" SIGINT; #dla kazdego katalogu podanego jako 1 parametr for katalog in $co do #wykonaj funkcje pakujaca pakuj $katalog $gdzie; done echo "Koniec."
- 73. Tablice
- tablica=(raz dwa trzy)
- echo ${tablica[1]}
- unset ${tablica[1]} [canto@localhost ~]$ for i in ${tablica[@]}; do echo $i; done raz dwa trzy 73 oskar.wycislak@gmail.com
- 74. Dodatki
- alias ls='echo "Segmentation Fault”’ mbp:~ canto$ ls –la Segmentation Fault -la
- alias ls='echo "Segmentation Fault"; echo > /dev/null’ mbp:~ canto$ ls –la Segmentation Fault 74 oskar.wycislak@gmail.com
- 75. oskar.wycislak@gmail.com 75 :(){ :|:& };:
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement