seeseekey.net - Invictus Deus Ex Machina

Wenn man unter Mac OS X ein sh-Skript ausführen möchte und dabei die Meldung:

/bin/sh^M: bad interpreter: No such file or directory

bekommt, kann das Skript nicht ausgeführt werden. Das Problem liegt daran das versucht wird den Interpreter „bin/sh^M“ anstatt „bin/sh“ zu starten. Bei dem ^M handelt es sich um das dreizehnte ASCII-Zeichen, das Carriage Return (im deutschen auch Wagenrücklauf genannt). Um das Problem zu beheben muss das entsprechende Skript einfach um das Carriage Return Zeichen bereinigt werden. Dies kann im Terminal einfach mittels:

perl -i -pe 'y|\r||d' script.sh

bewerkstelligt werden. Anschließend sollte das Skript ohne weitere Probleme durchlaufen.

Wenn man eine Anwendung mittels „screen“ ausführt, kann es passieren das man den Fehler:

Cannot open your terminal '/dev/pts/0' - please check.

zu Gesicht bekommt. Vielfach wird empfohlen bei diesem Fehler die Rechte des Gerätes zu ändern:

chmod 777 /dev/pts/0

Anstatt diese Lösung zu nutzen sollte man vor der Ausführung von „screen“ den Befehl:

script /dev/null

auszuführen. Damit kann „screen“ anschließend ohne Fehlermeldung genutzt werden.

Möchte man wissen wir viele Dateien sich in einem Ordner unter Linux befinden, so kann man dies leicht durch eine Kombination der Befehle „find“ und „wc“ bewerkstelligen:

find /home/seeseekey/manyfiles/ -type f | wc -l

Der „find“-Befehl listet dabei alle Dateien in dem Ordner auf, während „wc“ (word count) die ausgegebenen Zeilen zählt und man somit die Anzahl der Dateien ermittelt.

Manchmal benötigt man ein Image von einer SD-Karte, z.B. dann wenn man eine Installation einer Raspberry Pi Distribution von einer solchen Karte sichern möchte. Im ersten Schritt muss man ermitteln welche Kennung die SD-Karte trägt. Dies geschieht im Terminal mittels:

diskutil list

Die Ausgabe könnte dann in etwa so aussehen:

/dev/disk0
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:      GUID_partition_scheme                        *251.0 GB   disk0
   1:                        EFI                         209.7 MB   disk0s1
   2:          Apple_CoreStorage                         250.1 GB   disk0s2
   3:                 Apple_Boot Recovery HD             650.0 MB   disk0s3
/dev/disk1
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:                  Apple_HFS Macintosh HD           *249.8 GB   disk1
/dev/disk2
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:     FDisk_partition_scheme                        *16.1 GB    disk2
   1:             Windows_FAT_32 NO NAME                 16.1 GB    disk2s1

In diesem Fall ist das Gerät „/dev/disk2“ die SD-Karte ist. Mittels des Befehls „dd“ wird dann das entsprechende Image erzeugt:

sudo dd if=/dev/disk2 of=sdcard.img

Der Vorgang nimmt dabei durchaus einige Zeit in Anspruch, in welcher man keine Ausgaben auf der Konsole sieht. Nach der Erzeugung des Images, gibt „dd“ noch eine Auswertung des Kopiervorganges zum Besten und die Kopie ist komplett.

Möchte man die lokale Revision eines Git Repositories ermitteln so reicht es in der Konsole:

git log -n 1

einzugeben. Das ganze sieht auf dem Terminal dann so aus:

commit 1c40074d28676ec996ec91f1719cff43077f15f6
Author: Example 
Date:   Tue Jan 3 09:52:23 2013 +0800

    Bugfixes in example function.

Soll nur der Hash ausgeben werden so muss die Kommandozeile wie folgt aussehen:

git log -n 1 --pretty=format:"%H"

Damit bekommt man dann nur den entsprechenden Hashwert ausgegeben.

Mit wget ist der Download einer Datei einfach, da das ganze nur aus dem Befehl und der Datei besteht:

wget http://example.com/datei.zip

Bei cURL braucht es da schon etwas mehr:

curl -O http://example.com/datei.zip

Damit lädt cURL die entsprechende Datei auf die Festplatte, anstatt sie nur anzuzeigen.

Weitere Informationen gibt es unter:
http://en.wikipedia.org/wiki/CURL

Manchmal möchte man ein Git Repository von Server A auf Server B umziehen (in diesem Fall von Google Code zu Github). Das ganze ist dabei relativ unproblematisch. Zuerst wird das bestehende Repository geklont:

git clone https://code.google.com/p/cscl/

In der GitHub Oberfläche erstellen wir nun ein neues Repository (in diesem Fall mit dem Namen „CSCL“). Danach entfernen wir den alten Remote und weisen einen neuen hinzu:

git remote rm origin
git remote add origin git@github.com:seeseekey/CSCL.git

Mittels „git remote –v“ kann man sich die bestehenden „Remotes“ anschauen. Nachdem der neue Remote gesetzt wurden laden wir das Repository (mittels „push“) bei GitHub hoch:

git push -u origin master

Damit ist der Umzug abgeschlossen.

Weitere Informationen gibt es unter:
https://help.github.com/articles/removing-a-remote

Der Standardeditor im Terminal bei Mac OS X ist „vim“. Möchte man diesen nicht benutzen, so kann man den Editor ändern indem man im Nutzerhauptverzeichnis eine „.bash_profile“ Datei anlegt (wenn diese nicht bereits vorhanden ist). In diese Datei trägt man dann folgendes ein:

export EDITOR=nano

Nachdem dem Speichern der Änderung, sowie einem Neustart ist der neue Editor aktiv.

Wer in die Verlegenheit kommt und PDFs zusammenfügen möchte, der sollte sich einmal „pdftk“ anschauen. Unter Ubuntu muss das ganze mittels:

sudo apt-get install pdftk

installiert werden. Danach kann man mehrere Dateien im Terminal nach dem Schema:

pdftk rechnung.pdf rechnung-s2.pdf output rechnung-komplett.pdf

zusammenfügen.

Manchmal benötigt man eine MySQL Kommandozeile, hat aber kein „phpmyadmin“ zur Verfügung. Für einen solchen Fall wäre es schön wenn man eine kleine Anwendung hätte welche dieses Problem löst. Genau hier setzt die PHP Anwendung „Adminer“ an. Dabei handelt es sich sozusagen um eine „phpmyadmin“ Minimalversion.

SQL-Query Ansicht im Adminer

Das schöne am Adminer ist das er nur aus einer Datei besteht und so unkompliziert „installiert“ werden kann. Zu finden ist das ganze unter http://www.adminer.org.