• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Viele hassen ihn, manche schwören auf ihn, wir aber möchten unbedingt sehen, welche Bilder Ihr vor Eurem geistigen Auge bzw. vor der Linse Eures iPhone oder iPad sehen könnt, wenn Ihr dieses Wort hört oder lest. Macht mit und beteiligt Euch an unserem Frühjahrsputz ---> Klick

Unix Hacks für Schulung

Tobi1051

Uelzener Rambour
Registriert
29.12.05
Beiträge
371
Hallo,

ich werde in Kürze eine Unix Einsteigerschulung halten. Ziel ist es den Teilnehmern einen ersten Überblick über Unix zu verschaffen und die ersten Befehle zu vermitteln. Eigentlich alles ganz easy.

Aber um das ganze Interessant zu machen, möchte ich in der Schulung ein paar Unix Hacks zeigen, die den Teilnehmern die Leistungsfähigkeit von Unix (unter MacOS X) nähe bringen und mit denen ich die Lust auf mehr wecken kann. Nichts ist frustrierender, als eine Schulung zu halten, dessen Inhalt später keine Anwendung findet. Am Liebsten hätte ich irgendwelche kleinen Befehlskombinationen, dessen Ergebnis die Teilnehmer verstehen, aber erstmal einen WOW-Effekt nachsichziehen. Nach dem Motto: Wie hat der das gemacht? Soetwas habe ich schon immer können wollen. Wie geht das?

Die Teilnehmer haben alle jahrelange Erfahrung mit Macs, aber bisher noch nichts mit Unix gemacht.

Wenn Ihr Ideen habt, dann bitte posten.

Vielen Dank!

Gruß
Tobi
 

seb2

Gast
Weder Hack noch Unix aber bash: es gibt -- gerade was die History und das flotte Arbeiten angeht eine Unzahl von Kleinigkeiten, die ich sehr schätze, diese hier nutze ich eigentlich täglich:
- Ctrl-R für inkrementelle Suche in der History
- ! in allen Variationen, also !! !config (also das letzte configure oder was auch immer damit anfängt) und am meisten !config:p um das letzte configure an die letzte Stelle der History zu schreiben, es aber nicht auszuführen damit ich es mit "cursor oben" erreichen und bearbeiten kann
- die "Hütchen" um im letzten ausgeführten Befehl etwas zu ersetzen und auszuführen; angenommen "rm abc.jpg" war mein letzter Befehl gebe ich nur "^jpg^png" ein, um "rm abc.png" auszuführen

Was mir gerade noch einfällt, vielleicht mal die Mächtigkeit von curl und wget zeigen, um komplette Sites rekursiv runterzuladen oder auch Dateien mit bestimmten Mustern...?
 

Skeeve

Pomme d'or
Registriert
26.10.05
Beiträge
3.120
Wie oft muß man ganze Listen von Dateinamen umbennennen? Nicht oft, aber immer mal wieder. Gut wenn man da die Shell beherrscht:
Code:
for n in *.jpg
do 
  b=`basename "$n" .jpg`
  mv "$n" "$n"-old.jpg
done

Oder Archivieren von Daten in ein Verzeichnis mit aktuellem Datum als Namen
Code:
d=`date +%Y-%m-%d-%H-%M-%S`
mkdir -p /BACKUP/$d
mv * /BACKUP/$d/
Das ist natürlich nur als script richtig sinnvoll.

Und noch zwei, die ich häufig verwende:
1. Kopieren ganzer Verzeichnisse unter Beibehaltung sämtlicher Rechte und Timestamps:
Code:
tar cBpf - . | ( cd /target/ ; tar xBpf - )
2. Sicherung meiner Fotosammlung mit rsync
Code:
rsync -rv /Volumes/PICTUREDISK/Pictures/iPhoto\ Library/ /Volumes/BACKUPDISK/backups/Pictures/iPhoto\ Library/

Und ein letztes: Ändern des PROMPT
Code:
PS1="\033[7m \u@\h:\w \033[0m\n\$ "
export PS1
 

Tobi1051

Uelzener Rambour
Registriert
29.12.05
Beiträge
371
Hallo,

vielen Dank für die Tipps bisher. Das ist genau das, wie ich gesucht habe. Und ich muss ja sagen, dass ich selbst auch noch wieder etwas dazu gelernt habe.

Vielleicht setzen wir den Thread einfach fort. Einige Hacks sind bestimmt auch für andere User hoch interessant.

Gruß
Tobi1051
 

Tobi1051

Uelzener Rambour
Registriert
29.12.05
Beiträge
371
Hier noch ein Hack von mir:

Um eine Datei von einem auf einen anderen Server komprimiert zu übertragen, ohne dass man die Datei am Anfang komprimieren und am Ende wieder dekomprimieren muss kann man auch direkt den Stream komprimieren. Das hat auch den Vorteil, dass man auf dem Zielsystem max. soviel freien Spreicher benötigt, wie die entpackte Datei groß ist.

cat datei | gzip -9 | ssh benutzer@server "zcat > datei"

Gruß
Tobias
 

Skeeve

Pomme d'or
Registriert
26.10.05
Beiträge
3.120
cat datei | gzip -9 | ssh benutzer@server "zcat > datei"
Damit gehen aber User Informationen und Zeitstempel flöten.
Code:
tar cBpf - dateiname | gzip -9 | ssh benutzer@server 'zcat | tar xBpf -'
Sollte das Manko beheben. tar hat zwar auch eine option "-z" zum komprimieren, das lieferte hier im Test aber immer eine Fehlermeldung, obwohl die Datei richtig entpackt wurde.
 

pepi

Cellini
Registriert
03.09.05
Beiträge
8.740
Wie wäre es einige der Unix Funktionen, bzw. der Terminal Funktionen mit den gewohnten GUI Apps des Macs zu verbinden?

zB Key Bindings. Ein Terminal (unabhängig der Shell) unterstützt Kurzbefehle.
Am Mac sind da eingestellt, ctrl-a für Zeilenanfang, ctrl-e für Zeilenende, ctrl-w um das Wort links der Einfügemarke zu löschen, ctrl-k um die aktuelle Zeile zu löschen, und mein besonderer Liebling ctrl-t um die Zeichen rechts und links der Einfügemarke auszutauschen. (Klassiker wenn man einen Buchstabendreher hat.)

Diese Kürzel funktionieren in allen Cocoa Applikationen. zB in Mail.app, Safari, TextEdit, Pages, und auch vielen anderen. (M$ Office und Adobe Apps sind (bis auf Lightroom) durchwegs Carbon, können das also nicht.)
Damit können die User etwas mitnehmen, was nicht nur in Unix funktioniert, sondern auch Ihre bisherige Anwendung von GUI Applikationen erweitert.

Ein Eindrucksvoller "Befehl" ist beispielsweise:
Code:
/System/Library/CoreServices/Menu\ Extras/User.menu/Contents/Resources/CGSession -suspend
Was er tut? Copy, paste und ausprobieren! :-D Eignet sich gut um den Vortrag abzuschließen.


Ich würde auch das zusammenspiel von Unix und GUI herzeigen. Also im Terminal ein ls machen von einem Ordner der gerade im Finder angezeigt wird um zu zeigen, daß es das gleich ist, nur ein wenig anders aussieht. Ordner anlegen, Datei anlegen, verschieben umbenennen. Vorgänge die man vom GUI her eben kennt.
Gruß Pepi
 
Registriert
22.02.06
Beiträge
36
Hier noch ein Hack von mir:

Um eine Datei von einem auf einen anderen Server komprimiert zu übertragen, ohne dass man die Datei am Anfang komprimieren und am Ende wieder dekomprimieren muss kann man auch direkt den Stream komprimieren. Das hat auch den Vorteil, dass man auf dem Zielsystem max. soviel freien Spreicher benötigt, wie die entpackte Datei groß ist.

cat datei | gzip -9 | ssh benutzer@server "zcat > datei"

Gruß
Tobias

ssh hat schon einen -C parameter fuer die kompression. noch einfacher geht es mit scp:
scp -C /path/to/foo user@host:/path/to/bar
 

pepi

Cellini
Registriert
03.09.05
Beiträge
8.740
Stimmt, mit gzip isses wenig sinnvoll, da ist --compress beim scp besser. Wenn man das allerdings mit bzip2 oder p7zip macht, bringts uU doch etwas. Allerdings isses auch dann ein wenig unnötig viel plumbing. gzip kann nach stdout ausgeben, ebenso wie gunzip von stdin lesen kann. Das gleiche gilt für bzip2|bunzip2, p7zip.
Sollte man extern komprimieren, ist es allerdings empfehlenswert für scp oder ssh die compression nicht einzuschalten.
Gruß Pepi