Category: Shell Tutorial


Dateien kopieren mit cp

Oft frage ich mich, warum sich all die Benutzer das mühsame Drag and Drop überhaupt antun. Manchmal ist man schneller mit dem Finder, aber vielfach ist man bereits fertig mit kopieren, bevor man mit dem Finder überhaupt am richtigen Ort ist. Es ist ganz einfach:

Terminal starten.

andy@thinkpink:~$ cp datei1 datei2

Der regelmässige Leser erkennt sogleich, dass ich fremd gehe und nicht apfelschwein benutze. Arbeiten am Laptop finde ich einfach angenehmer. Liegt vielleicht am Betriebssystem ;)

Nun zurück zum Thema. cp steht für copy (wer hätte das gedacht) und die Syntax geht folgendermassen:

cp datei1 kopie-von-datei1
cp datei1 datei2 datei3 datein zielverzeichnis

Wenn ich einen ganzen Ordner mit Dateien und Unterverzeichnissen kopieren möchte, verwende ich:

cp -r verzeichnis1 zielverzeichnis

-r steht für rekursiv.

Wenn ich eine exakte Kopie (gleiche Berechtigungen, gleicher Timestamp, etc.) der Dateien machen will, dann verwende ich diese Option:

cp -a verzeichnis1 zielverzeichnis

Grundsätzlich gilt bei Unix Befehlen, dass der Benutzer genau weiss was sie/er macht, denn eine Sicherheitsabfrage “Möchten Sie die Datei überschreiben” gibt es nicht. Es sei denn, man verwendet den Parameter -i im Befehl. Aber der muss in der Regel explizit angegeben werden.

Noch ein paar Beispiele:

Kopiere alle PDF-Dateien in /tmp nach /home/andy/docs/

cp /tmp/*.pdf ~/docs/

Kopiere gibtsschon.txt von /tmp nach /var/tmp. Falls die Datei bereits existiert, kommt eine Abfrage, ob die Datei überschrieben werden soll:

cp -i /tmp/gibtsschon.txt /var/tmp/

Kopiere Verzeichnis ichbineinverzeichnis inklusive aller Unterverzeichnisse von /tmp nach /var/tmp/:

cp -r /tmp/ichbineinverzeichnis/ /var/tmp/

oder wenn ich Berechtigungen, Timestamps, etc. beibehalten will, so:

cp -a /tmp/ichbineinverzeichnis/ /var/tmp/

In einem weiteren Post dieses Shell Tutorials lernen wir den Inhalt des Dateisystems anzuzeigen. Dies ist auch ganz einfach:

apfelschwein:~ andy$ ls -la
total 176
drwxr-xr-x 26 andy andy 884 Jun 23 13:16 .
drwxrwxr-t 6 root admin 204 May 29 21:59 ..
-rw-r–r– 1 andy andy 3 May 20 20:36 .CFUserTextEncoding
-rw-r–r– 1 andy andy 12292 Jun 21 22:05 .DS_Store
drwx—— 3 andy andy 102 Jun 23 12:24 .Trash
-rw——- 1 andy andy 0 Jun 15 21:39 .Xauthority
-rw——- 1 andy andy 9465 Jun 23 12:24 .bash_history
-rw——- 1 andy andy 16 Jun 9 14:20 .esd_auth
-rw-r–r– 1 andy andy 28946 Jun 15 21:36 .fonts.cache-1
drwxr-xr-x 34 andy andy 1156 Jun 15 21:39 .gimp-2.2
drwx—— 2 andy andy 68 Jun 8 21:47 .macports
-rw-r–r– 1 andy andy 148 Jun 8 21:20 .profile
-rw——- 1 andy andy 1361 Jun 15 21:38 .recently-used
drwx—— 3 andy andy 102 May 21 06:46 .ssh
drwx—— 3 andy andy 102 May 29 23:10 .thumbnails
-rw——- 1 andy andy 4751 Jun 23 13:16 .viminfo
-rw-r–r– 1 andy andy 17 May 29 22:49 .xinitrc.old
drwxr-xr-x 7 andy andy 238 Jun 9 13:51 .xmms
drwx—— 9 andy andy 306 Jun 23 12:07 Desktop
drwx—— 6 andy andy 204 Jun 2 18:30 Documents
drwx—— 33 andy andy 1122 Jun 16 00:38 Library
drwx—— 3 andy andy 102 May 19 19:48 Movies
drwx—— 6 andy andy 204 May 24 21:26 Music
drwx—— 6 andy andy 204 May 25 19:28 Pictures
drwxr-xr-x 5 andy andy 170 May 24 21:25 Public
drwxr-xr-x 6 andy andy 204 Jun 10 18:57 Sites

So sieht der Inhalt meines Home-Directories aus.

Und so das Verzeichnis /Users:

apfelschwein:~ andy$ ls -la /Users/
total 16
drwxrwxr-t 6 root admin 204 May 29 21:59 .
drwxrwxr-t 31 root admin 1156 Jun 23 08:31 ..
-rw-rw-r– 1 andy admin 6148 May 29 21:59 .DS_Store
-rw-r–r– 1 root wheel 0 Jan 13 2006 .localized
drwxrwxrwt 5 root wheel 170 May 20 01:38 Shared
drwxr-xr-x 26 andy andy 884 Jun 23 14:20 andy

Das war eine kurze Lektion. In der nächsten lernen wir, wie man Dateien kopiert.

Wo bin ich bloss?

Manche Systeme zeigen den Pfad, in dem man sich befindet nicht an. Dies ist dann mühsam, wenn man nicht mehr genau weiss, wo man sich befindet.

Dafür gibt es selbstverständlich einen Befehl:

apfelschwein:~ andy$ pwd

pwd steht für “print working directory” und macht genau das, was der Name sagt:

apfelschwein:~ andy$ pwd
/Users/andy

Im nächsten Post zeige ich, wie man den Inhalt des Dateisystems anzeigen kann.

Die Verzeichnis-Struktur von Mac OS X sieht folgendermassen aus:

/
|– Applications
|– Desktop DB
|– Desktop DF
|– Developer
|– Library
|– Network
|– System
|– User Guides And Information -> /Library/Documentation/User Guides and Information.localized
|– Users
|– Volumes
|– automount
|– bin
|– cores
|– dev
|– etc -> private/etc
|– mach -> /mach.sym
|– mach.sym
|– mach_kernel
|– opt
|– private
|– sbin
|– tmp -> private/tmp
|– usr
`– var -> private/var

Obwohl Darwin ein Unix-basierendes Betriebssystem ist, unterscheidet es sich trotzdem ein bisschen im Aufbau. Die klassischen Verzeichnisse, wie bin, dev, etc, opt, sbin, usr, tmp und var sind aber dennoch vorhanden.

Im Verzeichnis /bin befinden sich Binaries, also Programme. Dabei handelt es sich meistens um System-Befehle, die immer gebraucht werden.

Das /dev Verzeichnis beinhaltet sämtliche Geräte, die vom System angesprochen werden können. Es handelt sich zum Beispiel um die Festplatte, die Netzwerkkarte, aber auch um virtuelle Geräte, wie zum Beispiel die Konsolen. /dev/null liefert beispielsweise immer einen Null-String retour, während /dev/random (mehr oder weniger) Zufallswerte zurückgibt und /dev/zero liefert lauter Nullen (0)

In /etc befinden sich Konfigurationsdateien zu Programmen oder zum System. Wenn ein Programm umkonfiguriert werden soll, ist dieses Verzeichnis in der Regel die erste Anlaufstation.

/opt ist für optionales vorgesehen. In der Regel ist der Ordner leer.

System-Programme, die root-Rechte benötigen, befinden sich in /sbin.

Temporäre Daten finden sich meistens in /tmp wieder. Einige Linux-Distributionen löschen den Inhalt bei einem Neustart des Systems jedes Mal, während Red Hat darauf verzichtet. Das heisst, hier wichtige Daten zu speichern, wäre ziemlich dumm.

/usr ist eine Abkürzung für Unix System Resources. Hier werden sämtliche, zusätzlichen Programme installiert. Die Binaries befinden sich meist in /usr/bin, /usr/sbin oder /usr/local/bin respektive /usr/local/sbin.

Im Verzeichnis /var werden Daten gespeichert, die variabel sind (darum /var), also sich ständig verändern (können).

Normalerweise werden Unix-Systeme nicht nur mit einer Partition betrieben. Sondern man hat vielleicht eine Partition für /usr, /var, eine für /home (die es bei Mac OS X nicht hat) und vielleicht sogar noch für /tmp. Deshalb macht es auch Sinn, dass die wichtigsten Befehle in /bin respektive /sbin sind. Mal angenommen die Partition, die /usr/ enthält, wäre defekt, dann ist man dementsprechend ziemlich am Arsch, wenn das System nicht mehr zu bedienen wäre. Ausserdem muss der mount Befehl (um eine Partition in die Verzeichnisstruktur zu hängen, respektive zu laden) logischerweise auf der / Disk sein. Das wäre sonst ja wie, wenn man den Schlüssel im Auto vergessen hätte, die Türen alle geschlossen sind und man nicht mehr rein käme.

Kommen wir zu den Mac OS X spezifischen Verzeichnisse:

Applications:

  • Hier befinden sich sämtliche Mac OS X Programme, wie Safari, Gimp, das Terminal, usw.

Desktop DB

  • Irgendeine Datei. Wenn ich sie in vi öffne, sehe ich massenhaft Einträge von Microsoft Applikationen.

Desktop DF

  • Auch irgendeine Datei, bei der ich aber nichts als Hieroglyphen sehe.

Developer

  • In diesem Verzeichnis wurden die Entwickler-Tools installiert, die ich mal wegen XMMS installiert habe.

Library

  • Hier werden benötige Dinge von Programmen gespeichert. Druckertreiber befinden sich auch irgendwo in dieser Struktur.

Network

  • Hier werden Netzwerk-Dienste von Servern gelistet

System

  • Auch irgendwelche Libraries, die von Systemprogrammen benötigt werden.

User Guides And Information -> /Library/Documentation/User Guides and Information.localized

  • Dokumentationen und Hilfen

Users

  • Entspricht dem /home bei Unix. Hier sind deine Dokumente und sonstige Daten abgelegt.

Volumes

  • Hier befinden sich gemountete Filesysteme. Zum Beispiel Netzlaufwerke oder USB Sticks, usw.

automount

  • Hier ist bei mir nicht allzu viel drin. Aber irgendwie sagt mir der Name, dass es etwas mit automount zu tun hat :)

Ob das auch wirklich alles stimmt, was ich über die Mac OS X spezifischen Verzeichnisse geschrieben habe, kann ich nicht mit Sicherheit sagen. Im grossen Ganzen interessiert das ja auch nicht besonders :). Die Installation von einem Mac Programm beschränkt sich ja nur auf das Drag and Drop von dem Programm in den Applications Ordner…

Wir haben das Terminal gestartet und legen sogleich los! Mit dem Befehl cd und einem Argument (ein Argument ist ein Übergabewert an einen Befehl; hier das Verzeichnis) können wir im Filesystem herumflitzen. Ihr könnt auch nichts kaputt machen, also keine Angst.

apfelschwein:~ andy$ cd /

cd steht für “change directory” und mit obigem Befehl bist Du gerade ins oberste Verzeichnis gehüpft. Man nennt das / Verzeichnis das root-Verzeichnis. Es ist die Wurzel aller Elemente, die darin gespeichert sind. Das Filesystem ist hierarchisch aufgebaut und sieht auf einem Debian GNU/Linux so aus (sorry, ich schreibe das nicht auf dem Mac):

/
|– bin
|– boot
|– cdrom -> media/cdrom
|– dev
|– etc
|– home
|– initrd
|– lib
|– lost+found
|– media
|– mnt
|– opt
|– proc
|– root
|– sbin
|– srv
|– sys
|– tmp
|– usr
|– var
|– vmlinuz -> boot/vmlinuz-2.6.19.2
`– vmlinuz.old -> boot/vmlinuz-2.6.19

Wir sind also ganz zuoberst in diesem Baum. Beim Mac sehen wir zum Beispiel den Ordner Applications, Library, Network, System, Users, Volumes und noch einige andere, die man bei einem Debian System nicht sieht.

Okay, wir wechseln jetzt in das Verzeichnis /tmp. Dies geschieht so:

apfelschwein:/ andy$ cd /tmp

Und schon sind wir in diesem Verzeichnis. Einfach, nicht? Okay, gehen wir wieder zurück. Jetzt kann man entweder den absoluten Pfad eingeben, das wäre / oder den relativen. Hier “..”

Mit

apfelschwein:/tmp andy$ cd ..

gehen wir ein Verzeichnis hinauf. Die zwei Punkte “..” beziehen sich auf das oben liegende Verzeichnis und das Verzeichnis, in dem man drin ist, wird durch einen Punkt “.” referenziert. Vielleicht etwas kompliziert erklärt, aber probieren geht ja bekanntlich über studieren. Wenn ich jetzt

apfelschwein:/ andy$ cd .

eingebe, bin ich immer noch am gleichen Ort, wie vor dem Befehl.

Wenn man zurück ins Home-Verzeichnis möchte, kann man einfach

apfelschwein:/ andy$ cd

(ohne Argument) eingeben und schwupps sind wir wieder dort, wo wir angefangen haben. In einem nächsten Post erkläre ich die Verzeichnis-Struktur von einem Unix-System, diesmal aber geschrieben auf apfelschwein.

Mac OS X Terminal erklärt

Aus dem Auftakt-Post wissen wir bereits, wo das Terminal zu finden ist. Und da mir gerade die Existenz von Mac’s Spotlight wieder in den Sinn gekommen ist, kann auch auf die Apfel-Taste und Space gedrückt und dort  Terminal eingegeben werden.

Gesagt, getan. Standardmässig ist das Terminal bei Mac OS X weiss. Und da dies eine Farbe ist, die ich viel zu grell finde, ändere ich zuallererst die Hintergrundfarbe auf Schwarz und die Vordergrundfarbe (sprich Text) auf ein Hellgrau.

Nun gehts los!

Zu sehen ist jetzt:

Last login: Sat Jun 16 00:10:51 on ttyp1
Welcome to Darwin!
apfelschwein:~ andy$

Die erste Zeile gibt logischerweise an, wann man zuletzt eingeloggt ist. Die zweite Zeile ist die “Message of the Day”, eine Begrüssungsnachricht. Und die dritte Zeile ist eine Befehlzeile, in der man den Befehl eintippen kann. In dieser dritten Zeile sieht man den Hostname (hier: apfelschwein), gefolgt von einem Doppelpunkt und dem Verzeichnis, in dem man sich befindet. Das Home-Verzeichnis wird mit einer Tilde (~) abgekürzt, sonst steht der volle Pfad dort. Danach folgt der Benutzername, gefolgt von einem $-Zeichen. Das $-Zeichen steht für einen normalen Benutzer, ein #-Zeichen für root, dem Administrator Account.

Im nächsten Post lernt ihr, wie man in andere Verzeichnisse wechselt.

Meistens arbeite ich ja mit einer Shell und das kann man natürlich auch mit Mac OS X. Man muss lediglich das Terminal starten (zu finden unter Applications => Utilities) und schon hat man Zugriff in die wunderschöne Welt der Unix-Befehle.

Jemand der sich damit aber überhaupt nicht auskennt, weiss eine schwarze resp. weisse Box mit Buchstaben gar nicht zu schätzen. Aber sobald man einige Befehle kennt und damit auch etwas übt, dann will man nie mehr darauf verzichten.

Während ich mich mühsamst durch Fenster des Finders klicken müsste, um einige Dateien zu löschen, hätte ich diesen Task bereits in wenigen Sekunden mit einem Befehl erledigt.

Wer die Basics lernen möchte, findet sie in den nächsten Tagen in diesem Blog.

Powered by WordPress. Theme: Motion by 85ideas.