# bash-2.04$ +++ Notes +++ # GNU bash, version 2.04.21(1)-release # # Gruppen rechte auf alle Verzeichnisse setzten. for x in *; do chown -R root.src $x; done for i in `ls` do #chgrp $i $i chown -R $i $i done echo "ok" Zeichenfolge 'to=sales@' aus maillog suchen. grep "to=sales@" /var/log/maillog | awk {'print $7'} FOR schlaufe für rechte setzten. for x in *; do chown -R root.src $x; done " Erstellen einer 2MB RAM-Disk: dd if=/dev/zero of=/dev/ram bs=1k count=2048 Erstellen des Dateisystems auf der RAM-Disk: mkfs -t ext2 /dev/ram mounten der RAM-Disk: mount /dev/ram /mnt/ram Zerlegen der Datei datei.xyz in mehrere Teile mit einer Größe von z.B. 1MB. Es entstehen nun Dateien mit den Namen: xaa, xab, xac ... xyy xyz xzaaa xzaab ...: split -b 1048576 datei.xyz Die Einzelnen Dateien können mit: cat x?* > neuedatei.xyz wieder zusammengefügt werden. Es dürfen sich natürlich keine anderen Dateien die mit x beginnen in dem Verzeichnis befinden. Das Ergebnis kann mit: diff datei.xyz neuedatei.xyz überprüft werden wobei keine Unterschiede auftreten dürfen. Eine Datei mit Secure Copy (scp) auf den Rechner pc2 in das Verzeichnis /home/rup/Desktop/ kopieren: scp TestDatei rup@pc2:/home/rup/Desktop/ Eine Datei mit wget vom FTP-Server (passives ftp) in das aktuelle Verzeichnis downloaden. Damit der Download auch nach verlassen der Shell nicht abgebrochen wird, wird nohup verwendet. nohup wget --passive-ftp ftp://ftp.foo.de/pub/datei.iso & Die Ausgabe von wget kann mit folgendem Befehl verfolgt werden: tail -f nohup.out Mit dem Parameter -c kann ein abgebrochener FTP-Download wieder aufgenommen werden. Jetzt z.B. ohne nohup: wget -c --passive-ftp ftp://ftp.foo.de/pub/datei.iso Eine Webpage mit wget herunterladen und auf dem lokalen Rechner spiegeln. Mit dem Parameter -l 2 werden Links bis in die 2. Ebene kopiert. Mit -l 0 wuerde man warscheinlich das ganze Inernet herunterladen ;-). Der Parameter - -convert-links oder -k konvertiert die Links in den Seiten (z.B. auch Verknuepfungen zu Grafiken) zu relativen Links, so dass die Seite am lokalen Rechner ohne Internetverbindung verwendet werden kann, wget --mirror --convert-links -l 2 http://www.google.de Das ganzes Verzeichnis bar/ samt allen Dateien und Unterverzeichnissen vom FTP Server ftp://foo.de auf dem lokalen Rechner kopieren (passives ftp). wget --passive-ftp -r ftp://foo.de/pub/bar/ oder z.B.: wget --passive-ftp -r ftp://user:password@foo.de/ Den Inhalt eines Verzeichnisses (inclusive versteckter Dateien und Unterverzeichnissen) mit rsync auf einen anderen Rechner kopieren und eventuell ersetzen. rsync -avz --include=* --include=.* /daten/ user@PC2:/daten/ Softlink erzeugen: ln -s dateiname linkname Hardlink erzeugen erzeugen. Funktioniert nicht über mehrere Dateisysteme, erscheint mit ls -l nicht als Link: ln dateiname linkname Systemausgaben anzeigen lassen (Letzten 10 Zeilen der Datei /var/log/messages immer aktuell): tail -f /var/log/messages System- und Hardwareuhr einstellen z.B. auf ``Mon Aug 25 12:35:00 CEST 2003'' (erfordert root-Rechte): date 082512352003.00 && hwclock -wu Uhr über Time-Server abgleichen (time): / usr/sbin/netdate -v wrzx03.rz.uni-wuerzburg.de \ && /sbin/hwclock -wu oder Uhr über Time-Server abgleichen (ntp): /usr/sbin/ntpdate ntps1-0.cs.tu-berlin.de \ && /sbin/hwclock -wu oder date -u -s $(telnet 131.107.1.10 13 |grep UTC |cut -b16-23) \ && /sbin/hwclock -wu Spezialdatei fifo (first in first out) erzeugen: mkfifo /tmp/fifo Prüfen ob der Prozesse mit dem Namen ``Netscape'' laufen: ps -ax | grep -i Netscape ps -ef | grep -i Netscape Alle Prozess-ID's anzeigen ( ' ist ein Hochkomma $ 2 ist die zweite Spalte): ps -ef | awk '{print $2}' Alle Prozesse killen die auf das Device /dev/hdc1 zugreifen: kill -9 $(lsof -a /dev/hdc1 | awk '!/PID/ {print $2}') Alle Prozesse killen in deren Pozessbeschreibung (Ausgabe von ps -ef) der String wine enthalten ist: kill $(ps -ef|grep 'wine'|awk '{print $2}') Die vom Internet-Service-Provider zugewiesene IP anzeigen: /sbin/ifconfig ppp0 | grep "inet Adr" \ | awk '{ print $2 }' | awk -F ':' '{ print $2 }' Zaehlen wie viele Dateien sich im Verzeichnis befinden: ls | wc -w bit bc die Wurzel aus 2 berechnen, es werden 4 Nachkommastellen angezeigt: echo "scale=4; sqrt(8)" | bc Fünf Verzeichnisse mit einer for-Schleife erstellen (Verzeichnis_1 - Verzeichnis_5): for i in 1 2 3 4 5 do mkdir Verzeichnis_$i done Aus allen Dateinamen im aktuellen Verzeichnis die Leerzeichen entfernen. Aus Bild 001.jpg wird Bild001.jpg . Der Parameter -i von mv fraegt ob eine existierende Datei ueberschrieben werden soll. $ for i in * ;do mv -i "$i" $(echo "$i" \ | tr -d [:blank:]) ;done Bei allen Dateinamen im aktuellen Verzeichnis die Leerzeichen durch einen Bindestrich ersetzen. Aus Bild 001.jpg wird Bild-001.jpg . Der Parameter -i von mv fraegt ob eine existierende Datei ueberschrieben werden soll. $ for i in * ;do mv -i "$i" $(echo "$i" \ | tr [:blank:] - ) ;done Alle Dateien mit der Endung .jpeg ins home-Verzeichnis kopieren und die Endung in jpg umbenennen: for i in $(ls *.jpeg) do cp $i /home/${i%.*}.jpg done Alle Bild-Dateien mit der Endung .jpg um 50% verkleinern und als *_klein.jpg abspeichern for i in *.jpg do convert $i -geometry 50% $(basename $i .jpg)_klein.jpg done Alle Jpeg-Bilder im aktuellen Verzeichnis mit der Endung .jpg ins Encapsulated PostScript Format umwnadeln und die Endung in .eps umbenennen: for i in $(ls *.jpg) do convert $i /home/${i%.*}.eps done Von allen Jpeg-Dateinamen im Verzeichniss die ersten fuenf Zeichen entfernen. Z.B. aus Bild-Baum2. jpeg mache Baum2.jpeg. Natuerlich muessen alle Dateinamen mindestens sechs Zeichen lang sein und duerfen in diesem Fall nicht laenger als 100 Zeichen lang sein. for i in $(ls *.jpeg) do mv $i ${i:5:100} done Shell Script: Alle jpeg-Dateien im aktuellen Verzeichnis in fortlaufende Zahlen (00001.jpg 00002.jpg ...) umbenennen. Der neue Dateiname ist 5-stellig plus Endung. Achtung es darf nur ein Punkt im Dateinamen vorkommen und Dateinamen mit Endungen wie *.jpxyzg würden auch umbenannt werden: #!/bin/bash declare -i Zahl=0 for AlterDateiname in $(ls *.[jJ][pP]*[gG]) do Zahl=$Zahl+1 NeuerDateiname=0000${Zahl} mv $AlterDateiname ${NeuerDateiname:$((-5))}.jpg done ---- kill -HUP $(pidof in.proftpd) # sniffing & traffic analyzing # Server Portscan ip=212.117.197.116 u. 117 nc -v -z $ip 23 2> /tmp/temp cat /tmp/temp | grep refused >> /tmp/port nc -v -z $ip 25 2> /tmp/temp cat /tmp/temp | grep refused >> /tmp/port nc -v -z $ip 80 2> /tmp/temp cat /tmp/temp | grep refused >> /tmp/port nc -v -z $ip 110 2> /tmp/temp cat /tmp/temp | grep refused >> /tmp/port fuser -u /dev/tty[!p]* 2>&1 = alle prozess-IDs ausgeben pkill -u user pkill -u admin dsniff -cdm > dump.log | tee dump.log nemesis arp -v -h 0:3:47:6E:53:EA -S 1.2.3.4 -D 192.168.1.20 ngrep -t '^()' tcp port 80 -l > dump.log & tail -f dump.log ngrep -t '(abcdefghi)' ip and icmp ngrep -t '^(USER|PASS)' tcp and dst port 110 ngrep -t '^(USER|PASS)' tcp and dst port 110 and dst host 212.117.197.116 ngrep -t ip and dst host 212.117.197.101 -l > dump.log & tail -f dump.log tcpdump -l | tee dump.log tcpdump -a -e tcp port 110 tcpdump -a -v tcp and dst port 25 and dst host apache.a-enterprise.ch tcpdump -vvv -x udp and port 137 and udp and port 138 and dst \ host 212.117.202.206 -l > dump.log & tail -f dump.log tethereal -z sip,stat udp and port 5060 and net 192.168.216.0 tethereal udp and port 137 and host 192.168.100.1