Bash-Programmierung: Schleifen

Eine Endlosschleife erzeugen wir nun, indem wir einfach eine Bedingung wählen, die immer erfüllt ist… dies könnte man z.B. wie folgt machen:

while true; do date; sleep 5; done

Dies kann man jedoch auch sehr viel einfacher haben und zwar mit “watch”:

watch -n5 "date"

Wenn die Schleife jedoch noch einigen Durchläufen beendet werden soll, kann man dies z.B. so machen:

for i in`seq 1 50` ; do echo $i ; date ; sleep 5 ; done

Hier noch ein paar Beispiele:

#!/bin/sh

ANZAHL=0
echo "until-Loop"
# gt = groesser

until [ ${ANZAHL} -gt 10 ] ; do
        echo ${ANZAHL}
        ANZAHL=`expr ${ANZAHL} + 1`
done

# ------------------------------------

ANZAHL=0
echo "while-Loop"
# gt = kleiner/gleich

while [ ${ANZAHL} -le 10 ]
        do
        echo ${ANZAHL}
        ANZAHL=`expr ${ANZAHL} + 1`
done

# ------------------------------------

echo "For-Loop"
# seq = sequenz

for i in `seq 0 10`
        do
        echo $i
        done
exit

# ------------------------------------

Zum Schluss noch ein Beispiel aus der Praxis:

for I in $(ps aux|grep "apache"| awk {'print $2'}); do kill -9 $I; done

vielleicht auf den ersten Blick ein wenig konfus, aus den zweiten Blick erkennt man jedoch, dass mittels ps nach “apache” gesucht wird, die PID-Nunner per awk herausgenommen und diese Programme dann getötet werden.

cdrecord – ISO erstellen und CD brennen

1.) Du musst wissen ob/wo dein CD-Brenner ist…

cdrecord --scanbus

Ausgabe:
0,0,0 0) *
0,1,0 0) *
0,2,0 0) ‘SONY’ […] Removable CD-ROM

2.) Dateien in ein Verzeichniss schaufeln, so dass wir aus dem Verzeichniss ein Image machen können.

cp -v /home/User/Desktop/test_Datei /home/User/brenn_verzeichniss/
cp -v /home/User/Dokumente/test_Datei2 /home/User/brenn_verzeichniss/
mkisofs -R -l /home/User/brenn_verzeichniss/ > /home/User/Desktop/disk.iso

3.) Testen ob im Iso auch alle Dateien sind, welche wir haben wollten

sudo mkdir /mnt/cdrom_iso
sudo mount -t iso9660 -o ro,loop /home/User/Desktop/disk.iso /mnt/cdrom_iso

nachdem man sich vergewissert hat, dass die Dateien alle an Ort und Stelle sind, kann man die ISO wieder unmounten

sudo umount /mnt/cdrom_iso

4.) Brennen der CD

DEVICE="0,2,0"
SPEED=6

(der Speed muss individuell an deine Bedürfnisse/Gegebenheiten angepasst werden)

sudo cdrecord -v dev=${DEVICE} speed=${SPEED} /home/User/Desktop/disk.iso

Portable Apps – Tools – Programme

Es folgt eine kleine Sammlung von Webseiten, welche “Portable Software Sammlungen” anbieten.

1.) liberkey

Auf dieser Webseite gibt es sehr aktuelle Software-Sammlungen. In drei Ausführungen. (Englisch)

Ultimate (202 packages) -> 575 MB
Standard (106 packages) -> 410 MB
Basic (28 packages) -> 179 MB

liberkey
liberkey

Zusatz Software:
www.liberkey.com/en/tous-les-logiciels.html

2.) portableApps

Eine sehr kompakte Lösung, welche in zwei Varianten angeboten wird. (Englisch)

Standard -> 355MB
Light (ohne OpenOffice) -> 150MB

portableapps
portableapps

Zusatz Software:
portableapps.com/apps

3.) lupopensuite

Eine Lösung mit Online Video Tutorials, verschiedenen Skins, sowie Sprachen. Wird ebenfalls in zwei Varianten angeboten und zudem sind die integrierten Programme auf dem neusten Stand.

Full -> 300MB
Lite -> 100MB

lupo_pensuite
lupo_pensuite

Zusatz Software:
www.lupopensuite.com/a-internet.htm

weitere Links:
Sourceforge.net – Portable Apps
Opera 10 Portable (Deutsch)
Portable – Freeware – Collection (Englisch)
wikipedia

drop.io – Upload your files

drop.in
drop.in

Was ist drop.io?

Dies ist eine sehr einfach gehaltener “File sharing Service”.

drop.io kann immer und überall via Browser erreicht werden, man kann bis zu 100 MB pro Upload (drop) hochladen und ggf. mit einem Passwort versehen oder aber auch anderen Gästen herauf- und herunterladen sowie das bearbeiten und löschen von Dateien erlauben, dafür braucht man sich nicht einmal auf der Webseite Registrieren.

Wie funktioniert drop.in?

CO2 Emissionen + Geburts- & Sterberaten

Habe soeben eine sehr interessante Webseite gefunden, die ich niemanden vorenthalten möchte.

CO2 Emissionen + Geburts- & Sterberaten jedes Landes simuliert in Echtzeit

earth-breathing-simulation
earth-breathing-simulation

Link:
www.breathingearth.net

Top 10 – Malware-Seiten

Google hat eine Liste der von ihm beobachteten Top-10-Malware-Sites (von April – Mai 2009) veröffentlicht. Dabei leiten beispielsweise legitime, aber gehackte Webseiten Besucher auf diese Sites um, wo deren PCs mit Schädlingen infiziert werden sollen. Kriminelle nutzen dazu unter anderem Exploits für den Internet Explorer, Firefox und QuickTime.

Die Liste zeigt die Zahl der auf die Malware-Site referenzierenden gehackten Webserver.


malware-website
Malware-Websites


Bedingungen in der Shell – Linux

Hier soll an einigen Beispielen klar werden, wie man Bedingungen in z.B. Shell-Abfragen (if) einbaut.

Dateien:

-d file

-> file existiert und ist ein Verzeichnis

-e file

-> file existiert

-f file

-> file existiert und ist regulär

Beispiel:

if [ -f /etc/issue ] ; then cat /etc/issue | awk {'print $3'}; fi

-s file

-> file existiert und ist nicht leer

-r file

-> file existiert und ist lesbar

-w file

-> file existiert und ist beschreibbar

datei1 -nt datei2

-> datei1 ist jünger als datei2

datei1 -ot datei2

-> datei1 ist älter als datei2

Strings:

-z string

-> string ist leer

-n string

-> string ist nicht leer

Beispiel:

test="Hallo"
if [ -n $test ] ; then echo $test; fi
unset test
if [ -n $test ] ; then echo $test; fi

s1 == s2

-> s1 ist gleich s2

s1 != s2

-> s1 ist ungleich s2

s1 < s2

-> s1 ist kleiner s2 (bzgl. Sortierung)

s1 > s2

-> s1 ist größer s2

Arithmetik:

n1 -eq n2

-> n1 ist gleich n2

Beispiel:

a=5
b=5
if [ $a -eq $b ]  ; then echo -e "es sind die gleichen Zahlen"; else echo "es sind nicht die gleichen Zahlen" ;fi
b=4
if [ $a -eq $b ]  ; then echo -e "es sind die gleichen Zahlen"; else echo "es sind nicht die gleichen Zahlen" ;fi

n1 -ne n2

-> n1 ist ungleich n2

n1 -lt n2

-> n1 ist kleiner n2

n1 -le n2

-> n1 ist kleiner/gleich n2

n1 -gt n2

-> n1 ist größer n2

n1 -ge n2

-> n1 ist größer/gleich n2

Logik:

expr1 -a expr2

-> Ausdruck expr1 UND expr2

expr1 -o expr2

-> Ausdruck expr1 ODER expr2

netstat + ss + lsof

Mit den folgenden kleinen Kommandos kannst du sehen, welche Verbindungen von welcher IP / Port / Programm zu welchem Ziel aufgebaut wurden.

__________________________________________

netstat -nat

-> aktive Verbindungen (auch solche welche eine Verbindung aufgebaut haben bzw. soeben versuchen)

netstat --udp --tcp --listening --programs --numeric

bzw.

netstat -ntauple

-> alle TCP/UDP-Sockets anzeigen auf denen gelauscht wird

ss -l -p -e

-> alle Sockets anzeigen auf denen gelauscht wird

ss -o state established '( dport = :ssh or sport = :ssh )'

-> aufgebaute SSH-Verbindungen anzeigen

ss -t -a

-> zeigt alle TCP-Verbindungen an

ss -u -a

-> zeigt alle UDP-Verbindungen an

lsof -i -nP

-> zeigt alle Verbindungen, deren Ports, Programme, PID und dessen User an

find – Linux

Es folgen einige Beispiele, wie man den “find-Befehl” nutzen kann… viel Spaß beim ausprobieren.

find -size +10M -20M -exec ls -lah {} \;

-> Sucht Dateien ab dem aktuellen Verzeichnis, die gräßer sind als 10MB, aber kleiner als 20MB und zeigt diese an.

find /home/ -iname '*.jpg' -exec tar -czf bilder.tar.gz {} \;

-> Ab dem home-Verzeichnis nach Dateien suchen, die auf “.jpg/.JPG” enden duchsuchen und diese archivieren.

find / -used 1

-> Ab dem root-Verzeichnis alle Dateien suchen, welche heute (1 -> Tag) verwendet wurde.

find / -amin -10 [ -atime -10 ]

-> Ab dem root-Verzeichnis alle Dateien suchen, auf denen vor weniger als 10 Minuten [ Tage ] zugegriffen wurde.

find / -mmin +10 [ -mtime +10 ]

-> Ab dem root-Verzeichnis alle Dateien suchen, welche vor mehr als 10 Minuten [ Tage ] geändert wurden.

touch --date='15:00' /tmp/ref
find / -newer /tmp/ref

-> Ab dem root-Verzeichnis alle Dateien suchen, welche neuer sind als heute um 15:00 Uhr.

find / -type f -name "*neu*"

-> Ab dem root-Verzeichnis alle Dateien suchen, in welchen “neu” vorkommt.

find / -type d -name "*home*"

-> Ab dem root-Verzeichnis alle Verzeichnisse suchen, in welchen “home” vorkommt.

find . -empty

-> Im aktuellen Verzeichnis nach Dateien suchen, welche eine Größe von “null” haben.

find /home/ -user root [ -group root ]

-> Ab dem home-Verzeichnis nach Dateien suchen, welche dem User “root” [ der Gruppe “root” ] gehören.

find /home/ ! -user root [ ! -group root ]

-> Ab dem home-Verzeichnis nach Dateien suchen, welche nicht dem User nicht “root” [ nicht der Gruppe “root” ] gehören.

 

Es folgt noch ein Beispiel + Erklärung:

# alle Dateien (type f) die älter als 30 Tage (mtime +30) sind außer alt_datum.tar.bz2 (exclude-from alt_`date +%d-%m-%y`.tar.bz2), werden zu einem Archiv zusammengefasst
find / -type f -mtime +30 --exclude-from=alt_`date +%d-%m-%y`.tar.bz2 -exec tar -cjf alt_`date +%d-%m-%y`.tar.bz2 {} \;
# nun alle Dateien, die älter als 30 Tage sind löschen
find / -type f -mtime +30 --exclude-from=alt_`date +%d-%m-%y`.tar.bz2 -exec rm {} \;
# alle Dateien welche den Namen “alt_irendwas.tar.bz2” haben (ianme “alt_*.tar.bz2”, werden gelöscht
find / -type f -iname "alt_*.tar.bz2" -mtime +60 -exec rm {} \;