Powłoka systemu Linux. Bash, awk, sed, grep, itp.
Jak sprawnie poruszać się w Bashu. Sztuczki i kruczki.
Opis najczęściej używanych komend.
Oneliners - jednolinijkowce i proste skrypty.
In Polish.
Warsztaty: Podstawy PHP
Część 2: Omówienie składni języka PHP (wersja 7)
Prowadzący: Krzysztof Ożóg, CTO Codesushi
Omówienie składni języka PHP (wersja 7):
1) Instalacja interpretera języka PHP
2) Deklaracja zmiennych i stałych
3) Operatory i ich priorytet
4) Struktury kontrolne
5) Definiowanie funkcji
6) Alternatywna składnia, czyli PHP jako system szablonów
7) Model obiektowy
a) Klasy
b) interface -y
c) Dziedziczenie
d) Magic methods
e) Autoloader
f) Obsługa błędów i wyjątków
g) PDO - interface komunikacji z bazami danych
h) Omówienie biblioteki standardowej PHP
i) Omówienie rozszerzenia SPL
j) Standardy PSR
k) Standardy kodowania PSR-1 i PSR-2
l) Composer, standardy PSR-0 i PSR-4 i Packagist
Warsztaty: Podstawy PHP
Część 2: Omówienie składni języka PHP (wersja 7)
Prowadzący: Krzysztof Ożóg, CTO Codesushi
Omówienie składni języka PHP (wersja 7):
1) Instalacja interpretera języka PHP
2) Deklaracja zmiennych i stałych
3) Operatory i ich priorytet
4) Struktury kontrolne
5) Definiowanie funkcji
6) Alternatywna składnia, czyli PHP jako system szablonów
7) Model obiektowy
a) Klasy
b) interface -y
c) Dziedziczenie
d) Magic methods
e) Autoloader
f) Obsługa błędów i wyjątków
g) PDO - interface komunikacji z bazami danych
h) Omówienie biblioteki standardowej PHP
i) Omówienie rozszerzenia SPL
j) Standardy PSR
k) Standardy kodowania PSR-1 i PSR-2
l) Composer, standardy PSR-0 i PSR-4 i Packagist
The document provides an overview of the display advertising ecosystem and strategies for optimizing campaigns on Invite Media's platform. It discusses key concepts like audience buying, real-time bidding, ad networks, exchanges, and DSPs. It also outlines Invite Media's services for advancing strategies around the consumer journey, real-time bidding, and generating insights. The document provides guidance on components for success, getting started, consolidating buys, and optimizing campaigns.
Sejarah perkembangan kurikulum sejak indonesia merdekaKurosaki_akira
Kurikulum di Indonesia telah mengalami perkembangan sejak masa kemerdekaan, mulai dari Rencana Pelajaran 1947 hingga Kurikulum Tingkat Satuan Pendidikan (KTSP) 2006. Setiap kurikulum dikembangkan dengan mempertimbangkan kondisi sosial, budaya, dan tujuan pendidikan pada masanya. Kurikulum terus disempurnakan untuk meningkatkan kualitas pendidikan di Indonesia.
How to generate those leads all day everydayMichael King
This document provides tips and strategies for generating leads through content marketing and lead generation campaigns. It discusses using frameworks to understand the lead generation process. It also emphasizes the importance of understanding personas and using data to inform content, offers, and lead qualification criteria. Tactics discussed include using pop-ups, creating educational content to build an email list, and testing different lead generation approaches. The overall message is that an in-depth, persona-driven approach can be more effective than just throwing up a landing page.
Proyecto Pedgogico de Aula: Rescatando Mis RaícesProyectoSPE2013
El proyecto pedagógico de aula "Rescatando mis raíces" presentado por el docente Jimy Lozano en el Centro Educativo Rural Mesitas Sede San Miguel, tiene como objetivo principal que los estudiantes comprendan la realidad cultural de su entorno y adopten la cultura para divulgarla. El proyecto integra las ciencias sociales y las TIC para desarrollar actividades como un festival cultural, recopilación de evidencias en una página web y fomentar el sentido de pertenencia en los estudiantes.
If you had to rank the best and worst moments of your JavaScript life, you’d probably rank reading “The Good Parts” up towards the top, and deep down at the bottom of the list would be the day that you found out that you couldn’t make cross-domain requests in the browser. This talk covers the hacks, tips, and tricks to leave the Same Origin Policy in the dust. So grab a cookie, pad your JSON, and learn how to communicate properly.
Este documento presenta una serie de actividades para que los niños aprendan a conocer y cuidar su cuerpo. Las actividades se centran en reconocer las diferentes partes del cuerpo, sus funciones y la importancia de la higiene personal. También incluyen juegos, canciones y conversaciones sobre las similitudes y diferencias entre los cuerpos, y sobre la importancia de valorar el propio cuerpo y respetar la intimidad de los demás.
The document provides an overview of the display advertising ecosystem and strategies for optimizing campaigns on Invite Media's platform. It discusses key concepts like audience buying, real-time bidding, ad networks, exchanges, and DSPs. It also outlines Invite Media's services for advancing strategies around the consumer journey, real-time bidding, and generating insights. The document provides guidance on components for success, getting started, consolidating buys, and optimizing campaigns.
Sejarah perkembangan kurikulum sejak indonesia merdekaKurosaki_akira
Kurikulum di Indonesia telah mengalami perkembangan sejak masa kemerdekaan, mulai dari Rencana Pelajaran 1947 hingga Kurikulum Tingkat Satuan Pendidikan (KTSP) 2006. Setiap kurikulum dikembangkan dengan mempertimbangkan kondisi sosial, budaya, dan tujuan pendidikan pada masanya. Kurikulum terus disempurnakan untuk meningkatkan kualitas pendidikan di Indonesia.
How to generate those leads all day everydayMichael King
This document provides tips and strategies for generating leads through content marketing and lead generation campaigns. It discusses using frameworks to understand the lead generation process. It also emphasizes the importance of understanding personas and using data to inform content, offers, and lead qualification criteria. Tactics discussed include using pop-ups, creating educational content to build an email list, and testing different lead generation approaches. The overall message is that an in-depth, persona-driven approach can be more effective than just throwing up a landing page.
Proyecto Pedgogico de Aula: Rescatando Mis RaícesProyectoSPE2013
El proyecto pedagógico de aula "Rescatando mis raíces" presentado por el docente Jimy Lozano en el Centro Educativo Rural Mesitas Sede San Miguel, tiene como objetivo principal que los estudiantes comprendan la realidad cultural de su entorno y adopten la cultura para divulgarla. El proyecto integra las ciencias sociales y las TIC para desarrollar actividades como un festival cultural, recopilación de evidencias en una página web y fomentar el sentido de pertenencia en los estudiantes.
If you had to rank the best and worst moments of your JavaScript life, you’d probably rank reading “The Good Parts” up towards the top, and deep down at the bottom of the list would be the day that you found out that you couldn’t make cross-domain requests in the browser. This talk covers the hacks, tips, and tricks to leave the Same Origin Policy in the dust. So grab a cookie, pad your JSON, and learn how to communicate properly.
Este documento presenta una serie de actividades para que los niños aprendan a conocer y cuidar su cuerpo. Las actividades se centran en reconocer las diferentes partes del cuerpo, sus funciones y la importancia de la higiene personal. También incluyen juegos, canciones y conversaciones sobre las similitudes y diferencias entre los cuerpos, y sobre la importancia de valorar el propio cuerpo y respetar la intimidad de los demás.
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
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
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
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
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
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
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
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
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
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
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;
}
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
0 – przechodzi na początek lini^ - pierwszy niebiały znak linii
shopt -s histverify – nie wykonuje automatycznie komendy przy eventach (!) tylko czeka na enter/wkleja do konsoli!-2 – przed ostatnia komenda
sudo !!
env – pokazuje zmienne globalneset – pokazuje zmienne globalne i lokalne
export zmienna – eksportuje
export –n zmienna – czyni zmienną lokalną
Brak $ (dolara) przy deklaracji zmiennej
Najczęściej używane parametry
Wspomnieć, że przekierowanie najpierw tworzy plik, czyli np. cat plik1 > plik1 nie zadziała.
Whatis szuka całego stringa a apropos dopasowujeman –s5 passwd
man –s3 printf
sort -u -n -t. -k1,1 -k2,2 -k3,3 -k4,4
Można napisać szybciej bo zamiast 1,1 czy 2,2 dać 1 I 2 ale wtedy komenda będzie wykonywać się dłużej, zauważalne tylko przy dużych plikach
4000 – setuid
2000 – setgid
1000 – sticky bit
tee standardowo tworzy za każdym razem nowy plik więc aby nadpisać dane trzeba użyć opcji -a
awk NF – wyświetla plik bez pustych linii, tak naprawdę NF wyświetli ilość pół w linii, jeśli ilość pól będzie 0 (false) awk nie wyświetli linii
Zamienia znaki a nie ciągi znaków!!!
she-bang
!# - magic
/bin/bash – ścieżka
Znajdź wyrażenie we wzorcu
Anegdotka o sprawdzaniu wolnego miejsca poprzez zapełnianie dysku ;-)