10 Gruende, warum ich das Terminal liebe

Dieses Thema im Forum "Hardware" wurde erstellt von tas, 19. November 2002.

  1. tas

    tas New Member

    . Dies wuerde etwa dazu fuehren, dass die einfache Eingabe "daily" das taegliche Skript ausfuehrt; das alias steht zur Verfuegung, wenn man ein neues Terminalfenster oeffnet (mit "alias" ausprobieren!). Auf diese Weise kann man fuer alles, was man haeufig erledigt, eine Menge Tipparbeit sparen.

    2) Lange Pfadnamen zu schreiben ist muehselig, und ausserdem fuehrt jeder noch so kleine Fehler zu der Meldung "no such file". Abhilfe: Neben das Terminalfenster ein geoeffnetes Finderfenster legen und die Dateien/Verzeichnisse einfach mit der Maus rueberziehen und im Terminalfenster loslassen; dort wird dann der Pfad automatisch eingesetzt. Elegant ist auch die "autocompletion"-Funktion: man beginnt jeweils mit den ersten 2-3 Buchstaben des Pfads und drueckt "tab", dann wird der Rest ergaenzt, bei mehrdeutigen Angaben erhaelt man eine Liste aller Namen, die passen koennten. Auf diese Weise kann man sicher sein, dass die Angaben immer stimmen.

    3) Nuetzlich ist auch die "history"-Funktion: die tcsh speichert eine Liste der zuletzt ausgefuehrten Befehle, durch "Pfeiltaste hoch" kann man Stueck fuer Stueck durch diese Liste durchgehen - bequem, wenn man einen komplexen Befehl mehrmals ausfuehren muss, dann kann man etwa mit der Pfeiltaste ihn jedesmal neu aufrufen und braucht dann nur noch den Dateinamen zu veraendern. Praktisch ist auch die Moeglichkeit, in einer neuen Befehlszeile den letzten Befehl mit dem Kuerzel "!-1" einzufuegen. Beispiel: ich habe einen ziemlich langen und komplexen Befehl eingegeben und stelle dann fest, dass ich dazu sudo-Rechte brauche. Eingabe "sudo !-1" laesst den letzten Befehl noch einmal unter sudo ablaufen.

    4) In den "man-pages" steht jede Menge Information, aber sie im Terminalfenster Bildschirm fuer Bildschirm zu lesen, ist gerade bei den umfassenderen Sachen (wie etwa "man tcsh") sehr muehsam. Man kann jedoch diese Seiten sehr einfach in ein schoenes html-Format umwandeln, das man dann in jedem Webbrowser anschauen kann. Die man-pages befinden sich fast alle in /usr/share/man oder /usr/local/share/man. Hat man dort die gesuchte Seite gefunden, gibt man ins Terminal z. B. ein: "groff -Thtml -man /usr/share/man/man1/tcsh.1 > tcsh.html" (das Zeichen ">" bedeutet: Ausgabe umleiten in Datei mit folgendem Namen). Ich habe mir so eine kleine Sammlung von Seiten angelegt, die ich oft brauche.

    5) Zum Synchronisieren von Ordnern kann man GUI-Shareware-Programme verwenden, aber im Grunde sind alle Instrumente schon an Bord: vor allem der Befehl "rsync" hat ungemein viele und sehr detaillierte Optionen, mit denen man genau das machen kann, was man wirklich braucht (man-pages lesen, s. Punkt 4). Insbesondere kann man damit auch via ssh auf Rechner im Netzwerk zugreifen; das saehe dann etwa folgendermassen aus, wenn man einen Laptop und einen Desktop synchronisieren will: "rsync -vae ssh /Users/MY_NAME/Documents/ MY_NAME@XXX.XX.XXX.XX:/Users/MY_NAME/Documents/". Rsync erstellt eine eigene Datenback und kopiert nur die Dateien, die sich seit dem letzten Synchronisieren veraendert haben, das geht rasend schnell. Allerdings hat es den Nachteil, dass es keine Resource-Forks kopiert, wenn man also keine Endungen an seinen Dateien hat, gehen etwa Informationen ueber den Dateityp verloren. Dafuer gibt es ein kleines, ebenfalls sehr elegantes Perl-Script namens "Psync", das man sich bei www.cpan.org herunterladen kann (nach "MacOSX-File-0.64" suchen; zur Installation muss man die developer-Tools auf seinem Rechner haben) und das aehnlich funktioniert (allerdings nicht selbst eine Netzwerkverbindung herstellen kann; d. h. die Volumes, auf die man kopieren moechte, muessen schon gemountet sein).

    6) Dasselbe gilt auch fuer das Komprimieren und Archivieren von Dateien bzw. Verzeichnissen: die Befehle "gzip" oder "bzip" komprimieren, und zwar insbesondere Textdateien sehr wirkungsvoll; "gunzip" bzw. "bunzip" (Ihr habt es erraten) entpacken das Ganze wieder. Mit "tar" kann man ein ganzes Verzeichnis in ein Archiv packen, was insbesondere fuer das Versenden per e-mail sehr praktisch ist. Man gibt folgendes ein: "tar -cf ARCHIVNAME.tar VERZEICHNISPFAD"; das entstandene Archiv kann man dann noch mit gzip komprimieren.

    7) Dass man mit "Command-S" im "Single-User-Mode" starten kann und dann per "fsck -y" das Grundverzeichnis seiner OS X-Startpartition ueberpruefen und reparieren, hat sich inzwischen allgemein rumgesprochen. Weniger bekannt ist, dass man aus dem Terminal auch alle anderen Partitionen reparieren kann. Dazu gibt man zunaechst ein "mount" und erhaelt eine Liste aller Volumes samt deren Adressen in der Form "/dev/diskXsX". Anschliessend gibt man ein "sudo fsck_hfs /dev/diskXsX", und die entsprechenden Volumes werden ueberprueft und gegebenenfalls repariert.

    8) "Ditto" ist ein Apple-eigener Kopierbefehl, der mit der Option "-rsrc" auch Resources kopiert (was das normale Unix "cp" nicht tut). Mit Hilfe dieses Befehls kann man etwa eine ganze OS X-Partition klonen und so ein bootfaehiges Laufwerk erhalten. Dazu muss man folgende Verzeichnisse per "ditto -rsrc" kopieren: /Applications, /Library, /Developer, /System, /Users, /cores, /private, /usr, /bin, /sbin, /mach_kernel, /.hidden. Anschliessend stellt man mit den Befehlen "ln -s private/etc etc", "ln -s private/var var" und "private/tmp tmp"
    einige links her, die das System braucht, und produziert mit "mkdir dev Volumes Network" ebenfalls benoetigte leere Verzeichnisse.

    9) Fuer komplexe Befehlsketten wie die gerade genannte kann man kleine shellscripts schreiben, das ist ueberhaupt nicht schwierig. Also: zunaechst Textdokument im Lieblingseditor oeffnen (ich nehme gerne im Terminal "pico" oder in der GUI "TextEdit". In die erste Zeile schreibt man, welche shell das Ganze ausfuehren soll; aus Gruenden der Kompatibilitaet ist das meistens die gute alte "sh". Das sieht so aus: "#!/bin/sh". Damit man auf Nummer sicher geht, gibt man anschliessend fuer alle verwendeten Unix-Befehle den Pfad an (den kriegt man raus, indem man im Terminal eingibt "whereis X") und jeweils ein alias einsetzt, etwa so:
    DITTO=/usr/bin/ditto
    LN=/bin/ln
    MKDIR=/bin/mkdir
    Dann gibt man die Befehle ein und benutzt jetzt die zuvor vereinbarten Aliasse, die man durch das Zeichen $ markiert (hier muessen natuerlich eure Verzeichnisnamen eingesetzt werden):
    ${DITTO} -rsrc /Applications /Volumes/Backup/Applications
    ${DITTO} -rsrc /Library /Volumes/Backup/Library
    ${DITTO} -rsrc /Developer /Volumes/Backup/Developer
    ${DITTO} -rsrc /System /Volumes/Backup/System
    ${DITTO} -rsrc /Users /Volumes/Backup/Users
    ${DITTO} -rsrc /cores /Volumes/Backup/cores
    ${DITTO} -rsrc /private /Volumes/Backup/private
    ${DITTO} -rsrc /usr /Volumes/Backup/usr
    ${DITTO} -rsrc /bin /Volumes/Backup/bin
    ${DITTO} -rsrc /sbin /Volumes/Backup/sbin
    ${DITTO} -rsrc /mach_kernel /Volumes/Backup/mach_kernel
    ${DITTO} -rsrc /.hidden /Volumes/Backup/.hidden
    ${LN} -s private/etc etc
    ${LN} -s private/var var
    ${LN} -s private/tmp tmp
    ${MKDIR} dev Volumes Network

    Jetzt speichert man das Ganze ab und gibt ihm die Endung ".sh", also etwa "backup.sh"; ueblicherweise werden shellscripts in ein Unterverzeichnis "bin" im Heimverzeichnis gespeichert. Jetzt setzt man die Berechtigung so, dass das Skript ausgefuehrt werden kann: "chmod 755 backup.sh" (zur Kontrolle wechselt man in das Verzeichnis, in dem "backup.sh" liegt, und gibt "ls -lg" ein, da sollte jetzt vor "backup.sh" stehen "-rwx-xr-xr-x". Mit "rehash" fordert man die shell auf, das neue Script in ihr Verzeichnis der ausfuehrbaren Programme zu uebernehmen. Und dann geht's los: "sudo backup.sh" ruft das neue Script auf und gibt ihm Ruth-Rechte, und dann sollte es tun, wozu es geschrieben wurde.

    10) Den Gipfel der Dekadenz stellt die Moeglichkeit dar, solche Scripts automatisch laufen zu lassen. Dazu legt man ein eigenes "crontab" an, und das macht man so: zunaechst setze ich als meinen Editor das Programm "pico" fest, das ich wesentlich bequemer zu benutzen finde als das voreingestellte "vi"; dazu gibt man ein: "setenv EDITOR pico". Danach startet man das crontab-Programm mit "crontab -e". Pico wird automatisch aufgerufen und oeffnet ein leeres Fenster. In das schreibt man folgende Zeile hinein:
    "30 18 * * * sh ~/bin/backup.sh MY_NAME"
    Im Klartext: um 18.30 h wird dieses Script gestartet, und zwar jeden Tag (wo die drei * stehen, koennte man noch Tag des Monats, Monat und Wochentag festlegen). Mit CTRL-X verlaesst man pico, auf die Frage, ob gespeichert werden soll, antwortet man "y". Jetzt erscheint die Meldung "crontab: installing new crontab"; mit "crontab -l" kann man ueberpruefen, ob alles stimmt (und wenn es einem nicht mehr gefaellt, mit "crontab -r" wieder entfernen). Die beruehmten Scripts "daily, weekly, monthly", die UNIX routinemaessig mitten in der Nacht ausfuehrt, wenn die meisten Macs schlafen, werden uebrigens ebenfalls durch ein crontab gesteuert, allerdings das von Ruth. Wer sie zu einer christlicheren Zeit ausfuehren lassen will, kann dies mit folgendem Befehl tun: "sudo pico /private/etc/crontab". Hier koennt Ihr sehen, dass diese um 3, 4 und 5 Uhr morgens laufen, und die Uhrzeit entsprechend veraendern.

    Ich hoffe, einige haben bis hierher weitergelesen. Ich waere dankbar, wenn KEIN feedback der Art "hach was war der Mac frueher einfach, und jetzt iss alles so kompliziert" kaeme. Fuer die meisten Sachen, die ich hier beschrieben habe, gibt es natuerlich auch kommerzielle oder Shareware-Programme. Aber ein eigenes Shell-script zu schreiben und so lange zu tuefteln, bis es funktioniert, ist fuer mich aehnlich erhebend, wie an einer alten Uhr rumzubasteln und sie zum Laufen zu bringen (und wie freut man sich, wenn einem dann jemand ueber die Schulter guckt und plaerrt "Fuer vier fuffzig kannste dir ne Quarzuhr aus Taiwan kaufen"). In diesem Sinne: viel Spass beim Ausprobieren!
     
  2. >>Solche Benutzer brauchen hier nicht weiterzulesen. <<

    Oh .. ok.
     
  3. MacELCH

    MacELCH New Member

    Sehr gut, treffend formuliert.

    Die Vorteile einer echten UNIX Umgebung.

    Gruß

    MacELCH
     
  4. shooterko

    shooterko New Member

    Trotzdem danke, ich werde es mal ausprobieren

    CU
    ShooTerKo
     
  5. benz

    benz New Member

    Guten Abend
    Vielen Dank. Ich habe den ganzen Text gelesen und leider nur knapp die Hälfte verstanden. Ich denke aber, je länger ich mit diesem System arbeite, um so mehr lerne ich dazu.

    Gruss benz
     
  6. RaMa

    RaMa New Member

    ohne terminal, wär osx nur halb so gut.. :)
     
  7. frankwatch

    frankwatch Gast

    tas,

    danke für die mühe (endlich mal ein thread ohne problem- bzw. fehlermeldung),

    einige deiner ausführungen wandern in meine terminal-befehl-sammlung!
     
  8. MacELCH

    MacELCH New Member

    treffende Worte Rama !

    Um nicht zu sagen, ohne Terminal bzw. UNIX wäre ich aufgeschmissen.

    Gruß

    MacELCH
     
  9. charly68

    charly68 Gast

    vor jahren ist ja mal das terminal abgebrannt. jetzt das neue terminal c ist der hit. neu , alu look was will man mehr :)
     
  10. Gut, dass jemand damit mal anfängt, praktische Terminalbefehle zu sammeln.

    Eine deutschsprachige Entsprechung zu Darwin, zum Shellscript und der CLI (Command Line Interface) findet man auch unter

    http://server4.hostpoint.ch/~thinkmac/

    Ich glaube für Anfänger ist das wirklich sehr brauchbar, da die Seite auch Besipiele für Terminalbefehle gibt - z.b. der library und der man pages.

    Bezüglich der Sytem Refernce Manuals werden mit dem Befehl ctrl-X-ctrl-D kurz hintereinander gedrückt alle Befehlsoptionen sichtbar.

    Allerdings funzt die Volume-Überprüfung nicht im Terminal:
     
  11. gratefulmac

    gratefulmac New Member

    @Tas
    Danke für die schöne Arbeit.
    Ich drucke mir das aus.

    gr
     
  12. frankwatch

    frankwatch Gast

    @ elektronikengel

    sudo fsck_hfs /dev/disk/0s9

    funzt einwandfrei!
     
  13. tas

    tas New Member

    en jetez plus, la cour est pleine, wie es im Franzoesischen so schoen heisst, oder: ROTWERD...

    Gern geschehen, freue mich, wenn's Euch gefaellt.
     
  14. t stat /dev/disk/0s9
    Can't stat /dev/disk/0s9: No such file or directory
    [Porter:~] andryczuk%
     
  15. Okay, jetzt funzt es:

    [Porter:~] andryczuk% mount
    /dev/disk0s9 on / (local)
    devfs on /dev (local)
    fdesc on /dev (union)
    <volfs> on /.vol (read-only)
    /dev/disk0s10 on /Volumes/Archiv (local)
    /dev/disk0s11 on /Volumes/Ablage (local)
    automount -fstab [408] on /Network/Servers (automounted)
    automount -static [408] on /automount (automounted)
    [Porter:~] andryczuk% sudo fsck_hfs /dev/disk0s10
    ** /dev/rdisk0s10
    ** Checking HFS Plus volume.
    ** Checking Extents Overflow file.
    ** Checking Catalog file.
    ** Checking Catalog hierarchy.
    ** Checking volume bitmap.
    ** Checking volume information.
    ** The volume Archiv appears to be OK.
    Last login: Tue Nov 19 20:14:56 on ttyp1
    Welcome to Darwin!
    [Porter:~] andryczuk% mount
    /dev/disk0s9 on / (local)
    devfs on /dev (local)
    fdesc on /dev (union)
    <volfs> on /.vol (read-only)
    /dev/disk0s10 on /Volumes/Archiv (local)
    /dev/disk0s11 on /Volumes/Ablage (local)
    automount -fstab [408] on /Network/Servers (automounted)
    automount -static [408] on /automount (automounted)
    [Porter:~] andryczuk% sudo fsck_hfs /dev/disk0s11
    ** /dev/rdisk0s11
    ** Checking HFS Plus volume.
    ** Checking Extents Overflow file.
    ** Checking Catalog file.
    ** Checking Catalog hierarchy.
    ** Checking volume bitmap.
    ** Checking volume information.
    ** The volume Ablage appears to be OK.
    [Porter:~] andryczuk%
    [Porter:~] andryczuk% sudo fsck_hfs /dev/disk0s9
    ** /dev/rdisk0s9
    ** Root file system
    ** Checking HFS Plus volume.
    ** Checking Extents Overflow file.
    ** Checking Catalog file.
    ** Checking multi-linked files.
    ** Checking Catalog hierarchy.
    ** Checking volume bitmap.
    Volume Bit Map needs minor repair
    ** Checking volume information.
    Invalid volume free block count
    (It should be 1781736 instead of 1781735)
    ** Repairing volume.

    ***** FILE SYSTEM WAS MODIFIED *****

    ***** REBOOT NOW *****
    [Porter:~] andryczuk%
     
  16. Napfekarl

    Napfekarl Napfkuchen-Erfinder

    Kompliment!

    Die praktischsten UNIX-Features auf einen Blick verständlich erklärt, besser geht's nicht.
     
  17. tas

    tas New Member

    @ Elektronikengel
    Noch eine Kleinigkeit - war zwar nicht genau dein Problem, ist aber trotzdem wichtig: weil OS X ein Unix-System ist, sollte man auf dessen Eigenheiten bei der Vergabe von Datei- und Verzeichnisnamen sehr sorgfaeltig achten, es spricht naemlich nur Englisch. Wer also in diesen Namen Leerschlaege, deutsche Sonderzeichen wie Umlaute und ß sowie besonders das Zeichen / vermeidet, erspart sich ne Menge Aerger. M$ Office legt fuer Entourage-Dateien einen Ordner an, in dem in der deutschen Version das Wort "identität" vorkommt; mir ist es bis heute nicht gelungen, eine Moeglichkeit zu finden, in einem script auf diesen Ordner zuzugreifen.
     
  18. hakru

    hakru New Member

    ja die Umlaute - bei denen versagt dann auch die Pfadangabe im Terminalfenster per Drag&Drop durch reinziehen eines solchen Files aus einem Finderfenster ...

    hakru
     
  19. Richtig, per Drag & Drop lässt sich dabei einiges nicht mit dem Standardbefehl sudo rm -r löschen. Es gibt auch Dateien, die werden vom Terminal auf diese Weise nicht uneingeschränkt übernommen. Was war das noch Virtual PC oder Windows 98 (das Image). der Zusatz war TM und liess sich nicht löschen. Daher musste man den Zusatz im Terminal löschen.
    Gestern war ich etwa zwei Seiten auf der deutschen Mac-Hintz-Seite (siehe Link oben) und habe standardmässig alles im Terminal nachvollzogen. Die CLI ist wirklich klasse. Nur eine Kleinigkeit und Spielerei.

    mit

    open -a (plus Programm)

    also

    open -a TextEdit (beispielsweise)

    lassen sich Applikationen aus dem Terminal öffnen
     

Diese Seite empfehlen