Druckversion | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Change Directory dient zum Wechsel des aktuellen Verzeichnisses. Wird dem Kommando kein Argument mitgegeben, wechselt »cd« in das durch »$HOME« beschriebene Verzeichnis (HOME ist die Shellvariable, die den Namen des Heimatverzeichnisses eines Benutzers enthält):
Beginnt das Argument mit einem Schrägstrich /, so handelt es sich um eine absolute Pfadangabe. »cd« versucht den Pfad ausgehend von der Wurzel zu finden. Alle anderen Argumente werden als relative Pfadangaben behandelt. Ist die Variable »$CDPATH« gesetzt, sucht das Kommando zuerst in allen diesen Verzeichnissen nach dem durch das Argument beschriebene Verzeichnis. Erst wenn es dieses dort nicht findet, sucht »cd« ausgehend vom aktuellen Verzeichnis. Die Verwendung der Variable »$CDPATH« ist ungewöhnlich und kann leicht zu Verwirrung führen.
Mittels symbolischer Links ist es möglich, auf Verzeichnisse zu verweisen, die an beliebigen Stellen im System liegen. Normalerweise - bzw. mit der Option -L - folgt »cd« der logischen Struktur solcher Links auch »rückwärts«:
Mit der Option -P weist man »cd« an, immer der physischen Verzeichnisstruktur zu folgen:
Mit dem Kommando cp lassen sich eine Datei in eine andere, mehrere Dateien in ein Verzeichnis oder ganze Verzeichnisse kopieren. »cp« erwartet die Angabe von Quelle und Ziel und entscheidet anhand von Optionen und Ziel, wie zu verfahren ist. Ist Ziel ein existierendes Verzeichnis, so werden alle Quelldateien in dieses hinein kopiert. Ist Ziel ein unbekannter Name, so wird die Quelle (nur eine einzige!) unter dem Namen kopiert. Die Rechte von Quelle werden dabei übernommen. Die wichtigsten Optionen sind: -d Links bleiben als Link erhalten -f Existierende Zieldateien werden überschrieben -i Nachfrage vor dem Überschreiben existierender Zieldateien -l Alle Dateien werden gelinkt, anstatt physisch kopiert -p Dateiattribute bleiben erhalten -r Dateien werden rekursiv kopiert -R Verzeichnisse werden rekursiv kopiert -u Existierende Zieldateien werden nur überschrieben, wenn die Quelldatei aktueller ist
Das Kommando versucht zu den als Argument übergebenen Dateinamen deren Typ zu
bestimmen. Als erstes untersucht file die Informationen, die der Systemruf stat() liefert. Hierzu zählen der Test, ob die Datei leer ist
und der Test, ob es sich um eine spezielle Datei
handelt. Wichtige Optionen sind -z, die »file« veranlasst, den Inhalt einer komprimierten Datei zu testen und -f <Datei>, wodurch die zu untersuchenden Dateinamen aus der angegebenen Datei entnommen werden (ein Name pro Zeile).
find ist ein äußerst mächtiges Instrument zum Suchen von Dateien. Mit PFAD kann dem Kommando ein beliebiges Startverzeichnis für die Suche angegeben werden. Fehlt die Angabe, startet das Kommando im aktuellen Verzeichnis. Allerdings ist der Verzicht auf die Pfadangabe nur bei der GNU-Version (also unter Linux) des Kommandos gestattet, deswegen empfiehlt es sich, die Angabe immer vorzunehmen. find durchsucht in der Voreinstellung rekursiv alle Unterverzeichnisse. Deshalb lassen sich die Anzahl der Ebenen (Option --maxdepth Anzahl) beschränken. »Anzahl=1« bedeutet dabei die Suche einzig im angegebenen Verzeichnis. Die gebräuchlichste Methode wird die Suche nach Dateien mit einem bestimmten Namen sein. Die Option -name Dateiname ermöglicht dies. Dateiname kann dabei die Shell-Metazeichen zur Dateinamenserweiterung enthalten, in dem Falle muss der Name vor der Auswertung durch die Shell geschützt werden, indem er in Anführungsstriche (doppelt/einfach) eingeschlossen wird.
Dateien verfügen über viele Eigenschaften. Sie haben einen Besitzer, Rechte, mehrere Zeitstempel, einen Typ, usw. Für jede dieser Eigenschaften existieren Optionen, mit denen sich gezielt Dateien bestimmter Charakteristik herausfischen lassen. Die Optionen sind u.a: -amin Minuten Findet Dateien, auf die vor Minuten zugegriffen wurden. Um bspw. alle Dateien zu finden, deren Zugriff vor 2 bis 8 Minuten geschah, können die Angaben kombiniert werden: "-amin +2 -amin -8". -atime Tage Findet Dateien, auf die vor Tagen zugegriffen wurden (zur Angabe von Bereichen siehe Option "amin") -empty Findet leere Dateien (Größe 0 Bytes) -group Gruppe Findet Dateien, die zur Gruppe (Nummer oder Name) gehören -iname Name Findet Dateien mit Name, wobei Groß- und Kleinschreibung keine Rolle spielen -links Anzahl Findet Dateien, auf die Anzahl fester Links zeigen -mtime Tage Findet Dateien, die vor Tagen geändert wurden (zur Angabe von Bereichen siehe Option »amin«) -name Name Findet Dateien mit Name -path Name Findet Dateien mit Name, wobei Name auch Pfadangaben enthalten kann ("*/include/*.h") -perm Modus Findet Dateien, deren Rechte exakt dem angegebenem Modus entsprechen (Angabe numerisch oder symbolisch) -perm -Modus Findet Dateien, bei denen mindestens die durch Modus angegebenen Rechteflags gesetzt sind -perm +Modus Findet Dateien, bei denen mindestens eines der durch Modus angegebenen Rechteflags gesetzt ist -regex Muster Wie "-name", nur kann das Muster reguläre Ausdrücke enthalten -size Number[Einheit] Findet Dateien einer bestimmten Dateigröße. In der Voreinstellung ist die »Einheit« 512 Byte große Blöcke, d.h. bei Number=1 werden alle Dateien mit einer Größe zwischen 1 und 512 Bytes gefunden. Als Einheit kann stehen: b für 512 Byte-Blöcke (Voreinstellung), c für 1 Byte-Blöcke, k für Kilobyte-Blöcke und w für 2 Byte-Blöcke. -type Typ Findet Dateien eines bestimmten Types: b Blockdevice, c Zeichenweise arbeitendes Device, d Verzeichnis, p Fifo-Datei, f "normale" Datei, l symbolischer Link und s Socket. -user Nutzer Findet Dateien des "Nutzers" (UID oder Nutzername) Betrachten wir Beispiele zur Anwendung einiger der Suchkriterien:
In den Ausgaben wurden die Fehler nach "/dev/null" verschoben, da find natürlich nur Verzeichnisse unter die Lupe nimmt, zu dessen Zugang der Benutzer berechtigt ist. Die Fülle der Ausgaben von find lässt rasch den Wunsch nach detaillierteren Suchkriterien aufkeimen. Das Kommando hält logische Operatoren bereit, um verschiedene Kriterien miteinander zu verknüpfen. Die Wichtigsten sind: ( Ausdruck ) Zur vorrangigen Bewertung des geklammerten Ausdrucks ! Ausdruck Negiert das Suchkriterium Ausdruck1 -a Ausdruck2 Beide Kriterien müssen zutreffen (das "-a" kann entfallen) Ausdruck1 -o Ausdruck2 Eines der Kriterien muss stimmen, ist »Ausdruck1« wahr, wird »Ausdruck2« nicht ausgewertet Ein Beispiel soll die Anwendung demonstrieren:
Erläuterung: Die Suche wurde auf das aktuelle Verzeichnis beschränkt "-maxdepth 1", Verzeichnisse ausgeschlossen "\! -type d" (das "!" ist ein Sonderzeichen der Shell, deswegen muss die Auswertung durch die Shell verhindert werden). Es sollen alle Dateien gefunden werden, bei denen mindestens in einer Rechtegruppe das x-Flag gesetzt ist "-perm +111" und die »user» gehören "-user user". Die Suchkriterien sind jeweils per UND zu verknüpfen. Da find rekursiv alle Unterverzeichnisse (eventuell bis zu einer bestimmten Tiefe) durchsucht, kann die Ausführung sehr langwierig werden. Es besteht aber die Möglichkeit, eine Suche abzubrechen, sobald im Verzeichnis- oder Dateinamen eine bestimmtes Textmuster enthalten ist. Dem jeweiligen Suchkriterium ("-name" oder "-path") ist die Option -prune hinten an zu stellen:
Schließlich wünscht man sich, mit der gefundenen Datei etwas anstellen zu können, d.h. die gefundene Datei durch ein Kommando zu schleusen. Mit der Option -exec Kommando(s) {} ; wird in jedem Schritt die gefundene Datei der Reihe nach mit den angegebenen Kommandos bearbeitet. Die geschweiften Klammern dienen dabei als Platzhalter, der den aktuellen Dateinamen enthält. Das Semikolon schließt die exec-Option ab:
Bemerkung: Die Maskierung der geschweiften Klammern und des Semikolons ist entscheidend, da diese sonst von der Shell substituiert werden (ein Semikolon wird bspw. entfernt). Auch muss zwischen schließender Klammer und Semikolon ein Leerzeichen stehen!
Das Kommando dient zum schnellen Auffinden von Dateien. Dabei kann die zu suchende Datei die Shell-üblichen Metazeichen "*", "?" und "[...]" enthalten. »locate« schreibt dann alle, dem Suchmuster entsprechenden Dateien auf die Standardausgabe. Um effizient zu arbeiten, durchsucht »locate« nicht die Verzeichnisse, sondern schaut in einer Datenbank (Voreinstellung ist /var/lib/localedb) nach. Die Aktualisierung der Datenbank kann mit dem Kommando updatedb erfolgen. Mit der Option "-d <pfad>" kann ein anderes, die Datenbank enthaltendes Verzeichnis angegeben werden.
Mit dem Kommando ln erzeugt man »Verweise« auf Dateien. D.h. man erzeugt einen neuen Namen für eine bestehende Datei oder Verzeichnis und greift über diesen auf die Datei bzw. das Verzeichnis genauso zu, als würde man den originalen Namen verwenden. Der Vorteil von Links liegt sicherlich im Ersparnis an Speicherplatz. Jede Datei wird nur noch einmal auf der Festplatte abgelegt. Mit Links ist es möglich, dass Dateien in einem lokalen Verzeichnis erscheinen, obwohl sie physisch ganz woanders, sogar auf einem entfernten Rechner liegen können. Vorsicht ist allerdings beim Modifizieren der Dateien geboten. Im Falle einer Kopie bleibt im Falle eines Fehlers das Original erhalten. Bei einem Link manipuliert man immer das einzige Original! Es existieren zwei Arten von Links, die sich in der internen Realisierung durch das Dateisystem unterscheiden und damit Konsequenzen in der Verwendung nach sich ziehen. Vereinfacht ausgedrückt werden Verwaltungsinformationen aller Dateien in Unix-Systemen in so genannten Inodes gespeichert und die Daten selbst in den Datenblöcken. Diese Inodes besitzen eine für das jeweilige Dateisystem eindeutige Nummer. Ein Verzeichnis ist in Unix eine Datei, deren Daten die enthaltenen Dateinamen zusammen mit ihrem Speicherplatz sind. Ein fester Link ist ein neuer Verzeichniseintrag in einer Verzeichnisdatei, wobei der neue Dateiname gemeinsam mit der Inode-Nummer der originalen Datei gespeichert wird. Feste Links dürfen nur von Root auf Verzeichnisse angewandt werden. Außerdem sind sie nur für Dateien desselben Dateisystem möglich (Eindeutigkeit der Inode-Nummern). Ein symbolische Link wird im Verzeichniseintrag als Linkname und Inode-Nummer eines neuen Inodes abgelegt, welcher den vollständigem Zugriffspfad zur originalen Datei beinhaltet, deshalb kann er »überall« hin zeigen. Um einen Link zu einer Datei eines anderen Verzeichnisses unter dem selben Namen anzulegen, ist dem nur die zu linkende Datei anzugeben:
Der Unterschied zwischen festem und symbolischem Link wird in der Ausgabe des Kommandos ls -l nochmals deutlich. Im ersten Fall (fester Link) zeigen sich exakt die selben Rechte / der selbe Besitzer... wie die originale Datei. Das ist ja auch nicht verwunderlich, werden die Information doch aus dem selben Inode entnommen. Im zweiten Fall hingegen gehört der Link nun user und besitzt alle Rechte. Dies ist legitim, da der Zugriff auf den Link jedem gestattet sei, der Zugriff auf das Original aber anhand dessen verifiziert wird. Dem Kommando ln können mehrere zu linkende Dateien angegeben werden. Dabei muss die letzte Angabe ein Verzeichnis sein. In diesem werden nachfolgend alle Links erzeugt. Von den Optionen verdienen sich das Prädikat »Besonders nützlich« -b, das im Falle existierender Linkziele diese unter dem Namen »<Linkziel>~« sichert, -d, das Root ermächtigt, ein Verzeichnis »hart« zu linken und -f, um existierende Ziele ungefragt zu überschreiben (das Gegenstück ist "-i").
Ohne Argumente aufgerufen, gibt ls eine Liste der »sichtbaren« Dateien und Verzeichnisse des aktuellen Verzeichnisses aus. Sichtbar bedeutet dabei, dass der Dateiname nicht mit einem Punkt beginnt (das ist der einzige Weg, um Dateien zu »verstecken«). Mit der Angabe von »DATEI« kann die Ausgabe auf bestimmte Dateien beschränkt oder für andere Verzeichnisse vorgenommen werden. »DATEI« kann dabei die shellüblichen Metazeichen enthalten.
Das letzte Beispiel zeigt etwas mehr an, als wir vielleicht erwartet hatten... und zwar den Inhalt des Verzeichnisses "/etc/X11". Der Grund ist, dass die Shell die Expansion des Metazeichens * vornimmt und dem Kommando ls u.a. das Verzeichnis "/etc/X11" als Argument mitgibt. Findet ls nun ein Verzeichnis als Argument vor, wird es dessen Inhalt auflisten. Allerdings lässt dich dieses Verhalten mit der Option -d unterdrücken.
Die Optionen beeinflussen in erster Linie die Fülle an Informationen, die das Kommando ls zu den Dateien anzeigt. Eine Auswahl an Optionen sei tabellarisch angeführt: -a Anzeige aller Dateien (einschließlich der "versteckten") -d Zeigt bei Unterverzeichnissen nur deren Namen, nicht deren Inhalt an (Siehe letztes Beispiel) -i Anzeige des Speicherplatzes (Inodenummer) einer Datei -l Anzeige von Namen, Typ, Rechten, Anzahl der Hardlinks, Besitzer, Gruppe, Größe, Zeitmarke -t Anzeige nach Zeitmarke sortiert -F Kennzeichnet Dateitypen durch Anhängen eines Symbols. Die Markierung kann bei monochromen Monitoren bzw. X-Servern sinnvoll sein. * Ausführbare Datei /Verzeichnis @Symbolischer Link |Named pipe (FiFo) =Socket nichts"Normale" Datei -I MUSTER (Großes i) Dateien, deren Namen mit dem Muster übereinstimmen, werden von der Anzeige ausgeschlossen -S Nach Dateigröße sortierte Ausgabe --color Farbliche Kennzeichnung des Dateityps. Welcher Typ mit welcher Farbe dargestellt wird, steht in der Datei "/etc/DIR_COLORS". Zum Abschluss noch einige Anwendungsbeispiele:
Das Line Printer Control Programm dient dem Administrator zum Manipulieren der Druckerwarteschlange. Dem »normalen« Benutzer steht einzig die Möglichkeit zur Abfrage derer zur Verfügung. Wird lpc ohne Argumente aufgerufen, geht es in den interaktiven Modus und wartet auf weitere Kommandoeingaben. Dieser Modus kann durch Eingabe von quit oder exit beendet werden. Alle Kommandos, die lpc versteht, lassen sich ebenso als Argument auf der Kommandozeile angeben. Das Programm wird den Befehl bearbeiten und anschließend terminieren.
Neben dem Beenden und Aufruf der Hilfe steht dem Benutzer nur status zur Anzeige der Warteschlangeneigenschaften zur Verfügung.
Zum Drucken von Dokumenten von der Konsole aus, dient das Kommando lpr (auch grafische Anwendungen nutzen intern dieses Kommando). lpr fügt einer Druckerwarteschlange einen neuen Auftrag hinzu und informiert anschließend den Druckerdaemon. Der Druckjob wird in die mit -P Druckername angegebene Warteschlange oder, wenn die Option nicht angegeben wurde, in die Standard-Druckerschlange, die mit Hilfe der Umgebungsvariablen »$PRINTER« gesetzt wird, eingereiht.
Das obige Vorgehen funktioniert meist erst nach dem Einrichten des Druckers, das aber nicht Bestandteil dieses Abschnitts sein soll. »Meist« steht hier bewusst, da im Falle, dass die zu druckende Datei Daten in einem für den Drucker verständlichen Format beinhaltet (und der Druckerdaemon aktiv ist), dieses durchaus gelingen kann. Im Normalfall müssen die Daten aber erst aufbereitet werden, was bei geeigneter Druckerkonfiguration für den Benutzer transparent geschieht. lpr bietet aber eine Reihe von Optionen, die dem Kommando Informationen über das konkrete Datenformat mitteilen, zum Glück muss sich der Benutzer, vorausgesetzt der Administrator hat seine Hausaufgaben erledigt, um solche kryptischen Angaben nicht kümmern. Dennoch existieren ein paar Optionen, die nützliche Effekte hervorzaubern: -h Oft werden intern Dokumente so aufbereitet, dass sie noch eine Statusseite enthalten, die u.a. die Anzahl der Seiten des Jobs, den Auftraggeber, die Druckkosten usw. beschreibt. Der Druck dieser Seite kann mit der Option "-h" unterbunden werden. -m Wenn der Auftrag ausgedruckt wurde, wird der Auftraggeber per Mail benachrichtigt... das spart manchen Weg zum Druckerraum... -s Die zu druckende Datei wird nicht ins Spoolverzeichnis kopiert sondern symbolisch gelinkt. Das ist hilfreich, wenn die Festplatte mit dem Spoolverzeichnis wenig freien Speicherplatz bietet. -P Der Ausdruck erfolgt auf dem angegebenen Drucker ("-Panderer_Drucker") anstatt auf dem default-Drucker. Weitere Optionen ermöglichen den mehrfachen Ausdruck eines Dokuments -#Anzahl, die Änderung der Zeilenbreite -wBreite, das Einrücken der Ausgabe -i Spalte und Manipulationen der Statusseite, z.B. erzwingt -j Titel einen anderen Titel (sonst erster Dateiname).
lprm ist die einzige Möglichkeit für den normalen Benutzer, einen Druckjob aus der Warteschlange zu entfernen. Mit dem Aufruf lprm - löscht ein Nutzer alle eigenen Aufträge aus dem Spool-Verzeichnis des default-Druckers. Mit -P Druckername kann er einen anderen als den voreingestellten Drucker auswählen. Die Nummer eines Druckjobs verrät u.a. ein Aufruf des Kommandos lpq. Mit dieser Nummer kann ein einzelner Job (oder mehrere) gezielt entfernt werden:
Line printer queue ist das Kommando, um die noch ausstehenden Druckaufträge in einer Druckerwarteschlange anzusehen. Ohne Argumente aufgerufen, werden alle Aufträge des »default«-Druckers angezeigt:
Befinden sich weitere Drucker im System (z.B. Netzwerkdrucker) kann mit der Option -P Druckername die Warteschlange des benannten Druckers betrachtet werden. Mit Angabe eines Nutzerkennzeichens werden nur die Aufträge dieses Benutzers angezeigt und die Option -l führt zur Ausgabe »aller« Informationen zum Druckjob, während sonst nur so viele Informationen angezeigt werden, wie auf eine Zeile des Terminals passen.
Mit mkdir lassen sich neue Verzeichnisse erzeugen. Dabei gelten die durch umask vorgegebenen Rechte, außer, dem Kommando wird mittels der Option -m eine andere Rechtemaske mitgegeben. Das Kommando weigert sich, wenn ggf. die Elternverzeichnisse nicht existieren. In solchen Fällen kann mit der Option -p das automatische Erzeugen fehlender übergeordneter Verzeichnisse erzwungen werden.
Mit dem Kommando mv lassen sich eine einzelne Dateien und ein einzelnes Verzeichnis umbenennen oder Datei(en) bzw. Verzeichnis(se) in ein Zielverzeichnis verschieben. mv erkennt aus dem Kontext, welche Aktion vorzunehmen ist. Die Optionen sind: -b Existiert eine Zieldatei bereits, wird diese gesichert (Name: "<Zielname>~") -i Nachfrage vor Überschreiben einer existierenden Zieldatei -f Überschreiben einer existierenden Zieldatei ohne Nachfrage -u Überschreiben älterer existierender Zieldateien Zum Abschluss einige Beispiele:
Das Kommando gibt den vollständigen Namen des aktuellen Verzeichnisses aus. Einzige Optionen sind --help und --version.
Das Löschen von Dateien unter Unix reduziert sich mit dem Kommando rm auf des Entfernen des Verzeichniseintrages und Freigabe der von den Dateien allokierten Datenblöcke. Da diese Blöcke nun nicht mehr einzelnen Dateien zugeordnet werden können, ist die Konsequenz, dass einmal entfernte Daten nicht wieder hergestellt werden können (prinzipiell ist eine Restauration möglich, aber das ist Thema des Profiteils). Der Benutzer sollte also beim Löschen von Daten Vorsicht zum obersten Prinzip erheben. rm entfernt alle als Argument angegebenen Daten. Besitzt man für eine Datei keine Schreibberechtigung, fordert rm eine nochmalige Bestätigung des Löschens. Ist man der Eigentümer der Datei, oder befindet sich die Datei in seinem Heimatverzeichnis, so kann eine »schreibgeschützte« Datei entfernt werden (Ausnahme: Dateiattribute).
Mit der Option -f (force) kann die obige Nachfrage unterdrückt werden, mit -i (interactive) muss jede zu löschende Datei bestätigt werden. Im Unterschied zum später beschriebenen Kommando rmdir vermag rm in Verbindung mit der Option -r (recursive) auch nicht leere Verzeichnisse zu entfernen. Beginnt ein Dateiname mit einem Minus, würde rm dieses als Option betrachten und vermutlich mit einer Fehlermeldung den Dienst quittieren. Dem Kommando muss in solchen Fällen explizit das Ende der Optionen bekannt gegeben werden, indem zwei Minus die Liste der Dateinamen einleiten:
Das im letzten Absatz beschriebene Problem mit den Dateinamen kann bei fast allen Kommandos wie beschrieben gelöst werden.
Das Kommando löscht leere Verzeichnisse. Zum Entfernen nichtleerer Verzeichnisse kann das Kommando rm genutzt werden. Mit der Option -p können übergeordnete Verzeichnisse entfernt werden. Auch hier gilt, dass diese leer sein müssen.
whereis gibt zu einem gegebenem Programmnamen den Zugriffspfad, das zugehörige Manual und - falls installiert - das Verzeichnis der Quelldateien an. Das Kommando durchsucht hierzu die typischen Verzeichnisse, wo z.B. ein Kommando gespeichert sein könnte.
Mit Optionen kann die Ausgabe eingeschränkt werden. So gibt "-b" nur den Pfad zum Kommando an, "-m" zeigt die Hilfedatei und "-s" die Programmsourcen.
Der Suchraum des Kommandos kann eingeschränkt werden. Die Option "-B <Suchpfade>" weist »whereis« an, nur in den angegebenen Verzeichnissen nach Binaries zu suchen. "-M" betrifft die Manual-Suchpfade und "-S" die der Sourcen. Werden diese Optionen verwendet muss hinter der letzten Pfadangabe die Option "-f" stehen, um »whereis« das Ende mitzuteilen.
Das Kommando zeigt den vollständigen Zugriffspfad zu einem Kommando an, indem es das Kommando anhand der »PATH«-Variable sucht. Das Kommando ist vor allem hilfreich, wenn man sich nicht sicher ist, ob ein Kommando das richtige ist.
Gibt das Kommando nichts aus, wurde entweder das Kommando nicht gefunden oder es handelt sich um ein Shell-builtin-Kommando (Vergleiche auch Arten von Kommandos). Im ersten Fall ist der Rückgabewert »-1«, sonst »0«. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Korrekturen, Hinweise? |