Érdekes/hasznos bash scriptek -experimental-
echo "Most `w -h | wc -l` felhasználó van bejelentkezve."
# Kiírja, hogy hány felhasználó van bejelentkezve
test -d /home/user && echo "van" || echo "nincs"
# Megvizsgálja, hogy van e /home/user könyvtár, két kimenetű elágazással (&&)
# Ha van.: van
# Ha nincs.: nincs
# -d : van-e ilyen?
if [ -d /home/user ]; then echo "van"; else echo "nincs";
fi
# Ugyanaz mint az előző példa, csak kicsit másként.
# [-test parancs, ]-test zárás
if [ -s /etc/motd ]; then echo "nagyobb"; else echo "zerus";
fi
# Megvizsgálja, hogy a /etc/motd nagyobb e nullánál, vagy zérus.
# -s akkor ad IGAZ-at, ha a fájl létezik és nagyobb 0-nál.
for i in *.mp3; do mpg123 "$i"; done
# Az aktuális könyvtárban az összes mp3 kiterjesztésű állományt, az mpg123
# nevű programmal lejátszuk.
< /dev/urandom tr -dc A-Za-z0-9_ | head -c8
# 8 karakteres random jelszó generátor
for i in $(ls); do cat $i >> 123.txt; done
# aktuális könyvtárban található file-ok 123.txt file-ba összefűzése.
host -t mx mydomain.com
nslookup -q=mx mydomain.com
dig -t mx mydomain.com
# MX record check-re használható parancsok
net rpc shutdown -I IP -U DOMAIN/user
# shell-ből Windows klienst állíthatunk le távolról. (ha tudjuk a local admin jelszavát..)
net rpc shutdown -I IP -U DOMAIN/user -f -t 60
# Előbbi parancs, időzítve 60sec-re.
echo tartalom | mailsend -to -from -starttls
-port 587 -auth -smtp STMP.server.address -sub targy +cc +bc -v -user Username -pass Password
# 587-es porton (TLS) levélküldés. A fenti változók jelentései:
#
# tartalom : az levél tartalma
# : címzett
# : feladó
# SMTP.server.address : milyen SMTP-n keresztül
# targy : az üzenet tárgya
# user/pass : SMTP user neve, jelszava.
while read; do
rm $REPLY
done < delete.txt > log.txt
# delete.txt file-ban található elérési útvonalakon lévő fájlokat törli, a kimenet
# pedig a log.txt-be kerül.
cat smb.conf | egrep -v "^\s*(#|$)"
# smb.conf file tartalmának kiírása a #-al vagy szóközzel kezdődő sorok nélkül.
awk '{ sum += $1 } END { print sum }' file
paste -sd+ file | bc
sum=0;for i in $(cat file);do sum=$((sum+$i));done;echo $sum
s=0 ; while read l ; do s=$((s+$l)) ; done < file ; echo $s
# "file"-ban egymás alá felsorolt számok összegének kiszámítása
# Mindegyik sor egy különálló megoldás!
cat /var/log/syslog |grep INPUTDROP |grep -v ICMP | sed s/DF// | awk '{ print $1" "$2" "$3" "$8" "$9" "$11" "$18" "$20}'
# iptables log feldolgozása, amennyiben az INPUTDROP prefix-el kerül a syslog-ba a bejövő eldobott forgalmazás.
# a DF (defragment) és ICMP sorok nem jelennek meg a kimenetben!
# az awk $1, $2, stb. résszel a különböző mezők sorszámai vannak megadva, szabadon választható több vagy kevesebb kiíratása
# A kimenet pl:
Dec 23 00:29:37 IN=ppp0 OUT= SRC=198.211.123.245 PROTO=TCP DPT=60068
Dec 23 00:31:14 IN=ppp0 OUT= SRC=185.222.209.193 PROTO=TCP DPT=8899
Dec 23 00:32:05 IN=ppp0 OUT= SRC=198.211.123.245 PROTO=TCP DPT=3110
Dec 23 00:32:18 IN=ppp0 OUT= SRC=198.211.123.245 PROTO=TCP DPT=30096
history | awk '{a[$2]++}END{for(i in a){print a[i] " " i}}' | sort -rn | head
# melyik parancsot hányszor futtattuk le
# A kimenet valami ilyesmi:
99 cat
11 sed
19 su
12 ssh
#!/bin/bash
read -p "Valtozo erteke? : " -s VAR
echo
echo "A beirt valtozo: " $VAR
# A szabvanyos bemenetről (bill.) feltölti a VAR nevű változót, majd kiírja annak értékét az ".." után.
#!/bin/bash
read -e -i "Eleje" -p "Felhasznalonev: " USER
echo "A beirt felhasznalonev: "$USER
# Bekéri a szabványos bemenetről a USER változót, az értéke pedig automatikusan az "Eleje" karaktersorral
# fog kezdődni, mely szükség esetén visszatörölhető. Ezt követően a változó értékének kiírása.
#!/bin/bash
echo -n "Add meg, mely termek arara vagy kivancsi (kola, sor): "
read VAR
if [[ "$a" = "kola" ]]; then
echo "Ar 200"
elif [[ "$a" = "sor" ]]; then
echo "Ar 250"
fi
# A szabványos bemenetről várja a VAR értékét (kola vagy sor), majd ezt követően ha a beírt karaktersor egyezik
# a két termék közül valamelyikkel, kiírja az árát.
#!/bin/bash
echo "Az alabbi adatokat tudom kiirni a sorszam lenyomasaval: "
select i in "Datum" "Konyvtarlista" "AktualisMappa" "Kilepes"
do
if [[ "$i" = "Datum" ]] ; then
echo $(date)
elif [[ "$i" = "Konyvtarlista" ]] ; then
echo $(ls)
elif [[ "$i" = "AktualisMappa" ]] ; then
echo $(pwd)
elif [[ "$i" = "Kilepes" ]] ; then
break
fi
done
# A select segítségével a négy utasítás közül az egyik sorszámát lenyomva a megfelelő parancsot futtatja le (pl: date)
# a 4-es gomb lenyomásával pedig kilép a program.
# Kimenet:
Az alabbi adatokat tudom kiirni a sorszam lenyomasaval:
1) Datum
2) Konyvtarlista
3) AktualisMappa
4) Kilepes
#!/bin/bash
A=10
B=100
C=0
([ $A -eq 10 ] || [ $B -eq 1 ]) && [ $C -eq 1 ] && echo "Ok" || echo "Nem Ok"
# Logikai operátorok használata.
# A egyenlő-e 10-el VAGY B egyenlő-e 1-el, ÉS C egyenlő-e 1-el?
# Akkor írja ki az OK-ot ha legalább az:
# első ÉS harmadik állítás igaz, (pl A=10 ÉS C=1) vagy
# második ÉS harmadik állítás igaz (pl B=1 és C=1) , egyéb esetben "Nem Ok"-ot ír ki.
#!/bin/bash
DIR=/home/letix/test
EXT=.sh
for file in $(ls $DIR)
do
if [[ "$file" = *$EXT* ]]
then
echo "$file"
fi
done
# adott mappában adott kiterjesztésű file-ok keresése és nevük kiíratása
#!/bin/bash
for i in 21 137 1517
do
printf "...%5d ...\n" "$i"
done
# Példa printf működésre,
# Kimenet:
... 21 ...
... 137 ...
... 1517 ...
#!/bin/bash
for i in ppp0 eth1 wlan0 eth0 tap0 tun0; do
printf "$i \
%2s $(/sbin/ifconfig $i | grep 'inet' | cut -d: -f2 | awk '{ print $2}') \
%2s RX bytes : $(ifconfig $i |grep -i -E '(RX packets)' | cut -d"(" -f2 | cut -d")" -f1 ) \
%2s TX bytes : $(ifconfig $i |grep -i -E '(TX packets)' | cut -d"(" -f2 | cut -d")" -f1 )\n " >> iptest2.txt
done
# Újabb printf példa, némi TX-RX forgalmazási adat kiírással,
# Kimenete:
ppp0 124.16.45.11 RX bytes : 7.9 GiB TX bytes : 11.1 GiB
eth1 192.168.100.254 RX bytes : 9.8 GiB TX bytes : 18.2 GiB
wlan0 192.168.200.254 RX bytes : 9.1 GiB TX bytes : 1.3 GiB
eth0 172.16.0.254 RX bytes : 0.0 B TX bytes : 0.0 B
tap0 192.168.150.2 RX bytes : 8.1 GiB TX bytes : 10.2 GiB
tun0 192.168.250.1 RX bytes : 0.0 B TX bytes : 0.0 B
Fájl titkosítása és visszafejtése kulcspárral -openssl-
Titkosítás
openssl genrsa -out key.pem 2048
openssl rsa -in key.pem -out key-public.pem -outform PEM -pubout
echo -n "Tl4R6dnvWXiDeXr1LtpCNkaerhABw45b24bnab5yLG1" > key.txt
openssl enc -aes-256-cbc -pass file:key.txt < unencrypted.dat > encrypted.dat
openssl rsautl -encrypt -pubin -inkey key-public.pem < key.txt > enc.key.txt
# 1. privát kulcs létrehozása
# 2. publikus kulcs létrehozása a privát kulcsból
# 3. Adott key.txt állomány generálása
# 4. Az unencrypted.dat file titkosítása a key.txt segítségével, kimeneti állománya az encrypted.dat
# 5. A key.txt file titkosítása az adott felhasználó publikus kulccsával, a titkosított kulcs a enc.key.txt
# Megjegyzés:
# Backup készítés során érdemes minden használat előtt új key.txt-t generálni!
Visszafejtés
openssl rsautl -decrypt -inkey key.pem < enc.key.txt > key.txt
openssl enc -aes-256-cbc -d -pass file:key.txt < encrypted.dat > unencrypted.dat
# 1. A key.txt állomány privát kulccsal történő visszafejtése
# 2. A visszafejtett key.txt-vel fent betitkosított állomány visszafejtése.
Titkosított tar.gz készítése mappákról
Titkosítás
tar -zcvf - dir1 dir2 | openssl enc -aes-256-cbc -pass file:key.txt -out /home/letix/encrypted.tar.gz
# file.txt-ben található jelszóval titkosítva tömöríti be a dir1 és dir2-t, kimenete a fenti tar.gz.
Visszafejtés
mkdir test
openssl enc -aes-256-cbc -d -pass file:key.txt -in /home/letix/encrypted.tar.gz | tar xz -C test
# key.txt-t felhasznalva visszafejti es kitömöríti az előbb betitkosított file-t az aktuális mappán belüli test
# mappába,mely az első lépésben létrehozásra került.