# Lustige Sachen mit Linux

## Linux Systemverwaltung

<div id="bkmrk-doppelt-vergebene-ui"><div><div>- <div>doppelt vergebene UIDs finden</div>

```
awk -F: '{print $3}' /etc/passwd | sort -n |uniq -d
```

- <div>normale Dateien älter als 2 Tage anzeigen</div>

```
find . -type f -mtime +2 -printf "%f %Tc\\n"
```

- <div>normale Dateien älter als 2 Tage finden und löschen</div>

```
find . -type f -mtime +2 -exec rm -f {} \;
```

- <div>normale Dateien älter als 2 Tage, deren Dateiname nicht mit .gz endet, mit GZIP packen</div>

```
find . -type f -mtime +2 ! -name "*.gz" -exec gzip {} \;
```

- <div>normale Dateien in Unterverzeichnis g*/* mit *2005* im Namen und nicht mit der Endung *.gz„ (also nicht nicht gezippt) mit gzip packen</div>

```
find g*/* -type f -name "*2005*" -a ! -name "*.gz" -exec gzip {} \;
```

- <div>normale Dateien finden größer als 1MB</div>

```
find . -type f –size +1024k
```

- <div>alte (noch ungezippte) Logs, älter als 2 Tage finden und zippen</div>

```
find /opt/fast/datasearch/var/log/querylogs.backup -type f -mtime +2 ! -name "*.gz" -exec gzip {} \;
```

- <div>Inhalt inkl. Unterverzeichnisse eines Ordners löschen, der zu groß für ein rm -rf ist</div>

```
find /opt/vollesVerzeichnis/ -mindepth 1 -maxdepth 1 -exec rm -rf {} \;
```

- <div>Dateien durchsuchen, auch wenn man den genauen Pfad oder den Dateinamen nicht kennt</div>

```
find /verzeichnis -exec grep -s -l "sucheintrag" {} \;
```

- <div>Files nach Inhalt durchsuchen und z.B. löschen wenn Übereinstimmung (nützlich um mailqueues zu leeren)</div>

```
find . -exec grep -q "spamdomain.net" '{}' \; -exec rm {} \;
```

</div></div></div>- <div>Verzeichnisse rekursiv durchsuchen und jeweils die ältesten 5 Dateien ausgeben</div>

```code
find . -type d -exec bash -c 'echo "next dir: ${1}" ; ls -lt "$1" | grep ^- | head -n 5' bash {} \;
```

<div id="bkmrk-alle-sonderzeichen-i"><div>- <div>alle Sonderzeichen in Dateien anzeigen</div>

```
cat -A datei | less
```

- <div>alle Dateinamen im aktuellen Verzeichnis in Kleinbuchstaben umwandeln</div>

```
for name in * ; do mv -i $name `echo $name | tr [A-ZAeOeUe] [a-zAeOeUe]` ; done
```

- <div>Erweiterung einer Datei ändern (das Beispiel benennt .TXT in .txt um)</div>

```
for a in *.TXT ; do echo mv -i $a `basename $a .TXT`.txt ; done
```

- <div>Kommandozeile verschleiern - verhindert die Anzeige des ausgeführten Programms in der Prozessliste</div>

```
doexec EigentlichesProgramm Schleier Parameter
```

- <div><abbr title="Secure Shell">SSH</abbr> Tunneln</div>

```
ssh -g -L3389:192.168.110.17:80 myserver.de
```

- <div>Bootsektor einer Festplatte überschreiben (/<abbr title="development">dev</abbr>/cciss/c0d0 durch das richtige Laufwerk ersetzen, grub.conf)</div>

```
cat /etc/grub.conf
dd if=/dev/zero of=/dev/cciss/c1d0 bs=512 count=1
```

- <div>Datei mit einer bestimmten Größe erstellen (hier z.B. 20MB groß)</div>

```
dd if=/dev/zero of=/tmp/blafasel bs=1024k count=20
```

- <div>Eine Zeile mit awk parsen/ausgeben - Leerzeichen als Feldseparator, Feld 1 ausgeben</div>

```
cat <datei> | awk -F" " '{ print $1 }'
```

- <div>access.log analysieren, nur Requests ausgeben, die Dateien größer als 150 <abbr title="Megabyte">MB</abbr> runterluden (1024*1024*150)</div>

```
tail -f access.log | awk '$6 > 157286400'
```

- <div>ein .patch-File erstellen</div>

```
diff -aur file-alt.c file-neu.c
```

- <div><abbr title="Domain Name System">DNS</abbr>-Server reverse-zonefile neu laden</div>

```
rndc reload 180.34.212.in-addr.arpa.
```

- <div>alle mit a beginnenden Dateien und Verzeichnisse inklusive Unterverzeichnisse auflisten → unübersichtlich</div>

```
ls -a*
```

- <div>nur noch Dateien und Verzeichnisse zeigen OHNE die Unterverzeichnisse</div>

```
ls -d a*
```

- <div>Scriptautomatisierung - Texte ausgeben mit yes</div>

</div></div>Manche Programme verlangen eine Bestätigung der Eingabe mit z.B. y oder no. Dies kann automatisch passieren durch das Programm yes

<div id="bkmrk-yes-%7C-unzip-bla.zip-"><div>```
yes | unzip bla.zip
```

- <div>den Kommandostack / die History der <abbr title="Bourne-again shell">Bash</abbr> löschen</div>

```
export HISTSIZE=0
```

- <div>eigene <abbr title="Internet Protocol">IP</abbr>-Adresse rausfinden (nützlich bei Einwahlverbindung) für ipv4 und ipv6</div>

```
env LC_ALL=C /sbin/ifconfig eth0 | sed -n '/inet addr:/s/ [^r]*..//gp'
env LC_ALL=C /sbin/ifconfig eth0 | sed -n '/inet6 addr:/s/ [^r]*..//gp'
```

- <div>SWAP-Speicher erweitern (z.B. nach Arbeitsspeichererweiterung)</div>

```
dd if=/dev/zero of=/var/tmp/swapfile bs=2GB count=1  # erzeugt ein 2GB Swapfile
mkswap /var/swap/swapfile  #schreibt die Swapsignatur
```

</div></div>in /etc/fstab folgende Zeile ergänzen

<div id="bkmrk-%2Fvar%2Fswap%2Fswapfile-s"><div>```
/var/swap/swapfile  swap swap  pri=1000 0 0
```

</div></div>und nun mit swapon -a den neuen Speicher einschalten

<div id="bkmrk-vlc-videostream-mit-">- <div>VLC-Videostream mit Logitech Quickcam (<abbr title="Hypertext Transfer Protocol">HTTP</abbr> mit Authentifizierung) Server-Modus</div>

```
vlc v4l:/dev/video0:norm=0:frecuency=0:channel=0 --no-audio --no-sout-audio --sout-http-user username --sout-http-pwd passwort --sout '#standard{access=http,mux=asf,dst=0.0.0.0:8080}'
```

- <div>schnell ganz viele User anlegen</div>

```
for i in `seq -w 1 65`; do echo "useradd -c \"Test-Account $i\" test$i; echo `pwgen -1 -c -n -s 8` | passwd --stdin test$i"; done
```

</div>## Backup bezogen

<div id="bkmrk-backup-eines-servers"><div>- <div>Backup eines Servers erstellen</div>

</div></div>exclude.txt (hier kommen die zu übergehenden Verzeichnisse rein)

<div id="bkmrk-%2Fproc-%2Fdev-%2Flost%2Bfou">```
/proc
/dev
/lost+found
/tmp
/sys
```

```
tar czf /tmp/backup.tgz --exclude-from=excludes.txt /
```

- <div>tar-Standardausgabe via <abbr title="Secure Shell">SSH</abbr> auf Zielsystem schicken</div>

```
tar cf - `cat /verzeichnisliste.txt` | ssh -c blowfish remote.meinserver.de "cd /zielverzeichnis/bla && tar xf -"
```

- <div>Verzeichnis via rsync auf anderes System spiegeln</div>

```
rsync -rlvpogDt --size-only --partial --stats --progress -e "ssh -c blowfish" root@<quellserver>:/ /<zielverzeichnis>
```

</div>## HAHA

<div id="bkmrk-star-wars-beep-auf-d">- <div>Star Wars Beep auf der Console</div>

```
beep -l 350 -f 392 -D 100 --new -l 350 -f 392 -D 100 --new -l 350 -f 392 -D 100 --new -l 250 -f 311.1 -D 100 --new -l 25 -f 466.2 -D 100 --new -l 350 -f 392 -D 100 --new -l 250 -f 311.1 -D 100 --new -l 25 -f 466.2 -D 100 --new -l 700 -f 392 -D 100 --new -l 350 -f 587.32 -D 100 --new -l 350 -f 587.32 -D 100 --new -l 350 -f 587.32 -D 100 --new -l 250 -f 622.26 -D 100 --new -l 25 -f 466.2 -D 100 --new -l 350 -f 369.99 -D 100 --new -l 250 -f 311.1 -D 100 --new -l 25 -f 466.2 -D 100 --new -l 700 -f 392 -D 100 --new -l 350 -f 784 -D 100 --new -l 250 -f 392 -D 100 --new -l 25 -f 392 -D 100 --new -l 350 -f 784 -D 100 --new -l 250 -f 739.98 -D 100 --new -l 25 -f 698.46 -D 100 --new -l 25 -f 659.26 -D 100 --new -l 25 -f 622.26 -D 100 --new -l 50 -f 659.26 -D 400 --new -l 25 -f 415.3 -D 200 --new -l 350 -f 554.36 -D 100 --new -l 250 -f 523.25 -D 100 --new -l 25 -f 493.88 -D 100 --new -l 25 -f 466.16 -D 100 --new -l 25 -f 440 -D 100 --new -l 50 -f 466.16 -D 400 --new -l 25 -f 311.13 -D 200 --new -l 350 -f 369.99 -D 100 --new -l 250 -f 311.13 -D 100 --new -l 25 -f 392 -D 100 --new -l 350 -f 466.16 -D 100 --new -l 250 -f 392 -D 100 --new -l 25 -f 466.16 -D 100 --new -l 700 -f 587.32 -D 100 --new -l 350 -f 784 -D 100 --new -l 250 -f 392 -D 100 --new -l 25 -f 392 -D 100 --new -l 350 -f 784 -D 100 --new -l 250 -f 739.98 -D 100 --new -l 25 -f 698.46 -D 100 --new -l 25 -f 659.26 -D 100 --new -l 25 -f 622.26 -D 100 --new -l 50 -f 659.26 -D 400 --new -l 25 -f 415.3 -D 200 --new -l 350 -f 554.36 -D 100 --new -l 250 -f 523.25 -D 100 --new -l 25 -f 493.88 -D 100 --new -l 25 -f 466.16 -D 100 --new -l 25 -f 440 -D 100 --new -l 50 -f 466.16 -D 400 --new -l 25 -f 311.13 -D 200 --new -l 350 -f 392 -D 100 --new -l 250 -f 311.13 -D 100 --new -l 25 -f 466.16 -D 100 --new -l 300 -f 392.00 -D 150 --new -l 250 -f 311.13 -D 100 --new -l 25 -f 466.16 -D 100 --new -l 700 -f 392
```

- <div>lecker Bier:</div>

```
[magenbrot@brot ~]$ cd /pub
[magenbrot@brot pub]$ more beer 
                    .OOOOOOOOO.
               .OOOOOOOOOOOOOOOOOOO
             OOOOOOOOOOOOOOOOOOOOOOOOO
            OOOOOOOOOOOOOOOOOOOOOOOOOOOO
            ooOOOOOOOOOOOOOOOOOOOOOOOoOO
           |OooooOOOOOOOOOOOOOOOooooO|O
    _______|OOOOOoooooOOOOOoooooOOOOO|O
   /         OOOOOOOOOoOOOOOoOOOOOOOOO|O
  /  .------+OOOOOOOOOoOOOOOoOOOOOOOOO|
 /  /       |OOOOOOOOOOoOOOoOOOOOOOOOO|
|  |        |.OOOOOOOOOoOOOoOOOOOOOOO.|
|  |        |.....OOOOOOoOOoOOOOO.....|
|  |        |...........OOOo..........|
 \  \       |...........OOOo..........|
  \  '------+............Oo...........|
   \________ .........................|
            |.........................|
           /...........................
          ooo.......................ooo
              oooo...............oooo
                  ooooooooooooooo

```

- <div>schwanzersatz.sh:</div>

```
echo `uptime|grep days|sed 's/.*up \([0-9]*\) day.*/\1\/10+/'; \
cat /proc/cpuinfo|grep "cpu MHz"|awk '{print $4"/30 +";}'; free|grep '^Mem' \
|awk '{print $3"/1024/3+"}'; df -P -k -x nfs | grep -v 1k \
| awk '{if ($1 ~ "/dev/(scsi|sd)"){ s+= $2} s+= $2;} END \
{print s/1024/50"/15+70";}'`|bc|sed 's/\(.$\)/.\1cm/'
```

</div>