Jump to content
Ganav

[TuT] Comenzi utile in bash #1

Recommended Posts

Acesta este primul dintr-o serie de tutoriale care prezinta diverse comenzi si scurtaturi in bash. Lista de comenzi se afla mai jos:


sudo !!

Comanda de mai sus ruleaza comanda anterioara ca si r00t.

du | sort -gr > dimensiune_fisiere

Comanda sorteaza dimensiunea fisierelor in ordine crescatoare dupa care salveaza rezultatele in "dimensiune_fisiere".

echo La miezul noptii | at midnight

Comanda de mai sus se executa de fiecare data la miezul noptii(echo poate fi inlocuita cu orice comanda).

find . -type f | wc -l

Comanda numara toate fisierele care se gasesc in directorul curent. Numara, de asemenea, si fisierele situate in subdirectoare ale directorului curent.

ps aux | sort -nk +4 | tail

Comanda afiseaza primele 10 procese dupa consumul acestora de memorie(+4 reprezinta a patra coloana dupa executia comenzii ps aux). tail afiseaza ultimele zece linii ale unui fisier in stdout. In cazul nostru acestea sunt procesele care consuma cea mai mare cantitate de memorie.

tar czv fisier folder1 fisier2 | ssh user@server tar zxv -C /destinatie

Comanda de mai sus arhiveaza fisier, folder1 si fisier2 dupa care le scrie in stdout. Rezultatul este transmis pe server prin ssh dupa care este dezarhivat in directorul /destinatie de pe server.

nslookup rstforums.com | tee rst_dns.txt

Comanda tee face o copie a iesirii standard(stdout) a comnezii nslookup in fisierul rst_dns.txt

reset

Comanda restaureaza sesiune unui terminal inchis.

URL=rstforums.com && wget -rq --spider --force-html "https://$URL" && find $URL -type d > link-uri_rst.txt && rm -rf $URL

Comanda de mai sus extrage toate link-urile de pe forum dupa care le salveaza in link-uri_rst.txt.

watch -n 30 uptime

Cu aceasta comanda putem pastra o sesiune ssh activa(watch este rulata la fiecare 30 de secunde; conexiunea este inchisa dupa un anumit timp de inactivitate).

ssh user@192.168.6.7 "ps aux | grep apache2"

Putem rula o comanda pe un server. Comanda de mai sus verifica daca apache este pornit pe 192.168.6.7.

(cd /tmp && ls -la)

Cu aceasta comanda putem naviga intr-un director, executam o comanda dupa care revenim in directorul initial.

find /cale/catre/director -type f -print0 | xargs -0 rm

Comanda de mai sus permite stergerea fisierelor din /cale/catre/director(directoarele sunt pastrate).

mkdir ~/Proiecte/proiect{1..3}

Comanda de mai sus permite crearea unui numar mare de directoare itntr-o singura linie de comanda. Acestea vor avea forma proiect1, proiect2, proiect3.

du -s * | sort -n | tail

Comanda de mai sus afiseaza primele zece cele mai mari fisiere/directoare din directorul curent.


whereis numecomanda
which numecomanda
locate numecomanda

Comenzile de mai sus permit localizarea unui executabil.

ssh -N -L2000:localhost:80 statieladistanta

Crearea unui tunel ssh de la portul 80 al unei statii la distanta si portul 2000 al statiei curente(pe cea care a fost rulata comanda).

echo "rm -rf /director-mare/nefolositor" | batch

Comanda de mai sus sterge directorul daca acesta ocupa mai mult de 80 la suta din dimensiunea capacitatii de stocare in care se gaseste.

ssh user@host cat /cale/catre/fisier/ladistanta | diff /cale/catre/fisier/local-

Comanda de mai sus compara doua fisiere:unul situat pe statia locala iar celalalt pe o statie la distanta.

cat /etc/issue

Comanda de mai sus afiseaza numele distributiei curente.

iptables -A INPUT -s 192.168.2.3/32 -j DROP

Comanda de mai sus blocheaza conexiuni care vin din partea statiilor ce au urmatoarele IP-uri 192.168.2.xx .

lspci -vv

Comanda de mai sus afiseaza toate drivere-le instalate.

python -m HTTPServer

Comanda de mai sus creeaza un server http care poate fi accesat la adresa http://$HOSTNAME:8000/

lsof -i -n | grep ESTABLISHED

Comanda de mai sus afiseaza toate conxiunile TCP active.

curl -I rstforums.com

Comanda de mai sus preia antetele HTTP(HTTP headers) ale forum-ului.

  • Upvote 4
  • Downvote 2
Link to comment
Share on other sites

Acest tutorial face parte din continuarea unei serii incepute aici:

https://rstforums.com/forum/87361-tut-comenzi-utile-bash-1-a.rst#post560313

Un material pe aceasta tema, de asemenea interesant, se gaseste la:

https://rstforums.com/forum/43047-sh0rt-line-c0de.rst

mount /cale/catre/imagine.iso /mnt/cdrom <-oloop>)

Comanda de mai sus monteaza o imagine .iso intr-un director anume. Optiunea -oloop permite folosirea fisierului(a imaginii) ca un device de tip block.

fuser [numar port]/[protocol]

Comanda de mai sus gaseste procesul asociat unui port deschis(pid-ul acestuia mai exact).

du -hc *

Comanda afiseaza spatiul ocupat in Kb/Mb/Gb al unui folder pentru fiecare fisier pe care il contine. In acest exemplu toate fisierele vor fi luate in considerare.

python -m smtpd -n -c ServerDebug localhost:2025

Aceasta comanda creeaza un smtp server care asculta pe portul 2025 si permite operatii de depanare. Server-ul afiseaza la iesirea standard(stdout) antetele email(e-mail headers) si corpul mesajelor(email body)

perl -pi -e 's/sir1/sir2/g' fisier*

Comanda de mai sus inlocuieste in toate fisierele din directorul curent care incep cu string-ul "fisier" cuvintele "sir1" cu "sir2".

sed -i 's/sir1/sir2/g' fisier

Comanda este asemanatoare cu cea de mai sus.

ps auxf

Comanda de mai sus listeaza toate procesele active la un moment dat precizand si relatia dintre acestea(care sunt procese de tip parinte si care sunt fiii acestora).

netstat -ant | awk '{print $NF}' | grep -v '[a-z]' | sort | uniq -c

Comanda afiseaza numarul si tipul conexiunilor active la un moment dat.


for i in */*.rar; do unrar i $i; done
for i in *.rar; do unrar i $i; done
for i in */*.zip; do unzip i $i; done
for i in *.zip; do unzip i $i; done
for i in */*.tar.gz; do tar zxvf i $i; done
for i in *.tar.gz; do tar zxvf i $i; done
for i in */*.tar.bz2; do tar xvjf i $i; done
for i in *.tar.bz2; do tar xvjf i $i; done

Comenzile de mai sus prezinta mijloace de a dezarhiva mai multe tipuri de arhive(.rar, .zip, .tar.gz, .tar.bz2). Dezarhivarea se poate face pentru toate fisierele de un anumit tip(care au o anumita extensie) din directorul directorul curent: *.extensie(.rar, .zip, .tar.gz, .tar.bz2) sau pentru toate subdirectoarele din directorul curent: */*.extensie(.rar, .zip, .tar.gz, .tar.bz2). Rezultatele vor scrise in directorul din care s-a lansat comanda.

for i in `ps aux | grep httpd | awk '{print $2}'`; do lsof -n -p $i | grep ESTABLISHED; done;

Comanda de mai sus afiseaza toate legaturile stabilite cu procesul apache.

tcpdump -nli eth0; tcpdump -nli eth0 src or dst xx.xx.xx.xx; tcpdump -nli eth0 port 80; tcpdump -nli eth0 proto udp

tcpdump permite vizualizarea pachetelor dintr-o retea. Optiunile cele mai comune(utile) sunt:

-n afiseaza adrese IP in format numeric(nu ne trebuie numele dns)

-l afiseaza o linie imediat ce este gata(nu mai facem procesari aditionale)

-i eth0 reprezinta interfata de retea pe care dorim sa monitorizam pachetele

src sau dst reprezinta sursa respectiv destinatia pachetelor. Mai sus acestea sunt reprezentate cu xx.xx.xx.xx

port 80 urmareste pachete HTTP(de fapt orice este transmis/receptionat pe acest port)

proto udp afiseaza doar pachete de tip UDP

Putem combina aceste optiuni cu "and" si "not" in functie de cerinte.

tr -dc '[:lower:]' < /dev/urandom | head -c 10

Comanda de mai sus genereaza un string de zece caractere printabile dupa care il afiseaza la iesirea standard(stdout).

^u

Comanda elimina campurile de parole scrise gresit(acestea de regula nu sunt vizibile).

statie_destinatie nc -l 2014 > iesire; statie_sursa nc statie_destinatie 2014 < intrare;

Comanda de mai sus lanseaza utilitarul netcat in mod de ascultare pe statia destinatie; tot traficul primit pe portul 2014 este stocat in fisierul iesire. Pe statia sursa netcat citeste un flux de octeti din fisierul intrare dupa care il scrie peste retea statiei destinatie care il va stoca in fisierul iesire situat pe aceasta din urma. Este practic echivalentul uni pipe peste o conexiune TCP.

dig rstforums.com mx +short

Comanda extrage inregistrarile de tip mai exchange asociate domeniului rstforums.com(adica server-ele de pe care se transmit/receptioneaza email-uri).

ldconfig -p

Comanda de mai sus arata corespondentele intre bibliotecile partajate(shared library mappings) si un executabil stabilite de catre linker.

sshfs nume@server:/cale/catre/imagine /cale/catre/punct/de/montare

Comanda face exact ceea ce face mount insa folosind fisiere de pe doua statii diferite(putem folosi aceiasi statie insa ar fi redundant) peste o conexiune SSH.

fuser -k numefisier

Comanda termina un proces ce mentine un fisier deschis.

ps aux | awk '{ print $8 " " $2 " " $11}' | grep -w Z

Comanda permite gasirea proceselor zombi(acestea sunt procese care si-au indeplinit functia dar inca pastreaza o intrare in tabela proceselor(process table). Cu alte cuvinte nu mai au un handle prin care se pot inchide(acesta este detinut de procesul parinte).

rsync -av --progress ./fisier user@host:/cale/

Comanda permite transmiterea unui fisier local pe o statie la distanta.

scp /cale/catre/fisier.txt user@host:/cale/catre/destinatie

Comanda de mai sus permite copierea unui fisier local pe o statie la distanta prin SSH.

scp -r /cale/catre/director user@host:/cale/catre/destinatie

Comanda de mai sus permite copierea unui director si al subdirectoarelor local pe o statie la distanta prin SSH.

curl -s http://myip.dk/ | egrep -m1 -o '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}'

Comanda afiseaza IP-ul extern al statiei curente.

  • Upvote 1
Link to comment
Share on other sites

Pentru dezarhivare cam asta am eu în bashrc, respectiv zshrc. Dezarhiveaz? inclusiv gif-uri. Pachetele necesare le b?ga?i voi.

Se folose?te cu:

extract FILE

### Extract Archives ###
extract () {
if [ -f $1 ] ; then
case $1 in
*.tar.bz2) tar xjvf $1 ;;
*.tar.gz) tar xzvf $1 ;;
*.bz2) bzip2 -d $1 ;;
*.gz) gunzip $1 ;;
*.tar) tar xf $1 ;;
*.tbz2) tar xjf $1 ;;
*.tgz) tar xzf $1 ;;
*.zip) unzip $1 ;;
*.Z) uncompress $1 ;;
*.7z) 7z x $1 ;;
*.lzo) lzop -d $1 ;;
*.gif)
mkdir $1.frames
convert -coalesce $1 $1.frames/frame.png
;;
*) echo "'$1' cannot be extracted via extract()" ;;
esac
else
echo "'$1' is not a valid file"
fi
}

Link to comment
Share on other sites

Load Alert - fiecare isi pune limita dupa bunul plac

limit=40
servername=$( /bin/hostname )
TOPFILE=top-`date +%m%d%y`-`date +%H%M`.txt
load=$( cat /proc/loadavg | awk -F. '{print $1}' )
if [ $load -gt $limit ]; then
if [ -e /var/lock/subsys/loadalert ];then
exit
else
/usr/bin/top -n 1 -b > /toplogs/$TOPFILE
/bin/cat /toplogs/$TOPFILE| /bin/mail -s "*LOAD: $servername at $load**" muiebasescu@yahoo.com
touch /var/lock/subsys/loadalert
fi
else
if [ -e /var/lock/subsys/loadalert ];then
rm -f /var/lock/subsys/loadalert
fi
fi

Link to comment
Share on other sites

Acesta este al treilea tutorial din serie.

alias grep 'gnu grep -i --color=auto'

Comanda de mai sus creeaza un alias care afiseaza rezultatele comenzii grep in culori.

Ctrl + Alt + sageti

Combinatia de mai sus permite schimbarea spatiului de lucru(workspace) pe Debian.

last | awk '{ print $1 }' | sort | uniq -c | grep -v wtmp

Comanda de mai sus afiseaza cati utilizatori sau logat/delogat si de cate ori.

mkdir -p o/cale/lunga

Crearea mai multor directoare cu o ordine ierarhica predefinita folosind o singura comanda.

wget -qO - "http://www.site.com/arhiva.tar.gz" | tar zxvf -

Secventa de mai sus permite extragerea unui fisier arhivat fara a-l salva local.

sort -n -t . -k 1,1 -k 2,2 -k 3,3 -k 4,4 /fisier/ipuri

Comanda de mai sus permite sortarea IP-urilor dintr-un fisier in functie de octeti(IPv4).

ldd <nume executabil>

Comanda de mai sus afiseaza toate bibliotecile folosite de executabil.

ls -al /proc/<PID>/fd

Secventa de mai sus afiseaza toti descriptorii de fisieri asociati procesului cu ID-ul PID.

find /cale -type d -perm 777 -exec chmod 755 {} \;

Comanda de mai sus schimba permisiunile tuturor fisierelor din /cale din 777 in 755.


sudo dd if=/dev/mem | cat | strings

Comanda de mai sus afiseaza toate string-urile din RAM.

alias ip4grep "grep -E '([0-9]{1,3}\.){3}[0-9]{1,3}'"

Comanda de mai sus creeaza un alias pentru cautarea de adrese IPv4 intr-un fisier.

find . \( -name '*.h' -o -name '*.cpp' \) | xargs grep . | wc -l

Secventa de mai sus cauta fisiere de tip .h si .cpp in directorul curent dupa care afiseaza numarul de linii din fiecare fisier.

for i in $(seq 1 50) ; do echo Iteration $i ; done

Comanda de mai sus itereaza de la 1 la 50, afisand indexul la fiecare iteratie.

sed -n '10,20p' <nume_fisier>

Comanda de mai sus afiseaza toate liniile intre 10 si 20 din fisier.

tar zcvf nume_dir-$(date +%Y%m%d-%H%M).tar.gz nume_dir/

Comanda de mai sus creeaza o arhiva cu timestamp a unui director.


script <nume_log>

Comanda creeaza un log pentru sesiunea curenta din terminal.


history | awk '{a[$2]++}END{for(i in a){print a[i] " " i}}' | sort -rn | head

Comanda afiseaza cele mai des comenzi utilizate.

!!:gs/foo/bar

Comanda ruleaza comanda precedenta inlocuind textul foo cu textul bar.

echo $0

Comanda afiseaza shell-ul curent.

i=0; f=$(find . -type f -iregex ".*jpg");c=$(echo $f|sed "s/ /\n/g"| wc -l);for x in $f;do i=$(($i + 1));echo "$x $i of $c"; mogrify -strip $x;done

Comanda sterge datele din header-ul EXIF din fisiere .jpeg.


mogrify -resize 1024 *.jpg

Secventa modifica dimensiunea imaginilor .jpg din directorul curent.

watch -n 15 curl -s --connect-timeout 10 http://www.google.com/

Comanda de mai sus verfica cand o conexiune la un server web se poate stabili. Verficarea se face din 15 in 15 secunde cu o perioada de asteptare(timeout) de 10 secunde.

rename .extensieveche .extensienoua *.extensieveche

Comanda schimba extensia veche tuturor fisierelor cu o extensie noua din directorul curent

Link to comment
Share on other sites

Acesta este al patrulea tutorial din serie. Un mod efficient de a ramane anonimi atunci cand folosim retele WiFi publice este de a folosi adrese MAC arbitrare. Putem realiza acest lucru fie manual(modificand manual adresa) sau folosind un utilitare precum macchanger. Acesta poate fi descarcat de aici:

GNU Project Archives

Rulam programul ca si root in felul urmator(presupunand ca suntem pe ubuntu/debian):

sudo macchanger -r <interfata>

Unde interfata este interfata de retea pe care dorim sa folosim o adresa arbitrara. Pentru ethernet aceasta este eth0, eth1, ... , ethn unde 'n' este un numar intreg. Pentru wireless este wlan0, wlan1, ... , wlann unde 'n' este un numar intreg.

Pentru a schimba adresa manual in felul urmator:


ip link show <interfata>

Ne uitam dupa un sir de caractere:

link/ether 00:11:22:33:44:55

Acum rulam urmatoarea comanda pentru a debransa interfata respectiva:

ip link set dev <interfata> down

Acum putem schimba MAC-ul ruland:

ip link set dev <interfata> address XX:XX:XX:XX:XX:XX

Acum trebuie sa reactivam interfata:

ip link set dev <interfata> up

  • Upvote 1
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



×
×
  • Create New...