Nutzerkommandos - Dateien und Verzeichnisse

cd - Verzeichnisse wechseln Weiter

Aufruf:   cd [-PL] [dir]

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):

user@sonne> pwd
/usr/lib
# Aufruf von »cd« ohne Argument und anschließende Ausgabe des aktuellen Pfadnamens
user@sonne> cd; pwd
/home/user

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.

user@sonne> cd /usr/src; pwd
/usr/src

user@sonne> cd ../../usr; pwd
/usr

user@sonne> export CDPATH="/:/var"
user@sonne> cd tmp; pwd
/tmp

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«:

user@sonne> ls -l /usr/dict
lrwxrwxrwx   1 root     root     10 Jan 27 17:21 /usr/dict -> share/dict

user@sonne> cd /usr/dict/../; pwd
/usr

Mit der Option -P weist man »cd« an, immer der physischen Verzeichnisstruktur zu folgen:

user@sonne> cd -P /usr/dict/../; pwd
/usr/share

cp - Dateien und Verzeichnisse kopieren Zurück Anfang Weiter

Aufruf:   cp [OPTIONEN]... QUELLE ZIEL

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

# Einfaches Kopieren einer Datei
user@sonne> cp datei.txt file.txt
# Rekursiv mit Unterverzeichnissen, bestehende Dateien überschreiben (force)
user@sonne> cp -Rf dir dest
# Nur neuere Dateien
user@sonne> cp -u dir dest
# Linken anstatt Kopieren
user@sonne> cp -l dir dest

file - Dateityp bestimmen Zurück Anfang Weiter

Aufruf:   file [ -vbczL ] [ -f namefile ] [ -m magicfiles ] file ...

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.
Ein zweiter Testlauf überprüft die Existenz einer Magic Number. Programmdateien, Bilddateien, Sounddateien, Datenbanken... beinhalten zumeist eine solche Identifizierung. Das Kommando »file« verwendet in der Voreinstellung die Datei "/var/lib/magic" als Sammlung solcher Magic Numbers. Mit der Option -m <Magic-Datei> kann eine andere Vergleichsdatei angegeben werden.
Schließlich versucht »file«, insofern es sich um eine ASCII-Datei handelt, die Sprache des Textes zu analysieren. Allerdings ordnet das Kommando so ziemlich alles dem Englischen zu...

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).

user@sonne> file storage.htm
storage.htm: html document text

user@sonne> file werk.tgz
werk.tgz: gzip compressed data, deflated, last modified: Sun May 28 20:55:43 2000, os: Unix

user@sonne> file -z werk.tgz
werk.tgz: GNU tar archive (gzip compressed data, deflated, last modified: Sun May 28 20:55:43 2000, os: Unix)

user@sonne> file /bin/ls
/bin/ls: ELF 32-bit LSB executable, Intel 80386, version 1, dynamically linked (uses shared libs), stripped

find - Dateien suchen Zurück Anfang Weiter

Aufruf:   find [PFAD...] [AUSDRUCK...]

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.

user@sonne> find /usr -maxdepth 3 -name "XF*"
/usr/X11R6/bin/XF86_Mach64
/usr/X11R6/bin/XF86Setup
/usr/X11R6/bin/XF86_VGA16
/usr/X11R6/bin/XFCom_Cyrix
/usr/X11R6/bin/XFCom_Matrox
/usr/X11R6/bin/XFCom_Trident

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:

# Um die nachfolgende Suche erfolgreich enden zu lassen, manipulieren wir mit Hilfe von "touch" die Zugriffszeiten einiger Dateien, anschließend suchen wir alle Dateien, auf die in der letzten Minute zugegriffen wurde
user@sonne> touch sax*; find . -amin 1
.
./saxsys.tgz
./sax_logo.gif
# Alle Dateien im Verzeichnis /tmp, die »user« gehören
user@sonne> find /tmp/ -user user 2>/dev/null
/tmp/kfm-cache-500
/tmp/kfm-cache-500/index.html
/tmp/kfm-cache-500/index.txt
/tmp/acout.1364.NHKnJh
/tmp/acin.1364.c36auh
# Dateien im Verzeichnis /usr mit 43 harten Links darauf
user@sonne> find /usr/ -links 43 2>/dev/null
/usr/include
/usr/share

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:

# Suche nach ausführbaren Dateien (keine Verzeichnisse), die »user« gehören
user@sonne> find . -maxdepth 1 \! -type d -a -perm +111 -a -user user
./.xinitrc
./.xsession
./dialog
./selfeditor.pl

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:

# Anzeige alle Dateien "-print", deren Name nicht mit einem Punkt beginnt
user@sonne> find . -path './.*' -prune -o -print
.
./nsmail
./iglinux.tgz
./linuxbuch

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:

# Suche nach leeren Dateien und zeige diese mittels "ls -l" an
user@sonne> find ./bsp/ -empty -exec ls -l \{\} \;
insgesamt 0
insgesamt 0
-rw-r--r--    1  user   users          0 Jun 16 09:30  ./bsp/lib/bla/file
-rw-r--r--    1  user   users          0 Jun 16 09:30  ./bsp/lib/foo/file

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!

locate - Dateien suchen Zurück Anfang Weiter

Aufruf:   locate [-d path] pattern...

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.

user@sonne> locate *atedb
/usr/bin/updatedb
/usr/lib/pgsql/bin/createdb
/var/lib/locatedb

ln - Dateien linken Zurück Anfang Weiter

Aufruf:   ln [OPTION]... TARGET [LINK_NAME]

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:

# Fester Link
user@sonne> ln /etc/XF86Config
# Symbolischer Link
user@sonne> ln -s /etc/lilo.conf
user@sonne> ls -l XF86Config lilo.conf
-rw-r--r--    2  root    root       3799 Jun  2 12:20  XF86Config
lrwxrwxrwx    1  user    users        14 Jun 16 15:34  lilo.conf -> /etc/lilo.conf

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").

ls - Verzeichnisinhalte auflisten Zurück Anfang Weiter

Aufruf:   ls [OPTION]... [DATEI]...

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.

# Dateien im Verzeichnis /usr/doc/howto
user@sonne> ls /usr/doc/howto/
de   en
# Dateien in /etc, die ein X im Namen enthalten
user@sonne> ls /etc/*X*
/etc/XF86Config  /etc/XF86Config.vm

/etc/X11:
wmconfig

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.

user@sonne> ls -d /etc/*X*
/etc/X11  /etc/XF86Config  /etc/XF86Config.vm

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:

user@sonne> ls -l /boot/v*
-rw-r--r--    1  root    root      716916  Dec 14 1999  /boot/vmlinuz
-rw-r--r--    1  root    root      667293  Nov 19 1999  /boot/vmlinuz.old

user@sonne> ls -i /boot/?y*
     16 /boot/System.map

user@sonne> ls --color
desktop.gif
filesystem.gif


user@sonne> ls -I 'gif'

user@sonne> ls -F /dev/ | head -5

3dfx
:0@
:1@
:2@
:3@

lpc - Druckerstatus abfragen Zurück Anfang Weiter

Aufruf:   lpc [command [argument ...]]

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.

user@sonne> lpc
lpc> status
ascii:
        queuing is enabled
        printing is enabled
        no entries
        no daemon present
lp:
        queuing is enabled
        printing is enabled
        2 entries in spool area
        no daemon present
raw:
        queuing is enabled
        printing is enabled
        no entries
        no daemon present
lpc> help
Commands may be abbreviated.  Commands are:

abort   enable  disable help    restart status  topq    ?
clean   exit    down    quit    start   stop    up
lpc> abort lp
?Privileged command
lpc> exit
user@sonne>

Neben dem Beenden und Aufruf der Hilfe steht dem Benutzer nur status zur Anzeige der Warteschlangeneigenschaften zur Verfügung.

lpr - Dateien ausdrucken Zurück Anfang Weiter

Aufruf:   lpr [-Pprinter] [-#num] [-C class] [-J job] [-T title] [-U user] [-i [numcols]] [-1234 font] [-wnum] [-cdfghlnmprstv] [name ...]

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.

# Default-Drucker
user@sonne> lpr beispiel.txt
# Drucker mit dem Namen »remotelp«
user@sonne> lpr -Premotelp beispiel.txt

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 - Druckauftrag löschen Zurück Anfang Weiter

Aufruf:   lprm [-Pprinter] [-] [job # ...] [user ...]

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:

user@sonne> lpq
lp is ready and printing
Rank   Owner      Job  Files                            Total Size
active user       14   beispiel.txt                    146 bytes
1st    user       15   beispiel.txt                     146 bytes
user@sonne> lprm 14
dfA014sonne dequeued
cfA014sonne dequeued
user@sonne> lpq
lp is ready and printing
Rank   Owner      Job  Files                            Total Size
1st    user       15   beispiel.txt                     146 bytes

lpq - Aufträge in der Druckerwarteschlange auflisten Zurück Anfang Weiter

Aufruf:   lpq [-l] [-Pprinter] [job # ...] [user ...]

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:

user@sonne> lpq
no entries
user@sonne> lpr beispiel.txt; lpq
lp is ready and printing
Rank   Owner      Job  Files                            Total Size
1st    user       15   beispiel.txt                     146 bytes

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.

user@sonne> lpq
no entires
user@sonne> lpr -T "Ein anderer Titel" beispiel.txt; lpq -Plp -l
lp is ready and printing

user: active                             [job 014sonne]
        beispiel.txt                      146 bytes
user: 1st                                 [job 015sonne]
        beispiel.txt                      146 bytes

mkdir - Verzeichnis erstellen Zurück Anfang Weiter

Aufruf:   mkdir [OPTION] DIRECTORY...

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.

# Einfaches Erzeugen eines neuen Verzeichnisses:
user@sonne> mkdir ~/testdir
# Mit anderen Rechten als den durch umask vorgegebenen:
user@sonne> mkdir -m 777 ~/testdir
# Falls übergeordnetes Verzeichnis nicht existiert, soll es angelegt werden:
user@sonne> mkdir -p ~/parent/child/testdir

mv - Dateien umbenennen oder verschieben Zurück Anfang Weiter

Aufruf:   mv [OPTION]... QUELLE ZIEL

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:

# Einfaches Umbenennen (Ziel ist eine Datei)
user@sonne> mv foo bla
# Einfaches Verschieben (Ziel ist ein existierendes Verzeichnis)
user@sonne> mv bla /tmp
# Umbenennen und Verschieben (Ziel ist eine Datei in einem existierenden Verzeichnis)
user@sonne> mv /tmp/bla ~/foo

pwd - Name des aktuellen Arbeitsverzeichnisses ausgeben Zurück Anfang Weiter

Aufruf:   pwd [OPTION]

Das Kommando gibt den vollständigen Namen des aktuellen Verzeichnisses aus. Einzige Optionen sind --help und --version.

user@sonne> cd /usr/X11R6/bin
user@sonne> pwd
/usr/X11R6/bin

rm - Datei löschen Zurück Anfang Weiter

Aufruf:   rm [OPTION]... DATEI...

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).

user@sonne> ls -l foo
-r--r--r--    1  user     users          0  Jun 17 10:05  foo
user@sonne> rm foo
rm: schreibgeschützte Datei »foo« entfernen? y

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:

user@sonne> rm -minus_name
rm: Ungültige Option -- »m«
Versuchen Sie ¯»rm --help« für weitere Informationen.
user@sonne> rm -- -minus_name

Das im letzten Absatz beschriebene Problem mit den Dateinamen kann bei fast allen Kommandos wie beschrieben gelöst werden.

rmdir - Verzeichnis löschen Zurück Anfang Weiter

Aufruf:   rmdir [OPTION]... DIRECTORY...

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.

user@sonne> rmdir Nicht_leeres_Verzeichnis
rmdir: Nicht_leeres_Verzeichnis: Das Verzeichnis ist nicht leer

user@sonne> rmdir dir/subdir/subsubdir
user@sonne> rmdir -p dir/subdir

whereis - Pfade zu Programmen und Manuals finden Zurück Anfang Weiter

Aufruf:   whereis [ -bmsu ] [ -BMS directory... -f ] filename ...

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.

user@sonne> whereis whereis
whereis: /usr/bin/whereis /usr/man/man1/whereis.1.gz

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.

user@sonne> whereis -s whereis
whereis:

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.

which - Vollständigen Pfad zu einem Programm ausgeben Zurück Anfang

Aufruf:    which progname ...

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.

user@sonne> which whereis
/usr/bin/whereis

user@sonne> which which
user@sonne> echo $?
0
user@sonne> which gibts_nicht
user@sonne> echo $?
1

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«.