Empfehlungsoption nicht empfehlenswert

Der BGH hat in einem Urteil die vielfach auf Webseiten eingesetzte Empfehlungsfunktion weitgehend verboten.

Dem Bericht im Absolit-Blog nach sieht das Gericht die via Tell-a-Friend versandte E-Mail als Spam an – insbesondere, wenn als Absender-Adresse die des beworbenen Unternehmens verwendet wird.

Man sollte also, wenn auf die Funktion nicht verzichtet werden soll, Namen und E-Mai-Adresse des empfehlenden Benutzer verwenden und ihm zu ermöglichen Betreff und Text der Mail selbst zu editieren. Rechtssicherheit besteht dann aber nach wie vor nicht.

Mehr zum Urteil im Artikel „BGH untersagt Tell-a-friend weitgehend“ auf absolit.de

Unix-Kommandozeile

Alle Scripte im aktuellen Verzeichnis greppen

Heute hatte ich den Fall, dass ich in einem Verzeichnis alle Perl- und Shell-Scripte nach dem Wort „gtar“ durchsuchen musste. Leider befanden sich in dem Verzeichnis nicht nur Scripte, sondern auch, zum Teil recht große, Binär-Dateien, die ich ausklammern wollte. Entstanden ist der folgende Einzeiler:

for FILE in `ls -1`; do if `file $FILE | grep -q Befehlstext >/dev/null`; then grep -l gtar $FILE; fi; done

Das funktioniert unter HP-UX, bei Linux ist file gesprächiger und muss daher auf den MIME-Type begrenzt werden:

for FILE in `ls -1`; do if `file --mime-type $FILE | egrep -e '(x-perl|x-shellscript)' >/dev/null`; then grep -l gtar $FILE; fi; done

 

Schreib-/Lesekopf einer Festplatte

Ausrichtung der Partitionen richtig wählen

Da muss man erst mal drauf kommen: Wählt man als Größe der logischen Sektoren beispielsweise 4kB kann das zu Performance-Einbußen führen, weil dann ein logischer Sektor des Filesystems immer über die Grenzen der darunterliegenden physischen Sektoren der Festplatte ragt. Im Admin-Magazin-Artikel „Im Gleichschritt“ ist erklärt, wie man damit umgeht.

VLC unter SuSE 12.2

Ich musste dieser Tage auf meinem Laptop die aktuell openSuSE 12.2 aufspielen. Leider konnte ich danach nicht mehr die Sendungen ansehen, die ich mit dem Online-TV-Recorder aufgenommen hatte. Der VLC meinte, mit dem Format H.264 nichts anfangen zu können. Eine Recherche mit Tante Google führte mich nach ein paar Holzwegen auf die Seite „Multimedia and Restricted Formats Installation Guide 12.2“ des openSUSE-Forums. Hier bekam ich geholfen.

Eine Datei umbenennen und dabei das Datum anfügen

Des öfteren kommt man die die Verlegenheit, dass man eine Datei so umbenennen möchte, dass das Modifikationsdatum der Datei an den Namen angehängt wird. Zum Beispiel soll aus „foo.bar“ die Datei „foo.bar_2013-02-12“ werden.

Jetzt kann man das natürlich so von Hand tippen, nach dem man sich mit ls -l über das entsprechende Datum informiert hat. Man kann das aber auch die Shell machen lassen:

mv foo.bar foo.bar_`stat -c '%y' foo.bar | cut -f 1 -d " "`

Dabei muss man aber viel tippen und vor allem den Dateinamen gleich drei mal. Das geht auch anders:

THEFILE=foo.bar && mv $THEFILE ${THEFILE}_`stat -c '%y' $THEFILE | cut -f 1 -d " "`

Weiterhin viel Tipparbeit, daher bauen wir daraus am besten einen Alias. Allerdings kann man einem Alias keine Parameter übergeben, daher machen wir eine Funktion daraus und tragen das folgende in unsere bash.rc ein:

mvdate(){ mv $1 ${1}_`stat -c '%y' $1 | cut -f 1 -d " "`; }

Nun macht mvdate foo.bar aus der Datei „foo.bar“ die „foo.bar_2013-02-12“.

 

Bootfähigen USB-Stick mit FreeDOS erstellen

So, Sicherung eines Windows-Servers mit Hilfe von Drive SnapShot erstellt und auf der mobilen Festplatte in Sicherheit gebracht. Aber wie spielt man das Image bei Bedarf wieder zurück, wenn die Maschine weder CD- noch Disketten-Laufwerk hat? Klar, mit einem bootfähigen USB-Stick.

Einen solchen Stick zu erstellen ist kein Hexenwerk, zumindest nicht unter Windows. Man besorgt sich dazu FreeDOS und das HP USB Stick Storage Format Tool.

Dann entpackt man das freedos.zip in ein beliebiges Verzeichnis. Anschließen steckt man den Stick in den Rechner und startet das HPUSBFW v2.2.3.exe. Das Tool findet den Stick normalerweise von selbst, hat man mehrere USB-Devices angeschlossen muss man ggf. den Stick bei „Device“ auswählen. Als „File system“ muss „FAT“ eingestellt werden, ein „Volume label“ kann man , muss man aber nicht angeben. Bei „Create a DOS startup disk“ wird ein Häkchen gesetzt und bei „using DOS system files located at“ wird das Verzeichnis eingestellt, in den man vorher das freedos.zip entpackt hat. Nach dem Klick auf „Start“ wird man noch darauf hingewiesen, dass aller Inhalt des Sticks verloren geht, dann ist er bootfähige Stick schon fertig.

Nun muss sollte man die restlichen Dateien und das Verzeichnis FDOS auf den Stick kopieren, sonst können später kein USB-Laufwerke angesprochen werden.

Ist die mobile Festplatte dummerweise NTFS formatiert, so muss man noch NTFSDOS auf den Stick kopieren. Hier reichte mir die read-only-Version. Dieses Tool ist, dank der Übernahme von Sysinternals durch Microsoft, im Netz fast vollständig verschwunden, aber bei 404 Tech Support bin ich noch fündig geworden.

Nach dem Booten mit dem Stick ruft man dann NTFSDOS auf, was dann nach einiger Zeit das NTFS-LW der mobilen Platte findet und als Laufwerk D: (oder entsprechend freien LW-Buchstaben) einbindet.

Natürlich muss auch das Programm SNAPSHOT.EXE von Drive SnapShot auf dem Stick sein, damit man das Image zurück spielen kann.

Eine gute Idee ist es, den entsprechenden Rechner auch mal mit dem Stick zu booten, denn nicht jedes Motherboard bootet von jedem Stick.


Quellen:

CentOS 6.3: XFCE als Default-Desktop

Für CentOS 6.3 gibt es kein switchdesk mehr und auch in /etc/X11/xinit/Xclients findet der XFCE keine Berücksichtigung mehr. Aber das kann man nachträglich wieder hinzufügen:

# diff -C 3 /root/save/Xclients /etc/X11/xinit/Xclients
*** /root/save/Xclients 2010-08-17 01:15:59.000000000 +0200
--- /etc/X11/xinit/Xclients     2012-11-07 16:14:14.506237529 +0100
***************
*** 10,15 ****
--- 10,16 ----

  GSESSION="$(which gnome-session 2>/dev/null)"
  STARTKDE="$(which startkde 2>/dev/null)"
+ STARTXFCE="$(which startxfce4 2>/dev/null)"

  # check to see if the user has a preferred desktop
  PREFERRED=
***************
*** 19,24 ****
--- 20,27 ----
        PREFERRED="$GSESSION"
      elif [ "$DESKTOP" = "KDE" ]; then
        PREFERRED="$STARTKDE"
+     elif [ "$DESKTOP" = "XFCE" ]; then
+       PREFERRED="$STARTXFCE"
      fi
  fi

Nun erstellt man noch die Datei /etc/sysconfig/desktop mit dem Inhalt:

DESKTOP=XFCE
DISPLAYMANAGER=XDM

Anschließend wird beim nächsten X-Login der XFCE-Desktop gestartet.

Bilder im Netz – Vorsicht, Falle!

Die c’t erklärt in dem online verfügbaren Artikel „Fotofallen“ aus Heft 21/12, was man alles beachten sollte, wenn man Fotos – auch eigene – ins Netz stellt. So ist beispielsweise so gut wie immer ein Copyright- oder Quellen-Hinweis direkt am Bild erforderlich. Und auch bei selbstgemachten Fotos muss man prüfen, ob nicht etwa etwas geschütztes im Bild zu sehen ist.

diff aus 2x STDOUT

Man kann bei diff normalerweise nur einen der beiden Datei-Parameter durch ein „-“ ersetzen, um diese Daten vom Standard-Input zu lesen. Was aber, wenn man die Ausgaben von zwei Programmen vergleichen und man diese nicht in Dateien zwischenspeichern will?

Bei commandlinefu.com fand ich die Lösung:

diff <( cmd1 ) <( cmd2 )

Man kann also prima die Ausgabe von zwei Greps auf ps vergleichen, um die User zu finden, bei denen ein Programm nicht gestartet ist:

diff <( ps -ef | grep  'bin/anel' | sort | cut -c 1-8 ) \n  <( ps -ef | grep 'script/start_aws' | sort | cut -c 1-8 )

Skip der ersten Zeile wenn leer

Heute hatte ich das Problem, eine leere Ausgabe des Programms „zip“ zu unterdrücken, damit Cron mir keine Mail schickt, wenn es nichts zu zippen gibt.

Findet zip nichts, was es einpacken kann, bekommt man die folgende Meldung:

/usr/bin/zip -r /tmp/test.zip . -t `date -d "-1 days" +%Y-%m-%d` -i "*/bearbeitet/*"

zip error: Nothing to do! (/tmp/test.zip)

Die Zeile mit „Nothing to do!“ lässt sich ja noch einfach mit einem grep unterdrücken, aber wie werde ich die Leerzeile davor los? Ein

| tail +2

bewirkt zwar, dass die Ausgabe erst ab der zweiten Zeile erfolgt – leider auch dann, wenn zip etwas zu tun bekommt. Also muss perl ran:

more testdaten | perl -n -e 'print $_ unless ( $. == 1 && /^$/ )'

Dies unterdrückt die erste Zeile nur, wenn sie leer ist, wobei weitere Leerzeilen nicht ausgefiltert werden.

Der ganze Aufruf sieht dann so aus:

/usr/bin/zip -r /tmp/test.zip . -t `date -d "-1 days" +%Y-%m-%d` -i "*/bearbeitet/*" 2>&1 | \n  perl -n -e 'print $_ unless /zip error: Nothing to do/ || ( $. == 1 && /^$/ )'