Prispevky v kategorii: ‘Užitečné bash příkazy a scripty’

Výpis všech IP na serveru

Pokud chcete výpis všech IP přidělených na server použijte příkaz:

ifconfig | grep "inet addr" | awk '{print $2}' | awk -F: '{print $2}' | gawk -F' ' '{print $1}'

admin Užitečné bash příkazy a scripty

Převod rozsahu IP adres na parametr IP adresy

Řešil jsem problém jak na serveru globálně zakázat např. traffik z Číny.
Narazil jsem ovšem na problém kde vzít aktuální seznam všech IP adres které má Čína přidělené. Dosud jsem používal tento seznam. Ovšem nastal problém že tento seznam již nebyl dlouho aktualizován, proto jsem hledal jiné řešení a nalezl ho.

Na této adrese si mohu vygenerovat celé aktuální rozsahy IP adres pro jakýkoliv stát ve formátu např.:

58.14.0.0 58.25.255.255
58.30.0.0 58.63.255.255
58.66.0.0 58.67.255.255
58.68.128.0 58.68.255.255
.. atd.

Do Firewallu však potřebuji IP adresu ve zkráceném formátu např.: 58.14.0.0/15.
Vytvořil jsem si tedy script který převede hromadně všechny rozsahy IP adres na jejich zkrácený tvar.

mkdir -p /home/src/
wget http://jodies.de/ipcalc-archive/ipcalc-0.41.tar.gz
cd /home/src/ipcalc-0.41
touch prevod ips
chmod +x prevod

Do souboru prevod jsem vložil:

#!/bin/bash

clear
replace ' ' '-' -- ips > /dev/null
LINES=`cat ips`
for LINE in ${LINES[@]}; do
pos=`expr index "$LINE" '-'`
ip2="${LINE:pos-1}"
ip1=${LINE/$ip2/}
ip2=${ip2/\-/}
./ipcalc -r ${ip1} ${ip2} | grep '/'
done

Nyní jsem už jen vložil IP rozsahy vygenerované na této adrese do souboru ips a spustil script:

./prevod

Voilá.. dostal jsem seznam IP rozsahů ve zkrácené formě, které jsem následně vložil do firewallu:

/sbin/iptables -A INPUT -s 58.186.0.0/15 -j DROP

admin Užitečné bash příkazy a scripty

Hromadné nahrazení koncovky souborů

Pokud potřebujete změnit koncovku souborů např. z *.JPG na *.jpg hromadně, použijte příkaz (pro malý počet souborů v adresáři):

cd /cesta/do/adresáře
rename .JPG .jpg *.JPG

(pro velký počet souborů v adresáři):

cd /cesta/do/adresáře
for i in $(ls|grep '\.JPG$'); do mv $i ${i%JPG}jpg; done

Důvod, proč při velkém množství souborů použít druhý příkaz je, že příkaz rename vám to z důvodu limitu (1024 characters) nedovolí přejmenovat.

admin Užitečné bash příkazy a scripty

Počet souborů v adresáři

Celkový počet souborů v adresáři /cesta/do/adresáře zobrazíte příkazem:

find /cesta/do/adresáře -type f | wc -l

admin Užitečné bash příkazy a scripty

Nalezení souborů obsahujících více hledaných slov

Tento příklad nalezne a vypíše všechny soubory v adresáři /cesta/do/adresáře které obsahují slova “text”, “slovo”, “hodina”:

egrep -d recurse -n '(text|slovo|hodina)' /cesta/do/adresáře/

Tip: použitím např.: –exclude=”*.avi” –exclude=”*.mpg” vynechá soubory těchto koncovek.

admin Užitečné bash příkazy a scripty

Hromadná změna vlastníka všech souborů v adresáři

Tento příklad změní vlastníka všech souborů v adresáři /cesta/do/adresáře, z “nobody” na “apache”:

find /cesta/do/adresáře -user "nobody" -print0 | xargs -0 chown apache:apache

Účelné například pokud přesouváte soubory ze serveru kde běžel Apache1.3 na server kde běží Apache2.

admin Užitečné bash příkazy a scripty

Nalezení souborů určité velikosti

Tento příklad prohledá všechny soubory v adresáři /cesta/do/adresáře, které jsou větší než 500Mb:

find /cesta/do/adresáře -type f -size +500000000c

admin Užitečné bash příkazy a scripty

Hromadné nahrazení textu v souborech

Tento příklad prohledá všechny soubory v adresáři /cesta/do/adresáře a nahradí text v souborech z “hledaný text” za “nový text”:

find /cesta/do/adresáře -type f -print0 | xargs -0 sed -i 's|hledaný text|nový text|g'

Stejný příklad… ale nahradí celou řádku, ne jen hledaný text:

find /cesta/do/adresáře -type f -print0 | xargs -0 sed -i 's|.*hledaný text.*|nový text|g'

Dalším (a jednodušším) způsobem jak nahradit hromadně text v souborech je použitím příkazu replace.
Je potřeba mít ale nainstalován balíček mysql-server jehož je příkaz replace součástí.
Syntaxe je:

replace 'hledaný text' 'nový text' -- /cesta/do/adresáře/*

admin Užitečné bash příkazy a scripty

Nalezení souborů určitého typu obsahující určitý text

Tento příklad vyhledá *.txt a *.php soubory v adresáři /cesta/do/adresáře obsahující text “hledaný text”:

find /cesta/do/adresáře -type f -regex '.*\(txt\|php\)' | xargs grep -il "hledaný text"

Taktéž lze s úspěchem použít:

grep -d recurse -l "hledaný text" /cesta/do/adresáře

admin Užitečné bash příkazy a scripty

Vyhledá soubory určitého typu a smaže je

Tento příklad vyhledá všechny *.php soubory v adresáři /cesta/do/adresáře a
smaže je všechny:

find /cesta/do/adresáře -type f \( -name \*\.php \) | xargs rm

Stejný příklad ale smaže všechny *.php soubory starší více jak 5 dní:

find /cesta/do/adresáře mtime +5 -type f \( -name \*\.php \) | xargs rm

admin Užitečné bash příkazy a scripty