Mac Os X Hacks
Mac Os X Hacks
Mac Os X Hacks
Erfolgreiche ePaper selbst erstellen
Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.
Inhaltsverzeichnis<br />
<strong>Mac</strong> <strong>Os</strong> X <strong>Hacks</strong><br />
Nikolas Engelhard<br />
1. Februar 2009<br />
1 Terminal 3<br />
1.1 Einleitung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3<br />
1.2 ls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3<br />
1.3 cd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3<br />
1.4 ssh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4<br />
1.4.1 Grundlagen . . . . . . . . . . . . . . . . . . . . . . . . 4<br />
1.4.2 Anmelden ohne Passwort . . . . . . . . . . . . . . . . . 4<br />
1.4.3 ssh-Tunnel als Proxy . . . . . . . . . . . . . . . . . . . 5<br />
1.5 grep . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5<br />
1.6 sed . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5<br />
1.7 persönliche Einstellungen . . . . . . . . . . . . . . . . . . . . . 6<br />
1.7.1 alias . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6<br />
1.7.2 export . . . . . . . . . . . . . . . . . . . . . . . . . . . 6<br />
1.7.3 dauerhaftes Speichern . . . . . . . . . . . . . . . . . . 7<br />
1.8 zip . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7<br />
1.9 IRB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7<br />
2 Scripts 7<br />
2.1 Einleitung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7<br />
2.2 einseitige Synchonisation . . . . . . . . . . . . . . . . . . . . . 7<br />
2.3 Umlaute in html-Dateien . . . . . . . . . . . . . . . . . . . . . 8<br />
3 C++ 9<br />
3.1 kompilieren einer cpp-Datei . . . . . . . . . . . . . . . . . . . 9<br />
1
4 Software 9<br />
4.1 TinkerTool . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9<br />
4.2 WhatSize . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9<br />
4.3 Smultron . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9<br />
4.4 TeXShop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10<br />
5 Sonstiges: 10<br />
5.1 Latex . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10<br />
5.1.1 neue Styles hinzufügen . . . . . . . . . . . . . . . . . . 10<br />
5.1.2 Literaturverzeichnis . . . . . . . . . . . . . . . . . . . . 10<br />
5.2 GnuPlot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11<br />
5.2.1 Fehlerbalken . . . . . . . . . . . . . . . . . . . . . . . . 12<br />
5.2.2 mehrere Graphen . . . . . . . . . . . . . . . . . . . . . 12<br />
2
1 Terminal<br />
1.1 Einleitung<br />
In diesem Dokument habe ich ein paar nützliche Befehle des Terminals aufgeschrieben,<br />
hauptsächlich, um schnell etwas nachschlagen zu können. Manche<br />
Anwendungen kann man wahrscheinlich noch deutlich schneller und schöner<br />
schreiben, aber die Programme tun was sie sollen (worauf ich natürlich keine<br />
Garantie geben kann). Alles wurde unter <strong>Mac</strong> OS 10.5 getestet, sollte aber<br />
auf allen UNIX-basierten Rechnern laufen können.<br />
1.2 ls<br />
Ein recht wichtiger Befehl ist ls (list segments), mit dem man sich die Dateien<br />
im aktuellen Ordner anzeigen lassen kann.<br />
Die wichtigsten Parameter sind:<br />
-a : Anzeige aller Dateien (insbesondere versteckter Dateien)<br />
-l : Anzeige umfangreicher Informationen über die Dateien, wie<br />
Zugriffsrechte oder Größe<br />
1.3 cd<br />
Ein anderer, sehr häufig benutzter Befehl ist cd (change Directory), mit dem<br />
man den aktuelle Arbeitsordner verändern kann.<br />
Beispiele:<br />
• cd<br />
Sprung in das Home-Verzeichnis<br />
• cd ..<br />
bewegt sich eine Ebene nach oben<br />
• cd UnterOrdner<br />
Bewegung in den Unterordnder ( cd Desktop )<br />
3
1.4 ssh<br />
1.4.1 Grundlagen<br />
ssh (Secure Shell) wird eingesetzt, um sich bei einem entfernten Rechner<br />
anzumelden. Die einfachste Version lautet ssh username@server<br />
Daraufhin wird der Server nach dem entsprechenden Passwort fragen, wie<br />
man diese Abfrage automatisieren kann, steht im nächsten Abschnitt.<br />
1.4.2 Anmelden ohne Passwort<br />
Um der ständigen Passwortabfrage zu entgehen, kann man ein public/private-<br />
Schlüsselpaar benutzen. Der private Schlüssel bleibt auf dem eigenen Rechner<br />
(und sollte gut geschützt sein), der öffentliche wird auf den Server gelegt.<br />
Per ssh-keygen -t dsa erstellt man ein solches Paar, wobei die Parameter<br />
die Protokolversion angeben. Den voreingestellten Speicherort muss man<br />
nicht ändern.<br />
Zur Passphrase: Diese Passphrase ist noch ein zusätzlicher Schutz für den<br />
privaten Schlüssel. Benutzt man eine solche Phrase, wird sie immer abgefragt,<br />
bevor der private Schlüssel zur Identifikation benutzt werden kann.<br />
Benutzt man keine, kann jeder den privaten Schlüssel benutzen, wenn er die<br />
passende Datei vom Rechner holen kann. Kann man sicherstellen, dass dies<br />
nicht passieren wird, kann man einfach eine leere Passphrase benutzen.<br />
Die beiden Schüssel wurden als id dsa und id dsa.pub in den .ssh-Unterordner<br />
des Homeverzeichnisses gelegt. Dort bringt der öffentliche Schlüssel allerdings<br />
noch nichts, er muss erstmal auf den Server gebracht werden.<br />
Der einfachste Weg, den Schlüssel sicher zu übertragen, ist scp. Dieses Programm<br />
basiert auf ssh und verschlüsselt die Datei vor der Übertragung. Der<br />
passende Befehl ist hier<br />
scp \Users\BenutzerName\.ssh\id dsa.pub BenutzerName2@server:<br />
Nur weiss der Server noch nicht, dass es sich bei dieser Datei um einen<br />
Schlüssel handelt. Man muss sich also ein letztes Mal per ssh auf dem Server<br />
anmelden und dabei sein Passwort eingeben. Falls auf dem Server noch keine<br />
Schüssel liegen, muss man noch ein passendes Verzeichnis anlegen: mkdir<br />
.ssh, dass aber von niemandem gelesen oder beschrieben werden darf, ausser<br />
dem Benutzer selbst: chmod 700 .ssh. Jetzt kann man die Datei in das<br />
.ssh-Verzeichnis legen und dabei noch umbenennen:<br />
mv id dsa.pub .ssh/authorized keys<br />
Wenn man auf dem Server mehrere Schlüssel lagern will, weil sich z.B. mehre-<br />
4
e Leute auf diesem Server anmelden wollen, sollte man den neuen Schlüssel<br />
einfach nur der authorized keys-Datei hinzufügen:<br />
cat id dsa.pub >> .ssh/authorized keys und das Original wieder löschen:<br />
rm id dsa.pub<br />
Von nun an wird man nicht weiter nach dem Passwort gefragt, sondern kann<br />
sich recht schnell auf dem Server anmelden. Wie man diesen Schritt noch<br />
weiter beschleunigen kann, steht im Abschnitt über persönliche Einstellungen.<br />
1.4.3 ssh-Tunnel als Proxy<br />
Todo<br />
1.5 grep<br />
Mit grep lassen sich Dateien einfach über reguläre Ausdrücke durchsuchen.<br />
Der einfachste RegExp ist wohl ein String, nach dem gesucht werden soll.<br />
grep hallo quelle.txt >> ziel.txt hängt alle Zeilen aus quelle.txt, die<br />
den string hallo beinhalten, hinten an ziel.txt an. Soll ziel.txt überschrieben<br />
werden, reicht es > an Stelle von >> benutzen.<br />
Die Option -v invertiert das Suchergebnis, grep -v welt foo.txt gibt alle<br />
Zeilen aus, die welt nicht enthalten.<br />
1.6 sed<br />
Mit sed (Stream EDitor) lassen sich unter anderem recht einfach Suchen/Ersetzen-<br />
Aktionen ausführen. Die Syntax:<br />
sed s/foo/bar/g datei.txt<br />
Hiermit würden alle vorkommen des Strings ”foo”durch ”bar” ersetzt werden<br />
und die geänderte Anzeige im Terminal angezeigt werden, die Datei selbst<br />
würde nicht verändert werden. Der Parameter -i hilft weiter.<br />
sed -i ’.backup’ s/foo/bar/g datei.txt kopiert zu erst den Inhalt von<br />
datei.txt in eine neue Datei namens datei.txt.backup, und führt dann die<br />
Ersetzung direkt in datei.txt aus. Für man den Befehl mehrmals aus, wird<br />
die Sicherungskopie überschrieben. Will man keine Kopie anlegen, gibt man<br />
nur sed -i ’’ s/foo/bar/g datei.txt ein.<br />
Diese Benutzung von sed ist wohl die einfachste Anwendung aber eine recht<br />
nützliche.<br />
5
1.7 persönliche Einstellungen<br />
Bei manchen Befehlen gewöhnt man es sich vielleicht an, immer bestimmte<br />
Parameter zu übergeben oder man will den langen Namen eines Servers nicht<br />
immer komplett tippen. Für beide Probleme gibt es recht einfache Lösungen:<br />
1.7.1 alias<br />
Mit dem alias-Befehl lassen sich recht einfach neue Befehle definieren, vergleichbar<br />
vielleicht mit dem newcommand in tex. Die Syntax ist recht einfach:<br />
alias neuerName=’Befehlssequenz’<br />
Beispiele:<br />
• alias ls=’ls -al’<br />
• alias login=’ssh username@server’<br />
Hat man wie oben beschrieben die manuelle Passwortaeingabe ausgeschaltet,<br />
lässt sich der ssh-Einlogvorgang somit auf das eintippen von ’login’ verkürzen.<br />
Alle gesetzten alias kann man sich per alias anzeigen lassen, eine Verknüpfung<br />
lässt sich per unalias name wieder löschen.<br />
Gesetzte alias sind nur in der aktuellen Sitzung gültig. Um sie dauerhaft einzurichten,<br />
muss man die passende config-Datei anpassen, aber dazu unten<br />
mehr.<br />
1.7.2 export<br />
Will man keine Befehle umbenennen, sondern z.B. für den langen Servernamen<br />
nur eine Abkürzung definieren, kann man export benutzen.<br />
Syntax: export name="langerString".<br />
Der Aufruf erfolgt dann mit vorgestelltem $: echo $name liefert dann langerString.<br />
Eine mögliche Anwendung wäre somit:<br />
export server="login.server.rz.informatik.uni.de"<br />
ssh username@$server<br />
Auch hier endet die Gültigkeit mit dem Schließen des Terminals. Die belegten<br />
Schlüssel-Wert-Paare kann man sich per export anschauen, was auch<br />
recht interessant ist.<br />
6
1.7.3 dauerhaftes Speichern<br />
Praktischerweise gibt es eine recht einfache Methode Befehle wie alias oder<br />
export automatisch beim Starten des Terminals ausführen zu lassen. Dafür<br />
legt man einfach eine Datei namens .bash profile im HomeVerzeichnis an<br />
und schreibt dort die Befehle genau wie im Terminal selbst hinein.<br />
1.8 zip<br />
Einzelne Datei: zip foo.zip Dateiname<br />
Ganzer Ordner: zip -r foo.zip Ordner<br />
1.9 IRB<br />
Interactive Ruby: Time.at(123,456)<br />
Konvertiert Zeit aus Sekunden, MilliSekunden in ein Lesbares Format<br />
2 Scripts<br />
2.1 Einleitung<br />
Hier sind einige shell-scripts, die einem so manche nervige Aufgabe abnehmen<br />
und das Leben mit einem Rechner etwas einfacher machen.<br />
2.2 einseitige Synchonisation<br />
Häufig bearbeitet man veröffentlichte Dateien nicht auf dem Server, sondern<br />
muss sie nach den Änderungen wieder auf den Server übertragen. Eine einfache<br />
Möglichkeit besteht in einem shell-Skript, dass auf rsync beruht. rsync<br />
überträgt nur die Änderungen und nicht die kompletten Datein, so dass der<br />
Netzwerklast nicht allzu groß wird. Der Code geht davon aus, dass kein Passwort<br />
manuell eingegeben werden muss, sondern dass die Authentifizierung<br />
über ein Schlüsselpaar ausgeführt wird<br />
#! /bin/bash<br />
# Alle Dateien aus diesem Ordner werden übertragen<br />
7
sourceFolder="/Users/nikolas/Documents/Uni/webSite/"<br />
# und auf diesen Server geschrieben<br />
address="nikolas@login.informatik.uni-freiburg.de"<br />
# und zwar in diesen Ordner:<br />
folder=".public_html/ "<br />
# -r (rekursiv): Alle Dateien im Ordner werden übertragen<br />
# -v (verbose): Ausgabe der Übertragenen Dateien<br />
rsync -rv $sourceFolder $address:$folder<br />
# Alle Dateien im ZielOrdner werden auf 755<br />
# (lesen und ausführen für alle) gesetzt<br />
# -R (resursiv), wie oben<br />
ssh $address ’chmod -R 755 .public_html’<br />
Für den Aufruf des Codes gibt es mehrere Möglichkeiten:<br />
a) Als ”transfer.sh” in ein beliebiges Verzeichnis legen und per ”sh transfer.sh”<br />
aufrufen<br />
b) unter <strong>Mac</strong>: den Code als ”transfer”nach /usr/bin/ legen, Zugriffsrechte<br />
auf 755 und von beliebiger Position einfach per ”transfer” aufrufen.<br />
2.3 Umlaute in html-Dateien<br />
Um nicht ständig anstatt ”Ä” ”Ä” eingeben zu müssen, kann man dieses<br />
Skript einsetzen, dass in allen html-Dateien im angegebenen Verzeichnis<br />
arbeitet:<br />
#! /bin/bash<br />
ordner="/Users/nikolas/Documents/Uni/webSite/"<br />
for file in ‘ls $ordner | grep .html$‘; do<br />
sed -i "" -e ’s/ä/\ä\;/g’ \<br />
-e ’s/ö/\ö\;/g’ \<br />
-e ’s/ü/\ü\;/g’ \<br />
-e ’s/Ä/\Ä\;/g’ \<br />
-e ’s/Ö/\Ö\;/g’ \<br />
-e ’s/Ü/\Ü\;/g’ \<br />
-e ’s/ß/\ß\;/g’ $ordner$file<br />
8
done<br />
3 C++<br />
3.1 kompilieren einer cpp-Datei<br />
c++ main.cpp -o foo ; ./foo ; rm foo<br />
Hier wird die main.cpp kompiliert, die Ausgabe nach foo geschrieben, foo<br />
gestartet und wieder gelöscht.<br />
4 Software<br />
4.1 TinkerTool<br />
Alle Dokumente deren Namen mit einem . beginnen, werden vom Finder<br />
standardmäßig nicht angezeigt. Auch das ls zeigt nichts an, so lange man<br />
nicht den -a Parameter benutzt.<br />
Ein praktisches Programm, mit dem man diese Dateien anzeigen kann und<br />
auf viele weitere Systemeigenschaften zugreifen kann, ist das TinkerTool.<br />
4.2 WhatSize<br />
Dieses Werkzeug ist in der Lage, die Größe von Ordnern und Dateien zu vermessen<br />
und anzuzeigen. Natürlich keine besonders gut versteckte Information,<br />
aber durch die Sortierung und die Farbcodierung je nach Größe können<br />
die Suche nach großen, aber eigentlich nicht benötigen Dateien deutlich vereinfachen.<br />
Die SharewareVersion kann nur 20GB an Daten vermessen, so<br />
dass man nicht den gesamten Rechner auf ein Mal durchschauen kann, aber<br />
praktisch ist es auf jeden Fall.<br />
4.3 Smultron<br />
Smultron ist ein einfacher Editor mit Syntaxhighlighting für die gängigsten<br />
Programmier- und Skriptsprachen. Besonders bei der html-Gestaltung ist das<br />
Smultron hilfreich. Tags können automatisch per Befehl geschlossen werden<br />
und auch ein html-Interpreter für die schnelle Kontrolle ist eingebaut.<br />
9
4.4 TeXShop<br />
Netter Tex-Editor.<br />
5 Sonstiges:<br />
5.1 Latex<br />
5.1.1 neue Styles hinzufügen<br />
Die .cls-Datei nach /usr/local/texlive/2007basic/texmf/tex kopieren<br />
und sudo texhash ausführen, damit der TexShop auch gesagt bekommt,<br />
dass neue Stile vorhanden sind.<br />
5.1.2 Literaturverzeichnis<br />
Ausgelagerte Inhaltsverzeichnisse, die man mehrmals verwenden kann, sind<br />
sicherlich recht praktisch, weswegen sie auch von Tex unterstützt werden:<br />
quellen.bib:<br />
@article{eins,<br />
author = {A.U. Thor},<br />
title = {Das Buch}<br />
}<br />
@article{zwei,<br />
author = {A.U. Thor},<br />
title = {und noch ein Buch}<br />
}<br />
In Aufsatz.txt:<br />
\begin{document}<br />
\nocite{*} % dieser Befehl führt dazu, dass auch nicht<br />
% zitierte Quellen im Literaturverzeichnis auftauchen<br />
\bibliographystyle{plain} % Darstellung der einzelnen Felder<br />
10
\cite{eins} \% Verweis in die Literatur<br />
\bibliography{quellen} \% legt den Ort des Verzeichnisses fest<br />
Damit das Literaturverzeichnis in das fertige Dokument aufgenommen wird,<br />
muss es erst eigentändig kompiliert werden. Im Texshop kann man unter<br />
SSetzen”BibTex ausführen, und danach mit Latex weitermachen (⇑+Apfel+B<br />
und ⇑+Apfel+L. Im Terminal auch als<br />
bibtex Aufsatz && pdflatex Aufsatz && open Aufsatz.pdf möglich.<br />
5.2 GnuPlot<br />
GnuPlot ist ein kostenloses Programm, mit dem man sich recht einfach schöne<br />
Funktionen plotten und fitten lassen kann. kleines Beipiel: Datei: werte<br />
1 1<br />
2 2.2<br />
3 3.4<br />
4 4<br />
5 5<br />
6 6<br />
7 7<br />
Darstellung in Gnuplot: > plot ”werte”<br />
Anlegen von Variablen und Funktionen:<br />
> m=1<br />
> c=-1<br />
> f(x) = m*x+c<br />
> plot f(x)<br />
> set xrange [0:5]<br />
> set yrange [1:5]<br />
> set xlabel "x-Achse"<br />
> replot<br />
Anpassen einer Funktion an die Daten:<br />
>fit f(x) "werte" using 1:2 via m,c<br />
Anpassen der Ausgabe:<br />
11
set style line 1 lt 1 pt 7<br />
> set style line 2 lt 2 lw 3<br />
> set size 0.6,0.6<br />
> set term postscript eps enhanced color<br />
> set output "exp.ps"<br />
> plot "werte" using 1:2 title "experiment" ls 1, \<br />
> f(x) title "fit" with line ls 2<br />
> set term x11 // wieder Ausgabe im Fenster<br />
Ausgabe als latex-Code:<br />
> set terminal latex<br />
Grafik zu pdf konvertieren und einbinden:<br />
y-Achse<br />
6<br />
5<br />
4<br />
3<br />
2<br />
1<br />
0<br />
experiment<br />
fit<br />
-1<br />
0 1 2 3 4 5<br />
x-Achse<br />
weitere Informationen:<br />
http://t16web.lanl.gov/Kawano/gnuplot/intro/plotfunc-e.html<br />
https://www.uni-hohenheim.de/ aurbach/gnuplot/gnuplot.html<br />
5.2.1 Fehlerbalken<br />
Symmetrisch in y-Richtung: (fehler: x y y fehler)<br />
plot ’’fehler’’ with errorbars ls 1 notitle, ’’fehler’’ title ’’TestGruppe’’<br />
asymetrisch: (fehler: x y ymin ymax)<br />
plot ’’fehler’’ using 1:2:($2-$3):($2+$3) with yerrorbars<br />
5.2.2 mehrere Graphen<br />
set multiplot<br />
set origin 0,0.5<br />
set size 0.5,0.5<br />
12
set title "erster Graph"<br />
plot x*x title "parabel"<br />
set origin 0.5,0.5<br />
set title "zweiter Graph"<br />
plot sin(x) title "sinus"<br />
set origin 0,0<br />
set title "dritter Graph"<br />
plot cos(x) title "cosinus"<br />
unset multiplot<br />
Alternativ: set multiplot layout 3,2 columnsfirst scale 1.1,0.9 nicht<br />
getestet, sollte ab gnu 4.2.4 funktionieren<br />
13