Archive for the 'Linux' Category

21
Jan

Variablen in der Shell (bash)


# Deklarieren der Variable foo. Das Gleichzeichen
#sollte ohne Leerzeichen verwendet werden
foo=bar

# Einen String mit Leerzeichen muss man in
# quotes setzen
foo="ein String mit Leerzeichen"

# Gibt bar aus
echo $foo

# Backticks führen den Befehl aus
foo=`date +%Y-%m-%d`

# Gibt z.B. 2008-01-23 aus
echo $foo

# Konkatenieren kann man in der Shell
# ohne einen Operator
foo=`date +%Y-%m-%d`".tgz"

# Funktioniert in diesem Fall auch, da
# kein Leerzeichen vorkommt
foo=`date +%Y-%m-%d`.tgz

# Gibt z.B. 2008-01-23.tgz aus
echo $foo

# Erzeugt die Datei 2008-01-23.tgz
touch ${foo}.txt

# Gibt 20 aus
echo ${foo:0:2}

Auch das escapen von Sonderzeichen will gelernt sein. Interessante Beispiele findet man unter Shell Quoting verstehen

26
Oct

Apache und PHP unter Windows und Linux

Ein kurzer Test zweier Server mit Hilfe der benchmark.php

Warnung: Dies ist kein repräsentativer Test.

Windows Linux
OS Windows 2003 Server Ubuntu Linux 7.04 Server
CPU P III 800 PIII 650
RAM 512 MB 384 MB
PHP 5.2.3, 60 Sekunden Memory Limit, 16 MB, als Apache Modul 5.2.1, 60 Sekunden Memory Limit, 16 MB, als Apache Modul
Quelle XAMPP Ubuntu
Benchmark simple 2.630
simplecall 54.377
Fatal error: Maximum execution time of 60 seconds exceeded
simple 1.579
simplecall 2.496
simpleucall 3.705
simpleudcall 4.411
mandel 5.148
mandel2 7.282
ackermann(7) 4.600
ary(50000) 0.305
ary2(50000) 0.231
ary3(2000) 3.588
fibo(30) 11.084
hash1(50000) 0.557
hash2(500) 0.604
heapsort(20000) 1.584
matrix(20) 1.246
nestedloop(12) 2.717
sieve(30) 1.469
strcat(200000) 0.423
————————
Total 53.029
26
Oct

Reminder: Ubuntu Server 7.04 aufsetzen

Kurzer Reminder für mich.

  • OS Installieren
  • Feste IP setzten:
    • /etc/network/interfaces
      iface eth0 inet static
      address 192.168.2.5
      netmask 255.255.255.0
      gateway 192.168.2.1
  • Module nachinstallieren
    • sudo apt-get install apache2 php5-common php5 libapache2-mod-php5 php5-mysql php5-pgsql mysql-server mysql-client openssh-server smbfs
    • Mod Rewrite aktivieren: a2enmod rewrite
  • Samba Laufwerk: mount -t smbfs //fileserver/foo /mnt/foo -o username=USER,password=PASS,umask=0002,uid=www-data
    Am besten über ein Startskript und dann per update-rc.d NAME_DES_STARTSKRIPTS_IN_INIT.D defaults 90 aktivieren.
  • DocRoot des Apache auf /mnt/foo zeigen lassen (/etc/apache2/site-enabled/000-default)
  • dyn. mass hosting einrichten
  • Apache neu starten: apache2ctl restart
  • mySQL DB Kennwort vergeben
  • Sicherung der Datenbank einrichten
18
Apr

HTML in PDF wandeln mit PHP und htmldoc


$filename = '';

header("Content-Type: application/pdf");
header("Content-Disposition: attachment; filename=convertedDocument.pdf");

passthru("/usr/bin/htmldoc -t pdf12 --quiet --size a4 --bodyfont Arial --fontsize 8.0 --no-links --webpage $filename");

HTML2PDF

18
Jan

Windows + Ubuntu Gast + VMWare Server = langsame Uhr

Auf einer virtuellen Ubuntu Maschine lief die Uhr sehr langsam. Am Anfang benötigte eine Minute 1,5 Minuten. Die Lösung ist recht einfach. Folgende bootparameter in der Datei /boot/grub/menu.lst einfügen:
title           Ubuntu, kernel 2.6.15-23-386
root            (hd0,0)
kernel          /boot/vmlinuz-2.6.15-23-386 root=/dev/sda1 ro quiet splash nosmp noapic nolapic
initrd          /boot/initrd.img-2.6.15-23-386
savedefault
boot
Trotzdem hatte ich einen leichten drift. Den konnte ich mit einem cronjob alle 5 Minuten lösen.

#!/bin/bash
/usr/sbin/ntpdate ptbtime1.ptb.de # Uhrzeit mit einem Zeitserver abgleichen
/sbin/hwclock –systohc # Hardware Clock stellen

Zuerst hatte ich die Zeitsynchronisation mit ntpd versucht. Nach einer Weile lief die Uhrzeit aber wieder weg.
Auf der VMWare Seite finden sich viele Infos zu diesem Thema. Leicht über Google zu finden, daher spare ich mir hier eine Auflistung.

03
Aug

Datensicherung eines sehr großen Verzeichnisses auf mehrere Datenträger

Wie sichert man ein sehr großes Verzeichnis auf mehrere DVDs? Mit der guten alten Shell. :)

Unter Windows besorgt man sich zuerst die GNU Tools. Das wbin Verzeichnis sollte man zu der PATH Umgebungsvariable hinzufügen. Unter Linux stehen die notwendigen Tools bereits zur Verfügung.

Folgender Befehl sichert das Verzeichnis C:\foo\bar als gzip komprimiert (tarball), aufgeteilt in 100 MB große Dateien:

tar c C:\foo\bar | gzip | split -b100m - backup.tgz.split.

Die Dateien haben eine Bezeichnung nach dem Schema backup.tgz.split.aa, backup.tgz.split.ab, …

Die Wiederherstellung ist genauso einfach:

cat backup.tgz.split.* | gzip -d | tar -x

Das Packen und Entpacken geht erstaunlich schnell und stabil (getestet mit 30 GB). Die Programme sind kostenlos. Was will man mehr?

31
May

Backup auf Disketten

Jaja, einige von euch werden sich jetzt sicherlich amüsieren. Backup auf Disketten? (Das sind diese kleinen runden Speichermedien mit ner Hülle. Nein, nicht DVD-RAM …) Aber denoch ist die tar Option -M auch in Zeiten von USB-Sticks und DVD-RAM imho sehr interessant.
Auszug aus dem FreeBSD-Handbuch.

17.10.2. Wie mache ich ein Backup auf Disketten?

Die beste Art eines Diskettenbackups ist der Befehl tar(1) mit der Mehrfachband-Option -M, die es ermöglicht ein Backup über mehrere Floppies zu verteilen.

Ein Backup aller Dateien im aktuellen Verzeichnis einschließlich aller Unterverzeichnisse wird durch den folgenden Befehl veranlasst (als root):

# tar Mcvf /dev/fd0 *

Wenn die erste Floppy voll ist, meldet sich tar(1) und verlangt einen Diskettenwechsel (weil tar(1) unabhängig vom Medium arbeitet, wird das nächste Band (Volume) verlangt, was in diesem Zusammenhang eine Diskette bedeutet), in etwa wie folgt:

Prepare volume #2 for /dev/fd0 and hit return:

Dies wird mit steigender Volumenzahl wiederholt, bis alle angegebenen Dateien archiviert sind.

17.10.3. Können Diskettenbackups komprimiert werden?

Leider erlaubt es tar(1) nicht, die Option -z für Multi-Volume-Archive zu verwenden. Man kann natürlich alle Dateien mit gzip(1) komprimieren, sie mit tar(1) auf die Floppies aufspielen, und dann die Dateien wieder gunzip(1) entkomprimieren!

17.10.4. Wie werden Diskettenbackups wieder hergestellt?

Zur Wiederherstellung des gesamten Archivs verwendet man:

# tar Mxvf /dev/fd0

Eine Methode um nur bestimmte Dateien wieder her zu stellen ist mit der ersten Diskette den folgenden Befehl auszuführen:

# tar Mxvf /dev/fd0 filename

tar(1) wird dann die folgenden Disketten anfordern, bis die benötigte Datei gefunden ist.

Wenn man die Diskette kennt, auf der sich die Datei befindet, kann man alternativ diese Diskette auch direkt einlegen und den gleichen Befehl wie oben verwenden. Man beachte, dass, falls die erste Datei eine Fortsetzung einer Datei von einer der vorigen Disketten ist, tar(1) die Warnung ausgibt, dass diese Datei nicht wiederhergestellt werden kann, selbst dann, wenn dies gar nicht verlangt wurde!

19
Apr

Alle installierte Perlmodule in der Shell anzeigen lassen

perl -MExtUtils::Installed -le ‘for(ExtUtils::Installed->new()->modules()){print}’

02
Apr

grep

Und wieder ein Linux-snipped. Grep durchsucht Dateien nach Inhalten.

Das folgende Beispiel durchsucht alle Dateien in htdocs und logs nach msql:

grep -isn  msql  htdocs/* logs/*

Mögliche Ausgabe:

htdocs/install.pl:8:$db = DBI->connect("DBI:mSQL:$database", undef, undef);

-i case-insensitive
-l zeigt nur den Namen der Dateien an
-s unterdrückt Fehlermeldungen (z.B. foo ist ein Verzeichnis)
-n zeigt die Zeilennummer an

24
Mar

Unter Windows auf Linux Partitionen zugreifen (ext2 & ReiserFS)

Schonmal versucht, unter Windows auf eine ReiserFS Partition zuzugreifen? Es gibt mehrere Varianten.

  • ein ziemlich umständliches Kommandozeilentool
  • ein ziemlich umständliches und fehlerhaftes Tool das sich in den Explorer einklinkt
  • und … Total Commander.

Hätte ich nicht gedacht. Es gibt ein Plugin (Ext2+Reiser) für den Total Commander, mit dem man auf ReiserFS Partitionen zugreifen kann.

Ein weiteres neues Lieblingsspielzeug ist das POP3/SMTP Email Plugin.  Damit kann man auf POP3 Konten zugreifen und z.B. sehr große E-Mail direkt dort löschen.