Cyberduck: iTerm2 statt originalem Mac OS X Terminal verwenden

Wer einen Mac besitzt und affin zur Kommandozeile ist, setzt zu ihrer Verwendung oft auf die Alternative iTerm2 statt dem Standardprogramm von Mac OS X, das „Terminal“. Wer jetzt noch einen FTP-Client einsetzt, der stolpert ohne Frage über das geniale Open Source Programm Cyberduck. Cyberduck bietet eine Schaltfläche über die man sich ganz bequem mit einem Klick auf die Konsole des aktuell geöffneten Servers einwählen kann. Jetzt kommt der Haken: ein Klick auf diese Schaltfläche öffnet immer Terminal und nicht die gewünschte Alternative iTerm. In den Einstellungen findet sich nur eine Option zur Änderung des Standardeditors. Die Einstellung zur Veränderung des gewünschten Terminal Programms haben die Macher von Cyberduck bestens versteckt, sie muss über die Kommandozeile erfolgen:

defaults write ch.sudo.cyberduck terminal.bundle.identifier com.googlecode.iterm2
defaults write ch.sudo.cyberduck terminal.command \"make\ new\ terminal\\ntell\ the\ first\ terminal\\nlaunch\ session\ \\\"Default\ Session\\\"\\ntell\ the\ last\ session\\nwrite\ text\ \\\"{0}\\\"\\nend\ tell\\nend\ tell\"

Zurück zur Standardeinstellung kommt man auf dem gleichen Weg:

defaults delete ch.sudo.cyberduck terminal.bundle.identifier
defaults delete ch.sudo.cyberduck terminal.command 

SSH Config Datei: bequemen Shortcut für remote Verbindungen erstellen

Manchmal machen SSH-Verbindungen einfach keinen Spaß! Man verbindet sich immer zum gleichen Server und muss jedesmal einen ellenlangen Shell-Befehl im Terminal eintippseln. Hier beschreibe ich, wie man einfach einen Shortcut erstellt.

Statt sich jedes Mal an alle Einstellungen erinnern zu müssen und dann so etwas wie ssh -luser0815 -p 2222 host4711.example.com eingeben zu müssen, reicht es plötzlich ssh myserver zu tippseln. Boom. Verbunden. Fertig.

Dazu erstellt man zunächst folgende Datei ~/.ssh/config und öffnet diese in einem Texteditor seiner Wahl. Folgendermaßen sieht eine Beispielkonfiguration aus, die sich glaube ich von selbst erklärt.

Host myserver
	HostName host4711.example.com
	Port 2222
	User user0815

	ServerAliveInterval 30
	ServerAliveCountMax 120

Host github.com
	IdentityFile ~/.ssh/mygithubkey_rsa

Host tunnel
	HostName database.example.com
	User dbuser
	IdentityFile ~/.ssh/rsa_id
	LocalForward 9906 127.0.0.1:3306
	# forwards local port 9906 to remote port 3306
	# activate tunnel with: ssh -f -N tunnel
	# -f puts ssh in background
	# -N makes it not execute a remote command

Das spart nicht nur viel Zeit und Tipperei, sondern auch Befehle wie rsync werden viel übersichtlicher zu konfigurieren. als remote server kann einfach der hier angegebene Host verwendet werden.

Alle Details zum SSH Config File finden sich auf der zugehörigen man page (Wenn der Link nicht funktioniert installiere das super praktische Bwana).

Meine Quelle ist ein Artikel auf nerderati.com. Dort finden sich noch mehr Details zur SSH config Datei.

rsync mit Standard-Parametern (defaults) für progress und exclude versehen

In manchen Umgebungen gäbe man rsync gern einge Parameter/Optionen als Standard vor. Sei es um die Aufrufe von rsync übersichtlicher zu gestalten oder einfach um ein paar dauernd wiederholte Eingaben auf der Tastatur zu sparen. Ich ergänze als default Vorgabe im einzelnen

  1. eine Reihe von selbst definierten exclude pattern, also Definitionen von Dateien, die nicht synchronisiert werden sollen via --exclude-from=FILE,
  2. den Ausschluss von SVN und CVS Dateien mit Hilfe des Parameters --cvs-exclude
  3. und die Anzeige eines Fortschrittsbalkens mit --progress.

zu 1.) Es gibt Dateien, die nerven einfach fast immer, die will man nicht synchronisieren. Um diese zentral zu pflegen und ohne die einzelnen Aufrufe unübersichtlich zu machen, habe ich die Datei ~/.rsync/exclude angelegt und dort Zeilenweise die exclude pattern eingetragen. Meine Datei sieht z. Zt. wie folgt aus.

*.DS_Store
*._*
*Thumbs.db
*.bak
*~
*.tmp
*.temp
.Trash/*

Zu Beachten ist hier, dass die exclude pattern immer relativ zu den zu synchronisierenden Pfaden angewendet werden. Doch dazu mehr auf der man page von rsync (Wenn der Link nicht funktioniert installiere das super praktische Bwana)!

zu 3.) Hier wird einem zwar nicht der Fortschritt des gesammten Kopiervorgangs verraten, aber immerhin ein Fortschrittsbalken für die aktuell von rsync übertragene Datei. Hier ist abzuwägen. Wenn man viele lokale Kopiervorgänge mit großer Zahl kleiner Dateien durchführt, kann dies die Synchronisierung deutlich verlangsamen. Wenn man jedoch wie ich hauptsächlich Dateien an entfernte Server überträgt, ist das schon praktisch. Ebenfalls ein Auschlusskriterium ist die Verwendung von rsync in einem Cron-Job mit aktivierter E-Mail-Funktion. Hier wäre zu testen, ob evtl. durch das Hinzufügen von --quiet die default-Werte überschrieben werden können.

Wie können die Parameter nun standardmäßig aufgerufen werden? Mit Hilfe eines Alias! Dazu einfach folgende Zeile in der Datei ~/.bash_profile (wenn sie nicht existiert: einfach neu anlegen) ergänzen:

alias rsync = 'rsync --cvs-exclude --exclude-from=$HOME/.rsync/exclude --progress'

Die Sache mit dem alias funktioniert so übrigens mit jedem anderem Parameter und generell jedem Shell-Befehl.

Partition beim Systemstart nicht automatisch mounten

Auf meiner externen Festplatte habe ich eine Partition „Backup“, auf der ich – wie der Name nahelegt – ein Backup meines Systems abgelegt habe. Dieses erneuere ich in unregelmäßigen Abständen mit SuperDuper! CarbonCopyCloner (Update). Da ich die Platte aber nun regelmäßig nutze, möchte ich diese Partition etwas vor ungewollten Änderungen schützen. Die Lösung ist das automatische mounten (in der deutschen Übersetzung von Apple „aktivieren“) der Partition / des Laufwerks zu verhindern.

Hilfe kommt in Form der Datei /etc/fstab, aus der Unix im allgemeinen und auch Mac OS X 10.6 Informationen zum mounten von Dateisystemen zieht. Weiterlesen

Finder: Öffne Terminal mit aktuellem Pfad

Es kommt immer wieder vor, daß man im Finder in ein bestimmtes Verzeichnis navigiert, daß man anschließend auch im Terminal öffnen möchte. Leider muß man jetzt erst das Terminal öffnen und händisch zum gewünschten Pfad navigieren.

Das muß nicht sein, wenn man folgendes AppleScript als Anwendung speichert, kann man es einfach in die Werkzeugleiste des Finders ziehen und kann den aktuellen Pfad mit einem Klick im Terminal erreichen:

on run
    tell application "Finder"
        try
            activate
            set frontWin to folder of front window as string
            set frontWinPath to (get POSIX path of frontWin)
            tell application "Terminal"
                activate
                do script with command "cd \"" & frontWinPath & "\""
            end tell
        on error error_message
            beep
            display dialog error_message buttons {"OK"} default button 1
        end try
    end tell
end run

Platzfresser im Linuxsystem finden

Mit folgendem Fundstück lassen sich große Verzeichnisse finden, die nicht selten reine Platzfresser sind

Anmelden als root [oder per sudo ausführen]
ins Verzeichnis / wechseln
Befehl
du -m | sort -n | tail -n 10

ausführen -> Auflistung der 10 größten Verzeichnisse mit Plattenbelegung

Ggf. in das größte der aufgelisteten Verzeichnisse wechseln und dort den Befehl noch mal wiederholen.

Quelle: http://sysadmintipps.blogspot.com/2007/03/groe-dateien-verzeichnisse-unter-linux.html

Da bei größeren Verzeichnissen auch immer die Übergeordneten Verzeichnisse in der Auflistung landen, würde ich mir allerdings de letzten 25 Zeilen anzeigen lassen.

wget für Mac OS X installieren

Mac OS X kommt standardmäßig mit curl statt wget. Beide Programme machen zwar das gleiche, ich möchte jedoch wget haben, da dies von meinen vorhandenen Scripten verwendet wird. Voraussetzung für das folgende HowTo ist eine Installation der Apple XCode Developer Tools, außerdem müssen die Command Line Tools installiert sein (XCode -> Preferences -> Downloads -> Components)*.
Update: Die Verknüpfung zum automatischen Laden der neuesten Version ist leider entfernt worden. Also gilt es zunächst die neueste Version von wget unter folgender URL herauszufinden http://ftp.gnu.org/gnu/wget/ und dann unten in der ersten Zeile an Stelle von VERSION einzufügen.

Per Terminal wird wget anschließend folgt installiert:

curl -o wget-latest.tar.gz http://ftp.gnu.org/gnu/wget/wget-VERSION.tar.gz
tar xzf wget-latest.tar.gz
cd wget-x.y.z # Verzeichnis, das im latest Archiv verpackt war, z.B. wget-1.13.1
./configure --with-ssl=openssl
make
sudo make install

Und wir räumen auch wieder auf:

cd ..
rm wget-latest.tar.gz
rm -rf wget-x.y.z

Alternativ ist die Installation auch mit Homebrew (brew install wget) oder MacPorts (sudo port install wget) möglich.

Update: Ab der Version 1.13 von wget verlangt die Installation standardmäßig GnuTLS an Stelle von OpenSSL.* GnuTLS ist aber nicht standardmäßig installiert. Daher müssen wir die Installation mit --with-ssl=openssl anweisen, OpenSSL zu nutzen.

Update: Die Anleitung funktioniert auch noch unter Max OS X 10.10 Yosemite.

Thanks, Ben, for this remark!

Alias für TextEdit, Programme aus dem Terminal starten

Bei meinen bisherigen Versuchen ein Alias für TextEdit im Terminal einzurichten, gab es immer irgendwelche Unbequemlichkeiten.

Ein Vorschlag, der auch auf vielen anderen Seiten zu finden ist, war
alias te '/Applications/TextEdit.app/Contents/MacOS/TextEdit'
Grundsätzlich funktioniert das zwar, aber das gibt (bei mir) häßliche Fehlermeldungen. Außerdem ist das Terminal blockiert, solange TextEdit geöffnet ist. Der Hinweis, ein & hinter den Befehl zu setzen funktioniert (bei mir) nicht. Auch startet jedes mal eine komplett neue Insstanz von TextEdit, die sich im Dock niederläßt.

Die Lösung ist
alias te=' open /Applications/TextEdit.app/'

Das entscheidende Fundstück brachte mal wieder wiederholtes googlen. Der Befehl open öffnet eine Applikation wie über die graphische Oberfläche. Keine fehlermeldungen, das Terminal ist nicht blockiert und auch kein mehrfacher Start der Applikation. Super! 🙂

Fügt man oben genannte Zeile in ~/.bash_profile ein, läßt sich jede (lokale) Datei im Terminal mit te foo.txt öffnen und bearbeiten, ohne auf eine komfortable grafische Oberfläche verzichten zu müssen.

Warum eigentlich der Alias, wenn open doch eine Datei direkt entsprechend Ihres Types öffnet? Ganz einfach. So können auch Shell-Skripte, die sonst ausgeführt würden sowie Dateien ohne (passende) Dateiendung im Texteditor geöffnet werden. Zu guter Letzt ist te natürlich nur halb so viel zu tippen wie open. 😉

TextMate fügt übrigens automatisch den Befehl (genauer: das Programm) mate hinzu. Der Befehl mate foo.txt öffnet dieses in TextMate.