![]() |
Vorlesung "UNIX"von Prof. Jürgen Plate |
:(Doppelpunkt)
Der Doppelpunkt ist das leere Kommando der Unix-Shell.
Es liefert immer "true" zurück und hat keine Wirkung. Es werden jedoch
alle Shell-Ersetzungen der nach dem Doppelpunkt angegebenen Kommandos durchgeführt.
Es eignet sich daher auch zum Testen von Shell-Skripts.
Symbolischer Modus: = Bereich Operand Berechtigung
Bereich | u Eigentümer (user)
g Gruppe (group) o Übrige Benutzer (others) keine Angabe = ugo |
Operand | + Recht hinzufügen
- Recht wegnehmen = Recht absolut setzen |
Berechtigung | r Read
w Write x eXecute s UID/GID (je nachdem, ob u+s oder g+s) t Sticky Bit (ohne Angabe von ugo) |
Beispiele:
chmod +x | Ausführungsrecht für alle hinzufügen |
chmod go-w dat2 | Schreibrecht nur noch für User |
chmod g+rwx dat3 | Volle Rechte für Gruppe |
chmod ugo-rwx dat4 | Allen alle Rechte entziehen |
chmod +t verz1 | Sticky-Bit von verz1 setzen |
chmod u+s admintool | SUID-Bit setzen |
Direktmodus: Modus = Oktalzahl (3 - 4 Stellen)
Für user, group und others wird jeweils eine Oktalzahl angegeben, welche
die jeweiligen Rechte wiedergibt. Dabei gilt folgende Wertigkeit:
read | 4 |
write | 2 |
execute | 1 |
Falls die Zugriffsrechte SUID (4), SGID (2) und STICKY (1) vergeben werden sollen, kommt vorne noch eine vierte Stelle hinzu. Die Anwendung dieses Modus zeigen die folgenden Beispiele:
User | Group | Others | ||
chmod 754 dat1 | rwx | r-x | r-- | |
chmod 740 dat2 | rwx | r-- | --- | |
chmod 440 wichtig | r-- | r-- | --- | |
chmod 000 geheim | --- | --- | --- | |
chmod 4711 systool | rws | --x | --x |
umask 022 | 7 7 7 - 0 2 2 = 7 5 5 |
rwx r-x r-x |
umask 027 | 7 7 7 - 0 2 7 = 7 5 0 |
rwx r-x --- |
umask 177 | 7 7 7 - 0 7 7 = 6 0 0 |
rwx --- --- |
-e | $-Zeichen am Ende der Zeile ausgeben |
-s | (silent) Keine Fehlermeldung bei nicht existierenden Dateien |
-t | Tabulatoren als "^I" ausgeben |
-v | Nicht druckbare Zeichen als "^Z" ausgeben, wobei Z der ASCII-Wert des Zeichens + 64 ist (SOH = ^A, usw.) |
-u | ungepufferte Ausgabe |
Beispiele:
cat dat1 | gibt dat1 auf dem Bildschirm aus |
cat dat1 dat2 > dat3 | kopiert dat1+dat2 auf dat3 |
-f | verhindert eine Nachfrage des Kommandos, falls die Datei schreibgeschützt ist. |
-s | erzeugt ein "Symbolisches Link". Hier wird eine Datei angelegt, die einen Verweis auf ihr Link enthält (Dateityp 'l'). Solche Links werden hauptsächlich für Verzeichnisse verwendet, sie wirken auch über die Grenzen von Dateisystemen hinweg. |
Beispiele:
ln /usr/bin/ls /home/meier/bin/dir
ln -s /home/local /usr/local
-i | interaktiv: vor dem Löschen wird nachgefragt, ob die Datei gelöscht werden soll. Antwort "y" oder "n". |
-f | Löschen ohne Nachfrage bei schreibgeschützten Dateien |
-r | rekursives Löschen; es werden auch alle Dateien in daruterliegenden Verzeichnissen gelöscht (Diese Option ist gefährlich, wenn man nicht aufpasst!). |
-c | Es wird eine Kopie im lp-Verzeichnis angelegt (kein Link) |
-n# | Es werden # Kopien ausgedruckt (z.B. -n4 für 4 Kopien) -w Nach Beendigung des Druckauftrags wird eine Meldung ans Terminal geschickt (wie bei write). Hat sich der Benutzer abgemeldet, erfolgt die Meldung per mail-Kommando. |
>-w | w Nach Beendigung des Druckauftrags wird eine Meldung ans Terminal geschickt (wie bei write). Hat sich der Benutzer abgemeldet, erfolgt die Meldung per mail-Kommando. |
-m | Nach Beendigung des Druckauftrags Benachrichtigung des Benutzer per mail-Kommando. |
-s | Die Ausgabe der Auftragsnummer durch lp wird unterdrückt. |
-d DRUCKER | Explizite Angabe eines Druckers DRUCKER, falls sich mehrere Drucker im System befinden. |
Beispiel: Ausgabe der Dateien vorles.kap1 und vorles.kap2 auf dem Drucker, Da die Datei weiter bearbeitet werden soll, wird eine Kopie erzeugt. Die Nachricht über Druckende soll per mail erfolgen:
lp -cm vorles.kap1 vorles.kap2
lpr Dateiliste
BSD-Style Printer Spooler.
Analog zu dem lp-Programm unter System V gibt es bei BSD das Programm lpr, um Dateien
über den Spooler auszudrucken. Ohne weitere Optionen wird die Datei wieder zum
Standarddrucker geschickt, z. B. : lpr text
Möchte man explizit angeben, auf welchem Drucker der Ausdruck erfolgen soll, verwendet
man bei BSD die Option - P. Auch hier folgt direkt hinter dem "P" der Druckername,
z. B.: lpr -Plaserjet3 text
Auch unter BSD gibt es meist das Programm lpstat, um sich mit der Option -s die
angeschlossenen Drucker anzeigen zu lassen. Falls das nicht geht, kann man sich die
Datei /etc/printcap mit more anschauen. In dieser Datei sind alle angeschlossenen
Drucker mit allen für den Drucker-Spooler wichtigen Einstellungen eingetragen. Abgesehen
von den Namen, unter denen ein Drucker ansprechbar sein soll, und der Zuordnung zu einer
bestimmten Schnittstelle, d. h. also einer Gerätedatei /dev/lp?, können hier auch
Filterprogramme und Optionen für den Ausdruck angegeben werden. Die Einstellungen kann
allerdings nur der Systemverwalter ändern.
Das mehrmalige Ausdrucken einer Datei erreicht man mit -# gefolgt von der Zahl der
gewünschten Kopien. Wenn das UNIX-System nach erfolgtem Ausdruck eine entsprechende
Bestätigung als Mail schicken soll, steht dafür die Option -m zur Verfügung.
Anders als bei System V kopiert das lpr-Programm unter BSD standardmäßig die
auszudruckenden Dateien immer automatisch in den Pufferbereich des Drucker-Spoolers.
Sollen nur Verweise angelegt werden, muß man die Option -s bei lpr angeben. Das ist
vor allem dann sinnvoll, wenn eine Druckdatei sehr groß ist.
laserjet3 is ready and printing Rank Owner Job Files Total Size active markus 3 bericht.ps 41984 bytes lst plate 17 brief 3213 bytesMit der Option - Plaserjet3 wird im Beispiel die Ausgabe von lpq auf den Laserdrucker eingeschränkt.
date mmddhhmmyy (Monat, Tag, Stunde, Minute, Jahr)
z. B.: date 10091245 (9.10., 12 Uhr 45)
Über den Parameter +format ("+"-Zeichen beachten!) kann die Ausgabe nach eigenen Wünschen gestaltet werden. Die Ausgabeformatierung erfolgt gemäß den Konventionen der Programmiersprache C (printf). Als Parameter werden verwendet:
%m: Monat (1 - 12) | %D: Datum im Format mm/dd/yy |
%d: Tag (1 - 31) | %H: Stunde |
%y: Jahr (00 - 99) | %M: Minute |
%n: neue Zeile | %S: Sekunde |
%w: Wochentag (0-6) | %T: Zeit im Format HH:MM:SS |
%a: Wochentag (Sun-Sat) | %h: Monat (Jan-Dec) |
Beispiel: Datum und Uhrzeit zweizeilig:
date '+Datum: %w, %d.%m.%y%nUhrzeit: %T'
Erstellungs- und Zugriffszeit/Datum von Dateien werden intern in Sekunden ab dem
Offiziellen Geburtstag von UNIX, dem 1.1.1970, 0 Uhr UTC, gespeichert. Vor einiger
Zeit habe ich mal das UNIX-Verfallsdatum ausgerechnet:
Auf 32-bit-Systemen wird time_t genau 2038-01-19 03:14:08 UTC ueberlaufen,
d. h. dieses Datum hat die gleiche Darstellung wie 1970-01-01 00:00:00 UTC
= (time_t) 0.
-t | Gesamtkapazität wird mit angegeben |
-f | Die Angabe über i-nodes entfällt |
-k | Angabe in KByte statt in Blöcken |
df /dev/dsk/0s1 | Daten über einen bestimmte Platte | |
df -f /usr | freie Blöcke des Dateisystems, das unter /usr eingehängt ist. |
-a | (Voreinstellung) Daten für jede Datei ausgeben |
-r | Dateien melden, für die kein Leserecht existiert |
-s | Nur die Summe der belegten Blöcke ausgeben |
-k | Angabe in KByte statt in Blöcken |
du -a dat1 | Größe der Datei dat1 ausgeben |
du -s /bin | Summe der belegten Blöcke im Verzeichnis /bin |
du -s /usr/* | ausprobieren |
-f Dateiname | Die zu durchsuchenden Dateinamen stehen nicht in der Kommandozeile, sondern in der angegebenen Datei. |
-m Dateiname | Die Unterscheidungskriterieen stehen nicht in /etc/magic, sondern in der angegebenen Datei. |
find Pfadname(n) Bedingung(en) Aktion(en)
Bei den nachfolgenden Optionen (= Bedingungen) steht das N für eine
Zahlenangabe (ganze Zahl). Das Vorzeichen dieser Zahl bestimmt die
Bedingung:
-name Dateiname
Suche nach bestimmten Dateien (bei Verwendung von Metazeichen
wie "*" oder "?" den Namen unbedingt in '..' einschließen).
-type T
Suche nach einem bestimmten Dateityp T:
f: normale Datei
d: Directory
b: Block Device
c: Character Device
p: Named Pipe
-perm onum
Suche nach Dateien mit den durch die Oktalzahl onum angegebenen Zugriffsrechten.
Steht ein "-"-Zeichen vor onum, werden nicht alle, sondern nur die spezifizierten
Rechte geprüft (z. B. Test SUID: -perm -4000).
-links N
Suche nach Dateien mit einer bestimmten Anzahl N von Links
-user Kennung
Suche nach Dateien eines bestimmten Users; es kann der
Login-Name oder die UID angegeben werden.
-group Kennung
Wie -user, jedoch für Gruppen
-size N
Suche nach Dateien mit N Blöcken
-mount
Suche nur auf dem aktuellen Datenträger (wichtig, falls weiter Platten über
NFS eingebunden sind).
-newer Dateiname
Suche nach Dateien, die jünger sind, als die angegebene.
-exec Kommando
Ausführen eines Kommandos. Wird innerhalb des Kommandos die leere geschweifte Klammer
{} aufgeführt, so wird anstelle der geschweiften Klammern der jeweils
gefunden absolute Pfad der Datei eingesetzt. Das per -exec aufgerufene Kommando wird
immer mit einem geschützten Strichpunt (\; oder ";" oder ';') abgeschlossen.
-ok Kommando
Wie -exec, jedoch mit Sicherheitsabfrage.
find -user markus -print
Suche alle Dateien von User markus.
find .-name dat1 -print
Suchen nach allen Vorkommen der Datei dat1 ab dem aktuellen Verzeichnis.
find .-print -name dat1
Gibt alle Dateinamen ab dem aktuellen Verzeichnis aus. Vorsicht Falle:
da die Bedingungen von links nach rechts ausgewertet werden und -print immer wahr
ist, hat der Teil -name dat1 keine Wirkung.
find . -name '*.bak' -exec rm {} \;
Suche alle .bak-Dateien ab dem aktuellen Verzeichnis und lösche sie.
find /usr -size +2000 -print
Gib alle Dateien der Benutzer mit mehr als 2000 Blöcken aus
(z. B. um die Platzverschwender zu mahnen).
find . -name '*.bak' -ok rm {} \;
Suche alle .bak-Dateien ab dem aktuellen Verzeichnis und lösche
sie nur, wenn die Nachfrage mit "y" beantwortet wurde.
find / -user markus -exec rm {} \;
Lösche alle Dateien von User markus, wo auch immer sie stehen.
find . -name 'buch.kap*' -exec lpr {} \;
Drucke alle Dateien eines Buch-Manuskripts. Verwendet man xargs,
sieht das Kommando so aus:
find . -name 'buch.kap*' -print | xargs lpr
Beispiel: ps -efIn jeder Zeile werden folgende Informationen ausgegeben:
Anmerkung: Bei Linux erreicht man Ähnliches mit ps aux (schlimmstenfalls muss man "man ps" eingeben).
Beim Programmieren keimt recht schnell der Wunsch auf, den Bildschirm anzusteuern, z. B. den Bildschirm zu löschen, den Cursor zu positionieren etc. Es existieren verschiedene Möglichkeiten, dies zu realisieren. In den frühen Jahre von UNIX gab es zahlreiche Anbiter von Bildschirmterminals und jeds dieser Terminals wurde mit anderen Kombinationen von ASCII-Zeichen angesteuert. Selbst unter MS-DOS wurde diese Tradition noch gepflegt - in Form des ANSI-Treibers.
Welche Möglichkeiten der Bildschirmansteuerung gibt es? Ein Terminal reagiert normalerweise auf Zeichenfolgen, die vom Programm aus geschickt werden. Normale Zeichen werden als Buchstaben dargestellt, bestimmte Sonder- zeichen oder Kombinationen bewirken aber bestimmte Funktionen. Da diese Kombinationen meist bestimmte Sonderzeichen enthalten (z.B. ESCAPE), um sie von Text zu unterscheiden, werden die Steuerfolgen auch Escape-Sequenzen genannt. Wenn man nun z. B. den Bildschirm löschen möchte, dann sucht man sich im Manual des Terminals die entsprechende Sequenz für "Bildschirm löschen" heraus und schickt sie vom Programm aus an das Terminal. Weil es auch nichtdruckbare Zeichen sein können, kann es sein, daß man ihre oktale oder sedezimale Verschlüsselung angeben muß. Dazu ein Beispiel:
Bei einem VT100-Terminal ist die Sequenz für "Bildschirm löschen" die Zeichenfolge
Man schickt das beispielsweise aus einem C-Programm heraus mit printf("\033[;H\033[2J") ans Terminal. Dabei ist "\033" die oktale Schreibweise für das Escape-Zeichen.
Bei bildschirmorientierten Programmen wie z. B. einem Editor muß es möglich sein, den Cursor auf dem Bildschirm frei hin und her bewegen zu können. Das geht nicht ohne weiteres, weil die Terminals dafür spezielle Steuercodes, meist ESC gefolgt von einer bestimmten Zeichenkette, erwarten. Auch Fett- oder Kursivschrift lassen sich oft über solche Steuersequenzen ein- bzw. ausschalten. Andere Funktionen sind z. B. das Löschen des gesamten Bildschirms oder bis zum Ende der Zeile. Leider sind die Steuersequenzen für die einzelnen Funktionen nicht einheitlich. Auch haben die vielen verschieden Terminals unterschiedliche Möglichkeiten.
Deshalb gibt es eine Datenbank, in der, bei BSD-UNIX in der Datei etc/termcap im Textformat und bei System V in kompilierter Form in einer Reihe von Dateien unter dem Verzeichnis /usr/lib/terminfo, die Steuersequenzen zur Bildschirmansteuerung bei verschiedenen Terminaltypen gespeichert sind. Die Termcap und Terminfo-Datenbanken sind im wesentlichen äquivalent zueinander. Der Vorteil der Termcap-Variante ist die leichte Lesbarkeit und Änderbarkeit. Dafür kann auf die kompilierte Terminfo-Datenbank schneller zugegriffen werden.
Der Termcap-Eintrag für das oft verwendete VT100-Terminal von DEC sieht z. B. folgendermaßen aus:
vtlO0|vt100-am|vt100am|dec vt100:\ :do=^J:co#80:]i#24:c1=50\1[;H\E[2J:sf=5\ED:\ :le=^H:bs:am:ce5\E[%i%d:%dH:nd=2\EEC:up=2\E[A:\ :ce=3\E[K:cd=50\E[J:so=2\E[7m:se=2\E[m:us=2\E[4m:ue=2\E[m:\ :md=2\E[lm:mr=2\E[7m:mb=2\E[5m:me=2\E[m:is=\E[1;24r\E[24;IH:\ :rf=/usr/share/lib/tabset/vt100:\ :rs=\E>\E[?31\E[?41\E[?51\E[?7h\E[?8h:ks=\E[?lh\E=:ke=\E[?11\E>:\ :ku=\EOA:kd=\EOB:kr=\EOC:kl=\EOD:kb=^H:\ :ho=\E[H:kl=\EOP:k2=\EOO:k3=\EOR:k4=\EOS:pt:sr=5\EM:vt#3:xn:\ :sc=\E7:rc=\E8:cs=\E[%i%d;%dr:
In der ersten Zeile stehen die Namen, unter denen dieser Termcap-Eintrag angesprochen werden kann. Danach folgen durch Doppelpunkte getrennt die zur Verfügung stehenden Funktionen und entsprechenden Steuersequenzen. Die Steuercodes, um den Cursor auf den Bildschirm bewegen, findet man beispielsweise in den ersten beiden Zeilen. do = ^J bedeutet, daß der Cursor mit CTRL-J eine Zeile nach unten, und up=2\E[A, daß er mit ESC-[A eine Zeile nach oben bewegt wird. Kombinationen mit der Control-Taste werden also in der Form ^x angegeben, wobei x ein beliebiger Buchstabe sein kann. \E ist die Umschreibung für das Escape-Zeichen. Die Zahl 2 hinter dem Gleichheitszeichen bei der Angabe der Steuersequenz für die Bewegung des Cursors nach oben hat eine besondere Bedeutung. Grundsätzlich kann bei jeder Funktion an dieser Stelle eine Wartezeit in Millisekunden angegeben werden, die nach dem Abschicken der Steuersequenz verstreichen muß, bis der UNIX-Rechner weitere Zeichen an das Terminal schicken darf. Das ist notwendig, weil die Terminals für die Verarbeitung eines Steuercodes eine bestimmte Zeit brauchen, in der alle ankommenden Zeichen im - meist sehr kleinen - internen Puffer zwischengespeichert werden müssen, bis die Verarbeitung der Steuersequenz beendet ist. Bei einer schnellen Leitung zwischen Terminal und Computer kann es so zum Verlust von Zeichen kommen, weil der interne Puffer schnell überlaufen würde, wenn das Terminal beispielsweise damit beschäftigt ist, den Bildschirminhalt zu löschen. Dieses Warten nach dem Abschicken einer Steuersequenz an das Terminal nennt man englisch Padding.
Andere Angaben in dem Termcap-Eintrag sind die Zeilen- und Spaltenzahl des Terminals in der zweiten Zeile mit den Kürzeln co#80 bzw. li#24. Sollte man tatsächlich einmal in die Verlegenheit kommen, einen Termcap-Eintrag verändern oder gar neu schreiben zu müssen, findet man weitere Informationen in den man-pages oder in weiterführender Literatur.
Auch in Programmen werden symbolische Bezeichnungen für die Terminalfunktionen verwendet, die in den entsprechenden Headerdateien der C-Bibliothek festgelegt sind. Zur Änderung der Werte in ttydefs/gettydefs dient das Kommando stty, zur Steuerung der Ausgabe kann das Kommando tput verwendet werden.
Curses geht dabei folgendermaßen vor: es gibt einen virtuellen Bildschirm im Hauptspeicher. Ausgaben werden nun zuerst in diesem internen Speicherbereich aufgebaut. Und erst beim Aufruf der Funktion refresh() werden alle seit dem letzten refresh() angefallenen Aenderungen an den realen Bildschirm geschickt. Zusätzlich ist es möglich, den Bildschirm in Bereiche (Windows, hat aber nichts mit X Windows zu tun) einzuteilen und diese getrennt zu bearbeiten. Am Anfang gibt es für den gesamten zur Verfügung stehenden Bildschirm das vordefinierte Window stdscr.
Wie sieht ein curses-Programm aus? Hier ein Beispielprogramm, das in der Mitte des Bildschirms den String "Hello, world!" invers ausgibt.
#includeint main(void) { char *text = "Hello, world!"; initscr(); /* Curses-Paket initialisieren */ clear(); /* Bildschirm löschen */ move(LINES/2-1,(COLS-strlen(text))/2-1); /* Cursor zur richtigen Position */ /* LINES und COLS sind vordefiniert */ standout(); /* schalte auf Invers */ printw("%s\n",text); /* gib den Text aus */ standend(); /* wieder auf normal */ refresh(); /* reale Ausgabe */ endwin(); /* Ende Curses-Nutzung */ return 0; }
Die Verwendung von Bibliotheken wie termcap oder curses hat natürlich Auswirkungen auf die Portabilität des Programms. Schon verschiedene Unix-Systeme haben verschiedene Curses-Bibliotheken.
stty erase ^h
Setzen der Backspace-Funktion (in diesem Fall Control-H).
Bei direkter Eingabe kann man die entsprechende Taste direkt betätigen
(Steuertasten werden als zwei Zeichen "geechot", Backspace z. B. als "^h").
Bei Eingabe in Skripts mit dem vi kann man mit Ctrl-D erreichen, daß
das folgende Zeichen unverändert übernommen wird. Manche Shells
aktzeptieren auch die Kombination aus zwei Zeichen, "^" + Buchstabe.
stty eb
Einschalten der akustischen Fehleranzeige (error bell).
stty echo stty -echo
Echo auf dem Bildschirm ein- und ausschalten. Bei der folgenden Kommandosequenz
wird die Eingabe des Paßworts auf dem Bildschirm nicht wiedergegeben.
echo "Paßwort eingeben: \c"
stty -echo
read PASS
stty echo
bel | Signalton |
blink | Text auf Blinken schalten |
bold | Text heller darstellen (hohe intensität) |
clear | Bildschirm löschen,Cursor in die linke obere Ecke |
cr | Carriage Return |
cup | Cursor positionieren. Hinter cup folgen Zeilennummer und Spaltennummer der Cursorposition, z. B. cup 10 40 |
ed | Bildschirm von Cursorposition bis Ende löschen |
el | Von Cursorposition bis Zeilenende löschen |
home | Cursor in linke obere Ecke |
ind | Schirm nach oben rollen |
rev | Text aud Inversdarstellung schalten |
ri | Schirm nach unten rollen rmso Wieder auf normale Zeichendarstellung schalten |
Beispiel:
tput bel tput bold echo "\nAchtung! Alle Daten werden gelöscht!\n" tput rmso
$ Is *.txt | xargs echo Textdateien:
Hier erzeugt ls eine Liste aller Dateien mit der Endung .txt im aktuellen Verzeichnis. Das Ergebnis wird über die Pipe an xargs weitergereicht. xargs ruft echo mit den Dateinamen von ls als zusätzliche Parameter auf. Der Output ist dann:
Textdateien: kap1.txt kap2.txt kap3.txt h.txt
Durch Optionen ist es möglich, die Art der Umwandlung der Eingabe in Argumente durch xargs zu beeinflussen. Mit der Option -n <Nummer> wird eingestellt, mit wievielen Parametern das angegebene Programm aufgerufen werden soll. Fehlt der Parameter, nimmt xargs die maximal mögliche Zahl von Parametern. Je nach Anzahl der Parameter ruft xargs das angegebene Programm einmal oder mehrmal auf. Dazu ein Beispiel. Vergleich einer Reihe von Dateien nacheinander mit einer vorgegebenen Datei:
ls *.dat | xargs -n1 cmp compare Muster
Die Vergleichsdatei "Muster" wird der Reihe nach mitels cmp mit allen Dateien verglichen,
die auf ".dat" enden. Die Option -n1 veranlaßt xargs, je Aufruf immer nur einen Dateinamen
als zusätzliches Argument bei cmp anzufügen.
Mit der Option - i <Zeichen> ist es möglich, an einer beliebigen Stelle im Programmaufruf,
auch mehrmals, anzugeben, wo die eingelesenen Argumente einzusetzen sind. In diesem Modus
liest xargs jeweils ein Argument aus der Standardeingabe, ersetzt im Programmaufruf jedes
Vorkommen des hinter - i angegebenen Zeichens durch dieses Argument und startet das Programm.
In dem folgenden Beispiel wird das benutzt, um alle Dateien mit der Endung ".txt" in
".bak" umzubenennen.
ls *.txt | cut -d. f1 | xargs -iP mv P.txt P.bak
Das Ganze funktioniert allerdings nur, wenn die Dateien nicht noch weitere Punkte im Dateinamen haben.
-l | Zähle Zeilen |
-w | Zähle Worte |
-c | Zähle Zeichen |
+n | Beginne bei Seite n der Dateien (Default: 1) |
-h Kopf | Definiere Seitenüberschrift (Default: Dateiname) |
-f | Verwende beim Seitenwechsel das Formfeed-Zeichen anstelle von Leerzeichen |
-t | Kopf- und Fußzeilen unterdrücken |
-F | Zu lange Zeilen nicht abschneiden sondern umbrechen |
-w# | Zeilenbreite festlegen (Default: 72) |
-o# | ü führende Leerzeichen vor jede Zeile setzen |
-l# | Seitenlänge festlegen (Default: 66). Davon gehen ab 5 Zeilen für Header und 2 Zeilen für Seiten-Nummer am Ende der Seite. |
tr : . < foo Ersetzt ":" durch ".".
tr abc def < foo Ersetzt "a" durch "d", "b" durch "e" und "c" durch "f".
tr a-z A-Z < foo Ersetzt Kleinbuchstaben durch Großbuchstaben.
Leider unterscheiden sich die Versionen von tr auf System V und BSD-UNIX-Varianten etwas, was die Verarbeitung dieser Zeichenfolgen anbetrifft. Bei System V müssen die Bereichs- und Wiederholungsangaben in eckigen Mammern eingeschlossen sein. Bei BSD gibt es nur Bereichsangaben, allerdings ohne Klammern. Dafür wird das letzte Zeichen der zweiten Zeichenfolge bei der ESD-Variante automatisch so oft wiederholt, bis die zweite Zeichenfolge genauso lang ist wie die erste.
-cSpalten | Die angegebenen Spalten werden herausgenommen, dabei sind mehrere Zahlenangaben, getrennt durch Kommata möglich, ebenso Bereiche, z.B. 5-9. |
-c-10,15,20,30- | 1. bis 10. Spalte, Spalte 15, Spalte 20 und alles ab Spalte 30 |
-fFelder | Angaben von Feldern durch die Feldnummern analog -c. Als Feldtrenner ist das Tabzeichen vorgegeben. |
-dZeichen | Vorgabe des Feldtrenners. Das Zeichen wird als Feldtrenner verwendet. z. B. -c: |
-s | Zeilen, in denen der Feldtrenner vorkommt, nicht ausgeben (Voreinstellung: Zeile ausgeben) |
basename /home/plate/dings.c | dings.c |
basename /home/plate/dings | dings |
basename $0 | Programmname |
real | Insgesamt verbrauchte Zeit (elapsed time) |
user | Im User-Modus verbrauchte Zeit |
sys | Im System-Modus verbrauchte Zeit (Systemdienste) |
-Zahl | Anzahl der Zeilen, die ausgegeben werden sollen |
-f Datei | Liest aus der Datei statt aus /var/adm/wtmpx |
namen | Benutzer- oder Terminalnamen |
![]() |
![]() |