Documente Academic
Documente Profesional
Documente Cultură
Shell scripting
CSE Dep
1/47
Moto
CSE Dep
2/47
Servicii de ret , ea
port client server TCP conexiune
cerere
servicii
UDP
SSH
WWW
MIME
adres
80 HTTP URL
SMTP IMAP 22
22 ssh
remote
mailbox POP3
text
browser page
HTML
CSE Dep
3/47
Servicii de ret , ea
http://jokegurus.com/2008/06/06/why-isnt-mom-running-apache/
CSE Dep
4/47
Cuprins
Filtre de text Programare n shell Shell scripting avansat Exemple de scripturi shell Concluzie
CSE Dep
5/47
Suport curs
CSE Dep
6/47
nl ant , uirea comenzilor operatori shell, caractere speciale escaping/citare variabile shell variabile de mediu globbing expresii regulate
CSE Dep
7/47
Filtre de text
operat , ii
selectare linii selectare coloane (dup a separator) prelucrare linii (modicare elemente) contabilizare
CSE Dep
9/47
cat
as a intrarea standard la ies , eaz , irea standard Ce efect are rularea comenzii cat f ar a nici un argument?
as , area la ies , irea standard a textului de la intrarea standard se ,, nchide intrarea standard folosind CTRL+D
tac as a (prima linie este as a ultima) , are inversat , at rev as a a ec arei linii (primul caracter este , are inversat as , at ultimul) nl number lines
CSE Dep
10/47
head, tail
head -n -20
toate liniile mai put , in ultimele 20
tail -n +21
toate liniile ncep and de la linia 21 (adic a mai put , in primele 20)
CSE Dep
11/47
cut
CSE Dep
12/47
tr
s , tergere
tr -d < file
squeeze
ifconfig | tr -s | cut -d -f 2
Generator de parole
tr -d -c A-Za-z < /dev/urandom | head -c 8
CSE Dep
13/47
sort, uniq
sortarea liniilor implicit alfabetic a sort -n file sortare numeric a sort -r file reverse sort sort -u file, sort file | uniq cu unicizare sort -k 3 file sorteaz a n funct , ie de coloana 3
CSE Dep
14/47
wc
contorizarea elementelor cu argument s as , ier as , eaz , i numele s , ierului wc -l num arul de linii wc -c num arul de caractere wc -w num arul de cuvinte
CSE Dep
15/47
grep
extrage linii ce cont , in un anumit pattern foloses , te expresii regulate grep pattern file grep -r pattern /path/to/folder/ c autare recursiv a grep -v pattern file invert match grep -i pattern file ignore case grep --color=auto
recomand am folosirea unui alias alias grep=grep --color=auto alias grpe=grep alias gpre=grep
CSE Dep
16/47
Programare n shell
variabile (vezi cursul 5) instruct , iuni de decizie instruct , iuni de ciclare funct , ii
CSE Dep
18/47
if
Exemple de folosire if
if grep dan /etc/passwd; then echo "OK" else echo "NOK" fi if test -f /path/to/file; then echo "File exists" fi if test $# -ne 1; then echo "Usage: $0 file" fi
CSE Dep
19/47
if (2)
CSE Dep
20/47
for, seq
CSE Dep
21/47
while, read
CSE Dep
22/47
while primes a (la fel ca if) de , te ca argument o comand obicei read read
ntoarce 0 c and a citit o linie ntoarce diferit de zero la sf ars , itul s , ierului (EOF) folosit
stand-alone (similar fgets, scanf) mpreun a cu while
IFS
input eld separator specic a argumentul care va folosit de read
CSE Dep
23/47
Funct n shell , ii
CSE Dep
24/47
CSE Dep
25/47
sed
Echivalent grep
sed -n /abc/p
Echivalent wc -l
sed -n $=
Echivalent head
sed 10q
Substitute
sed s/ana/bogdan sed s/ana/bogdan/g
CSE Dep
27/47
sed (2)
stream editor cites ari , te linie cu linie s , i face prelucr sintax a spartan a
range + comenzi $= (la sf ars a num arul liniei) , itul s , ierului, as , eaz 10q (la linia 10, quit) s/ana/bogdan/g (peste tot, substituie ana cu bogdan) 1,10s/ana/bogdan/g ( n primele 10 linii, substituie) /corina/s/ana/bogdan/g (pe liniile ce cont , in corina, substituie)
CSE Dep
28/47
awk
Aarea adresei IP
ifconfig | awk -F [ \t]+ {print $5;}
CSE Dep
29/47
awk (2)
cut++
permite specicarea unei expresii regulate ca separator
CSE Dep
30/47
nu folositi shell scripting pentru ceea ce se face mai bine/usor/ecient in Python, C, Java, Ruby, PHP etc. modularitate (do one thing, do one thing well ) nu reinventat , i roata cleanup actions n general, nu folosit n numele variabilelor , i majuscule nu parsat , i ies , irea comenzii ls (folosit , i stat, for i in *, find cu arrays) folosit and referit , i ghilimele c , i variabile http://mywiki.wooledge.org/BashFAQ
CSE Dep
31/47
CSE Dep
33/47
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
#!/bin/bash BTDOWNLOADHEADLESS=/usr/bin/btdownloadheadless TORRENT FILE="$1" DOWNLOAD DIR="$2" function check alive() { ps -ef | grep $BTDOWNLOADHEADLESS | grep $TORRENT FILE &> /dev/null } check alive if test $? -ne 0; then pushd . &> /dev/null cd $DOWNLOAD DIR && nohup $BTDOWNLOADHEADLESS $TORRENT FILE &> /dev/null & popd &> /dev/null exit 0
CSE Dep
34/47
1 2 3 4 5 6 7 8 9 10
#!/bin/bash IFS="," INPUT FILE=lists/cdl 2010 list.txt while read username email name surname; do ./ldap add $username $email $name $surname done < $INPUT FILE exit 0
CSE Dep
35/47
Migrare utilizatori
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
#!/bin/bash # passwd le: sier cu useri gen /etc/passwd passwd file=/etc/passwd while read user skel pass uid gid comm home shell; do save dir="/home/$user/old anaconda" echo "$user $comm $home $shell" useradd -m -d /home/$user -g users -s $shell -c "${comm}" $user mkdir ${save dir} chown $user:users ${save dir} bash ./rsync.sh $home ${save dir} done < passwd file
CSE Dep
36/47
Send event
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 #!/bin/bash # get subject if test $# -ge 1; then subject="$1" else echo -en "Subject: " read subject # get le if test $# -ge 2; then le="$2" else echo -en "File: " read le # send mail to all LDAP accounts for i in $(ldapsearch -x mail | grep mail: | cut -d " " -f 2); do mail -s "$subject" $i < $file done exit 0
CSE Dep
37/47
CSE Dep
38/47
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
#!/bin/sed -f { s/\[\(http[^]]\+\)]/[[\1]]/g s/<pre>/<code>/g s/<\/pre>/<\/code>/g s/<source[ \t]\+lang="\([a-z]\+\)">/<code \1>/g s/<\/source>/<\/code>/g s/<tt>/{{{/g s/<\/tt>/}}}/g s/<b>/**/g s/<\/b>/**/g s/<ul>//g s/<\/ul>//g s/[ \t]*<li>\(.*\)<\/li>/* \1/g s//**/g s//\/\//g s/{{{\[\[/[[/g s/\]\]}}}/]]/g s/\(\[\[http:[^ ]\+\) /\1|/g }
CSE Dep
39/47
Randal K. Michael edit , ia a doua, 2008 peste 1000 de pagini acoper a mai multe shell-uri util as ncep atori, dar n special pentru avansat , i pentru ,i
CSE Dep
41/47
Larry Wall
http://en.wikipedia.org/wiki/File:Larry_Wall_YAPC_2007.jpg
creatorul Perl BDFL pentru proiectul Perl autorul programului patch c as ator al International Obfuscated C Code Contest , tig
CSE Dep Cursul 10, Shell scripting 42/47
Rackspace
companie de hosting IT fondat a n 1996 unul dintre principalii furnizori de servicii cloud (Rackspace Cloud) contribuitor la OpenStack folosit de GitHub
CSE Dep
43/47
Lua
limbaj de programare de scripting paradigme multiple (la fel ca Python) proiectat pentru a us ncorporat n alte limbaje , or API C simplu limbaj de sripting pentru dezvoltatorii de jocuri folosit de limbajul de scripting al utilitarului nmap
CSE Dep
44/47
Cuvinte cheie
CSE Dep
45/47
Resurse utile
CSE Dep
46/47