Software Projekte, Tips & Tricks
Tip of the day: Never rm -rf .* - I ACCIDENTALLY / - happended to me once - will never happen again
Tips & Tricks
Hier möchte ich ein paar Befehle aufschreiben, die sich im laufe der Zeit in meiner cool_commands Datei angesammelt haben.
Vielleicht ist der ein oder andere Trick ja ganz nützlich und wenn nicht, dann halt nicht ;-)
Linux Kernel
Kernel (2.6.) unter Debian kompilieren:
apt-get install build-essential kernel-package ncurses-dev
cd /usr/src
wget http://kernel.org/pub/linux/kernel/v2.6/linux-2.6.20.tar.bz2
tar xjf linux-2.6.20.tar.bz2
rm linux; ln -s linux-2.6.20 linux
cd linux
# Wenn schon eine alte Kernel-Config vorliegt:
# cp ../oldlinux/.config .
# make oldconfig # Neue Kernel Config Einstellungen bewundern
make menuconfig # Kernel Config anpassen
make-kpkg kernel_image --initrd
Eigenen Kernel installieren:
dpkg --install /usr/src/linux-image-2.6.xxx.deb
update-grub
Eigenen Kernel wieder entfernen:
dpkg --purge --force-remove-essential kernel-image-2.6.xxx
Netzwerk
Alle gelinkten ZIP Dateien einer URL herunterladen:
wget -H -r -l1 -A.zip http://www.url.com/
Eine Datei (von verschiedenen Mirrorn) mit mehreren Connctions gleichzeitig downloaden; kann wget leider nicht:
axel -n 3 http://www.url.com/datei.zip
Hardware Adresse (MAC) eines Netzwerk Interfaces ändern:
ifconfig eth0 hw ether 00:DE:AD:BE:EF:00
Netzwerkverbindung über serielle Schnittstelle:
pppd /dev/ttyUSB0 115200 10.0.0.2:10.0.0.1 noauth nodetach defaultroute persist
Sende ASCII-Text per ICQ:
figlet FOOBAR | centericq-utf8 -s msg -p icq -t 1234567
Mehrere Nachrichten zeitverzögert per ICQ senden:
for t in "Nachricht 1" "Nachricht 2"; do echo $t | centericq-utf8 -s msg -p icq -t 1234567; sleep 1m; done
Mail Queue anhand von E-Mail Adresse löschen:
postqueue -p | tail -n +2 | awk 'BEGIN { RS = "" } / addr@example\.com/ { print $1 }' | tr -d '*!' | postsuper -d -
Ein FTP-Server Verzeichnis mounten:
apt-get install lufs-utils
m-a a-i lufs
modprobe lufs
lufsmount ftpfs://ftp.bla.org /mnt/ftp_server
MySQL root Passwort ändern.
killall mysqld
mysqld --skip-grant-tables
# variante 1: komfortabler
mysqladmin -u root password 'newpasswd'
# jetzt mysqld wieder normal starten
# variante 2: falls mysqladmin nicht installiert ist
mysql -u root mysql
mysql> update user set password=PASSWORD("newpassword") where user='root';
mysql> flush privileges;
mysql> quit
Zone Transfer einer DNS Zone:
dig axfr @dns_server.de zone.de
Welchen F.ROOT-SERVER verwende ich?
dig +norec @F.ROOT-SERVERS.NET HOSTNAME.BIND CHAOS TXT
Backup
Rekursiv über ssh kopieren (manchmal versagt scp -r) und nur die Änderungen übertragen:
rsync -a user@server.de:/directory /local_destination
Backup eines entfernten Rechners machen. Verzeichnisse namens nobackup
und deren Inhalte werden dabei nicht gesichert.
Der entfernte Rechner meinserver.de
verfügt über einen Systembenutzer rsync
, der sudo Rechte auf rsync
hat.
Mit bwlimit
wird die Bandbreite auf 1MB/s begrenzt, um den Server nicht auszulasten.
rsync --stats -aze 'ssh -i /var/backups/rsync/.ssh/id_rsa -l rsync' --bwlimit=1024 --rsync-path='sudo /usr/bin/rsync' \
--prune-empty-dirs --include '*/' --exclude '**/nobackup/**' --include '/etc/**' \
--include '/home/**' --include '/usr/local/**' --exclude '/**' \
rsync@meinserver.de:/ /var/backups/zielverzeichnis/
Inkrementelles Backup eines entfernten Rechners machen. Verzeichnisse namens nobackup
und deren Inhalte werden dabei nicht gesichert.
Der entfernte Rechner meinserver.de
verfügt über einen Systembenutzer rdiff
, der sudo Rechte auf rdiff-backup
hat.
Es sollte darauf geachtet werden, dass sich die rdiff-backup
Versionen auf Client und Server nicht unterscheiden.
ACHTUNG: Das Pattern für --include
bzw. --exclude
unterscheidet sich ein wenig von rsync
!
rdiff-backup --print-statistics --remote-schema 'ssh -i /var/backups/rdiff/.ssh/id_rsa %s sudo rdiff-backup --server' \
--exclude "**/nobackup/**" --include /var/lib/mysql --include /etc \
--include /home --include /usr/local --exclude /\
rdiff@meinserver.de::/ /var/backups/zielverzeichnis/
Größen der inkrementellen Backups von rdiff-backup
ausgeben:
# rdiff-backup --list-increment-sizes /var/backups/zielverzeichnis/
Time Size Cumulative size
-----------------------------------------------------------------------------
Sun Nov 26 16:42:23 2006 1.51 GB 1.51 GB (current mirror)
Fri Oct 27 02:11:15 2006 2.02 MB 1.51 GB
Mon Oct 16 13:49:50 2006 568 bytes 1.51 GB
Fri Sep 8 02:59:50 2006 0 bytes 1.51 GB
Tue Aug 15 10:18:48 2006 3.92 KB 1.51 GB
Sun Jul 30 22:28:59 2006 0 bytes 1.51 GB
Tue Jul 25 22:05:22 2006 0 bytes 1.51 GB
Thu Jul 13 10:14:01 2006 17.0 MB 1.53 GB
Thu Jun 29 03:34:39 2006 0 bytes 1.53 GB
Thu Jun 15 00:57:32 2006 273 MB 1.80 GB
Wed Apr 19 20:51:38 2006 0 bytes 1.80 GB
Alle inkrementellen Backups älter als ein bestimmtes Datum löschen:
# rdiff-backup --force --remove-older-than "2006-08-25" /var/backups/zielverzeichnis/
Deleting increments at times:
Mon Apr 3 19:48:15 2006
Mon Apr 3 21:35:17 2006
Tue Apr 11 22:45:13 2006
Tue Apr 11 23:17:34 2006
Wed Apr 19 20:51:38 2006
Wed May 3 01:44:03 2006
Wed May 10 21:48:46 2006
Thu Jun 15 00:57:32 2006
Thu Jun 29 03:34:39 2006
Thu Jul 13 10:14:01 2006
Tue Jul 25 22:05:22 2006
Sun Jul 30 22:28:59 2006
Tue Aug 15 10:18:48 2006
Laptop
Batteriestatus in Prozent ausgeben. Am besten in /usr/local/bin/bat
speichern.
Die Ausgabe des Scripts kann z.B. für ein Alarm Script weiterverwendet werden: [ $( bat ) -lt 4 ] && beep
Script hier herunterladen: bat
# directory of the battery status
bat=/proc/acpi/battery/BAT0
IFS=":"
echo $(( $( cat $bat/state $bat/info | while read a b; do
if [ "$a" == "remaining capacity" ]; then
echo -n "$b" | sed "s/[ mAh]//g"
echo -n " * 100 / "
fi
if [ "$a" == "last full capacity" ]; then
echo -n $b | sed "s/[ mAh]//g"
fi;
done ) ))
Spezielle Tasten der (Laptop)-Tastatur einbinden:
Das lustige kleine Programm xev
starten, die Keycodes der Tasten herausfinden und in die Datei .Xmodmap
im home Directory eintragen mit den zugeorndneten Funktionen.
Eine .Xmodmap
könnte z.B. so aussehen:
keycode 144 = XF86AudioPrev
keycode 151 = XF86Launch1
keycode 153 = XF86AudioNext
keycode 159 = XF86LaunchA
keycode 160 = XF86AudioMute
keycode 161 = XF86Calculator
keycode 162 = XF86AudioPlay
keycode 164 = XF86AudioStop
keycode 174 = XF86AudioLowerVolume
keycode 176 = XF86AudioRaiseVolume
keycode 178 = XF86WWW
keycode 222 = XF86PowerOff
keycode 223 = XF86Sleep
keycode 227 = XF86WakeUp
keycode 229 = XF86Search
keycode 230 = XF86Favorites
keycode 231 = XF86Refresh
keycode 232 = XF86Stop
keycode 233 = XF86Forward
keycode 234 = XF86Back
keycode 235 = XF86OfficeHome
keycode 236 = XF86Mail
keycode 237 = XF86Video
Bei einigen Distributionen wird xmodmap automatisch beim Einloggen ausgeführt und bei anderen nicht.
In dem Fall muss man selbst dafür sorgen indem man z.B. im Verzeichnis $HOME/.kde/Autostart/
eine Datei mit folgendem Inhalt anlegt:
#!/bin/bash
/usr/bin/xmodmap $HOME/.Xmodmap
Datenträger
LVM
Festplatte (oder Partition) aus einem bestehenden LVM herauslösen. (Remove partition from existing LVM.)
Es muss natürlich genug freier Speicher im LVM sein, um die Fesplatte zu entfernen.
umount /mnt/devicename
e2fsck -f /dev/mapper/devicename
resize2fs /dev/mapper/devicename 800G # blockdevice verkleinern (800G ist kleiner als die Summe der verbleibenden Platten)
lvreduce -L 800G /dev/mapper/devicename
pvmove -v /dev/sdc
vgreduce devicename /dev/sdc
pvremove /dev/sdc
mount /mnt/devicename
Eine neue Festplatte (oder Partition) einem bestehenden LVM hinzufügen. (Add partition to existing LVM.)
umount /mnt/devicename
e2fsck -f /dev/mapper/devicename
pvcreate /dev/sdc
vgextend devicename /dev/sdc
lvextend -L +500G /dev/mapper/devicename
resize2fs /dev/mapper/devicename # ohne Groessenangabe wird das Dateisystem maximiert
mount /mnt/devicename
CDs brennen
ISO Datei brennen: (ACHTUNG: cdrecord wurde umbenannt in wodim)
wodim -tao -v dev=/dev/hdc image.iso
# bzw
cdrecord -tao -v dev=/dev/hdc image.iso
Verzeichnisse und Dateien brennen (aus der Console):
mkisofs -iso-level 3 -J -joliet-long -R /verzeichnis1 /verzeichnis2 | wodim -v fs=6m dev=/dev/hdc -
Okay wer eher auf klicki bunti steht der sollte mit k3b zufrieden sein:
apt-get install k3b cdparanoia libflac++5 libk3b2 vcdimager
Bluetooth
Eine SMS über ein Bluetooth-Handy schicken:
apt-get install bluetooth bluez-utils kdebluetooth smstools
invoke-rc.d bluez-utils start
hcitool scan
rfcomm bind 0 00:01:E3:0B:A3:80 # Die Adresse vom scan
invoke-rc.d smstools start
gsmsendsms -d /dev/rfcomm0 017990123456 "Nachrichtentext ..."
Eine Datei auf ein Handy hochladen (okay in KDE geht das klicki-bunti):
obexftp -b 00:01:E3:0B:A3:80 --put file.mp3
Bildbearbeitung
Einen Kontaktabzug mehrerer Bilddateien erstellen
(convert ist Bestandteil des ImageMagick Pakets):
convert vid:*.jpg index.jpg
Mehrere Bilddateien umbenennen in einen einheitlichen Namen (z.B. pix002.jpg):
convert *.jpg pix%03d.jpg
Mehrere Bilddateien verkleinern und gleichzeitig ein wenig in der Qualität verringern, um sie z.B. ins Internet zu setzen:
convert -sample 40% -normalize -quality 60 *.jpg zielverzeichnis/pix%03d.jpg
# Wenn zuviele Dateien gleichzeitig verarbeitet werden sollen, dann wird convert sehr langsam und es empfiehlt sich:
for i in *.jpg; do echo $i; convert -sample 40% -normalize -quality 60 $i zielverzeichnis/$i; done
Ein Video aus Einzelbildern generieren:
mencoder mf://directory/*.jpg -audiofile musik.mp3 -mf w=640:h=480:fps=25:type=jpg -vf scale=640:480 -ovc lavc -lavcopts vcodec=mpeg4:vbitrate=3000:vhq -ffourcc XVID -oac copy -idx -o myvideo.avi
Ein Video im Uhrzeigersinn drehen (sinvoll wenn das Video z.B. mit einer Digicam aufgenommen wurde):
mencoder -ovc lavc -lavcopts vcodec=mjpeg -vf rotate=1 -oac copy original.asf -o output.avi
Ein Video verkleinern (z.B. Digicam Videos):
mencoder in.avi -o output.avi -oac mp3lame -srate 11025 -channels 1 -af-adv force=1 -lameopts preset=medium:aq=0 -ovc lavc -lavcopts vcodec=msmpeg4:vbitrate=300
Sonstige Tips & Tricks
Linux Tastaturlayout im Text-Terminal auf Deutsch setzen, nachdem man z.B. von
einer boot-cd (wie grml) gebootet hat:
loadkeys de-latin1
Einen String in allen Dateien (in allen Unterorndern) ersetzen. SVN-Dateien
werden dabei ignoriert, sonst mach man sein SVN kaputt.
# ersetze "foo" durch "bar" in allen Dateien
find -path '*/.svn' -prune -o -type f -print0 | xargs -0 -n 1 sed -i 's/foo/bar/g'
Google Earth in Debian installieren:
apt-get install googleearth-package
make-googleearth-package
dpkg -i googleearth_4.2.198.2451+0.4.0-1_i386.deb # Name ändert sich natürlich
rm GoogleEarthLinux.bin
Ein Backup von einem Fehlerhaften blockdevice erzeugen:
dd bs=512b conv=noerror if=/dev/sda of=backup.img
Terminal zurücksetzen (z.B. nach dem cat
en einer Binärdatei):
alias sane='echo -e "\\033c"; tput is2; stty $(stty -g)'
Eine X-Anwendung in einem eigenen X-Server Fenster starten (im Beispiel eine komplette KDE Sitzung).
Das geht bestimt auch einfacher, aber ich weiß nicht wie...
echo startkde | xinit /proc/self/fd/0 -- /usr/bin/Xnest :2
Zugriffsrechte von Dateien und Verzeichnissen reparieren. Dateien werden lesbar und Verzeichnisse read+execute.
Jeweils darf der Besitzer schreiben.
find -type f -print0 | xargs -0 chmod 644
find -type d -print0 | xargs -0 chmod 755
Was tun wenn apt immer meint, dass Pakete nicht vertrauenswürdig sind.
apt-key adv --recv-keys 23E7166788B63E1E
# oder:
# gpg --keyserver wwwkeys.eu.pgp.net --recv-keys 07DC563D1F41B907 # Es muss natürlich der richtige key eingetragen werden
# gpg --armor --export 07DC563D1F41B907 | apt-key add -
User erstellen ohne shell und Passwort (z.B. für rdiff-backup, siehe oben):
adduser --disabled-login --home /var/backups/rdiff rdiff
Audio CD als MP3 Dateien rippen (okay - wenn KDE richtig konfiguriert ist, kann man die MP3 Dateien einfach mit den konqueror von der CD runter kopieren, aber hier kann man ja wenigstens noch encoder Optionen angeben):
cd leeres_verzeichnis
cdparanoia -B
for i in *.wav; do lame $i; done
Ramdisk erstellen und mounten:
mkfs.ext2 /dev/ram0 && mount /dev/ram0 /mnt/ramdisk
Ein mit aes verschlüsseltes Dateisystem auf einem Blockdevice (oder einer Datei) erstellen.
ACHTUNG: Der Inhalt der Datei bzw des Blockdevices device_or_file wird überschrieben.
Eine Datei beliebiger Größe (X Mb) kann mit "dd if=/dev/urandom of=dateiname bs=1024k count=X" erzeugt werden.
Die Datei wird dabei mit Zufallswerten gefüllt.
losetup -e aes -k 256 /dev/loop/0 file_or_device
mkfs.ext3 /dev/loop/0
losetup -d /dev/loop/0
# Das Dateisystem mounten (geht auch automatisch per fstab):
mount -oloop -oencryption=aes -okeybits=256 file_or_device /mnt/secret
Wenn gerade kein Würfel zur Hand ist:
echo $[$RANDOM%6+1]
dmesg fortlaufend anzeigen lassen:
# als user
watch -n 1 'dmesg|tail -n $[$LINES-2]'
# als root
while sleep 0.1; do dmesg -c; done
Google
Diese Sektion hat den Namen einer Suchmaschine, weil ich in Zukunft hier alles hin schreibe, was nicht erwähnenswert ist - wonach ich aber mehr als 5 Minuten im Netz suchen musste.
In der Hoffnung, dass Google die Seite schön weit oben anzeigt und andere dadurch vielleicht nur 10 Sekunden brauchen ;-)
Also nicht über die merkwürdig redundanten Beschreibungen wundern ...
Wenn der GRUB Bootloader folgenden Fehler ausgibt. If GRUB states the following error:
Error 2: Bad File or Directory Type
Das liegt höchst wahrscheinlich daran, dass das Dateisystem (ext3) mit einer falschen Inode Size formatiert ist.
256 wird nur von neueren GRUB Versionen unterstützt.
128 sollte immer funktionieren:
# Inode Size herausbekomen (statt sda2 muss natuerlich das ensprechende blockdevice angegeben werden)
tune2fs -l /dev/sda2 | grep "Inode size"
# Inode Size neu setzen (hat bei mir nicht funktioniert, war nicht supported):
# (Achtung: das ist ein grosses i, oben ist ein kleines l. Je nach Schriftart nicht zu unterscheiden :-)
tune2fs -I 128 /dev/sda2
# Die Inode Size direkt beim erstellen des Dateisystems anzugeben hat geholfen:
mkfs.ext3 -I 128 /dev/hda2
Latex Code für das trademark Symbol (TM). Latex code for the symbol "trademark":
\texttrademark
HOWTO MySQL root Passwort ändern. MySQL root Passwort vergessen. Lost MySQL root password. HOWTO change root MySQL password.
Fehlermeldung:
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
Lösung: Siehe hier.
PAL to KOrganizer Konverter
Dieses Script konvertiert PAL calender Dateien (.pal) ins vCalendar Format.
Das vCalendar format kann von KOrganizer importiert werden.
Auf diese Weise kann man ganz bequem z.B. seine PAL Geburtstagsliste in KOrganizer und allen Programmen, die vCalendar unterstützen, weiterverwenden.
Download:
pal2ics
DIA to vCard Konverter
This script converts DIA address book files (e.g. generated by MobilEDIT) to the vCard format.
The vCard format can be easily imported by most organizer tools.
Download:
dia2vcf