Deutsch English
Springe zu
Dein Feedback:
Hat die Seite Deine Erwartung erfüllt? vote3 Ja
vote2 Teilweise
vote1 Nein
Noch ein Kommentar?

Nur falls, Du eine Antwort erwartest, Deine E-Mailadresse

Gegebenenfalls noch Dein Name

Do not change this:
Feedback
Suchen

Logeinträge auf der Konsole verhindern

dmesg -n level
13-07-2008 14.33

Eigenen Xserver starten

startx fvwm2 -- :2 -depth 16
13-07-2008 14.33

xlock als Bildschirmschoner

xautolock -exit 2>/dev/null; xautolock -corners "+---" -time 10 -notify 30 -locker "xlock -mode random"
13-07-2008 14.33

Interaktive Dienste automatisiert nutzen mit expect

#!/usr/bin/expect
set myserver "10.0.0.1"
set myport "21"
send "Try to connect to server $myserver port $myport\n"
spawn telnet $myserver $myport
expect "220 " { send "USER ftp\n" }
expect "331 " { send "PASS foo\n" }
expect "230 " { send "PASV\n" }
expect "227 " { send "HELP\n" }
expect "214 " { interact }
13-07-2008 14.33

Eine Datei beim herunterladen on-the-fly in kleine Teile zerteilen

wget ftp://... -nv -O - | split ....
13-07-2008 14.33

Mit rsync (über ssh) zwei Dateien (Ordner) synchronisieren

/usr/bin/rsync --rsync-path=/usr/local/bin/rsync -rlpe ssh QUELLE ZIEL
rsync --compress --progress --no-whole-file -rlpe ssh remote:/path/file file
13-07-2008 14.33

Dateien sortiert nach Groesse ausgeben

ls -lS

Informationen über eine Datei

So kann man sich informationen über eine Datei anzeigen lassen, die sich leicht parsen lassen
stat myfile.txt
04-08-2010 00.07

Von ALPHA bis OMEGA zählen

seq ALPHA OMEGA
13-07-2008 14.33

Text ausfiltern


Die /var/log/syslog von heute

cat /var/log/syslog | grep ^"`date +%b\ %d`"

Formatiere date Ausgabe

# date +'%Y%m%d_%H%M%S'
20081103_1759026

Leere Zeilen und Kommentare weglassen

grep -ve ^\ *\#'\|'^$ /etc/*.conf

Hervorheben was gemacht hat

echo "ABC123DEF456GHI" | grep --color [0-9H]
ABC123DEF456GHI

Jeden Treffer einzeln ausgeben

echo "ABC123DEF456GHI" | grep -E --only-matching [0-9H]+
123
456
H

Nur Dateinamen der Dateien auflisten die Treffer enthalten

grep --files-with-match foo *

Auf das in sed zugreifen, was auf den regulären Ausdruck gepasst hat

echo "ABC123DEF456GHI" | sed 's/[0-9H]\+/_&_/g'

ABC_123_DEF_456_G_H_I

echo "ABC223DEF456GHI" | sed s/"\([0-9]\+\)"/"_\1_"/

ABC_223_DEF456GHI

Mehrere Strings mit sed ersetzen

Wenn man mehrere verschiedene Strings mit sed ersetzen will, muss man nicht mehrere sed Aufrufe durch eine Pipe verbinden
echo foo bar | sed s/foo/Hello/ | sed s/bar/world/

sed kann auf mehrere Ersetzungen in einem Lauf durchführen
echo foo bar | sed -e s/foo/Hello/ -e s/bar/world/

awk kann auch grep

Häufig sucht man mit grep nach bestimmten Zeilen und gibt mit awk dann bestimmte Spalten aus
grep error /var/log/syslog | awk '{ print $3 }'

Den grep Aufruf kann man sich dabei sparen
awk '/error/ { print $3 }' /var/log/syslog

Regular Expression Lookahead

Angenommen man hat den String
EXAMMLE
und möchte das zweite M durch ein P ersetzen.

Positiv Lookahead

So sucht man ein M, welches von einem L gefolgt ist
M(?=L)
Der Unterscheid zu
ML
ist dabei, dass das L im ersten Fall bei einer Ersetzung nicht mit ersetzt würde, im zweiten Fall aber schon.

Negativ Lookahead

So sucht man ein M, welches nicht von einem M gefolgt ist
M(?!M)
So sucht man einen String, der nicht mit CA anfängt
^(?!CA)

Siehe auch Regular Expressions Lookaround
18-03-2013 01.28

awk

Anderen Spaltentrenner für awk definieren

awk 'BEGIN {FS=" - "} {print $1 $2 $3}'
awk 'BEGIN {FS="\t"} {print $3}

Mit awk einen String an festgelegtem Trennzeichen aufteilen

echo foo,bar,test | awk 'BEGIN {FS=","} {split($0,a,","); for (i=1; i<=NF; i++) print a[i]; }'

Mit awk rechnen

echo 42 11 | awk '{print $1*1000, $2}'

Spaltenweise aufsummieren
cat foo | awk '{mycol2 += $2; mycol3 += $3}; END {print mycol2":"mycol3}'


Bedingungen an zu bearbeitende Zeilen stellen

Nur Zeilen bei denen die erste Spalte größer 45 ist bearbeiten
cat foo | awk '$1>45 {print $0}'

Nur Zeilen ab Zeilen Nummer 12 ausgeben
cat foo | awk 'NR>11 { print $0 }'

Nur Zeilen bei denen in der zweiten Spalte das Wort "FooBar" steht ausgeben:
cat foo | awk '$2~/FooBar/ {print $0}'

awk Ausgabe formatieren

echo 1 2 | awk '{ printf("%.3d %s\n", $1, $2)  }'
22-09-2012 11.37

Auf der Konsole rechnen

echo "1 + 2" | bc
echo "1 / 3" | bc -l
14-07-2008 19.56

Unterschiede zwischen zwei Dateien

diff -ubB FOO BAR

Einen String gegen einen regulären Ausdruck abgleichen

expr FooBar-5.2 : ".*-5.2"
18-05-2008 15.06

Mit mmv Dateien umbenennen

Benenne *a* nach *b* um:
mmv "*a*" "#1b#2"

cp -r für einige Dateien

Rekursive Dateien mit bestimmten Dateiendungen kopieren und dabei die Ordnerstruktur beibehalten

# shopt -s globstar
# cp -v --parents -r **/*.jpeg **/*.jpg **/*.JPG **/*.png **/*.tif **/*.gif /mnt/mnt/backup_of_pictures/
21-09-2014 15.22

Samba / Windows Freigabe mounten

mount -t smbfs -o username=uname,password=passwd //smbserv/share /destination

fat32 vfat Dateisystem mit einem Namen / Label versehen

mlabel -i /dev/sdc1 ::FOOBAR
26-01-2010 00.03

Kernel

Kernel bauen (traditionell)

nice --5 make dep clean bzImage modules bzlilo modules_install

Kernel Bootparameter

/usr/src/linux/Documentation/kernel-parameters.txt
22-09-2012 11.37

xface erstellen

48x48 ppm -> pgm -> pbm -> xbm
cat file.xbm | xbm2ikon > file.48
compface file.48 file.face
13-07-2008 14.33

pdf2ps (mit Passwort)

gs -sPDFPassword=password -sDEVICE=pswrite -dNOPAUSE -sOutputFile=out.ps in.pdf

Dateien in eine optisch ansprechende und zum Drucken geeignete Postscript Datei umwandeln

a2ps --medium A4dj -E -o /tmp/pretty.ps A B C D ...
Unicode / utf-8: u2ps ...(gnome-u2ps)

Ein Postscript Buch erstellen

psbook normal.ps | psnup -2 -m25 > book.ps
22-09-2012 11.37

Multimedia


vob2avi

Mit Transcode VOB Dateien in ein anderes Videoformat konvertieren
transcode -i myVobFolder -o movie.avi -y xvid -x vob
Skalieren
-B 4
Einen anderen Audiokanal auswählen, wählt man einen nicht existierenden Kanal, werden die VOB Dateien einmal durchsucht, nichts konvertiert und eine fast leere Datei erzeugt
-a1
Encoder Bitrate
-w 1800
Clipping, scheidet oben und unten 16 Reihen ab
-j 16,0
Lineare Interpolation für Interlaced Videos
-I1
Ergebnis noch mal schneiden
avisplit -c -i movie.avi -t 00:00:00.00-00:05:10.00,00:11:59.00-00:22:41.00
tcaud benutzen
-y xvid,tcaud
DivX erzeugen
-y ffmpeg -F mpeg4
Alternative mit mencoder
cat *.vob | mencoder -oac mp3lame -ovc xvid -xvidencopts pass=1             - -o movie.avi;
cat *.vob | mencoder -oac mp3lame -ovc xvid -xvidencopts pass=2:bitrate=700 - -o movie.avi;

mkv2avi

mencoder -oac pcm -ovc copy  -ofps 30000/1001 -o Movi.avi Movi.mkv

Ton aus Video extrahieren

nice transcode -i vts_01_6.vob -o soundtrack.wav -y null,wav -x vob -e 44000
mplayer -ao pcm:fast:file=audio.wav -vo null -vc null video.avi

jpg2avi

Mplayer

mencoder 'mf://*.jpg'                      -mf fps=10:type=jpg -xvidencopts bitrate=1600 -ovc xvid -oac copy -o output.avi
mencoder mf:///tmp/foo/\*.jpg -vf rotate=1 -mf fps=5:type=jpg -lavcopts vcodec=mpeg4 -ovc lavc -oac copy -o output.avi

ImageMagick

animate -delay 10 *.jpg
animate -help

convert -delay 10 *.jpg out.gif

Bilder automatisiert bearbeiten

ImageMagick
convert large.jpg -resize 120x120 small.jpg
convert large.jpg -resize 50% small.jpg
Bilder von einem Ereignis, aber mit mehreren Kameras aufgenommen? So kann man das Datum aus dem exif Header der JPEG Bilder vor den Dateinamen setzten um alle Bilder chronologisch sortieren zu können
Vorher Sicherheitskopie machen and überprüfen dass man keine Dateien überschreibt!
for i in *.jpg; do d=`exif -t 0x9003 "$i" | grep Value | sed s/^"  Value: "// | sed s/\ /_/g | sed s/:/-/g`; mv "$i" "$d""_""$i"; done
Das Datum in allen Dateien von 2005 auf 2006 ändern
for i in *;
do
n=`exif -t 0x9004 "$i" | grep ^" Value: " | sed s/^" Value: "// | sed s/2005/2006/`;
x="exif --ifd=EXIF -t 0x9004 --set-value=\"$n\" $i";
eval "$x";
done
Die Uhrzeit um eine Stunde erhöhen
for i in *.jpg;
do
value=`exif -t 0x9003 "$i" | grep Value | sed s/^" Value: "//;`
value_date=`echo "$value" | awk '{ print $1 }'`
value_time=`echo "$value" | awk '{ print $2 }'`
value_date_yyyy=`echo "$value_date" | awk 'BEGIN {FS=":"} {print $1}'`
value_date_mm=`echo "$value_date" | awk 'BEGIN {FS=":"} {print $2}'`
value_date_dd=`echo "$value_date" | awk 'BEGIN {FS=":"} {print $3}'`
value_time_hh=`echo "$value_time" | awk 'BEGIN {FS=":"} {print $1}'`
value_time_mm=`echo "$value_time" | awk 'BEGIN {FS=":"} {print $2}'`
value_time_ss=`echo "$value_time" | awk 'BEGIN {FS=":"} {print $3}'`

value_time_hh=`expr $value_time_hh + 1`
if [ $value_time_hh -lt 10 ]; then
value_time_hh="0$value_time_hh"
fi

newvalue="$value_date_yyyy:$value_date_mm:$value_date_dd $value_time_hh:$value_time_mm:$value_time_ss"

echo "$i" "$value" " -> " "$newvalue"

exif --ifd=EXIF -t 0x9003 --set-value "$newvalue" "$i"
done
21-09-2014 15.22

unix2dos, dos2unix

alias unix2dos='recode lat1..ibmpc'
alias dos2unix='recode ibmpc..lat1'

Datei von ISO Kodierung nach Unicode umwandeln

iconv --from-code=ISO-8859-1 --to-code=UTF-8 ./oldfile.htm > ./newfile.html
04-08-2010 00.07

ACL

setfacl -m u:foo:r-- DEST
setfacl -x u:foo DEST
setfacl -m g:bar:r-- DEST
setfacl -x g:bar DEST
setfacl -m d:u:foo:r-- DIR
setfacl -m d:g:bar:r-- DIR
setfacl -m m:r-- DEST
setfacl -m d:m:r-- DIR
13-07-2008 14.33

Mozilla mehrmals starten können

alias my_mozilla='mozilla -remote "ping()" && mozilla -remote "openURL (,new-window)" || mozilla -splash'
13-07-2008 14.33

Spamassassin

Bayes: Wieviel E-Mails wurden bereits erlernt

sa-learn --dump | grep non-token\ data: | grep nspam$'\|'nham$

Bayes: Liste alle Wörter mit Ihrer Spamwahrscheinlichkeit

sa-learn --dump | grep -v non-token\ data: | sort -n

Mails von der Kommandozeile versenden

(echo "Hello world"; uuencode file1.txt ReadThis.txt; uuencode file2.txt AndThis.txt) | mailx -s subject foo@example.com

echo "Hello world" | mutt -a file1.txt foo@example.com
18-05-2008 15.06

Mit sftp Dateien hochladen

Falls scp mal nicht zur Verfügung steht:
sftp -o "batchmode no"  -b meinebefehle.sftp user@computer

meinebefehle.sftp:
lcd /home/foo/4upload/
cd /tmp/uploaded/
put Backup1.img
put Backpu2.img
quit
17-01-2010 02.37

Archivierung / Backup


Größe einiger Speichermedien
Name(Bytes)
DVD4590200
CDFIXME

Entfernten Rechner mit tar sichern

ssh root@otherhost -c blowfish 'cd /YOURPATH; tar -f - -p -P -c --exclude=/YOURPATH/tmp --exclude=/YOURPATH/var/cache /' | dd of=/daten/backup.tar

tar multi volume

tar --multi-volume --tape-length=1024 -cf archive.tar foo // n archive.001.tar n ...
tar --multi-volume --tape-length=1024 -c -f archive.tar -f archive001.tar -f archive002.tar -f ... foo
tar --multi-volume --tape-length=1024 --new-volume-script=/usr/local/bin/tar_changer.sh -cf archive.tar foo
tar --multi-volume -t -f archive.tar -f archive001.tar -f archive002.tar -f ...

tar_changer.sh:
#!/bin/sh

new_vol=`echo $TAR_VOLUME | awk '{printf "%04d\n", $1;}'`

new_name="$TAR_ARCHIVE"
new_name="`echo "$new_name" | sed s/"\."tar$//`"
new_name="`echo "$new_name" | sed s/"\."[0-9][0-9]*$//`"
new_name="$new_name"".""$new_vol"".tar"

echo "For volume $TAR_VOLUME of $TAR_ARCHIVE the next file name will be: $new_name"

if [ -e "$new_name" ]; then
echo "Error: file already exists!"
exit 1
else
echo "$new_name" >&$TAR_FD
fi

Redundanz für Dateien erzeugen

par2 create myparfiles foo*

DVD Image größer 2GB erzeugen

mkisofs -udf -allow-limited-size -o foo.img foo

Komplettes Partitions Backup (Image)

mount /dev/hda1 / -o remount,rw;
dd if=/dev/zero of=/delme1 bs=4048; rm /delme1;
mount /dev/hda1 / -o remount,ro;

Lokal

dd if=/dev/hda1 bs=4048 | bzip2 > /mountpoint/image_hda1.bz;

Netzwerk


ssh host -c blowfish 'dd if=/dev/hda1 bs=4048 | bzip2' | dd of=/image_hda1.bz

17-01-2010 01.49

Software Raid

Software RAID
13-07-2008 14.33

Beep z.B. bei Autovervollständigung abschalten

xterm: xset b off
setterm -blength
echo 'set bell-style visible' >> ~/.inputrc
13-07-2008 14.33

$TERM

vt100
xterm
linux
13-07-2008 14.33

chmod

chmod ABCD FILE
A:
4=user ID, 2=group ID, 1=sticky
B(Eigentümer), C(Gruppe), D(Rest):
4=r, 2=w, 1=x
06-08-2005 13.09

Bootmanager wiederherstellen

Vorhandenen Bootsektor sichern

if=/dev/hda of=/tmp/mbrbackupwithouttable.img bs=446 count=1
if=/dev/hda of=/tmp/mbrbackupwithtable.img bs=512 count=1

Lilo

Von Diskette/CD booten, mount /dev/linuxrootpartition /mnt; chroot /mnt; lilo; exit; umount /mnt; reboot

Grub

  • Die Grub Shell starten
  • Klar werden auf welcher Partition die Linux Installation liegt (z.B. mit find nach einer Datei suchen) und mit dem root Befehl entsprechend setzten.
    grub> find /boot/grub/stage1
    grub> root (hd0,3)
  • Grub entweder in den Masterbootsektor schreiben oder in eine der Partitionen
    grub> setup (hd0)
    grub> setup (hd0,3)

yaboot

ybin
13-07-2008 14.33

Groß- Kleinschreibung

less

Suchanfragen in less die komplett klein geschrieben sind ignorieren beim Suchen die Klein-/Großschreibung.
export LESS="-i"

sed

echo Cool | sed s/c/T/i

Groß- Kleinschreibung umwandeln

echo fOo | tr "[:lower:]" "[:upper:]" # FOO
echo fOo | tr "[:upper:]" "[:lower:]" # foo
09-12-2007 02.27

Nach bestimmten Spalten sortieren

Erst nach der 3. Spalte, dann nach der 2. und schließlich nach der 6. Spalte (diesmal numerisch) sortieren.
sort -k 3,3 -k 2,2 -k 6,6n

Nicht nur die Spalte angeben, nach der sortiert werden soll, sondern auch den Spaltentrenner (hier ":")
# echo "1:1:1
1:1:0" | sort -t : -k 3

1:1:0
1:1:1
18-05-2008 15.06

Bash

Bash Array

In der Bash einen Array definieren und mit Wert initialisieren und auf verschiedene Arten ausgeben.
# fruits=(apple banana strawberry)

# echo ${fruits}
apple

# echo ${fruits[1]}
banana

# echo ${fruits[*]}
apple banana strawberry

# echo ${#fruits[*]}
3

# echo ${fruits[*]}
apple banana strawberry

# for ((idx=(${#fruits[*]}-1); idx>=0; idx--)); do echo ${fruits[$idx]}; done
strawberry
banana
apple

Bash history

Bash Event Designators
!! Den letzten Befehl erneut ausführen
!-3 Drei Befehle zurück gehen
!mount Den letzten Befehl wiederholen der mit mount losging
!!:s/mount/umount/ Den letzten Befehl wiederholen und mount durch umount ersetzen
^mount^umount^ Kurzform
export HISTSIZE=1000 Die letzten 1000 Befehle merken
export HISTCONTROL=ignoreboth Eingaben die mit einem Leerzeichen beginnen nicht speichern und bei zwei aufeinanderfolgenden identischen Eingaben nur eine merken
shopt -s histappend Die letzte geschlossene Bash Sitzung überschreibt nicht mehr die History aller vorher geschlossenen
shopt -s histverify Befehle die man mit ! zurückgeholt hat werden nicht gleich ausgeführt

Shortcuts

ShortcutBeschreibung
Ctrl+AZum Anfang der Zeile
Ctrl+EZum Ende der Zeile
Ctrl+UVom Cursor zum Anfang der Zeile alles ausschneiden und in die Zwischenablage kopieren
Ctrl+KVom Cursor zum Ende der Zeile alles ausschneiden und in die Zwischenablage kopieren
Ctrl+WVom Cursor bis zum Anfang des Wortes alles ausschneiden und in die Zwischenablage kopieren
Ctrl+YAus der Zwischenablage einfügen
22-09-2012 11.37

find

find / -printf "%CY%Cm%Cd%CI%CM | %d | %i | %s | %h | %f\n"
find kann für jede gefundene Datei einen Prozess starten oder aber einen Prozess einmalig starten und ihm alle gefundenen Dateien als Parameter übergeben
find / -exec echo  '{}' +
find / -exec echo '{}' ';'

Alte Dateien finden

Dateien, die mindestens 165 Tage alt sind, genau 165 Tage alt sind, nicht älter als 165 Tage alt sind
find /foo -type f -ctime +165
find /foo -type f -ctime 165
find /foo -type f -ctime -165

Große Dateien finden

Alle Dateien auflisten, die mindestens 3MB groß sind.
find /foo -size +3000000c
find /foo -size +3M

Mit find nach Dateien mit bestimmten Dateirechten suchen
BefehlBeschreibungFindet z.B.Findet z.B. nicht
# find . -perm 400
# find . -perm u=r
Findet Dateien mit genau diesen Rechten -r-------- -r--r-----
# find . ! -perm 400
# find . ! -perm u=r
Findet Dateien deren Rechte gerade nicht genau so sind -rwxrwxrwx -r--------
# find . -perm -440
# find . -perm -u=r,g=r
Mindestens diese Rechte müssen alle gesetzt sein -rwxrwxrwx
-rw-r--r--
lrwxrwxrwx
-r--------
----r-----
# find . -perm /440
# find . -perm /u=r,g=r
Mindestens eines der Rechte muss gesetzt sein -rwxrwxrwx
-r--------
----r-----
--w-------

Kaputte Links finden
find /tmp/tg1/ -type l | while read link
do
if [ -h "$link" -a ! -e "$link" ];
then echo "$link";
fi;
done

find /tmp/tg1/ -printf '%Y %p \n' | grep ^N\  | sed s/^N\ //

Alle mit der Datei verlinkten Dateien anzeigen
find /mnt/mnt/ -L -samefile /mnt/mnt/bin/foo
18-03-2013 01.28

OSX

Routen unter OSX anzeigen und setzen

netstat -rn
route delete default
route add default 1.2.3.4

Batterie Status

ioreg -l | grep IOBa
17-01-2010 02.37

Interaktive Shell erkennen

if shopt -q login_shell ; then
...
else
...
fi
16-03-2008 09.41

Zu bereits besuchten Verzeichnissen zurückspringen


Neues Verzeichnis auf den Stack legen und dort hinspringen:

# pwd
/tmp

# pushd /etc/network/

# pushd /var/log/
/var/log /etc/network /tmp

# pushd /usr/sbin/
/usr/sbin /var/log /etc/network /tmp

# dirs
/usr/sbin /var/log /etc/network /tmp

Ein pushd vertauscht die obersten beiden Einträge und wechselt in das jeweilige Verzeichnis. Sehr praktisch wenn man zwischen 2 Ordner hin und her springen will.

# pushd
/var/log /usr/sbin /etc/network /tmp

# pwd
/var/log

# pushd
/usr/sbin /var/log /etc/network /tmp

# pwd
/usr/sbin

Mit +x bzw. -x kann der x. Order (gezählt wird von 0) von links bzw. von rechts nach oben rotiert werden.

# pushd +2
/etc/network /tmp /usr/sbin /var/log

/# pwd
/etc/network

Mit popd wird der oberste Order vom Stack entfernt und in den Order gewechselt der danach auf dem Stack ganz oben liegt. Mit -n wird nur der Eintrag entfernt und nicht gewechselt.
# dirs
/etc/network /usr/sbin /var/log

# popd
/usr/sbin /var/log

# pwd
/usr/sbin

# popd
/var/log

# pwd
/var/log

Mit +x und -x kann wieder das x. Element von links oder von rechts entfernt werden. Wird der oberste Ordner entfernt (+0) wird wieder in den neusten obersten Ordner gewechselt.

Unabhängig von pushd und popd kann man über folgende Variable immer auf den Order zugreifen den man vor dem aktuellen besucht hat
echo "$OLDPWD"
16-03-2008 09.41

Befehlswiederholung

Das letzte Token des letzten Befehls wiederholen

# echo /etc/group /etc/passwd >/dev/null
# echo !$
echo /dev/null
Mit
ESC .
kann das letzte Token auch an der aktuellen Stelle eingefügt werden.

Das letzte Argument des letzten Befehls wiederholen

# cp backup2008a.tar /mnt/streamer/backup2008a.tar 2>/dev/null
# echo $_
/mnt/streamer/backup2008a.tar

Letzten Befehl mit einer Ersetzung wiederholen

# cp backup2008.tar /mnt/streamer/
# ^2008^2009^
cp backup2009.tar /mnt/streamer/
Das ersetzt aber nur das erste Vorkommen, wie man auch an der ausgeschriebenen Version sieht
# cp backup2008a.tar backup2008b.tar /mnt/streamer/
# !!:s/2008/2009/
cp backup2009a.tar backup2008b.tar /mnt/streamer/

So kann man alle Vorkommen ersetzen lassen
# cp -v backup2008a.tar backup2008b.tar /mnt/streamer/
# !!:gs/2008/2009/
01-01-2009 20.44

Ausgabe innerhalb von Shellscript umleiten und später wiederherstellen

exec 3>&1
exec 1>>/var/log/mylogfile.txt
...
exec 1>&3
exec 3>&-
16-03-2008 09.41

Mit sponge Änderungen an Dateiinhalt ohne temporäre Dateien vornehmen

Wenn man normalerweise Änderungen am Inhalt einer Datei vornehmen möchte benötigt man eine temporäre Datei, da man nicht gleichzeitig aus einer Datei lesen und in sie zurückschreiben kann. Das ist oft sehr unbequem, vor allem weil das sichere Erzeugen einer temporären Datei nicht völlig trivial ist.
Ein Lösung für dieses Problem ist sponge:
cat foo.txt | sed s/t/T/ | sponge foo.txt

Das funktioniert aber nur wenn sponge in eine Datei schreibt, leitet man die Ausgabe von sponge weiter funktioniert es nicht. In Debian ist sponge zur Zeit im Paket moreutils enthalten.
16-03-2008 09.41

cygwin angeblich zu lockere Rechte

Wenn man in cygwin ssh benutzten will kann es passieren dass man den Hinweis erhält dass die Dateirechte des private Keys zu freizügig gesetzt sind.
$ ssh foo@bar.example.com
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: UNPROTECTED PRIVATE KEY FILE! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0644 for '/cygdrive/p/.ssh/id_dsa' are too open.
It is recommended that your private key files are NOT accessible by others.
This private key will be ignored.
bad permissions: ignore key: /cygdrive/p/.ssh/id_dsa
Permission denied (publickey).

Diese Warnung kann man so überschreiben
$ CYGWIN=nontsec ssh foo@bar.example.com
16-03-2008 09.41

System Infos

# free -m
# df -ah
# top -n1
htop
# vmstat 5 3
smartctl --all /dev/sda
memstat -w

Wer blockiert ein gemountetes Laufwerk

Wenn man mal wieder ein Laufwerk nicht unmounten kann
lsof +D /mnt/foo
fuser /mnt/foo

Anzahl der CPU Kerne ermitteln

# nproc
6

Mit dieser Information z.B. make mit mehreren Threads starten
# make -j $(nproc)

Benchmarks

Mit zcav die Geschwindigkeit eines Laufwerks abhängig von der Position auf dem Datenträger bestimmen
zcav /dev/sdb > zcav.txt
gnuplot
set yrange [0:*]
set format y '%g Blocks/s'
set format x '%g MB'
plot "zcav.txt" using 1:2 title "Foo"
Mit bonnie++ einen Benchmark verschiedener Operationen auf einem Datenträger erstellen.
bonnie++ -u root -d /mnt/mnt/
20-01-2013 22.36

Solaris

Ausführliches ps unter Solaris

Unter Solaris gibt es neben dem normalen ps mit
ps -ef
prstat -a
truss -f /bin/date
truss -fp PID
noch ein weiteres ps mit mehr Optionen
/usr/ucb/ps -auxww

Solaris 10 md5sum

digest -v -a md5 foo
20-01-2013 22.36

Perl

Perl Modul nachinstallieren

# perl -MCPAN -e 'install HTML::CalendarMonthSimple'

# cpan
cpan> install HTML::CalendarMonthSimple

So kann man herausfinden, ob ein Modul schon installiert ist
require HTML::CalendarMonthSimple;

Perl foreach

Wenn man in Perl über etwas
my @mystuff = ("foo", "bar");
iteriert gibt es automatisch die Variable $_ in der der aktuelle Wert der Iteration enthalten ist
foreach(@mystuff)
{
print "$_";
}

Einige Befehle nutzen automatisch diese Variable, wenn man keine andere angibt:
foreach (@mystuff)
{
/foo/ and print "Found foo!";
}

Man kann aber natürlich auch eine Variable angeben
foreach my $x(@mystuff)
{
print "$x";
}

Siehe auch Perl foreach looping und Perl Variablen.

Perl Debugger

perl -d myPerlScript.pl

s nächsten Befehl ausführen (auch in Methoden einsteigen)

n nächsten Befehl ausführen (Methoden überspringen)

Return letzte Eingabe erneut eingeben

x $FOO gibt den aktuellen Wert der Variablen aus

r bis zum Ende der Methode (oder nächster Haltepunkt) ohne schrittweise Debuggen laufen

c alles (oder bis zum nächsten Haltepunkt) ohne schrittweises Debuggen laufen lassen

l (kleines L) die nächsten 10 Code Zeilen anzeigen

- die vorherigen 10 Code Zeilen anzeigen

S alle Methoden auflisten

S main alle Methoden auflisten

b METHODENNAME Brakepoint für Methode setzen

b NUMMER Brakepoint in einer Zeile setzen (mit l (kleines L) Zeilennummer ermitteln)

t aus Zeilen ausgeben, die verarbeitet werden

q Debugger beenden

R Programm von vorne starten

T Stacktrace anzeigen

Siehe auch Perl Debugger
21-09-2014 15.22

Mit xargs parallele Prozesse starten

Ein gzip erhält eine lange Liste von Dateien die er verarbeitet
ls *.txt | xargs gzip

Jede Datei wird von einem eigenen gzip verarbeitet
ls *.txt | xargs -n1 gzip

Jede Datei wird von einem eigenen gzip verarbeitet, alle werden parallel gestartet
ls *.txt | xargs -n1 gzip &

Jede Datei wird von einem eigenen gzip verarbeitet, es laufen immer 5 davon parallel
ls *.txt | xargs -n1 -P5 gzip
03-05-2010 01.13
Powered by PHP Created with Xemacs Valid XHTML 1.0! Valid CSS!