|
|
(57 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) |
Zeile 1: |
Zeile 1: |
| == Was ist eine Datei? ==
| | '''Datensicherung und -archivierung''' - Beschreibung |
| === Dateien unter Windows ===
| |
| * ''"Komplex von Informationen, die inhaltlich zusammengehörend auf einem Massespeicher gespeichert sind."''
| |
| * Hiernach kann man sich einen solchen Datenbehälter also als einen Aktenordner oder ein Schulheft vorstellen.
| |
|
| |
|
| === Dateien unter Unix/Linux: Alles ist eine Datei === | | == Beschreibung == |
| * Unter Unix ist der Begriff der Datei wesentlich weiter gefasst.
| | === Motivation === |
| * Nahezu alles, selbst Hardware kann als Datei betrachtet werden.
| | ; Motivation und Zielsetzung |
| * Darüber hinaus ist eine Datei nicht einmal unbedingt an Speicherung auf einen Massespeicher wie z.B.
| | Die Aufgabe von IT-Systemen ist die Verarbeitung und Verwaltung digitaler Daten, die dazu vorübergehend oder dauerhaft auf Datenträgern gespeichert werden |
| * eine Festplatte gebunden, noch muss sie in der Lage sein, Daten speichern zu können.
| | * Die Sicherung dieser Daten soll die Rückkehr in einen vorherigen Zustand gewährleisten |
| * Unter Unix kann man sich eine Datei eher vorstellen als ''eine benannte Pipeline, an deren einem Ende sich die Daten befinden,am anderen Ende der Benutzer, der auf diese Daten zugreifen will''
| | * Die regelmäßige Sicherung des Datenbestandes zählt zu den wichtigsten Aufgaben eines Systemverwalters |
| * Somit ist es möglich, unter Angabe eines (Datei-) Namens auf Daten zuzugreifen, ohne sich um die physikalische Rehspräsentation kümmern zu müssen. | |
| * Das Dateikonzept bietet somit eine einheitliche Schnittstelle, über die Daten verschiedenster Art und Herkunft abgerufen werden können. | |
|
| |
|
| === Dateiname ===
| | Daten sind verschiedenen Einflüssen ausgesetzt |
| * Ein Dateiname identifiziert eine [http://de.wikipedia.org/wiki/Datei Datei] auf einem [http://de.wikipedia.org/wiki/Datenspeicher Datenträger] oder bei einer [http://de.wikipedia.org/wiki/Datenübertragung Datenübertragung].
| | * Dem Schichtenmodell entsprechend können auf jeder Ebene Anomalien auftreten |
| * Meist wird eine Datei zusätzlich durch einen Verzeichnisnamen charakterisiert, sodass ein vollständiger [http://de.wikipedia.org/wiki/Pfadname Pfadname] entsteht.
| | * Defekte an der Hardware (Datenträger, Controller) |
| * Erst diese Kombination zu einem vollständigen Pfadnamen ist in der Regel eindeutig.
| |
| | |
| ==== Eigenschaften ====
| |
| * Ein Dateiname kann – abhängig vom jeweiligen [http://de.wikipedia.org/wiki/Betriebssystem Betriebssystem] – aus mehreren Teilen bestehen.
| |
| * Die einzelnen Teile sind durch bestimmte Zeichen, die in der Regel nicht Teil des Dateinamens sein können, getrennt; die [http://de.wikipedia.org/wiki/Liste_von_Dateinamenserweiterungen Liste von Dateinamenserweiterungen] verschafft einen Überblick.
| |
| * Einige Betriebssysteme machen die Behandlung der Dateien von der jeweiligen [http://de.wikipedia.org/wiki/Dateinamenserweiterung Dateinamenserweiterung] abhängig, andere arbeiten ohne diese Konvention und erkennen den Dateityp anhand des Inhalts (beispielsweise anhand einer sogenannten [http://de.wikipedia.org/wiki/Magische_Zahl_%28Informatik%29 magischen Zahl]).
| |
| * Auch auf diesen Systemen werden aber oft Dateien mit solchen Dateiendungen versehen, da es den Datenaustausch vereinfacht.
| |
| * Die maximale Länge eines Dateinamens wird sowohl durch das Betriebssystem als auch durch das [http://de.wikipedia.org/wiki/Dateisystem Dateisystem] des Datenträgers begrenzt.
| |
| * So können etwa auf einer CD-ROM bei Verwendung des [http://de.wikipedia.org/wiki/Joliet_%28Dateisystem%29 Joliet-Dateisystems] maximal 64 Zeichen genutzt werden.
| |
| * Eine indirekte Begrenzung kann zudem durch eine maximale Länge von Pfadnamen im Betriebssystem entstehen.
| |
| * Ein Unterschied zwischen MS-Windows und Linux/Unix besteht darin, dass Windows bei Dateinamen nicht zwischen Groß- und Kleinschreibung unterscheidet, während Unix dies tut (zum Beispiel bezeichnen dort ''Haustuer.txt'' und ''hausTuer.txt'' unterschiedliche Dateien).
| |
| | |
| ==== Dateisysteme ====
| |
| {| class="wikitable sortable"
| |
| |-
| |
| ! | Dateisystem
| |
| ! | typische Anwendung
| |
| ! | max. Anzahl Zeichen in einem Dateinamen
| |
| ! | Zeichensatz
| |
| |-
| |
| | | FAT ohne VFAT ([http://de.wikipedia.org/wiki/MS-DOS DOS])
| |
| | | Festplatten, Speicherkarten (Foto)
| |
| | | [http://de.wikipedia.org/wiki/8.3 8+3]
| |
| | | OEM (meist [http://de.wikipedia.org/wiki/Codepage_437 Codepage 437])
| |
| |-
| |
| | | [http://de.wikipedia.org/wiki/ISO_9660 ISO 9660] Level 2
| |
| | | CD, DVD
| |
| | | 31
| |
| | | [http://de.wikipedia.org/wiki/American_Standard_Code_for_Information_Interchange ASCII]
| |
| |-
| |
| | | [http://de.wikipedia.org/wiki/Joliet_%28Dateisystem%29 Joliet]
| |
| | | CD, DVD
| |
| | | 64
| |
| | | Unicode
| |
| |-
| |
| | | [http://de.wikipedia.org/wiki/ISO_9660 ISO 9660]:1999
| |
| | | CD, DVD
| |
| | | 179 - 221 je nach sonstigen Attributen
| |
| | | ASCII/unspezifiziert
| |
| |-
| |
| | | [http://de.wikipedia.org/wiki/File_Allocation_Table FAT] mit [http://de.wikipedia.org/wiki/File_Allocation_Table#VFAT VFAT] ([http://de.wikipedia.org/wiki/Microsoft_Windows Windows])
| |
| | | Festplatten, USB-Sticks
| |
| | | 255
| |
| | | [http://de.wikipedia.org/wiki/Unicode Unicode]
| |
| |-
| |
| | | [http://de.wikipedia.org/wiki/Ext3 ext3]
| |
| | | Festplatten
| |
| | | 255 (1)
| |
| | | Unicode (2)
| |
| |-
| |
| | | [http://de.wikipedia.org/wiki/HFS_plus HFS plus]
| |
| | | Festplatten
| |
| | | 255
| |
| | | Unicode (UTF-16)
| |
| |-
| |
| | | [http://de.wikipedia.org/wiki/Universal_Disk_Format UDF]
| |
| | | CD, DVD
| |
| | | 255
| |
| | | Unicode
| |
| |-
| |
| | | [http://de.wikipedia.org/wiki/NTFS NTFS]
| |
| | | Festplatten
| |
| | | 256 (3)
| |
| | | Unicode (UTF-16) (4)
| |
| |-
| |
| | | [http://de.wikipedia.org/wiki/ReFS ReFS]
| |
| | | Festplatten
| |
| | | 32000
| |
| | | Unicode
| |
| |-
| |
| |}
| |
| (1) Bei Verwendung von [http://de.wikipedia.org/wiki/UTF-8 UTF-8]-Codierung und Benutzung von Nicht-ASCII-Zeichen stehen zwar 255 ''Byte'', aber weniger als 255 ''Zeichen'' zur Verfügung.
| |
| | |
| (2) Die Codierung ist nicht genormt; als Voreinstellung wird meist UTF-8 verwendet.
| |
| | |
| (3) Bei Verwendung langer Unicode-Pfade sind lediglich 255 Zeichen möglich
| |
| | |
| ==== Groß-/Kleinschreibung ====
| |
| * Im Unterschied zu Windows wird bei Linux zwischen Groß- und Kleinschreibung unterschieden.
| |
| * Daher ist die Datei test nicht identisch mit der Datei Test.
| |
| * Was am Anfang bei Umsteigern womöglich zur Verwirrung beiträgt, erweist sich nach einer Einarbeitungszeit häufig als eine praktische Eigenschaft.
| |
| * Der folgende Einzeiler wandelt alle Dateinamen im aktuellen Verzeichnis in Kleinbuchstaben um:
| |
| '''for i in * ; do mv -i $i $(echo $i | tr [A-ZÄÖÜ] [a-zäöü]) ; done'''
| |
| * Mit dem ß hat der Einzeiler noch Probleme. (Warum? Es gibt kein großes ß.)
| |
| | |
| ==== Länge von Dateinamen ====
| |
| Ein Dateiname darf 255 Zeichen lang sein.
| |
| * Damit sollte es jedem gelingen, seine Dokumente aussagekräftig zu benennen.
| |
| * Wie die Erfahrung zeigt, sind Dateinamen in der Praxis selten auch nur annähernd so lang.
| |
| | |
| ==== Dateiendungen ====
| |
| Eine Datei muss unter Linux keine bestimmte Endung haben, wie dies bei Windows der Fall ist (beispiel.exe oder beispiel.txt).
| |
| * Auch dies verwirrt am Anfang den Umsteiger, doch gewöhnt man sich auch daran.
| |
| | |
| Die meisten Dateien haben aber eine Endung, nicht ungewöhnlich sind auch mehrere - durch Punkte getrennte - Endungen (beispiel.tar.bz2).[http://de.wikipedia.org/wiki/Unix Unix]- und Unix-ähnliche Betriebssysteme wie zum Beispiel [http://de.wikipedia.org/wiki/Solaris_%28Betriebssystem%29 Solaris] oder [http://de.wikipedia.org/wiki/Linux Linux] betrachten Dateinamen als Ganzes.
| |
| | |
| Eine Datei kann mehrere Namen haben und sich in mehreren Verzeichnissen befinden („hard links“ oder „bind mounts“).
| |
| * Alle Zeichen außer dem [http://de.wikipedia.org/wiki/Schrägstrich Schrägstrich] "/" und dem [http://de.wikipedia.org/wiki/Nullzeichen Nullzeichen] sind erlaubt.
| |
| * Frühe Versionen hatten 1 bis 14 Zeichen lange Dateinamen.
| |
| * Die [http://de.wikipedia.org/wiki/Berkeley_Software_Distribution BSD]-Varianten führten bis zu 255 Zeichen lange Namen ein.
| |
| | |
| Ein relativer Dateipfad kann aus mehreren Segmenten bestehen und beginnt mit einem Segment.
| |
| * Jedes Segment unterliegt den Regeln des Dateinamens, kann also 14 bzw. 255 Zeichen lang sein.
| |
| * Die Segmente der Dateipfade werden durch das Zeichen "/" getrennt.
| |
| | |
| Das letzte Segment kennzeichnet die eigentliche Datei.
| |
| * Die vorhergehenden Segmente sind entweder Verzeichnisnamen oder symbolische Verweise (englisch „symbolic links“) auf Verzeichnisnamen.
| |
| * Ein relativer Dateipfad geht vom aktuellen Arbeitsverzeichnis aus, das jeder [http://de.wikipedia.org/wiki/Prozess_%28Informatik%29 Prozess] individuell setzen kann.
| |
| | |
| Ein absoluter Dateipfad beginnt hingegen bereits mit "/" und ist unabhängig vom aktuellen Arbeitsverzeichnis.
| |
| * Er geht vom Wurzelverzeichnis aus. Über das Wurzelverzeichnis sind alle Dateien eines Systems erreichbar.
| |
| | |
| Beim Zugriff wird zwischen Groß- und Kleinschreibung unterschieden.
| |
| | |
| ===== Beispiele =====
| |
| /home/user/Dokumente/brief.txt
| |
| /usr/bin/texteditor
| |
| | |
| Der Dateiname '.' (Punkt) bezeichnet das aktuelle Arbeitsverzeichnis.
| |
| * Der Name '..' verweist auf das übergeordnete Verzeichnis.
| |
| | |
| Auch das Leerzeichen, der Zeilentrenner oder die sogenannten [http://de.wikipedia.org/wiki/Wildcard_%28Informatik%29 Wildcards] '*' und '?' können Teil eines Pfadnamens sein.
| |
| * Solche Zeichen bringen allerdings manchmal später Probleme mit sich, da zum Beispiel schlecht programmierte [http://de.wikipedia.org/wiki/Skriptsprache Skripte] damit nicht umgehen können.
| |
| | |
| Weiterhin kann es Probleme mit Dateinamen geben, die Zeichen enthalten, die im aktuell verwendeten Zeichensatz eines Programms nicht vorkommen (zum Beispiel japanische Zeichen auf einem amerikanisch eingerichteten System).
| |
| | |
| Die nicht darstellbaren Zeichen werden dann oft als Fragezeichen oder kleine Kästchen angezeigt, was den Zugriff auf die Daten sehr schwierig macht.
| |
| | |
| Diese Dateien können dann oft nur bearbeitet werden, nachdem sie auf einer niedrigen Dateisystem-Abstraktionsebene umbenannt wurden (zum Beispiel durch Angabe der sogenannten inode statt des Dateinamens mit <tt>ls -i</tt> und <tt>find . -inum […] -exec mv {} […] \;</tt>).
| |
| | |
| Ein Unix-System verwendet keine speziellen Erweiterungen, wie .EXE oder .CMD.
| |
| * Es hat sich allerdings eingebürgert, Dateien eines bestimmten Types, wie in anderen Betriebssystemen, auch mit einem Punkt und einer entsprechenden Erweiterung zu versehen, um die Übersichtlichkeit zu erhöhen.
| |
| | |
| Beispielsweise wird die Endung ''.c'' für C-Quellprogramme verwendet.
| |
| * Ausführbare Dateien, also Programme und Skripte, erhalten keine Endung.
| |
| * Dateitypen können ansonsten mit dem einfachen Programm "file", unabhängig von einer eventuell vorhandenen Erweiterung ermittelt werden.
| |
| | |
| Dateien oder Verzeichnisse, deren Namen mit einem Punkt beginnen, werden üblicherweise als „versteckte“ Dateien behandelt und nur angezeigt, wenn der Benutzer dies explizit angibt (zum Beispiel mit <tt>ls -a</tt>). Ähnliches gilt für Verzeichnispfade.
| |
| | |
| ===== Übersicht über die wichtigsten Dateiendungen =====
| |
| {| class="wikitable sortable"
| |
| |-
| |
| | | <tt>'''Zip.gz'''</tt>
| |
| | | Mit dem ZIP Algorithmus komprimierte Datei
| |
| |-
| |
| | | <tt>'''.so'''</tt>
| |
| | | Shared Object - Entspricht in der Bedeutung in etwa einer DLL Datei unter Windows
| |
| |-
| |
| | | <tt>'''.h'''</tt>
| |
| | | Header Datei - Teil eines C Quellcodes
| |
| |-
| |
| | | <tt>'''.c.cpp'''</tt>
| |
| | | C bzw.
| |
| * C++ Quelltext
| |
| |-
| |
| | | <tt>'''.o'''</tt>
| |
| | | Object File - compilierter C (C++) Quellcode
| |
| |-
| |
| | | <tt>'''.html'''</tt>
| |
| | | Hypertext - Dieser Text ist in Hypertext geschrieben
| |
| |-
| |
| | | <tt>'''.db'''</tt>
| |
| | | Datenbankdatei im DBASE Format
| |
| |-
| |
| | | <tt>'''.sh'''</tt>
| |
| | | Shellscript (selten verwandtes Suffix), entspricht in etwa einer DOS .BAT Datei
| |
| |-
| |
| | | <tt>'''.a'''</tt>
| |
| | | siehe .so
| |
| |-
| |
| | | <tt>'''.gif.jpg.tiff.png.xbm.xpm'''</tt>
| |
| | | Verschiedene Bildformate
| |
| |-
| |
| | | <tt>'''.au.wav.mp3.mod'''</tt>
| |
| | | Verschiedene Audioformate
| |
| |-
| |
| | | <tt>'''.rpm.tar.tgz.deb'''</tt>
| |
| | | Verschiedene Packetformate.
| |
| * Packete werden verwendet, um Software zu installieren
| |
| |-
| |
| | | <tt>'''.conf'''</tt>
| |
| | | Konfigurationsdatei (selten verwendetes Suffix)
| |
| |-
| |
| | | <tt>'''.ps'''</tt>
| |
| | | Postscript - Eine Seitenbeschreibungssprache der Firma Adobe
| |
| |-
| |
| | | <tt>'''.tex'''</tt>
| |
| | | LaTeX Datei, LaTeX ist für UNIX, was Word für Windows ist
| |
| |-
| |
| | | <tt>'''.dvi'''</tt>
| |
| | | Device Independent - Übersetzte .tex Datei
| |
| | |
| |-
| |
| |}
| |
| ==== Dateinamen korrigieren (convmv) ====
| |
| Mit dem Programm <tt>convmv</tt> kann der Zeichensatz von Dateinamen konvertiert werden.
| |
| | |
| Wenn manche Dateinamen, oft solche die Umlaute enthalten, falsch dargestellt werden, dann liegt das meistens daran das sie den falschen Zeichensatz haben.
| |
| * Das kann z.B.
| |
| * passieren, wenn Dateien von Windows-Systemen kopiert werden.
| |
| * Mit convmv kann der Zeichensatz dieser Dateien korrigiert werden.
| |
| | |
| ====== Benutzung von convmv ======
| |
| ''']'''</span>
| |
| | |
| Mit dem Parameter -f gibt man den aktuellen (falschen) Zeichensatz der Dateinamen an, -t gibt den neuen Zeichensatz an.
| |
| * Mit -r schließt convmv auch Unterverzeichnisse mit ein.
| |
| | |
| Standardmäßig gibt convmv nur aus, welche Änderungen es vornehmen würde, die Änderungen werden nicht direkt ausgeführt.
| |
| | |
| -r</span> .
| |
| | |
| Ist man mit den Änderungen zufrieden, fügt man einfach noch den Parameter –notest an, und convmv führt die Änderungen aus.
| |
| | |
| Praktischerweise werden Dateinamen, die bereits den neuen Zeichensatz verwenden von convmv ausgelassen.
| |
| | |
| --notest</span> .
| |
| | |
| Es gibt auch noch ein paar andere Parameter und Optionen, diese sind in der Hilfeseite von convmv erklärt (man 1 convmv).
| |
| | |
| ==== fslint ====
| |
| Utility to Fix Problems with Filesystems' Data
| |
| | |
| FSlint is a toolkit to clean filesystem lint.
| |
| * It includes a GTK+ GUI as well as a command line interface and can be used to reclaim disk space.
| |
| * It has an interface for uninstalling packages, and it can find things like:* Duplicate files
| |
| * Problematic filenames
| |
| * Temporary files
| |
| * Bad symlinks
| |
| * Empty directories
| |
| * Nonstripped binaries
| |
| | |
| === Dateieigenschaften ===
| |
| Wenn sie sich ein Verzeichnis mit dem Kommando "<tt>'''ls·-l'''</tt>" ansehen, erhalten wir eine solche Liste:
| |
| | |
| total 1093
| |
| -rw-r--r-- 1 root root 116547 May 25 1997 System.map
| |
| drwxr-xr-x 2 root root 1024 Sep 23 1996 bin/
| |
| drwxr-xr-x 2 root root 1024 May 25 1997 boot/
| |
| drwxr-xr-x 2 root root 1024 Oct 27 1996 cdrom/
| |
| drwxr-xr-x 3 root root 20480 May 4 15:28 dev/
| |
| drwxr-xr-x 7 root root 2048 May 4 16:05 etc/
| |
| drwxr-xr-x 5 root root 1024 Dec 7 1997 home/
| |
| drwxr-xr-x 3 root root 1024 Sep 23 1996 lib/
| |
| drwxr-xr-x 5 root root 1024 Sep 23 1996 local/
| |
| drwxr-xr-x 2 root root 12288 Sep 23 1996 lost+found/
| |
| drwxr-xr-x 2 root root 1024 Sep 23 1996 mnt/
| |
| dr-xr-xr-x 5 root root 0 May 4 1999 proc/
| |
| drwx------ 5 root root 1024 Sep 21 1997 root/
| |
| drwxr-xr-x 4 root root 2048 Sep 23 1996 sbin/
| |
| drwxrwxrwx 4 root root 1024 Apr 6 09:18 tmp/
| |
| drwxr-xr-x 18 root root 1024 Apr 25 1997 usr/
| |
| drwxr-xr-x 14 root root 1024 Apr 25 1997 var/
| |
| | |
| Betrachten Sie diese Ausgabe von rechts nach links.* '''Dateiname''', jede Zeile ist der Eintrag für eine Datei.
| |
| * '''Datum und Uhrzeit''' der letzten Modifikation der Datei
| |
| * '''Größe''' der Datei in Bytes (1 Byte entspricht einem Zeichen, also z.B.
| |
| * einem Buchstaben
| |
| * '''Gruppe''' der Datei
| |
| * '''Besitzer''' der Datei
| |
| * '''Zugriffsrechte'''
| |
| * '''Dateityp''' (erstes Zeichen)
| |
| | |
| {| class="wikitable sortable"
| |
| |-
| |
| | | <tt>'''-'''</tt>
| |
| | | Normale Datei
| |
| |-
| |
| | | <tt>'''d'''</tt>
| |
| | | Verzeichnis
| |
| |-
| |
| | | <tt>'''c '''</tt>
| |
| | | Character (Zeichen)- Gerätedatei
| |
| |-
| |
| | | <tt>'''b'''</tt>
| |
| | | Block – Gerätedatei
| |
| |-
| |
| | | <tt>'''l'''</tt>
| |
| | | Softlink
| |
| |-
| |
| | | <tt>'''p'''</tt>
| |
| | | Pipe
| |
| |-
| |
| | | '''s'''
| |
| | | Socket
| |
| | |
| |-
| |
| |}
| |
| ==== Dateieistatus anzeigen ([http://wiki.ubuntuusers.de/stat?action=backlinks stat]) ====
| |
| Mit dem Befehl <tt>stat</tt> (von '''stat'''us) lassen sich Zugriffs- und Änderungs-Zeitstempel von Dateien und Ordnern anzeigen.
| |
| * Weiterhin werden Informationen zu [http://wiki.ubuntuusers.de/Rechte Rechten], zu Besitzer und Gruppe und zum Dateityp ausgegeben.
| |
| * Durch [http://wiki.ubuntuusers.de/stat#Formatangaben Formatangaben] ist die Ausgabe gemäß den eigenen Bedürfnissen darstellbar.
| |
| | |
| ===== Ausgabe von stat =====
| |
| Bei Aufruf von stat ohne Optionen
| |
| | |
| stat datei.txt
| |
| | |
| wird folgendes ausgegeben:
| |
| | |
| Datei: »datei.txt“
| |
| Größe: 6 Blöcke: 8 EA Block: 4096 Normale Datei
| |
| Gerät: 801h/2049d Inode: 4257439 Verknüpfungen: 1
| |
| Zugriff: (0664/-rw-rw-r--) Uid: ( 1000/ubuntuuser) Gid: ( 1000/ubuntuuser)
| |
| Zugriff : 2012-10-10 13:20:00.000000000 +0200
| |
| Modifiziert: 2012-10-10 09:13:29.000000000 +0200
| |
| Geändert : 2012-10-10 13:20:00.484609642 +0200
| |
| Geburt : -
| |
| | |
| ====== Allgemeine Dateiinformationen ======
| |
| Datei: »datei.txt“
| |
| Größe: 6 Blöcke: 8 EA Block: 4096 Normale Datei
| |
| (…)
| |
| | |
| Ausgegeben wird: * der Dateiname
| |
| * die Dateigröße (in Bytes)
| |
| * die Anzahl der auf dem Dateisystem reservierten Blöcke (512 Bytes pro Block)
| |
| * die typische Größe eines Blocks, der bei der Eingabe und Ausgabe mit einem mal vom Dateisystem gelesen bzw.
| |
| * geschrieben wird (in Bytes)
| |
| * der Dateityp
| |
| | |
| In dem Beispiel ist die Datei <tt>datei.txt</tt> 6 Bytes groß, belegt aber 8*512 = 4096 Bytes an Festplattenplatz, da dies dies die minimale Blockgröße des aktuellen Dateisystems ist.
| |
| | |
| ====== Zugriffsrechte ======
| |
| (…)
| |
| Zugriff: (0664/-rw-rw-r--) Uid: ( 1000/ubuntuuser) Gid: ( 1000/ubuntuuser)
| |
| (…)
| |
| | |
| Es werden die Zugriffsrechte in [http://wiki.ubuntuusers.de/Rechte#Oktale-Darstellung oktaler] und in [http://wiki.ubuntuusers.de/Rechte#Rechte-in-symbolischer-Darstellung menschenlesbarer Form] angezeigt.
| |
| * ID und Name des Besitzers sind angegeben, ebenso wie ID und Name der Gruppe.
| |
| | |
| ====== Bedeutung der Zeitstempel ======
| |
| (…)
| |
| Zugriff : 2012-10-10 13:20:00.000000000 +0200
| |
| Modifiziert: 2012-10-10 09:13:29.000000000 +0200
| |
| Geändert : 2012-10-10 13:20:00.484609642 +0200
| |
| (…)
| |
| | |
| Die einzelnen Zeitstempel haben folgende Bedeutung: * ''"Zugriff"'' - gibt den Zeitstempel an, wann die Datei zum letzten Mal gelesen wurde.
| |
| * ''"Modifiziert"'' - gibt den Zeitstempel der letzten Änderung des Dateiinhalts an.
| |
| * ''"Geändert"'' - gibt den Zeitstempel der letzten Änderung der Metadaten (z.B.
| |
| * Dateirechte) an.
| |
| | |
| Mit touch lassen sich diese Zeitstempel verändern.
| |
| | |
| ===== Hinweis =====
| |
| Der unter Windows vorhandene Zeitstempel ''"Erstellt am…"'' ist zwar auch bei Linux (<tt>crtime</tt>, ab ext3) vorhanden, kann aber nicht ausgelesen werden.
| |
| | |
| ===== Optionen =====
| |
| {| class="wikitable sortable"
| |
| |-
| |
| | | <tt>-L</tt> oder <tt>--dereference</tt>
| |
| | | [http://wiki.ubuntuusers.de/ln#Symbolische-Verknuepfungen Verknüpfungen] folgen (Im Unterschied zu normalen Programmen gibt <tt>stat</tt> standardmäßig Informationen zur symbolischen Verknüpfung selbst aus und nicht zur Datei auf die sie zeigt.)
| |
| |-
| |
| | | <tt>-f</tt> oder <tt>--file-system</tt>
| |
| | | Dateisystemstatus anstelle von Dateistatus anzeigen
| |
| |-
| |
| | | <tt>-c=FORMAT</tt> oder <tt>--format=FORMAT</tt>
| |
| | | Das angegebene [http://wiki.ubuntuusers.de/stat#Formatangaben FORMAT] anstelles der Voreinstellung benutzen; Zeilenvorschub nach jeder Benutzung
| |
| |-
| |
| | | <tt>--printf=FORMAT</tt>
| |
| | | Wie <tt>--format</tt>, aber Rückschrägstrich‐Steuerzeichen auswerten, kein obligatorischer Zeilenvorschub; letzterer kann mittels \n in [http://wiki.ubuntuusers.de/stat#Formatangaben FORMAT] eingefügt werden
| |
| |-
| |
| | | <tt>-t</tt> oder <tt>--terse</tt>
| |
| | | Information in knapper Form ausgeben
| |
| |-
| |
| | | <tt>--help</tt>
| |
| | | Hilfe anzeigen
| |
| |-
| |
| | | <tt>--version</tt>
| |
| | | Versionsinformation anzeigen
| |
| | |
| |-
| |
| |}
| |
| ===== Formatangaben =====
| |
| Bei den Optionen <tt>-c=FORMAT</tt>, <tt>--format=FORMAT</tt> und <tt>--printf=FORMAT</tt> sind für <tt>FORMAT</tt> folgende Formatangaben möglich:
| |
| | |
| {| class="wikitable sortable"
| |
| |-
| |
| | | %a
| |
| | | Zugriffsrechte im [http://wiki.ubuntuusers.de/Rechte#Oktale-Darstellung Oktalformat]
| |
| |-
| |
| | | %A
| |
| | | [http://wiki.ubuntuusers.de/Rechte Zugriffsrechte] in menschenlesbarer Form
| |
| |-
| |
| | | %F
| |
| | | Dateityp
| |
| |-
| |
| | | %m
| |
| | | Ort des Einhängens
| |
| |-
| |
| | | %n
| |
| | | Dateiname
| |
| |-
| |
| | | %s
| |
| | | Gesamtgröße in Bytes
| |
| |-
| |
| | | %U
| |
| | | Nutzername des Besitzers
| |
| |-
| |
| | | %x
| |
| | | Zeit des letzten Zugriffs
| |
| |-
| |
| | | %y
| |
| | | Zeit der letzten Modifikation
| |
| |-
| |
| | | %z
| |
| | | Zeit der letzten Änderung
| |
| |-
| |
| |}
| |
| Weitere Formatangaben sind der Manpage zu entnehmen.
| |
| | |
| ===== Beispiele =====
| |
| * Dateityp der Datei '''datei.txt''' anzeigen:
| |
| | |
| stat -c %F datei.txt
| |
| Normale leere Datei* Für die Datei '''datei.txt''' die Zugriffsrechte in menschenlesbarem Format und den Zeitstempel des letzten Zugriffs anzeigen:
| |
| | |
| stat --format %A%x datei.txt
| |
| -rw-rw-r--2012-10-15 19:12:17.315844786 +0200* Für die Datei '''datei.txt''' den Dateinamen, den Ort des Einhängens, den Nutzername des Besitzers und die Gesamtgröße anzeigen und dabei die Formatierung der Ausgaben vorgeben:
| |
| | |
| stat --printf "Dateiname: %n\nOrt des Einhaengens: %m\nNutzername: %U\nGesamtgroesse: %s\n" datei.txt
| |
| Dateiname: datei.txt
| |
| Ort des Einhaengens: /
| |
| Nutzername: ubuntuuser
| |
| Gesamtgroesse: 13* Informationen zum Dateisystem der Datei '''datei.txt''' anzeigen:
| |
| | |
| stat -f datei.txt
| |
| Datei: "datei.txt"
| |
| ID: 84dc3e24ed064a9f Namenslänge: 255 Typ: ext2/ext3
| |
| Blockgröße: 4096 Fundamentale Blockgröße: 4096
| |
| Blöcke: Gesamt: 76409150 Frei: 47061485 Verfügbar: 43180129
| |
| Inodes: Gesamt: 19406848 Frei: 18755502* oktale Dateirechte aller Dateien im aktuellen Ordner:
| |
| | |
| stat -c '%A %a %n' *
| |
| | |
| === Zeitstempel ===
| |
| ==== Bedeutung von Zeitstempeln ====
| |
| TODO
| |
| | |
| ==== Welche Zeitstempel gibt es? ====
| |
| Die Zeitstempel der Dateien sind in Linux in den [http://wiki.linux-club.de/opensuse/Inode Inodes] abgelegt.
| |
| * Dort stehen jeweils 4 Zeitstempel, wovon jedoch einer für den Anwender nicht sichtbar und auch nicht von Interesse ist, den verwendet Linux im Filesystem zum Verwalten der gelöschten Inode, er enthält die Zeit, zu der die Datei gelöscht worden ist, und somit der Inode für eine neue Verwendung frei geworden ist.
| |
| | |
| Derzeit kommt im ext3/4 Filesystem noch ein weiterer Zeitstempel hinzu, auf den wohl so mach ein ehemaliger Windowsuser schon lange gewartet hat, und der die wirkliche Entstehungszeit der Datei dokumentiert.
| |
| | |
| Dazukommen bedeutet, in aktuellen Systemen ist er intern schon da, allerdings war dies das geringste Problem.
| |
| * Das Hauptproblem jetzt, es müssen sehr viele, zum Teil auch zentrale Librarys und Programme, auf eine mögliche Benutzung dieses Zeitstempels noch angepasst werden.
| |
| | |
| Solche weitreichenden Änderungen könnten nur durch eine gezielte Koordinierung von zahlreichen Projekten schnell eingebracht werden.
| |
| | |
| Es wird also durchaus noch einiges Wasser die Flüsse herunterfließen, bis Otto der Normalanwender letztlich diesen Zeitstempel irgendwann einmal zu Gesicht bekommt, bzw.
| |
| * bis er wirklich auch damit arbeiten kann.
| |
| | |
| ==== Access Time (atime) ====
| |
| Diese Zeit wird jedes mal neu gesetzt, wenn der Inhalt der Datei geöffnet worden ist.
| |
| * In ihm wird also der letzte Zugriff auf den Inhalt der Datei angezeigt.
| |
| | |
| Dabei ist es für diesen Zeitstempel von Bedeutung, ob die Datei vor einem schreiben erst gelesen wird oder nur an das Ende weitergeschrieben wird.
| |
| | |
| Ansonsten gilt, egal ob die Datei gelesen oder ausgeführt wird oder ob eine Kopie von dieser Datei gemacht wird, oder die Datei durchsucht wird, oder die Datei in ein Backuparchiv aufgenommen wird - immer wird dieser Zeitstempel neu auf die aktuelle Zeit gesetzt.
| |
| | |
| Durch die Auswertung dieses Zeitstempels könnten wir also z.B.
| |
| * feststellen, das wir eine Datei schon einen längeren Zeitraum nicht mehr angefasst haben.
| |
| | |
| Das kann unter Anderem dabei helfen alte temporäre User- oder Systemdateien zu löschen.
| |
| | |
| Das ständige setzen der Access Time von Dateien und Verzeichnissen kann bei sehr vielen Zugriffen in einem Filesystem eine nicht unbedeutende Last verursachen, in bestimmten Situationen ist dieses aus Performancegründen nicht gewünscht, und kann deshalb z.B.
| |
| * mit Mountoptionen des Filesystems für alle Dateien oder alle Verzeichnisse abgeschaltet werden.
| |
| | |
| Einige Filesysteme erlauben auch ein gezieltes Abschalten dieser ständigen atime Aktualisierungen für ausgewählte Dateien oder Verzeichnisse.
| |
| | |
| ==== Modify Time (mtime) ====
| |
| Diese Zeit wird gesetzt, wenn der Inhalt der Datei verändert wird.
| |
| * In diesem Zeitstempel steht also die Zeit der letzten Veränderung der Dateidaten.
| |
| | |
| Es ist der Zeitstempel der für uns die meiste Bedeutung hat.
| |
| * Können wir doch damit feststellen, wie aktuell die Dateidaten sind.
| |
| * Diese Zeit wird z.B.
| |
| * bei ls -l in der default Einstellung angezeigt.
| |
| | |
| ==== Change Time (ctime) ====
| |
| Fälschlicher Weise wird ctime oftmals mit Create Time übersetzt und somit herrscht über diesen Zeitstempel oftmals eine ganz falsche Vorstellung.
| |
| | |
| Mit diesem Zeitstempel wird die Zeit gespeichert, zu welcher das letzte Mal die Daten innerhalb des Inodes geändert worden sind.
| |
| | |
| Wenn man sich anschaut, welche Daten im [http://wiki.linux-club.de/opensuse/Inode Inode] enthalten sind, kann man schon erahnen, wann diese Zeit neu gesetzt wird.
| |
| | |
| Bei einem Ändern des Dateiinhaltes werden die Dateigröße sowie die Datenblöcke neu gesetzt, beim Ändern der Zugriffsrechte, der UserID oder GruppenID, beim Anlegen eines neuen Hardlinks immer wird auch der Inhalt des Inodes geändert und damit auch die ctime neu gesetzt.
| |
| | |
| Aber auch bei einem Umbenennen der Datei, wird die ctime neu gesetzt, (man muss sich dabei vorstellen, das beim Umbenennen die Anzahl der "Links" zuerst um 1 erhöht wird, dann wird der neue Name angelegt, und dann anschließend der alte Name gelöscht und die "Links" wieder um 1 verringert).
| |
| | |
| Es gibt eine einzige Ausnahme bei der die ctime nicht gesetzt wird: wenn durch das Auslesen der Datei nur die Access Time im Inode neu gesetzt wird, also die Datei z.B.
| |
| * ausgelesen wird, dann wird die Change Time nicht neu gesetzt.
| |
| | |
| Dieser Zeitstempel hat z.B.
| |
| * eine große Bedeutung fürs Backup, da damit nicht nur festgestellt werden kann, ob sich der Inhalt der Datei sondern z.B.
| |
| * auch der Name oder die Eigentums- oder Zugriffsrechte einer Datei seit dem letzten Backup geändert haben.
| |
| | |
| Während sich die anderen beiden Zeitstempel durch Befehle auf eine bestimmte Zeit manipulieren lassen, ist es nicht möglich die ctime auf diese Art zu setzen.
| |
| | |
| What if you want to find files by their age? This is something that can be useful if you're trying to find a file that you know you created within a certain timeframe, or if you want to look for older files to delete.
| |
| * Lots of good reasons, actually.
| |
| | |
| The <tt>find</tt> utility is all about finding by time.
| |
| * You can search by access time ('''-atime''') or the last time a file was modified ('''-mtime''') or by the last time it was changed ('''-ctime''').
| |
| | |
| For example, let's look for any files that have not been modified in the last two days:
| |
| | |
| find -mtime +2
| |
| | |
| The options take a number that is interpreted as "n times 24 hours ago" and actually encompass a range.
| |
| * If you say +1, <tt>find</tt> will interpret that as "at least 24 hours ago, but not more than 48 hours ago."
| |
| | |
| You can combine the options, if you want to look for files within a specific range.
| |
| * So '''find -mtime +2 -mtime -5''' would be "two or more days ago, but not more than five days ago."
| |
| | |
| ==== Zeitstempel anzeigen ====
| |
| ===== ls =====
| |
| Der Befehl [http://man.splitbrain.org/ls ls] ( Verzeichnisinhalte anzeigen ) zeigt in der default Einstellung in Verbindung mit der Option -l immer die mtime der Dateien an.
| |
| | |
| Die Option -t sortiert die Verzeichnisseinträge nach der Zeit und in Verbindung mit der Option -r kann die Sortierreihenfolge auch jeweils umgekehrt werden.
| |
| | |
| Neben der mtime kann der ls-Befehl aber auch die anderen beiden Zeitstempel anzeigen und auch die Verzeichniseinträge nach diesen Zeiten sortieren.
| |
| | |
| Dafür zuständig sind die Optionen -u bei der die atime der Dateien verwendet wird, und die Option -c bei der die ctime zur Geltung kommt.
| |
| * In neueren Versionen des ls-Befehls können auch die Ausgaben der Zeiten analog dem Formatierungsmöglichkeiten von [http://man.splitbrain.org/date date] mittels der Option --time-style= formatiert werden.
| |
| | |
| Überblick über die gesamten Optionen und Möglichkeiten gibt die [http://man.splitbrain.org/ls ManPage von ls].
| |
| | |
| ===== stat =====
| |
| Der Befehl '''stat''' ohne Optionen kann alle Zeitstempel und alle anderen Informationen einer Datei auflisten.
| |
| * Siehe dazu auch das dokumentierte Beispiel unter [http://wiki.linux-club.de/opensuse/Inode Inode].
| |
| * Es ist aber auch möglich die Ausgabe von '''stat''' nach seinen eigenen Vorstellungen zu formatieren.
| |
| | |
| Folgender Befehl listet die Dateinamen und die Zeitstempel aller Dateien im Verzeichnis auf:
| |
| | |
| stat -c "Filename : %n
| |
| atime : %x
| |
| mtime : %y
| |
| ctime : %z
| |
|
| |
| " *
| |
| | |
| Das Format der Ausgabe dieses Befehles für jede Datei
| |
| | |
| Filename : test
| |
| atime : 2006-11-03 18:17:42.764670001 +0100
| |
| mtime : 2006-10-25 20:42:55.000000000 +0200
| |
| ctime : 2006-10-25 20:42:55.000000000 +0200
| |
| | |
| genaue Beschreibungen aller Optionen und weitere Möglichkeiten zeigt die [http://man.splitbrain.org/stat Manpage von stat]
| |
| | |
| ==== Unterschiede bei Dateitypen ====
| |
| Bei der Interpretation der Zeitstempel müssen wir weiterhin unterscheiden, ob es sich um eine '''"normale" Datei''' oder z.B.
| |
| * um ein [http://wiki.linux-club.de/opensuse/Directory Verzeichnis] handelt.
| |
| | |
| Die Funktion der Zeitstempel ist bei allen Dateitypen prinzipiell gleich, allerdings durch den speziellen Aufbau und die Funktion einzelner Dateitypen ergibt sich eine etwas andere Betrachtungsweise.
| |
| | |
| Bei den '''Verzeichnissen''' bedeutet die atime, das Verzeichnis wurde gelesen z.B.
| |
| * mit '''ls''', die mtime bedeutet es wurde in diesem Verzeichnis an den Namen der Dateien etwas geändert, oder Dateien sind in diesem Verzeichnis dazu gekommen oder entfernt worden.
| |
| | |
| '''Pipes''' und '''Geräteknoten''' zeigen prinzipiell analoges Verhalten wie normale Dateien, es gibt jedoch einige Besonderheiten bei '''Symbolischen Links'''.
| |
| | |
| Die atime wird hier immer dann gesetzt, wenn über diesen Weg auf die verlinkte Datei zugegriffen wird.
| |
| * Die ctime wird gesetzt bei Eigentumswechsel oder Umbenennen der Datei.
| |
| | |
| Da der eigentliche Inhalt des Softlinks, der Verweis auf die Datei nicht geändert werden kann, wird die mtime nur bei der Erstellung des Softlinks gesetzt.
| |
| | |
| Beim Versuch mittels '''chmod''' oder '''touch''' auf den Inode des Softlinks zuzugreifen, wird statt dessen dem Link gefolgt und der Zugriff erfolgt dort auf den Inode der verlinkten Datei.
| |
| | |
| ==== Zeitstempel und Datei-Operation ====
| |
| Die folgende Tabelle zeigt einige häufige Befehle und ihre Auswirkungen auf die Zeitstempel von Verzeichnissen, normalen Dateien und Softlinks.
| |
| * Dabei entspricht: * '''( X )''' dieser Zeitstempel wird neu gesetzt
| |
| * '''( . )''' dieses Zeitstempels bleibt unverändert
| |
| * '''( - )''' auf Softlinks wurden nicht alle Befehle getestet oder sind wirkungslos
| |
| | |
| '''Änderung der Zeitstempel verschiedener Dateitypen bei Befehlen'''
| |
| | |
| {| class="wikitable sortable"
| |
| |-
| |
| | | '''Befehl '''
| |
| | colspan="3" align=center | '''aktuelles Directory '''
| |
| | colspan="3" align=center | '''Datei '''
| |
| | colspan="3" align=center | '''Sym.
| |
| * Link auf Datei '''
| |
| |-
| |
| | |
| |
| | align=center | atime
| |
| | align=center | mtime
| |
| | align=center | ctime
| |
| | align=center | atime
| |
| | align=center | mtime
| |
| | align=center | ctime
| |
| | align=center | atime
| |
| | align=center | mtime
| |
| | align=center | ctime
| |
| |-
| |
| | | '''ls * '''
| |
| | align=center | X
| |
| | align=center | .
| |
| | align=center | .
| |
| | align=center | .
| |
| | align=center | .
| |
| | align=center | .
| |
| | align=center | X
| |
| | align=center | .
| |
| | align=center | .
| |
| |-
| |
| | | '''cat * '''
| |
| | align=center | X
| |
| | align=center | .
| |
| | align=center | .
| |
| | align=center | X
| |
| | align=center | .
| |
| | align=center | .
| |
| | align=center | X
| |
| | align=center | .
| |
| | align=center | .
| |
| |-
| |
| | | '''find . '''
| |
| | align=center | X
| |
| | align=center | .
| |
| | align=center | .
| |
| | align=center | .
| |
| | align=center | .
| |
| | align=center | .
| |
| | align=center | .
| |
| | align=center | .
| |
| | align=center | .
| |
| |-
| |
| | | '''grep Begriff * '''
| |
| | align=center | X
| |
| | align=center | .
| |
| | align=center | .
| |
| | align=center | X
| |
| | align=center | .
| |
| | align=center | .
| |
| | align=center | X
| |
| | align=center | .
| |
| | align=center | .
| |
| |-
| |
| | | '''echo "neue Zeile" >> Datei '''
| |
| | align=center | .
| |
| | align=center | .
| |
| | align=center | .
| |
| | align=center | .
| |
| | align=center | X
| |
| | align=center | X
| |
| | align=center | -
| |
| | align=center | -
| |
| | align=center | -
| |
| |-
| |
| | | '''echo "neue Zeile" >> SymLink '''
| |
| | align=center | X
| |
| | align=center | .
| |
| | align=center | .
| |
| | align=center | .
| |
| | align=center | X
| |
| | align=center | X
| |
| | align=center | X
| |
| | align=center | .
| |
| | align=center | .
| |
| |-
| |
| | | '''mv Datei Datei_1 '''
| |
| | align=center | .
| |
| | align=center | X
| |
| | align=center | X
| |
| | align=center | .
| |
| | align=center | .
| |
| | align=center | X
| |
| | align=center | .
| |
| | align=center | .
| |
| | align=center | X
| |
| |-
| |
| | | '''ln Datei Datei_1 '''
| |
| | align=center | .
| |
| | align=center | X
| |
| | align=center | X
| |
| | align=center | .
| |
| | align=center | .
| |
| | align=center | X
| |
| | align=center | -
| |
| | align=center | -
| |
| | align=center | -
| |
| |-
| |
| | | '''chmod 777 Datei '''
| |
| | align=center | .
| |
| | align=center | .
| |
| | align=center | .
| |
| | align=center | .
| |
| | align=center | .
| |
| | align=center | X
| |
| | align=center | -
| |
| | align=center | -
| |
| | align=center | -
| |
| |-
| |
| | | '''chown user1 Datei '''
| |
| | align=center | .
| |
| | align=center | .
| |
| | align=center | .
| |
| | align=center | .
| |
| | align=center | .
| |
| | align=center | X
| |
| | align=center | .
| |
| | align=center | .
| |
| | align=center | X
| |
| |-
| |
| | | '''tar -cf ../Archiv.tar ./ '''
| |
| | align=center | X
| |
| | align=center | .
| |
| | align=center | .
| |
| | align=center | X
| |
| | align=center | .
| |
| | align=center | .
| |
| | align=center | X
| |
| | align=center | .
| |
| | align=center | .
| |
| |-
| |
| | | '''tar -xf ../Archiv.tar '''
| |
| | align=center | X
| |
| | align=center | .
| |
| | align=center | X
| |
| | align=center | X
| |
| | align=center | .
| |
| | align=center | X
| |
| | align=center | X
| |
| | align=center | X
| |
| | align=center | X
| |
| | |
| |-
| |
| |}
| |
| ==== Zeitstempel ändern ====
| |
| Der Befehl [http://man.splitbrain.org/touch touch] bietet die Möglichkeit die atime und die mtime der Dateien zu manipulieren.
| |
| * Per default (ohne andere Optionen) setzt touch für alle Zeitstempel die aktuelle Zeit, ist eine Datei nicht vorhanden wird eine leere normale Datei angelegt.
| |
| | |
| Über die Optionen '''-t''' oder '''-d''' können beliebige Zeiten bestimmt werden, auf die die Zeitstempel gesetzt werden sollen.
| |
| * Auch ist es über die Option '''-r''' möglich eine Referenzzeit einer anderen Datei auszuwählen.
| |
| | |
| Mittels der Optionen '''-a''' und '''-m''' ist es möglich nur die atime oder nur die mtime mit touch neu zu setzen.
| |
| | |
| '''In allen Fällen wird die ctime immer auf das aktuelle Datum gesetzt.'''
| |
| | |
| Überblick über die gesamten Optionen und Möglichkeiten git die [http://man.splitbrain.org/touch Manpage von touch].
| |
| | |
| Für Datei unter Linux werden Zeitstempel gespeichert, die den Zeitpunkt des letzten Zugriffs, des letzten veränderung und der letzten Änderung der Eigenschaften.
| |
| * Wird eine Datei neu erstellt oder eine existierende Datei oder ihre Attribute verändert werden diese Zeitstempel automatisch aktualisiert.
| |
| | |
| Kommandos wie ls oder find benutzen diese Zeitstempel zur Auflistng und zum finden von Dateien.
| |
| * Das Kommando Touch <tt>'''touch'''</tt> wird benutzt um die Zeitstempel zu ändern (access time, modification time, and change time of a file).
| |
| | |
| '''touch''' [-acm] [-r ''Referenzdatei''] [-t ''MMDDhhmm''<nowiki>[[</nowiki>''CC'']''YY''][.''ss'']] [-d ''Zeit''] [-time={atime, access, use, mtime, modify}] [-date=''Zeit''] [-file=''Referenzdatei''] [-no-create] ''Datei'' ...
| |
| | |
| ===== Zeitstempel aktualisieren / Datei erstellten =====
| |
| <tt>'''touch'''</tt> setzt die Zugriffs- und die Änderungszeit der ''Datei'' auf die aktuelle Zeit.
| |
| * Wenn die ''Datei'' nicht existiert, wird eine leere Datei erzeugt:
| |
| | |
| $ touh neue_datei
| |
| | |
| ===== Mehrere Dateien erstellen =====
| |
| $ touch datei_1 datei_2 datei_3
| |
| $ touch datei{_A,_B,_C}
| |
| | |
| ===== Datei erstellten unterbinden (-c) =====
| |
| Mit der Option -c werden existierende Dateien aktualisiert, aber keine neuen erstelt:
| |
| | |
| $ touch -c neue_datei_2
| |
| | |
| ===== Zugriffszeit setzen (-a) =====
| |
| Mit der Option -a kann die Zugriffzeit geändert werden.
| |
| * Ohne weiter Angabe wird die aktuelle Systemzeit genutzt und in das Feld atime eingetragen.
| |
| | |
| <u>Vor der Ausführung von touch:</u>
| |
| | |
| $ stat neue_datei
| |
| Datei: „neue_datei“
| |
| Größe: 0 Blöcke: 0 EA Block: 4096 reguläre leere Datei
| |
| Gerät: 20h/32d Inode: 5291574 Verknüpfungen: 1
| |
| Zugriff: (0644/-rw-r--r--) Uid: ( 1000/dirkwagner) Gid: ( 2000/dirkwagner)
| |
| Zugriff : 2013-07-14 '''02:25:17.812326958 +0200'''
| |
| Modifiziert: 2013-07-14 02:25:17.812326958 +0200
| |
| Geändert : 2013-07-14 02:25:17.812326958 +0200
| |
| Geburt : -
| |
|
| |
| $ touch -a neue_datei
| |
| | |
| <u>Nach der Ausführung von touch</u>
| |
| | |
| $ stat neue_datei
| |
| Datei: „neue_datei“
| |
| Größe: 0 Blöcke: 0 EA Block: 4096 reguläre leere Datei
| |
| Gerät: 20h/32d Inode: 5291574 Verknüpfungen: 1
| |
| Zugriff: (0644/-rw-r--r--) Uid: ( 1000/dirkwagner) Gid: ( 2000/dirkwagner)
| |
| Zugriff : 2013-07-14 '''02:26:35.178102630 +0200'''
| |
| Modifiziert: 2013-07-14 02:25:17.812326958 +0200
| |
| Geändert : 2013-07-14 02:26:35.178102630 +0200
| |
| Geburt : -
| |
| | |
| ===== Änderungzeit setzen (-m) =====
| |
| Dder Zeitpunkt der letzten Änderung kann mit der Option -m aktualisiert werden.
| |
| | |
| $ touch -m neue_datei
| |
| | |
| HINWEIS: Es ist mit touch nicht möglih die Erstellungszeit (Geburt) zu ändern.
| |
| | |
| ===== Zeitstempel einer anderen Datei kopieren (-r) =====
| |
| Der Option -r kann ein Dareiname angegben werden, deren Zeitstempel dann als Referenz benutzt werden.
| |
| | |
| $ touch neue_datei -r /etc/passwd
| |
| | |
| ===== Zeitangaben festlegen (-t) =====
| |
| Mit den Optionen -t und -d können eigene Zeitangaben an touch übergeben werden:
| |
| | |
| <nowiki>$ touch -t [[CC]YY]MMDDhhmm[.SS]</nowiki>
| |
| | |
| {| class="wikitable sortable"
| |
| |-
| |
| | | '''CC'''
| |
| | | Jahr (ersten zwei Ziffern)
| |
| |-
| |
| | | '''YY'''
| |
| | | Jahr (letzten beiden Ziffern)* Bei Werten zwischen 70 und 99 wird für CC der Wert 19 angenommen.
| |
| * Bei Werten zwischen 00 und 37 wird für CC der Wert 20 angenommen.
| |
| * Es ist nicht möglich, ein Datum jenseits des 18.
| |
| * Januar 2038 zu setzten.
| |
| | |
| |-
| |
| | | '''MM'''
| |
| | | Monat
| |
| |-
| |
| | | '''DD'''
| |
| | | Tag
| |
| |-
| |
| | | '''hh'''
| |
| | | Stunde
| |
| |-
| |
| | | '''mm'''
| |
| | | Minute
| |
| |-
| |
| | | '''SS'''
| |
| | | Sekunden
| |
| |-
| |
| |}
| |
| <u>Beispiel</u>
| |
| | |
| $ touch -a -m -t 203801181205.09 neue_datei
| |
| | |
| <u>Prüfung der Änderung mit stat</u>
| |
| | |
| $ stat neue_datei
| |
| Datei: „neue_datei“
| |
| Größe: 0 Blöcke: 0 EA Block: 4096 reguläre leere Datei
| |
| Gerät: 20h/32d Inode: 5291574 Verknüpfungen: 1
| |
| Zugriff: (0644/-rw-r--r--) Uid: ( 1000/dirkwagner) Gid: ( 2000/dirkwagner)
| |
| Zugriff : '''2038-01-18 12:05:09'''.000000000 +0100
| |
| Modifiziert: '''2038-01-18 12:05:09'''.000000000 +0100
| |
| Geändert : 2013-07-14 02:52:12.117238294 +0200
| |
| Geburt : -
| |
| | |
| ===== Optionen =====
| |
| {| class="wikitable sortable"
| |
| |-
| |
| | | <tt>'''-a '''</tt>
| |
| | | ändert nur die Zugriffszeit
| |
| |-
| |
| | | <tt>'''-c '''</tt>
| |
| | | unterdrückt die Erzeugung nicht existierender Dateien
| |
| |-
| |
| | | <tt>'''-d ''Zeit'' '''</tt>
| |
| | | setzt ''Zeit'' anstelle der aktuellen Uhrzeit; für ''Zeit'' können verschiedene gebräuchliche Formate verwendet werden
| |
| |-
| |
| | | <tt>'''-m '''</tt>
| |
| | | ändert nur die Änderungszeit
| |
| |-
| |
| | | <tt>'''-r ''Referenzdatei'' '''</tt>
| |
| | | setzt die Zeit von ''Referenzdatei'' anstelle der aktuellen Zeit
| |
| |-
| |
| | | <tt>'''-t ''MMDDhhmm''<nowiki> [[</nowiki>''CC''] ''YY''][.''ss''] '''</tt>
| |
| | | benutzt das Argument als Zeitangabe
| |
| | |
| |-
| |
| |}
| |
| ==== Dateien anhand der Zeitstempel suchen mit find ====
| |
| Der Befehl '''find''' hat eine Vielzahl von Optionen mit deren Hilfe man Dateien finden kann, darunter auch einige mit denen Dateien nach den 3 Zeitstempeln gesucht werden können.
| |
| | |
| Im folgenden ein Auszug aus der [http://man.splitbrain.org/find ManPage von find] der diese Optionen beschreibt.
| |
| | |
| {| class="wikitable sortable"
| |
| |-
| |
| | | '''-amin''' ''N''
| |
| | | auf die Datei ist vor '''''N''''' Minuten zugegriffen worden
| |
| |-
| |
| | | '''-anewer''' ''Referenzdatei''
| |
| | | auf die Datei ist vor weniger Zeit zugegriffen worden, als seit der letzten Veränderung der '''''Referenzdatei''''' vergangen ist
| |
| |-
| |
| | | '''-atime''' ''N''
| |
| | | auf die Datei ist vor '''''N*24''''' Stunden zugegriffen worden
| |
| |-
| |
| | | '''-cmin''' ''N''
| |
| | | der Status der Datei wurde vor '''''N''''' Minuten geändert
| |
| |-
| |
| | | '''-cnewer''' ''Referenzdatei''
| |
| | | der Status der Datei wurde vor weniger Zeit verändert, als seit der letzten Veränderung der '''''Referenzdatei''''' vergangen ist
| |
| |-
| |
| | | '''-ctime''' ''N''
| |
| | | der Dateistatus wurde vor '''''N*24''''' Stunden geändert
| |
| |-
| |
| | | '''-mmin''' ''N''
| |
| | | der Inhalt der Datei wurde vor '''''N''''' Minuten verändert
| |
| |-
| |
| | | '''-mtime''' ''N''
| |
| | | der Inhalt der Datei wurde vor '''''N*24''''' Stunden verändert
| |
| |-
| |
| | | '''-newer''' ''Referenzdatei''
| |
| | | die Datei ist später verändert worden als die '''''Referenzdatei'''''
| |
| |-
| |
| |}
| |
| dabei können die numerischen Argumente '''N''' auf drei Arten angegeben werden:
| |
| | |
| {| class="wikitable sortable"
| |
| |-
| |
| | align=center | '''+ N'''
| |
| | align=center | wird interpretiert "alle Zahlen größer als N"
| |
| |-
| |
| | align=center | '''- N'''
| |
| | align=center | wird interpretiert "alle Zahlen kleiner als N"
| |
| |-
| |
| | align=center | '''N'''
| |
| | align=center | wird interpretiert "genau N"
| |
| | |
| |-
| |
| |}
| |
| ==== Beispiele ====
| |
| find /tmp ! -type d -atime +20 -user USER1 2>/dev/null
| |
| | |
| findet unterhalb /tmp alle Dateien die kein Verzeichnis sind und seit über 20 Tagen nicht mehr angefasst wurden und dem Benutzer USER1 gehören
| |
| | |
| find /home/USER1 -type f -mmin -20 -user USER1
| |
| | |
| findet alle normalen Dateien unterhalb vom Homeverzeichnis von USER1 die innerhalb der letzten 20 Minuten geändert wurden und dem User USER1 gehören
| |
| | |
| find /etc -cnewer /etc/fstab 2>/dev/null
| |
| | |
| findet alle Dateien unterhalb /etc deren ctime nach der letzten Änderung (mtime) der /etc/fstab geändert wurde
| |
| | |
| ==== Backup und Zeitstempel ====
| |
| Zeitstempel spielen beim Backup eine besondere Rolle, zum Einem möchte man bei vielen Backupaufgaben bei der Wiederherstellung der Dateien aus dem Backuparchiv die alten Zeitstempel wieder haben, zum anderen benötigt man z.B.
| |
| * bei [http://wiki.linux-club.de/mediawiki/index.php?title=Inkrementelles_Backup&action=edit&redlink=1 inkrementellen Backups] die Zeitstempel der Dateien, um herauszufinden, ob sich die Datei seit dem letztem Backup geändert hat und somit jetzt in das inkrementelle Backup mit aufgenommen werden muss.
| |
| | |
| Und nicht zu guter Letzt, gibt es auch Backup Methoden bei denen einzelne Dateien innerhalb eines Backuparchives gezielt ausgetauscht werden, wenn sie sich seit dem Erstellen des Backups geändert haben, oder in der Zwischenzeit neu hinzu gekommen sind, müssen sie natürlich jetzt in das Archiv aufgenommen werden.
| |
| | |
| Beim Anlegen eines Backups werden die Dateien ausgelesen, durch dieses Auslesen wird im Normalfall die atime dieser Dateien neu gesetzt.
| |
| | |
| Dieses hätte jedoch zur Folge, dass in einem so gesicherten Verzeichnis nicht nach den Dateien gesucht werden könnte, auf die schon länger nicht mehr zugegriffen worden ist, um sie z.B.
| |
| * zu löschen.
| |
| | |
| Aus diesem Grund haben die meisten Backupprogramme spezielle Optionen, die das setzen der atime beim Backup verhindern.
| |
| * Dieses kann aber nur dadurch erreicht werden, dass nach dem die Datei ausgelesen wurde, die alte atime wieder neu gesetzt wird.
| |
| | |
| Der touch-Befehl und viele andere Programme (auch tar) mit denen die Zeitstempel in den [http://wiki.linux-club.de/opensuse/Inode Inode] manipuliert werden können, nutzen den Systembefehl [http://man.splitbrain.org/utime%282%29 utime] dafür.
| |
| * Bei diesen Befehlen wird beim zurücksetzen der atime auf den alten Wert, die ctime zerstört und auf die aktuelle Zeit gesetzt.
| |
| | |
| Das hat dann die Konsequenz, das nach einem Backup dann in diesem Verzeichnis zwar nach Dateien gesucht werden kann, auf die lange nicht zugegriffen wurde, aber nicht mehr nach Dateien gesucht werden kann, bei denen in der letzten Zeit die ctime verändert wurde.
| |
| | |
| Auch kann mit solchen Backupprogrammen nur die atime und die mtime der Dateien wieder hergestellt werden, die ctime wird auf eine Zeit des Zurückspielens der Sicherung gesetzt.
| |
| | |
| Bei inkrementellen Backups stellt sich die Frage, sollen die Dateien nach der mtime oder der ctime beurteilt werden.
| |
| * Wird die Datei nach der Änderung der mtime beurteilt, dann sind dort sämtliche Änderungen am Inhalt dieser Datei für das Backup berücksichtigt, jedoch nicht, z.B.
| |
| * eventuelle vorgenommene Änderungen an den Besitz- oder Zugriffsrechten.
| |
| | |
| Einige Backupkonzepte ermöglichen die Wahl zwischen beiden Varianten, einige Programme unterstützen jedoch nur die Suche nach dem geänderten mtime Zeitstempel.
| |
| | |
| Gelegentlich ein kleines Problem sind die Zeitstempel der [http://wiki.linux-club.de/opensuse/Directory Verzeichnisse].
| |
| | |
| Wird z.B.
| |
| * zuerst das Verzeichnis aus dem Backup gewonnen, dann können die gespeicherten Zeitstempel aus dem Backup zwar gesetzt werden, wenn jedoch anschließend noch die Dateien aus diesem Verzeichnis hineingepackt werden, dann sind die Zeitstempel der Verzeichnisse wieder auf dem Zeitpunkt des Auspackens der letzten Datei in diesem Directory gesetzt und nicht wie gewünscht, die vom gesicherten Verzeichnis.
| |
| | |
| Von Bedeutung für manche Anwendungen ist auch die Genauigkeit mit der die Zeitstempel in den Headerdateien des Backups abgelegt werden können, während für einige Anwendungen durchaus eine Genauigkeit von 1 Sekunde ausreicht, benötigen andere Backupkonzepte eventuell eine Genauigkeit von 1/1000 Sekunde.
| |
| | |
| Aus diesen Ausführungen sollte jetzt erkennbar sein dass es zwischen Backup und Zeitstempel eine doch recht vielschichtige Wechselwirkung gibt, die sich oftmals nur mit der Wahl des für diesen Zweck geeigneten Backupprogramms und den richtigen Einstellungen und Optionen lösen lässt.
| |
| | |
| Wem die Möglichkeiten z.B.
| |
| * von tar in Bezug auf die Zeitstempel nicht ausreichen und wer eventuell auch noch weitere Features wie z.B. [http://wiki.linux-club.de/opensuse/Zugriffsrechte#Access_Control_Lists_unter_Linux ACL-Unterstützung] benötigt, dem sei an dieser Stelle ein Blick in die [http://man.splitbrain.org/star ManPage von star] empfohlen.
| |
| | |
| ===== tar und Zeitstempel =====
| |
| Der Befehl [http://man.splitbrain.org/tar tar] ('''T'''ape '''AR'''chiver) bezeichnet ein Programm mit dessen Hilfe einfache Backup-, Archivierungs und ähnliche -Arbeiten am System gemacht werden können.
| |
| * Wenn wir unter LINUX von '''tar''' sprechen, meinen wir damit eigentlich eine '''GNU implementierung''' eines unter UNIX als tar bezeichneten Befehls.
| |
| | |
| Man bezeichnet das Programm deshalb auch auf anderen Systemen '''GNUtar oder gtar'''.
| |
| * Die beiden Programme (UNIX tar und GNU tar) sind nur bedingt kompatibel.
| |
| | |
| Daneben existieren noch mehrere mit TAR verwandte Implementationen die mehr oder weniger viele Erweiterungen und Verbesserungen beinhalten, und oft noch weniger kompatibel zu ihren Urprogrammen sind.
| |
| | |
| Die Stärke von tar liegt in der einfachen und universellen Benutzung, eine der historisch gewachsenen Schwächen von tar, ist der Umgang mit Zeitstempeln.
| |
| | |
| Mit tar läßt sich nur die mtime wieder herstellen.
| |
| * Die atime und die ctime werden zerstört und durch die aktuelle Zeit beim Restore ersetzt.
| |
| * Moderne Versionen von tar haben eine Option, um mittels der mtime inkrementelle Backups machen zu können.
| |
| | |
| Eine weitere Option von tar ermöglicht es beim Erstellen des Archives die atime, (welche durch das Lesen der Dateien beim Erstellen des Archives verändert würde,) vor Veränderung zu schützen, allerdings mit der Nebenwirkung, dass damit analog zum touch-Befehl, die ctime der oginalen Dateien zerstört wird.
| |
| | |
| Damit ist tar durchaus noch geeignet um einfache Backupaufgaben zu übernehmen, und ein Linuxsystem aus einem Tar-Archiv wird sicherlich ohne Probleme funktionieren, allerdings die gehobenen Anspüche die heute an ein modernes Backupprogramm gestellt werden, kann tar damit nicht erfüllen.
| |
| | |
| Die Hauptbedeutung und der Haupteinsatz von GNUtar ist heute deshalb auch mehr im Bereich der Verteilung und Verbreitung von Softwarepaketen zu finden.
| |
| * Den Umfang und die Funktionen können der [http://man.splitbrain.org/tar ManPage von tar] entnommen werden.
| |
| | |
| === Dateitypen ===
| |
| ==== Dateityp anzeigen (file) ====
| |
| <tt>'''file'''</tt> bestimmt den Dateityp
| |
| | |
| '''file''' [-c ] [-f ''Namendatei''] [-m ''Magiedatei''] ''Datei'' ...
| |
| | |
| <tt>'''file'''</tt> versucht die Art oder den Typ der angegebenen ''Datei'' zu bestimmen.
| |
| * Dazu werden drei Tests durchgeführt: ein Dateisystemtest, ein Kennzahlentest und ein Sprachtest.
| |
| * Der erste erfolgreiche Test führt zur Ausgabe des erkannten Dateityps.
| |
| | |
| Der erkannte Typ enthält normalerweise eines der Schlüsselwörter `text' für Dateien, die ohne Schwierigkeiten angezeigt werden können, `executable' für Dateien, die ausführbare Programme enthalten und auf dem einen oder anderen Unix-Rechner auch ausgeführt werden können, und `data' für alle anderen Dateien, die normalerweise nicht angezeigt werden können.
| |
| | |
| Nur allgemein bekannte Dateiformate wie <tt>core</tt>-Dateien oder <tt>tar</tt> Archive werden ohne diese Schlüsselwörter benannt.
| |
| * Der Dateisystemtest wird mit Hilfe des <tt>stat</tt>(2) Systemaufrufs durchgeführt.
| |
| * Hier werden leere Dateien ebenso erkannt wie alle Gerätedateien, Sockets, symbolische Links und andere Spezialdateien.
| |
| | |
| Der Kennzahlentest kann einige Dateien anhand festgelegter Kennzahlen - sogenannter `magic numbers' - erkennen, die sich in der Nähe des Dateianfangs an einer festgelegten Stelle befinden.
| |
| | |
| Mit Hilfe solcher Kennzahlen entscheidet beispielsweise das Betriebssystem, ob eine Datei korrekt ausführbar ist oder nicht.
| |
| * Diese Kennzahlen sind in der Datei /etc/magic abgespeichert.
| |
| * Wenn eine Datei als Text erkannt ist, versucht <tt>file</tt> noch, die (Programmier-)Sprache zu erkennen, indem es nach bestimmten Schlüsselwörtern sucht.
| |
| | |
| Auf diese Weise kann beispielsweise C-Quelltext oder die Eingabe für den <tt>groff</tt> Textprozessor erkannt werden.
| |
| | |
| ===== Optionen =====
| |
| {| class="wikitable sortable"
| |
| |-
| |
| | | <tt>'''-m ''Magiedatei'' '''</tt>
| |
| | | benutzt die benannte ''Magiedatei'' anstelle von /etc/magic für den Kennzahlentest
| |
| |-
| |
| | | <tt>'''-c '''</tt>
| |
| | | gibt den interpretierten Inhalt der Kennzahlendatei für Testzwecke aus
| |
| |-
| |
| | | <tt>'''-f ''Namendatei'' '''</tt>
| |
| | | veranlaßt <tt>file</tt>, die Namen der zu untersuchenden Programme aus der ''Namendatei'' zu lesen; in der Namendatei werden die Dateinamen durch Zeilenende getrennt aufgeführt
| |
| | |
| |-
| |
| |}
| |
| ==== Normale Dateien ====
| |
| * Normale Dateien (normal files)
| |
| * Dateien im üblichen Sinn: Text- oder Binärdateien
| |
| * Das System unterstützt keine Dateistruktur
| |
| * Dateien sind Bytefolgen (Strukturierung nur durch das Programm)
| |
| | |
| ==== {{anchor|Ref521335640}} {{anchor|Ref521335635}} {{anchor|Ref521335629}} Gerätedateien ====
| |
| Die Dateien im <tt>'''/dev'''</tt> Verzeichnis sind, wie bereits angedeutet "Pipelines" zur Hardware des Computers.
| |
| | |
| Die meisten Dateien können (die entsprechenden Zugriffsrechte vorausgesetzt) sowohl ausgelesen als auch beschrieben werden.
| |
| | |
| Einige, welche Statusinformationen über die Hardware liefern können selbstverständlich nur ausgelesen werden, während andere, welche die Hardware konfigurieren nur geschrieben werden können.
| |
| | |
| D.h.
| |
| * auf die einzelnen Hardwarekomponenten des Computers kann wie auf Dateien zugegriffen werden.
| |
| | |
| Vorteil dieses Konzepts: Auf diese Weise kann auf die Hardware zugegriffen werden (z.B.
| |
| * aus Shellscripten heraus), ohne dass spezielle Hilfsprogramme geschrieben werden müssen.
| |
| | |
| Die folgende Tabelle enthält eine Liste der wichtigsten Gerätedateien, samt Beschreibung:
| |
| | |
| {| class="wikitable sortable"
| |
| |-
| |
| ! | Gerätedatei
| |
| !colspan="2" | | Bedeutung
| |
| |-
| |
| | | <tt>'''sdasdbsdcsdd'''</tt>
| |
| | | erstezweitedrittevierte
| |
| | | SCSI/SATA-Festplatte
| |
| |-
| |
| | | <tt>'''sda1sda2sda3sda4'''</tt>
| |
| | | erstezweitedrittevierte
| |
| | | Festplattenpartition auf der ersten SCSI/SATA-Festplatte
| |
| |-
| |
| | | <tt>'''hda'''</tt>
| |
| | colspan="2" | wie s<tt>'''da'''</tt>, nur für IDE-Festplatten
| |
| |-
| |
| | | <tt>'''ttyS0ttyS1'''</tt>
| |
| | colspan="2" | Erste und zweite serielle Schnittstelle (COM1 und COM2 unter DOS)
| |
| |-
| |
| | | <tt>'''audiodspsndstatmidi00'''</tt>
| |
| | colspan="2" | Zugriff auf die Soundblasterkarte
| |
| |-
| |
| | | <tt>'''psaux'''</tt>
| |
| | colspan="2" | Zugriff auf die PS/2 Schnittstelle
| |
| |-
| |
| | | <tt>'''lp0lp1lp2'''</tt>
| |
| | colspan="2" | Zugriff auf die parallele Schnittstelle
| |
| |-
| |
| | | <tt>'''fd0'''</tt>
| |
| | colspan="2" | Zugriff auf das erste Diskettenlaufwerk
| |
| |-
| |
| |}
| |
| Dies ist selbstverständlich nur eine kleine Zusammenstellung.
| |
| * Eine vollständige Liste findet sich unter:
| |
| | |
| /usr/src/linux/Documentation/devices.txt
| |
| | |
| ===== Besondere Geräte =====
| |
| {| class="wikitable sortable"
| |
| |-
| |
| | | <tt>'''/dev/zero'''</tt>
| |
| | | liefert unendlich vielen Nullen
| |
| |-
| |
| | | <tt>'''/dev/null'''</tt>
| |
| | | schluckt alle Daten die es erhält
| |
| |-
| |
| | | '''/dev/random'''
| |
| | | liefert [http://de.wikipedia.org/wiki/Zufallszahlengenerator Zufallszahlen] von hoher Qualität
| |
| |-
| |
| | | '''/dev/urandom'''
| |
| | | liefert unendlich viele [http://de.wikipedia.org/wiki/Zufallszahlengenerator Zufallszahlen]
| |
| | |
| |-
| |
| |}
| |
| ====== /dev/null ======
| |
| '''/dev/null''' ([http://de.wikipedia.org/wiki/Englische_Sprache englisch] ''null'': dt. „nichts“) ist der Name einer speziellen [http://de.wikipedia.org/wiki/Gerätedatei#Virtuelle_Ger.C3.A4tedateien virtuellen Gerätedatei], des ''Nulldevice'', auf [http://de.wikipedia.org/wiki/Unix Unix] und Unix-ähnlichen [http://de.wikipedia.org/wiki/Betriebssystem Betriebssystemen], die jegliche Daten, die dorthin geschrieben werden, verwirft.
| |
| * Unter [http://de.wikipedia.org/wiki/CP/M CP/M] und seinen Abkömmlingen [http://de.wikipedia.org/wiki/PC-kompatibles_DOS DOS], [http://de.wikipedia.org/wiki/OS/2 OS/2] und [http://de.wikipedia.org/wiki/Microsoft_Windows Microsoft Windows] wird das Nulldevice als <tt>NUL:</tt> angesprochen.
| |
| * Unter [http://de.wikipedia.org/wiki/Disk_Operating_System DOS] und Nachfolgerbetriebssystemen existiert das Nulldevice in jedem Verzeichnis unter dem Dateinamen <tt>NUL</tt>.
| |
| * Die Datei <tt>/dev/null</tt> ist durch den [http://de.wikipedia.org/wiki/Portable_Operating_System_Interface POSIX]-Standard standardisiert.
| |
| | |
| ====== Verwendung ======
| |
| Eine häufige Verwendung ist z. B., in einer [http://de.wikipedia.org/wiki/Unix-Shell Shell]-Sitzung die Meldungen eines Programms von der [http://de.wikipedia.org/wiki/Stdout Standardausgabe] statt auf den Bildschirm nach <tt>/dev/null</tt> umzuleiten, wenn man an ihnen nicht interessiert ist; sie werden dann nicht angezeigt.
| |
| | |
| Das Gerät <tt>/dev/null</tt> kann auch als Ziel bei Dateisystemoperationen dienen.
| |
| | |
| Ein solcher Zweck tritt gelegentlich auf, wenn Shellskripte oder Programme unbedingt eine Dateiangabe erfordern, diese im vorliegenden Fall aber keinen Sinn ergibt oder unerwünscht ist.
| |
| | |
| Lesezugriffe liefern sofort ein Dateiende ([http://de.wikipedia.org/wiki/End_of_File End of File], „EOF“).
| |
| * Dabei verhält sich das Gerät wie eine gewöhnliche Datei, das öffnende Programm muss also keine besonderen Vorkehrungen treffen.
| |
| | |
| In der [http://de.wikipedia.org/wiki/Netzkultur Netzkultur] ist <tt>/dev/null</tt> ein umgangssprachlich verwendeter Begriff für eine Art gedankliches [http://de.wikipedia.org/wiki/Schwarzes_Loch Schwarzes Loch], meist um Desinteresse an der Aussage des Gesprächspartners zu bekunden.
| |
| | |
| ====== Beispiele ======
| |
| Wenn man nur die normale Ausgabe eines Programms sehen will, nicht aber die Fehlermeldungen und sonstigen Informationen, die das Programm in die [http://de.wikipedia.org/wiki/Standard-Datenströme#Standardfehlerausgabe_.28stderr.29 Standardfehlerausgabe] schreibt, kann man diese umleiten:
| |
| | |
| $ programm 2>/dev/null
| |
| | |
| Möchte man für Shell-Skripte nur den Rückgabewert eines Programms verwenden und somit sämtliche Ausgaben nach <tt>/dev/null</tt> umleiten, kann die folgende Syntax verwendet werden:
| |
| | |
| $ programm >/dev/null 2>&1
| |
| | |
| Mittels Shell-[http://de.wikipedia.org/wiki/Pipe_%28Informatik%29 Pipes] kann man selektiv uninteressante (Fehler-)Meldungen von Teilen der Pipeline ausblenden:
| |
| | |
| $ programm1 2>/dev/null | programm2 | ...
| |
| | |
| Ähnlich ist die Verwendung mittels [http://de.wikipedia.org/wiki/Symbolische_Verknüpfung symbolischer Verknüpfung], danach wird alles, was in die verlinkte Datei (<tt>~/.bash_history</tt>) geschrieben wird, nicht gespeichert, beispielsweise zum [http://de.wikipedia.org/wiki/Datenschutz Datenschutz]:
| |
| | |
| $ ln -sf /dev/null ~/.bash_history
| |
| | |
| Auch üblich ist die Verwendung für die Standardeingabe.
| |
| * Ein Beispiel dafür ist das Ausführen eines Kommandos im Hintergrund während einer [http://de.wikipedia.org/wiki/Secure_Shell SSH]-Sitzung.
| |
| * Dabei wird die Standardeingabe an <tt>/dev/null</tt> übergeben, womit das Programm im Hintergrund weiterläuft, auch wenn man sich aus der SSH-Sitzung ausloggt:
| |
| | |
| $ ssh example.com "programm </dev/null >/dev/null 2>&1 &"
| |
| | |
| Man kann auch einen Datenträger überprüfen, indem z. B. <tt>/dev/cdrom0</tt> nach <tt>/dev/null</tt> kopiert wird.
| |
| * Wenn hierbei ein Fehler auftritt, ist der entsprechende Datenträger beschädigt oder nicht vorhanden.
| |
| | |
| $ dd if=/dev/cdrom of=/dev/null
| |
| | |
| ====== /dev/zero ======
| |
| <tt>'''/dev/zero'''</tt> ist eine spezielle [http://de.wikipedia.org/wiki/Virtuelle_Gerätedatei virtuellen Gerätedatei] auf [http://de.wikipedia.org/wiki/Unix Unix] und [http://de.wikipedia.org/wiki/Unixoides_System unixoiden Systemen], die bei jedem Lesezugriff [http://de.wikipedia.org/wiki/Nullzeichen Nullzeichen] zurückgeliefert.
| |
| * Im Gegensatz zu [http://de.wikipedia.org/wiki//dev/null /dev/null] ist <tt>/dev/zero</tt> nicht Bestandteil des [http://de.wikipedia.org/wiki/Portable_Operating_System_Interface POSIX]-Standard.
| |
| | |
| <tt>/dev/zero</tt> wurde mit [http://de.wikipedia.org/wiki/SunOS SunOS]-4.0 im Jahre 1987 gemeinsam mit dem neuen VM-Subsystem eingeführt.
| |
| | |
| ====== Details ======
| |
| Wenn auf <tt>/dev/zero</tt> geschrieben wird, verhält sich <tt>/dev/zero</tt> wie <tt>/dev/null</tt>.
| |
| | |
| Bei einem ''mmap'' auf <tt>/dev/zero</tt> werden anonyme genullte Seiten aus dem virtuellen [http://de.wikipedia.org/wiki/Speicherpool Speicherpool] des [http://de.wikipedia.org/wiki/Kernel_%28Betriebssystem%29 Kernels] zur Verfügung gestellt.
| |
| | |
| Viele Betriebssysteme verwenden diesen ''mmap''-Mechanismus, um Programmen und [http://de.wikipedia.org/wiki/Shared_Library Shared Libraries] den sogenannten ''nichtinitialisierten''-Datenbereich zur Verfügung zu stellen.
| |
| | |
| Viele Programme verwenden Datenbereiche, die durch einen ''mmap'' auf <tt>/dev/zero</tt> erzeugt wurden, als Basis für [http://de.wikipedia.org/wiki/Shared_Memory Shared Memory], das zur Kommunikation zwischen mehreren [http://de.wikipedia.org/wiki/Prozess_%28Informatik%29 Prozessen] verwendet wird.
| |
| | |
| ====== Beispiele ======
| |
| Das folgende [http://de.wikipedia.org/wiki/Unix-Kommando Unix-Kommando] erzeugt eine Datei namens ''file'', die 12 MB groß ist und nur das [http://de.wikipedia.org/wiki/Nullzeichen Nullzeichen] enthält:
| |
| | |
| [http://de.wikipedia.org/wiki/Dd_%28Unix%29 dd] if=/dev/zero of=file bs=1M count=12
| |
| | |
| ====== /dev/random ======
| |
| <tt>/dev/random</tt> ist eine zeichen-orientierte [http://de.wikipedia.org/wiki/Virtuelle_Gerätedatei virtuelle Gerätedatei], über die Programme auf einen systemweiten [http://de.wikipedia.org/wiki/Zufallszahlengenerator Zufallszahlengenerator] von hoher Qualität zugreifen können.
| |
| | |
| Da für [http://de.wikipedia.org/wiki/Rechnernetz netzwerk]-orientierte Systeme wie Unix [http://de.wikipedia.org/wiki/Kryptographie Kryptographie]-Dienste und damit [http://de.wikipedia.org/wiki/Zufallszahl Zufallszahlen] eine bedeutende Rolle spielen, kommt dieser Datei und dem dahinterstehenden Treiber eine wichtige Bedeutung zu.
| |
| | |
| Der Zufallsgenerator sammelt [http://de.wikipedia.org/w/index.php?title=Umgebungsrauschen&action=edit&redlink=1 Umgebungsrauschen] von [http://de.wikipedia.org/wiki/Gerätetreiber Gerätetreibern] und anderen Quellen in einem [http://de.wikipedia.org/wiki/Entropie_%28Informationstheorie%29 Entropiepool].
| |
| * Der Generator speichert auch eine Abschätzung über die Anzahl der [http://de.wikipedia.org/wiki/Bit Bits] im Entropiepool.
| |
| | |
| Aus diesem Pool werden die Zufallszahlen generiert.
| |
| * Beim Lesen gibt <tt>/dev/random</tt> nur solange Zufallszahlen zurück, bis die abgeschätzte Entropiemenge erschöpft ist.
| |
| | |
| Wenn der Entropiepool erschöpft ist, blockieren Lesezugriffe auf <tt>/dev/random</tt>, bis zusätzliches Umgebungsrauschen erhalten wurde. <tt>/dev/random</tt> sollte ausreichend sein für Anwendungszwecke, die auf eine sehr hohe Qualität der Zufälligkeit angewiesen sind, wie etwa [http://de.wikipedia.org/wiki/Verschlüsselung Verschlüsselung] (beispielsweise [http://de.wikipedia.org/wiki/One-Time-Pad One-Time-Pads] oder [http://de.wikipedia.org/wiki/Public_Key Schlüsselerzeugung]).
| |
| | |
| Aus Performancegründen wird in der Praxis oft nur der Seed eines Pseudo-Zufallszahlengenerators von <tt>/dev/random</tt> gelesen (z. B.
| |
| * in [http://de.wikipedia.org/wiki/OpenSSL OpenSSL], [http://de.wikipedia.org/wiki/Pretty_Good_Privacy PGP] und [http://de.wikipedia.org/wiki/GnuPG GnuPG]).
| |
| | |
| Der aktuelle Füllstand des Entropiepools lässt sich unter [http://de.wikipedia.org/wiki/Linux_%28Kernel%29 Linux] aus der Datei <tt>/proc/sys/kernel/random/entropy_avail</tt> ermitteln.
| |
| | |
| Eine Ausgabe der Datei liefert die verfügbare Entropie in bit, wobei das Maximum von 4096 bit einem vollständig gefüllten Entropiepool entspricht.
| |
| | |
| ====== /dev/urandom ======
| |
| Aus <tt>/dev/urandom</tt> (von engl.
| |
| * unlimited random(ness)) können wie aus <tt>/dev/random</tt> Zufallszahlen gelesen werden.
| |
| | |
| Im Gegensatz zu letzterem blockiert es jedoch nicht, wenn eine definierte Entropieschwelle unterschritten wird.
| |
| | |
| In diesem Fall ist es theoretisch möglich, dass die erzeugten [http://de.wikipedia.org/wiki/Pseudozufall Pseudozufallszahlen] im Nachhinein von einem Angreifer berechnet werden können.
| |
| * Im Zweifelsfall sollte bei hohen Anforderungen, z. B.
| |
| * bei One-Time-Pads, auf <tt>/dev/random</tt> zurückgegriffen werden.
| |
| | |
| ====== Verbesserung der Entropie ======
| |
| Über Software, wie z. B. <tt>timer_entropyd</tt>, <tt>haveged</tt>, <tt>randomsound</tt>, lässt sich die Entropie verbessern sowie bzw.
| |
| * der Entropie-Pool vergrößern, sodass mehr Zufallszahlen zur Verfügung stehen.
| |
| | |
| Mit der [http://de.wikipedia.org/wiki/GNU GNU]-Software <tt>rng-tools</tt> lassen sich unter Linux und ähnlichen Betriebssystemen [http://de.wikipedia.org/wiki/Zufallszahlengenerator#Physikalischer_Zufallszahlengenerator physikalische Zufallszahlengeneratoren] einbinden.
| |
| | |
| ==== Zusammenfassung: Gerätedateien ====
| |
| * Spezialdateien (special files)
| |
| * Geräte werden als Spezialdatei eingetragen
| |
| * Zugriff auf Gerät Zugriff auf eine Datei
| |
| * Schutzmechanismus wie für normale Dateien
| |
| * Blockorientierte und zeichenorientierte Geräte
| |
| | |
| ===== Named Pipes estellen (mkfifo) =====
| |
| mkfifo erstellt named pipes (FIFOs) mit dem übergebenen Namen.
| |
| | |
| '''mkfifo '''[''OPTION'']... ''NAME''...
| |
| | |
| ====== Optionen ======
| |
| -'''m''', --'''mode'''<nowiki>=</nowiki>''MODE Setzt Zugriffsrechte mit Bitmaske (MODE)''
| |
| | |
| -'''Z''', --'''context'''<nowiki>=</nowiki>''CTX Setzt den ''SELinux security context für jeden NAME auf CTX
| |
| | |
| ===== Gerätedateien erzeugen (mknod) =====
| |
| <tt>'''mknod'''</tt> erzeugt eine Spezialdatei
| |
| | |
| '''mknod''' ''[-m Modus] [-mode=Modus] Name {bcu} Major Minor''
| |
| '''mknod''' ''[-m Modus] [-mode=Modus] Pfad p''
| |
| | |
| <tt>'''mknod'''</tt> erzeugt ein FIFO, eine Gerätedatei für ein zeichenorientiertes Gerät (character device) oder für ein blockorientiertes Gerät (block-device) mit dem angegebenen ''Namen''.
| |
| | |
| Die Gerätedateien werden über die Major Device Nummern (Hauptgerätenummern) mit den entsprechenden Gerätetreibern im Kernel verbunden.
| |
| | |
| Mehrere Geräte der gleichen Art werden vom Gerätetreiber durch die Minor Device Nummern (Untergerätenummern) unterschieden.
| |
| | |
| Eine vollständige Liste aller Gerätenummern finden Sie bei den Kernelsourcen in der Datei <tt>./src/linux/Documentation/devices.txt</tt>.
| |
| * Die verbindliche Liste aller registrierten Hauptgerätenummern befindet sich in der Includedatei <tt><linux/major.h></tt>.
| |
| | |
| Die Zugriffsrechte auf die Datei werden aus der Bitdifferenz von 0666 und der aktuellen ''umask'' des aufrufenden Prozesses gebildet.
| |
| | |
| Der erste Buchstabe nach dem ''Namen'' gibt den Typ der Datei an:
| |
| | |
| {| class="wikitable sortable"
| |
| |-
| |
| | | <tt>'''p '''</tt>
| |
| | | (pipe) erzeugt eine FIFO Spezialdatei (wie [../../../../ebooks/computer/betriebssysteme/linux/allgemein/unsortiert/linux_anwender_handbuch/linux_anwenderhandbuch_7-0/node79.html#mkfifo mkfifo])
| |
| |-
| |
| | | <tt>'''b '''</tt>
| |
| | | (block) erzeugt eine Gerätedatei für ein (gepuffertes) blockorientiertes Gerät
| |
| |-
| |
| | | <tt>'''c '''</tt>
| |
| | | (character) erzeugt eine ungepufferte Gerätedatei für ein zeichenorientiertes Gerät
| |
| |-
| |
| | | <tt>'''u '''</tt>
| |
| | | (unbuffered) das Gleiche wie ''c''
| |
| | |
| |-
| |
| |}
| |
| ====== Optionen ======
| |
| {| class="wikitable sortable"
| |
| |-
| |
| | | <tt>'''-m ''Modus'' '''</tt>
| |
| | | setzt die Rechte der Dateien auf ''Modus'' wie bei [../../../../ebooks/computer/betriebssysteme/linux/allgemein/unsortiert/linux_anwender_handbuch/linux_anwenderhandbuch_7-0/node29.html#chmod chmod]
| |
| | |
| |-
| |
| |}
| |
| | |
| ===== Verwaltung der Gerätedateien mit udev =====
| |
| udev ersetzt seit dem Kernel 2.6 das früher genutzte [http://de.wikipedia.org/wiki/Devfs devfs]-Dateisystem, dessen Aufgaben es damit übernimmt.
| |
| | |
| Genauso wie devfs verwaltet udev das /dev-Verzeichnis, welches die speziellen [http://de.wikipedia.org/wiki/Gerätedatei Gerätedateien] enthält, um von Programmen aus auf die vom System zur Verfügung gestellten Geräte zuzugreifen.
| |
| | |
| Mit der Einführung von udev waren sowohl udev als auch devfs im Kernel enthalten.
| |
| * Seit Ende Juni 2006 ist nur noch udev enthalten, devfs wurde vollständig entfernt.
| |
| | |
| ====== Arbeitsweise ======
| |
| '''udev''' überwacht und wertet [http://de.wikipedia.org/wiki/Hot-Plug hotplug]-Ereignisse aus.
| |
| | |
| Finden sich dort Informationen über ein neu angeschlossenes Gerät, werden zusätzliche zu diesem Gerät vorhandene Informationen dem [http://de.wikipedia.org/w/index.php?title=Sysfs&action=edit&redlink=1 sysfs]-Dateisystem entnommen und eine neue Gerätedatei im /dev-Verzeichnis erzeugt.
| |
| | |
| Dabei ist der für die spezielle Datei verwendete Name und die [http://de.wikipedia.org/wiki/Dateiberechtigung Zugriffsberechtigung] frei durch Regeln konfigurierbar.
| |
| | |
| ====== Konfiguration ======
| |
| Installiert man udev, so findet man die Standardregeln unter <tt>/etc/udev/rules.d/50-udev.rules</tt>.
| |
| | |
| Um die eigenen Regeln anwenden zu können, sollte man diese Datei nicht verändern, sondern eine neuere mit kleinerer Nummer erzeugen, zum Beispiel <tt>/etc/udev/rules.d/10-udev.rules</tt>.
| |
| | |
| Somit ist gewährleistet, dass diese Regeln zuerst erkannt werden.
| |
| * Wurde eine Regel gefunden, so wird diese, und auch jede passende folgende, angewandt.
| |
| | |
| ====== Vorteile ======
| |
| Im Unterschied zu devfs, welches im Linux-Kernel selbst integriert ist, arbeitet udev im [http://de.wikipedia.org/wiki/Userspace userspace], wird also als normales Programm gestartet.
| |
| | |
| Die Verwaltung und Namensgebung der angeschlossenen Geräte liegt dadurch nicht mehr beim Kernel und ist somit einfacher konfigurierbar.
| |
| | |
| Weitere Vorteile:* die Zuordnung von Geräten ist eindeutig – es entstehen keine Probleme mehr, wenn man z. B.
| |
| * die Reihenfolge von zwei angeschlossenen USB-Druckern ändert
| |
| * die Benennung der Geräte kann durch den Nutzer gewählt werden; sie bleibt beständig
| |
| * für die Ermittlung der Gerätenamen können beliebige Verfahren zur Anwendung kommen, neben statischen Listen und Regeln z. B.
| |
| * auch die Abfrage einer externen Datenbank, wodurch sich beispielsweise Geräte innerhalb eines Unternehmensnetzwerkes - durch ihre Seriennummer identifiziert - einheitlich verhalten
| |
| * die Benennung ist [http://de.wikipedia.org/wiki/Linux_Standard_Base Linux-Standard-Base]-konform
| |
| | |
| ====== Nachteile ======
| |
| Ein beabsichtigter Nachteil von udev besteht darin, dass es im Gegensatz zu devfs beim Aufruf eines /dev-Knotens nicht automatisch die entsprechenden [http://de.wikipedia.org/wiki/Gerätetreiber Gerätetreiber] lädt.
| |
| | |
| Funktioniert beim Einstecken eines Gerätes HotPlug nicht richtig und laden die benötigten Treiber nicht, können diese nicht mit udev nachgeladen werden.
| |
| | |
| == Einfache Dateiverwaltung ==
| |
| === Kopieren (cp) ===
| |
| cp·[-Optionen]·Quelle·Ziel
| |
| | |
| (''copy'') Kopiert eine oder mehrere Dateien in das angegebene Verzeichnis. Existiert die Datei schon im Zieldirectory, wird sie überschrieben.
| |
| | |
| * Dateien, die mit einem Punkt beginnen, müssen explizit angegeben werden
| |
| | |
| {| class="wikitable sortable"
| |
| |-
| |
| | >"'''
| |
| | | kopiert nur diejenigen Dateien, die nicht mit einem Punkt beginnen;
| |
| |-
| |
| | >"'''
| |
| | | kopiert alle Dateien
| |
| | |
| |-
| |
| |}
| |
| ==== Beispiele ====
| |
| * Die Datei '''datei.txt''' aus dem aktuellen Verzeichnis nach '''/Dokumente''' kopieren, falls diese neuer ist als die bestehende:
| |
| | |
| cp -u datei.txt /Dokumente/datei.txt
| |
| | |
| * Die Dateien '''datei.txt''', '''dokument.odt''' nach '''/Dokumente''' kopieren, wenn neuer als bestehende, und Kopierfortschritt anzeigen
| |
| | |
| cp -uv datei.txt dokument.odt /Dokumente
| |
| | |
| * Dateien mit bestimmtem Anfangsbuchstaben '''da*.txt''', '''do*.odt''' kopieren, wenn neuer als bestehende, und Kopierfortschritt anzeigen
| |
| | |
| cp -uv da*.txt do*.odt /Dokumente
| |
| | |
| * Im letzten Beispiel werden alle Dateien aus '''/home/Otto''' samt der verstecken Einstellungsdateien rekursiv ins Verzeichnis '''Sicherungen''' kopiert, welches sich auf dem [http://wiki.ubuntuusers.de/mount eingehängten] Laufwerk '''sda9''' befindet.
| |
| | |
| cp -a /home/Otto/. /media/sda9/Sicherungen
| |
| | |
| ==== Die wichtigsten Optionen ====
| |
| {| class="wikitable sortable"
| |
| |-
| |
| | | '''-a--archive '''
| |
| | | Beibehaltung von Besitzer-, Gruppen- und Zugriffsrechten und Erstellungs-, Modifikations- und Zugriffsdaten (entspricht -dR --preserve=all)
| |
| |-
| |
| | | '''-b--backup'''
| |
| | | Sichert Dateien vor dem Überschreiben, wenn diese unterschiedlich sind
| |
| |-
| |
| | | '''-d '''
| |
| | | (''no-dereference'') erhält [http://wiki.ubuntuusers.de/ln#Symbolische-Verknuepfungen symbolische Links], folgt ihnen aber nicht beim Kopieren (entspricht -P --preserve=links)
| |
| |-
| |
| | | '''-f '''
| |
| | | (''force'') Dateien im Zielverzeichnis werden überschrieben
| |
| |-
| |
| | | '''-i --interactive'''
| |
| | | (''interactive'') erwartet Bestätigung vor dem Überschreiben bereits existierender Dateien
| |
| |-
| |
| | | '''-l --link'''
| |
| | | (link) erstellt harte macht Links anstelle von Kopien (nur bei normalen Dateien)
| |
| |-
| |
| | | '''-n--no-clobber '''
| |
| | | niemals vorhandene Dateien überschreiben (-i wird wirkungslos)
| |
| |-
| |
| | >'''-P '''
| |
| | | (''path'') die Quelldateien werden mit Pfad relativ zum Zielverzeichnis kopiert
| |
| |-
| |
| | >'''-p '''
| |
| | | (''preserve'') erhält die Zugriffsrechte und Eigentümer des Originals (nicht die SUID und SGID Bits)
| |
| |-
| |
| | >--no-dereference '''
| |
| | | niemals symbolischen Links in der Quelle folgen
| |
| |-
| |
| | >--preserve=mode,ownership,timestamps'''
| |
| | | erhält Standard-Dateiattribute, wie Zeitpunkt des letzten Schreibzugriffs
| |
| |-
| |
| | | '''-r -R'''
| |
| | |
| '''--recursive'''
| |
| | | (''recursive'') kopiert rekursiv alle Dateien der Unterverzeichnisse (auch Devices und Links) wie normale Dateien
| |
| |-
| |
| | | '''-s '''
| |
| | |
| |
| |-
| |
| | | '''-S Endung '''
| |
| | | (''suffix'') sichert die Dateien vor dem Überschreiben durch Umbenennung mit der Endung; Voreinstellung ist `~'
| |
| |-
| |
| | | '''-s --symbolic-link'''
| |
| | | (''symbolic link'') erstellt symbolische Links anstelle von Kopien (absolute Pfadnamen)
| |
| |-
| |
| | | '''-u --update'''
| |
| | | (''update'') kopiert (überschreibt) nur, wenn Zieldatei älter als Quelldatei
| |
| |-
| |
| | | '''-v --verbose'''
| |
| | | zeigt den Kopierfortschritt an
| |
| |-
| |
| | | '''-x '''
| |
| | | (''one file-system'') ignoriert Unterverzeichnisse, die in anderen Dateisystemen angesiedelt sind
| |
| |-
| |
| |}
| |
| * cp kennt noch eine Reihe von weiteren Optionen, die man mit Hilfe der Option --help aufrufen kann. Oder man schaut in die [http://wiki.ubuntuusers.de/man Manpages] von cp.
| |
| | |
| * Der Anhang für Sicherheitskopien ist ~, außer wenn er --suffix oder SIMPLE_BACKUP_SUFFIX gesetzt wurde.
| |
| | |
| * Die Versionskontrolle kann mit --backup oder VERSION_CONTROL gesetzt werden. Mögliche Werte sind:
| |
| | |
| {| class="wikitable sortable"
| |
| |-
| |
| | | '''none, off'''
| |
| | | Niemals Sicherung erzeugen (selbst wenn --backup angegeben wurde)
| |
| |-
| |
| | | '''numbered, t'''
| |
| | | Erzeugen von nummerierten Sicherheitskopien
| |
| |-
| |
| | | '''existing, nil'''
| |
| | | Nummeriert wenn nummerierte Backups existieren, sonst einfach.
| |
| |-
| |
| | | '''Simple, never'''
| |
| | | Immer einfache Sicherheitskopien erzeugen
| |
| | |
| |-
| |
| |}
| |
| ==== Dateien/Ordner ausschließen ====
| |
| '''cp''' enthält keine --exclude-Option, jedoch biete die [http://wiki.ubuntuusers.de/Shell Shell] einen Weg, der es ermöglicht Muster auszuschließen.
| |
| | |
| * Dazu muss z.B. in bash die Shell-Option extglob gesetzt werden, die den erweiterten Musterabgleich aktiviert (extended [http://en.wikipedia.org/wiki/globbing globbing]):
| |
| | |
| * shopt -s extglob
| |
| | |
| * Der Befehl muss jedesmal ausgeführt werden oder man trägt ihn in die [http://wiki.ubuntuusers.de/Bash/bashrc bashrc] ein.
| |
| | |
| * Im Folgenden der angewandte cp-Befehl:
| |
| | |
| cp -av /QUELLE/!(Datei1.txt|Festplattenabbild*|Ordner/Unterordner1) /ZIEL/
| |
| | |
| * Durch das Muster !() werden alle Dateien '''und Ordner''', die mit ''"Datei1.txt''", ''"Festplattenabbild''" und ''"Unterorder1''" beginnen, ausgeschlossen. Darüber hinaus werden alle Dateien und Ordner von QUELLE nach ZIEL kopiert.
| |
| | |
| ==== Fortschrittsanzeigen ====
| |
| * Einige Distribution bieten '''cp''' mit der Option -g an. Bei größeren Kopierzeiten wird ein Statusbalken angezeigt. Um dies in zu erreichen, muss der ''progress bar''-Patch eingepflegt sein. Oder man greift auf Skripte oder [http://wiki.ubuntuusers.de/rsync rsync] zurück.
| |
| | |
| ===== rsync =====
| |
| * Statt cp kann rsync zum Kopieren verwendet werden. rsync --progress -ah" zu verwenden.
| |
| | |
| * Das funktioniert zwar, ist aber kein vollwertiger Ersatz für "cp" mit allen seinen Aufrufparametern.
| |
| | |
| * rsync -auh --partial --stats –progress quelle ziel
| |
| * rsync -auh --partial --stats –progress quelle/ ziel/
| |
| | |
| ===== [http://www.ivarch.com/programs/pv.shtml Pipe Viewer] =====
| |
| * Auch der [http://www.ivarch.com/programs/pv.shtml Pipe Viewer] implementiert eine Fortschrittsanzeige, die sich in vielerlei Weise einsetzen lässt, aber er arbeitet nach dem Pipe-Prinzip, liest und schreibt also von den Standard-Kanälen. Beim Aufruf wird daraus also:
| |
| | |
| * pv Datei > neueDatei
| |
| | |
| ===== [http://wiki.goffi.org/wiki/Gcp/en gcp] =====
| |
| * Die beste Lösung für das Problem scheint ein Programm namens "[http://wiki.goffi.org/wiki/Gcp/en gcp]" zu sein, das in Python geschrieben ist und zumindest Teil der Ubuntu- und Debian-Distributionen ist.
| |
| | |
| * Es zeigt den Fortschritt beim Kopieren an, bietet die wichtigsten Aufrufparameter von "cp" und noch ein paar weitere praktische Features wie die Anpassung von Dateinamen mit Sonderzeichen, Logging und Übertragungslisten.
| |
| | |
| * Seit 2003 das Patent EP0394160 ausgelaufen ist, das den Fortschrittsbalken patentiert, ist gcp patent-frei.
| |
| | |
| ===== [http://beatex.org/web/advancedcopy.html Advanced Copy] =====
| |
| * Besonders nahtlos fügt sich Advanced Copy (http://beatex.org/web/advancedcopy.html) in den altbekannten Unix-Werkzeugkasten ein, denn es verändert die GNU-Tools "mv" und "cp" aus den Coreutils, die zumindest auf Linux-Distributionen zum Standardumfang gehören.
| |
| | |
| * Das Problem dabei ist, dass man die Coreutils selbst übersetzen muss. Schwierig ist das nicht, aber danach hat man zwei Binaries auf der Platte liegen, die nicht mehr Bestandteil der Paketverwaltung sind und.
| |
| | |
| === Dateien verschieben (mv) ===
| |
| (''move'') Umbenennen einer Datei unter Einbeziehung des gesamten Dateipfades.
| |
| | |
| * Neben reiner Namensänderung auch ein Verschieben in ein anderes Verzeichnis möglich (Änderung der Verzeichniseinträge, kein Kopieren).
| |
| | |
| * Ist die Datei '''Ziel''' bereits vorhanden, wird sie überschrieben.
| |
| | |
| * Liegt die Datei auf einen anderen Datenträger, wird sie physikalisch kopiert und an der alten Stelle gelöscht. Ein Verzeichnis kann nicht über die Grenzen eines Dateisystems hinweg verschoben werden.
| |
| | |
| '''mv''' [''Optionen''] ''Quelle Ziel''
| |
| '''mv''' [''Optionen''] ''Quelle'' ... ''Verzeichnis''
| |
| | |
| ==== Optionen ====
| |
| {| class="wikitable sortable"
| |
| |-
| |
| | | '''-b '''
| |
| | | sichert Dateien vor dem Überschreiben
| |
| |-
| |
| | | '''-f '''
| |
| | | überschreibt existierenden Zieldateien rücksichtslos
| |
| |-
| |
| | | '''-i '''
| |
| | | erwartet interaktiv eine Bestätigung vor dem Überschreiben existierender Zieldateien
| |
| |-
| |
| | | '''-u '''
| |
| | | verschiebt Dateien nur, wenn sie neuer sind als die gleichnamigen Zieldateien
| |
| |-
| |
| | | '''-v '''
| |
| | | meldet jede Aktion
| |
| |-
| |
| | | '''-S ''Endung'' '''
| |
| | | bestimmt die ''Endung'' für einfaches Backup; Voreinstellung ist `~'
| |
| |-
| |
| |}
| |
| * Der Anhang für Sicherheitskopien ist ~, außer wenn er --suffix oder SIMPLE_BACKUP_SUFFIX gesetzt wurde. Die Versionskontrolle kann mit --backup oder VERSION_CONTROL gesetzt werden.
| |
| | |
| * Mögliche Werte sind:
| |
| | |
| {| class="wikitable sortable"
| |
| |-
| |
| | | '''none, off'''
| |
| | | Niemals Sicherung erzeugen (selbst wenn --backup angegeben wurde)
| |
| |-
| |
| | | '''numbered, t'''
| |
| | | Erzeugen von nummerierten Sicherheitskopien
| |
| |-
| |
| | | '''existing, nil'''
| |
| | | Nummeriert wenn nummerierte Backups existieren, sonst einfach.
| |
| |-
| |
| | | '''Simple, never'''
| |
| | | Immer einfache Sicherheitskopien erzeugen
| |
| | |
| |-
| |
| |}
| |
| === Dateien umbenenen (mv) ===
| |
| * Um Dateien in Linux umzubenennen verwendet man (bei einer Datei) einfach:
| |
| | |
| mv dateiname.ext dateinameNeu.ext
| |
| | |
| * Wenn man jedoch mehrere Dateien umbenennen will, muss man zu einem kleinen Hilfsmittel greifen. mv kann nur mit einer Destination arbeiten.
| |
| | |
| * Entweder man versucht das Umbenennen mit Schleifen oder verwendet spezielle Programme.
| |
| | |
| ==== rename ====
| |
| * Je nachdem welche Programmversion von rename zur Verfügung steht kann der Syntax so:
| |
| | |
| rename DSC 2002_10_14- *.jpg
| |
| | |
| * oder auch so aussehen:
| |
| | |
| rename "s/^DSC/2002_10_14-/" *.jpg
| |
| | |
| * Beide Zeilen erledigen den gleichen Job. Die zweiter Version bietet die volle Mächtigkeit von Regulären Ausdrücken.
| |
| | |
| * Das Umbenennen einer einzelnen Datei ist keine grosse Herausforderung. Doch wie ist vorzugehen, wenn man Hunderte oder Tausende von Dateien – z. B. Fotos aus einer Digitalkamera oder die eigene Musiksammlung – in einem einzelnen Ordner oder in vielen Unterordnern umbennen muss? Im grafischen Dateimanager alles markieren und umbenennen funktioniert nicht und jede Datei einzeln umbenennen, dauert viel zu lange.
| |
| | |
| * Unter Linux hilft hier „rename“ in Kombination mit den sogenannten „perl regular expressions“ weiter. „Reguläre Ausdrücke“ sind eine Art „Zwischenabfrage“, welche den Dateinamen vor dem eigentlichen Umbenennen durch „rename“ analysieren.
| |
| | |
| * Für die meisten Aktionen reicht der Zusatz 's/suchbegriff/ersetzung/g' mitzugeben, wobei s für „single line“ (Ausdruck muss auf einer Zeile stehen) und g für „global“ (ersetzen, sooft der Ausdruck gefunden wird) steht.
| |
| | |
| * Soll ohne Unterscheidung von Gross- und Kleinschreibung gesucht werden, dann kann Am Ende noch ein i für insensitive (egal, ob gross oder klein geschrieben) mitgegeben werden.
| |
| | |
| ====== Teile aus dem Dateinamen entfernen ======
| |
| * Es gibt viele Situationen, in denen man Teile des Dateinamens entfernt haben möchte. Bei Musiktiteln will man den Namen des Albums beziehungsweise des Interpreten loswerden, bei Bildern doppelt vorhandene Endungen oder überhaupt zuviele Leerzeichen und Bindestriche.
| |
| | |
| rename 's/Amelie//g' *
| |
| rename 's/Amelie \(Soundtrack\) - //g' *
| |
| rename 's/ -//g' *
| |
| | |
| * Das erste Beispiel entfernt das Wort „Amelie“, das zweite Beispiel die gesamte Zeichenfolge „Amelie \(Soundtrack\) - “ aus dem Namen aller Dateien im aktuellen Verzeichnis. Beachten, dass allfällige Sonderzeichen im Suchbegriff – in diesem Fall die runden Klammern – immer mit einem Backslash gekennzeichnet werden müssen. Das letzte Beispiel zeigt, dass man auch mehrere Leerzeichen problemlos aus dem Dateinamen entfernen kann.
| |
| | |
| ====== Teile innerhalb des Dateinamens ersetzen ======
| |
| * Neben dem Entfernen ungewollter Teile aus dem Dateinamen besteht oftmals auch die Notwendigkeit, einzelne Wörter, Buchstaben oder Zeichen zu ersetzen. wie bereits vorhin erwähnt, muss hier ein besonderes Augenmerk auf das „Escapen“ der Sonderzeichen gelegt werden.
| |
| | |
| rename 's/ /_/g' * oder rename 's/\s+/_/g' *
| |
| rename 's/-/./g' *
| |
| rename 's/\'/’/g' *
| |
| rename 's/^/Amélie_Soundtrack_/' *.ogg
| |
| rename 's/ogg$/ogn/' *.ogg
| |
| | |
| * Das erste Beispiel ersetzt alle Leerzeichen durch Unterstriche, das zweite alle Bindestriche durch Punkte und das dritte alle falschen Apostrophe durch typographisch richtige im Namen aller Dateien im aktuellen Verzeichnis. Die beiden letzten Beispiele benutzen die Sonderzeichen ^ (= Anfang der Zeile) und $ (= Ende der Zeile), um das Ersetzen auf einen bestimmten Bereich des Dateinamens einzugrenzen; daher kann auch das g für global wegfallen.
| |
| | |
| * Um zu Testen, wie wichtig das „Escapen“ der Sonderzeichen ist, versuchen sie einmal die beiden Befehle „rename 's/ /./g' *“ und „rename 's/./ /g' *“ hintereinander. Auweia! Dummerweise steht der Punkt in den Regular Expressions für "irgendein Zeichen", d. h. der letzte Befehl ersetzt jedes Zeichen im Dateinamen durch ein Leerzeichen! Der korrekte zweite Befehl muss daher „rename 's/\./ /g' *“ lauten – und zum Retten der Dateiendung anschliessend noch „rename 's/ ogg$/.ogg/g' *“.
| |
| | |
| ====== Gross- und Kleinschreibung des Dateinamens manipulieren ======
| |
| * Die Gross- und Kleinschreibung eines Dateinamens lässt sich ebenfalls sehr einfach mit einem „Einzeiler“ ändern, wobei dies den gesamten Dateinamen, aber auch nur Teile davon betreffen kann.
| |
| | |
| rename 'y/[A-Z]/[a-z]/' *
| |
| rename 's/\.JPG/\.jpg/g' *.JPG
| |
| rename 's/^\w/\U$&/g' *
| |
| | |
| * Das erste Beispiel ersetzt alle grossgeschriebenen Buchstaben durch kleingeschriebene. Da hier nicht nach einem einzelnen zusammenhängenden Begriff gesucht, sondern ein ganzer Buchstabenbereich analysiert wird und einzelne Zeichen mit einem korrespondierenden Zeichen (eben ein A durch ein a und ein Z durch ein z) ersetzt werden, muss anstelle des s ein y (transliteration) gesetzt werden.
| |
| | |
| * Das zweite Beispiel hingegen ersetzt wiederum nur einen einzigen Begriff, nämlich das gross geschriebene „.JPG“ durch ein klein geschriebenes „.jpg“, daher die bekannte Kombination „'s/ / /g'“.
| |
| | |
| * Das letzte Beispiel sieht ein wenig komplex aus, ist aber leicht erklärt: es wir nach dem Wort (\w) am Anfang (^) der Zeile (/s) gesucht, dann aber nur der erste Buchstabe ($&) gross geschrieben (\U).
| |
| | |
| ====== Teile des Dateinamens umbauen und ergänzen ======
| |
| * Insbesondere bei größeren digitalen Bildersamlungen möchte man gerne die nichtssagenden Zahlen im Namen, welche von der Digitalkamera generiert werden, durch aussagekräftige Dateinamen ersetzten. Auch dies ist mit „rename“ problemlos möglich.
| |
| | |
| rename 's/(\d{8})\.JPG$/Türkeiferien_$1\.jpg/' *.JPG
| |
| rename 's/\d{5}(\d{3})\.JPG$/Türkeiferien_$1\.jpg/' *.JPG
| |
| | |
| * Obiges Beispiel nimmt die ersten acht Zahlen (\d{8}) des Dateinamens aller auf JPG-Dateien (\.JPG) und speichert diese für die spätere Weiterverwendung (daher die runden Klammern um \d{8} herum).
| |
| | |
| * Der neue Dateiname besteht aus der Bezeichnung „Türkeiferien_“ und der vorhin gespeicherten acht Zahlen, die mittels der Variablen $1 angehängt werden; zudem wird die Dateiendung noch in Kleinbuchstaben (\.jpg)umgewandelt.
| |
| | |
| * Das zweite Bbeispiel ist sogar noch ein wenig ausgefeilter, denn es speichert nur die letzten drei Zahlen ((\d{3})) des alten achtzahligen Dateinamens, um sie nachher an die Bezeichnung „Türkeiferien_“ anzufügen.
| |
| | |
| * Neben dem regulären Ausdruck für „irgendeine Zahl, aber kein Buchstabe“ (\d) gibt es natürlich auch noch denjenigen für „irgendeinen Buchstaben, aber keine Zahl“ (\w) oder deren Umkehrung „alles, nur keine Zahl“ (\D) und „alles, nur keinen Buchstaben“ (\W).
| |
| | |
| * Leerzeichen können entweder als solche gesetzt werden (siehe erste Beispiele weiter oben) oder aber mit dem regulären Ausdruck \s – oder natürlich auch mit dessen Umkehr \S („alles, ausser Leerezeichen“) – aufgespürt werden.
| |
| | |
| ====== Komplexere Operationen am Dateinamen ======
| |
| * Natürlich sind auch komplexere Operationen mit „rename“ möglich, welche jedoch ein erweitertes Verständnis der „perl regular expressions“ und bisweilen auch einen großen Zeitaufwand mit sich bringen. Anbei nur ein Beispiel, wie man die Dateigröße an den Dateinamen anhängen kann:
| |
| | |
| rename -n 's/$/",size=".(-s)/e' *.jpg
| |
| | |
| * Oftmals sind allerdings umfangreichere Scripts nötig, da viele Linux-Befehle – darunter leider auch „rename“ – Ordnerstrukturen nicht rekursiv abarbeiten könne. Hier helfen meistens Schlaufen mit Hilfe des Befehl „find“ und Umbennenungen mit „mv“ weiter.
| |
| | |
| ==== prename ====
| |
| * Das Umbenennen einer einzelnen Datei ist keine grosse Herausforderung. Doch wie ist vorzugehen, wenn man Hunderte oder Tausende von Dateien – z. B. Fotos aus einer Digitalkamera oder die eigene Musiksammlung – in einem einzelnen Ordner oder in vielen Unterordnern umbennen muss?
| |
| | |
| * Im grafischen Dateimanager alles markieren und umbenennen funktioniert nicht und jede Datei einzeln umbenennen, dauert viel zu lange. Unter Linux hilft hier „rename“ in Kombination mit den sogenannten „perl regular expressions“ weiter.
| |
| | |
| „Reguläre Ausdrücke“ sind eine Art „Zwischenabfrage“, welche den Dateinamen vor dem eigentlichen Umbenennen durch „rename“ analysieren.
| |
| | |
| * Für die meisten Aktionen reicht der Zusatz 's/suchbegriff/ersetzung/g' mitzugeben, wobei s für „single line“ (Ausdruck muss auf einer Zeile stehen) und g für „global“ (ersetzen, sooft der Ausdruck gefunden wird) steht.
| |
| | |
| * Soll ohne Unterscheidung von Gross- und Kleinschreibung gesucht werden, dann kann Am Ende noch ein i für insensitive (egal, ob gross oder klein geschrieben) mitgegeben werden.
| |
| | |
| ===== Teile aus dem Dateinamen entfernen =====
| |
| * Es gibt viele Situationen, in denen man Teile des Dateinamens entfernt haben möchte. Bei Musiktiteln will man den Namen des Albums beziehungsweise des Interpreten loswerden, bei Bildern doppelt vorhandene Endungen oder überhaupt zuviele Leerzeichen und Bindestriche.
| |
| | |
| rename 's/Amelie//g' *
| |
| rename 's/Amelie \(Soundtrack\) - //g' *
| |
| rename 's/ -//g' *
| |
| | |
| * Das erste Beispiel entfernt das Wort „Amelie“, das zweite Beispiel die gesamte Zeichenfolge „Amelie \(Soundtrack\) - “ aus dem Namen aller Dateien im aktuellen Verzeichnis.
| |
| | |
| * Beachten, dass allfällige Sonderzeichen im Suchbegriff – in diesem Fall die runden Klammern – immer mit einem Backslash gekennzeichnet werden müssen. Das letzte Beispiel zeigt, dass man auch mehrere Leerzeichen problemlos aus dem Dateinamen entfernen kann.
| |
| | |
| ===== Teile innerhalb des Dateinamens ersetzen =====
| |
| * Neben dem Entfernen ungewollter Teile aus dem Dateinamen besteht oftmals auch die Notwendigkeit, einzelne Wörter, Buchstaben oder Zeichen zu ersetzen. wie bereits vorhin erwähnt, muss hier ein besonderes Augenmerk auf das „Escapen“ der Sonderzeichen gelegt werden.
| |
| | |
| rename 's/ /_/g' * oder rename 's/\s+/_/g' *
| |
| rename 's/-/./g' *
| |
| rename 's/\'/’/g' *
| |
| rename 's/^/Amélie_Soundtrack_/' *.ogg
| |
| rename 's/ogg$/ogn/' *.ogg
| |
| | |
| * Das erste Beispiel ersetzt alle Leerzeichen durch Unterstriche, das zweite alle Bindestriche durch Punkte und das dritte alle falschen Apostrophe durch typographisch richtige im Namen aller Dateien im aktuellen Verzeichnis.
| |
| | |
| * Die beiden letzten Beispiele benutzen die Sonderzeichen ^ (= Anfang der Zeile) und $ (= Ende der Zeile), um das Ersetzen auf einen bestimmten Bereich des Dateinamens einzugrenzen; daher kann auch das g für global wegfallen.
| |
| | |
| * Um zu Testen, wie wichtig das „Escapen“ der Sonderzeichen ist, versuchen sie einmal die beiden Befehle „rename 's/ /./g' *“ und „rename 's/./ /g' *“ hintereinander. Auweia!
| |
| | |
| * Dummerweise steht der Punkt in den Regular Expressions für "irgendein Zeichen", d. h. der letzte Befehl ersetzt jedes Zeichen im Dateinamen durch ein Leerzeichen! Der korrekte zweite Befehl muss daher „rename 's/\./ /g' *“ lauten – und zum Retten der Dateiendung anschliessend noch „rename 's/ ogg$/.ogg/g' *“.
| |
| | |
| ===== Gross- und Kleinschreibung des Dateinamens manipulieren =====
| |
| * Die Gross- und Kleinschreibung eines Dateinamens lässt sich ebenfalls sehr einfach mit einem „Einzeiler“ ändern, wobei dies den gesamten Dateinamen, aber auch nur Teile davon betreffen kann.
| |
| | |
| rename 'y/[A-Z]/[a-z]/' *
| |
| rename 's/\.JPG/\.jpg/g' *.JPG
| |
| rename 's/^\w/\U$&/g' *
| |
| | |
| * Das erste Beispiel ersetzt alle grossgeschriebenen Buchstaben durch kleingeschriebene.
| |
| | |
| * Da hier nicht nach einem einzelnen zusammenhängenden Begriff gesucht, sondern ein ganzer Buchstabenbereich analysiert wird und einzelne Zeichen mit einem korrespondierenden Zeichen (eben ein A durch ein a und ein Z durch ein z) ersetzt werden, muss anstelle des s ein y (transliteration) gesetzt werden.
| |
| | |
| * Das zweite Beispiel hingegen ersetzt wiederum nur einen einzigen Begriff, nämlich das gross geschriebene „.JPG“ durch ein klein geschriebenes „.jpg“, daher die bekannte Kombination „'s/ / /g'“.
| |
| | |
| * Das letzte Beispiel sieht ein wenig komplex aus, ist aber leicht erklärt: es wir nach dem Wort (\w) am Anfang (^) der Zeile (/s) gesucht, dann aber nur der erste Buchstabe ($&) gross geschrieben (\U).
| |
| | |
| ===== Teile des Dateinamens umbauen und ergänzen =====
| |
| * Insbesondere bei grösseren digitalen Bildersamlungen möchte man gerne die nichtssagenden Zahlen im Namen, welche von der Digitalkamera generiert werden, durch aussagekräftige Dateinamen ersetzten. Auch dies ist mit „rename“ problemlos möglich.
| |
| | |
| rename 's/(\d{8})\.JPG$/Türkeiferien_$1\.jpg/' *.JPG
| |
| rename 's/\d{5}(\d{3})\.JPG$/Türkeiferien_$1\.jpg/' *.JPG
| |
| | |
| * Obiges Beispiel nimmt die ersten acht Zahlen (\d{8}) des Dateinamens aller auf JPG-Dateien (\.JPG) und speichert diese für die spätere Weiterverwendung (daher die runden Klammern um \d{8} herum).
| |
| | |
| * Der neue Dateiname besteht aus der Bezeichnung „Türkeiferien_“ und der vorhin gespeicherten acht Zahlen, die mittels der Variablen $1 angehängt werden; zudem wird die Dateiendung noch in Kleinbuchstaben (\.jpg)umgewandelt.
| |
| | |
| * Das zweite Bbeispiel ist sogar noch ein wenig ausgefeilter, denn es speichert nur die letzten drei Zahlen ((\d{3})) des alten achtzahligen Dateinamens, um sie nachher an die Bezeichnung „Türkeiferien_“ anzufügen.
| |
| | |
| * Neben dem regulären Ausdruck für „irgendeine Zahl, aber kein Buchstabe“ (\d) gibt es natürlich auch noch denjenigen für „irgendeinen Buchstaben, aber keine Zahl“ (\w) oder deren Umkehrung „alles, nur keine Zahl“ (\D) und „alles, nur keinen Buchstaben“ (\W).
| |
| | |
| * Leerzeichen können entweder als solche gesetzt werden (siehe erste Beispiele weiter oben) oder aber mit dem regulären Ausdruck \s – oder natürlich auch mit dessen Umkehr \S („alles, ausser Leerezeichen“) – aufgespürt werden.
| |
| | |
| ===== Komplexere Operationen am Dateinamen =====
| |
| * Natürlich sind auch komplexere Operationen mit „rename“ möglich, welche jedoch ein erweitertes Verständnis der „perl regular expressions“ und bisweilen auch einen grossen Zeitaufwand mit sich bringen. Anbei nur ein Beispiel, wie man die Dateigrösse an den Dateinamen anhängen kann:
| |
| | |
| rename -n 's/$/",size=".(-s)/e' *.jpg
| |
| | |
| * Oftmals sind allerdings umfangreichere Scripts nötig, da viele Linux-Befehle – darunter leider auch „rename“ – Ordnerstrukturen nicht rekursiv abarbeiten könne.
| |
| | |
| * Hier helfen meistens Schlaufen mit Hilfe des Befehl „find“ und Umbennenungen mit „mv“ weiter.
| |
| | |
| ===== Umbenennen ohne rename =====
| |
| * Sollte der Befehl „rename“ auf dem System nicht vorhanden sein, dann muss auf das Umbenennen mittels „mv“ zurückgegriffen werden.
| |
| | |
| * Da „mv“ keine regulären Ausdrücke versteht, kann hier nur mit den sogenannten „bash string operators“ gearbeitet werden.
| |
| | |
| * Für das Suchen und Ersetzen gibt es grundsätzlich zwei Wege: eine kürzest mögliche Zeichenfolge rechts (${var%t*string}) oder links (${var#string}) des gefundenen Begriffs her zu ersetzen.
| |
| | |
| for i in *.jpg; do mv "$i" "${i%t*.jpg}.jpg"; done
| |
| for f in Türkeiferien_*; do mv "$f" "${f#Türkeiferien_}"; done
| |
| | |
| * Das erste Besipiel würde aus jeder gefundenen Datei von rechts her zuerst die Endung .jpg ausfindig machen, dann alle Buchstaben von rechts nach links zurückgehend löschen (${i%t*}) und schliesslich den neuen Dateinamen mit der Endung .jpg wieder zusammensetzen.
| |
| | |
| * Aus den Dateinamen 001_Türkeifereien, 002_Türkeifereien etc. würden demnach die Dateinamen 001_, 002_ etc.
| |
| | |
| * Das zweite Beispiel würde alle Dateien suchen, die mit „Türkeiferien_“ beginnen, danach von links nach rechts alle Buchstaben löschen.
| |
| | |
| * Aus den Dateinamen Türkeifereien_001, Türkeifereien_002 etc. würden demnach die Dateinamen 001, 002 etc.
| |
| | |
| ====== Umbenennen mit einer Programmschleife ======
| |
| * Mit einer FOR-Schleife könnte man den gleichen Umbenennungsvorgang auch ohne zusätzliche Programme folgendermaßen schaffen:
| |
| | |
| for i in DSC*; do mv $i 2002_10_14-${i#DSC}; done
| |
| | |
| * Meine Problemstellung gerade: Diverse Dateien in diversen Unterverzeichnissen haben "komische" Dateinamen und lassen sich unter Windows nicht entpacken...
| |
| | |
| * Mein quick-Fix: Dateinamen bereinigen (natürlich unter Linux...) und alle nicht Standard Zeichen ersetzen.
| |
| | |
| * In diesem Fall war es für mich ausreichend Buchstaben, Zahlen und den Punkt zu lassen, der Rest wurde durch Unterstriche ersetzt
| |
| | |
| * Dafür verwendete ich folgendes Skript:
| |
| | |
| find -depth -name "* *" | while read file; do
| |
| filePath="$(dirname "${file}")"
| |
| oldFileName="$(basename "${file}")"
| |
| newFileName=${oldFileName//[^a-zA-Z0-9\.]/_}
| |
| mv "${filePath}"/"${oldFileName}" "${filePath}"/"${newFileName}"
| |
| done
| |
| | |
| * Das ganze hat nur noch ein kleines Problem:
| |
| | |
| * Es funktioniert nicht für Dateinamen mit Leerzeichen am Ende des Dateinamens - hier muss das Skript verbessert werden, oder manuell nachgearbeitet.
| |
| | |
| === Dateien löschen (rm) ===
| |
| '''rm''' löscht Dateien
| |
| | |
| '''rm''' [-dfirvR] [-directory] [-force] [-interactive] [-recursive] [-verbose] ''Pfad'' ...
| |
| | |
| '''rm''' löscht Dateien. Normalerweise werden die Verzeichnisse nicht mit gelöscht.
| |
| | |
| * Wenn eine Datei gelöscht werden soll, für die keine Schreibberechtigung besteht, muss der Befehl für diese Datei extra bestätigt werden.
| |
| | |
| * In Verzeichnissen, bei denen das Stickybit gesetzt ist, kann eine Datei nur von ihrem Eigentümer gelöscht werden.
| |
| | |
| * Die Option `-' zeigt an, dass die folgenden Argumente keine Optionen mehr sind. Dadurch ist es möglich, auch Dateinamen, die mit einem `-' anfangen, zu löschen.
| |
| | |
| ==== Vorsicht mit Jokerzeichen (*)! ====
| |
| * Ein Leerzeichen zu viel und die Katastrophe ist perfekt.
| |
| | |
| {| class="wikitable sortable"
| |
| |-
| |
| | | '''rm a*'''
| |
| | | Löscht alle Dateien, die mit einem a beginnen
| |
| |-
| |
| | | '''rm a·*'''
| |
| | | Löscht zuerst alle Dateien, die mit einem '''a''' beginnen und dann alle Dateien
| |
| | |
| |-
| |
| |}
| |
| ==== Optionen ====
| |
| {| class="wikitable sortable"
| |
| |-
| |
| | | '''-d '''
| |
| | | löscht Verzeichnisse mit dem `unlink' Systemaufruf anstelle von rmdir (nur für die Superuserin '''Ruth'''); weil die in einem so gelöschten Verzeichnis enthaltenen Dateien nicht mit gelöscht werden, ist eine anschließende Reparatur des Dateisystems angesagt
| |
| |-
| |
| | | '''-f '''
| |
| | | keine Nachfragen, keine Fehlermeldungen
| |
| |-
| |
| | | '''-i '''
| |
| | | vor dem Löschen jeder Datei wird nochmal nachgefragt
| |
| |-
| |
| | | '''-r '''
| |
| | | der Inhalt aller Unterverzeichnisse und die Verzeichnisse werden mitgelöscht
| |
| |-
| |
| | | '''-v '''
| |
| | | zeigt die Namen aller Dateien noch ein letztes Mal an, bevor sie gelöscht werden
| |
| | |
| |-
| |
| |}
| |
| === Harte und symbolische Links ===
| |
| {| class="wikitable sortable"
| |
| |-
| |
| || Links sind eine Spezialität von Unix-Dateisystemen, die gerne und häufig verwendet werden.
| |
| | |
| * Der Umgang mit ihnen ist eine wichtige und manchmal etwas verkopfte Angelegenheit, die ein Systemverwalter sicher beherrschen muss.
| |
| | |
| * Unix und Linux unterscheiden zwischen Hardlinks (direkte Links) und Symlinks (symbolische Links).
| |
| | |
| * Die Eigenschaften dieser beiden Typen von Links sowie die Techniken, um sie anzulegen bzw. mit ihnen umzugehen sind Inhalt dieses Kapitels.
| |
| ||
| |
| | |
| [[Image:Grafik31.png]]
| |
| |-
| |
| |}
| |
| '''ln''' steht für '''l'''i'''n'''k und erzeugt eine Verknüpfung zu einer Datei oder einem Verzeichnis. Man kann danach auf eine Datei nicht nur über ihren ursprünglichen Namen bzw. Pfad, sondern auch über den Namen des Links zugreifen.
| |
| | |
| * Dies ist zum Beispiel nützlich, wenn ein Programm eine bestimmte Programmbibliothek verlangt, die veraltet ist. Man kann nun einfach eine Verknüpfung mit dem Namen der veralteten Bibliothek auf die installierte Version setzten.
| |
| | |
| * Man unterscheidet zwischen Hardlinks und symbolischen (oder Soft-) Links, die zwar in etwa dasselbe bewirken, aber technisch völlig unterschiedlich realisiert sind. Symbolische Links (Verknüpfungen) können nicht nur auf der Kommandozeile (Terminal), sondern beispielsweise mit den Dateimanagern von GNOME ([http://wiki.ubuntuusers.de/Nautilus#Mausaktionen Nautilus]) und KDE ([http://wiki.ubuntuusers.de/Dolphin#Verknuepfungen-erstellen Dolphin]) erstellt werden.
| |
| | |
| * Aber auch andere [http://wiki.ubuntuusers.de/Dateimanager Dateimanager] können ''"Symlinks"'' erstellen, nur ist diese Funktion im Kontextmenü als ''"Senden an -> Desktop / Arbeitsfläche usw."'' versteckt.
| |
| | |
| ==== Hardlinks ====
| |
| * Ein Hardlink ist einfach ein Verzeichniseintrag mit einem Namen, der auf eine Datei zeigt. Jede Datei hat immer mindestens einen Hardlink, denn ansonsten könnte man sie im Dateisystem nicht finden.
| |
| | |
| * Auch die Verzeichniseinträge '''.''' und '''..''' sind in Wirklichkeit Hardlinks, die auf das aktuelle bzw. das übergeordnete Verzeichnis zeigen. Ein Verzeichnis hat also immer mindestens zwei Hardlinks, nämlich den eigentlichen Namen und '''.''', und zusätzlich noch einen pro untergeordnetem Verzeichnis. (Je ein '''..''' pro Verzeichnis.)
| |
| | |
| * Für normale Operationen wie das Erstellen eines Verzeichnisses oder einer Datei benötigt man natürlich nicht den ln-Befehl.
| |
| | |
| * Dieser wird nur verwendet, um zusätzliche Links zu erzeugen. Wie viele Hardlinks aktuell auf eine Datei oder ein Verzeichnis zeigen, kann man der zweiten Spalte einer [http://wiki.ubuntuusers.de/ls ls -l]-Ausgabe entnehmen.
| |
| | |
| * Diese verschiedenen Links sind exakt gleichwertig und es ist völlig unerheblich, welcher zuerst da war. Änderungen an Inhalt oder Datei-Attributen wirken sich auf alle Links aus. (Weil es sich ja tatsächlich um exakt dieselbe Datei handelt). Erst wenn alle Links auf eine Datei gelöscht wurden, ist die Datei wirklich gelöscht.
| |
| | |
| * Einen gravierenden Nachteil haben Hardlinks allerdings. Auf Grund der Technik, die dahinter steckt, ist es nicht möglich Hardlinks über die Grenzen von Dateisystemen hinweg einzusetzen.
| |
| | |
| * Um sich nicht immer Gedanken darüber machen zu müssen, ob das Ziel vielleicht auf einem anderen Dateisystem liegen könnte, werden deswegen fast ausschließlich "symbolische Verknüpfungen" genutzt.
| |
| | |
| * Das Erzeugen von Hardlinks auf Verzeichnisse ist sogar ganz verboten, weil sonst die Gefahr eines Zirkelschlusses bestünde.
| |
| | |
| * In einem Unix-Dateisystem ist ein Dateiname nur ein Verzeichniseintrag, der in einem Verzeichnis gespeichert ist.
| |
| | |
| * Neben diesem Namen ist immer auch ein Verweis auf die Inode gespeichert, die dann die eigentlichen Eigenschaften (Eigentümer, Gruppenmitgliedschaft, Zugriffsrechte, usw.) der Datei und ihre physikalischen Speicheradressen auf der Platte enthält.
| |
| | |
| * Dieses Prinzip wurde auf den Seiten über [http://www.linux-praxis.de/lpic1/lpi101/inode.html Inodes] und über das [http://www.linux-praxis.de/lpic1/lpi101/ext2.html EXT2 Dateisystem] bereits umfassend dargestellt.
| |
| | |
| * Ein Hardlink ist nichts anderes, als ein neuer Verzeichniseintrag auf eine schon bestehende Inode. Also genau genommen ein zweiter Dateiname für eine Datei.
| |
| | |
| * Weil die Zugriffsrechte, Eigentümer usw. ja in der Inode stehen, haben alle Hardlinks einer Datei die selben solchen Attribute.
| |
| | |
| * Wenn ein oder mehrere Hardlinks auf eine Datei zeigen, so ist nicht mehr zu unterscheiden, welcher davon das Original und welche die Links sind. Es handelt sich ja einfach nur um Namenseinträge, die auf die selbe Inode zeigen.
| |
| | |
| * Das heißt auch, dass Hardlinks immer noch gültig sind, wenn die Datei, auf die sie zeigen gelöscht wurde. Es wurde ja eben nicht die Datei gelöscht, sondern nur einer ihrer Namen. Solange noch weitere Namen existieren, wird die Datei nicht physikalisch gelöscht.
| |
| | |
| * Die Ausgabe des ls -l Kommandos zeigt für jede Datei gleich nach dem Zugriffsmodus die Anzahl der Hardlinks (also der Namenseinträge), die diese Datei besitzt.
| |
| | |
| <u>'''1'''</u> root root 4326 Apr 8 15:02 datei1.txt
| |
| -rw-r--r-- <span ><u>'''5'''</u> root root 1578 Apr 8 15:02 datei2.txt
| |
| | |
| * Auch hier wird nicht zwischen Original und Link unterschieden (geht ja eben auch gar nicht) so dass eine Datei mit nur einem Namen hier eine 1 anzeigt.
| |
| | |
| * Die zweite Datei des obigen Beispiels hat also 5 Namen, das könnte bedeuten, dass die Datei erstellt wurde und anschließend vier Hardlinks auf sie erstellt wurden. Insgesamt existieren also 5 Namenseinträge für diese Datei.
| |
| | |
| * Da die Hardlinks sozusagen innerhalb der Mechanismen eines Dateisystems arbeiten indem sie eigentlich nur Verweise auf schon bestehende Inodes sind, arbeiten diese Links nur innerhalb der Grenzen eines Dateisystems also einer Partition.
| |
| | |
| * Es ist also nicht möglich, Hardlinks auf einer zweiten Partition zu erstellen, die auf eine Datei zeigen, die auf der ersten Partition liegt!
| |
| | |
| * Eine weitere Einschränkung von Hardlinks ist, dass es nicht möglich ist, Hardlinks auf Verzeichnisse zu legen. Es existiert zwar die Option -d (oder -F oder --directory) des Befehls ln, die die Fähigkeit erlauben soll, auf allen Linux-Dateisystemen ist dieses Feature aber verboten.
| |
| | |
| ==== Identifikation von Hardlinks ====
| |
| * Wie oben schon erwähnt, gibt es keine Möglichkeit, zwischen Hardlink und Original zu unterscheiden, weil es ja kein Original gibt, sondern nur mehrere Namen, die alle auf die gleiche Inode verweisen.
| |
| | |
| * Wenn wir nun herausfinden wollen, welche Dateinamen alle die selbe Inode verwenden, gibt es da durchaus eine Möglichkeit:
| |
| | |
| * Zunächst einmal müssen wir herausbekommen, welche Inode von unserer Datei überhaupt belegt wird. Das [http://www.linux-praxis.de/lpic1/manpages/ls.html ls]-Kommando bietet uns mit der Option -i die Möglichkeit, das zu erfahren. Ein ls -i gibt uns zu den Dateinamen die verwendeten Inode-Nummern mit aus.
| |
| | |
| * Dann können wir mit dem Programm [http://www.linux-praxis.de/lpic1/manpages/find.html find] nach allen Dateien suchen, die diese Inode-Nummer benutzen. Allerdings sollten wir das ausschließlich innerhalb der Partition tun, auf der die Datei liegt, die wir untersuchen. Denn zufälligerweise kann ja eine ganz andere Datei auf einem ganz anderen Dateisystem (also auf einer anderen Partition) die selbe Inode-Nummer benutzen.
| |
| | |
| * Spielen wir es einmal durch: Wir befinden uns im Verzeichnis /usr/local/data und das ls -l Kommando zeigt uns eine Datei mit Namen BEISPIEL.DAT folgendermaßen an:
| |
| | |
| -rw-r--r-- 5 root root 1895 Apr 8 15:02 BEISPIEL.DAT
| |
| | |
| * Aus der Angabe direkt nach dem Zugriffsmodus entnehmen wir, dass es insgesamt fünf Dateinamen gibt, die auf ein und dieselbe Inode verweisen. Also neben dieser Datei noch vier weitere. Zunächst müssen wir wissen, welche Inode diese Datei überhaupt benutzt. Dazu geben wir den Befehl
| |
| | |
| ls -i BEISPIEL.DAT
| |
| | |
| * ein und bekommen die folgende Ausgabe:
| |
| | |
| 92550 BEISPIEL.DAT
| |
| | |
| * Die benutzte Inode ist also die Inode Nummer 92550. Jetzt müssen wir herausbekommen, auf welcher Partition wir uns eigentlich befinden und wo sie im Verzeichnisbaum eingehängt ist. Wir geben den Befehl [http://www.linux-praxis.de/lpic1/manpages/df.html df] ohne weitere Parameter ein. Die Ausgabe lautet:
| |
| | |
| /dev/hda2 2071328 1047620 918484 53% /
| |
| /dev/hda5 3099108 1737192 1204484 59% /usr
| |
| /dev/hda6 2071296 767708 1198364 39% /opt
| |
| /dev/hda7 2071296 215212 1750860 11% /home
| |
| | |
| * Nachdem wir uns im Verzeichnis /usr/local/data befinden, können wir also aus dieser Ausgabe schließen, dass wir uns auf der Partition /dev/hda5 befinden und dass diese Partition ins Verzeichnis /usr gemountet ist.
| |
| | |
| * Jetzt rufen wir den [http://www.linux-praxis.de/lpic1/manpages/find.html find]-Befehl auf und weisen ihn an, ab dem Verzeichnis /usr alle Dateien zu suchen, die die Inode 92550 benutzen. Zusätzlich weisen wir ihn noch darauf hin, dass er nur dieses eine Dateisystem durchsuchen soll. Dazu kennt find die Option -xdev. Wir geben folgenden Befehl ein:
| |
| | |
| find /usr -xdev -inum 92550 -print
| |
| | |
| * Der Befehl find sucht ab dem Verzeichnis /usr aber nur innerhalb der Partition (-xdev) alle Dateien, die die Inode 92550 (-inum 92550) besitzen. Die gefundenen Dateien werden ausgegeben (-print). Die Anweisung -print hätten wir unter Linux auch weglassen dürfen, es ist hier die voreingestellte Aktion. Das Ergebnis sieht dann etwa wie folgt aus:
| |
| | |
| /usr/lib/Beispiel/Datei.txt
| |
| /usr/local/data/BEISPIEL.DAT
| |
| /usr/local/lib/Beispiel/Noch_eine
| |
| /usr/openwin/Hier_auch
| |
| /usr/src/abc
| |
| | |
| * Hätten wir dem find-Befehl statt der Aktion -print die Aktion -ls mitgegeben, die alle gefundenen Dateien im selben Format wie ls -dils ausgibt, dann hätten wir die folgende Ausgabe bekommen:
| |
| | |
| 92550 5 -rw-r--r-- 1 root root 1895 Apr 8 15:02 /usr/lib/Beispiel/Datei.txt
| |
| 92550 5 -rw-r--r-- 1 root root 1895 Apr 8 15:02 /usr/local/data/BEISPIEL.DAT
| |
| 92550 5 -rw-r--r-- 1 root root 1895 Apr 8 15:02 /usr/local/lib/Beispiel/Noch_eine
| |
| 92550 5 -rw-r--r-- 1 root root 1895 Apr 8 15:02 /usr/openwin/Hier_auch
| |
| 92550 5 -rw-r--r-- 1 root root 1895 Apr 8 15:02 /usr/src/abc
| |
| | |
| * Eine weitere Möglichkeit der Identifikation von Hardlinks wäre es, ein ls -ilR Kommando (langes Listing mit Inode-Nummern, rekursiv) auszuführen und dessen Ausgabe an [http://www.linux-praxis.de/lpic1/manpages/grep.html grep] weiterzuleiten. Grep würde dann nach der entsprechenden Inode-Nummer am Zeilenanfang suchen. Also für unser opiges Beispiel etwas in der Art:
| |
| | |
| ls -ilR /usr | grep "^ *92550"
| |
| | |
| * Das hat allerdings den Nachteil, dass wir nicht festlegen können, dass nur die Dateien innerhalb einer Partition gesucht werden. Zum anderen ist diese Art der Suche wesentlich langsamer als die mit dem find-Befehl.
| |
| | |
| ==== Symbolische Verknüpfungen ====
| |
| * Symbolische Verknüpfungen (oder "Softlinks") wurden geschaffen, um diese Unzulänglichkeit der Hardlinks zu umgehen. Sie funktionieren ähnlich wie die HTML-Links auf Webseiten.
| |
| | |
| * Ein symbolischer Link ist einfach eine kleine Datei bei der das l-Bit gesetzt ist, und die den Pfad des Zieles enthält. Dieser Pfad kann sowohl relativ ('''../anderes_verz/datei'''), als auch absolut ('''/usr/share/irgendwo/datei''') sein. In einer [http://wiki.ubuntuusers.de/ls ls -l] Auflistung wird das Ziel des Softlinks nach einem Pfeil (->) angezeigt.
| |
| | |
| * Symbolische Verknüpfungen sind, wie schon angedeutet, auch über Dateisystemgrenzen hinweg möglich, weswegen sie bevorzugt eingesetzt werden.
| |
| | |
| * Allerdings fehlt ihnen die direkte Verbindung zum Speicherplatz der Zieldatei. Wird diese gelöscht, so bleibt die Verknüpfung als "toter Link" zurück und zeigt von nun an ins Leere.
| |
| | |
| ==== Symbolische Links ====
| |
| * Die genannten Einschränkungen der Hardlinks (keine Links auf Verzeichnisse/ keine Links über die Dateisystemgrenze hinaus) können mit sogenannten ''symbolischen Links'' umgangen werden. Symbolische Links arbeiten nicht auf der Dateisystemebene, sondern sind einfach Dateien, die nichts anderes enthalten, als den Pfad zu der Datei (oder dem Verzeichnis), auf die sie zeigen.
| |
| | |
| * Damit sie als Links zu erkennen sind, haben sie einen eigenen Dateityp (l), der es dem Betriebssystem klar macht, dass es sich hier um einen Link und nicht um eine reguläre Datei handelt.
| |
| | |
| * Das ls -l Kommando zeigt einen symbolischen Link also als solchen an:
| |
| | |
| -rw-r--r-- 1 root root 276295 Apr 21 19:46 Datei1
| |
| lrwxrwxrwx 1 root root 6 Apr 21 19:46 Datei2 -> Datei1
| |
| | |
| * Sowohl an der Angabe des Dateityps (l, als auch am Dateinamen, dem ein Pfeilsymbol und das Ziel des Links folgt, ist ersichtlich, dass es sich hier um einen symbolischen Link handelt.
| |
| | |
| * Genauso ist ersichtlich, worauf der Link zeigt. Beim Hardlink konnten wir Original und Link nicht unterscheiden, beim symbolischen Link sind sie eindeutig unterscheidbar.
| |
| | |
| * Weil symbolische Links nicht auf der Ebene der Dateisysteme selbst arbeiten reagieren sie aber auch in anderen Beziehungen völlig anders, als die Hardlinks: * Wenn die Datei (oder das Verzeichnis), auf die ein symbolischer Link zeigt nicht mehr existiert (z.B. gelöscht wurde), dann zeigt der symbolische Link "ins Leere", der Link existiert zwar weiter, er funktioniert aber nicht mehr.
| |
| * Wird ein symbolischer Link mit einer relativen Pfadangabe erstellt und anschließend in ein anderes Verzeichnis kopiert, dann wird er womöglich nicht mehr weiter funktionieren, weil vom neuen Verzeichnis aus dieser Pfad nicht existiert.
| |
| | |
| * Andererseits sind die symbolischen Links nicht eingeschränkt, was die Grenzen eines Dateisystems angeht oder die Verwendung für Verzeichnisse.
| |
| | |
| ==== Das Programm ln ====
| |
| * Um Links anzulegen, existiert das Programm [http://www.linux-praxis.de/lpic1/manpages/ln.html ln]. Die Aufrufform ist einfach,
| |
| | |
| * ln [OPTION]... ZIEL [Verknüpfungsname]
| |
| | |
| * oder um mehrere Dateien in ein Verzeichnis zu verlinken:
| |
| | |
| * ln [OPTION]... Ziele... LINKVERZEICHNIS
| |
| | |
| * Wird das Programm ln ohne den Parameter -s oder --symbolic aufgerufen, so wird ein Hardlink erstellt, mit einem dieser beiden Optionsschaltern wird ein symbolischer Link erstellt.
| |
| | |
| * Wenn ein Hardlink erstellt wird, so muss die Datei, auf die der Link verweist existieren, wenn ein symbolischer Link erstellt wird, so gilt das nicht.
| |
| | |
| * Wird beim Aufruf von ln der Linkname weggelassen, so wird ein Link mit gleichem Namen wie die Datei im aktuellen Verzeichnis erzeugt. Das setzt aber natürlich voraus, dass die Datei nicht im aktuellen Verzeichnis liegt.
| |
| | |
| * Werden mehr als zwei Dateinamen angegeben (Datei und Link), so muss der letzte Parameter ein Verzeichnisname sein. In diesem Verzeichnis werden dann Links auf all die Dateien angelegt, die vor diesem letzten Parameter angegeben wurden.
| |
| | |
| * Normalerweise überschreibt das Programm ln keine Dateien, wenn ein Link angelegt werden soll, dessen Namen schon existiert. ln bietet aber eine Fülle von Optionen, die diese Eigenschaft ändert, inclusive der Frage der automatischen Umbenennung von überschriebenen Dateien.
| |
| | |
| ==== Dateien verknüpfen (ln) ====
| |
| '''ln''' (link) erzeugt einen Verzeichniseintrag einer existierenden Datei unter anderem Namen
| |
| | |
| '''ln''' [''Optionen''] ''Quelle'' [''Ziel'']
| |
| '''ln''' [''Optionen''] ''Quelle'' ... ''Zielverzeichnis''
| |
| | |
| * Jede Datei wird bei ihrer Erzeugung mit ihrem Namen in ein Verzeichnis eingetragen. Dieser Eintrag enthält außerdem einen Verweis auf eine Inode, in der die Zugriffsrechte auf die Datei, der Dateityp und gegebenenfalls die Nummern der belegten Datenblöcke eingetragen sind.
| |
| | |
| * Mit dem ln-Kommando wird ein neuer Eintrag in einem Verzeichnis angelegt, der auf die Inode einer existierenden Datei zeigt.
| |
| | |
| * Diese Art Link wird als `Hardlink' bezeichnet. Weil die Zugriffsrechte auf die Datei in der Inode bestimmt werden, sind die Zugriffsrechte auf alle Links einer Datei gleich.
| |
| | |
| * Sie müssen dem ln-Kommando nach den Optionen zuerst den Namen der existierenden Quelldatei(en) angeben und danach den Namen des gewünschten zusätzlichen Eintrags.
| |
| | |
| * Ist das letzte Argument des Aufrufs ein existierendes Verzeichnis, so werden alle als ''Quelle'' aufgelisteten Dateien unter dem gleichen Namen im ''Zielverzeichnis'' in diesem Verzeichnis eingetragen.
| |
| | |
| * Wird nur eine einzige Quelldatei ohne eine Zieldatei oder ein Zielverzeichnis benannt, so wird ein Link unter diesem Namen im aktuellen Verzeichnis angelegt.
| |
| | |
| * Hardlinks können nur auf dem Datenträger angelegt werden, auf dem sich die Datei (und damit die Inode) selbst befindet. Um Links über die Dateisystemgrenzen hinweg anlegen zu können, bietet Linux die Möglichkeit `symbolischer Links'.
| |
| | |
| * In diesen Links ist der absolute Pfad gespeichert, auf dem die gelinkte Datei gefunden werden kann. Ein Zugriff auf diese Datei wird dann vom Betriebssystem automatisch auf die gelinkte Datei umgelenkt.
| |
| | |
| * Im ext2fs können symbolische Links mit Pfadnamen bis zu einer Länge von 60 Zeichen in der Inode selbst gespeichert werden (fast symbolic link).
| |
| | |
| * In allen anderen Fällen wird für den Link ein Datenblock auf der Festplatte belegt.
| |
| | |
| * Normalerweise löscht ln keine existierenden Dateien. Es werden standardmäßig ``hardlinks'' angelegt. Links auf Verzeichnisse oder auf Dateien in anderen Dateisystemen können nur mit symbolischen Links realisiert werden.
| |
| | |
| * Gelegentlich verändert sich das Verhalten eines Programms, wenn es durch einen Link unter einem anderen Namen aufgerufen wird. (Das funktioniert natürlich nur, wenn diese Änderung im Programm vorgesehen ist.)
| |
| | |
| ===== Beispiele =====
| |
| * Im folgenden Beispiel wird eine Verknüpfung ("Verknüpfung_mit_Tagesplaner") im Home-Verzeichnis des Benutzers Benutzer zu einer Datei mit dem Namen "haupt.doc" auf dem Desktop erstellt:
| |
| | |
| ln -s /home/Benutzer/Dokumente/Tagesplaner/Aufgaben/haupt.doc /home/Benutzer/Arbeitsfläche/Verknüpfung_mit_Tagesplaner
| |
| | |
| * Weitere Beispiele zur praktischen Verwendung finden sich im Artikel [http://wiki.ubuntuusers.de/opt opt].
| |
| | |
| ===== Hinweis =====
| |
| * Wenn bei Erstellung eines symbolischen Links der erste Parameter ein relativer Pfad ist, ist dieser relativ zum zweiten Parameter (dem Link), nicht zu dem Ort, an dem man sich gerade befindet (da der Pfad dann als relativer Pfad gespeichert wird).
| |
| | |
| ==== Verknüpfung löschen ====
| |
| * Um eine Verknüpfung zu löschen, kann man * in einer Konsole den Befehl [http://wiki.ubuntuusers.de/rm rm]
| |
| * einen beliebigen [http://wiki.ubuntuusers.de/Dateimanager Dateimanager]
| |
| | |
| * verwenden.
| |
| | |
| ==== Tote Verknüpfungen aufspüren ====
| |
| * Folgender Befehl sucht im aktuellen Verzeichnis ('''.''') nach fehlerhaften Links:
| |
| | |
| * find -L . -type l
| |
| | |
| ==== mount --bind ====
| |
| * Eine weitere - allerdings eher selten genutzte - Möglichkeit, Daten an mehreren Orten im Dateisystem erscheinen zu lassen, bietet der Befehl [http://wiki.ubuntuusers.de/mount#Einzelne-Ordner-einbinden mount]: Mit
| |
| | |
| mount --bind /Pfad1/Verzeichnis1 /Pfad2/Verzeichnis2
| |
| | |
| (wobei Verzeichnis1 und Verzeichnis2 tatsächlich existieren müssen) erscheint im Dateimanager bis zum nächsten Systemstart ''anstelle'' des Inhalts von Verzeichnis2 der Inhalt von Verzeichnis1.
| |
| | |
| ==== Kopieren symbolischer Links ====
| |
| * Wenn ein symbolischer Link mit dem Befehl [http://www.linux-praxis.de/lpic1/manpages/cp.html cp] kopiert wird, ohne dass dazu bestimmte Optionen gegeben werden, so wird nicht etwa der Link kopiert, sondern die Datei, auf die der Link zeigt. Das Ergebnis (die Zieldatei) ist jetzt also kein Link, sondern eine reguläre Datei. Man spricht in diesem Zusammenhang von der Dereferenzierung eines Links.
| |
| | |
| * Dereferenzierung bedeutet, dass der Link zurückverfolgt wird, und durch das ausgetaucht wird, auf das er zeigt.
| |
| | |
| * Um das zu vermeiden, muss dem cp-Befehl eine spezielle Option mitgegeben werden, die diese Dereferenzierung unterbindet. Wenn wir also einen symbolischen Link als solchen kopieren wollen, das heißt wenn das Ziel der Kopieraktion wiederum ein Link sein soll, so müssen wir dem Kopierbefehl die Option -d oder --no-dereference mitgeben.
| |
| | |
| * Aber bitte Vorsicht walten lassen! Wenn ein symbolischer Link als Link kopiert wird, dann wird der Link genauso kopiert, wie er war. Falls er keine absolute, sondern eine relative Pfadangabe zu dem Objekt beinhaltet, auf das er verweist, so wird die Kopie genau die Selbe Pfadangabe haben. Es ist nicht gewährleistet, dass diese Angabe von der neuen Lokalität aus immer noch stimmt.
| |
| | |
| * Der cp-Befehl ist selbst auch in der Lage, Links zu erzeugen statt Dateien zu kopieren. Mit der Option -l erzeugt er Hardlinks statt Kopien und mit -s symbolische Links.
| |
| | |
| ==== Verzeichnis mit Hard-Links kopieren ====
| |
| * Wenn man versucht ein Verzeichnis mit Hard-Links einfach so zu kopieren, erstellt man für jede Datei eine neue im Zielverzeichnis, auch wenn im Original zwei Dateien auf die gleichen Daten auf der Festplatte zeigen (hard link).
| |
| | |
| * In meinem Fall hatte ich ein inkrementelles Backup gemacht, bei dem alle unveränderten Dateien nur “hart” mit der Datei aus dem letzten Backup verlinkt wurden, so habe ich jeweils einen Snapshot des so gesicherten Verzeichnisses ohne sehr viel Platz einzunehmen. Beim Versuch meine Backup-Platte auf eine Größere umzuziehen sagte er mir dann, dass mir ein paar TB an Platz fehlen.
| |
| | |
| * Die Lösung ist einfach: Hard-Links mit kopieren. Das mache ich mit dem gleichen Tool mit dem ich das Backup auch erstellt habe, rsync:
| |
| | |
| rsync -a -H -v /altePlatte/backup /neuePlatte/backup
| |
| | |
| * Die Optionen machen folgendes:
| |
| | |
| {| class="wikitable sortable"
| |
| |-
| |
| | | -a
| |
| | | Ist eine zusammenfassung (fast) aller Optionen die man benötigt um ein Backup mit rsync zu machen
| |
| |-
| |
| | | -H
| |
| | | Der springende Punkt – sucht nach Hard-Links und stellt diese im Zielverzeichnis wieder her
| |
| |-
| |
| | | -v
| |
| | | Zeigt welche Datei gerade kopiert wird. Gibt mir ein besseres Gefühl, wenn ich nicht Stundenlang auf einen leeren Bildschirm gucke und einfach nur hoffe, dass im Hintergrund alles läuft.
| |
| |-
| |
| |}
| |
| * Vorsicht: die “-H”-Option benötigt ziemlich viel Speicher, weil rsync sich für jede Datei merken muss, wo ihre Daten liegen.
| |
| | |
| ==== Verwenden von Links zur Systemadministration ====
| |
| * In der Systemverwaltung werden Links auf vielfältige Weise eingesetzt. Dabei kommen sowohl Hard- als auch symbolische Links zur Anwendung. Ein paar Beispiele:
| |
| | |
| ===== Vermeidung versehentlichen Löschens mit Hardlinks =====
| |
| * Wichtige Systemdateien können an andere Orte gelinkt werden, wo sie sozusagen eine Versicherung gegen versehentliches Löschen bieten. Nehmen wir an, Sie erstellen ein Verzeichnis /etc2 und verlinken alle wichtigen Dateien in /etc mit Hardlinks in dieses Verzeichnis.
| |
| | |
| * Sollte jetzt eine Datei in /etc gelöscht werden, so steht sie uns immer noch in der aktuellsten Version in /etc2 zur Verfügung.
| |
| | |
| ===== Zentrale Verwaltung wichtiger Startdateien in den Userverzeichnissen =====
| |
| * Jeder User hat in seinem Home-Verzeichnis verschiedene Startdateien oder andere Konfigurationsdateien.
| |
| | |
| * Soll sichergestellt werden, dass alle User immer die gleichen Einstellungen besitzen, so könnten all diese Dateien Hardlinks auf einen Prototyp sein.
| |
| | |
| * Wenn der Systemverwalter jetzt für alle User eine Veränderung vornehmen will, so muss er nur eine dieser Dateien (etwa den Prototyp) verändern und alle Dateien der User sind mitverändert.
| |
| | |
| ===== Symbolische Links auf Verzeichnisse =====
| |
| * Wenn bestimmte Teile des Verzeichnisbaums ReadOnly gemountet sein sollen, aber andererseits
| |
| | |
| * Unterverzeichnisse dieser Teile beschreibbar sein müssen, so können diese Unterverzeichnisse symbolische Links auf andere Unterverzeichnisse sein, die nicht auf ReadOnly-gemounteten Partitionen liegen.
| |
| | |
| * Das /usr Verzeichnis wird z.B. gerne ReadOnly gemountet, enthält aber Verzeichnisse wie tmp oder spool, die beschreibbar sein müssen. Diese Verzeichnisse sind oft symbolische Links auf entsprechende Verzeichnisse unter /var. Dort sind diese Verzeichnisse tatsächlich beschreibbar.
| |
| | |
| ==== {{anchor|gpl}} Optionen ====
| |
| {| class="wikitable sortable"
| |
| |-
| |
| | | '''-b '''
| |
| | | sichert Dateien, anstatt sie zu löschen (mit Option -f)
| |
| |-
| |
| | | '''-d '''
| |
| | | unter Linux ohne Funktion
| |
| |-
| |
| | | '''-f oder --force'''
| |
| | | vorhandene Ziele entfernen
| |
| |-
| |
| | | '''-i oder --interactive'''
| |
| | | fragt vor dem Überschreiben nach
| |
| |-
| |
| | | '''-S ''Endung'' '''
| |
| | | setzt die Endung für die Sicherung von Dateien auf ''Endung''. Standardwert ist `~'. Die Endung kann auch mit der Umgebungsvariablen SIMPLE_BACKUP_SUFFIX bestimmt werden. Die Option -S hat Vorrang vor der Umgebungsvariablen.
| |
| |-
| |
| | | '''-s oder --symbolic'''
| |
| | | erzeugt eine symbolische Verknüpfung anstatt eines Hardlinks
| |
| |-
| |
| | | '''-v '''
| |
| | | gibt die Dateinamen auf den Bildschirm
| |
| |-
| |
| |}
| |
| * Die gleiche Funktionalität wie ln hat auch der Befehl [http://wiki.ubuntuusers.de/cp cp] in Verbindung mit den Optionen -l (Hardlink) oder -s (Softlink). Außerdem lassen sich Softlinks in den grafischen Dateimanagern durch Kopieren mit gleichzeitig gedrückten Tasten ⇧ und Strg einrichten.
| |
| | |
| * Der Anhang für Sicherheitskopien ist ~, außer wenn er --suffix oder SIMPLE_BACKUP_SUFFIX gesetzt wurde. Die Versionskontrolle kann mit --backup oder VERSION_CONTROL gesetzt werden. Mögliche Werte sind:
| |
| | |
| {| class="wikitable sortable"
| |
| |-
| |
| | | none, off
| |
| | | Niemals Sicherung erzeugen (selbst wenn --backup angegeben wurde)
| |
| |-
| |
| | | numbered, t
| |
| | | Erzeugen von nummerierten Sicherheitskopien
| |
| |-
| |
| | | existing, nil
| |
| | | Nummeriert wenn nummerierte Backups existieren, sonst einfach.
| |
| |-
| |
| | | Simple, never
| |
| | | Immer einfache Sicherheitskopien erzeugen
| |
| | |
| |-
| |
| |}
| |
| ==== Symlinks ====
| |
| * symbolic link maintenance utility.
| |
| | |
| symlinks [ -cdorstv ] dirlist
| |
| | |
| '''symlinks''' is a useful utility for maintainers of FTP sites, CDROMs, and Linux software distributions. It scans directories for symbolic links and lists them on stdout, often revealing flaws in the filesystem tree.
| |
| | |
| * Each link is output with a classification of relative, '''absolute, dangling, messy, lengthy, or other_fs'''. * '''relative''' links are those expressed as paths relative to the directory in which the links reside, usually independent of the mount point of the filesystem.
| |
| * '''absolute''' links are those given as an absolute path from the root directory as indicated by a leading slash (/).
| |
| * '''dangling''' links are those for which the target of the link does not currently exist. This commonly occurs for absolute links when a filesystem is mounted at other than its customary mount point (such as when the normal root filesystem is mounted at /mnt after booting from alternative media).
| |
| * '''messy''' links are links which contain unnecessary slashes or dots in the path. These are cleaned up as well when -c is specified.
| |
| * '''lengthy''' links are links which use "../" more than necessary in the path (eg. /bin/vi -> ../bin/vim) These are only detected when -s is specified, and are only cleaned up when -c is also specified.
| |
| * '''other_fs''' are those links whose target currently resides on a different filesystem from where symlinks was run (most useful with -r ).
| |
| | |
| * symlinks does not recurse or change links across filesystems.
| |
| | |
| ===== OPTIONS =====
| |
| {| class="wikitable sortable"
| |
| |-
| |
| | | '''-c'''
| |
| | | convert absolute links (within the same filesystem) to relative links. This permits links to maintain their validity regardless of the mount point used for the filesystem -- a desirable setup in most cases. This option also causes any messy links to be cleaned up, and, if -s was also specified, then lengthy links are also shortened. Links affected by -c are prefixed with changed in the output.
| |
| |-
| |
| | | '''-d'''
| |
| | | causes dangling links to be removed.
| |
| |-
| |
| | | '''-o'''
| |
| | | fix links on other filesystems encountered while recursing. Normally, other filesystems encountered are not modified by symlinks.
| |
| |-
| |
| | | '''-r'''
| |
| | | recursively operate on subdirectories within the same filesystem.
| |
| |-
| |
| | | '''-s'''
| |
| | | causes lengthy links to be detected.
| |
| |-
| |
| | | '''-t'''
| |
| | | is used to test for what symlinks would do if -c were specified, but without really changing anything.
| |
| |-
| |
| | | '''-v'''
| |
| | | show all symbolic links. By default, relative links are not shown unless -v is specified.
| |
| | |
| |-
| |
| |}
| |
| | |
| == Dateien ausgeben ==
| |
| | |
| === Dateiinhalte anzeigen (cat) ===
| |
| | |
| <div style="margin-left:1.501cm;margin-right:0cm;"><tt>'''cat'''</tt> (con''cat''enate) verkettet Dateien und schreibt sie in die Standardausgabe
| |
| | |
| <div style="margin-left:0cm;margin-right:0cm;">'''cat''' [-benstuvAET] [-number] [-number-nonblank] [-squeeze-blank] [-show-nonprinting] [-show-ends] [-show-tabs] [-show-all] [''Datei'' ...]
| |
| | |
| <tt>'''cat'''</tt> liest beliebige Dateien und schreibt sie ohne Veränderung in die Standardausgabe. Durch Umlenkung der Ausgabe auf eine Datei ([../../../../ebooks/computer/betriebssysteme/linux/allgemein/unsortiert/linux_anwender_handbuch/linux_anwenderhandbuch_7-0/node26.html#umleitung siehe Ausgabeumleitung]) können so Dateien verkettet werden.
| |
| | |
| Außerdem wird <tt>cat</tt> häufig benutzt, um Dateien an Programme zu übergeben, die nur von der Standardeingabe lesen. (Solche Programme werden im allgemeinen als Filter bezeichnet.)
| |
| | |
| Für die Übergabe steht entweder die Ausgabeumlenkung der Shell mit `>' und `>>' zur Verfügung, oder die Ausgabe wird durch eine [../../../../ebooks/computer/betriebssysteme/linux/allgemein/unsortiert/linux_anwender_handbuch/linux_anwenderhandbuch_7-0/node26.html#pipelines Pipeline |] an den Filter weitergeleitet.
| |
| | |
| ==== Beispiele ====
| |
| | |
| Mit dem <tt>cat</tt>-Kommando können Dateien ausgedruckt werden. Mit dem Kommando
| |
| | |
| cat Adressenliste > /dev/lp1
| |
| | |
| können Sie die Datei <tt>Adressenliste</tt> direkt der Gerätedatei /dev/lp1 zuführen, die den ersten parallelen Druckerport im System darstellt. Diese Methode ist aber sehr unelegant.
| |
| | |
| Sie umgeht und blockiert den Druckerspooler <tt>lpd</tt>, der über die reine Auslieferung hinaus noch die Formatierung der Dokumente erledigen kann.
| |
| | |
| Wenn ein Druckerdämon installiert ist, sollten Sie die ,,direkte`` Methode nur in Ausnahmefällen benutzen.
| |
| | |
| Wenn Sie zwei Dateien durch Umlenkung der Ausgabe von <tt>cat</tt> verketten wollen, müssen Sie den Standardausgabekanal immer in eine dritte Datei zielen lassen.
| |
| | |
| cat foo bar > foo
| |
| cat: foo: input file is output file
| |
| | |
| führt NICHT zum erwünschten Ergebnis. Die Datei `foo' wird von der Shell vor der Ausführung von <tt>cat</tt> gelöscht, um die Ausgabe des Kommandos dorthin umzulenken. <tt>cat</tt> erkennt noch, dass eine Eingabedatei mit der Ausgabedatei übereinstimmt, Ihre Daten sind aber bereits verloren.
| |
| | |
| Ein verwandtes Problem kann beim Anhängen von Daten an eine bestehende Datei entstehen. Der Befehl
| |
| | |
| <div style="margin-left:0cm;margin-right:0cm;">$ cat foo bar >> foo
| |
| cat: foo: input file is output file
| |
| $ _
| |
| | |
| würde zu einem ,,Kurzschluß`` führen, weil der schreibende Dateizeiger immer dem lesenden eine Dateilänge vorauseilen würde. Nicht unbedingt das gewünschte Ergebnis. <tt>cat</tt> erkennt diesen Fehler und verweigert die Ausführung. Die Datei <tt>foo</tt> bleibt also unverändert erhalten.
| |
| | |
| ==== Problembehebung ====
| |
| | |
| Nach der Anzeige einer Binärdatei mit cat ist reaggiert das Terminal nicht mehr normal.* Das Terminal kann mit <tt>'''reset '''</tt>neu initialisiert werden.
| |
| | |
| ==== Optionen ====
| |
| | |
| {| class="wikitable sortable" style="border-spacing:0;margin:auto;width:17.501cm;"
| |
| |-
| |
| | style="background-color:transparent;border-top:0.05pt solid #000000;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-b '''</tt>
| |
| | style="background-color:transparent;border:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | alle nicht leeren Zeilen erhalten eine Zeilennummer
| |
| |-
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-e '''</tt>
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | das gleiche wie <tt>-vE</tt>
| |
| |-
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-n '''</tt>
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | sämtliche Zeilen werden numeriert
| |
| |-
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-s '''</tt>
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | mehrere leere Zeilen in Folge werden zu einer einzigen leeren Zeile zusammengefaßt
| |
| |-
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-t '''</tt>
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | das gleiche wie <tt>-vT</tt>
| |
| |-
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-u '''</tt>
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | ohne Funktion
| |
| |-
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-v '''</tt>
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | alle Kontrollzeichen außer TAB und NEWLINE werden angezeigt
| |
| |-
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-A '''</tt>
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | das gleiche wie <tt>-vET</tt>
| |
| |-
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-E '''</tt>
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | gibt ein `<tt>$</tt>' Zeichen am Ende jeder Zeile aus
| |
| |-
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-T '''</tt>
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | die TAB werden als <tt>^I</tt> angezeigt
| |
| | |
| |-
| |
| |}
| |
| ==== Dateien rückwärts ausgeben (tac) ====
| |
| | |
| <tt>'''tac'''</tt> wie cat, nur umgekehrt
| |
| | |
| '''tac''' [-br] [-s ''Trenner''] [-before] [-regex] [-separator=''Trenner''] [''Datei'' ...]
| |
| | |
| <tt>'''tac'''</tt> arbeitet in vieler Hinsicht wie <tt>cat</tt>. Es werden die einzelnen Felder der ''Datei'' zeilenweise ausgegeben, allerdings das letzte zuerst. Als Feldtrenner dient das Zeilenende, wenn kein anderer angegeben ist.
| |
| | |
| Der Feldtrenner wird zu dem Feld gezählt, das er abschließt, also an dessen Ende ausgegeben.
| |
| | |
| ===== Optionen =====
| |
| | |
| {| class="wikitable sortable" style="border-spacing:0;margin:auto;width:17.501cm;"
| |
| |-
| |
| | style="background-color:transparent;border-top:0.05pt solid #000000;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-b '''</tt>
| |
| | style="background-color:transparent;border:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | (before) der Feldtrenner wird zum darauffolgenden Feld gezählt, also an dessen Anfang ausgegeben.
| |
| |-
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-r '''</tt>
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | der Feldtrenner ist ein regulärer Ausdruck
| |
| |-
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-s ''Trenner'' '''</tt>
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | benutzt ''Trenner'' als Feldtrenner
| |
| | |
| |-
| |
| |}
| |
| === Binärdateien anzeigen (od) ===
| |
| | |
| <tt>'''od'''</tt> (octal dump) zeigt Dateien im oktalen, hexadezimalen oder in anderen Formaten an.
| |
| | |
| <div style="margin-left:0cm;margin-right:0cm;">'''od''' [-abcdfhiloxv] [-s [''Länge'']] [-w [''Anzahl'']] [-A ''Positionsformat''] [-j ''Anzahl''] [-N ''Anzahl''] [-t ''Format''] [-skip-bytes=''Anzahl''] [-address-radix=''Positionsformat''] [-read-bytes=''Anzahl''][-format=''Format''] [-output-duplicates] [-strings[=''Anzahl'']] [-width[=''Anzahl'']] [''Datei'' ...]
| |
| | |
| <tt>'''od'''</tt> liest die angegebenen Dateien oder die Standardeingabe (wenn keine Datei oder anstelle einer Datei `-' angegeben ist) und gibt die Bytes formatiert und kodiert auf die Standardausgabe. Jede Ausgabezeile enthält in der ersten Spalte die Positionsnummer des ersten in der Zeile dargestellten Bytes (vom Dateianfang gezählt).
| |
| | |
| In den darauffolgenden Spalten werden die Daten aus der Datei in einem durch die Optionen kontrollierten Format angezeigt. In der Standardeinstellung ohne Optionen gibt <tt>od</tt> die Position als 7-stellige Oktalzahl und die Daten in 8 Spalten zu je zwei Bytes in oktaler Darstellung aus.
| |
| | |
| ==== Optionen ====
| |
| | |
| {| class="wikitable sortable" style="border-spacing:0;margin:auto;width:17.501cm;"
| |
| |-
| |
| | style="background-color:transparent;border-top:0.05pt solid #000000;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-A ''Positionsformat'' '''</tt>
| |
| | style="border:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | zeigt die Position des ersten in einer Zeile dargestellten Bytes im Positionsformat; die folgenden Formate stehen zur Auswahl:
| |
| | |
| -d siebenstellige Dezimalzahl
| |
| | |
| -o siebenstellige Oktalzahl (Voreinstellung)
| |
| | |
| -x sechsstellige Hexadezimalzahl
| |
| | |
| -n keine Positionsangabe
| |
| |-
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-j ''Anzahl'' '''</tt>
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | überspringt die ersten Anzahl Bytes der Datei und beginnt erst danach mit der Ausgabe; wenn die Zahl mit `<tt>0x</tt>' oder `<tt>0X</tt>' beginnt, wird sie als Hexadezimalzahl interpretiert, beginnt sie mit einer Null, wird sie als Oktalzahl behandelt, sonst als Dezimalzahl; der Zahl kann einer der Buchstaben <tt>b</tt> (blocks=512), <tt>k</tt> (kilo=1024) oder <tt>m</tt> (mega=1048576) folgen, die die Anzahl mit den entsprechenden Einheiten multiplizieren
| |
| |-
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-N ''Anzahl'' '''</tt>
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | gibt nur die angegebene Anzahl Bytes von der Datei aus; die Anzahl kann wie bei der `<tt>-j</tt>' Option von einer Einheit gefolgt werden
| |
| |-
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-t ''Format'' '''</tt>
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | wählt die Codierung für die Datenausgabe; wenn die <tt>-t</tt> Option mehrfach benutzt wird oder mehrere Formate gleichzeitig angegeben werden, gibt od für jedes Format jeweils eine entsprechende Zeile aus; folgende Formate werden unterstützt
| |
| | |
| a (ascii) setzt das achte Datenbit aller Zeichen auf null, die druckbaren ASCII Zeichen werden als solche ausgegeben, und die nichtdruckbaren Steuerzeichen werden mit ihren in der ASCII Tabelle verwendeten ``Namen'' bezeichnet; so wird das Zeilenende als CR bezeichnet, ein horizontaler Tabulator mit TAB und so weiter
| |
| | |
| c (character) gibt die druckbaren ASCII Zeichen als solche aus, die nichtdruckbaren Zeichen werden, sofern möglich, als Backslashsequenz ausgegeben; \f ist hier z. B. ein Zeilenende, \t ein Tabulator und so weiter; Bytes die nicht druckbar sind und auch nicht als Backslashsequenz ausgegeben werden können, werden als Oktalzahl dargestellt
| |
| | |
| d (decimal) gibt die Daten als vorzeichenbehaftete Dezimalzahlen aus; voreingestellt sind vier Bytes je Dezimalzahl
| |
| | |
| f (float) gibt die Daten als Fließkommazahlen aus; voreingestellt sind acht Bytes je Fließkommazahl
| |
| | |
| o (octal) gibt die Daten als Oktalzahlen aus; voreingestellt sind vier Bytes je Oktalzahl u (unsigned) gibt die Daten als vorzeichenlose Dezimalzahl aus; voreingestellt sind vier Bytes je Dezimalzahl
| |
| | |
| x (heX) gibt die Daten als Hexadezimalzahlen aus; voreingestellt sind vier Bytes je Hexadezimalzahl
| |
| | |
| Außer die Typen <tt>a</tt> und <tt>c</tt>, die immer einzelne Bytes anzeigen, kann die Anzahl der Bytes, die in jeweils eine Zahl des bestimmten Typs umgewandelt werden sollen, durch eine dem Typkennzeichner unmittelbar folgende Zahl bestimmt werden. Die Anzahl der Bytes je Zahl kann auch durch Buchstabenkennungen angegeben werden, die den C-Datentypen entsprechen. Für die Ganzzahltypen (<tt>d</tt>, <tt>u</tt>, <tt>x</tt>, <tt>o</tt>) gibt es die folgenden Möglichkeiten:
| |
| | |
| C (Char) ist ein Byte lang
| |
| | |
| S (Short) ist zwei Bytes lang
| |
| | |
| I (Integer) ist vier Bytes lang
| |
| | |
| L (Long) ist auch vier Bytes lang
| |
| | |
| für Fließkommazahlen können die folgenden Optionen verwendet werden
| |
| | |
| F (Float) ist vier Bytes lang
| |
| | |
| D (Double) ist acht Bytes lang
| |
| | |
| L (Long Double) ist auch acht Bytes lang
| |
| |-
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-v '''</tt>
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | gibt auch die doppelten Zeilen aus; normalerweise werden ganze Zeilen, die der zuletzt angezeigten Zeile vollständig entsprechen, durch ein Asterisk `<tt><nowiki>*</nowiki></tt>' dargestellt
| |
| |-
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-s [''Länge''] '''</tt>
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | gibt nur die gültigen C-Zeichenketten (Folgen von druckbaren ASCII Zeichen, durch ein Nullbyte beendet) mit mindestens der angegebenen ''Länge'' aus; Voreinstellung für Länge ist drei Zeichen
| |
| |-
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-w [''Anzahl''] '''</tt>
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | setzt die Anzahl der umgewandelten Bytes, die in einer Zeile ausgegeben werden; die Anzahl muss ein vielfaches der Länge jedes Ausgabetyps sein; Voreinstellung ist 16
| |
| |-
| |
| |}
| |
| Die folgenden Optionen übersetzen die nicht dem POSIX Format entsprechenden alten Optionen in die neuen, dem POSIX Standard entsprechenden Optionen, wie sie oben aufgeführt sind.
| |
| | |
| {| class="wikitable sortable" style="border-spacing:0;margin:auto;width:17.501cm;"
| |
| |-
| |
| | style="background-color:transparent;border-top:0.05pt solid #000000;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-a '''</tt>
| |
| | style="border:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | gibt benannte ASCII Zeichen aus, wie <tt>-t a</tt>
| |
| |-
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-b '''</tt>
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | gibt die Daten Byteweise als Oktalzahlen aus, wie <tt>-t oC</tt>
| |
| |-
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-c '''</tt>
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | gibt druckbare Zeichen oder Backslashsequenzen aus, wie <tt>-t c</tt>
| |
| |-
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-d '''</tt>
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | gibt die Daten als vorzeichenlose kurze Dezimalzahlen aus, wie <tt>-t u2</tt>
| |
| |-
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-f '''</tt>
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | gibt die Daten als Fließkommazahlen mit vier Bytes je Zahl aus, wie <tt>-t fF</tt>
| |
| |-
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-h '''</tt>
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | gibt die Daten als vierstellige Hexadezimalzahl aus, wie <tt>-t xL</tt>
| |
| |-
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-i '''</tt>
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | gibt die Daten als vorzeichenbehaftete Dezimalzahl mit zwei Bytes je Zahl aus, wie <tt>-t d2</tt>
| |
| |-
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-l '''</tt>
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | gibt die Daten als vorzeichenbehaftete Dezimalzahl mit vier Bytes je Zahl aus, wie <tt>-t dL</tt>
| |
| |-
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-o '''</tt>
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | gibt die Daten als Oktalzahlen mit zwei Bytes je Zahl aus, wie <tt>-t oS</tt>
| |
| |-
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-x '''</tt>
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | gibt die Daten als Hexadezimalzahlen mit zwei Bytes je Zahl aus, wie <tt>-t x2</tt>
| |
| | |
| |-
| |
| |}
| |
| === Dateianfang anzeigen (head) ===
| |
| | |
| <tt>'''head'''</tt> schreibt den Anfang einer Datei auf die Standardausgabe
| |
| | |
| <div style="margin-left:0cm;margin-right:0cm;">'''head''' [-c ''Anzahl''[bkm]] [-n ''Anzahl''] [-qv] [-bytes=''Anzahl''[bkm]] [-lines=''Anzahl''] [-quiet] [-silent] [-verbose] [''Datei ...'']
| |
| | |
| <tt>'''head'''</tt> schreibt die ersten (10) Zeilen von der ''Datei'' auf den Bildschirm. Wenn keine ''Datei'' oder `-'angegeben wird, liest <tt>head</tt> von der Standardeingabe. Wird mehr als eine ''Datei'' angegeben, so wird der Dateiname, in `==>' und `<==' eingeschlossen, der Ausgabe vorangestellt.
| |
| | |
| ==== Optionen ====
| |
| | |
| {| class="wikitable sortable" style="border-spacing:0;margin:auto;width:17.501cm;"
| |
| |-
| |
| | style="background-color:transparent;border-top:0.05pt solid #000000;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-c ''Anzahl'' '''</tt>
| |
| | style="background-color:transparent;border:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | gibt die angegebene ''Anzahl'' Bytes aus. Optional kann die Blockgröße durch einen der Zahl folgenden Buchstaben verändert werden:
| |
| | |
| b Blocks zu 512 Byte
| |
| | |
| k Blocks zu 1 Kilobyte
| |
| | |
| m Blocks zu 1 Megabyte
| |
| |-
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-n ''Anzahl'' '''</tt>
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | gibt die ersten ''Anzahl'' Zeilen aus
| |
| |-
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-q '''</tt>
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | (quiet) unterdrückt die Ausgabe des Dateinamen
| |
| |-
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-v '''</tt>
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | (verbose) gibt die Dateinamen immer aus
| |
| |-
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-''Anzahl'' '''</tt>
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | gibt die angegebene Zahl Zeilen aus
| |
| | |
| |-
| |
| |}
| |
| === Dateiende ausgeben (tail) ===
| |
| | |
| <tt>'''tail'''</tt> zeigt das Ende einer Datei
| |
| | |
| <div style="margin-left:0cm;margin-right:0cm;">'''tail''' [-c [+]''N''[bkm]] [-n [+]''N''] [-fqv] [-bytes=[+]''N''[bkm]] [-lines=[+]''N''] [-follow] [-quiet] [-silent] [-verbose] [''Datei'' ...]
| |
| | |
| <tt>'''tail'''</tt> druckt die letzten (10) Zeilen einer ''Datei'' oder von der Standardeingabe, wenn keine Datei angegeben wird. Ein einzelnes `-' anstelle eines Dateinamens meint ebenfalls die Standardeingabe.
| |
| | |
| Werden mehrere Dateien angegeben, so wird das Ende jeder Datei mit dem Dateinamen eingeschlossen in `==>' und `<==' eingeleitet.
| |
| | |
| ==== Optionen ====
| |
| | |
| {| class="wikitable sortable" style="border-spacing:0;margin:auto;width:17.501cm;"
| |
| |-
| |
| | style="background-color:transparent;border-top:0.05pt solid #000000;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-c ''N'' '''</tt>
| |
| | style="background-color:transparent;border:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | zeigt ''N'' Bytes vom Ende der ''Datei''<nowiki>; der Anzahl kann eine Einheit folgen; möglich sind: </nowiki>
| |
| | |
| b Blöcke mit 512 Bytes
| |
| | |
| k Blöcke mit Kilobytes
| |
| | |
| m Blöcke mit Megabytes
| |
| |-
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-f '''</tt>
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | (follow) gibt immer wieder das Dateiende aus, dadurch kann die Entwicklung einer wachsenden Datei beobachtet werden; diese Option funktioniert nur, wenn nur eine einzige Datei angegeben ist
| |
| |-
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-n ''Anzahl'' '''</tt>
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | gibt ''N'' Zeilen aus
| |
| |-
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-q '''</tt>
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | unterdrückt die Dateinamen zu Beginn der Ausgabe
| |
| |-
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-v '''</tt>
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | druckt immer die Dateinamen zu Beginn der Ausgabe
| |
| |-
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-''Anzahl'' '''</tt>
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | gibt die angegebene ''Anzahl'' Zeilen aus
| |
| | |
| |-
| |
| |}
| |
| === Dateiinhalte anzeigen (more) ===
| |
| | |
| <tt>'''more'''</tt> zeigt Dateien seitenweise
| |
| | |
| <div style="margin-left:0cm;margin-right:0cm;">'''more''' [ -cdflsu ] [ -n ] [ +linenumber ] [+/pattern ] [''Name'' ...]
| |
| | |
| <tt>'''more'''</tt> gibt Textdateien seitenweise auf dem Bildschirm aus. Nach jeder Bildschirmseite wird die Ausgabe angehalten und auf eine Eingabe des Benutzers gewartet. Am Dateiende wird <tt>more</tt> automatisch beendet. In der Umgebungsvariablen <tt>MORE</tt> können Kommandozeilenoptionen für <tt>more</tt> gespeichert werden, die bei jedem Aufruf automatisch ausgeführt werden.
| |
| | |
| Wenn <tt>more</tt> eine Datei liest, wird auf der letzten Bildschirmzeile im `Prompt' die prozentuale Position der aktuellen Bildschirmseite in der Datei angezeigt. Wenn dieser Prompt angezeigt wird, erwartet <tt>more</tt> eine Eingabe des Benutzers. Die Eingaben bestehen in der Regel aus einem einzigen Tastendruck.
| |
| | |
| Einige Kommandos können mit einer Zahlenangabe '''''N''''' kombiniert werden.
| |
| | |
| {| class="wikitable sortable" style="border-spacing:0;margin:auto;width:17.501cm;"
| |
| |-
| |
| | style="background-color:transparent;border-top:0.05pt solid #000000;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''''N''LEERZEICHEN '''</tt>
| |
| | style="border:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | gibt die nächsten ''N'' Zeilen aus oder einen kompletten Bildschirm, wenn keine Zahl angegeben ist
| |
| |-
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''CTRL-D '''</tt>
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | gibt die nächsten 11 Zeilen (einen halben Bildschirm) aus
| |
| |-
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''d '''</tt>
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | das gleiche wie <tt>^D</tt>
| |
| |-
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''''N''z '''</tt>
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | das gleiche wie Leerzeichen; die Zahl ''N'' wird die neue Anzahl Zeilen pro Bildschirm
| |
| |-
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''''N''s '''</tt>
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | überspringt die nächsten ''N'' Zeilen und zeigt die darauffolgenden Zeilen an
| |
| |-
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''''N''f '''</tt>
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | überspringt die nächsten ''N'' Bildschirme und zeigt die darauffolgenden Zeilen an
| |
| |-
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''''N''b '''</tt>
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | springt ''N'' Bildschirmseiten rückwärts
| |
| |-
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''''N''CTRL-B '''</tt>
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | das gleiche wie <tt>b</tt>
| |
| |-
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''q oder Q '''</tt>
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | beendet <tt>more</tt>
| |
| |-
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''<nowiki>= </nowiki>'''</tt>
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | zeigt die aktuelle Zeilennummer an
| |
| |-
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''v '''</tt>
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | startet den Editor <tt>vi</tt> mit der aktuellen Datei in der aktuellen Zeile
| |
| |-
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''h '''</tt>
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | das Hilfekommando; gibt eine Übersicht über die <tt>more</tt>-Kommandos
| |
| |-
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''''N''/''Ausdruck'' '''</tt>
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | sucht das ''N''te Auftreten des Ausdrucks vom aktuellen Bildschirm an vorwärts
| |
| |-
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''''N'' n '''</tt>
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | sucht das ''N''te aufteten des zuletzt gesuchten Ausdrucks vorwärts
| |
| |-
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''' '''</tt>
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | geht zurück an die Position, von der das letzte Suchkommando gestartet wurde
| |
| |-
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''! ''Kommandozeile'' '''</tt>
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | startet eine Shell und führt die angegebene Kommandozeile aus
| |
| |-
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''''N'':n '''</tt>
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | springt zur nächsten Datei aus der Kommandozeilenliste bzw. ''N'' Dateien weiter
| |
| |-
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''''N'':p '''</tt>
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | springt an den Anfang der aktuellen Datei oder in die vorhergehende Datei aus der Kommandozeilenliste bzw. ''N'' Dateien zurück
| |
| |-
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>''':f '''</tt>
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | zeigt den Namen der aktuellen Datei und die Position des aktuellen Bildschirms
| |
| |-
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>''':q oder :Q '''</tt>
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | beendet <tt>more</tt>
| |
| |-
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''. '''</tt>
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | (Punkt) wiederholt das letzte Kommando
| |
| | |
| |-
| |
| |}
| |
| ==== Optionen ====
| |
| | |
| {| class="wikitable sortable" style="border-spacing:0;margin:auto;width:17.501cm;"
| |
| |-
| |
| | style="background-color:transparent;border-top:0.05pt solid #000000;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''''-N'' '''</tt>
| |
| | style="border:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | ''N'' ist eine ganze Zahl und setzt die Zeilenanzahl für den Bildschirm
| |
| |-
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-c '''</tt>
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | veranlaßt <tt>more</tt>, den Bildschirm beim Weiterblättern von oben nach unten neu aufzubauen, indem jede Zeile unmittelbar vor dem Überschreiben gelöscht wird; diese Option funktioniert nur auf Terminals, die das Löschen einzelner Zeilen unterstützen
| |
| |-
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-d '''</tt>
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | gibt einen längeren Prompt mit zusätzlicher Hilfe für den Anwender aus
| |
| |-
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-f '''</tt>
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | es werden die Textzeilen anstelle der Bildschirmzeilen angezeigt; dadurch werden Zeilen mit Controlsequenzen, wie sie z. B. von <tt>groff</tt> erzeugt werden, korrekt in einer Zeile angezeigt
| |
| |-
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-l '''</tt>
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | ignoriert <tt>^L</tt> (Seitenvorschub); standardmäßig wird die Ausgabe bei jedem Seitenvorschub angehalten; ein Seitenvorschub am Anfang des Textes bewirkt ein Löschen des Bildschirms
| |
| |-
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-s '''</tt>
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | zeigt mehrere Leerzeilen in Folge als eine einzige an
| |
| |-
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-u '''</tt>
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | unterdrückt die Behandlung von unterstrichenem Text
| |
| |-
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''+''Zeilennummer'' '''</tt>
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | beginnt die Ausgabe bei ''Zeilennummer''
| |
| |-
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''+''Muster'' '''</tt>
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | beginnt die Ausgabe zwei Zeilen vor dem ersten Auftreten von ''Muster''
| |
| | |
| |-
| |
| |}
| |
| === Dateiinhalte anzeigen (less) ===
| |
| | |
| [http://www.greenwoodsoftware.com/less less] ist ein Pager zum Anzeigen von (Text-) Dateien auf der Kommandozeile unter Linux. Im Vergleich zu anderen Pagern wie z.B. [http://wiki.ubuntuusers.de/more more] hat less mehrere Vorteile. Zum einen kann man sich mit less beliebig durch das Dokument bewegen, also sowohl vorwärts als auch rückwärts.
| |
| | |
| Zum anderen werden schon Dateien angezeigt, auch wenn diese noch nicht komplett in den Speicher geladen wurden, was besonders bei sehr großen Dateien vorteilhaft sein kann. Außerdem hat less einen deutlich größeren Funktionsumfang, der z.B. auch das komfortable Suchen innerhalb eines Dokuments einschließt.
| |
| | |
| ==== Benutzung ====
| |
| | |
| Die allgemeine Syntax von less ist
| |
| | |
| <div style="margin-left:0cm;margin-right:0cm;">less <Optionen> DATEI
| |
| | |
| Wird die Datei angezeigt, so befindet sich less standardmäßig in einem interaktiven Modus, d.h. es wird mit Hilfe von Tasten (-kombinationen) gesteuert.
| |
| | |
| Mit den folgenden Tasten kann man z.B. durch das Dokument blättern:
| |
| | |
| {| class="wikitable sortable" style="border-spacing:0;margin:auto;width:17.501cm;"
| |
| |-
| |
| | style="border-top:0.05pt solid #000000;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | '''↓ / ↑ '''
| |
| | style="border:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | eine Zeile vor / zurück
| |
| |-
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | '''E / Y '''
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | eine Zeile vor / zurück (Alternative zu den Cursor-Tasten)
| |
| |-
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | '''Bild ↓ / Bild ↑ '''
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | eine Seite vor / zurück
| |
| |-
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | '''F / B '''
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | eine Seite vor / zurück (Alternative zu den Bild-Tasten)
| |
| |-
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | ''' '''
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | eine Seite vor (Alternative zu Bild ↓ bzw. F )
| |
| |-
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''Zahl</tt> Z / W '''
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | die mit <tt>Zahl</tt> angegebene Anzahl Zeilen vorwärts / rückwärts blättern
| |
| |-
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | '''G / ⇧ + G '''
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | zum Anfang / Ende des Dokuments springen
| |
| |-
| |
| |}
| |
| Des weiteren kennt less noch mehr Befehle zum Blättern durch das Dokument sowie für manche Befehle alternative Tastenkombination.
| |
| | |
| Wie weiter oben bereits erwähnt kann auch innerhalb des Dokuments gesucht werden. Dazu drückt man die Slashtaste / und gibt dann den Suchbegriff, der auch ein [http://wiki.ubuntuusers.de/Shell/grep#Regular-Expressions regulärer Ausdruck] sein kann, ein. Mit N (next) wird die Suche vorwärts wiederholt, mit ⇧ + N rückwärts.
| |
| | |
| Möchte man less beenden, so drückt man einfach Q (quit).
| |
| | |
| Die hier gezeigten Funktionen stellen nur einige Grundbefehle dar und spiegeln nur einen Bruchteil der Funktionalität von less wieder. Eine kurze, komplette Übersicht erhält man, in dem man innerhalb von less H drückt oder beim Aufruf die Option <tt>--help</tt> verwendet. Eine ausführlichere Erklärung findet man in den [http://wiki.ubuntuusers.de/man Manpages] von less.
| |
| | |
| less kann man auch in Verbindung mit der [http://wiki.ubuntuusers.de/Shell/Umleitungen Pipe] verwenden. So kann man die Ausgabe eines Befehls nach less umleiten, um so komfortabel in der Ausgabe navigieren und suchen zu können.
| |
| | |
| <u>Beispiel</u>
| |
| | |
| <div style="margin-left:0cm;margin-right:0cm;">dmesg | less
| |
| | |
| ==== zless und bzless ====
| |
| | |
| zless und bzless sind Varianten von less, welche es erlauben, mit gzip bzw. bzip2 gepackte Dateien mit less anzusehen, ohne diese vorher zu entpacken. Inzwischen kann die mit Ubuntu mitgelieferte Version von less dies allerdings auch selbst.
| |
| | |
| <div style="margin-left:0cm;margin-right:0cm;">zless /usr/share/doc/linux-generic/changelog.gz
| |
| <nowiki># oder:</nowiki>
| |
| less /usr/share/doc/linux-generic/changelog.gz
| |
| <nowiki># bzip2-komprimierte Datei:</nowiki>
| |
| less text.bz2
| |
| | |
| <tt>'''less'''</tt> ist ein Pager wie more
| |
| | |
| '''less''' [''Dateiname''] ...
| |
| | |
| <tt>'''less'''</tt> gibt eine (oder mehrere) Datei(en) seitenweise auf dem Bildschirm aus. Im Unterschied zu <tt>more</tt> erlaubt <tt>less</tt> auch das Zurückblättern in Texten, die aus einer Pipeline gelesen werden.
| |
| | |
| Die voreingestellten Tastaturkommandos sind an die von <tt>more</tt> und <tt>elvis</tt> angelehnt, sie lassen sich aber vom Anwender mit Hilfe des <tt>lesskey</tt>-Kommandos beliebig neu definieren.
| |
| | |
| ==== Kommandos ====
| |
| | |
| Die folgenden Tastaturkommandos zur Steuerung der Bildschirmausgabe sind definiert.
| |
| | |
| Alle Kommandos können von einer ganzen Zahl N eingeleitet werden, die die Anzahl der Wiederholungen dieses Kommandos angibt.
| |
| | |
| {| class="wikitable sortable" style="border-spacing:0;margin:auto;width:17.501cm;"
| |
| |-
| |
| | style="background-color:transparent;border-top:0.05pt solid #000000;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''h | H '''</tt>
| |
| | style="border:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | gibt einen Hilfstext aus
| |
| |-
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''LEERZEICHEN | CTRL-V | f | CTRL-F '''</tt>
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | blättert eine Bildschirmseite vorwärts; wenn eine Zahl vorangestellt ist, werden diese Anzahl Zeilen weitergeblättert
| |
| |-
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''z '''</tt>
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | wie Leerzeichen; wenn eine Zahl vorangestellt ist, wird diese Zahl zur neuen Seitenlänge auch für die weiteren Seiten
| |
| |-
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''RETURN | CTRL-N | CTRL-E | CTRL-J '''</tt>
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | scrollt den Bildschirm eine (oder die gegebene Anzahl) Zeilen weiter
| |
| |-
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''d | CTRL-D '''</tt>
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''''-N'' '''</tt>
| |
| |-
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''b | CTRL-v '''</tt>
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-c '''</tt>
| |
| |-
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''w '''</tt>
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-d '''</tt>
| |
| |-
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''y | CTRL-Y | CTRL-P | k | CTRL-K '''</tt>
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-f '''</tt>
| |
| |-
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''u | CTRL-U '''</tt>
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-l '''</tt>
| |
| |-
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''r | CTRL-R | CTRL-L '''</tt>
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-s '''</tt>
| |
| |-
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''R '''</tt>
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-u '''</tt>
| |
| |-
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''F '''</tt>
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''+''Zeilennummer'' '''</tt>
| |
| |-
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''g | < | CTRL-< '''</tt>
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''+''Muster'' '''</tt>
| |
| |-
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''G | > | CTRL-> '''</tt>
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | geht zur letzten Zeile oder zu der Zeile mit der entsprechenden Zahl (vom Dateiende gezählt)
| |
| |-
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''p | % '''</tt>
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | macht nur Sinn, wenn es von einer Zahl zwischen 0 und 100 eingeleitet wird, und geht dann zu der dieser Prozentzahl entsprechenden Stelle; wenn von der Standardeingabe gelesen wird, kann dieses Kommando erst benutzt werden, nachdem die Eingabe abgeschlossen ist
| |
| |-
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''} '''</tt>
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | wenn eine geschweifte Klammer auf der ersten Bildschirmzeile steht, wird die Anzeige so gescrollt, dass die dazugehörende schließende Klammer auf der letzen Bildschirmzeile steht; wenn mehr als eine geschweifte Klammer auf der ersten Zeile geöffnet wird, kann mit dem Zahlenargument bestimmt werden, welche Klammer referenziert werden soll
| |
| |-
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''{ '''</tt>
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | wenn die geschweifte Klammer auf der letzten Bildschirmzeile steht, wird der Bildschirm so gerollt, dass die korrespondierende Klammer auf der ersten Zeile angezeigt wird
| |
| |-
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''( '''</tt>
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | das gleiche mit runden Klammern
| |
| |-
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>''') '''</tt>
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | dito
| |
| |-
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''[ '''</tt>
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | diesmal mit eckigen Klammern
| |
| |-
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''] '''</tt>
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | auch nichts neues
| |
| |-
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''ESC-CTRL-F '''</tt>
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | wie {; es werden die dem Kommando folgenden beiden Zeichen als Klammern interpretiert und entsprechend bearbeitet
| |
| |-
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''ESC-CTRL-B '''</tt>
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | wie }; es werden die dem Kommando folgenden beiden Zeichen als Klammern interpretiert und entsprechend bearbeitet
| |
| |-
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''m '''</tt>
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | gefolgt von einem Kleinbuchstaben, markiert die aktuelle Position mit diesem Buchstaben
| |
| |-
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''' | CTRL-X CTRL-X '''</tt>
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | gefolgt von einem Kleinbuchstaben, kehrt zurück zu der mit diesem Buchstaben markierten Stelle
| |
| |-
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''/''Muster'' '''</tt>
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | sucht vorwärts nach dem ''Muster''<nowiki>; eine passende Zeile wird als erste Bildschirmzeile angezeigt; das Muster kann reguläre Ausdrücke enthalten (ed-Syntax); mit einem Zahlenargument N kann auch das N-te Auftreten des Musters gesucht werden; die Suche beginnt in der zweiten Bildschirmzeile, wenn nicht durch die Kommandozeilenoptionen `</nowiki><tt>-a</tt>' oder `<tt>-j</tt>' ein anderes Verhalten eingestellt ist; für das erste Zeichen vom Muster stehen folgende Sonderzeichen zur Verfügung:
| |
| | |
| !
| |
| | |
| sucht nach einer Zeile, die das Muster nicht enthält
| |
| | |
| <nowiki>* </nowiki>
| |
| | |
| durchsucht mehrere Dateien; wenn die Suche bis zum Dateiende erfolglos ist, wird die nächste Datei aus der Kommandozeilenliste durchsucht
| |
| | |
| @
| |
| | |
| beginnt die Suche in der ersten Datei aus der Kommandozeilenliste, unabhängig davon, welche Datei aktuell angezeigt wird; auch die Kommandozeilenoptionen `<tt>-a</tt>' und `<tt>-j</tt>' werden ignoriert
| |
| |-
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''?''Muster'' '''</tt>
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | sucht rückwärts nach einer Zeile mit dem ''Muster''<nowiki>; die Suche beginnt vor der ersten Bildschirmzeile; folgende Sonderzeichen können als erstes Zeichen vom Muster eingesetzt werden: </nowiki>
| |
| | |
| !
| |
| | |
| sucht eine Zeile, die das Muster nicht enthält
| |
| | |
| <nowiki>* </nowiki>
| |
| | |
| durchsucht mehrere Dateien; wenn das Muster bis zum Dateianfang erfolglos ist, wird die der aktuellen Datei vorhergehende aus der Kommandozeilenliste durchsucht
| |
| | |
| @
| |
| | |
| beginnt die Suche auf der letzten Zeile der letzten Datei aus der Kommandozeilenliste, unabhängig von der aktuellen Datei und den Kommandozeilenoptionen `<tt>-a</tt>' und `<tt>-j</tt>'
| |
| |-
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''ESC-/''Muster'' '''</tt>
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | das gleiche wie `/*''Muster'''
| |
| |-
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''ESC-?''Muster'' '''</tt>
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | das gleiche wie `?*''Muster'''
| |
| |-
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''n '''</tt>
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | wiederholt die letzte Suche; die Sonderzeichen `<tt><nowiki>*</nowiki></tt>' und `<tt>!</tt>' behalten ihre Bedeutung, `<tt>@</tt>' wird ignoriert
| |
| |-
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''N '''</tt>
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | wiederholt die letzte Suche in umgekehrter Richtung
| |
| |-
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''ESC-n '''</tt>
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | wiederholt die letzte Suche und sucht in der nächsten (vorhergehenden) Datei weiter, wenn das Dateiende (der Dateianfang) erreicht ist
| |
| |-
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''ESC-N '''</tt>
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | wiederholt die Suche rückwärts und setzt die Suche in weiteren Dateien fort
| |
| |-
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>''':e [''Dateiname'' ...] '''</tt>
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | zeigt die benannte Datei an; wenn keine Datei angegeben ist, wird die aktuelle Datei neu angezeigt; ein Prozentzeichen `<tt>%</tt>' im Dateiname wird durch den Namen der aktuellen Datei ersetzt; das Nummernzeichen `<tt><nowiki>#</nowiki></tt>' wird durch den Namen der zuvor angezeigten Datei ersetzt; die neue Datei wird in die Kommandozeilenliste der Dateien eingereiht, so dass sie bei den folgenden `<tt>:n</tt>' und `<tt>:p</tt>' Befehlen erreicht werden kann; wenn mehrere Dateinamen angegeben sind, werden alle Dateinamen in die Kommandozeilenliste eingefügt
| |
| |-
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''CTRL-X CTRL-V | E '''</tt>
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | das gleiche wie `<tt>:e</tt>'
| |
| |-
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>''':n '''</tt>
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | zeigt die nächste Datei aus der Kommandozeilenliste an
| |
| |-
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>''':p '''</tt>
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | zeigt die vorhergehende Datei aus der Kommandozeilenliste an
| |
| |-
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>''':x '''</tt>
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | zeigt die erste (oder N-te) Datei aus der Kommandozeilenliste an
| |
| |-
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''<nowiki>= | CTRL-G | :f </nowiki>'''</tt>
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | zeigt den Namen der aktuellen Datei und die Position in der Datei
| |
| |-
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''- '''</tt>
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | ,gefolgt von einer der unten aufgeführten Kommandozeilenoptionen, ändert eben diese Option und zeigt die neue Einstellung an; wenn zu einer Option ein Zahlenargument oder eine Zeichenkette angegeben werden müssen, kann dieses Argument nach dem Optionsbuchstaben interaktiv angegeben werden
| |
| |-
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-+ '''</tt>
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | ,gefolgt von einer der unten beschriebenen Kommandozeilenoptionen, setzt diese Option auf ihren voreingestellten Wert zurück; es können nur die Einstellungen zurückgesetzt werden, die keine Zeichenkette als Argument benötigen
| |
| |-
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''- '''</tt>
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | ,gefolgt von einer der unten beschriebenen Kommandozeilenoptionen, setzt diese Option auf das Gegenteil der Standardeinstellung; es können nur die Einstellungen verändert werden, die keine Argumente benötigen; im Anschluß an die Änderung wird die aktuelle Einstellung gezeigt
| |
| |-
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''_ '''</tt>
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | (Unterstrich), gefolgt von einer der unten beschriebenen Kommandozeilenoptionen, zeigt den aktuellen Wert dieser Einstellung; die Einstellung wird nicht verändert
| |
| |-
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''+''Lesskommando'' '''</tt>
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | führt das angegebene ''Lesskommando'' jedesmal automatisch aus, wenn eine neue Datei angezeigt wird
| |
| |-
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''V '''</tt>
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | zeigt die Versionsnummer von <tt>less</tt>
| |
| |-
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''q | :q | :Q | ZZ | ESC ESC '''</tt>
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | beendet <tt>less</tt>
| |
| |-
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''v '''</tt>
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | startet einen Editor mit der aktuellen Datei; wenn in der Umgebungsvariablen <tt>EDITOR</tt> nichts anderes bestimmt ist, wird der <tt>vi</tt> als Standardeditor benutzt
| |
| |-
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''! ''Kommandozeile'' '''</tt>
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | startet eine Shell und führt das angegebene externe Kommando aus; in der ''Kommandozeile'' kann der Name der aktuellen Datei mit einem Prozentzeichen `<tt>%</tt>', der Name der zuletzt davor aktuellen Datei mit dem Nummernzeichen `<tt><nowiki>#</nowiki></tt>' ersetzt werden; ein doppeltes Ausrufezeichen `<tt>!!</tt>' wiederholt die letzte Kommandozeile; ein einfaches Ausrufezeichen `<tt>!</tt>' startet eine interaktive Shell; in allen Fällen wird die Standardshell /bin/sh gestartet, wenn in der Umgebungsvariablen <tt>SHELL</tt> keine andere Shell bestimmt ist
| |
| |-
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''| ''Marke'' ''Kommandozeile'' '''</tt>
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | leitet die Zeilen von der ersten Bildschirmzeile bis zur Marke durch das in der ''Kommandozeile'' angegebene Kommando
| |
| | |
| |-
| |
| |}
| |
| ==== Optionen ====
| |
| | |
| Die folgenden Optionen und Einstellungen können in der Kommandozeile beim Aufruf von less gesetzt werden.
| |
| | |
| Es ist außerdem möglich, die entsprechenden Einstellungen mit dem `-'-Kommando zur Laufzeit von <tt>less</tt> vorzunehmen. Zusätzlich bietet <tt>less</tt> die Möglichkeit, bestimmte Optionen, die jedesmal gesetzt werden sollen, in der Umgebungsvariablen <tt>LESS</tt> zu speichern.
| |
| | |
| Die so gesetzten Optionen werden jedesmal gelesen, wenn <tt>less</tt> gestartet wird, können aber immer von Kommandozeilenoptionen verdeckt werden.
| |
| | |
| {| class="wikitable sortable" style="border-spacing:0;margin:auto;width:17.501cm;"
| |
| |-
| |
| | style="background-color:transparent;border-top:0.05pt solid #000000;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-? '''</tt>
| |
| | style="background-color:transparent;border:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | zeigt eine kurze Übersicht über die Kommandos und Optionen von less
| |
| |-
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-a '''</tt>
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | die Vorwärtssuchfunktionen fangen in der letzten Bildschirmzeile an, überspringen also den aktuellen Bildschirm
| |
| |-
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-b ''Nr'' '''</tt>
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | veranlaßt <tt>less</tt>, die mit ''Nr'' angegebene Anzahl von Puffern für die Anzeige zu benutzten; jeder Puffer ist ein Kilobyte groß; wenn <tt>less</tt> aus einer Pipe liest, werden die Puffer automatisch angefordert (siehe die Option `<tt>-B</tt>')
| |
| |-
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-B '''</tt>
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | unterdrückt die automatische Anforderung neuer Puffer; es werden nur die mit der `<tt>-b</tt>' Option bereitgestellten oder die standardmäßig eingestellten zehn Puffer für die Speicherung der aus einer Pipeline gelesenen Daten benutzt; werden mehr Daten gelesen, als Pufferplatz frei ist, wird der älteste Puffer überschrieben
| |
| |-
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-c '''</tt>
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | jede neue Bildschirmseite wird von der ersten Zeile an neu aufgebaut; normalerweise wird jede neue Bildschirmseite durch Scrollen des Bildschirms angezeigt
| |
| |-
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-C '''</tt>
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | der Bildschirm wird vor jeder neuen Seite gelöscht sonst wie `<tt>-c</tt>'
| |
| |-
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-d '''</tt>
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | unterdrückt Warnungen bzw. Fehlermeldungen auf ``dummen'' Terminals, wenn bestimmte Funktionen wie Bildschirmlöschen oder Rückwärtsscrollen nicht zur Verfügung stehen
| |
| |-
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-e '''</tt>
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>less</tt> beendet automatisch, wenn das Dateiende zum zweiten mal erreicht wird; normalerweise kann <tt>less</tt> nur ausdrücklich durch ein entsprechendes Kommando verlassen werden
| |
| |-
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-E '''</tt>
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>less</tt> wird automatisch beim (ersten) Dateiende verlassen
| |
| |-
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-f '''</tt>
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | erzwingt die Anzeige, auch von Dateien mit nichtdruckbaren Zeichen
| |
| |-
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-h ''Nr'' '''</tt>
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | es werden höchstens die angegebene Anzahl Zeilen rückwäts gescrollt; sollen mehr als die angegebene Anzahl Zeilen zurückgeblättert werden, findet der Bildschirmaufbau wie beim Vorwärtsblättern von der ersten Zeile an statt
| |
| |-
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-i '''</tt>
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | Groß- und Kleinschreibung werden beim Suchen nicht unterschieden; wenn ein Buchstabe im Suchmuster groß geschrieben ist, wird diese Option ignoriert
| |
| |-
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-j ''Nr'' '''</tt>
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | die Zielzeile bei einer Suche oder einer direkten Positionierung wird an der benannten Stelle angezeigt; eine negative Zahl zählt die Zielzeile vom unteren Bildschirmrand aus (anstelle des oberen)
| |
| |-
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-k ''Datei'' '''</tt>
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | liest eine alternative Tastaturbelegung aus der benannten Datei; wenn keine Datei angegeben ist, wird die Datei `<tt>.less</tt>' im Heimatverzeichnis gelesen; eine Datei mit alternativer Tastaturbelegung kann mit dem <tt>lesskey</tt>-Kommando erzeugt werden
| |
| |-
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-m '''</tt>
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | zeigt die aktuelle Dateiposition in Bytes oder Prozent als Eingabeaufforderung nach jeder Seite; normalerweise dient der Doppelpunkt `:' als Eingabeaufforderung
| |
| |-
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-M '''</tt>
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | zeigt die aktuelle Dateiposition in Zeilen und den Dateinamen als Eingabeaufforderung
| |
| |-
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-n '''</tt>
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | die Zeilennummer wird weder in der Eingabeaufforderung, noch beim Aufruf des Editors benutzt
| |
| |-
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-N '''</tt>
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | jeder Zeile wird in der Anzeige eine Zeilennummer vorangestellt
| |
| |-
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-o ''Datei'' '''</tt>
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | kopiert die gelesene Eingabe in die benannte ''Datei'', wenn aus einer Pipeline gelesen wird; wenn die Datei schon existiert, muss der Benutzer vor dem Überschreiben die Aktion bestätigen
| |
| |-
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-O ''Datei'' '''</tt>
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | wie `<tt>-o</tt>'; es wird aber vor dem Überschreiben einer existierenden Datei nicht nachgefragt
| |
| |-
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-p ''Muster'' '''</tt>
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | sucht sofort das erste Auftreten vom ''Muster'' in der ersten angegebenen Datei
| |
| |-
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-P ''Prompt'' '''</tt>
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | ändert die Eingabeaufforderung (''Prompt''); `<tt>-Pm</tt>' ändert den Prompt für die `<tt>-m</tt>' Option, und `<tt>-PM</tt>' ändert entsprechend den Prompt für die `<tt>-M</tt>' Option; die Syntax der Prompt Zeichenkette mit `<tt>man less</tt>' in den englischen Manualpages nachzulesen
| |
| |-
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-q '''</tt>
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | der Alarmton des Terminals wird nicht bei kleineren Fehlern wie z. B. das Vorwärtsblättern am Dateiende ausgelöst; wenn das Terminal eine optische Warnung unterstützt, wird diese anstelle des akustischen Alarms benutzt
| |
| |-
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-Q '''</tt>
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | der Alarmton des Terminals wird unter keinen Umständen ausgelöst
| |
| |-
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-r '''</tt>
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | die Sonderzeichen (Control Sequenzen) werden nicht als Caret-Sequenz, sondern `roh' angezeigt
| |
| |-
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-s '''</tt>
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | mehrere Leerzeilen werden zu einer einzigen Leerzeile zusammengefaßt; das ist die Standardeinstellung für die Anzeige von <tt>groff</tt>-Ausgabe
| |
| |-
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-S '''</tt>
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | überlange Zeilen werden einfach abgeschnitten; normalerweise wird der Rest überlanger Zeilen in der nächsten Zeile angezeigt
| |
| |-
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-t ''Tag'' '''</tt>
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | zeigt die Datei, in der vom <tt>ctags</tt>-Programm die Marke ''Tag'' gefunden wurde; für diese Option muss eine `<tt>tags</tt>' Datei vom <tt>ctags</tt> Programm im aktuellen Verzeichnis angelegt werden
| |
| |-
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-T ''Tagdatei'' '''</tt>
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | die benannte Tagdatei wird anstelle der Datei `<tt>tags</tt>' im aktuellen Verzechnis für die `<tt>-t</tt>' Option benutzt
| |
| |-
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-u '''</tt>
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | Rückschritt und Wagenrücklauf werden roh (unverändert) an das Terminal geschickt
| |
| |-
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-U '''</tt>
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | Rückschritt und Wagenrücklauf werden als Control-Sequenzen der Option `<tt>-r</tt>' entsprechend an das Terminal geschickt; normalerweise werden Rückschritte, die von einem Unterstrich gefolgt werden, durch einen unterstrichenen Buchstaben, Rückschritte, die von dem gleichen Buchstaben eingeleitet wie gefolgt werden, durch einen fettgedruckten Buchstaben dargestellt; alle anderen Rückschritte und die von einem Zeilenvorschub gefolgten Wagenrücklaufzeichen werden ignoriert
| |
| |-
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-w '''</tt>
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | die Bildschirmzeilen nach dem Dateiende werden durch Leerzeilen anstelle der voreingestellten Tilde `~' dargestellt
| |
| |-
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-x ''Nr'' '''</tt>
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | die Tabulatorweite wird auf die gegebene Anzahl Stellen gesetzt
| |
| |-
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-y ''Nr'' '''</tt>
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | setzt eine Grenze von Zeilen, bis zu der das Vorwärtsscrollen möglich ist; wenn mehr als die gesetzte Anzahl Zeilen vorwärts geblättert werden soll, wird der Bildschirm der `<tt>-c</tt>' oder `<tt>-C</tt>' Option entsprechend neu aufgebaut
| |
| |-
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-z ''Nr'' '''</tt>
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | ändert die Schrittweite für das Blättern auf die angegebene Zeilenzahl
| |
| |-
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''+ '''</tt>
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | eine Kommandozeilenoption, die mit einem Pluszeichen beginnt, wird als Initialisierungskommando für <tt>less</tt> interpretiert und als erstes Kommando von <tt>less</tt> ausgeführt; wenn anstelle eines einzelnen Pluszeichens zwei Pluszeichen benutzt werden, wird das darauffolgende Kommando bei allen Dateien der Kommandozeilenliste als erstes ausgeführt
| |
| | |
| |-
| |
| |}
| |
| ==== Umgebungsvariable ====
| |
| | |
| {| class="wikitable sortable" style="border-spacing:0;margin:auto;width:17.501cm;"
| |
| |-
| |
| | style="background-color:transparent;border-top:0.05pt solid #000000;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''COLUMNS '''</tt>
| |
| | style="background-color:transparent;border:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | die Zeilenlänge für den Ausgabebildschirm
| |
| |-
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''EDITOR '''</tt>
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | der Editor für das `<tt>v</tt>'-Kommando
| |
| |-
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''HOME '''</tt>
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | das Heimatverzeichnis des Anwenders; hier wird die `<tt>.less</tt>' Datei gesucht
| |
| |-
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''LESS '''</tt>
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | eine Zeichenkette mit Kommandozeilenoptionen
| |
| |-
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''LESSBINFMT '''</tt>
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | das Format zur Anzeige binärer Zeichen, die keine Controlzeichen sind
| |
| |-
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''LESSCHARDEF '''</tt>
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | legt einen Zeichensatz fest (ascii oder latin1)
| |
| |-
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''LESSCHARSET '''</tt>
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | beschreibt einen anderen Zeichensatz direkt
| |
| |-
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''LESSEDIT '''</tt>
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | die Kommandozeile für den Editor
| |
| |-
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''LESSHELP '''</tt>
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | der absolute Name der Hilfsdatei
| |
| |-
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''LINES '''</tt>
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | die Anzahl der Bildschirmzeilen
| |
| |-
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''SHELL '''</tt>
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | die Shell für die externen Kommandos
| |
| |-
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''TERM '''</tt>
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | die Terminalbezeichnung, wie sie in /etc/termcap zu finden ist
| |
| | |
| |-
| |
| |}
| |
| === Dateiinhalt zählen (wc) ===
| |
| | |
| <tt>'''wc'''</tt> zählt die Anzahl von Zeichen, Wörtern oder Zeilen
| |
| | |
| '''wc''' [-clw] [-bytes] [-chars] [-lines] [-words] [''Datei'' ...]
| |
| | |
| <tt>'''wc'''</tt> zählt in jeder ''Datei'' oder in der Standardeingabe die Zeilen, die Wörter und die Zeichen. Für jede Datei wird eine Zeile mit den Zahlen, gefolgt vom Dateinamen, ausgegeben. Wird mehr als eine Datei angegeben, wird zusätzlich die Summe der einzelnen Werte in der letzten Zeile ausgegeben. Ohne weitere Optionen gibt <tt>wc</tt> alle drei Werte aus
| |
| | |
| ==== Optionen ====
| |
| | |
| {| class="wikitable sortable" style="border-spacing:0;margin:auto;width:17.501cm;"
| |
| |-
| |
| | style="background-color:transparent;border-top:0.05pt solid #000000;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-l '''</tt>
| |
| | style="background-color:transparent;border:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | gibt nur die Anzahl der Zeilen aus
| |
| |-
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-w '''</tt>
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | gibt nur die Anzahl der Wörter aus
| |
| |-
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-c '''</tt>
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | gibt nur die Anzahl der Zeichen aus
| |
| | |
| |-
| |
| |}
| |
| == Dateien vergleichen ==
| |
| | |
| {| class="wikitable sortable" style="border-spacing:0;margin:auto;width:17.501cm;"
| |
| |-
| |
| || Ob Konfigurationsdateien, Quelltexte oder andere Dokumente, es kommt oft vor, dass man zwei Versionen desselben Textes miteinander vergleichen möchte.
| |
| | |
| Manchmal will man auch nur herausfinden ob zwei Dateien genau denselben Inhalt haben.
| |
| | align=right| [[Image:Grafik17.png|right|top]]
| |
| |-
| |
| |}
| |
| Dateien manuell miteinander zu vergleichen kann allerdings ziemlich mühselig sein. Programme wie '''diff''', '''Kompare''' oder '''Meld''' können einem diese Arbeit erleichtern.
| |
| | |
| Eine Anwendung ist das Vergleichen zweier Versionen einer Quelltext- oder Konfigurationsdatei, es können aber auch alle Arten von Textdateien verglichen werden. Einige Programme können auch drei Dateien vergleichen.
| |
| | |
| Besagte Programme gibt es sowohl für die Kommandozeile als auch mit grafischen Oberflächen. Besonders letztere heben die Unterschiede zwischen den Dateien oft farbig hervor. Weiterhin gibt es oft die Möglichkeit, die beiden Dateien zusammenzuführen oder auch einen Patch zu erstellen, beispielsweise mittels patch.
| |
| | |
| === Dateien vergleichen mit diff ===
| |
| | |
| Mit dem Programm diff kann man auf der Kommandozeile Dateien vergleichen. Die Befehlssyntax ist einfach:
| |
| | |
| <div style="margin-left:0cm;margin-right:0cm;">diff Datei1 Datei2
| |
| | |
| Will man nur wissen ob eine Datei sich inhaltlich von einer anderen Datei unterscheidet, kann der Parameter <tt>q</tt> verwendet werden:
| |
| | |
| <div style="margin-left:0cm;margin-right:0cm;">diff -q Datei1 Datei2
| |
| | |
| Unterscheiden sich die Dateien, gibt diff eine entsprechende Meldung aus, ansonsten erfolgt keine Ausgabe.
| |
| | |
| <div style="margin-left:0cm;margin-right:0cm;">Dateien datei1 und datei2 sind verschieden.
| |
| | |
| Ohne den Parameter q zeigt diff die Unterschiede an, das sieht zum Beispiel so aus:
| |
| | |
| <div style="margin-left:0cm;margin-right:0cm;">diff beispiel2 beispiel1
| |
| 1,2c1,2
| |
| < Das ist ein Beispieltext für einen Blogartikel.
| |
| < Diese Datei heisst beispiel2.
| |
| ---
| |
| > Das hier ist ein Beispieltext.
| |
| > Diese Datei heisst beispiel1.
| |
| 6C6
| |
| < Nicht eingerückter Text.
| |
| ---
| |
| > Eingerückter Text.
| |
| 8A9,10
| |
| >
| |
| > Mit noch mehr Text.
| |
| | |
| {| class="wikitable sortable" style="border-spacing:0;margin:auto;width:17.501cm;"
| |
| |-
| |
| || Diff zeigt immer an, was man in der zweiten Datei ändern müsste, damit sie der ersten Datei entspricht.
| |
| | |
| Die erste Zeile (<tt>1,2c1,2</tt>) bedeutet: Zeile 1 und Zeile 2 der zweiten Datei müssen verändert (c steht für change, das englische Wort für Ändern) werden, damit sie Zeile 1 und 2 der ersten Datei entsprechen. Außerdem wird der Inhalt der Zeilen angezeigt, so sieht man gleich was man ändern müsste.
| |
| | align=right| [[Image:Grafik18.png|top]]
| |
| |-
| |
| |}
| |
| Außer '''c''' für change gibt es noch '''a''', das steht für Anhängen (append), und '''d''' für Löschen (delete). <tt>8a9,10</tt> bedeutet also, das hinter Zeile 8 noch Text eingefügt werden muss, nämlich die Zeilen 9 und 10 der zweiten Datei.
| |
| | |
| ==== Ansicht ändern ====
| |
| | |
| Es gibt auch noch zwei andere Ausgabeformate. Das eine ist das Kontext-Format, dabei werden zu jeder Zeile, die verändert werden muss, auch noch die vorangehenden und folgenden 3 Zeilen angezeigt.
| |
| | |
| Die ersten beiden Zeilen geben an, welche Dateien verglichen werden, und das Inhalte aus der ersten Datei mittels Sternchen (<tt><nowiki>***</nowiki></tt>) und Inhalte aus der zweiten Zeile mittels Bindestrichen (<tt>---</tt>) gekennzeichnet werden.
| |
| | |
| <div style="margin-left:0cm;margin-right:0cm;">diff -c beispiel2 beispiel1
| |
| <nowiki>*** beispiel2 </nowiki> 2009-05-12 22:01:52.000000000 +0200
| |
| --- beispiel1 2009-05-12 20:26:48.000000000 +0200
| |
| <nowiki>***************</nowiki>
| |
| <nowiki>*** 1,8 ****</nowiki>
| |
| ! Das ist ein Beispieltext für einen Blogartikel.
| |
| ! Diese Datei heisst beispiel2.
| |
|
| |
| Lorem ipsum.
| |
|
| |
| ! Nicht eingerückter Text.
| |
|
| |
| Hier geht es noch weiter.
| |
| --- 1,10 ----
| |
| ! Das hier ist ein Beispieltext.
| |
| ! Diese Datei heisst beispiel1.
| |
|
| |
| Lorem ipsum.
| |
|
| |
| ! Eingerückter Text.
| |
|
| |
| Hier geht es noch weiter.
| |
| +
| |
| + Mit noch mehr Text.
| |
| | |
| Änderungen werden durch ein Ausrufezeichen, hinzuzufügende Zeilen mit einem Plus, zu entfernende Zeilen mit einem Minus gekennzeichnet.
| |
| | |
| Außerdem ist es möglich die Inhalte der beiden Dateien nebeneinander anzuzeigen.
| |
| | |
| diff -y beispiel2 beispiel1
| |
| Das ist ein Beispieltext für einen Blogartikel. | Das hier ist ein Beispieltext.
| |
| Diese Datei heisst beispiel2. | Diese Datei heisst beispiel1.
| |
|
| |
| Lorem ipsum. Lorem ipsum.
| |
|
| |
| Nicht eingerückter Text. | Eingerückter Text.
| |
|
| |
| Hier geht es noch weiter. Hier geht es noch weiter.
| |
| >
| |
| > Mit noch mehr Text.
| |
| Was kann diff noch?
| |
| | |
| Möchte man drei Dateien miteinander vergleichen kann man anstatt diff den Befehl diff3 verwenden.
| |
| | |
| <div style="margin-left:0cm;margin-right:0cm;">diff3 beispiel1 beispiel2 beispiel3
| |
| <nowiki>====1</nowiki>
| |
| 1:1,2c
| |
| Das hier ist ein Beispieltext.
| |
| Diese Datei heisst beispiel1.
| |
| 2:1,2c
| |
| 3:1,2c
| |
| Das ist ein Beispieltext für einen Blogartikel.
| |
| Diese Datei heisst beispiel2.
| |
| | |
| Es ist auch möglich mit diff den Inhalt von Verzeichnissen zu vergleichen, diff zeigt dann an, welche Dateien nur in einem der beiden Verzeichnisse existieren. Der Parameter r weist diff an, auch Unterverzeichnisse zu überprüfen.
| |
| | |
| <div style="margin-left:0cm;margin-right:0cm;">diff -r verz1 verz2
| |
| Nur in verz1: datei3.
| |
| | |
| Wenn man längere Texte miteinander vergleicht und die Ausgabe nicht mehr auf den Bildschirm passt kann man sie auch an ein Programm wie <tt>less</tt> übergeben:
| |
| | |
| <div style="margin-left:0cm;margin-right:0cm;">diff datei1 datei2 | less
| |
| | |
| Anschließend kann man bequem durch die Ausgabe von diff scrollen.
| |
| | |
| ==== Optionen ====
| |
| | |
| {| class="wikitable sortable" style="border-spacing:0;margin:auto;width:17.501cm;"
| |
| |-
| |
| | style="border-top:0.05pt solid #000000;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-q '''</tt>
| |
| | style="border:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | für '''q'''uick, gibt nur Unterschiede aus
| |
| |-
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-s '''</tt>
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | für '''s'''ame, meldet wenn Dateien gleich sind
| |
| |-
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''--help '''</tt>
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | Hilfe
| |
| |-
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-r '''</tt>
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | für '''r'''ekursiv, vergleicht Unterverzeichnisse wenn vorhanden
| |
| |-
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-y '''</tt>
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | tabellarische Ausgabe, auch gleiche Zeilen, ungleiche Zeilen werden markiert
| |
| |-
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''--suppress-common-lines '''</tt>
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | unterdrückt gleiche Zeilen
| |
| |-
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-a '''</tt>
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | behandelt alle Dateien (z.B. binäre) wie Text
| |
| |-
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-d '''</tt>
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | versucht mit erhöhtem Aufwand kleinere Veränderungen zu finden
| |
| |-
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''--speed-large-files '''</tt>
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | geht von großen Dateien und vielen, kleinen, verstreuten Veränderungen aus
| |
| | |
| |-
| |
| |}
| |
| ==== Beispiele ====
| |
| | |
| <div style="margin-left:0cm;margin-right:0cm;">diff -q DATEI1 DATEI2
| |
| Dateien '''DATEI1''' und '''DATEI2''' unterscheiden sich
| |
| diff DATEI1 DATEI2
| |
| 4,6c4,5
| |
| < Unterschied 1
| |
| < Unterschied 2
| |
| < Unterschied 5
| |
| ---
| |
| > Unterschied 3
| |
| > Unterschied 4
| |
| | |
| Zuerst gibt diff an, in welcher Zeile sich die Unterschiede befinden. Zeilen mit <tt><</tt> sind in der ersten Datei vorhanden und Zeilen mit <tt>></tt> in der zweiten.
| |
| | |
| Vergleichen von Ordnern:
| |
| | |
| <div style="margin-left:0cm;margin-right:0cm;">diff -s ORDNER1 ORDNER2
| |
| Dateien ORDNER1/DATEI1 und ORDNER2/DATEI1 sind identisch
| |
| Dateien ORDNER1/DATEI2 und ORDNER2/DATEI2 sind identisch
| |
| Nur in ORDNER2: DATEI3
| |
| | |
| ===== Patchdatei erstellen =====
| |
| | |
| Wer sich mit Programmierung, Bugs oder dem Verbessern von Programmen beschäftigt, benutzt diff um Änderungen per [http://wiki.ubuntuusers.de/Versionsverwaltung Versionsverwaltung] mitzuteilen. Um nicht alle Codedateien mit Änderungen auszutauschen, werden nur die geänderten Stellen im Diff-Format gespeichert. Der so erstellte Diff kann dann als Patch (beispielsweise mit [http://wiki.ubuntuusers.de/patch patch]) angewendet werden.
| |
| | |
| Folgende Optionen von diff sind außerdem noch für das Erstellen einer Patchdatei interessant:
| |
| | |
| {| class="wikitable sortable" style="border-spacing:0;margin:auto;width:17.501cm;"
| |
| |-
| |
| | style="border-top:0.05pt solid #000000;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-q '''</tt>
| |
| | style="border:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | ignoriert in diesem Fall fehlende Dateien
| |
| |-
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-u '''</tt>
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | für '''u'''nified, gibt <tt>NUM</tt> (Standard 3) der unveränderten Zeilen aus
| |
| |-
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-N '''</tt>
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | für '''N'''ew, erstellt fehlende Dateien
| |
| | |
| |-
| |
| |}
| |
| ==== Beispiele ====
| |
| | |
| <div style="margin-left:0cm;margin-right:0cm;">diff -uNr ORIGINALDATEI VERBESSERTE_DATEI > DIFFDATEI.diff
| |
| | |
| Die Datei '''DIFFDATEI.diff''' würde dann in etwa so aussehen:
| |
| | |
| <div style="margin-left:0cm;margin-right:0cm;">--- a/ORIGINALDATEI
| |
| +++ b/VERBESSERTE_DATEI
| |
| @@ -1,8 +1,9 @@
| |
| Gleich 1
| |
| Gleich 2
| |
| Gleich 3
| |
| + Unterschied 1
| |
| + Unterschied 2
| |
| - Unterschied 3
| |
| - Unterschied 4
| |
| + Unterschied 5
| |
| Gleich 4
| |
| Gleich 5
| |
| Gleich 6
| |
| | |
| Nach Angabe der Dateien, in welcher Zeile man sich befindet und wie viele Zeilen es vorher und danach sind, kommen die drei gleichgebliebenen Zeilen. Die Angabe der Verzeichnisse ('''a/''' und '''b/''') dient nur als Platzhalter, falls Dateien bereits vorhanden sind. Zeilen mit <tt>+</tt> sind dazugekommen, Zeilen mit <tt>-</tt> weggenommen und Zeilen mit einem Leerzeichen "<tt> </tt>" gleichgeblieben.
| |
| | |
| <div style="margin-left:0cm;margin-right:0cm;">diff -uNr ORDNER1 ORDNER2 > DIFFORDNER.diff
| |
| | |
| Der Inhalt der Datei DIFFORDNER.diff:
| |
| | |
| <div style="margin-left:0cm;margin-right:0cm;">diff -uNr ORDNER1/DATEI3 ORDNER2/DATEI3
| |
| --- ORDNER1/DATEI3
| |
| +++ ORDNER2/DATEI3
| |
| @@ -0,0 +1,5 @@
| |
| + Unterschied 1
| |
| + Unterschied 2
| |
| + Unterschied 3
| |
| + Unterschied 4
| |
| + Unterschied 5
| |
| | |
| Hier wurden die Ordner verglichen und in den <tt>-</tt> und <tt>+</tt>-Zeilen mit angegeben. Da '''DATEI3''' noch nicht in '''ORDNER1''' vorhanden (0,0) ist, werden die Zeilen 1-5 einfach eingefügt.
| |
| | |
| Somit wird die Datei bei einem Anwenden von [http://wiki.ubuntuusers.de/patch patch] erstellt.
| |
| | |
| ==== diff3 ====
| |
| | |
| diff3 kann den Inhalt von drei Dateien gleichzeitig vergleichen. diff3 ist, ebenso wie diff, Teil der GNU Utilities. Die allgemeine Syntax lautet:
| |
| | |
| <div style="margin-left:0cm;margin-right:0cm;">diff3 [Optionen] Datei1 Datei2 Datei3
| |
| | |
| Anders als der Namen es vermuten lässt kennt diff3 deutlich weniger und andere Optionen als [http://wiki.ubuntuusers.de/diff diff], außerdem ist die Ausgabe anders strukturiert. Eine Übersicht erhält man in den [http://wiki.ubuntuusers.de/man Manpages] oder wenn man diff3 ohne Angaben von Dateinamen nur mit der Option <tt>--help</tt> aufruft.
| |
| | |
| ==== colordiff ====
| |
| | |
| [http://colordiff.sourceforge.net/ colordiff] ist eine erweiterte Varianten von [http://wiki.ubuntuusers.de/diff diff], bei der die Ausgabe der Unterschiede farblich hervorgehoben wird, was besonders bei größeren Dateien die Lesbarkeit erhöht. Die Syntax von colordiff ist identisch mit der von diff.
| |
| | |
| Das Programm ist nicht in der Standardinstallation enthalten kann aber nachinstalliert werden.
| |
| | |
| <div style="margin-left:0cm;margin-right:0cm;">sudo apt-get install colordiff
| |
| | |
| ==== vimdiff ====
| |
| | |
| vimdiff ist ein Kurzbefehl, um [http://wiki.ubuntuusers.de/VIM VIM] mit entsprechenden Einstellungen, zum Vergleichen von bis zu vier Dateien zu starten.
| |
| | |
| Die Syntax von vimdiff ist:
| |
| | |
| <div style="margin-left:0cm;margin-right:0cm;">vimdiff [Optionen] [Datei1] [Datei2] [Datei3] [Datei4]
| |
| | |
| Oder analog:
| |
| | |
| <div style="margin-left:0cm;margin-right:0cm;">vim -d [Optionen] [Datei1] [Datei2] [Datei3] [Datei4]
| |
| | |
| Die GUI-Variante von VIM kann mit <tt>gvim...</tt> bzw. der Option <tt>-g</tt> gestartet werden.
| |
| | |
| Folgende Einstellungen werden für das aktuelle Fenster (lokal) gesetzt:
| |
| | |
| {| class="wikitable sortable" style="border-spacing:0;margin:auto;width:17.501cm;"
| |
| |-
| |
| | style="border-top:0.05pt solid #000000;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''diff '''</tt>
| |
| | style="border:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>on</tt>
| |
| |-
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''scrollbind '''</tt>
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>on</tt>
| |
| |-
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''cursorbind '''</tt>
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>on</tt>
| |
| |-
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''scrollopt '''</tt>
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | += <tt>hor</tt>
| |
| |-
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''wrap '''</tt>
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>off</tt>
| |
| |-
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''foldmethod '''</tt>
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>diff</tt>
| |
| |-
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''foldcolumn '''</tt>
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>2</tt> (oder Wert von <tt>diffopt</tt>)
| |
| |-
| |
| |}
| |
| Mit <tt>:diffoff</tt> kann der "Diffmodus" beendet werden (Einstellungen werden nicht auf vorherige Werte zurückgesetzt).
| |
| | |
| Die verschiedenen Kommandos wie <tt>:diffupdate</tt> (Diff aktualisieren, Folds anpassen), <tt>:diffget</tt>, <tt>:diffput</tt> und Weitere finden sich in der Dokumentation unter <tt>:help diff</tt>.
| |
| | |
| === Zeilenweise vergleichen (comm) ===
| |
| | |
| Comm vergleicht zeilenweise sortierte Dateien. Das von Richard Stallman und David MacKenzie geschriebene Programm gehört zu den GNU-Standard-Werkzeugen.
| |
| | |
| <div style="margin-left:0cm;margin-right:0cm;">comm [OPTIONEN] DATEI1 DATEI2
| |
| | |
| Beispiel:
| |
| | |
| <div style="margin-left:0cm;margin-right:0cm;">comm -1 -3 ~/text1 ~/text2
| |
| | |
| Ohne die Angabe von Optionen wird eine Ausgabe mit drei Spalten erzeugt. Die erste Spalte enthält Einträge, die nur in der ersten Datei vorkommen, die zweite Spalte enthält die Einträge, die nur in der zweiten Datei existieren und die dritte Zeile enthält die Zeilen, die in beiden Dateien zu finden sind.
| |
| | |
| Die ersten beiden Spalten enthalten also "einzigartige" Zeilen einer Datei, die dritte Spalte hingegen "gleiche" Zeilen aus beiden Dateien.
| |
| | |
| Jede der drei Spalten kann über die folgenden Optionen in der Ausgabe unterdrückt werden:
| |
| | |
| {| class="wikitable sortable" style="border-spacing:0;margin:auto;width:17.501cm;"
| |
| |-
| |
| | style="border-top:0.05pt solid #000000;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>-1</tt>
| |
| | style="border:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | unterdrückt einzigartige Zeilen aus <tt>DATEI1</tt>
| |
| |-
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>-2</tt>
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | unterdrückt einzigartige Zeilen aus <tt>DATEI2</tt>
| |
| |-
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>-3</tt>
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | unterdrückt gleiche Zeilen beider Dateien
| |
| | |
| |-
| |
| |}
| |
| === Byteweise vergleichen (cmp) ===
| |
| | |
| <tt>cmp</tt> (compare) vergleicht zwei Dateien byteweise
| |
| | |
| cmp [-cls] [-show-chars] [-verbose] [-silent] [-quiet] Datei1 [Datei2]
| |
| | |
| cmp ist Teil des [http://wiki.ubuntuusers.de/diff diff] Paketes und zeigt ab dem wievielten Byte sich zwei Dateien voneinander unterscheiden und ist somit zum Beispiel nützlich um Binär-Dateien zu vergleichen.
| |
| | |
| Wenn Sie anstelle eines der beiden Dateinamen ein Minuszeichen`-' angegeben, liest das <tt>cmp</tt>-Kommando die Vergleichsdaten von der Standardeingabe. Wird nur eine Datei benannt, so wird anstelle der zweiten ebenfalls von der Standardeingabe gelesen.
| |
| | |
| Einige nützliche Parameter sind <tt>-b</tt> welcher den Ascii-Code und das Zeichen des ersten sich unterscheidenden Bytes in der Datei anzeigt und <tt>-l</tt> welches den Ascii-Code sämtlicher sich unterscheidender Bytes anzeigt.
| |
| | |
| Wenn man beide Parameter zusammen benutzt bekommt man eine Liste mit allen sich unterscheidenden Bytes, ihrer Stelle innerhalb der Datei, ihrem Ascii-Code und ihrem eigentlichen Zeichen.
| |
| | |
| ==== Anwendung ====
| |
| | |
| cat datei1
| |
| Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
| |
| cat datei2
| |
| Lorem Gabel dolor sit amet, consectetuer adipiscing elit.
| |
| cmp datei1 datei2
| |
| datei1 datei2 differieren: Byte 7, Zeile 1.
| |
| cmp -b datei1 datei2
| |
| datei1 datei2 differieren: Zeichen 7, Zeile 1 ist 151 i 107 G
| |
| cmp -l datei1 datei2
| |
| 7 151 107
| |
| 8 160 141
| |
| 9 163 142
| |
| 10 165 145
| |
| 11 155 154
| |
| cmp -l -b datei1 datei2
| |
| 7 151 i 107 G
| |
| 8 160 p 141 a
| |
| 9 163 s 142 b
| |
| 10 165 u 145 e
| |
| 11 155 m 154 l
| |
| | |
| ==== Optionen ====
| |
| | |
| {| class="wikitable sortable" style="border-spacing:0;margin:auto;width:17.501cm;"
| |
| |-
| |
| | style="background-color:transparent;border-top:0.05pt solid #000000;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-b, --print-bytes'''</tt>
| |
| | style="background-color:transparent;border:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | Zeigt unterschiedliche Bytes
| |
| |-
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-l, --print-bytes'''</tt>
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | (list) gibt die Position und den oktalen Wert aller differierenden Zeichen in einer Liste aus
| |
| |-
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-s, --quiet, --silent'''</tt>
| |
| | style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | (silent) gibt nichts auf die Standardausgabe; der Status ist 0 (wahr), wenn die Dateien übereinstimmen und 1 (falsch), wenn sie sich unterscheiden
| |
| | |
| |-
| |
| |}
| |
| === Kompare ===
| |
| | |
| {| class="wikitable sortable" style="border-spacing:0;margin:auto;width:17.501cm;"
| |
| |-
| |
| || KDE-Benutzer können auch das Programm Kompare verwenden um zwei Dateien miteinander zu vergleichen.
| |
| | |
| Kompare zeigt beide Dateien nebeneinander an, Unterschiede werden farblich hervorgehoben. Text mit rotem Hintergrund muss verändert werden, solcher mit blauem Hintergrund muss hinzugefügt, und solcher mit grünem Hintergrund muss entfernt werden, damit die zweite Datei der ersten entspricht.
| |
| | |
| Es ist auch möglich einzelne oder alle Abweichungen zu übernehmen, bzw. die Texte manuell zusammenzuführen.
| |
| | align=right| [[Image:Grafik19.png]]
| |
| | |
| |-
| |
| |}
| |
| === Meld ===
| |
| | |
| {| class="wikitable sortable" style="border-spacing:0;margin:auto;width:17.501cm;"
| |
| |-
| |
| || Meld ist ebenfalls ein grafisches Programm zum Vergleichen von Dateien. Die Funktionsweise ist ähnlich der von Kompare. Mit einem Klick auf die Pfeile neben den Unterschieden kann man die Textstelle entweder von der ersten Datei in die Zweite, oder umgekehrt übernehmen.
| |
| | |
| Der Unterschied zu Kompare ist aber, dass die beiden Dateien in einem Texteditor dargestellt werden, und das man sie auch manuell noch weiter bearbeiten kann. Das ist sehr nützlich, z.B. für den Fall das man bestimmte Änderungen nur teilweise übernehmen möchte.
| |
| | align=right| [[Image:Grafik20.png]]
| |
| |-
| |
| |}
| |
| [http://meldmerge.org/ Meld] ist ein in [http://wiki.ubuntuusers.de/Python Python] geschriebenes Werkzeug, um bis zu drei Verzeichnisse oder Dateien miteinander zu vergleichen. Hierbei werden Textdateien Zeile für Zeile analysiert. Unterschiede lassen sich hier nicht nur aufspüren, sondern auch direkt editieren.
| |
| | |
| {| class="wikitable sortable" style="border-spacing:0;margin:auto;width:17.501cm;"
| |
| |-
| |
| || Das Programm kann im GNOME-Menü unter ''"Anwendungen -> Software-Entwicklung -> Meld Diff-Betrachter"'' gestartet werden.
| |
| | align=right| [[Image:Grafik23.png]]
| |
| | |
| |-
| |
| |}
| |
| | |
| {| class="wikitable sortable" style="border-spacing:0;margin:auto;width:17.501cm;"
| |
| |-
| |
| || Nachdem das Hauptfenster erschienen ist, müssen die zu vergleichenden Verzeichnisse oder Dateien ausgewählt werden.
| |
| | |
| Diese geschieht im Menü mit ''"File -> Neu"''. Im Dialogfenster, das sich öffnet, muss der entsprechende Reiter für Datei- oder Verzeichnisvergleich angewählt und anschließend über die Schaltflächen ''"Browse"'' die entsprechenden Pfade ausgewählt werden.
| |
| | align=right| [[Image:Grafik24.png]]
| |
| | |
| |-
| |
| |}
| |
| ==== Vergleich zweier Verzeichnisse ====
| |
| | |
| Wenn zwei Verzeichnisse ausgewählt wurden, werden deren Unterschiede im Hauptfenster von Meld dargestellt (siehe Abbildung):* '''Foto.png''': ist in beiden Verzeichnissen enthalten. Meld färbt den Dateinamen jedoch rot ein. Dies bedeutet, dass die beiden Dateien nicht identisch sind. Eine detailliertere Betrachtung der Unterschiede ist jedoch nur bei Text- bzw. ASCII-Dateien möglich.
| |
| * '''hallo.txt''': ist ebenfalls in beiden Verzeichnissen enthalten, sie unterschieden sich jedoch voneinander. Durch einen Doppelklick auf diese Datei öffnet Meld einen neuen Reiter (Tab). In diesem Tab werden die Unterschiede der Textdateien im Detail dargestellt.
| |
| * '''man_diff.txt''': diese Dateien sind identisch
| |
| * '''test.dat''': ist nur im Zielverzeichnis vorhanden
| |
| | |
| {| class="wikitable sortable" style="border-spacing:0;margin:auto;width:17.501cm;"
| |
| |-
| |
| || Es können Filter gesetzt werden (zum Beispiel, um Multimedia und/oder Binärdateien ignorieren). Eigene Filter können hinzugefügt werden.
| |
| | align=right| [[Image:Grafik25.png]]
| |
| | |
| |-
| |
| |}
| |
| ==== Vergleich von Textdateien ====
| |
| | |
| Werden zwei Textdateien verglichen, werden deren Unterschiede im Hauptfenster von Meld dargestellt (siehe Abbildung): * grüne Zeilen zeigen diejenigen Zeilen an, die nur in der jeweiligen Textdatei existieren
| |
| * blaue Zeilen zeigen Zeilen an, die in beiden Dateien vorhanden sind, sich aber durch einige Zeichen unterscheiden.
| |
| * gelbe Zeilen zeigen die aktuell gewählte Zeile (wo sich der Cursor befindet) an.
| |
| | |
| Ganz links bzw. ganz rechts wird jeweils ein vertikaler Bereich angezeigt, der die aktuelle Position des Cursors in der Datei sowie die Anzahl und die relativen Postionen der Dateiunterschiede als Navigationshilfe anzeigt.
| |
| | |
| In den Einstellungen kann man Filter setzen, welche Bereiche nicht als Unterschiede zählen sollten. So gibt zum Beispiel die Optionen ''"Whitespace"'' (Leerzeichen und verschiedene Einrückungen ignorieren) oder Kommentare ignorieren.
| |
| | |
| Des weiteren können eigene Filter mittels reguläre Ausdrücke definiert werden. Ferner kann in den Einstellungen noch gewählt werden, ob die Dateien mit einem entsprechenden Syntax-Highlighting angezeigt oder ob Whitespaces und Zeilennummern dargestellt werden sollen.
| |
| | |
| Durch einen Mausklick auf einen Bereich, der durch einen schwarzen seitwärts gerichteten Pfeil dargestellt wird, kann diejenige Texteinheit in das gegenüberliegende Fenster kopiert werden. Effizienter ist es oft, mit Alt + ↑ oder Alt + ↓ zum nächsten Unterschied zu gelangen und dann mit Alt + → bzw. Alt + ← den Textbereich hinüberzukopieren.
| |
| | |
| Die zwei Dateifenster sind vollwertige Texteditorbereiche. Man kann die Dateien bearbeiten, in ihnen suchen und auch ersetzen.
| |
| | |
| ==== Aufruf über ein Terminal ====
| |
| | |
| Alternativ kann Meld über ein Terminal [http://wiki.ubuntuusers.de/Meld#source-2 [2]] gestartet werden. Die zu vergleichenden Verzeichnisse oder Dateien werden als Argument übergeben:
| |
| | |
| <div style="margin-left:0cm;margin-right:0cm;">meld /Pfad/zu/Mein_Verzeichnis_1/ /Pfad/zu/Mein_Verzeichnis_2/
| |
| | |
| ==== Einstellungen ====
| |
| | |
| Über ''"Bearbeiten → Einstellungen"'' stehen vielfältige Möglichkeiten zur Anpassung an die eigenen Bedürfnisse zur Verfügung. Die nebenstehende Abbildung zeigt beispielhaft einige dieser Optionen.
| |
| | |
| ==== Problembehebung ====
| |
| | |
| ===== Kann keine Ordner vergleichen =====
| |
| | |
| Möchte man nicht nur Dateien, sondern auch Verzeichnisse miteinander vergleichen, so ist Diffuse das falsche Werkzeug. Das Programm [http://wiki.ubuntuusers.de/Meld Meld] hingegen unterstützt diese Funktion.
| |
| | |
| ==== Links ====
| |
| | |
| * [http://diffuse.sourceforge.net/index_de.html diffuse Projektseite]http://diffuse.sourceforge.net/index_de.html
| |
| * [http://diffuse.sourceforge.net/manual_de.html Handbuch]http://diffuse.sourceforge.net/manual_de.html
| |
| | |
| === Diffuse ===
| |
| | |
| Diffuse ist ein in Python geschriebenes Programm zum Vergleichen und Zusammenführen von Textdateien (vornehmlich Quellcode). Es wurde unter der GNU GPLv2 veröffentlicht und ist auch für Windows und Mac OS X erhältlich.
| |
| | |
| Diffuse kann eine beliebige Anzahl von Dateien vergleichen und gibt dem Benutzer die Möglichkeit, die Dateien manuell zu bearbeiten. Diffuse unterstützt das Einfügen von Dateien durch "Copy & Paste" und zudem eine Vielzahl von Versionsverwaltungen (Bazaar, Git, Mercurial, Subversion, Darcs, Monotone, RCS, SVK).
| |
| | |
| Außerdem wird die Syntax für mehr als 20 Programmiersprachen hervorgehoben.
| |
| | |
| ==== Grafisch ====
| |
| | |
| Der Aufbau des Programm gliedert sich in 6 Teile. Oben, unter der Menüleiste, befindet sich die globale Werkzeugleiste. Von links nach rechts:
| |
| | |
| {| class="wikitable sortable" style="border-spacing:0;margin:auto;width:17.501cm;"
| |
| |-
| |
| || * Zwei Schaltflächen zum Öffnen eines neuen Tabs zum Vergleichen von 2 oder 3 Dateien
| |
| * Schaltfläche zum neu ausrichten
| |
| * Vier Tasten zum Navigieren zwischen den Unterschieden im Dokument
| |
| * Diverse Schaltflächen zum Zusammenführen
| |
| * Schalttasten für Rückgängig oder Wiederholen von Änderungen
| |
| * Ausschneiden, Kopieren, Einfügen
| |
| * Schaltfläche zum Rücksetzen aller Änderungen
| |
| | |
| | align=right| [[Image:Grafik29.png|top]]
| |
| |-
| |
| |}
| |
| Unter der globalen Werkzeugleiste befindet sich, falls nötig, eine Leiste mit Reitern (Tabs) der geöffneten Vergleiche. Unter dieser befinden sich die lokalen Werkzeugleisten eines Dokumentes mit Schaltflächen zum Öffnen, Speichern und Laden, sowie dem absoluten Pfad der Datei.
| |
| | |
| Darunter befindet sich der wichtigste Teil, das Textfeld, welches neben Zeilennummern und Steuerzeichen noch eine komfortable Navigationsleiste an der rechten Seite bietet. In dieser werden je nach Änderungsart rote oder grüne Bereiche gezeichnet, so dass eine schnelle Navigation gewährleistet ist.
| |
| | |
| Unter dem Textfeld befinden sich die lokalen Statusleisten, welche aktuelle Zeilennummer, den markierten Bereich, sowie Zeichenkodierung und Art des Zeilenumbruchs anzeigen.
| |
| | |
| Hierunter befindet sich die globale Statusleiste, in der Tipps und weitere Informationen angezeigt werden.
| |
| | |
| ==== Markierungsmodi ====
| |
| | |
| Diffuse hat zwei Modi zum Markieren von Text. Mit dem Standardmodi kann man zeilenweise Textblöcke markieren, um diese dann über die einzelnen Optionen im Kontextmenü oder der Werkzeugleiste mit den entsprechenden Änderungen in den anderen Dokumenten zusammenzuführen oder von diesen zu Isolieren.
| |
| | |
| Der zweite Modus kann über das Doppelklicken mit der linken Maustaste oder Enter drücken aktiviert werden. In diesem ist es möglich Text zeichenweise zu markieren und den Text ganz normal wie in jedem Texteditor zu bearbeiten. Um wieder in den ersten Modi zu gelangen genügt das Drücken der Esc-Taste.
| |
| | |
| ==== Kommandozeile ====
| |
| | |
| Es ist möglich, Diffuse beim Start in einem Terminal-Fenster [http://wiki.ubuntuusers.de/diffuse#source-2 [2]] oder auf der Konsole einige Parameter zu übergeben. Im Folgenden wird näher darauf eingegangen.
| |
| | |
| ==== Hinweis ====
| |
| | |
| Öffnet man Diffuse mit nur einer Datei, so wird die linke Spalte frei gelassen. Bei mehr als zwei Dateien werden dementsprechend zwei Ansichten geöffnet. Für derlei Ansichten gibt es keine Beschränkungen seitens des Programms. Es ist möglich, 20 Dateien und mehr zu vergleichen. Die Ansichten werden dann jedoch (je nach Fenstergröße) sehr schmal.
| |
| | |
| Möchte man einen Satz von drei Dateien öffnen, so kann man dies über folgenden Befehl tun:
| |
| | |
| <div style="margin-left:0cm;margin-right:0cm;">diffuse DATEI1 DATEI2 DATEI3
| |
| | |
| Um lokale Änderungen oder Konflikte beim Zusammenführen zu überprüfen, verwendet man den Befehl:
| |
| | |
| <div style="margin-left:0cm;margin-right:0cm;">diffuse -m
| |
| | |
| Zum Vergleichen spezifischer Revisionen verwendet man:
| |
| | |
| <div style="margin-left:0cm;margin-right:0cm;">diffuse -r REVISION1 -r REVISION2 DATEI
| |
| | |
| Eine Revision überprüft man mit folgendem Befehl:
| |
| | |
| <div style="margin-left:0cm;margin-right:0cm;">diffuse -c rev
| |
| | |
| [[Image:Grafik30.png]]
| |
| | |
| === BeeDiff ===
| |
| | |
| <div style="margin-left:0cm;margin-right:0cm;">BeeDiff ist ein Programm mit grafischer Oberfläche zum Vergleich und zusammenführen von Dateien.
| |
| | |
| <div style="margin-left:0cm;margin-right:0cm;">BeeDiff zweigt zwei Dateien nebeneinander und hebt Unterschiede farblich hervor. Operation buttons (such as merge and remove) are located directly inside the compared texts in appropriate positions. Das Programm ist benutzerfreundlich, einfach und effizient.
| |
| | |
| [[Image:Grafik2.png|middle]]
| |
| | |
| == Datensicherung und -archivierung ==
| |
| | |
| === Motivation und Zielsetzung ===
| |
| | |
| Die Aufgabe von IT-Systemen ist die Verarbeitung und Verwaltung digitaler Daten, die dazu vorübergehend oder dauerhaft auf Datenträgern gespeichert werden. Die Sicherung dieser Daten soll die Rückkehr in einen vorherigen Zustand gewährleisten. Die regelmäßige Sicherung des Datenbestandes zählt zu den wichtigsten Aufgaben eines Systemverwalters.
| |
| | |
| Daten sind verschiedenen Einflüssen ausgesetzt. Dem Schichtenmodell entsprechend können auf jeder Ebene Anomalien auftreten. Zum Beispiel:* Defekte an der Hardware (Datenträger, Controller)
| |
| * Fehler im Dateisystem | | * Fehler im Dateisystem |
| * Fehler bei der Administration | | * Fehler bei der Administration |
Zeile 3.584: |
Zeile 16: |
| * Ausfall des Systems | | * Ausfall des Systems |
| * Fehlfunktion nach Update | | * Fehlfunktion nach Update |
| * Versehentliches löschen von Daten | | * Versehentliches Löschen von Daten |
|
| |
|
| Um jeder dieser Situationen gerecht zu werden ist es möglich auf folgenden Ebenen Daten zu sichern:* Datenträger | | Um jeder dieser Situationen gerecht zu werden, ist es möglich, auf folgenden Ebenen Daten zu sichern |
| * Partition | | * Datenträger |
| * Dateisystem | | * Partition |
| | * Dateisystem |
| | * Datenbanken |
|
| |
|
| ==== Datensicherungsstrategien ==== | | === Strategie === |
| | ; Datensicherungsstrategien |
| | Die Begriffe »Backup« und »Archiv« verwenden wir im weiteren Verlauf synonym |
| | * Allgemein bezeichnen wir als ein Archiv einen Container von Daten, der aufbewahrt wird, um genau auf diese Daten später zugreifen zu können |
| | * Archive legt man an, um momentan nicht benötigte Daten von der Festplatte zu verbannen oder um sie von einem Rechner auf einen anderen zu kopieren.. |
|
| |
|
| Die Begriffe »Backup« und »Archiv« verwenden wir im weiteren Verlauf synonym. Allgemein bezeichnen wir als ein Archiv einen Container von Daten, der aufbewahrt wird, um genau auf diese Daten später zugreifen zu können. Archive legt man an, um momentan nicht benötigte Daten von der Festplatte zu verbannen oder um sie von einem Rechner auf einen anderen zu kopieren... | | Die Motivation zu einem Backup resultiert aus anderen Überlegungen |
| | * Hier ist die Absicht, einen bestimmten Systemzustand aufzuzeichnen |
| | * Dabei bezieht man sich nicht auf den konkreten Inhalt einer Datei - wie bei Archiven - sondern ordnet eine Datei in die Schublade »wichtig« oder »unwichtig« ein, je nachdem, ob sie von meiner Backupstrategie betroffen sein wird oder nicht |
|
| |
|
| Die Motivation zu einem Backup resultiert aus anderen Überlegungen. Hier ist die Absicht, einen bestimmten Systemzustand aufzuzeichnen. Dabei bezieht man sich nicht auf den konkreten Inhalt einer Datei - wie bei Archiven - sondern ordnet eine Datei in die Schublade »wichtig« oder »unwichtig« ein, je nachdem, ob sie von meiner Backupstrategie betroffen sein wird oder nicht.
| | Grundsätzlich werden zwei Arten des Backups unterschieden |
| | * Das volle Backup sichert stets den kompletten Bestand an Daten, während das inkrementelle Backup nur Daten archiviert, die innerhalb einer bestimmten Periode modifiziert wurden |
| | * Dabei steht die Periode meist für den Zeitraum seit der letzten Sicherung |
|
| |
|
| Grundsätzlich werden zwei Arten des Backups unterschieden. Das volle Backup sichert stets den kompletten Bestand an Daten, während das inkrementelle Backup nur Daten archiviert, die innerhalb einer bestimmten Periode modifiziert wurden. Dabei steht die Periode meist für den Zeitraum seit der letzten Sicherung.
| | Ein volles Backup ist wegen des hohen Bedarfs an Zeit (die Sicherung erfolgt meist auf ein Bandmedium) weniger für den täglichen Einsatz geeignet, deswegen entscheidet man sich heute meist für eine Mischform aus voller und inkrementeller Datensicherung |
| | * Hierbei wird zu einem Zeitpunkt der komplette Datenbestand gesichert und nachfolgend - in regelmäßigen Abständen - archiviert man nur die modifizierten Daten |
|
| |
|
| Ein volles Backup ist wegen des hohen Bedarfs an Zeit (die Sicherung erfolgt meist auf ein Bandmedium) weniger für den täglichen Einsatz geeignet, deswegen entscheidet man sich heute meist für eine Mischform aus voller und inkrementeller Datensicherung. Hierbei wird zu einem Zeitpunkt der komplette Datenbestand gesichert und nachfolgend - in regelmäßigen Abständen - archiviert man nur die modifizierten Daten.
| | Die tatsächlich gewählte Strategie des inkrementellen Backups hängt stark von der »Statik« der Daten und vom Sicherheitsbedürfnis des Administrators ab |
| | * Im einfachsten Fall betrifft das Backup jeweils alle modifizierten Daten seit dem letzten vollen Backup bis hin zum aktuellen Zeitpunkt |
| | * Das umgekehrte Verfahren ist die Aufzeichnung der Änderungen seit der letzten inkrementellen Sicherung |
| | * Während in ersterem Fall nur die Archive des vollen und letzten inkrementellen Backups aufbewahrt werden müssen, sind beim zweiten Vorgehen das volle Backup und sämtliche inkrementellen Datensicherungsarchive aufzuheben |
| | * In der Praxis findet man auch Archivierungsformen zwischen den beiden beschriebenen Extremen (Multilevel-Backups) |
|
| |
|
| Die tatsächlich gewählte Strategie des inkrementellen Backups hängt stark von der »Statik« der Daten und vom Sicherheitsbedürfnis des Administrators ab. Im einfachsten Fall betrifft das Backup jeweils alle modifizierten Daten seit dem letzten vollen Backup bis hin zum aktuellen Zeitpunkt. Das umgekehrte Verfahren ist die Aufzeichnung der Änderungen seit der letzten inkrementellen Sicherung. Während in ersterem Fall nur die Archive des vollen und letzten inkrementellen Backups aufbewahrt werden müssen, sind beim zweiten Vorgehen das volle Backup und sämtliche inkrementellen Datensicherungsarchive aufzuheben. In der Praxis findet man auch Archivierungsformen zwischen den beiden beschriebenen Extremen (Multilevel-Backups).
| | Bedenken Sie, dass ein Festplattenfehler Sie auch während der Aufzeichnung eines Backups ereilen kann. Überschreiben Sie daher niemals ihre aktuelle Sicherungskopie |
|
| |
|
| Bedenken Sie, dass ein Festplattenfehler Sie auch während der Aufzeichnung eines Backups ereilen kann. Überschreiben Sie daher niemals ihre aktuelle Sicherungskopie.
| | Bei der Vorstellung der Backup-Werkzeuge beschränken wir uns auf Programme, die der GPL oder einer ähnlichen Lizenz unterstehen |
| | * In vielen Fällen lassen sie die Bedienfreundlichkeit kommerzieller Produkte vermissen, jedoch ist es durchaus möglich - die notwendigen Kenntnisse vorausgesetzt - diese in Skripten so zu kapseln, dass sie zum einen die Funktionalität und zum anderen die einfache Benutzbarkeit ausgereifter Werkzeuge erreichen |
|
| |
|
| Bei der Vorstellung der Backup-Werkzeuge beschränken wir uns auf Programme, die der GPL oder einer ähnlichen Lizenz unterstehen. In vielen Fällen lassen sie die Bedienfreundlichkeit kommerzieller Produkte vermissen, jedoch ist es durchaus möglich - die notwendigen Kenntnisse vorausgesetzt - diese in Skripten so zu kapseln, dass sie zum einen die Funktionalität und zum anderen die einfache Benutzbarkeit ausgereifter Werkzeuge erreichen.
| | === Medien === |
| | ; Medien für die Datensicherung |
| | Zunächst ist einfach nachvollziehbar, dass die Speicherkapazität des Backupmediums dem aufkommenden Datenvolumen entsprechen muss |
| | * Ein volles Backup könnte man auch auf Disketten vornehmen, jedoch wird man des Wechsels sicherlich bald überdrüssig und die Diskette ist selbst schon Quelle des lauernden Datenverlusts |
| | * Wer kennt nicht das leidige »Can't read sector xxx.«? Besser geeignet - vorwiegend bei dem geringeren Datenaufkommen des inkrementellen Backups - sind ZIP-Disketten |
|
| |
|
| ==== Medien für die Datensicherung ====
| | ; Festplatten |
| | Waren früher die Medien für einen Streamer die preiswerteste Alternative, so geht heute nichts über eine Festplatten |
| | * Dem System eigens für die Datensicherung eine eigene Platte zu spendieren, mag auf den ersten Blick befremdend erscheinen, jedoch erhält man für den Preis eines Streamers eine Menge Festplattenspeicher |
| | * Die weiteren Vorteile liegen im wahlfreien und wesentlich schnelleren Zugriff |
| | * Allerdings schützt die eingebaute Festplatte nur mäßig vor mutwilliger Sabotage, hier kann eine Datensicherung auf einem anderen Rechner (über das Netz) Abhilfe bringen |
|
| |
|
| Zunächst ist einfach nachvollziehbar, dass die Speicherkapazität des Backupmediums dem aufkommenden Datenvolumen entsprechen muss. Ein volles Backup könnte man durchaus auch auf Disketten vornehmen, jedoch wird man des Wechsels sicherlich bald überdrüssig und die Diskette ist selbst schon Quelle des lauernden Datenverlusts. Wer kennt nicht das leidige »Can't read sector xxx.«? Besser geeignet - vor allem bei dem geringeren Datenaufkommen des inkrementellen Backups - sind ZIP-Disketten.
| | Die durch RAID-Systeme realisierbare Datenredundanz schützt nur vor Hardwareausfall einer Festplatte, hat also nichts mit einem Backup zu tun |
|
| |
|
| Traditionell sind Magnetbänder (Quarter-Inch- und DAT-Streamer) weit verbreitet. Sowohl Kapazität als auch Zuverlässigkeit sprechen für dieses Medium. Leider lässt sich auf einem Band kein Dateisystem einrichten, so dass die Daten mit Hilfe spezieller Programme sequentiell auf dieses abgelegt werden müssen. Im Falle eines »Restores« muss demnach der gesamte Bandinhalt zurückgespielt werden, da ein wahlfreier Zugriff nicht möglich ist. Ein Magnetband muss vor dem Zugriff zurückgespult werden, hierzu nutzt man das Kommando mt mit der Option rewind : | | ; Magnetbänder |
| | Traditionell sind Magnetbänder (Quarter-Inch- und DAT-Streamer) weitverbreitet |
| | * Sowohl Kapazität als auch Zuverlässigkeit sprechen für dieses Medium |
| | * Leider lässt sich auf einem Band kein Dateisystem einrichten, sodass die Daten mithilfe spezieller Programme sequenziell auf dieses abgelegt werden müssen |
| | * Im Falle eines »Restores« muss demnach der gesamte Bandinhalt zurückgespielt werden, da ein wahlfreier Zugriff nicht möglich ist |
|
| |
|
| user@sonne> mt -f <Device> rewind
| | Ein Magnetband muss vor dem Zugriff zurückgespult werden, hierzu nutzt man das Kommando mt mit der Option rewind |
| | mt -f <Device> rewind |
|
| |
|
| Es ist außerdem möglich, mehr als ein Archiv auf einem Band unterzubringen, immer vorausgesetzt, die Speicherkapazität setzt keine Schranken: | | Es ist außerdem möglich, mehr als ein Archiv auf einem Band unterzubringen, immer vorausgesetzt, die Speicherkapazität setzt keine Schranken |
| | # Band zur ersten Dateiende-Markierung spulen |
| | mt -f <Device> fsf 1 |
| | # Band zur dritten Dateiende-Markierung spulen |
| | mt -f <Device> fsf 3 |
| | # Band zur letzten Dateiende-Markierung spulen |
| | mt -f <Device> eof |
|
| |
|
| <nowiki># Band zur ersten Dateiende-Markierung spulen</nowiki>
| |
| user@sonne> mt -f <Device> fsf 1
| |
| <nowiki># Band zur dritten Dateiende-Markierung spulen</nowiki>
| |
| user@sonne> mt -f <Device> fsf 3
| |
| <nowiki># Band zur letzten Dateiende-Markierung spulen</nowiki>
| |
| user@sonne> mt -f <Device> eof
| |
|
| |
|
| Waren früher die Medien für einem Streamer die preiswerteste Alternative, so geht heute nichts über eine Festplatte. Dem System eigens für die Datensicherung eine eigene Platte zu spendieren, mag auf den ersten Blick befremdend erscheinen, jedoch erhält man für den Preis eines Streamers eine Menge Festplattenspeicher. Die weiteren Vorteile liegen im wahlfreien und wesentlich zügigerem Zugriff. Allerdings schützt die eingebaute Festplatte nur mäßig vor mutwilliger Sabotage, hier kann eine Datensicherung auf einem anderen Rechner (über das Netz) Abhilfe bringen. Die durch RAID-Systeme realisierbare Datenredundanz schützt nur vor Hardwareausfall einer Festplatte, hat also nichts mit einem Backup zu tun!
| | Während sich die »normale« CD-ROM oder DVD wegen der nur einmaligen Beschreibbarkeit eher als Medium zur reinen Archivierung eignet, kann die CD-RW und vor allem die DVD-RW durchaus für die alltägliche Datensicherung eingesetzt werden |
| | * Allerdings erfordern umfangreiche Backups, die die Kapazität einer einzelnen CD-ROM übersteigen, die Anwesenheit des Administrators |
|
| |
|
| Während sich die »normale« CD-ROM bzw. DVD wegen der nur einmaligen Beschreibbarkeit eher als Medium zur reinen Archivierung eignet, kann die CD-RW und vor allem die DVD-RW durchaus für die alltägliche Datensicherung eingesetzt werden. Allerdings erfordern umfangreiche Backups, die die Kapazität einer einzelnen CD-ROM übersteigen, die Anwesenheit des Administrators.
| | === Daten === |
| | ; Welche Daten sollten gesichert werden? |
| | Es lohnt sich, etwas Zeit in den Plan zu investieren, welche Daten denn überhaupt den Aufwand eines Backups rechtfertigen |
|
| |
|
| ==== Welche Daten sollten gesichert werden? ====
| | Vielleicht beginnen wir mit Daten, die sichere Kandidaten sind |
|
| |
|
| Es lohnt sich, etwas Zeit in den Plan zu investieren, welche Daten denn überhaupt den Aufwand eines Backups rechtfertigen.
| | Da wären |
| | * Die Daten unter /home |
| | * Klar, die Benutzer ziehen sich ja täglich neue Daten aus dem Netz |
| | * Die Daten unter /etc |
| | * Oder haben Sie Interesse, Ihr System komplett neu konfigurieren zu müssen? |
| | * Die Daten unter /var |
| | * Hier liegen Protokolle, Mails, Druckaufträge, ... |
| | * also Daten, die permanenter Änderung unterliegen |
| | * Projektverzeichnisse, Datenbanken, ... |
|
| |
|
| Vielleicht beginnen wir mit Daten, die sichere Kandidaten sind. Da wären: * Die Daten unter /home. Klar, die Benutzer ziehen sich ja täglich neue Daten aus dem Netz.
| | Als Daten, deren Aufzeichnung Sie sich getrost sparen können, sind all jene zu nennen, die ohnehin auf einem anderen Medium vorhanden sind, zum Beispiel die Daten der Linuxdistribution, die auf CD-ROM im Schrank liegen |
| * Die Daten unter /etc. Oder haben Sie Interesse, Ihr System komplett neu konfigurieren zu müssen?
| | * Ebenso sollten Dateisysteme, die von entfernten Rechnern gemountet wurden, besser von dessen Backup-Strategie erfasst werden |
| * Die Daten unter /var. Hier liegen Protokolle, Mails, Druckaufträge... also Daten, die i.d.R. permanenter Änderung unterliegen.
| |
| * Projektverzeichnisse, Datenbanken,. ..??? | |
|
| |
|
| Als Daten, deren Aufzeichnung Sie sich getrost sparen können, sind all jene zu nennen, die ohnehin auf einem anderen Medium vorhanden sind, z.B. die Daten der Linuxdistribution, die auf CD-ROM im Schrank liegen. Ebenso sollten Dateisysteme, die von entfernten Rechnern gemountet wurden, besser von dessen Backup-Strategie erfasst werden.
| | Aber letztlich ist es die Ermessensfrage des Administrators, welche Daten er für sicherungswürdig erachtet |
| | * Eine Neuinstallation von Linux hat ja manchmal auch den Vorteil, etwas Ordnung im System zu schaffen. |
|
| |
|
| Aber letztlich ist es die Ermessensfrage des Administrators, welche Daten er für sicherungswürdig erachtet. Eine Neuinstallation von Linux hat ja manchmal auch den Vorteil, etwas Ordnung im System zu schaffen..
| | <noinclude> |
|
| |
|
| === [http://wiki.ubuntuusers.de/Archivmanager D]ateien komprimieren/archivieren === | | == Anhang == |
| | === Siehe auch === |
| | * [[Dateien_komprimieren/archivieren|Dateien komprimieren/archivieren]] |
| | * [[gzip]] |
| | * [[tar]] |
| | * [[dd]] |
| | * [[mkisofs]] |
| | * [[cpio]] |
| | * [[Dump/Restore]] |
| | {{Special:PrefixIndex/{{BASEPAGENAME}}}} |
|
| |
|
| Dateien in Archive zu verpacken und ihre Größe durch Kompressionsalgorithmen zu verkleinern ist ein häufiger Vorgang in der Datenverarbeitung. Grundsätzlich unterscheidet man zwischen Archiven und komprimierten Dateien.
| | ==== Links ==== |
| | | ===== Weblinks ===== |
| Ein Archiv ist ein unkomprimierter Behälter für Dateien. Dieses Archiv kann durch Kompressionsverfahren komprimiert werden. Es gibt allerdings ein paar Formate, die gleich auch eine Komprimierung beinhalten.
| |
| | |
| ==== Archivformate ====
| |
| | |
| Es gibt sehr viele verschiedene Formate zum Komprimieren von Daten. Soweit bekannt, lassen sich sämtliche Formate unter Linux benutzen, zumindest jedoch kann man die Dateien öffnen (entpacken). Bekannte Formate unter Linux/Unix sind folgende:* [http://wiki.ubuntuusers.de/gzip gzip] - Kurze Laufzeit, Endung '''.gz'''
| |
| * [http://wiki.ubuntuusers.de/bzip2 bzip2] - Hohe Kompressionsrate, Endung '''.bz2'''
| |
| * [http://de.wikipedia.org/wiki/Xz xz] - Neueres, 7z ähnliches Format, Endung '''.xz'''
| |
| | |
| Hierbei ist zu beachten, dass unter Linux erst die oft genutzte Kombination aus dem Archivprogramm [http://wiki.ubuntuusers.de/tar tar] und einer Kompression mittels gzip oder bzip2 ein komprimiertes Archiv ergibt. '''.tar.gz''' bzw. '''.tar.bz2'''-Dateien sind also '''.tar''' Archive, die mit dem entsprechenden Kompressionsverfahren komprimiert wurden.
| |
| | |
| Unter Windows sind vor allem die folgenden Formate gebräuchlich, die sich aber auch unter Linux benutzen lassen:* [http://de.wikipedia.org/wiki/ZIP_%28Dateiformat%29 ZIP] - Das wohl bekannteste Packformat, gleichzeitig auch die Dateiendung '''.zip'''
| |
| * [http://de.wikipedia.org/wiki/RAR_%28Dateiformat%29 RAR] - Bekanntes Dateiformat, gleichzeitig auch die Dateiendung '''.rar'''
| |
| * [http://de.wikipedia.org/wiki/ACE_%28Dateiformat%29 ACE] - ACE Packformat, sehr leistungsfähig, gleichzeitig auch die Dateiendung '''.ace'''
| |
| * [http://de.wikipedia.org/wiki/7z 7z] - Freies Packformat, sehr leistungsfähig und quelloffen. Dateiendung '''.7z'''
| |
| | |
| Welches Format man wählt hängt vom Verwendungszweck ab. Möchte man Mails auf einem Server im laufenden Betrieb komprimieren dann sollte der Prozess den Server nicht zu stark beanspruchen damit der Mailverkehr nicht beeinträchtigt wird.
| |
| | |
| Hat man jedoch nur sehr wenig Platz so kann man eine stärkere Komprimierung wählen, dies benötigt jedoch auch mehr Leistung und dauert länger. Der folgende Test samt Auflistung stammt aus dem Artikel [http://wiki.ubuntuusers.de/qt4-fsarchiver qt4-fsarchiver] und soll ein Gefühl für Komprimierung und Geschwindigkeit vermitteln.
| |
| | |
| Für den gesamtem Test lagen folgende Bedingungen zu Grunde: * Quellmedium: ganze Partition
| |
| * Partitionstyp: Kubuntu Lucid '''root'''-Partition (breit gestreute Datenformate); ohne das '''/home''' Verzeichnis (liegt in separater Partition)
| |
| * Partitionsgröße: 15 GiB; tatsächlicher Dateninhalt 4,43 GiB; 189807 Dateien und Verzeichnisse
| |
| | |
| {| class="wikitable sortable" style="border-spacing:0;margin:auto;width:17.501cm;"
| |
| |- style="border:0.05pt solid #000000;padding:0.049cm;"
| |
| | colspan="4" | Kompressionsübersicht
| |
| |-
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding:0.049cm;" | Modus/Stufe
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding:0.049cm;" | Komprimierte Größe (~ GiB)
| |
| | align=center style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding:0.049cm;" | Zeitaufwand
| |
| | align=center style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding:0.049cm;" | Ersparnis in ~ %
| |
| |-
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding:0.049cm;" | lzo (keine Unterstufen)
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding:0.049cm;" | 2.141.695.938 Byte (1.99 GiB)
| |
| | align=center style="background-color:#ccff99;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding:0.049cm;" | 11 min 12 Sek
| |
| | align=center style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding:0.049cm;" | 55,1
| |
| |-
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding:0.049cm;" | gzip fast
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding:0.049cm;" | 1.822.273.889 Byte (1.7 GiB)
| |
| | align=center style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding:0.049cm;" | 12min 11 Sek
| |
| | align=center style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding:0.049cm;" | 61,6
| |
| |-
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding:0.049cm;" | gzip standard
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding:0.049cm;" | 1.695.248.687 Byte (1.58 GiB)
| |
| | align=center style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding:0.049cm;" | 12 min 49 Sek
| |
| | align=center style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding:0.049cm;" | 64,3
| |
| |-
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding:0.049cm;" | gzip best
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding:0.049cm;" | 1.688.266.397 Byte (1,57 GiB)
| |
| | align=center style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding:0.049cm;" | 23 min 52 Sek
| |
| | align=center style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding:0.049cm;" | 64,6
| |
| |-
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding:0.049cm;" | bzip2 fast
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding:0.049cm;" | 1.660.019.964 Byte (1,55 GiB)
| |
| | align=center style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding:0.049cm;" | 26 min 11 Sek
| |
| | align=center style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding:0.049cm;" | 65
| |
| |-
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding:0.049cm;" | bzip2 good
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding:0.049cm;" | 1.637.605.954 Byte (1,53 GiB)
| |
| | align=center style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding:0.049cm;" | 28 min 23 Sek
| |
| | align=center style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding:0.049cm;" | 65,5
| |
| |-
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding:0.049cm;" | lzma fast
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding:0.049cm;" | 1.597.604.088 Byte (1,49 GiB)
| |
| | align=center style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding:0.049cm;" | 19 min 19 Sek
| |
| | align=center style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding:0.049cm;" | 66,4
| |
| |-
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding:0.049cm;" | lzma medium
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding:0.049cm;" | 1.480.208.664 Byte (1,38 GiB)
| |
| | align=center style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding:0.049cm;" | 59 min 4 Sek
| |
| | align=center style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding:0.049cm;" | 68,8
| |
| |-
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding:0.049cm;" | lzma best
| |
| | style="background-color:#ccff99;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding:0.049cm;" | 1.461.640.213 Byte (1,36 GiB)
| |
| | align=center style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding:0.049cm;" | 67 min 0 Sek
| |
| | align=center style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding:0.049cm;" | 69,3
| |
| | |
| |-
| |
| |}
| |
| ==== Programme ====
| |
| | |
| Um diese Formate unter Linux packen und entpacken zu können, benötigt man für jedes Format ein eigenes Programm. Für die großen Desktop-Umgebungen GNOME und KDE gibt es Archivmanager, die über eine komfortable grafische Oberfläche verfügen, jedoch auf die Einzelprogramme zurückgreifen. Daher müssen diese auf jeden Fall installiert sein.
| |
| | |
| Um mit sämtlichen oben genannten Formaten umgehen zu können, müssen die folgenden Pakete installiert [http://wiki.ubuntuusers.de/Archivmanager?redirect=no#source-1 [1]] werden. Die ersten fünf Pakete sollten bereits nach einer Standardinstallation vorhanden sein.* [http://wiki.ubuntuusers.de/tar tar] - ein Archivierungsprogramm, das unter Linux oft mit GZip oder BZip verwendet wird
| |
| * [http://wiki.ubuntuusers.de/bzip2 bzip2] - für Dateien vom Typ BZip
| |
| * [http://wiki.ubuntuusers.de/gzip gzip] - für Dateien vom Typ GZip
| |
| * [http://wiki.ubuntuusers.de/lzop lzop] - auf Geschwindigkeit optimiertes Packprogramm
| |
| * '''zip''' - zum Packen von Zip-Archiven
| |
| * '''unzip''' - zum Entpacken von Zip-Archiven
| |
| * '''xz-utils''' und '''xz-lzma''' - für XZ-Dateien und den Vorgänger LZMA
| |
| * [http://wiki.ubuntuusers.de/7z p7zip-full] (''universe'') - zum Packen/Entpacken mittels LZMA Algorithmus von 7-Zip-Archiven und Entpacken von AES-verschlüsselten Zip-Archiven
| |
| * '''lha''' (''multiverse'', [http://wiki.ubuntuusers.de/Archivmanager?redirect=no#source-2 [2]]) - ein LZH-Archiver, wird von [http://wiki.ubuntuusers.de/Ark Ark] benutzt
| |
| | |
| Erwähnenswert ist auch folgende Anwendung, die bereits in der Standardinstallation mit installiert wird: * [http://wiki.ubuntuusers.de/split split] - Archive in mehrere (beliebig große) Teile teilen
| |
| | |
| Für diverse proprietäre Archivformate gibt es die Wahl zwischen einer Open Source Version und einer Version, die unter einer unfreien Lizenz steht, die dafür aber mehr Funktionalität bietet. So können beispielsweise nur die proprietären Versionen mit Passwörtern geschützte Archive extrahieren usw. Man sollte hierbei darauf achten, dass entweder die proprietäre oder die freie Version installiert ist.
| |
| | |
| ===== Ace =====
| |
| | |
| * '''unace''' (''universe'')
| |
| * '''unace-nonfree''' (''multiverse'')
| |
| | |
| Hinweise: unace-nonfree ist erst ab Ubuntu 7.04 Feisty Fawn verfügbar, und funktioniert nicht mit dem Archivmanager File Roller von GNOME.
| |
| | |
| ===== Rar =====
| |
| | |
| Für '''rar''' Dateien muss eines der folgenden Pakete installiert werden: * '''rar''' (''multiverse'' - zum Erstellen von Rar-Archiven )
| |
| * '''unrar''' (''multiverse'')
| |
| * '''unrar-free''' (''universe'')
| |
| * '''p7zip-rar''' (''universe'')
| |
| * '''unar''' (''universe'')
| |
| | |
| ===== Hinweis =====
| |
| | |
| RAR und Ace sind [http://de.wikipedia.org/wiki/Proprietär proprietäre] Dateiformate. Das heißt, die Mechanismen zum Erstellen und Entpacken solcher Archive beruhen auf geschützten
| |
| | |
| Closed-Source Verfahren. [https://gna.org/projects/unrar/ unrar-free] [[Image:Grafik9.png|top|alt="{en}"]]und unace sind Versuche, die wichtigsten Funktionen zum Entpacken unter einer offenen Lizenz bereit stellen zu können. [http://www.rarlab.com/ unrar] [[Image:Grafik10.png|top|alt="{en}"]]und unace-nonfree sind kommerzielle Software von den Herstellern der beiden Formate.
| |
| | |
| Welches dieser Pakete man installieren soll, ist dem Benutzer selber überlassen. Möchte man ein Computersystem ohne proprietäre Software, so sollte man die freien Pakete nutzen, muss aber mit der Einschränkung leben, nicht alle Archive entpacken zu können.
| |
| | |
| Möchte man alle Archive inklusive beispielsweise dem RAR 3.0 Format und Passwort geschützte Archive entpacken, so muss man auf die proprietären Pakete zurückgreifen.
| |
| | |
| ==== Archivmanager ====
| |
| | |
| [[Image:Grafik11.png|right]]Die großen Desktop-Umgebungen bringen von Haus aus Archivmanager mit, die Daten (de-)komprimieren können.
| |
| | |
| Dabei sollte man im Kopf behalten, dass diese Archivmanager nur grafische Frontends für die einzelnen Packprogramme sind, die etwas weiter oben beschrieben werden.
| |
| | |
| Ubuntu installiert aus lizenzrechtlichen Gründen standardmäßig keine Packprogramme für beliebte Archivformate wie Rar oder 7z.
| |
| | |
| Diese müssen also wie oben beschrieben installiert sein, damit die Archivmanager solche Archive verarbeiten können.
| |
| | |
| ====== File Roller ======
| |
| | |
| File Roller /http://fileroller.sourceforge.net/) ist der Archivmanager der [http://wiki.ubuntuusers.de/Unity Unity] und [http://wiki.ubuntuusers.de/GNOME GNOME] Desktop-Umgebung. Es wird direkt bei der Installation von Ubuntu mitinstalliert.
| |
| | |
| File Roller ist vollständig in [http://wiki.ubuntuusers.de/Nautilus Nautilus], dem Dateimanager von der GNOME Desktop-Umgebung integriert. Ein Doppelklick links auf ein Archiv öffnet dieses in File Roller. Will man ein Archiv anlegen, so markiert die zu archivierenden Dateien in Nautilus und wählt ''"Komprimieren ..."'' oder ''"Archiv anlegen"'' aus dem Kontextmenü.
| |
| | |
| ====== ARK ======
| |
| | |
| [[Image:Grafik15.png|right]][http://wiki.ubuntuusers.de/Ark Ark] ist der Archivmanager der Desktop-Umgebung [http://wiki.ubuntuusers.de/KDE KDE]. Das Programm wird automatisch bei der Installation von [http://wiki.ubuntuusers.de/Kubuntu Kubuntu] installiert.
| |
| | |
| Das Programm selber findet man unter* ''"K-Menü -> Dienstprogramme -> Ark (Archivprogramm)"''
| |
| | |
| oder man startet es, indem man ein Archiv aus einem [http://wiki.ubuntuusers.de/Dateimanager Dateimanager] heraus öffnet.
| |
| | |
| ====== Xarchiver ======
| |
| | |
| [[Image:Bild1.png|right]][http://wiki.ubuntuusers.de/Xarchiver Xarchiver] ist der Archivmanager der Desktop-Umgebung [http://wiki.ubuntuusers.de/Xfce Xfce] und wird automatisch mit [http://wiki.ubuntuusers.de/Xubuntu Xubuntu] installiert.
| |
| | |
| Das Programm selbst findet man im Anwendungsmenü unter ''"Zubehör -> Xarchiver"'' oder man startet es, indem man ein Archiv aus dem [http://wiki.ubuntuusers.de/Dateimanager Dateimanager] heraus öffnet.
| |
| | |
| ====== Squeeze ======
| |
| | |
| Squeeze (http://squeeze.xfce.org/) ist ein moderner, fortgeschrittener, schneller und einfach zu bedienender Archivmanager für [http://wiki.ubuntuusers.de/Xfce Xfce]. Weitere Informationen im Artikel Squeeze (http://wiki.ubuntuusers.de/Squeeze).
| |
| | |
| ===== [http://wiki.ubuntuusers.de/7z?action=backlinks 7z] =====
| |
| | |
| 7z ist sowohl ein Dateiformat als auch ein Kommandozeilenprogramm zur Datenkompression. Es handelt sich um die Referenzimplementierung des hocheffizienten, freien LZMA-Algorithmus', der die allermeisten anderen Algorithmen in ihrer Kompressionsstärke mitunter deutlich übertrifft.
| |
| | |
| Ein Beispiel: LZMA komprimiert durchschnittlich 50% stärker als der Deflate-Algorithmus des weit verbreiteten ZIP-Formats. Auch mit proprietären, kommerziellen Formaten wie RAR kann sich 7z messen. Sensible Daten können per AES-256 verschlüsselt werden und ein Archiv kann bei Bedarf in beliebig große Teile zerlegt werden.
| |
| | |
| Dank seiner Open-Source-Entwicklung hat 7z mittlerweile große Verbreitung gefunden. Die Standard-Archivmanager File-Roller (GNOME), Xarchiver (XFCE/LXDE) und Ark (KDE) kommen mit dem Format zurecht, indem sie auf das hier beschriebene 7z-Terminalprogramm zurückgreifen.
| |
| | |
| Auch für Windows gibt es eine breite Palette an Programmen, die 7z von Haus aus unterstützen. Eine Auflistung findet sich auf der Homepage.
| |
| | |
| ====== Hinweis ======
| |
| | |
| Der LZMA-Algorithmus stellt beim Komprimieren sehr hohe Ansprüche an die Systemleistung, insbesondere an den Arbeitsspeicher. Leistungsschwache Systeme werden spätestens bei großen Datenmengen und höheren Kompressionsstufen völlig in die Knie gehen ("System Lock-up"). Um das Potential voll auszuschöpfen, sollten mindestens 2 GiB Arbeitsspeicher vorhanden sein und auch der Prozessor sollte eine Gesamtleistung von 2 GHz nicht unterschreiten.
| |
| | |
| Nach der Installation wird '''p7zip''' mit <tt>7zr</tt> aufgerufen und '''p7zip-full''' nur mit <tt>7z</tt>. Im Verlaufe dieses Artikels wird von p7zip-full ausgegangen, der Befehl ist bei Bedarf auszutauschen.
| |
| | |
| ====== Benutzung ======
| |
| | |
| ====== Achtung! ======
| |
| | |
| 7z alleine ist für ein Backup eines kompletten Linux-/Unix-Systems nicht geeignet, da es sämtliche Zugriffsrechte ignoriert. Eine Möglichkeit, dieses Problem zu umgehen, findet sich im Abschnitt Tipps.
| |
| | |
| Die allgemeine Syntax von p7zip-full lautet:
| |
| | |
| 7z OPTIONEN SWITCHES AUSGABE EINGABE
| |
| | |
| Beispiel
| |
| | |
| 7z a -t7z -m0=LZMA -mmt=on -mx=9 -md=96m -mfb=256 /home/peter/kirschkuchenrezept.7z /home/peter/kirschkuchenrezept.doc
| |
| | |
| 7z erkennt Verzeichnisse (rekursives arbeiten) selbstständig, es muss kein spezieller Parameter angegeben werden. Optionen werden immer als Buchstaben am Anfang angegeben, während die darauf folgenden Switches immer ein vorstehendes <tt>-</tt> haben.
| |
| | |
| ====== Optionen ======
| |
| | |
| Mit den Optionen wird zuerst grob festgelegt, was zu tun ist.
| |
| | |
| {| class="wikitable sortable" style="border-spacing:0;margin:auto;width:17.501cm;"
| |
| |- style="border:0.05pt solid #000000;padding:0.049cm;"
| |
| | colspan="2" | '''Optionen '''
| |
| |-
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding:0.049cm;" | '''Option '''
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding:0.049cm;" | '''Beschreibung '''
| |
| |-
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding:0.049cm;" | <tt>a</tt>
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding:0.049cm;" | Dateien/Verzeichnisse einem Archiv hinzufügen bzw. eine Archivdatei erstellen
| |
| |-
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding:0.049cm;" | <tt>d</tt>
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding:0.049cm;" | Dateien/Verzeichnisse aus einem Archiv löschen
| |
| |-
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding:0.049cm;" | <tt>e</tt>
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding:0.049cm;" | Einfaches Entpacken aller Dateien aus dem Archiv
| |
| |-
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding:0.049cm;" | <tt>l</tt>
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding:0.049cm;" | Inhalt eines Archivs auflisten
| |
| |-
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding:0.049cm;" | <tt>t</tt>
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding:0.049cm;" | Archiv auf Beschädigungen prüfen
| |
| |-
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding:0.049cm;" | <tt>u</tt>
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding:0.049cm;" | Archivinhalt aktualisieren
| |
| |-
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding:0.049cm;" | <tt>x</tt>
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding:0.049cm;" | Archiv entpacken und dabei die Verzeichnisstruktur erhalten
| |
| | |
| |-
| |
| |}
| |
| ====== Switches ======
| |
| | |
| Im folgenden nur ein Auszug der wichtigsten Switches, welche die genaue Vorgehensweise festlegen. Der Fokus liegt hier auf dem LZMA-Algorithmus. Informationen zu weiteren Switches finden sich in den [http://wiki.ubuntuusers.de/man Manpages].
| |
| | |
| {| class="wikitable sortable" style="border-spacing:0;margin:auto;width:17.501cm;"
| |
| |- style="border:0.05pt solid #000000;padding:0.049cm;"
| |
| | colspan="2" | '''Switches '''
| |
| |-
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding:0.049cm;" | '''Switch '''
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding:0.049cm;" | '''Beschreibung '''
| |
| |-
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding:0.049cm;" | <tt>-l</tt>
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding:0.049cm;" | keine [http://de.wikipedia.org/wiki/Symbolische_Verknüpfung Symlinks] archivieren, sondern ihr Ziel
| |
| |-
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding:0.049cm;" | <tt>-m</tt>
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding:0.049cm;" | Algorithmus für Kompression festlegen (z.B. <tt>-m0=LZMA</tt>)
| |
| |-
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding:0.049cm;" | <tt>-mhe=on</tt>
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding:0.049cm;" | Den [http://de.wikipedia.org/wiki/Header Header] des Archivs verschlüsseln
| |
| |-
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding:0.049cm;" | <tt>-oZIEL</tt>
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding:0.049cm;" | Nicht ins gleiche Verzeichnis entpacken (Standard), sondern nach "ZIEL"
| |
| |-
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding:0.049cm;" | <tt>-pPASSWORT</tt>
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding:0.049cm;" | Archiv mit Passwort schützen
| |
| |-
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding:0.049cm;" | <tt>-tDATEIFORMAT</tt>
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding:0.049cm;" | Dateiformat festlegen (z.B. <tt>-t7z</tt>)
| |
| |-
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding:0.049cm;" | <tt>-mmt=on</tt>
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding:0.049cm;" | [http://de.wikipedia.org/wiki/Multithreading Multithreading] für Mehrkernprozessoren oder Multiprozessorsysteme aktivieren
| |
| |-
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding:0.049cm;" | <tt>-mx=STUFE</tt>
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding:0.049cm;" | Stufe der Kompressionsstärke (1=schnell und schlecht, 9=langsam und gut)
| |
| |-
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding:0.049cm;" | <tt>-mfb=NUMMER</tt>
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding:0.049cm;" | Anzahl der [http://de.wikipedia.org/wiki/Wörterbuchkompression Wörterbücher] (8, 12, 16, 24, 32, 48, 64, 96, 128, 192, 256, 273)
| |
| |-
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding:0.049cm;" | <tt>-md=NUMMER</tt>
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding:0.049cm;" | Größe der Wörterbücher (64k, 1m, 2m, 4m, 6m, 8m, 12m, 16m, 24m, 32m, 48m, 64m, 96m, 128m)
| |
| |-
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding:0.049cm;" | <tt>-ms=on</tt>
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding:0.049cm;" | [http://de.wikipedia.org/wiki/Progressive_Kompression Progressive ("solid") Kompression]
| |
| | |
| |-
| |
| |}
| |
| ====== Tipps ======
| |
| | |
| * Je höher die anstehenden Nummern bei den Switches <tt>-mfb</tt> und <tt>-md</tt> sind, desto stärker ist die Kompression. Dies wirkt sich allerdings nicht nur auf die benötigte Zeit des Vorgangs aus, sondern auch auf die Systemauslastung, insbesondere die des Arbeitsspeichers. Es sei nochmals darauf hingewiesen, dass der Switch <tt>-md</tt> nicht die maximale Beanspruchung des Arbeitsspeichers definiert.
| |
| * Die progressive Komprimierung wird die Effizienz immer dann erhöhen, wenn mehrere Dateien gepackt werden sollen – insbesondere, wenn diese sich ähneln. Der nötige Aufwand kann durch die Methode jedoch stark in die Höhe schießen, sie sollte mit Bedacht eingesetzt werden. Ist ein Archiv progressiv komprimiert worden, können einzelne Dateien bzw. Verzeichnisse nur entpackt werden, indem alles, was sich im Archiv davor befindet, abgearbeitet wird. In einem solchem Szenario dauert das Entpacken länger. Beim Entpacken des gesamten Archivs gibt es hingegen keinen sonderlichen Zeitunterschied.
| |
| * Um doch ein Backup eines Linux-/Unix-Systems mit 7z zu komprimieren, empfiehlt es sich, dieses vorher mit [http://wiki.ubuntuusers.de/tar tar] zu einem einzelnen Datenstrom zusammenzufügen. Beispiel:
| |
| | |
| tar cf - PFAD | 7za a -si ERGEBNIS.tar.7z
| |
| | |
| Das Entpacken eines solchen Archives läuft dann wieder in umgekehrter Reihenfolge ab (Achtung! Das Zielverzeichnis '''ZIELPFAD''' muss vorhanden sein!):
| |
| | |
| 7za x -so ERGEBNIS.tar.7z | tar xf - -C ZIELPFAD
| |
| | |
| ==== Terminal ====
| |
| | |
| Man muss nicht zwangsläufig auf die graphischen Archivmanager zurückgreifen. Alle Packprogramme kann man auch von einem Terminal heraus bedienen. Wichtig dabei ist natürlich, dass die oben genannten Packprogramme installiert sind.
| |
| | |
| ===== Ace =====
| |
| | |
| <nowiki># Falls unance-nonfree installiert ist</nowiki>
| |
| unace (OPTIONEN) ARCHIVNAME.ace
| |
| <nowiki># Falls unace installiert ist</nowiki>
| |
| unace e ARCHIVNAME.ace
| |
| | |
| ===== Rar =====
| |
| | |
| ====== Archive erstellen ======
| |
| | |
| <nowiki># Allgemein</nowiki>
| |
| rar a ARCHIVNAME DATEI1 (DATEI2) ...
| |
| <nowiki># Beispiel</nowiki>
| |
| rar a -v2048 test.rar -p datei1 datei2 datei3
| |
| | |
| ====== Archive entpacken ======
| |
| | |
| Manche unter Windows erstellte Rar-Archive lassen sich aus unbekannten Gründen nicht mit Ark unter KDE öffnen. Hier ist man gezwungen, auf das Entpacken im Terminal zurückzugreifen, was in der Regel einwandfrei funktioniert. Dazu geht man wie folgt vor:
| |
| | |
| <nowiki># Allgemein</nowiki>
| |
| unrar x ARCHIVNAME.rar
| |
| <nowiki># Beispiel</nowiki>
| |
| unrar x -pPasswort ~/Desktop/beispiel.rar
| |
| | |
| Ein Sonderfall ergibt sich, wenn bei einer passwortgeschützten Datei das Passwort mit Sonderzeichen, wie etwa ~ endet. In diesem Fall führt der o. g. Befehl zu der Fehlermeldung
| |
| | |
| bash: !~: event not found
| |
| | |
| Das Problem kann man umgehen, indem man zunächst das Entpacken ohne Passworteingabe einleitet (siehe Befehl oben). Dann wird man automatisch nach dem Passwort gefragt, welches man nun eingeben kann. Achtung: Das Passwort wird bei der Eingabe nicht angezeigt.
| |
| | |
| Enter password (will not be echoed) for Dateiname.rar:
| |
| | |
| {| class="wikitable sortable" style="border-spacing:0;margin:auto;width:17.501cm;"
| |
| |-
| |
| | style="border-top:0.05pt solid #000000;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding:0.049cm;" | '''Kommandos / Optionen '''
| |
| | style="border:0.05pt solid #000000;padding:0.049cm;" | '''Bemerkung '''
| |
| |-
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding:0.049cm;" | <tt>a</tt>
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding:0.049cm;" | Dateien sollen hinzugefügt werden.
| |
| |-
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding:0.049cm;" | <tt>e</tt>
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding:0.049cm;" | Dateien sollen entpackt werden.
| |
| |-
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding:0.049cm;" | <tt>x</tt>
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding:0.049cm;" | Dateien sollen in die in der Datei enthaltene Verzeichnisstruktur entpackt werden.
| |
| |-
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding:0.049cm;" | <tt>-m[KOMPRESSIONSLEVEL]</tt>
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding:0.049cm;" | Setzt den Kompressionslevel ( <tt>-m0</tt> = ohne; <tt>-m3</tt> = standard; <tt>-m5</tt> = maximal) (optional).
| |
| |-
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding:0.049cm;" | <tt>-v[GROESSE][EINHEIT]</tt>
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding:0.049cm;" | Legt die Dateigröße fest, als Einheit kann man u.a. Byte (<tt>b</tt>), Kilobyte (<tt>k</tt>), und Megabyte (<tt>m</tt>) wählen. Wenn man nun Teilarchive haben will, die z.B. 100 Megabyte groß sind, wählt man folgende Option <tt>-v100m</tt>. Die Größe der Teilarchive geht bei 1000 Bytes los, kleinere Teilarchive kann man nicht erstellen (optional).
| |
| |-
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding:0.049cm;" | <tt>-rr[GROESSE][EINHEIT]</tt>
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding:0.049cm;" | Fügt Wiederherstellungsinformationen hinzu. Diese können bspw. in Prozent angegeben werden, für fünf Prozent gibt man also <tt>-rr5%</tt> an. Wird keine Einheit angegeben, gibt die Größenangabe die Anzahl der Sektoren an, die zur Wiederherstellung verwendet werden können (optional).
| |
| |-
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding:0.049cm;" | <tt>-p</tt>
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding:0.049cm;" | Setzt ein Passwort, das man nach der Eingabe festlegt (optional).
| |
| |-
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding:0.049cm;" | <tt>-hp</tt>
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding:0.049cm;" | Setzt auch ein Passwort, Unterschied zu <tt>-p</tt> ist, dass das Archiv nun komplett verschlüsselt wird, d.h. die Dateinamen im Archiv werden auch verschlüsselt (optional).
| |
| | |
| |-
| |
| |}
| |
| ===== tar.gz/tar.bz2 =====
| |
| | |
| ====== tar.gz ======
| |
| | |
| ====== Archive erstellen ======
| |
| | |
| <nowiki># Allgemein</nowiki>
| |
| tar -czf ARCHIVNAME.tar.gz DATEI1/VERZEICHNIS1 (DATEI2/VERZEICHNIS2) ...
| |
| <nowiki># Beispiel</nowiki>
| |
| tar -czf beispiel.tar.gz test example
| |
| <nowiki># oder</nowiki>
| |
| tar -czf beispiel.tar.gz test/
| |
| | |
| Dabei wird im ersten Beispiel ein Archiv '''beispiel.tar.gz''' aus den Dateien '''test''' und '''example''' erstellt. Im zweiten Beispiel wird aus dem Verzeichnis '''test/''' ein Archiv erstellt.
| |
| | |
| ====== Archive entpacken ======
| |
| | |
| <nowiki># Allgemein</nowiki>
| |
| tar -xzf ARCHIVNAME.tar.gz
| |
| <nowiki># Beispiel</nowiki>
| |
| tar -xzf beispiel.tar.gz
| |
| | |
| ====== tar.bz2 ======
| |
| | |
| ====== Archive erstellen ======
| |
| | |
| <nowiki># Allgemein</nowiki>
| |
| tar -cjf ARCHIVNAME.tar.bz2 DATEI1/VERZEICHNIS1 (DATEI2/VERZEICHNIS2) ...
| |
| <nowiki># Beispiel</nowiki>
| |
| tar -cjf beispiel.tar.bz2 test example
| |
| <nowiki># oder</nowiki>
| |
| tar -cjf beispiel.tar.bz2 test/
| |
| | |
| Dabei wird im ersten Beispiel ein Archiv '''beispiel.tar.bz2''' aus den Dateien '''test''' und '''example''' erstellt. Im zweiten Beispiel wird aus dem Verzeichnis '''test/''' ein Archiv erstellt.
| |
| | |
| ====== Archive entpacken ======
| |
| | |
| <nowiki># Allgemein</nowiki>
| |
| tar -xjf ARCHIVNAME.tar.bz2
| |
| <nowiki># Beispiel</nowiki>
| |
| tar -xjf beispiel.tar.bz2
| |
| | |
| Dabei entsteht in der Regel ein neues Verzeichnis, in welches man dann wechseln kann. Manchmal möchte man den Inhalt des Archivs auch direkt an einen Ort entpacken (für '''.tar.bz2''' bitte die Befehle entsprechend ändern):
| |
| | |
| <nowiki># Allgemein</nowiki>
| |
| tar -xjf ARCHIVNAME.tar.bz2 -C ZIELORDNER
| |
| <nowiki># Beispiel</nowiki>
| |
| tar -xjf php-5.1.0.tar.bz2 -C /opt/php5
| |
| | |
| ===== UnZip =====
| |
| | |
| <nowiki># Datei entpacken</nowiki>
| |
| unzip ARCHIVNAME.zip
| |
| <nowiki># in Ordner entpacken</nowiki>
| |
| unzip ARCHIVNAME.zip -d ZIELORDNER
| |
| | |
| ===== atool, Unpack und dtrx =====
| |
| | |
| Um sich nicht die unterschiedlichen Befehle und Parameter der verschiedenen Archivformattools zu merken, gibt es [http://www.nongnu.org/atool/ atool] [[Image:Bild3.png|top|alt="{en}"]], [http://Unpack.sourceforge.net/ Unpack] [[Image:Grafik21.png|top|alt="{en}"]]oder [http://brettcsmith.org/2007/dtrx/ dtrx] [[Image:Grafik22.png|top|alt="{en}"]]. Die Programme kennen die Syntax um Archive zu entpacken und ersparen dem Benutzer die Eingabe des kompletten Befehls. So kann man dann mit einem einzigen Befehl wie
| |
| | |
| aunpack ARCHIV
| |
| | |
| oder
| |
| | |
| unp ARCHIV
| |
| | |
| oder
| |
| | |
| dtrx ARCHIV
| |
| | |
| bequem im Terminal [http://wiki.ubuntuusers.de/Archivmanager?redirect=no#source-4 [4]] entpacken. Weitere Informationen zu Unpack findet man im Wiki unter [http://wiki.ubuntuusers.de/unp unp].
| |
| | |
| Die Funktionalität von atool geht sogar noch weiter, so können u.a. mit <tt>apack</tt> Archive erstellt werden oder mit <tt>als</tt> Archivinhalte aufgelistet werden. '''atool''' kann aus den ''universe''-Quellen installiert werden:* '''atool''' (''universe'')
| |
| | |
| Analog '''dtrx''': * '''dtrx''' (''universe'')
| |
| | |
| ===== zless und bzless =====
| |
| | |
| [http://wiki.ubuntuusers.de/less#zless-und-bzless zless und bzless] sind zwei kleine Programme, mit denen sich gepackte Textdateien ('''.gz''' und '''.bz2''') betrachten lassen, ohne sie vorher manuell entpacken zu müssen.
| |
| | |
| ==== Weitere Packprogramme ====
| |
| | |
| ===== cabextract =====
| |
| | |
| [http://wiki.ubuntuusers.de/Cabinet-Dateien#cabextract cabextract] ist zum Entpacken von [http://wiki.ubuntuusers.de/Cabinet-Dateien Cabinet-Dateien], welche im Format '''.cab''' vorliegen, gedacht.
| |
| | |
| ===== innoextract =====
| |
| | |
| [http://wiki.ubuntuusers.de/innoextract innoextract] extrahiert Installationsdateien, welche mit [http://de.wikipedia.org/wiki/Inno_Setup Inno Setup] erstellt wurden.
| |
| | |
| ===== unshield =====
| |
| | |
| [http://wiki.ubuntuusers.de/Cabinet-Dateien#unshield unshield] ist wie cabextract zum Entpacken von [http://wiki.ubuntuusers.de/Cabinet-Dateien Cabinet-Dateien] gedacht, jedoch für Anwendungen, die [http://de.wikipedia.org/wiki/InstallShield InstallShield] verwenden.
| |
| | |
| ===== PeaZip =====
| |
| | |
| [[Image:Bild4.png|right]][http://wiki.ubuntuusers.de/PeaZip PeaZip] ist ein relativ junges plattformübergreifendes Projekt (2005) und stellt eine gute und funktionserweiterte Alternative zu den obigen Archivmanagern dar.
| |
| | |
| Es unterstützt praktisch alle im Rahmen der lizenzrechtlichen Bestimmungen verfügbaren Formate und bietet eine kaum mehr überschaubare
| |
| | |
| Vielfalt an Funktionen, Optionen und Filtern. Besondere Beachtung verdienen die umfangreichen Möglichkeiten zur Datensicherheit (verschiedene Verschlüsselungen, Löschen durch mehrfaches Überschreiben usw.).
| |
| | |
| Im Gegensatz zu den oben beschriebenen [http://wiki.ubuntuusers.de/Archivmanager?redirect=no#Archivmanager Archivmanagern] ist PeaZip kein grafisches Frontend für die einzelnen oben beschriebenen [http://wiki.ubuntuusers.de/Archivmanager?redirect=no#Programme Packprogramme], sondern ein eigenständiges Pack- und Archivierungsprogramm.
| |
| | |
| Es ist also nicht auf die separate Installation von Packprogrammen angewiesen.
| |
| | |
| === Dateien komprimieren mit gzip ===
| |
| | |
| gzip komprimiert Dateien
| |
| | |
| gzip [-cdfhlLnNqrtvV19] [-S Endung [Datei ...]
| |
| | |
| gzip komprimiert Dateien mit dem LZ77 Lempel-Ziv Algorithmus. gzip erzielt erheblich bessere Kompressionsraten als das mit dem LZW-Algorithmus arbeitende compress-Programm. Weil es sich ansonsten sehr ähnlich verhält, ist abzusehen, daß es compress als Standardpacker im Bereich der freien Software verdrängen wird. Mit gzip können auch Dateien ausgepackt werden, die mit compress oder pack gepackt wurden. Archive, die mit zip gepackt wurden, können mit gzip nur ausgepackt werden, wenn sie eine einzige Datei enthalten und mit der ,,deflation`` Methode gepackt wurden.
| |
| | |
| gzip ist kein Archivpacker wie lharc, arj oder pkzip.
| |
| | |
| gzip komprimiert einzelne Dateien, unabhängig davon, ob die resultierende Datei tatsächlich kleiner ist, und ersetzt die Urdatei durch die komprimierte, indem es an den Dateinamen die Endung `.gz' anhängt. Wenn der Dateiname durch Anhängen der Endung unzulässig lang würde, verkürzt gzip automatisch den Namen um die erforderliche Anzahl Zeichen.
| |
| | |
| Die Zeitmarke der Datei und die Zugriffsrechte bleiben beim Komprimieren erhalten. Um die Wiederherstellung der Zeitmarke und des Dateinamens sicherzustellen, werden diese Daten mit eingepackt und können beim entkomprimieren verwendet werden. Außerdem wird eine CRC-Checksumme mit eingepackt, mit der beim Auspacken automatisch die Integrität der Daten geprüft wird.
| |
| | |
| Wenn gzip ohne Dateinamen aufgerufen wird, liest es von der Standardeingabe und schreibt auf die Standardausgabe. Der gleiche Effekt wird erzielt, wenn anstelle einer Eingabedatei ein Minuszeichen `-' angegeben wird.
| |
| | |
| Wie bei compress kann auch gzip auf andere Namen gelinkt werden, um bestimmte Aufgaben zu erfüllen.
| |
| | |
| Unter dem Namen gunzip arbeitet es wie gzip -d, packt also komprimierte Dateien der oben aufgeführten Formate aus. gunzip erwartet die Endung `.gz', `-gz', `.tgz', `.taz', `.z', `-z', `-z' oder `.Z' an dem Dateinamen. Außerdem wird die Datei auf eine ,,magische Zahl`` überprüft, die mit gzip komprimierte Dateien identifiziert. Nach dem Auspacken bleiben die Zugriffsrechte und das Erstellungsdatum der Datei erhalten.
| |
| | |
| zcat arbeitet wie gzip -dc, schreibt also die entkomprimierte Datei auf die Standardausgabe und läßt die komprimierte Datei unberührt. Wenn die Eingabedatei die korrekte magische Zahl enthält, wird sie ausgepackt, egal welche Endung der Dateiname hat.
| |
| | |
| '''Optionen'''
| |
| | |
| {| class="wikitable sortable" style="border-spacing:0;margin:auto;width:17.501cm;"
| |
| |-
| |
| | style="border-top:0.05pt solid #000000;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-c</tt> '''
| |
| | style="border:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | schreibt die (ent)komprimierte ''Datei'' auf die Standardausgabe, anstatt die Datei zu ersetzen
| |
| |-
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-d</tt> '''
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | (decompress) dekomprimiert die ''Datei''
| |
| |-
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-f</tt> '''
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | (force) ersetzt bestehende Dateien mit Endung `.gz'; normalerweise fragt <tt>gzip</tt> vor dem Überschreiben solcher Dateien nach
| |
| |-
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-h</tt> '''
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | (help) gibt eine Kurzhilfe zum Programm aus
| |
| |-
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-l</tt> '''
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | (list) zeigt den in einer mit <tt>gzip</tt> komprimierten Datei gespeicherten originalen Dateiname, sowie die originale und die gepackte Größe an; wenn die <tt>-v</tt>-Option gesetzt ist, wird zusätzlich die Zeitmarke und die Checksumme ausgegeben
| |
| |-
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-L</tt> '''
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | (license) gibt eine Kurzfassung des Lizenztextes aus
| |
| |-
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-n</tt> '''
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | (noname) unterdrückt beim Einpacken das Speichern des Dateinamen und der Zeitmarke (nur wenn der Name nicht gekürzt werden muß); beim Auspacken wird die Wiederherstellung des originalen Namens mit der Zeitmarke unterdrückt; diese Option ist Voreinstellung zum Entpacken
| |
| |-
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-N</tt> '''
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | (name) veranlaßt beim Einpacken die Sicherung des originalen Namen und der Zeitmarke in der gepackten Datei und beim Auspacken die Wiederherstellung dieser Daten an der dekomprimierten Datei; diese Option ist Voreinstellung beim Einpacken
| |
| |-
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-q</tt> '''
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | (quiet) unterdrückt alle Warnungen
| |
| |-
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-r</tt> '''
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | (recursive) packt alle Dateien in den angegebenen Unterverzeichnissen
| |
| |-
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-S</tt> ''Endung'' '''
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | veranlaßt die Verwendung der neuen ''Endung'' anstelle von `.gz'
| |
| |-
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-t</tt> '''
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | (test) prüft die Integrität der angegebenen ''Datei''
| |
| |-
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-v</tt> '''
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | (verbose) gibt den Namen und den Kompressionsfaktor für jede ''Datei'' aus
| |
| |-
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-V</tt> '''
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | (Version) gibt die Versionsnummer des Programms aus
| |
| |-
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | '''''Ziffer'' '''
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | bestimmt mit einer Ziffer von 1 bis 9 die Kompressionstiefe; 1 bedeutet schnell und schlecht komprimiert, 9 bedeutet langsam und optimal komprimiert
| |
| | |
| |-
| |
| |}
| |
| ==== Gut verpackt mit Gzip ====
| |
| | |
| Das Programm Gzip (GNU Zip) ist der "Standardpacker" unter Linux. Gzip komprimiert einfache Dateien; Archive ganzer Verzeichnisse legt das Tool allerdings nicht an. Der einfachste Aufruf lautet:
| |
| | |
| gzip datei
| |
| | |
| Gzip ersetzt die Originaldatei durch eine komprimierte Fassung mit der zusätzlichen Dateiendung <tt>.gz </tt>. Dateieigenschaften wie Rechte, Zugriffs- und Modifikationszeit bleiben beim Packen erhalten. Gefällt Ihnen die Dateiendung nicht, definieren Sie über <tt>-S </tt>(Suffix) eine eigene. So erzeugt der Aufruf
| |
| | |
| gzip -S .z bild.bmp
| |
| | |
| eine komprimierte Datei namens <tt>bild.bmp.z </tt>.
| |
| | |
| Die Größe der zurechtgestutzten Datei hängt unter anderem von der Verteilung gemeinsamer Zeichenketten in der Originaldatei ab. Das bedeutet, dass Gzip Dateien, in denen sich ähnliche Muster wiederholen, deutlich besser "zusammenschrumpft". Bereits komprimierte Dateien, etwa im MP3- oder JPEG-Format, verkleinert Gzip dagegen nicht besonders gut. <span style="color:#008080;">Listing 1 </span>zeigt die Unterschiede für eine Bitmap- und eine JPEG-Datei.
| |
| | |
| Weiterhin beeinflussen Sie die Größe über einen Kompressionsfaktor zwischen 1 und 9, wobei <tt>gzip -1 </tt>schneller komprimiert und <tt>gzip -9 </tt>langsamer, aber mit besserer Kompressionsrate arbeitet. Als Standard ist <tt>-6 </tt>definiert; um diese Vorgabe zu ändern, setzen Sie die Umgebungsvariable <tt>GZIP </tt>in der Datei <tt>~/.bashrc </tt>, zum Beispiel
| |
| | |
| export GZIP="-9"
| |
| | |
| $ '''ls -l'''
| |
| -rw-r--r-- 1 huhn huhn 2313894 Sep 3 22:47 screenie.bmp
| |
| -rw-r--r-- 1 huhn huhn 169862 Sep 5 12:41 screenie.jpg
| |
| $ '''gzip screenie*'''
| |
| $ '''ls -l'''
| |
| -rw-r--r-- 1 huhn huhn 9547 Sep 3 22:47 screenie.bmp.gz
| |
| -rw-r--r-- 1 huhn huhn 130524 Sep 5 12:41 screenie.jpg.gz
| |
| | |
| Eine mit Gzip komprimierte Datei entpacken Sie entweder mit Gunzip oder <tt>gzip -d </tt>. Liegt im Verzeichnis eine Datei mit gleichem Namen, fragt das Programm sicherheitshalber nach, ob Sie diese überschreiben wollen:
| |
| | |
| $ '''gunzip screenie.jpg.gz'''
| |
| gunzip: screenie.jpg already exists; do you wish to overwrite (y or n)?
| |
| | |
| Antworten Sie an dieser Stelle mit [N], bricht Gzip die Operation ab. Wenn Sie die Sicherheitsabfrage als störend empfinden, schalten Sie über die Option <tt>-f </tt>ab (englisch "force" = "erzwingen"). Der Parameter hat noch eine Nebenwirkung: Standardmäßig weigert Gzip sich, <span style="color:#ff0000;">'''Symlinks '''</span>zu komprimieren. Lassen Sie Gzip zusammen mit dem Parameter ''-f ''auf solche Verweise los, komprimiert das Tool die Datei, auf die der symbolische Link zeigt, und gibt ihr den Namen des Symlinks (ergänzt um die Endung). Beim Entpacken landet anschließend allerdings kein Verweis, sondern eine Datei auf der Platte (Abbildung <span style="color:#008080;">((2)) </span>).
| |
| | |
| <span style="color:#008080;">((2)) </span>Aufgepasst beim Komprimieren von Symlinks: Der Parameter "-f" erzwingt dies, das Auspacken erzeugt allerdings keinen Verweis mehr.
| |
| | |
| <span style="color:#ff0000;">'''Symlink: '''</span>Ein symbolischer Link (oder Softlink) ist ein Verweis auf eine andere Datei, den Anwendungsprogramme genau wie die Datei selbst behandeln. Wenn die Datei, auf die ein Symlink verweist, gelöscht wird, zeigt der Link ins Leere. Symlinks erzeugt das Kommando <tt>ln -s ''Quelle Ziel ''</tt>.
| |
| | |
| Komprimierte Textdateien, wie zum Beispiel die HOWTOs unter <tt>/usr/share/doc/ </tt>, müssen Sie nicht erst umständlich auspacken und dann mit einem Pager wie Less oder More anzeigen. Schneller geht es, wenn Sie Gzip mit dem Parameter <tt>-c </tt>(schreibt nach <span style="color:#ff0000;">'''stdout '''</span>) einsetzen und die Ausgabe über eine Pipe an einen Betrachter weiterleiten, z. B.:
| |
| | |
| gzip -dc /usr/share/doc/iptables/README.Debian.gz | less
| |
| | |
| Noch kürzer geht es mit <tt>zless ''Datei ''.gz </tt>: Hinter dem Befehl steckt ein kleines Skript, das im Wesentlichen das Gleiche leistet.
| |
| | |
| <span style="color:#ff0000;">'''stdout: '''</span>Es gibt drei "Standardkanäle": <tt>stdin </tt>(Standardeingabe), <tt>stdout </tt>(Standardausgabe) und <tt>stderr </tt>(Standardfehlerausgabe). Laufende Programme erwarten ihren Input von der Standardeingabe, zum Beispiel über die Tastatur. Die Ausgabe der Programme sehen Sie in der Standardausgabe, also meist in einem Terminal-Fenster. Die Standardfehlerausgabe landet in der Regel am gleichen Ort: Dort schreiben Programme Warnungen und Fehlermeldungen hin.
| |
| | |
| ==== Neuer, schneller, besser: Bzip2 ====
| |
| | |
| Das Programm Bzip2 verwendet einen anderen Kompressionsalgorithmus und verkleinert daher die meisten Dateien deutlich besser. <span style="color:#008080;">Listing 2 </span>zeigt Gzip und Bzip2 im Vergleich. Weiterhin besitzt Bzip2 einen so genannten Recovery-Modus: Beim Komprimieren zerlegt das Tool die Dateien in einzelne Blöcke. Ist eine Datei beschädigt, ist es eventuell noch möglich, Daten aus den intakt gebliebenen Bereichen zu retten -- dazu entpacken Sie mit Bzip2recover die unbeschädigten Teile.
| |
| | |
| Listing 2: "gzip" und "bzip2" im Vergleich
| |
| | |
| $ '''ls -l bild.bmp*'''
| |
| -rw-r--r-- 1 huhn huhn 2313894 Sep 5 13:35 bild.bmp
| |
| -rw-r--r-- 1 huhn huhn 2534 Sep 5 13:35 bild.bmp.bz2
| |
| -rw-r--r-- 1 huhn huhn 9547 Sep 5 13:35 bild.bmp.gz
| |
| | |
| Abgesehen von einigen kleinen Unterschieden ähneln viele Bzip2-Optionen denen von Gzip. Auch hier geben Sie zum einfachen Komprimieren einer Datei nur deren Namen an:
| |
| | |
| bzip2 datei
| |
| | |
| Die komprimierte Datei trägt anschließend die Endung <tt>.bz2 </tt>und behält -- genauso wie beim Packen mit Gzip -- ihre ursprünglichen Dateieigenschaften. Anders als Gzip kennt Bzip2 eine Option, über die es eine Kopie des Originals anlegt. Geben Sie dafür einfach zusätzlich den Parameter <tt>-k </tt>(englisch "keep" = "behalten") an:
| |
| | |
| bzip2 -k datei
| |
| | |
| (Wer Gleiches mit Gzip erreichen will, gibt die komprimierte Datei auf die Standardausgabe aus und schreibt sie dann in eine neue Datei: <tt>gzip -c datei > datei.gz </tt>. Die komprimierte Fassung übernimmt auf diese Weise allerdings nicht die Dateieigenschaften.)
| |
| | |
| Wie bei Gzip bringen die Parameter <tt>-1 </tt>bis <tt>-9 </tt>(Standard) Bzip2 dazu, mehr oder weniger stark zu komprimieren. Um die Vorgabe zu ändern, setzen Sie die Umgebungsvariable <tt>GZIP </tt>. Fügen Sie beispielsweise in die Datei <tt>~/.bashrc </tt>die Zeile
| |
| | |
| export BZIP2="-6"
| |
| | |
| ein. Zum Entpacken geben Sie entweder Bzip2 die Option <tt>-d </tt>mit auf den Weg oder verwenden den speziellen Entpackbefehl Bunzip2. Genau wie Gzip schützt das Programm vor dem Überschreiben vorhandener Dateien. Anders als bei Gzip überlässt das Tool Ihnen aber nicht die Entscheidung und fragt nach, sondern bricht einfach den Vorgang ab:
| |
| | |
| $ '''bunzip2 peggy.jpg.bz2'''
| |
| bunzip2: Output file peggy.jpg already exists.
| |
| | |
| Der Parameter <tt>-f </tt>schaltet dieses Verhalten ab.
| |
| | |
| ==== Ab ins Archiv ====
| |
| | |
| Um mehrere Dateien in einem Archiv zusammenzufassen, verwenden Sie den Befehl Tar. Der Name des Programms (englisch "tape archiver") weist auf seine ursprüngliche Verwendung hin: Das Programm war ursprünglich für die Verwaltung von Bandarchiven zuständig. Es leistet aber mehr als einfach nur Dateien zusammenzufassen: Tar können Sie über Optionen anweisen, die Archive direkt mit Gzip oder Bzip2 zu komprimieren -- so entstehen die typischen <tt>tar.gz </tt>- und <tt>tar.bz2 </tt>-Archive.
| |
| | |
| Mehrere Dateien fassen Sie zu einem Archiv zusammen, indem Sie beispielsweise
| |
| | |
| tar -cvf archiv.tar datei1 datei2
| |
| | |
| eingeben. Die drei Optionen <tt>-c </tt>, <tt>-v </tt>und <tt>-f </tt>, die hier zusammengefasst wurden, sorgen dafür, dass Tar ein Archiv anlegt ("c" für englisch "create"), dabei verrät, was im Hintergrund passiert ("v" für englisch "verbose"), und das erste Argument ( <tt>archiv.tar </tt>) als Archivnamen interpretiert ("f" für englisch "file").
| |
| | |
| Stellen Sie zu einem späteren Zeitpunkt fest, dass Sie eine Datei vergessen haben, müssen Sie das Archiv nicht neu packen, sondern hängen diese einfach über <tt>-r </tt>an:
| |
| | |
| tar -rf archiv.tar datei3
| |
| | |
| Genauso leicht ist das Entpacken mit der Option <tt>-x </tt>("x" für englisch "extract", auspacken):
| |
| | |
| tar -xvf archiv.tar
| |
| | |
| Um sicherzustellen, dass Tar keine vorhandenen Dateien mit Archivinhalten überschreibt, entpacken Sie das Archiv sicherheitshalber in einem temporären Unterordner oder ersetzen im Aufruf <tt>-x </tt>durch <tt>-t </tt>, um zunächst einen Trockenlauf durchzuführen und zu sehen, welche Dateien und Verzeichnisse sich im Archiv befinden.
| |
| | |
| Ganze Verzeichnisse inklusive ihrer Unterordner erfassen Sie übrigens auf dieselbe Weise -- geben Sie statt einzelner Dateinamen einfach den Ordner an:
| |
| | |
| $ '''tar -cvf archiv.tar ordner/'''
| |
| test/
| |
| test/screenie.bmp
| |
| test/link.bmp
| |
| test/neu/
| |
| test/neu/screenie.jpg
| |
| test/neu/neu/
| |
| ...
| |
| | |
| Gerade, wenn Sie Tar für Backups einsetzen, kann es sinnvoll sein, einzelne Verzeichnisse auszuklammern. Dabei hilft der Parameter <tt>--exclude </tt>. Weiterhin praktisch für solche Sicherungskopien ist der Parameter <tt>--rsh-command </tt>, über den Sie Tar beispielsweise mitteilen, dass es das Backup per SSH <span style="color:#008080;">[1] </span>auf einen anderen Rechner übertragen soll. Ein vollständiger Beispielaufruf sieht dann so aus:
| |
| | |
| tar -cvf user@host:/scratch/tmp/backup_$(date '+%Y_%m_%d').tar --rsh-command=/usr/bin/ssh --exclude=/proc /
| |
| | |
| Aufgeschlüsselt bedeutet der recht lange Kommandozeilenaufruf: Erstelle per SSH auf dem Rechner <tt>host </tt>im Verzeichnis <tt>/scratch/tmp/ </tt>eine Sicherungskopie, deren Name sich aus <tt>backup_ </tt>, dem aktuellen Datum <span style="color:#008080;">[2] </span>und der Dateiendung <tt>.tar </tt>zusammensetzt (zum Beispiel <tt>backup_2005_09_05.tar </tt>). Dieses Backup umfasst alles ausgehend vom Wurzelverzeichnis <tt>/ </tt>, klammert aber das Verzeichnis ''/proc ''aus, das keine echten Dateien enthält.
| |
| | |
| ==== Und jetzt alle! ====
| |
| | |
| Wie schon erwähnt, bringt Tar einige Parameter mit, die das Archiv in einem Rutsch mit Gzip oder Bzip2 komprimieren. Für die Gzip-Variante hat der Aufruf die Form
| |
| | |
| tar -cvzf archiv.tar.gz ''Datei(en)''
| |
| | |
| Soll stattdessen Bzip2 zum Einsatz kommen, ersetzen Sie die Option <tt>-z </tt>durch <tt>-j </tt>:
| |
| | |
| tar -cvjf archiv.tar.bz2 ''Datei(en)''
| |
| | |
| Entsprechend setzen Sie die Parameter <tt>-z </tt>und <tt>-j </tt>auch beim Entpacken wieder ein und sparen einen Arbeitsschritt, indem Sie beispielsweise statt
| |
| | |
| bunzip2 archiv.tar.bz2
| |
| tar -xvf archiv.tar
| |
| | |
| einfach
| |
| | |
| tar -xvjf archiv.tar.bz2
| |
| | |
| tippen.
| |
| | |
| === Backup mit tar ===
| |
| | |
| <tt>'''tar'''</tt> (tape archiver) verwaltet Dateiarchive
| |
| | |
| '''tar''' [-Acdrtux] [-delete] [-b ''N''] [-BgGhiklmMoOpPPsSvwWz] [-C ''Verzeichnis''] [-f ''Datei''] [-F ''Datei''][-K ''Datei''] [-L ''Länge''] [-N ''Datum''] [-T ''Datei''] [-V ''Name''] [-X ''Datei''] [0-7] [{lmh}]
| |
| | |
| <tt>'''tar'''</tt> ist ursprünglich ein Tool zur Verwaltung von Bandarchiven. Das GNU-<tt>tar</tt> kann aber auch auf ,,rohen`` Disketten oder in normalen Dateien Archive im <tt>tar</tt> Format anlegen und verwalten. Normalerweise werden Archive mit <tt>tar</tt> nicht komprimiert. Das GNU-<tt>tar</tt> kann aber die Ein- und Ausgabe durch einen Kompressor leiten. Die neuen Versionen (ab 1.11.2) unterstützen sowohl <tt>compress</tt> als auch <tt>gzip</tt>.
| |
| | |
| Wenn auf der Kommandozeile keine Datei und kein Gerät angegeben ist, versucht <tt>tar</tt> auf die Gerätedatei eines Magnetbandgerätes zuzugreifen. Je nach Konfiguration ist das meist /dev/tape oder /dev/rmt0. Sie können eine andere Voreinstellung wählen, indem Sie die Umgebungsvariable <tt>TAPE</tt> mit dem Pfadnamen der entsprechenden Gerätedatei belegen.
| |
| | |
| '''Optionen'''
| |
| | |
| Die Optionen können aus Gründen der Kompatibilität mit anderen, älteren Versionen von <tt>tar</tt> auch in Abweichung von den [../../../ebooks/computer/betriebssysteme/linux/allgemein/unsortiert/linux_anwender_handbuch/linux_anwenderhandbuch_7-0/node23.html#goldenrules POSIX-Regeln] ohne das für Optionen übliche Minuszeichen angegeben werden. <tt>tar</tt> interpretiert den ersten Kommandoparameter immer als Optionsblock. Optionsargumente müssen dann im Anschluß an den Optionsblock in der Reihenfolge angegeben werden, in der die Optionen im Optionsblock erscheinen.
| |
| | |
| Einige wenige spezielle Optionen des GNU-<tt>tar</tt> sind nicht als einfache Buchstabenoptionen erreichbar. Diese Schalter und Regler können Sie nur in der für GNU-Kommandos spezifischen verbalen Form erreichen.
| |
| | |
| {| class="wikitable sortable" style="border-spacing:0;margin:auto;width:17.501cm;"
| |
| |-
| |
| | style="border-top:0.05pt solid #000000;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-A</tt> '''
| |
| | style="border:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | hängt ein komplettes Archiv an ein anderes Archiv an (nicht für Magnetbänder)
| |
| |-
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-c</tt> '''
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | erzeugt ein neues Archiv
| |
| |-
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-d</tt> '''
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | vergleicht das Archiv mit dem Dateisystem
| |
| |-
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | '''- -delete ''Datei'' '''
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | löscht die ''Datei'' aus dem Archiv (nicht für Magnetbänder)
| |
| |-
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-r</tt> '''
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | hängt Dateien an das Archiv an (nicht für Magnetbänder)
| |
| |-
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-t</tt> '''
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | zeigt den Inhalt des Archivs
| |
| |-
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-u</tt> '''
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | ersetzt Dateien, die neuer als eine bereits archivierte Version sind; ist eine Datei noch nicht archiviert, so wird sie eingefügt (nicht für Magnetbänder)
| |
| |-
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-x</tt> '''
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | kopiert ''Datei'' oder alle Dateien aus dem Archiv
| |
| |-
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | '''Weitere Optionen '''
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" |
| |
| |-
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-atime-preserve</tt> '''
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | veranlaßt <tt>tar</tt>, die Zugriffszeit nach der Archivierung zurück zu setzen
| |
| |-
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-b</tt> ''N'' '''
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | setzt die Blockgröße auf ''N''x512 Bytes (Voreinstellung ist N=20)
| |
| |-
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-B</tt> '''
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | unterdrückt den Abbruch von <tt>tar</tt> beim Lesen unvollständiger Blöcke; zum Lesen von 4.2BSD Pipes
| |
| |-
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-C</tt> ''Verzeichnis'' '''
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | wechselt während der Ausführung in das ''Verzeichnis'', um von dort weitere Dateien zu archivieren
| |
| |-
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-f</tt> ''Datei'' '''
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | benutzt ''Datei'' oder das damit verbundenen Gerät als Archiv
| |
| |-
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-F</tt> ''Datei'' '''
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | bei mehrteiligen Archiven (Option <tt>-M</tt>) wird das Shellscript ''Datei'' ausgeführt, wenn das Medium voll ist
| |
| |-
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-G</tt> '''
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | erzeugt am Anfang des Bandarchives einen speziellen Eintrag für jedes archivierte Verzeichnis; spezielles GNU Format
| |
| |-
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-g</tt> ''Datei'' '''
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | erzeugt eine ''Datei'' mit einer Liste der archivierten Verzeichnisse als Zeitmarke der Archivierung; wenn die ''Datei'' bereits existiert, werden nur die Dateien archiviert, die nach dieser Zeitmarke erzeugt oder verändert wurden (spezielles GNU Format: 1. Zeile = Zeitmarke, 1. Feld = Nr. der Partition, 2. Feld = Inode des Verzeichnisses, 3. Feld = Name des Verzeichnisses)
| |
| |-
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-h</tt> '''
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | archiviert die referenzierten Dateien anstelle der Links
| |
| |-
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-i</tt> '''
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | ignoriert Blöcke mit Nullbytes im Archiv
| |
| |-
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-k</tt> '''
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | existierende Dateien werden beim Auspacken von Archiven nicht überschrieben
| |
| |-
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-K</tt> ''Datei'' '''
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | beginnt eine Aktion bei ''Datei'' im Archiv
| |
| |-
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-l</tt> '''
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | verhindert Archivierung von Dateien aus anderen Dateisystemen
| |
| |-
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-L</tt> ''Länge'' '''
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | wartet auf Medienwechsel nach ''Länge'' Bytes
| |
| |-
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-m</tt> '''
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | das Datum der letzten Änderung wird nicht mitarchiviert
| |
| |-
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-M</tt> '''
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | das Archiv ist auf mehrere Medien verteilt (Multi-Volume)
| |
| |-
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-N</tt> ''Datum'' '''
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | archiviert nur Dateien, die neuer sind als ''Datum''
| |
| |-
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-o</tt> '''
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | benutzt das alte V7 <tt>tar</tt>-Format anstelle des ANSI Formates
| |
| |-
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-O</tt> '''
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | schreibt die Dateien in die Standardausgabe
| |
| |-
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-p</tt> '''
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | erhält die Zugriffsrechte der Dateien
| |
| |-
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-P</tt> '''
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | archiviert mit absoluten Dateinamen
| |
| |-
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-R</tt> '''
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | gibt zu jeder Meldung die Blocknummer des Archivblocks aus, von dem die Meldung verursacht wurde
| |
| |-
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-s</tt> '''
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | zeigt an, daß die Liste von Dateien im Argument die gleiche Reihenfolge hat wie die Dateien im Archiv
| |
| |-
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-T</tt> ''Datei'' '''
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | holt die Namen der zu archivierenden Dateien aus ''Datei''
| |
| |-
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-v</tt> '''
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | meldet jede Aktion
| |
| |-
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-V</tt> ''Name'' '''
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | erzeugt ein Archiv mit dem (internen) Label ''Name''
| |
| |-
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-w</tt> '''
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | erwartet interaktiv Bestätigung jeder Aktion
| |
| |-
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-W</tt> '''
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | verifiziert die geschriebenen Daten im Archiv
| |
| |-
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-X</tt> ''Datei'' '''
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | liest aus der ''Datei'' Namen oder reguläre Ausdrücke von bzw. für Dateien, die nicht archiviert werden sollen
| |
| |-
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-z</tt> '''
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | erzeugt ein mit <tt>gzip</tt> komprimiertes Archiv
| |
| |-
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-Z</tt> '''
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | erzeugt ein mit <tt>compress</tt> komprimiertes Archiv
| |
| |-
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | '''-{0..7}{lmh} '''
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | spezifiziert das Gerät und die Dichte des Speichermediums (für Diskettenarchive ohne Bedeutung); 0 ist der erste Streamer, 1 der zweite und so weiter; die Dichte bestimmt den Bandtyp
| |
| |-
| |
| |}
| |
| '''Beispiel'''
| |
| | |
| Der Tape Archiver ist das verbreitetste Werkzeug zur Datensicherung in Unix-Systemen. Ursprünglich rein zur Datenübertragung auf Bänder konzipiert, mit deren Hilfe der Datenaustausch zwischen verschiedenen Computern zu Zeiten fehlender Netzwerke ermöglicht werden sollte, hat sich gerade durch die Eignung von Bändern als Backupmedium das Programm quasi zum Standardwerkzeug für das Backup in kleineren Netzwerken etabliert, trotz des Fehlens einer brauchbaren Unterstützung von inkrementellen Backups.
| |
| | |
| Als Werkzeug zur [../../../../index.php/Linuxfibel_-_Nutzerkommandos_-_Archivierung Archivierung ]wurde [../../../../index.php/Linuxfibel_-_Nutzerkommandos_-_Archivierung#tar_-_Das_Standard-Archiv-Format tar ]im Kapitel [../../../../index.php%3Ftitle=Linuxfibel_-_Nuterkommandos&action=edit Nutzerkommandos ]bereits vorgestellt. Hier soll nun der Schwerpunkt auf den Einsatz des Kommandos zum Backup von Daten liegen.
| |
| | |
| tar [ OPTION... ] [ DATEI... ]
| |
| | |
| tar arbeitet auf Dateiebene, kann also beliebige Dateien und Verzeichnisse in eine einzige Zieldatei verpacken. Zieldatei kann dabei alles bedeuten, was unter Unix als Datei betrachtet wird, also ein Gerät, eine normale Datei, eine Pipe...
| |
| | |
| Die drei wichtigsten Optionen sind c zum Erzeugen eines Archivs, t zum Betrachten des Archivinhalts und x zum Entpacken desselben.
| |
| | |
| ==== Volles Backup ====
| |
| | |
| tar wird alle angegebenen Dateien (oder rekursiv den Inhalt von Verzeichnissen) in ein Archiv verpacken. Per Voreinstellung versucht das Kommando das Archiv auf einen Streamer zu schreiben (/dev/tape oder /dev/rmt0), ist kein solcher im System installiert, schreibt tar das Ergebnis auf die Standardausgabe. Um das Archiv in einer Datei zu sichern, ist die Option -f Datei zu wählen.
| |
| | |
| Eine angenehme Eigenschaft ist der Umgang mit »Multivolumes« (Option -M) . Speichert man z.B. das Archiv auf eine Diskette und reicht deren Speicherkapazität nicht aus, so fordert tar automatisch zum Wechsel des Mediums auf:
| |
| | |
| user@sonne> tar -Mcf /dev/fd0h1440 ~/Books/
| |
| tar: Removing leading `/' from absolute path names in the archive
| |
| Prepare volume #2 for /dev/fd0h1440 and hit return:
| |
| Prepare volume #3 for /dev/fd0h1440 and hit return:
| |
| Prepare volume #4 for /dev/fd0h1440 and hit return:
| |
| | |
| Im Beispiel schreibt tar die Daten auf eine (unformatierte) Diskette, weswegen dem Kommando genau mitgeteilt werden muss, wie groß die Speicherkapazität dieser ist (es ist das entsprechende Device anzugeben). Als erstes entfernt tar in allen Pfadnamen den führenden Slash (-P forciert die Verwendung absoluter Pfadnamen), so dass das Archiv bei einem späteren Entpacken an beliebiger Stelle im Dateisystem extrahiert werden kann - bei Beibehaltung der Verzeichnisstruktur. Nachfolgend wird der Benutzer zum Wechsel der Disketten aufgefordert. Alternativ zu »-M« kann mit -L Anzahl der Medienwechsel nach Archivierung von Anzahl Bytes erzwungen werden.
| |
| | |
| Es ist allerdings furchtbar uneffizient, das Archiv unkomprimiert abzulegen. tar kann zum Glück mit mehreren [../../../../index.php/Linuxfibel_-_Nutzerkommandos_-_Archivierung Packern ]zusammen arbeiten. Mit -z wird das Archiv mit [../../../../index.php/Linuxfibel_-_Nutzerkommandos_-_Archivierung#gzip_-_Dateien_komprimieren gzip ]komprimiert; -Z nutzt das (veraltete) Werkzeug [../../../../index.php/Linuxfibel_-_Nutzerkommandos_-_Archivierung#compress_-_Dateien_komprimieren compress ]und -j (alt: -I) den derzeit effektivsten Packalgorithmus des Kommandos [../../../../index.php/Linuxfibel_-_Nutzerkommandos_-_Archivierung#bzip2_-_Dateien_komprimieren bzip2. ]Wurde ein Archiv einmal gepackt, ist bei allen weiteren Operationen die Option für den jeweiligen Packer anzugeben! Das Packen funktioniert allerdings nicht bei Multilevel-Archiven. Ein Ausweg wäre das »vorab«-Komprimieren einer jeden Datei (z.B. mittels eines Skripts) mit anschließender Archivierung.
| |
| | |
| ==== Inkrementelles Backup ====
| |
| | |
| tar unterstützt nur eine rudimentäre Variante des inkrementellen Backups, in dem Daten zur Archivierung ausgewählt werden können, die »neuer« als ein anzugebendes Datum sind. Das Datum (-n Datum) ist hierbei im Format »Jahr-Monat-Tag« anzugeben. Um z.B. alle Dateien zu erfassen, die in den letzten 7 Tagen (ab aktuellem Zeitpunkt) modifiziert wurden, kann folgender Kommandoaufruf verwendet werden:
| |
| | |
| user@sonne> tar -n $(date -d "now 7 days ago" +%Y-%b-%d) -czf /tmp/backup.tgz ~/Books/
| |
| | |
| Im Beispiel wurde bewusst die etwas verwirrende Kalkulation des Datums mit Hilfe von [../../../../index.php%3Ftitle=Linuxfibel_-_Sytem-Administration_-_Zeit_und_Steuerung&action=edit date ]gewählt, da dessen Einsatz das Schreiben eines Skripts zum automatischen Erzeugen von inkrementellen Backups vereinfacht.
| |
| | |
| ==== Überprüfung des Archives ====
| |
| | |
| Um sich von einer ordnungsgemäßen Archivierung zu überzeugen, sollte das resultierende Archiv einem Test unterzogen werden. Da der Slash automatisch entfernt wurde, ist zuvor ins Wurzelverzeichnis zu wechseln oder das Arbeitsverzeichnis mit -C Pfad zu ändern und (in Bezug auf obiges Beispiel) Folgendes aufzurufen:
| |
| | |
| user@sonne> tar -C / -d -f /dev/fd0h1440
| |
| | |
| tar überzeugt sich nun, dass alle Dateien des Archivs auch im Dateisystem existieren. Sobald eine Unstimmigkeit festgestellt wird, wird das Kommando den Fehler ausgeben:
| |
| | |
| <nowiki># Um einen Fehler zu provozieren, wurde eine Datei verschoben</nowiki>
| |
| user@sonne> tar -df /dev/fd0h1440
| |
| home/user/Books/linuxfibel.pdf: File does not exist
| |
| | |
| ==== Recovery ====
| |
| | |
| Zu einem Backup gehört natürlich auch eine Möglichkeit, dieses wieder zurückzuspielen. Hier gelangt die Option -x (extract) zum Einsatz. Im Falle von relativen Pfadangaben im Archiv wird die Verzeichnisstruktur unterhalb des aktuellen Verzeichnisses erzeugt. Sie sollten also entweder zuvor ins Zielverzeichnis wechseln, oder dieses mit -C Pfad explizit angeben:
| |
| | |
| user@sonne> tar -C / -x -f /dev/fd0h1440
| |
| | |
| Handelt es sich um ein auf mehrere Medien verteiltes Archiv, muss die Option -M angegeben werden. tar fordert dann zum Medienwechsel auf.
| |
| | |
| Möchten Sie nur einzelne Dateien extrahieren, sind deren Namen mit vollständiger Pfadangabe auf der Kommandozeile anzugeben. Hier hilft eventuell die Option -t, um den korrekten Namen, so wie er im Archiv gespeichert ist, zu erfahren:
| |
| | |
| user@sonne> tar tf /dev/fd0h1440
| |
| home/user/Books/access.htm
| |
| home/user/Books/index.htm
| |
| home/user/Books/stuff.htm
| |
| home/user/Books/test.htm
| |
| ...
| |
| user@sonne> tar -C / -x -f /dev/fd0h1440 home/user/Books/index.htm
| |
| | |
| ==== Grafische Verpackung: kdat ====
| |
| | |
| {| class="wikitable sortable" style="border-spacing:0;margin:auto;width:17.501cm;"
| |
| |-
| |
| || Mit dem Programm kdat steht den KDE-Benutzern eine grafische Oberfläche zur Backupverwaltung mit tar zur Verfügung. Leider wird als Backupmedium derzeit nur das Tape unterstützt.
| |
| | |
| Nach dem Start von kdat sollte unter dem Menüpunkt »Bearbeiten->Einstellungen« der Typ des Tapes (Speicherkapazität, Device, Blockgröße) angepasst werden.
| |
| | |
| Anschließend muss das Tape gemountet werden, wobei kdat testet, ob das Band formatiert ist und ggf. zu einer Formatierung auffordert (Vorsicht: eventueller Datenverlust).
| |
| || [[Image:Grafik4.png|right|top]]
| |
| |-
| |
| |}
| |
| Das vorgeschlagene »Label« kann übernommen werden, es ist ein eindeutiger Name für das Backup.
| |
| | |
| Im Hauptfenster ist der Verzeichnisbaum u.a. des Rechners dargestellt. Jedes zu sicherne Verzeichnis bzw. jede Datei ist durch Klick mit der rechten Maustaste zu selektieren. Ein Verzeichnis schließt dabei die enthaltenen Dateien/Verzeichnisse ein, wobei diese wiederum von einer Sicherung ausgeschlossen werden können. Ein markierter Eintrag ist hervorgehoben dargestellt. Über das Sichern-Symbol (oder »Datei->Sichern«) werden alle selektierten Dateien und Verzeichnisse auf das Tape geschrieben.
| |
| | |
| Um nicht bei jedem Aufruf die Dateien einzeln markieren zu müssen, können beliebig viele Sicherungsprofile angelegt werden. Jedes Profil enthält eine Liste der zu sichernden Daten.
| |
| | |
| === Low Level Backup (dd) ===
| |
| | |
| Diskdump ist ein sehr flexiebles Werkzeug, das ab einem bestimmten Startpunkt eine bestimmte Menge »roher« Daten liest und diese 1:1 in eine Zieldatei oder auf ein Zielgerät schreibt. Zusätzlich kann dd die gelesen Daten konvertieren.
| |
| | |
| Diese Eigenschaft erlaubt es, Dateien beliebiger Dateisysteme zu sichern, selbst wenn Linux diese nicht lesen kann.
| |
| | |
| dd if=QUELLE of=ZIEL [OPTIONEN]
| |
| | |
| QUELLE und ZIEL können hierbei sowohl ein Device als auch eine Datei sein. Werden keine weiteren Optionen angegeben, so werden alle Daten aus QUELLE gelesen. Handelt es sich bei QUELLE um eine Partition, wird deren gesamter Inhalt kopiert:
| |
| | |
| <nowiki># dd if=/dev/hda of=/dev/hdc</nowiki>
| |
| | |
| Im Beispiel wird die gesamte erste IDE-Festplatte (/dev/hda) des Systems auf die dritte (/dev/hdc) kopiert. Es sollte jedem bewusst sein, dass der alte Inhalt der dritten Festplatte damit überschrieben wird. Auch sollte diese über die gleiche Kapazität wie die erste Platte verfügen (sonst muss man sich die Anzahl der kopierten Bytes merken). Um die Daten später zurückzuspielen, vertauscht man die Angaben von QUELLE und ZIEL.
| |
| | |
| Ist das Ziel einer Kopieraktion eine Datei, könnte bei Kernel-Versionen <2.4 die Beschränkung der Dateigröße von 2 GB unser Vorhaben zunichte machen, in einem solchen Fall muss die QUELLE auf mehrere Zieldateien aufgeteilt werden. Hierzu benötigt dd mehrere Optionen. Mit bs=BYTES muss die Anzahl Bytes, die in einem Schritt zu lesen oder schreiben sind, angegeben werden. Wieviele Schritte getätigt werden sollen, legt die Option count=ANZAHL fest. Um bspw. den Masterbootsektor (Mbr) der ersten Festplatte in eine Datei zu schreiben, könnte man folgenden Aufruf verwenden:
| |
| | |
| <nowiki># dd if=/dev/hda of=/tmp/mbr.save bs=512 count=1</nowiki>
| |
| | |
| Um jetzt den Superblock (1 k groß) der ersten Partition zu sichern, müssen sowohl Mbr als auch der 512 Bytes lange Bootsektor (also zwei Blöcke) übersprungen werden. Hierzu verwendet man die Option skip=ANZAHL.
| |
| | |
| <nowiki># dd if=/dev/hda of=/dev/superblock.save bs=512 count=2 skip=2 </nowiki>
| |
| | |
| Wenn dd seine Arbeit verrichtet hat, gibt es eine Statistik aus:
| |
| | |
| 3385223+0 records in
| |
| 3385223+0 records out
| |
| 1733234176 bytes (1.7 GB) copied, 6.42173 seconds, 270 MB/s
| |
| | |
| Mit Hilfe des Signals SIGUSR1(10) kann dd auch während der Arbeit eine Statistik ausgeben:
| |
| | |
| <nowiki>#</nowiki> dd if=/dev/zero of=/dev/null count=10MB & pid=$!
| |
| <nowiki>#</nowiki> kill -10 $pid
| |
| | |
| '''Optionen'''
| |
| | |
| {| class="wikitable sortable" style="border-spacing:0;margin:auto;width:17.501cm;"
| |
| |-
| |
| | style="border-top:0.05pt solid #000000;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | '''bs=bytes'''
| |
| | style="border:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | Erzwingen von ibs=bytes und obs=bytes.
| |
| |-
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | '''cbs=bytes'''
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | Konvertieren von bytes Bytes auf einmal.
| |
| |-
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | '''conv=schlüsselwörter'''
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | Konvertieren der Datei gemäß der kommagetrennten Liste von Schlüsselwörtern.
| |
| |-
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | '''count=blöcke'''
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | Nur blöcke Eingabeblöcke kopieren.
| |
| |-
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | '''ibs=bytes'''
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | Lesen von bytes Bytes auf einmal.
| |
| |-
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | '''if=datei'''
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | Lesen aus datei statt von der Standardeingabe.
| |
| |-
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | '''obs=bytes'''
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | Schreiben von bytes Bytes zur Zeit.
| |
| |-
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | '''of=datei'''
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | Schreiben in datei statt in die Standardausgabe.
| |
| |-
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | '''seek=blöcke'''
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | Überspringen von blöcke Blöcken der Größe von obs beim Beginn der Ausgabe.
| |
| |-
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | '''skip=blöcke'''
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | Überspringen von blöcke Blöcken der Größe von ibs beim Beginn der Eingabe.
| |
| |-
| |
| |}
| |
| ''bytes'' können folgende multiplikativen Endungen tragen: xM M, c 1, w 2, b 512, kD 1000, k 1024. MD 1.000.000, M 1.048.576, GD 1.000.000, G 1.073.741.824, und so weiter für T, P, E, Z, Y.
| |
| | |
| '''Schlüsselwörter'''
| |
| | |
| {| class="wikitable sortable" style="border-spacing:0;margin:auto;width:17.501cm;"
| |
| |-
| |
| | style="border-top:0.05pt solid #000000;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | '''ascii'''
| |
| | style="border:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | von EBCDIC in ASCII.
| |
| |-
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | '''ebcdic'''
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | von ASCII in EBCDIC.
| |
| |-
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | '''ibm'''
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | von ASCII in alternatives EBCDIC.
| |
| |-
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | '''block'''
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | Auffüllen von mit Zeilenumbrüchen terminierten Datensätzen durch Leerzeichen bis zur cbs-Größe.
| |
| |-
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | '''unblock'''
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | Ersetzen von nachlaufenden Leerzeichen in Datensätzen von cbs-Größe mit Zeilenumbrüchen.
| |
| |-
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | '''lcase'''
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | Ändern von Großbuchstaben in Kleinbuchstaben.
| |
| |-
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | '''notrunc'''
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | Kein Abschneiden der Ausgabedatei.
| |
| |-
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | '''ucase'''
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | Ändern von Kleinbuchstaben in Großbuchstaben.
| |
| |-
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | '''swab'''
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | Jedes Paar von Eingabebytes vertauschen.
| |
| |-
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | '''noerror'''
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | Nach Lesefehlern fortfahren.
| |
| |-
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | '''sync'''
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | Jeden Eingabeblock mit NULLen zur ibs-Größe auffüllen; wenn mit block oder unblock benutzt, stattdessen mit Leerzeichen.
| |
| | |
| |-
| |
| |}
| |
| ==== Anwendung von Diskdump ====
| |
| | |
| '''Eine Diskette in ein Imagefile schreiben '''
| |
| | |
| '''dd if=/dev/fd0 of=image file'''Achtung, das Diskettenlaufwerk darf nicht gemountet sein!
| |
| | |
| <u>Beispiel</u>
| |
| | |
| dd if=/dev/fd0 of=/tmp/abc_diskette.im
| |
| | |
| '''Eine Diskette aus einem Imagefile erstellen '''
| |
| | |
| '''dd if=image file of=/dev/fd0 '''Achtung, das Diskettenlaufwerk darf nicht gemountet sein!
| |
| | |
| <u>Beispiel</u>
| |
| | |
| dd if=/tmp/abc_diskette.img of=/dev/fd0
| |
| | |
| '''Eine CD in ein Imagefile schreiben '''
| |
| | |
| Genauso wie von Disketten lassen sich auch von CDs Images erstellen: '''dd if=cd-laufwerk of=image file '''Achtung, das CD-Laufwerk darf nicht gemountet sein!
| |
| | |
| <u>Beispiel</u>
| |
| | |
| dd if=/dev/cdrom of=/tmp/CD-image.img
| |
| | |
| '''Ein Imagefile mounten '''
| |
| | |
| mount -o loop imagefile ziel
| |
| | |
| Das Imagefile kann so wie eine Festplatte / ein Verzeichnis behandelt werden. Sehr praktisch, um z.B. ein CD-Abbild als "virtuelles CD-Laufwerk" zu benutzen. Geht natuerlich auch mit anderen Imagedateien, z.B. Diskettenimages oder Festplattenimages
| |
| | |
| mount -o loop /tmp/cd-image.img /mnt/virtualCD
| |
| | |
| '''Den Master Boot Record sichern '''
| |
| | |
| Der dd-Befehl ist auch geeignet, um den Master Boot Record einer Festplatte auszulesen und in eine Datei zu schreiben.
| |
| | |
| <div style="margin-left:0cm;margin-right:0cm;">dd if=festplatte of=dateiname bs=512 count=1
| |
| | |
| <u>Beispiel</u>
| |
| | |
| dd if=/dev/hda of=/tmp/mbr.img bs=512 count=1
| |
| | |
| '''Einen gesicherten Master Boot Record zurückschreiben '''
| |
| | |
| Den mit dem vorigen Befehl gesicherten MBR kann man natuerlich auch wieder auf eine Festplatte zurueckschreiben.
| |
| | |
| <div style="margin-left:0cm;margin-right:0cm;">dd if=dateiname of=festplatte bs=512 count=1
| |
| | |
| <u>Beispiel</u>
| |
| | |
| dd if=/tmp/mbr.img of=/dev/hda bs=512 count=1
| |
| | |
| '''Die primäre Partitionstabelle wiederherstellen, ohne den MBR zu überschreiben'''
| |
| | |
| dd if=mbr.img of=/dev/hda bs=1 count=64 skip=446 seek=446
| |
| | |
| '''Einen komprimiertes Image von einer Festplatte oder Partition erstellen '''
| |
| | |
| Um von einer Festplattenpartition ein Backup zu machen, ist dieser Befehl sinnvoll. Durch die Komprimierung kann oft ca. die Häfte des Platzes gespart werden.
| |
| | |
| <div style="margin-left:0cm;margin-right:0cm;">dd if=partition/festplatte bs=64k |gzip -c >dateiname.img.gz
| |
| | |
| <u>Beispiel (1. Partition der 1. Festplatte)</u>
| |
| | |
| dd if=/dev/hda1 bs=64k |gzip -c >/tmp/hda1.img.gz
| |
| | |
| <u>Beispiel 2 (Verschlüsselt auf entfernten Rechner übertragen)</u>
| |
| | |
| dd if=/dev/hda1 bs=64k |gzip -c | ssh [mailto:user@rechner user@rechner2] 'cat >/tmp/rechner1.hda1.img.gz'
| |
| | |
| '''Das komprimierte Image wieder zurückschreiben '''
| |
| | |
| <div style="margin-left:0cm;margin-right:0cm;">cat dateiname.gz |gzip -d | dd of=festplatte bs=64k
| |
| | |
| <u>Beispiel 1</u>
| |
| | |
| cat /tmp/hda1.img.gz |gzip -d | dd of=/dev/hda1 bs=64k
| |
| | |
| <u>Beispiel 2</u>
| |
| | |
| ssh [mailto:user@rechner2 user@rechner2] 'cat /tmp/rechner2.hda1.img.gz' |gzip -d | dd of=/dev/hda1 bs=64k
| |
| | |
| '''README'''
| |
| | |
| Dd erstellen 1:1-Kopien von Datenträgern aller Art und rettet so beispielsweise die Daten von kränkelnden Festplatten. Das Tool Mkisofs sammelt Daten aus dem Verzeichnisbaum und schreibt sie in ein ISO-Image. So lassen sich Backups auf CD/DVD sichern oder bootfähige Medien erzeugen.
| |
| | |
| Zum Brennen von Daten-CDs oder -DVDs stehen auf der Kommandozeile mehrere Anwendungen zur Verfügung. Bevor es jedoch ans eigentliche Brennen geht, muss ein so genanntes <span style="color:#ff0000;">'''ISO'''</span>-Image erstellt werden. Für diesen Zweck greifen Sie beispielsweise zu Mkisofs: Es unterstützt die <span style="color:#ff0000;">'''Rockridge'''</span>- und <span style="color:#ff0000;">'''Joliet'''</span>-Erweiterungen, erzeugt Images für bootbare Medien und Dateien und kann automatische Backups anlegen, wobei es einzelne Dateien ausschließt. Eine Alternative kommt in Form von Dd, das nicht nur ISO-Abbilder erzeugt, sondern oft auch die letzte Rettung für die Daten von sterbenden Festplatten darstellt.
| |
| | |
| <span style="color:#ff0000;">'''ISO:'''</span> Linux unterstützt mehrere Typen von Dateisystemen, wie Ext2, Ext3, ReiserFS und selbst FAT und NTFS. ISO 9660, wie der komplette Name lautet, ist der Standard für die Verwaltung von Dateien auf CD-ROMs. <span style="color:#ff0000;">'''Rockridge/Joliet:'''</span> Die Rockridge-Erweiterung ergänzt das ISO-Dateisystem um Unix-typische Dateiinformationen, wie Besitzer, Gruppe, Zugriffsrechte und symbolische Links. So tritt beim Kopieren von Daten aus einem Unix-Dateisystem auf CD kein Informationsverlust ein. Zudem erlaubt Rockridge längere Dateinamen. Die Microsoft-Erweiterung Joliet des ISO-9660-Standards lässt ebenfalls lange Dateinamen zu.
| |
| | |
| ==== Convert und Copy ====
| |
| | |
| Das praktische kleine Tool Dd müsste eigentlich den Namen Cc tragen: Convert & Copy. Da dieser aber schon für den C-Compiler vergeben war, griffen die Entwickler einfach zum nächsten Buchstaben im Alphabet.
| |
| | |
| Dd erstellt 1:1-Kopien von Datenträgern. Egal ob Festplattenpartitionen, CDs oder DVDs -- Dd liest und schreibt zuverlässig blockweise. Da Dd diese <span style="color:#ff0000;">'''Blöcke'''</span> nicht verarbeitet oder interpretiert, spielt es keine Rolle, um welches Dateisystem es sich handelt. Sogar vor Festplatten mit Fehlern schreckt Dd nicht zurück (siehe Abschnitt "Letzte Rettung"). Der einfache Aufruf für Dd lautet:
| |
| | |
| dd if=''Quelle'' of=''Ziel''
| |
| | |
| <span style="color:#ff0000;">'''Block:'''</span> Eine fortlaufende Ansammlung von Bytes auf einem Datenträger. Einige Geräte wie Festplatten, Disketten und CD-/DVD-Laufwerke organisieren ihre Daten in solchen Blöcken ("block devices"). Andere Geräte arbeiten zeichenorientiert ("character devices") und lesen/schreiben einzelne Bytes.
| |
| | |
| Über <tt>if</tt> geben Sie also an, von wo Dd die Daten liest, und hinter <tt>of</tt> definieren Sie die Ausgabe. Als Quelle und Ziel dienen oft ein Gerät, wie eine Festplatte(npartition) oder ein CD-/DVD-Laufwerk. Alternativ geben Sie nach dem Gleichheitszeichen eine Datei an. Um etwa die Festplattenpartition <tt>hda1</tt> 1:1 nach <tt>/dev/hdb1</tt> zu kopieren, tippen Sie:
| |
| | |
| dd if=/dev/hda1 of=/dev/hdb1
| |
| | |
| Ebenso können Sie Dd dazu verwenden, schnell eine CD oder DVD auf der Kommandozeile zu kopieren. Ein entsprechendes ISO-Image erstellen Sie beispielsweise über:
| |
| | |
| $ dd if=/dev/hdc of=abbild.iso
| |
| 9153728+0 Datensätze ein
| |
| 9153728+0 Datensätze aus
| |
| 4686708736 bytes transferred in 1209,649659 seconds (3874435 bytes/sec)
| |
| | |
| Das Medium muss dazu nicht gemountet <span style="color:#008080;">[1]</span> sein. Die Laufwerksangabe <tt>/dev/hdc</tt> ersetzen Sie durch den entsprechenden Gerätenamen Ihres Laufwerks; das ISO-Image landet anschließend in der Datei <tt>abbild.iso</tt> des aktuellen Verzeichnisses.
| |
| | |
| ==== Optimieren mit Optionen ====
| |
| | |
| Das Programm Dd bringt einige Schalter mit. Ein praktischer Parameter, der die Arbeit des Programms maßgeblich beschleunigt, ist <tt>bs</tt> (englisch "block size" = Blockgröße). Standardmäßig arbeitet Dd mit 512 Byte großen Blöcken -- es liest jeweils 512 Bytes ein und schreibt diese in die Ausgabedatei. Wählen Sie größere Blöcke, arbeitet Dd dementsprechend schneller. So sorgt der Aufruf:
| |
| | |
| dd if=/dev/hda1 of=/dev/hdb1 bs=2k
| |
| | |
| dafür, dass Dd die Partition in 2 KByte (2048 Bytes) großen Blöcken kopiert. Unterschreitet der letzte Block die angegebene Blockgröße, füllt Dd ihn nicht auf:
| |
| | |
| $ dd if=/dev/hda1 of=/dev/hdb1 bs=6k
| |
| 16059+1 Datensätze ein
| |
| 16059+1 Datensätze aus
| |
| 98670592 bytes transferred in 13,801482 seconds (7149275 bytes/sec)
| |
| | |
| Die Ausgabe zeigt, dass Dd 16059 Blöcke der Größe 6144 Bytes und einen "übrig gebliebenen" Block von 4096 Byte kopiert hat.
| |
| | |
| Neben der Blockgröße können Sie angeben, wie viele dieser Blöcke Dd lesen soll: Um 40 MByte zu kopieren, schreiben Sie <tt>bs=1M count=40</tt>. Dabei spezifiziert die Option <tt>count</tt> die Anzahl der Blöcke. Das macht beispielsweise Sinn, wenn Sie den Boot-Sektor einer Festplatte sichern wollen -- Sie kopieren in diesem Fall nur den ersten, 512 Bytes großen Block mit dem Aufruf:
| |
| | |
| dd if=/dev/hda of=bootsektor bs=512 count=1
| |
| | |
| ==== Letzte Rettung ==== | |
| | |
| Das Programm Dd erweist sich auch als unverzichtbarer Helfer, wenn es um die Rettung von Daten aus zerstörten Dateisystemen geht. Bevor Sie sich an die Reparatur begeben, sollten Sie zunächst ein Backup vornehmen. Dazu erstellen Sie mit Dd eine 1:1-Kopie des zerstörten Systems und führen auf dieser die Reparaturversuche durch.
| |
| | |
| Da Dd standardmäßig zerstörte Sektoren von der Kopie ausschließt, setzen Sie die Parameter <tt>conv=noerror,sync</tt> ein:
| |
| | |
| dd bs=512 conv=noerror,sync if=/dev/hda of=/dev/hdb
| |
| | |
| Auf diese Weise teilen Sie Dd mit, dass es mit dem Lesen und Ablegen von Daten auch dann fortfahren soll, wenn es defekte Sektoren findet. Dabei sorgt <tt>noerror</tt> dafür, dass Dd bei Fehlern nicht abbricht, und <tt>sync</tt> füllt unlesbare Sektoren mit Nullen auf.
| |
| | |
| === ISO-Images mit Mkisofs ===
| |
| | |
| Das Programm Mkisofs ("make ISO9660 filesystem") erstellt ausschließlich ISO-Images -- das aber gekonnt und mit vielen zusätzlichen Features. Der einfache Aufruf lautet:
| |
| | |
| mkisofs ''Parameter'' -o datei.iso ''/Verzeichnis/Daten''
| |
| | |
| Über <tt>-o</tt> definieren Sie den Namen der Zieldatei. Dahinter geben Sie die Daten an, die ins Image wandern sollen. Als optionale Parameter teilen Sie Mkisofs beispielsweise über <tt>-r</tt> mit, dass Sie die Rockridge-Erweiterung wünschen. Alternativ darf hier auch <tt>-R</tt> stehen, um zusätzlich Rechte und Dateieigentümer zu setzen. Die Joliet-Erweiterung schalten Sie entsprechend über <tt>-J</tt> ein:
| |
| | |
| mkisofs -J -R -o datei.iso ''/Verzeichnis/Daten''
| |
| | |
| Über den Parameter <tt>-V</tt> setzen Sie einen Namen (Volume-ID) für die spätere CD/DVD. Enthält dieser Leer- und Sonderzeichen, schließen Sie ihn in Hochkommata ein:
| |
| | |
| mkisofs -V "Backup 20060502" ...
| |
| | |
| Darf es hingegen etwas ausführlicher sein, schalten Sie mit <tt>-v</tt> ("verbose") auf eine lange Ausgabe um (Abbildung <span style="color:#008080;">((1))</span>); mit <tt>-quiet</tt> hingegen stellen Sie das Programm ruhig. Wer die Statusmeldungen nicht im Terminal sehen will, dennoch aber nicht auf die Informationen verzichten möchte, leitet sie in ein Protokoll (hier: <tt>log.txt</tt>) um:
| |
| | |
| mkisofs ... -log-file log.txt ...
| |
| | |
| ((1)) Mkisofs bei der Arbeit -- auf Wunsch zeigt das Tool genau an, was im Hintergrund passiert.
| |
| | |
| ==== Ideal für Backups ====
| |
| | |
| Mkisofs bringt einige praktische Optionen für das regelmäßige Erstellen von Datensicherungen mit. So schließen Sie beispielsweise über die Option <tt>-m</tt> gezielt Dateien vom Image aus. Hinter dem Parameter geben Sie als weitere Argumente Namen an. Dabei kann Mkisofs auch mit <span style="color:#ff0000;">'''Wildcards'''</span> umgehen und akzeptiert Mehrfachnennung. Um etwa sämtliche HTML-Dateien nicht ins ISO-Image aufzunehmen, tippen Sie:
| |
| | |
| mkisofs ... -m *.html -m *.HTML -o backup.iso /home/huhn
| |
| | |
| <span style="color:#ff0000;">'''Wildcards:'''</span> Platzhalter, die Teile von Zeichenketten unbestimmt lassen. Ein Fragezeichen ? in einer Zeichenkette lässt nur denjenigen Buchstaben unbestimmt, an dem sich das Fragezeichen befindet, während ein * für beliebig viele verschiedene Zeichen steht.
| |
| | |
| Über die Option <tt>-x</tt> klammern Sie bei Bedarf ganze Verzeichnisse aus, falls nötig wiederum mit mehrfacher Angabe:
| |
| | |
| mkisofs ... -x /tmp -x /var -o backup.iso /
| |
| | |
| Achten Sie bei der Verwendung dieser beiden Parameter darauf, dass Sie bei der Angabe der zu sichernden Daten keine Wildcards verwenden. Das Kommando
| |
| | |
| mkisofs ... -m *.html -m *.HTML -o backup.iso *
| |
| | |
| führt beispielsweise dazu, dass die Shell die letzte Wildcard auflöst und so wieder alle Daten ins Image aufnimmt.
| |
| | |
| Wer Dateien mit typischen Backup-Endungen, wie z. B. <tt>~</tt>, <tt><nowiki>#</nowiki></tt> oder <tt>.bak</tt>, ausklammern möchte, setzt hingegen einfach die Option <tt>-no-bak</tt> ein, und schlägt damit sämtliche Fliegen mit einer Klappe.
| |
| | |
| ==== Erstellen von ISO-Images ====
| |
| | |
| Nachdem das Programm erfolgreich installiert wurde, kann es folgendermaßen verwendet werden
| |
| | |
| mkisofs -l -iso-level 4 -o "Name der ISO Datei" "Name der Quelldatei"
| |
| | |
| Ist die Quelldatei ein Verzeichnis wird aus dem gesamten Verzeichnis ein ISO-Image erstellt.Wer weitere Einstellmöglichkeiten benötigt kann sich diese über einen Aufruf von
| |
| | |
| mkisofs -help
| |
| | |
| in der Konsole anzeigen lassen.
| |
| | |
| ==== Bootbar bitte! ====
| |
| | |
| Um bootbare Medien zu erstellen, greifen Sie beispielsweise auf den Isolinux-Bootloader zurück, der mit Mkisofs Hand in Hand arbeitet:
| |
| | |
| mkisofs -J -R -o bootcd.iso -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table ''/Ordner/Daten''
| |
| | |
| Neben den schon bekannten Mkisofs-Optionen taucht hier einiges Neue auf: Hinter <tt>-b</tt> steht das eigentliche Boot-Image, und über <tt>-c</tt> geben Sie den Boot-Katalog an. Der Parameter <tt>-no-emul-boot</tt> weist das Programm an, bei einer Installation von dieser CD keine Emulation zu erstellen, sondern den Inhalt der Abbilddatei auf die Platte zu schreiben. Die Option <tt>-boot-load-size 4</tt> definiert, dass das BIOS später vier Sektoren à 512 Bytes für die Boot-Datei bereitstellt. Schließlich erzwingt (<tt>-boot-info-table</tt>), dass beim Booten Informationen über das Layout des Mediums berücksichtigt werden. Beachten Sie, dass sich das Verzeichnis <tt>isolinux</tt> unterhalb von <tt>''/Ordner/Daten''</tt> befinden muss.
| |
| | |
| ==== Images testen ====
| |
| | |
| Das Kommando Mount bietet eine praktische Option, um ISO-Images vor dem Brennen auf eventuelle Fehler zu überprüfen. Dazu hängen Sie die Abbilddatei unter Angabe des Parameters <tt>-o loop</tt> testweise ins Dateisystem ein:
| |
| | |
| mount -o loop datei.iso /mnt/tmp
| |
| | |
| Beachten Sie, dass der Mount-Punkt existieren muss; außerdem benötigen Sie für diesen Befehl Administratorrechte. Nach Abschluss des Tests hängen Sie das ISO-Image über den Befehl <tt>umount /mnt/tmp</tt> wieder aus.
| |
| | |
| === Backup mit cpio ===
| |
| | |
| <tt>'''cpio'''</tt> erzeugt und verwaltet Dateiarchive verschiedener Formate
| |
| | |
| '''cpio''' {-o|-create} [-0acvABLV] [-C ''Anzahl''] [-H ''Format''] [-M ''Nachricht''<nowiki>] [-O [[</nowiki>''User''@]''Host'':]''Datei''<nowiki>] [-F [[</nowiki>''User''@]''Host'':]''Datei''<nowiki>] [-file=[[</nowiki>''User''@]''Host'':]''Datei''] [-format=''Format''] [-message=''Nachricht''] [-null] [-reset-access-time] [-verbose] [-dot] [-append] [-block-size=''Größe''] [-dereference] [-io-size=''Größe''] [-force-local] [-help] [-version] < ''Liste'' [> ''Datei'']
| |
| '''cpio''' {-i|-extract} [-bcdfmnrtsuvBSV] [-C ''Anzahl''] [-E ''Datei''] [-H ''Format''] [-M ''Nachricht''] [-R [''User''][:.][''Gruppe''<nowiki>]] [-I [[</nowiki>''User''@]''Host'':]''Datei''<nowiki>] [-F [[</nowiki>''User''@]''Host'':]''Datei''<nowiki>] [-file=[[</nowiki>''User''@]''Host'':]''Datei''] [-make-directories] [-nonmatching] [-preserve-modification-time] [-numeric-uid-gid] [-rename] [-list] [-swap-bytes] [-swap] [-dot] [-unconditional] [-verbose] [-block-size=''Anzahl''] [-swap-halfwords] [-io-size=''Anzahl''] [-pattern-file=''Datei''] [-format=''Format''] [-owner=[''user''][:.][''Gruppe'']] [-no-preserve-owner] [-message=''Nachricht''] [-force-local] [-help] [-version] [''Muster''...] [< ''Datei'']
| |
| '''cpio''' {-p|-pass-through} [-0adlmuvLV] [-R [user][:.][group]] [-null] [-reset-access-time] [-make-directories] [-link] [-preserve-modification-time] [-unconditional] [-verbose] [-dereference] [-owner=[''User''][:.][''Gruppe'']] [-dot] [-no-preserve-owner] [-help] [-version] ''Zielverzeichnis'' < ''Liste''
| |
| | |
| <tt>'''cpio'''</tt> ist ein Tool zur Erzeugung und Verwaltung von Dateiarchiven. In einem Dateiarchiv werden mehrere Dateien mit ihren Verzeichnissen und allen Verwaltungsinformationen, wie Eigentümer, Zugriffsrechte Erzeugungszeit etc., zu einer einzigen Datei oder zu einem Datenstrom zusammengefaßt. <tt>cpio</tt> erzeugt und verarbeitet eine ganze Reihe verschiedener Archivformate. Deshalb ist es besonders gut für den Austausch von Datenbeständen zwischen unterschiedlichen Rechnern geeignet.
| |
| | |
| <tt>cpio</tt> kann in drei verschiedenen Modi arbeiten.
| |
| | |
| Im copy-out Modus werden Daten aus dem Dateisystem in ein Archiv, zum Beispiel auf ein Magnetband, geschrieben. Die Namen der zu archivierenden Dateien liest <tt>cpio</tt> Zeilenweise von der Standardeingabe. Eine gängige Methode zur Erzeugung einer geeigneten Liste von Dateinamen ist die Verbindung des Ausgabekanals von [../../../ebooks/computer/betriebssysteme/linux/allgemein/unsortiert/linux_anwender_handbuch/linux_anwenderhandbuch_7-0/node54.html#find find] mit dem Eingabekanal von <tt>cpio</tt> durch eine Pipeline.
| |
| | |
| Im copy-in Modus werden die Daten vom Archiv in das Dateisystem kopiert. In diesem Modus liest <tt>cpio</tt> die archivierten Daten von der Standardeingabe. Wenn nicht das gesamte Archiv ausgepackt werden soll, können die gewünschen Dateien durch reguläre Ausdrücke nach den Optionen auf der Kommandozeile angegeben werden.
| |
| | |
| Im copy-pass Modus werden die Daten wie bei copy-out aus dem Dateisystem gelesen und sofort wieder in ein anderes Verzeichnis geschrieben, ohne daß zwischendurch ein Archiv erzeugt wird. Die Namen der zu kopierenden Dateien werden wie bei copy-out von der Standardeingabe gelesen, der Name des Zielverzeichnisses muß in der Kommandozeile nach den Optionen angegeben werden.
| |
| | |
| '''Optionen'''
| |
| | |
| {| class="wikitable sortable" style="border-spacing:0;margin:auto;width:17.501cm;"
| |
| |-
| |
| | style="border-top:0.05pt solid #000000;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-a</tt> '''
| |
| | style="border:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | veranlaßt <tt>cpio</tt>, nach dem copy-out die letzte Zugriffszeit vor dem Lesen zurückzusetzen
| |
| |-
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-A</tt> '''
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | die Dateien werden an ein existierendes Archiv angehängt (nur im copy-out Modus auf Blockgeräten möglich)
| |
| |-
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-b</tt> '''
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | veranlaßt <tt>cpio</tt>, beim extrahieren von Daten die Bytes von Datenwörtern und Halbwörtern zu tauschen
| |
| |-
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-B</tt> '''
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | setzt die Blockgröße auf 5120 Bytes anstelle der voreingestellten 512 Bytes
| |
| |-
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-block-size</tt><nowiki>=</nowiki>''Anzahl'' '''
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | setzt die Blockgröße auf ''Anzahl''x512 Bytes
| |
| |-
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-c</tt> '''
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | veranlaßt tar, das alte, portable ASCII Archivformat zu benutzen
| |
| |-
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-C</tt> ''Größe'' '''
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | setzt die Blockgröße (''Größe'' in Bytes)
| |
| |-
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-d</tt> '''
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | veranlaßt tar, beim Auspacken eines Archivs die notwendigen Verzeichnisse zu erzeugen, wenn sie noch nicht existieren
| |
| |-
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-E</tt> ''Datei'' '''
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | die Liste oder die regulären Ausdrücke zur Bestimmung der zu kopierenden Dateien wird aus der angegebenen Datei und nicht von der Standardeingabe gelesen
| |
| |-
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-f</tt> '''
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | verkehrt die Wirkung der Liste bzw. des Musters ins Gegenteil; es werden die Dateien kopiert, die nicht auf das Muster passen
| |
| |-
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-F</tt><nowiki> [[</nowiki>''User''@ ]''Host'':]''Datei'' '''
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | veranlaßt <tt>tar</tt>, die angegebene ''Datei'' als Archivdatei zu benutzen
| |
| |-
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-force-local</tt> '''
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | erzwingt die Interpretation eines Archivnamens bei den Optionen -F, -I und -O als lokale Datei, auch wenn in dem Dateinamen ein Doppelpunkt vorkommt
| |
| |-
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-H</tt> ''Format'' '''
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | bestimmt eines der folgenden Archivformate (bei copy-in werden die unterstützten Formate automatisch erkannt):
| |
| | |
| bin (Voreinstellung bei copy-out) veraltetes Binärformat
| |
| | |
| odc das alte, portable POSIX-1 Format
| |
| | |
| newc das neue, portable SVR4 Format; für große Dateisysteme mit mehr als 65536 I-Nodes geeignet
| |
| | |
| crc wie newc mit zusätzlicher Prüfsumme
| |
| | |
| tar das alte <tt>tar</tt> Format
| |
| | |
| ustar das POSIX-1 <tt>tar</tt> Format und das GNU-<tt>tar</tt> Format
| |
| | |
| hpbin das alte Binärformat des HPUX-<tt>cpio</tt>
| |
| | |
| hpodc das portable POSIX-1 Format von HPUX; unterscheidet sich in der Speicherung von Gerätedateien
| |
| |-
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-i</tt> '''
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | schaltet <tt>cpio</tt> in den copy-in Modus; die in der Liste angegebenen Dateien werden aus dem Archiv in das System hinein kopiert
| |
| |-
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-I</tt><nowiki> [[</nowiki>''User''@ ]''Host'':]''Datei'' '''
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | verbindet die Standardeingabe von <tt>cpio</tt> mit der ''Datei''<nowiki>; gegebenenfalls wird die Verbindung zum Rechner </nowiki>''Host'' hergestellt und die Archivierung mit den Rechten von ''User'' ausgeführt
| |
| |-
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-k</tt> '''
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | ohne Funktion
| |
| |-
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-l</tt> '''
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | wenn möglich werden Dateien nicht kopiert sondern symbolische Links erzeugt
| |
| |-
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-L</tt> '''
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | im copy-out oder -pass Modus werden nicht die symbolischen Links kopiert, sondern die referenzierten Dateien
| |
| |-
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-m</tt> '''
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | das Datum der letzten Änderung bleibt beim Kopieren unverändert
| |
| |-
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-M</tt> ''Nachricht'' '''
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | veranlaßt cpio, die Nachricht auf die Standardfehlerausgabe zu schreiben, wenn das Backup-Medium voll ist; der Platzhalter `%d' kann benutzt werden, um in der Nachricht die laufende Nummer des aktuellen Bandes auszugeben (Start bei 1)
| |
| |-
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-n</tt> '''
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | die User- und Gruppen-ID der archivierten Dateien wird beim Listing in numerischer Form ausgegeben
| |
| |-
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-no-preserve-owner</tt> '''
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | (Voreinstellung für User ohne root-Privilegien) beim Extrahieren von Dateien aus dem Archiv oder beim Kopieren wird die archivierte User- und Gruppen-ID nicht auf die extrahierten Dateien übertragen
| |
| |-
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-o</tt> '''
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | schaltet cpio in den copy-out Modus; die in der Liste angegebenen Dateien werden aus dem System heraus kopiert und ein Archiv angelegt oder erweitert
| |
| |-
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-O</tt><nowiki> [[</nowiki>''User''@ ]''Host'':]''Datei'' '''
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | verbindet die Standardausgabe von <tt>cpio</tt> mit der ''Datei''<nowiki>; gegebenenfalls wird die Verbindung zum Rechner </nowiki>''Host'' hergestellt und die Archivierung mit den Rechten von ''User'' ausgefüチhrt
| |
| |-
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-p</tt> '''
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | schaltet cpio in den copy-pass Modus
| |
| |-
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-r</tt> '''
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | erlaubt dem Anwender die interaktive Umbenennung von Dateien im copy-in Modus
| |
| |-
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-R</tt> [''User'' ][:.][''Gruppe'' ] '''
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | die entsprechenden Benutzerrechte vorausgesetzt, werden Eigentümer und/oder Gruppe der Dateien beim Extrahieren geändert
| |
| |-
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-s</tt> '''
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | die Bytes eines Halbwortes werden beim Extrahieren der Daten vertauscht
| |
| |-
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-S</tt> '''
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | die Halbworte eines Wortes werden beim Extrahieren der Daten vertauscht
| |
| |-
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-t</tt> '''
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | zeigt den Inhalt des Archives an
| |
| |-
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-u</tt> '''
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | beim Extrahieren werden Dateien im Dateisystem ohne Nachfrage durch gleichnamige Dateien aus dem Archiv überschrieben, auch wenn diese älter sind
| |
| |-
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-v</tt> '''
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | zusammen mit -t wird ein ausführliches Listing des Archivinhalts ausgegeben
| |
| |-
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-V</tt> '''
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | für jede bearbeitete Datei wird ein Punkt in den Standardfehlerkanal geschrieben
| |
| |-
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''-0</tt> '''
| |
| | style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | die Elemente der Liste können durch Nullbytes anstelle der normalerweise erwarteten NEWLINE übergeben werden
| |
| |-
| |
| |}
| |
| cpio (cpio in/out) besitzt einen ähnlichen Funktionsumfang wie das zuvor beschriebene Kommando tar, so dass wohl eher die Vorliebe des Benutzers das eine oder andere Werkzeug favorisiert. Ein Vorteil wäre dennoch zu nennen: cpio verzweifelt nicht an beschädigten Archiven und vermag zumindest den unversehrten Teil komplett wieder herzustellen.
| |
| | |
| cpio MODUS [ OPTIONEN ]
| |
| | |
| cpio kennt drei Betriebsarten: * copy in zum Extrahieren von Dateien aus einem Archiv: Option -i
| |
| * copy out zum Erzeugen eines Archivs: Option -o
| |
| * pass througth als Kombination aus den obigen Modi erlaubt das Kopieren ganzer Verzeichnisbäume: Option -p
| |
| | |
| ==== Volles und inkrementelles Backup ====
| |
| | |
| Um Dateien in einem cpio-Archiv zu speichern, müssen deren Namen dem Kommando mitgeteilt werden. cpio erwartet allerdings, dass jeder Dateiname auf einer neuen Zeile erscheint. Deshalb füttert man das Kommando am einfachsten über eine Pipe:
| |
| | |
| user@sonne> ls *.txt | cpio -o > /dev/fd0
| |
| 11 blocks
| |
| | |
| Das Beispiel sichert alle auf ".txt" endenden Dateien des aktuellen Verzeichnisses auf die Diskette. Die Ausgabeumleitung ist wichtig, da sonst die Dateiinhalte auf dem Bildschirm landen würden.
| |
| | |
| Hiermit kennen Sie nun das Prinzip des Backups mit cpio ; zur Implementierung eines inkrementellen Backups bietet sich die Nutzung der Möglichkeiten des Kommandos [../../../../index.php/Linuxfibel_-_Nutzerkommandos_-_Datei_%26_Verzeichnis#find_-_Dateien_suchen find ]an, mit dem nach den verschiedensten Kriterien nach Dateien gefahndet werden kann. So archiviert der Aufruf von:
| |
| | |
| user@sonne> find /etc -maxdepth 2 -depth | cpio -o > /dev/fd0
| |
| 319 blocks
| |
| | |
| alle Dateien aus dem Verzeichnis /etc, wobei alle Unterverzeichnisse, nicht aber die darin befindlichen Unterverzeichnisse berücksichtigt werden. Die Option »-depth« von find bewirkt, dass der Name eines Verzeichnisses selbst erst nach den enthaltenden Daten ausgegeben wird. Bei eventuellem Zurückschreiben der Daten, wird nun der häufige Fehler verhindert, dass ein Verzeichnis mit »falschen« Zugriffsrechten erzeugt wurde und anschließend das Übertragen der Daten in dieses scheitert. Durch die hier gewählte Reihenfolge wird mit der ersten Datei aus dem Verzeichnis dieses mit den korrekten Rechten gesetzt (mit Rechten, die das Schreiben der Datei ermöglichen).
| |
| | |
| Im Sinne eines inkrementellen Backups ist aber sicher die Suche nach Dateien, die innerhalb einer bestimmten Zeitspanne geändert wurden, interessant. Der nächste Aufruf findet alle Dateien des Verzeichnisses /etc, deren Modifikationszeit nicht älter als 5 Tage ist:
| |
| | |
| <nowiki># find /etc -mtime -5 -maxdepth 2 -depth | cpio -o > /dev/fd0</nowiki>
| |
| 112 blocks
| |
| | |
| ==== Überprüfung des Archives ====
| |
| | |
| Um sich eine Liste der Dateien eines Archives zu betrachten, ruft man das Kommando im »copy in«-Modus auf:
| |
| | |
| user@sonne> cpio -itvI /dev/fd0
| |
| -rw-r--r-- 1 root root 270 Aug 15 07:07 /etc/mtab
| |
| -rw-r--r-- 1 root root 2510 Aug 10 13:49 /etc/logfiles
| |
| -rw-r--r-- 1 root root 37911 Aug 15 07:06 /etc/ld.so.cache
| |
| -rw-r--r-- 1 root root 271 Aug 10 15:27 /etc/hosts.allow
| |
| -rw-r--r-- 1 root root 5762 Aug 10 15:27 /etc/inetd.conf
| |
| -rw-r--r-- 1 root root 3349 Aug 14 12:18 /etc/printcap
| |
| -rw------- 1 root root 60 Aug 15 07:06 /etc/ioctl.save
| |
| -rw-r--r-- 1 root root 3799 Aug 15 09:10 /etc/XF86Config
| |
| -rw------- 1 root root 512 Aug 15 07:07 /etc/ssh_random_seed
| |
| -rw-r--r-- 1 root root 3309 Aug 14 12:18 /etc/printcap.old
| |
| -rw-rw---- 1 lp lp 1244 Aug 14 12:05 /etc/apsfilterrc.ljet4
| |
| -rw-rw---- 1 lp lp 1261 Aug 14 12:37 /etc/apsfilterrc.lj4dith
| |
| -rw-r--r-- 1 root root 88 Aug 15 09:38 /etc/dumpdates
| |
| drwxr-xr-x 30 root root 0 Aug 15 08:28 /etc
| |
| 112 blocks
| |
| | |
| Die Option -t bewirkt die Anzeige des Archivinhalts und verhindert das Entpacken. -v bringt die Rechte der Dateien zum Vorschein und -I Archiv lässt cpio die Daten aus dem Archiv anstatt von der Standardeingabe lesen.
| |
| | |
| Ein Vergleich der Dateien im Archiv mit den Dateien im Verzeichnisbaum ist nicht direkt möglich. Hier kann nur ein Entpacken der Daten in ein separates Verzeichnis mit anschließendem Dateivergleich (z.B. mit diff) helfen.
| |
| | |
| ==== Recovery ====
| |
| | |
| Schließlich möchte man die Daten auch wieder zurückschreiben können. Hierzu ist cpio im »copy-in«-Modus wie folgt zu starten:
| |
| | |
| <nowiki># cpio -id /etc/mtab < /dev/fd0</nowiki>
| |
| cpio: /etc/mtab not created: newer or same age version exists
| |
| 112 blocks
| |
| | |
| Im Beispiel stellt cpio nur fest, dass die gewünschte Datei nicht älter ist als die im Archiv enthaltene Version. Also tut das Kommando nichts. -d erzwingt das Anlegen von Verzeichnissen, falls diese nicht schon existieren, die nachfolgende Angabe von zu rekonstruierenden Dateien kann entfallen, dann werden alle Dateien aus dem Archiv extrahiert.
| |
| | |
| === Dump/Restore ===
| |
| | |
| tar und cpio enthalten wenige Eigenschaften, die man sich von einem guten Backup-Werkzeug wünscht. Zwar sind beide effektiv zum Erzeugen voller Backups geeignet, jedoch besitzen sie von Haus aus keinerlei Unterstützung inkrementeller Datensicherungsstrategien. Allerdings passen sie mit ihrer Philosophie ideal in das Kommandokonzept von Unix, wo jedes Standardkommando einen »sinnvollen« Funktionsumfang mit sich bringen sollte und alle komplexeren Aufgaben durch Kombination der Grundbausteine realisiert werden. Ein Backup wird auch heute häufig auf Basis von Shellskripten und unter Verwendung der bereits vorgestellten Kommandos implementiert.
| |
| | |
| dump hingegen verdient die Bezeichnung eines Backup-Werkzeuges. Es vermag sowohl mit vollen als auch mit inkrementellen Backups umzugehen, wobei letztere in bis zu 9 Abstufungen vorgenommen werden können.
| |
| | |
| ==== Multilevel-Backups ====
| |
| | |
| Ein Multilevel-Backup bezeichnet eine Strategie, wobei ein volles Backup mit inkrementellen Backups kombiniert wird. Im einfachsten Fall wird einmal in einem Monat ein volles Backup des Datenbestandes vorgenommen und anschließend werden täglich nur die modifizierten Dateien gesichert. Dem vollen Backup wird hierbei das Level 0 zugeordnet und die weiteren Sicherungen erhalten das Level 1. Nach Ablauf des Monats wiederholt sich der Vorgang.
| |
| | |
| Eine Verallgemeinerung führt nun beliebig viele Level ein, wobei bei einem Backup des Levels x alle geänderten Daten im Zeitraum seit der letzten Sicherung desselben Levels berücksichtigt werden.
| |
| | |
| Der Sinn solcher Level ist die Einsparung von Speichermedien bei gleichzeitiger Verlängerung der Backup-Historie. Möchten Sie bspw. die Daten über den Zeitraum dreier Monate aufbewahren, so benötigen Sie bei Realisierung mittels zweier Level ca. 92 Bänder (1 Band für das volle Backup und für jeden Tag ein weiteres). Ein anderes Vorgehen wäre ein anfängliches volles Backup (Level 0, 1 Band), jeden Monat ein Backup Level 1 (2 Bänder, der 3. Monat wird vom kommenden vollen Backup erfasst), jede Woche ein Backup Level 2 (4 Bänder) und schließlich ein viertes Level zur Speicherung der täglichen Daten (6 Bänder). Mit 13 Bänder können Sie also jederzeit den Datenbestand auf den Stand des letzten Tages bringen.
| |
| | |
| ==== Die Verwendung von dump ====
| |
| | |
| dump [ OPTIONEN ] [ DATEISYSTEM ]
| |
| | |
| dump vermag derzeit nur mit dem Datensystem ext2 zusammen zu arbeiten. Ein zu sicherndes Dateisystem kann in der Datei [../../../../index.php/Linuxfibel_-_System-Administration_-_Dateisysteme#Die_Datei_.2Fetc.2Ffstab /etc/fstab ]markiert werden, so dass bei einem Aufruf von dump über den gesamten Verzeichnisbaum nur diese Dateisysteme berücksichtigt werden.
| |
| | |
| dump versucht in der Voreinstellung das Gerät »/dev/st0« zu öffnen. Existiert das Device nicht, fordert das Kommando zur Eingabe eines anderen Ausgabegerätes auf. Mit der Option -f Datei kann die Sicherung in eine beliebige Datei umgelenkt werden.
| |
| | |
| Dem Kommando ist natürlich mitzuteilen, was zu sichern ist. Hier kann entweder ein Verzeichnis oder das Device angegeben werden. Des Weiteren muss das Backup-Level (0-9) benannt werden. dump selbst ist in der Lage, die Zeiten der letzten Sicherung eines Levels zu notieren und anhand derer zu entscheiden, ob ein erneutes Backup dieses Levels überhaupt notwendig ist. Hierzu schreibt das Kommando, wird es mit der Option -u aufgerufen, die Zeiten in die Datei /etc/dumpdates. Existiert keine Datei, sollte zuvor eine leere von Hand erzeugt werden.
| |
| | |
| ==== Volles Backup ====
| |
| | |
| Um nun ein volles Backup des Verzeichnisses »/etc/rc.d« auf Diskette zu sichern, ist Folgendes einzugeben:
| |
| | |
| <nowiki># dump -0 -u -f /dev/fd0 /etc/rc.d/</nowiki>
| |
| DUMP: Date of this level 0 dump: Tue Aug 15 09:38:13 2000
| |
| DUMP: Date of last level 0 dump: the epoch
| |
| DUMP: Dumping /dev/hda5 (/) to /dev/fd0
| |
| DUMP: Label: none
| |
| DUMP: mapping (Pass I) [regular files]
| |
| DUMP: mapping (Pass II) [directories]
| |
| DUMP: estimated 652 tape blocks on 0.02 tape(s).
| |
| DUMP: Volume 1 started at: Tue Aug 15 09:38:13 2000
| |
| DUMP: dumping (Pass III) [directories]
| |
| DUMP: dumping (Pass IV) [regular files]
| |
| DUMP: DUMP: 725 tape blocks on 1 volumes(s)
| |
| DUMP: finished in less than a second
| |
| DUMP: Volume 1 completed at: Tue Aug 15 09:38:13 2000
| |
| DUMP: level 0 dump on Tue Aug 15 09:38:13 2000
| |
| DUMP: DUMP: Date of this level 0 dump: Tue Aug 15 09:38:13 2000
| |
| DUMP: DUMP: Date this dump completed: Tue Aug 15 09:38:13 2000
| |
| DUMP: DUMP: Average transfer rate: 0 KB/s
| |
| DUMP: Closing /dev/fd0
| |
| DUMP: DUMP IS DONE
| |
| | |
| dump fordert selbständig zum Mediumwechsel auf, wenn dessen Speicherkapazität nicht mehr genügt.
| |
| | |
| dump hat in obigen Beispiel die letzte Sicherung des zugrunde liegenden Dateisystems in der Datei »/etc/dumpdates« vermerkt. Die Informationen sind dort im Klartext enthalten und können somit editiert werden, um z.B. temporär eine andere Backupstrategie zu wählen. Mit der Option -W zeigt dump die gesicherten Dateisysteme mit Datum und letztem Backuplevel an und gibt zusätzlich noch Empfehlungen, welches Dateisystem eine erneute Sicherung vertragen könnte:
| |
| | |
| <nowiki># dump -W</nowiki>
| |
| Last dump(s) done (Dump '>' file systems):
| |
| /dev/hda5 ( /) Last dump: Level 1, Date Tue Aug 15 13:38
| |
| | |
| ==== Inkrementelles Backup ====
| |
| | |
| Um nun eine Level-2-Archivierung desselben Dateisystems vorzunehmen, gibt der Administrator folgende Zeile ein:
| |
| | |
| <nowiki># dump -2 -u -f /dev/fd0 /etc/rc.d/</nowiki>
| |
| | |
| Die eigentliche Aufgabe beim Backup ist es nun, die verschiedenen Level-Sicherungen in sinnvollen Zeiträumen anzuordnen, z.B. * Level-0-Backup einmal in 3 Monaten
| |
| * Level-1-Backup monatlich
| |
| * Level-2-Backup wöchentlich
| |
| * Level-3-Backup täglich
| |
| | |
| Es bietet sich an, ein solches Schema per [../../../../index.php/Linuxfibel_-_System-Administration_-_Zeit_und_Steuerung#Wiederkehrende_Abl.C3.A4ufe_mit_cron cron ]-Job automatisch zu realisieren. Die Aufgabe des Administrators reduziert sich damit auf das rechtzeitige Wechseln der Bänder.
| |
| | |
| ==== Überprüfung des Archives mit restore ==== | |
| | |
| Um einen Vergleich der im Archiv vorhandenen mit den installierten Dateien vorzunehmen, dient das Kommando restore in Verbindung mit der Option -C. Wird kein weiteres Argument angegeben, versucht restore das Archiv von /dev/st0 zu lesen. Wir verweisen es deshalb auf eine andere Datei (Option -f Datei) :
| |
| | |
| <nowiki># restore -C -f /dev/fd0</nowiki>
| |
| Dump date: Tue Aug 15 15:38:38 2000
| |
| Dumped from: the epoch
| |
| Level 0 dump of / on sonne:/dev/hda5 (dir /etc/rc.d)
| |
| Label: none
| |
| filesys = /
| |
| ./lost+found: (inode 11) not found on tape
| |
| ./usr: (inode 2049) not found on tape
| |
| ...
| |
| | |
| Die angeblich fehlenden Dateien sind auf einen Link im archivierten Verzeichnis zurückzuführen und können ignoriert werden.
| |
| | |
| ==== Recovery mit restore ====
| |
| | |
| Zum Recovery der Daten wird im einfachsten Fall ein Archiv mittels recover und der Option -r zurückgeschrieben. Beachten Sie, falls Sie alle Daten durch ihre Kopie aus den Archiven ersetzen wollen, alle Archive in der Reihenfolge ihrer Aufzeichnung einzuspielen, d.h. Sie spielen zunächst das volle Backup (Level 0) ein, dann alle Backups des Levels 1 usw.
| |
| | |
| <nowiki># restore -r -f /dev/fd0</nowiki>
| |
| | |
| Eine Besonderheit von recover ist der interaktive Modus (Option -i), der die Selektion einzelner Dateien aus einem Archiv ermöglicht.
| |
| | |
| <nowiki># restore -i -f /dev/fd0</nowiki>
| |
| Verify tape and initialize maps
| |
| Tape block size is 32
| |
| Dump date: Tue Aug 15 15:38:38 2000
| |
| Dumped from: the epoch
| |
| Level 0 dump of / on dev17:/dev/hda5 (dir tmp)
| |
| Label: none
| |
| Extract directories from tape
| |
| Initialize symbol table.
| |
| restore > help
| |
| Available commands are:
| |
| ls [arg] - list directory
| |
| cd arg - change directory
| |
| pwd - print current directory
| |
| add [arg] - add `arg' to list of files to be extracted
| |
| delete [arg] - delete `arg' from list of files to be extracted
| |
| extract - extract requested files
| |
| setmodes - set modes of requested directories
| |
| quit - immediately exit program
| |
| what - list dump header information
| |
| verbose - toggle verbose flag (useful with ``ls'')''
| |
| help or `?' - print this list
| |
| If no `arg' is supplied, the current directory is used
| |
| restore > ls
| |
| .:
| |
| 2. / 2. ./ 6145 tmp/
| |
|
| |
| restore > verbose
| |
| verbose mode off
| |
| restore > ls
| |
| .:
| |
| tmp/
| |
|
| |
| restore > quit
| |
| | |
| Die Kommandos [../../../../index.php/Ls ls, ][../../../../index.php/Cd cd ]und [../../../../index.php/Pwd pwd ]besitzen gleiche Bedeutung wie in der Shell, wobei als Argument für [../../../../index.php/Ls ls ]nur Dateinamen mit enthaltenen Metazeichen jedoch keine Optionen zulässig sind.
| |
| | |
| Um nun eine Liste der zu extrahierenden Dateien zu erstellen, werden Dateien mit add hinzugefügt und mittels delete entfernt. In der Ausgabe von ls erscheint eine Markierung vor den in der Liste enthaltenen Dateien.
| |
| | |
| Mit extract werden schließlich die markierten Dateien aus dem Archiv ins System eingespielt, wobei recover zunächst zur Eingabe der Volumenummer auffordert (also das Band, auf dem sich die Datei befindet). Ein Beispieldialog könnte wie folgt aussehen:
| |
|
| |
|
| restore > add boot*
| | [[Kategorie:Linux/Datei/Archiv]] |
| restore > ls boot*
| | [[Kategorie:Linux/Backup]] |
| <nowiki>*bootsec.lin</nowiki>
| | [[Kategorie:Linux/Storage]] |
| restore > extract
| | [[Kategorie:Backup]] |
| You have not read any tapes yet.
| | </noinclude> |
| Unless you know which volume your file(s) are on you should start
| |
| with the last volume and work towards the first.
| |
| Specify next volume #: 1
| |
| Mount tape volume 1
| |
| Enter ``none ''if there are no more tapes''
| |
| otherwise enter tape name (default: /dev/fd0)
| |
| resync restore, skipped 64 blocks
| |
| set owner/mode for '.'? [yn] n
| |
| restore >
| |