Montag, 30. September 2013
Python Kommandozeilenparameter
Kommandozeile (unter Linux/Unix)
Gleich zur Kommandozeilenbearbeitung mit PythonViele Aufgaben lassen sich auch wesentlich schneller auf der Kommandozeile erledigen als mit der grafischen Oberfläche (Click-Click-Drag usw). Ein paar Beispiele (Shell bedeutet hier Kommandozeile):
Suche alle .c Dateien, die neuer sind als Makefile.
| Shell... | find . -name ' *.c' -newer Makefile -print |
| GUI... | Öffne den Explorer, navigiere zum entsprechenden Verzeichnis, Klicke auf die Datei Makefile und merke das Änderungsdatum bzw. Zeit.
Dann Starte Tools/Find und gib *.c als Suchkriterium ein. Wähle den Datumsreiter und gib das gemerkte Datum ein. Klicke OK. |
Erzeuge an zip/tar-Archiv meines Sourcecodes (C-Code).
| Shell... | zip archive.zip *.h *.c oder
tar cvf archive.tar *.h *.c |
| GUI... | Öffne ein ZIP-Werkzeug (z.B. WinZip), wähle "Neues Archiv", gib den Namen ein, wähle das (Quell-)Verzeichnis im Hinzufügen Dialog, setze den Filter auf *.c und klicke "Hinzufügen", dann setze einen weiteren Filter auf *.h und klicke "Hinzufügen" und schließe das Archiv wieder. |
Ein letztes Beispiel:
Welche Java-Dateien wurden letzte Woche geändert?
| Shell... | find . -name '*.java' -mtime +7 -print |
| GUI... | Klicke und navigiere zu "Suche Dateien", klicke auf "Name" und gib "*.java" ein, wähle "Datum letzte Änderung" und klicke auf "Beginndatum", gib das Startdatum des Projekts ein (wann war das, verd**** noch mal?). Weiters klicke auf "Endedatum" und gib das Datum von vor einer Woche ein (schau mal schnell auf einen Kalender...). Klicke "Suche". |
Befehls-Syntax
Unix (Linux) Befehle haben folgende einheitliche Struktur. Bis auf den Befehlsnamen (Programmname) sind grundsätzlich alle anderen Angaben optional.Befehlsname [Option...] [Argument...] [Ein-/Ausgabeumlenkung]Die eckigen Klammern deuten an, dass dieser Parameter optional ist. Die drei Punkte geben zusätzlich an, dass mehrere solcher Parameter möglich sind.
Optionen sind syntaktisch von anderen Argumenten unterscheidbar: sie beginnen mit einem Minus, haben einen Buchstaben und danach optional ein Argument für diese Option
-x [Argument]oder sie beginnen mit zwei Minus und einem Optionsnamen sowie dem optionalen Argument.
--Optionsname [Argument]
Befehlsargumente sind Dateinamen oder andere für den Befehl wichtige Informationen.
Normalerweise lesen Unix-Programme Eingaben vom Terminal und geben Ausgaben auf das Terminal aus. Diese Datenkanäle können durch Ein-Ausgabeumlenkung geändert werden. Diese Umleitungen unterscheiden sich ebenfalls von den Optionen und anderen Argumenten (< Eingabedatei, > Ausgabedatei und | für die Pipe).
- <
- Das Kommando liest von der angegebenen Datei (statt von der Tastatur).
- >
- Das Kommando schreibt in die angegebene Datei (statt auf das Terminal).
- |
- Die Ausgabe des Kommandos links vom | wird als Eingabe für das Kommando rechts vom | verwendet. Die Kommandos sind über eine Pipe (Leitung, Rohrleitung) verbunden.
hh@knuth:~$ cd workspace hh@knuth:~/workspace$ ls c2bf demo eclimd.log guidemo libbf programmierblog python python3 python-sum pythontest pythonX scm-demo _SCRIPTS_ unit-tests hh@knuth:~/workspace$ cd c2bf hh@knuth:~/workspace/c2bf$ ls 1tox cc GPL ld Makefile math README strip test.sh wrapper hh@knuth:~/workspace/c2bf$ cd cc hh@knuth:~/workspace/c2bf/cc$ ls ast.h c2bf-cc c2bf-dispast dispast.c dispast.o genbf genbf.h genbfmain.c genbfmain.o gram.o gram.y main.c main.o Makefile README.txt scan.l scan.o tests y.output y.tab.h hh@knuth:~/workspace/c2bf/cc$ ls *.c *.h ast.h dispast.c genbf.h genbfmain.c main.c y.tab.h hh@knuth:~/workspace/c2bf/cc$ ls -l *.c *.h -rw-rw-r-- 1 hh hh 21061 Aug 31 21:40 ast.h -rw-rw-r-- 1 hh hh 30503 Aug 31 21:40 dispast.c -rw-rw-r-- 1 hh hh 6627 Aug 31 21:40 genbf.h -rw-rw-r-- 1 hh hh 953 Aug 31 21:40 genbfmain.c -rw-rw-r-- 1 hh hh 917 Aug 31 21:40 main.c -rw-rw-r-- 1 hh hh 7631 Aug 31 21:45 y.tab.h hh@knuth:~/workspace/c2bf/cc$ cd hh@knuth:~$
Kommandozeilenparameter mit Python bearbeiten
Das (Standard-) Modulsys ermöglicht es von Python auf die Umgebung, in der Python läuft, zuzugreifen. In unserem Fall wenden wir uns der Kommandozeile zu.
#!/usr/bin/python3
import sys
print("commandline:")
for arg in sys.argv:
print(arg)
hh@knuth:/tmp$ vim cmd.py
hh@knuth:/tmp$ cat cmd.py
#!/usr/bin/python3
import sys
print("commandline:")
for arg in sys.argv:
print(arg)
hh@knuth:/tmp$ python3 cmd.py -o --option par1 par2
commandline:
cmd.py
-o
--option
par1
par2
hh@knuth:/tmp$ chmod +x cmd.py
hh@knuth:/tmp$ ./cmd.py -o --option par1 par2
commandline:
./cmd.py
-o
--option
par1
par2
hh@knuth:/tmp$
#!/usr/bin/python3dient dazu, dem Betriebssystem zu sagen, mit welchem Programm diese (Text-) Datei zu starten ist, wenn man sie mit
chmod +x file ausführbar gemacht hat.
Sie sehen, dass alle Parameter nach
python3 ausgegeben werden. Ist die Pythondatei ausführbar, bekommt man die (fast) dieselbe Ausgabe (./ vor einem Kommando bedeutet, dass dieses Kommando im aktuellen Verzeichnis und nicht im Pfad zu finden ist).
hh@knuth:/tmp$ python3 Python 3.2.3 (default, Sep 10 2012, 18:14:40) [GCC 4.6.3] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> import sys >>> type(sys.argv) <class 'list'> >>>
sys.argv ist eine Liste, die alle Kommandozeilenparameter inklusive des Scriptnamens enthält. Das Pythonprogramm muss die Argumente entsprechend behandeln: Optionen erkennen, Argumente verwenden. Nur die Ein-/Ausgabeumlenkung braucht man nicht im Programm behandeln (solange man nur die Standardkanäle verwendet).
hh@knuth:/tmp$ ./cmd.py -o --option par1 par2 > outputfile hh@knuth:/tmp$ cat outputfile commandline: ./cmd.py -o --option par1 par2 hh@knuth:/tmp$
outfile "verschwindet" die Ausgabe in dieser Datei.
Ein einfaches Beispiel, das den "Typ" der Argumente ausgibt:
import sys
def info(progname):
"""print some information"""
print(str.format("""
usage:
{0} [-h] [parameter...]
prints type of parameters
Options:
-h ... this help
(c) 2012 Harald R. Haberstroh
""", progname))
if __name__ == '__main__':
if "-h" in sys.argv:
info(sys.argv[0])
else:
for arg in sys.argv:
if arg.isdigit():
print("number", arg)
elif arg.isalpha():
print("word", arg)
else:
print("string", arg)
hh@knuth:/tmp$ python3 cmdline.py 123 Harald '+$' -h
usage:
cmdline.py [-h] [parameter...]
prints type of parameters
Options:
-h ... this help
(c) 2012 Harald R. Haberstroh
hh@knuth:/tmp$ python3 cmdline.py 123 Harald '+$'
string cmdline.py
number 123
word Harald
string +$
hh@knuth:/tmp$
Nach der Ausgabe der Hilfe (Info) soll das Programm beendet werden. Damit kann man wie im obigen Beispiel einfach
-h an die Kommandozeile anhängen.
In der Hilfe/Info muss auch immer der Programmname wie im Beispiel ausgegeben werden (
sys.argv[0])!
Donnerstag, 19. September 2013
Linux, Bash (POS1: 2BHIF)
Eine Shell ist nun ein Anwendungsprogramm, welches Eingaben vom Benutzer in geeignete Betriebssystemaufrufe umsetzt und ggf. andere Programme aufruft (d.h. das Betriebssystem mit einem bestimmten Aufruf das Programm starten lässt).

Auch andere Betriebssysteme haben zur Bedienung Shells: Unter Windows gibt es
CMD.EXE.Die
bash ist ein Interpreter mit einer vollständigen Programmiersprache. Es können damit
on-the-flykleine Programme mit Schleifen, Abfragen etc. erstellt werden, ohne dass man einen Editor dazu bemühen muss.
Da die Eingabe über die Tastatur speziell bei langen Pfadnamen (255 Zeichen für einen Dateinamen!) sehr mühsam und fehleranfällig ist, bietet die bash einige nützliche Features:
Ergänzung der Kommandozeile
Kommandos oder Pfade brauchen nicht vollständig eingetippt werden. Meist genügen wenige Buchstaben, die dann durch Drücken der TasteTAB (Tabulator) auf den richtigen Pfad (das richtige Kommando) ergänzt werden. Falls der Pfad nicht eindeutig ergänzt werden kann, werden alle Möglichkeiten durch neuerliches Drücken von TAB angezeigt. Pfade werden immer zum nächsten Directory ergänzt oder zumindest soweit sie eindeutig sind.
History
Die letzten Befehle können mit den Cursor-Tasten ausgewählt und editiert werden.Mit
!! wird der letzte Befehl ausgeführt, mit !-2 wird der vorletzte mit !-3 der vorvorletzte usw. ausgeführt. Mit !15 wird der 15. Befehl ausgeführt.Mit
!string wird der letzte Befehl, der mit string begonnen hat, ausgeführt.Mit
!?string? wird der letzte Befehl, der string enthält ausgeführt.Mit
string1^string2 wird das letzte Kommando ausgeführt, wobei string1 durch string2ersetzt wird.Der Befehl
history zeigt eine Liste der letzten Kommandos (mit deren Nummer) an.Durch Drücken von
^r (Strg+R) kommt man in den Kommando-Suchmmodus, d.h. es wird das letzte Kommando angezeigt, welches die im folgenden getippten Buchstaben enthält. Mit weiteren ^r kommt man zum nächsten Befehl, der die Buchstaben enthält. Mit Enter wird der Befehl ausgeführt, mit den Links- und Rechts-Pfeiltasten kann der gewählte Befehl editiert werden.Weiteres siehe unter
man bash.
Beispiele ($ stellt den Prompt dar, alles hinter # gilt als Kommentar):
$ vim Telegramme.c # editieren $ gcc -o telegramme Telegramme.c # compilieren $ telegramme # ausführen $ !v # Wiederholung von vim $ !gc # neuerliches compilieren $ !t # Aufruf von telegramme
Job-Control
Ein laufendes Programm kann mit^z (Strg-Z) unterbrochen werden. Danach kann mit der bash weitergearbeitet werden. mit dem Befehl fg kann das letzte unterbrochene Programm wieder fortgesetzt werden.Es können auch mehrere Programme unterbrochen werden (z.B.
vim wird unterbrochen, man fprintf aufgerufen, dieses Kommando wird unterbrochen usw.). Die unterbrochenen Programme können mit jobs aufgelistet werden. Ein bestimmtes gestopptes (unterbrochenes) Programm mit der Job-Nummer 2 kann mit fg %2 wieder in den Vordergrundgebracht werden.
Mit diesen Möglichkeiten kann leicht zwischen mehreren Programmen hin- und hergeschaltet werden.
Programme, die vermutlich länger ohne Eingaben vom Benutzer laufen werden, können durch Anhängen von
& als Hintergrundprozesse gestartet werden. Ein Hintergrundprozess kann ebenfalls mit fg wieder in den Vordergrund gebracht werden.Beispiel: es sollen alle C-Files gesucht werden und die Namen (Pfade) in einer Liste gespeichert werden ($ ist der Prompt, wird also nicht eingegeben):
$ find / -name '*.c' -print > c-files.txt & [1] 3751 # Job-Nummer und Prozess-ID wird angezeigt $ vim Telegramme.c [1]+ Done find . -name '*.c' -print >c-files.txt # Benachrichtigung, dass Kommando fertig $ less c-files.txt # Anzeigen des FilesObiges Kommando könnte mittels
kill %1 oder kill 3751 (kill und Prozess-ID) vorzeitig abgebrochen werden.Programme im
Vordergrundkönnen mit
^c (Strg+C) abgebrochen werden.Befehlssyntax
Generell sind Unix-Kommandos wie folgt aufgebaut:$ cmd [optionen] [argument]...Die eckigen Klammern
[ ] zeigen an, dass dieser Teil optional ist. Die drei Punkte ...bedeuten, dass der Teil davor mehrfach vorhanden sein kann.Prinzipiell können immer mehrere Parameter angegeben werden. Optionen beginnen immer mit einem Minus (
-) und werden von einem Buchstaben gefolgt. Mehrere Optionen können zusammengefasst werden. z.B. ls -a -l kann auch als ls -al eingegeben werden.Viele (neuere, GNU-) Programme erlauben auch
langeOptionen, d.h. ganze Wörter zur Bezeichnung einer Option. Solche Optionen beginnen mit zwei Minus (
–). Das Kommando findist hier eine Ausnahme (s.o.).Beispiel:
ls -l und ls –format=long geben beide den Inhalt des Verzeichnisses im langen Format aus.Generell sind Wildcards und reguläre Ausdrücke als Argumente möglich (die Shell erweitert reguläre Ausdrücke auf Listen von Parametern, d.h. das Kommando wird dann mit einer Liste aller passenden Files aufgerufen).
Wildcards
Wildcards sind Ersetzungsmuster, die von der Shell ersetzt werden. Wenn Sie z.B. alle Dateien auflisten wollen, die mit einem'a' beginnen, dann geben Sie echo a* ein. Es werden dann Dateien der Art a, a1, abc, alloc.c aufgelistet, falls sie existieren. Der '*' steht fürkein, ein oder mehrere beliebige Zeichen. Wenn Sie Dateien suchen, die ein 'z' enthalten, dann geben Sie echo *z* ein. Tatsächlich ändert aber die Shell die Parameterliste für den Befehl echo, d.h. die Shell erzeugt eine Liste von Dateinamen, auf die das Muster zutrifft und ruft dann erst echo auf.Nehmen Sie an, das aktuelle Verzeichnis enthielte folgende Dateien:
a.c zahlen.c anz.c anz.h anz hello.c a.outWenn Sie nun
echo *z*eingeben, erzeugt die Shell folgenden Aufruf
echo zahlen.c anz.c anz.hund führt den Befehl aus.
echo braucht sich nicht darum zu kümmern!Die Shell versteht noch andere Musterangaben. Beispielsweise:
[aeiou]* | alle Dateien, die mit einem Selbstlaut beginnen |
[0-9a-h]* | alle Dateien, die mit 0 bis 9 oder a bis h beginnen |
?? | alle Dateien, die aus genau 2 Zeichen bestehen (? steht für ein Zeichen) |
*.[^ch] | alle Dateien, die nicht mit .c oder .h enden |
\* | alle Dateien, die einen Stern enthalten |
man bash.Abkürzungen
Tilde~~/ ist eine Abkürzung für das Home-Verzeichnis des angemeldeten Benutzers (meist/home/user, wenn user der Loginname).~user/ ist die Abkürzung für das Homeverzeichnis des Users user.aliasMit dem Befehl
alias können selbst Abkürzungen zu längeren Befehlen gemacht werden:alias md="mkdir" | md ist nun eine Kurzversion von mkdir (MaKe DIRectory) |
.bashrc speichern..bashrc ist eine Datei, die automatisch beim Starten einer bash interpretiert (ausgeführt) wird.Der Befehl
alias ohne Argumente gibt die Liste der derzeit aktiven Abkürzungen aus.Shell-Variable
Da diebash eine vollständige Programmiersprache ist, gibt es natürlich auch Variable. Diese Variable werden nicht nur für die Programmierung eingesetzt sondern auch für die Konfiguration.Shell-Variable werden üblicherweise in Großbuchstaben geschrieben (Groß-/Kleinschreibung ist entscheidend).
Für die interaktive Verwendung wird normalerweise das Kommando
export verwendet:export PATH=~/bin:$PATHMit obigem Befehl wird der Suchpfad, das sind diejenigen Verzeichnisse, in denen ein Programm oder ein Kommando gespeichert ist, geändert. Es wird der Pfad
~/bin vorne angefügt. $PATH liefert den Inhalt der Variable PATH (es erfolgt reine Textersetzung).Einige Variable sind schon vordefiniert:
$HOME | Homeverzeichnis |
$SHELL | die verwendete Shell |
Ein-/Ausgabeumlenkung
Die Ausgabe von Kommandos kann mit dem Größerzeichen (>) in eine Datei umgelenkt werden. Z.B.:ls -l /usr/bin > ls.txtDie Datei
ls.txt wird erzeugt und die Ausgabe von ls darin gespeichert.Verwendet man zwei Größerzeichen (
>>), so wird die Ausgabe an die angegebene Datei angehängt.Umgekehrt kann auch die Eingabe für ein Programm aus einer Datei erfolgen, indem man das Kleinerzeichen verwendet:
grepDiese Varianten können kombiniert werden.^d<eingabedatei
kommando parameter… <eingabedatei>ausgabedateiOft werden Kommandos direkt kombiniert, indem die Ausgabe eines Programms direkt in die Eingabe des nächsten Programms
gepumptwird. Die Programme werden mit einer pipe(pipeline) verbunden. Das dafür nötige Zeichen ist der senkrechte Strich (
|):ls -l | grepObiger Befehl gibt alle Verzeichnisse aus, da^d
grep mit dem Parameter ^d
alle Zeilen, die mit einem 'd' beginnen, ausgibt.Es können beliebig viele Programme mit pipes verbunden werden, es entsteht dadurch eine richtige Verarbeitungskette. Ist die Ausgabe sehr lange, so könnte im obigen Beispiel noch
less verwendet werden, um in der Ausgabe blättern zu können.ls -l | grepAuf diese Weise lassen sich komplexe Aufgaben einfach und effizient erledigen.^d| less
Dabei ist zu beachten, dass die Shell hier einige Arbeit übernimmt: bei der Eingabeumlenkung öffnet die Shell die Datei zum Lesen und
tipptdie Zeilen ein. Bei der Ausgabeumlenkung öffnet die Shell die Datei zum Schreiben und verschiebt die Ausgabe in diese Datei. Die pipe kann man sich als temporäre Datei vorstellen, in die das eine Programm schreibt und aus der das nächste Programm liest, wenngleich der Mechanismus natürlich effizienter gelöst ist.
Wichtige Kommandos
Fast alle Befehle oder Programme erlauben die Option-h, -help (ein Minus) oder –help (zwei Minus) und geben dann eine Kurzhilfe aus.ls [optionen] [path]...Anzeigen des Inhalts von Verzeichnissen. Die wichtigsten Optionen sind:
-l um alle Informationen (langes Format) anzuzeigen, -a um alle Dateien anzuzeigen (auch die versteckten)cp src... destKopieren von Dateien. Hat
cp mehr als zwei Parameter, so muss der letzte Parameter ein Verzeichnis sein.Mit der Option
-r können rekursiv ganze Verzeichnisbäume kopiert werden.mv src... destUmbenennen/Verschieben von Dateien (move). Hat
mv mehr als zwei Parameter, so muss der letzte Parameter ein Verzeichnis sein.rm list...Löschen von Dateien (remove).
Mit der Option
-r können rekursiv ganze Verzeichnisbäume gelöscht werden (VORSICHT: rm -rf * löscht alles innerhalb und unterhalb des aktuellen Verzeichnises).mkdir list...Erstellen von Verzeichnissen.
cd [path]Wechsel in das angegebene Verzeichnis. Wird kein Parameter angegeben, so wird ins Home-Verzeichnis gewechselt.
rmdir list...Löschen von Verzeichnissen (nur leere Verzeichnisse).
cat [list...]Ausgeben der angegebenen Dateien (die angegebenen Dateien werden auf diese Weise verkettet, da sie unmittelbar hintereinander ausgegeben werden)
less [list...]Seitenweise Ausgabe der angegebenen Dateien
tar czf archiv.tgz list...Ein komprimiertes Archiv mit dem Namen
archiv.tgz aus den Dateien/Verzeichnissen list… erzeugentar xzf archiv.tgzDas Archiv wieder auspacken
tar tzf archiv.tgzDen Inhalt des Archivs ausgeben.
tar bietet noch viel mehr Optionen und Möglichkeiten und war ursprünglich ein Programm zur Datensicherung auf Bänder (tape archiver).file list...gibt die Dateitypen aus. Unter UNIX haben die Datei-Endungen nicht die Bedeutung wie unter Windows, oft kann die Endung beliebig gewählt werden. Das Programm
file öffnet nun die angegebenen Dateien und versucht aufgrund des Inhalts den Typ zu ermitteln.touch list...ändert die Zugriffszeit der angegebenen Dateien oder erzeugt diese, wenn sie nicht existieren (Dateien mit der Länge 0).
grep suchbegriff [list...]Sucht den Suchbegriff in den gegebenen Dateien oder Standardeingabe (Eintippen oder Eingabeumlenkung). Wenn nur der Dateiname gesucht ist, der den Suchbegriff enthält, dann ist die Option
-l anzugeben. Der Suchbegriff kann aus regulären Ausdrücken bestehen, wodurch man komplexe Suchmuster angeben kann. Zu beachten ist allerdings, dass viele Sonderzeichen für reguläre Ausdrücke, eine spezielle Bedeutung in der Shell haben. Sie müssen daher maskiert werden, z.B. mit vorangestelltem \ oder unter einfache Hochkomma ('). Mehr dazu unter man grep bzw. man bash.psProzessstatus, listet alle Prozesse auf, die in dieser Shell gestartet wurden.
ps axulistet alle Prozesse, aller User plus Zusatzinformationen auf. Die erste Spalte enthält den Usernamen, die zweite Spalte die Prozess-ID (PID) und die letzte Spalte den genauen Befehl.
kill [signal] pid...Schickt den angegebenen Prozessen das TERM-Signal (Terminieren). Die wichtigen Signale sind:
-TERM, -KILL (tötet den Prozess auf alle Fälle)killall [signal] name...Schickt den angegebenen Prozessen das TERM-Signal (Terminieren). Die Prozesse werden durch den Befehlsnamen name (aufgerufenes Kommando) ausgewählt.
Will man z.B. alle mozilla-Prozesse killen, gibt man
killall mozilla ein.sort [list...]gibt die Zeilen der angegebenen Dateien sortiert aus (bzw. die Zeilen der Standardeingabe).
uniq [eingabedatei] [ausgabedatei]löscht doppelte Zeilen aus einer sortierten Eingabe.
Fortgeschrittenes
Es gibt mehrere Möglichkeiten, aus der Ausgabe eines Programms Argumente für die Kommandozeile zu machen.- Backticks:
$ ls `echo $HOME`
Hier wird zunächst der Befehlecho $HOMEausgeführt und dessen Ausgabe wird zum Argument des Befehlsls(das Home-Verzeichnis wird aufgelistet). xargs
Das ist ein Programm, das von der Standardeingabe zeilenweise liest und jede Zeile als ein Kommandozeilenargument an dasxargsübergebene Programm übergibt. Obiges Beispiel kann man also auch so schreiben:
echo $HOME|xargs ls
Hilfe
UNIX-Systeme werden normalerweise mit ausführlicher Online-Dokumentation ausgeliefert. Die Standarddokumentation entspricht den gedruckten Handbüchern und ist in mehrere Abschnitte eingeteilt:1 Ausführbare Programme oder Shellbefehle
2 Systemaufrufe (Kernelfunktionen)
3 Bibliotheksaufrufe (Funktionen in System-Bibliotheken)
4 Spezielle Dateien (gewöhnlich in
/dev)5 Dateiformate und Konventionen, z. B.
/etc/passwd6 Spiele
7 Makropakete und Konventionen, z. B. man(7), groff(7)
8 Systemadministrationsbefehle (in der Regel nur für root)
9 Kernelroutinen [Nicht Standard]
n neu [veraltet]
l lokal [veraltet]
p öffentlich [veraltet]
o alt [veraltet]
Zu jedem Befehl (Thema) gibt es eine Seite (können auch mehrere Seiten sein) mit dem Namen des Befehls (Themas). Will man eine bestimmte Seite des Manuals lesen, so verwendet man den Befehl
man (manual):man [abschnitt] seiteWird abschnitt weggelassen, so zeigt
man die passende Seite mit der niedrigsten Abschnittsnummer an. Oft gibt es zu einem Thema in mehreren Abschnitten eine Seite. Dann muss der gewünschte Abschnitt angegeben werden.Beispiele:
man man | Hilfe zu man |
man bash | Hilfe zur bash |
man tar | Hilfe zu tar |
man printf | Hilfe zu printf der Shell |
man 3 printf | Meist will man aber Hilfe zur C-Funktion printf |
man -k schlüsselwort kann man nach Schlüsselworten suchen lassen. Die Ausgabe ist eine Liste der Befehle, auf die das Schlüsselwort zutrifft.apropos schlüsselwort sucht nach Schlüsselworten in der Indexdatenbank der Manualseiten.Für GNU-Programme hat sich die Dokumentation im info-Format eingebürgert:
info seite
Weitere Informationen
- Ubuntu Befehlsübersicht
- Einführung in die Bourne Again Shell (bash)
- Einführung in die Bourne Again Shell (bash) (pdf)
/bin/bash- Treffpunkt für Linux-Shelluser
Fragen
1. Was ist eine Shell?2. Geben Sie Beispiele verschiedener Shells!
3. Wie wird die Eingabe von langen Pfaden bei der bash erleichtert?
4. Welche Möglichkeiten gibt es frühere Befehle wieder zu verwenden? Nennen Sie 3 Arten!
5. Wie können in einer Shell mehrere Programme so gestartet werden, dass sie gleichzeitig laufen?
6. Wie funktioniert Job-Control? Was ist der Zweck?
7. Was sind Shell-Variable? Nennen Sie zwei Beispiele für die Verwendung!
8. Wie sieht die allgemeine Befehlssyntax aus?
9. Welche Bedeutung hat das Symbol
~ ?10. Was können Sie tun, damit Sie statt
ls das Kommandos dir verwenden können?11. Was müssen Sie tun, damit
dir auch beim nächsten Mal wieder funktioniert?12. Was können Sie tun, wenn ein Programm keine Dateien lesen/schreiben kann, Sie aber mit diesem Programm dennoch Dateien bearbeiten wollen?
13. Sie haben 3 Dateien
adr1, adr2 und adr3, welche Zeilen mit Namen und e-Mail-Adressen enthalten. Eine Zeile hat die Form name vorname email. Die Einträge sind nicht sortiert. Manche Namen kommen nur in einer Datei vor, andere in mehreren Dateien. Geben Sie die Kommandozeile an, die alle 3 Dateien verknüpft, sortiert, die doppelten Namen löscht und in die Datei adr ausgibt. Welcher Mechanismus muss hier verwendet werden?14. Sie haben ein Programm
myprog gestartet, welches hängen geblieben ist. Welche Möglichkeiten haben Sie, das Programm zu beenden?15. Sie wollen wissen, welche C- oder Java-Datei im aktuellen Verzeichnis die Funktion
longjmp enthält. Geben Sie das Kommando an! Was passiert hier genau?16. Sie wissen nicht genau, wie Befehl zum Archivieren/Zippen von Dateien heißt. Wie finden Sie die Information?
Sonntag, 23. September 2012
Python Kommandozeilenparameter
Kommandozeile (unter Linux/Unix)
Gleich zur Kommandozeilenbearbeitung mit PythonViele Aufgaben lassen sich auch wesentlich schneller auf der Kommandozeile erledigen als mit der grafischen Oberfläche (Click-Click-Drag usw). Ein paar Beispiele (Shell bedeutet hier Kommandozeile):
Suche alle .c Dateien, die neuer sind als Makefile.
| Shell... | find . -name ' *.c' -newer Makefile -print |
| GUI... | Öffne den Explorer, navigiere zum entsprechenden Verzeichnis, Klicke auf die Datei Makefile und merke das Änderungsdatum bzw. Zeit.
Dann Starte Tools/Find und gib *.c als Suchkriterium ein. Wähle den Datumsreiter und gib das gemerkte Datum ein. Klicke OK. |
Erzeuge an zip/tar-Archiv meines Sourcecodes (C-Code).
| Shell... | zip archive.zip *.h *.c oder
tar cvf archive.tar *.h *.c |
| GUI... | Öffne ein ZIP-Werkzeug (z.B. WinZip), wähle "Neues Archiv", gib den Namen ein, wähle das (Quell-)Verzeichnis im Hinzufügen Dialog, setze den Filter auf *.c und klicke "Hinzufügen", dann setze einen weiteren Filter auf *.h und klicke "Hinzufügen" und schließe das Archiv wieder. |
Ein letztes Beispiel:
Welche Java-Dateien wurden letzte Woche geändert?
| Shell... | find . -name '*.java' -mtime +7 -print |
| GUI... | Klicke und navigiere zu "Suche Dateien", klicke auf "Name" und gib "*.java" ein, wähle "Datum letzte Änderung" und klicke auf "Beginndatum", gib das Startdatum des Projekts ein (wann war das, verd**** noch mal?). Weiters klicke auf "Endedatum" und gib das Datum von vor einer Woche ein (schau mal schnell auf einen Kalender...). Klicke "Suche". |
Befehls-Syntax
Unix (Linux) Befehle haben folgende einheitliche Struktur. Bis auf den Befehlsnamen (Programmname) sind grundsätzlich alle anderen Angaben optional.Befehlsname [Option...] [Argument...] [Ein-/Ausgabeumlenkung]Die eckigen Klammern deuten an, dass dieser Parameter optional ist. Die drei Punkte geben zusätzlich an, dass mehrere solcher Parameter möglich sind.
Optionen sind syntaktisch von anderen Argumenten unterscheidbar: sie beginnen mit einem Minus, haben einen Buchstaben und danach optional ein Argument für diese Option
-x [Argument]oder sie beginnen mit zwei Minus und einem Optionsnamen sowie dem optionalen Argument.
--Optionsname [Argument]
Befehlsargumente sind Dateinamen oder andere für den Befehl wichtige Informationen.
Normalerweise lesen Unix-Programme Eingaben vom Terminal und geben Ausgaben auf das Terminal aus. Diese Datenkanäle können durch Ein-Ausgabeumlenkung geändert werden. Diese Umleitungen unterscheiden sich ebenfalls von den Optionen und anderen Argumenten (< Eingabedatei, > Ausgabedatei und | für die Pipe).
- <
- Das Kommando liest von der angegebenen Datei (statt von der Tastatur).
- >
- Das Kommando schreibt in die angegebene Datei (statt auf das Terminal).
- |
- Die Ausgabe des Kommandos links vom | wird als Eingabe für das Kommando rechts vom | verwendet. Die Kommandos sind über eine Pipe (Leitung, Rohrleitung) verbunden.
hh@knuth:~$ cd workspace hh@knuth:~/workspace$ ls c2bf demo eclimd.log guidemo libbf programmierblog python python3 python-sum pythontest pythonX scm-demo _SCRIPTS_ unit-tests hh@knuth:~/workspace$ cd c2bf hh@knuth:~/workspace/c2bf$ ls 1tox cc GPL ld Makefile math README strip test.sh wrapper hh@knuth:~/workspace/c2bf$ cd cc hh@knuth:~/workspace/c2bf/cc$ ls ast.h c2bf-cc c2bf-dispast dispast.c dispast.o genbf genbf.h genbfmain.c genbfmain.o gram.o gram.y main.c main.o Makefile README.txt scan.l scan.o tests y.output y.tab.h hh@knuth:~/workspace/c2bf/cc$ ls *.c *.h ast.h dispast.c genbf.h genbfmain.c main.c y.tab.h hh@knuth:~/workspace/c2bf/cc$ ls -l *.c *.h -rw-rw-r-- 1 hh hh 21061 Aug 31 21:40 ast.h -rw-rw-r-- 1 hh hh 30503 Aug 31 21:40 dispast.c -rw-rw-r-- 1 hh hh 6627 Aug 31 21:40 genbf.h -rw-rw-r-- 1 hh hh 953 Aug 31 21:40 genbfmain.c -rw-rw-r-- 1 hh hh 917 Aug 31 21:40 main.c -rw-rw-r-- 1 hh hh 7631 Aug 31 21:45 y.tab.h hh@knuth:~/workspace/c2bf/cc$ cd hh@knuth:~$
Kommandozeilenparameter mit Python bearbeiten
Das (Standard-) Modulsys ermöglicht es von Python auf die Umgebung, in der Python läuft, zuzugreifen. In unserem Fall wenden wir uns der Kommandozeile zu.
#!/usr/bin/python3
import sys
print("commandline:")
for arg in sys.argv:
print(arg)
hh@knuth:/tmp$ vim cmd.py
hh@knuth:/tmp$ cat cmd.py
#!/usr/bin/python3
import sys
print("commandline:")
for arg in sys.argv:
print(arg)
hh@knuth:/tmp$ python3 cmd.py -o --option par1 par2
commandline:
cmd.py
-o
--option
par1
par2
hh@knuth:/tmp$ chmod +x cmd.py
hh@knuth:/tmp$ ./cmd.py -o --option par1 par2
commandline:
./cmd.py
-o
--option
par1
par2
hh@knuth:/tmp$
#!/usr/bin/python3dient dazu, dem Betriebssystem zu sagen, mit welchem Programm diese (Text-) Datei zu starten ist, wenn man sie mit
chmod +x file ausführbar gemacht hat.
Sie sehen, dass alle Parameter nach
python3 ausgegeben werden. Ist die Pythondatei ausführbar, bekommt man die (fast) dieselbe Ausgabe (./ vor einem Kommando bedeutet, dass dieses Kommando im aktuellen Verzeichnis und nicht im Pfad zu finden ist).
hh@knuth:/tmp$ python3 Python 3.2.3 (default, Sep 10 2012, 18:14:40) [GCC 4.6.3] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> import sys >>> type(sys.argv) <class 'list'> >>>
sys.argv ist eine Liste, die alle Kommandozeilenparameter inklusive des Scriptnamens enthält. Das Pythonprogramm muss die Argumente entsprechend behandeln: Optionen erkennen, Argumente verwenden. Nur die Ein-/Ausgabeumlenkung braucht man nicht im Programm behandeln (solange man nur die Standardkanäle verwendet).
hh@knuth:/tmp$ ./cmd.py -o --option par1 par2 > outputfile hh@knuth:/tmp$ cat outputfile commandline: ./cmd.py -o --option par1 par2 hh@knuth:/tmp$
outfile "verschwindet" die Ausgabe in dieser Datei.
Ein einfaches Beispiel, das den "Typ" der Argumente ausgibt:
import sys
def info(progname):
"""print some information"""
print(str.format("""
usage:
{0} [-h] [parameter...]
prints type of parameters
Options:
-h ... this help
(c) 2012 Harald R. Haberstroh
""", progname))
if __name__ == '__main__':
if "-h" in sys.argv:
info(sys.argv[0])
else:
for arg in sys.argv:
if arg.isdigit():
print("number", arg)
elif arg.isalpha():
print("word", arg)
else:
print("string", arg)
hh@knuth:/tmp$ python3 cmdline.py 123 Harald '+$' -h
usage:
cmdline.py [-h] [parameter...]
prints type of parameters
Options:
-h ... this help
(c) 2012 Harald R. Haberstroh
hh@knuth:/tmp$ python3 cmdline.py 123 Harald '+$'
string cmdline.py
number 123
word Harald
string +$
hh@knuth:/tmp$
Nach der Ausgabe der Hilfe (Info) soll das Programm beendet werden. Damit kann man wie im obigen Beispiel einfach
-h an die Kommandozeile anhängen.
In der Hilfe/Info muss auch immer der Programmname wie im Beispiel ausgegeben werden (
sys.argv[0])!
Donnerstag, 29. September 2011
vim Übung
Legen Sie eine Datei mit ihren Initialen und Extension .txt an
Bsp:
rr.txt
Einfügen von 5 Zeilen mit beliebigem Text
Einfügen von als eigene Zeile nach der 4. Zeile Asterix
Positionieren auf 3. Zeile
Am Ende der Zeile das wort einfügenxyyz
Kopieren der 3. Zeile
Einfügen dieser Zeile 85 mal nach der 5. Zeile
Suchen nach String rix
Schalten Sie die Zeilennummerierung ein
Gehe zu Zeile 70
Lösche 10 Zeilen
Kopiere Zeilen 13-45 in eine neue Datei mit Namen 'partrr.txt'
Alle Zeichen 'y' durch '§' ersetzen
Einfügen der Zeilen 5-10 aus der Datei 'partrr.txt' nach der letzten Zeile
Labels: Aufgabe, Linux, POS1-2, vim
vim Einführung
Bearbeiten Sie auch die Übungsbeispiele vim - Übung und vim - Übung 2.
Vim ist ein hervorragender Editor mit Syntaxhervorhebung und Vergleichsfunktionen, mehreren Darstellungsfenstern und vielen anderen nützlichen Funktionen. Leider ist der Einstieg damit nicht immer ganz leicht, da vim eine Weiterentwicklung des Editors vi ist, den es bereits in den 80er Jahren gab, wo Benutzerfreundlichkeit noch eine andere Bedeutung hatte als heute. Weiterhin erscheint vim im unkonfigurierten Zustand zunächst erstmal sehr langweilig und es ist mühselig eine passende Konfiguration zu erstellen.
Der vi ist praktisch auf jedem Linux-System verfügbar und kann von der Shell (Terminal) aus verwendet werden. Daher ist es praktisch, wenn man den vi(m) beherrscht, wenn man einen Server (z.B. Web-Server) über das Internet warten muss. Die wichtigsten Funkionen kann man probieren und üben mit vimtutor
Weitere Dokumentation finden Sie hier:
vim Kurzreferenz auf LinWiKi
vim Homepage www.vim.org
vim Quick Reference Card (2 Seiten)
Wir verwenden eine spezielle Konfigurationsdatei für den vim. Im Laufe dieses Schuljahres werden wir Ihnen diese Datei (eigentlich eine überarbeitete Version, denn die bisherige Version ist hauptsächlich für C-Programmierung eingerichtet) zur Verfügung stellen. Also, bleiben Sie dran oder suchen Sie auf www.vim.org/scripts nach passenden Scripts für den vim.
Labels: Aufgabe, Linux, POS1-2, vim
Bash (Shell) (POS1: 2B)
Eine Shell ist nun ein Anwendungsprogramm, welches Eingaben vom Benutzer in geeignete Betriebssystemaufrufe umsetzt und ggf. andere Programme aufruft (d.h. das Betriebssystem mit einem bestimmten Aufruf das Programm starten lässt).

Auch andere Betriebssysteme haben zur Bedienung Shells: Unter Windows NT/2000/XP gibt es
CMD.EXE.Die
bash ist ein Interpreter mit einer vollständigen Programmiersprache. Es können damit
on-the-flykleine Programme mit Schleifen, Abfragen etc. erstellt werden, ohne dass man einen Editor dazu bemühen muss.
Da die Eingabe über die Tastatur speziell bei langen Pfadnamen (255 Zeichen für einen Dateinamen!) sehr mühsam und fehleranfällig ist, bietet die bash einige nützliche Features (einige dieser Features gibt es erstmals auch in der Shell von Windows XP):
Ergänzung der Kommandozeile
Kommandos oder Pfade brauchen nicht vollständig eingetippt werden. Meist genügen wenige Buchstaben, die dann durch Drücken der TasteTAB (Tabulator) auf den richtigen Pfad (das richtige Kommando) ergänzt werden. Falls der Pfad nicht eindeutig ergänzt werden kann, werden alle Möglichkeiten durch neuerliches Drücken von TAB angezeigt. Pfade werden immer zum nächsten Directory ergänzt oder zumindest soweit sie eindeutig sind.
History
Die letzten Befehle können mit den Cursor-Tasten ausgewählt und editiert werden.Mit
!! wird der letzte Befehl ausgeführt, mit !-2 wird der vorletzte mit !-3 der vorvorletzte usw. ausgeführt. Mit !15 wird der 15. Befehl ausgeführt.Mit
!string wird der letzte Befehl, der mit string begonnen hat, ausgeführt.Mit
!?string? wird der letzte Befehl, der string enthält ausgeführt.Mit
string1^string2 wird das letzte Kommando ausgeführt, wobei string1 durch string2ersetzt wird.Der Befehl
history zeigt eine Liste der letzten Kommandos (mit deren Nummer) an.Durch Drücken von
^r (Strg+R) kommt man in den Kommando-Suchmmodus, d.h. es wird das letzte Kommando angezeigt, welches die im folgenden getippten Buchstaben enthält. Mit weiteren ^r kommt man zum nächsten Befehl, der die Buchstaben enthält. Mit Enter wird der Befehl ausgeführt, mit den Links- und Rechts-Pfeiltasten kann der gewählte Befehl editiert werden.Weiteres siehe unter
man bash.
Beispiele ($ stellt den Prompt dar, alles hinter # gilt als Kommentar):
$ vim Telegramme.c # editieren $ gcc -o telegramme Telegramme.c # compilieren $ telegramme # ausführen $ !v # Wiederholung von vim $ !gc # neuerliches compilieren $ !t # Aufruf von telegramme
Job-Control
Ein laufendes Programm kann mit^z (Strg-Z) unterbrochen werden. Danach kann mit der bash weitergearbeitet werden. mit dem Befehl fg kann das letzte unterbrochene Programm wieder fortgesetzt werden.Es können auch mehrere Programme unterbrochen werden (z.B.
vim wird unterbrochen, man fprintf aufgerufen, dieses Kommando wird unterbrochen usw.). Die unterbrochenen Programme können mit jobs aufgelistet werden. Ein bestimmtes gestopptes (unterbrochenes) Programm mit der Job-Nummer 2 kann mit fg %2 wieder in den Vordergrundgebracht werden.
Mit diesen Möglichkeiten kann leicht zwischen mehreren Programmen hin- und hergeschaltet werden.
Programme, die vermutlich länger ohne Eingaben vom Benutzer laufen werden, können durch Anhängen von
& als Hintergrundprozesse gestartet werden. Ein Hintergrundprozess kann ebenfalls mit fg wieder in den Vordergrund gebracht werden.Beispiel: es sollen alle C-Files gesucht werden und die Namen (Pfade) in einer Liste gespeichert werden ($ ist der Prompt, wird also nicht eingegeben):
$ find / -name '*.c' -print > c-files.txt & [1] 3751 # Job-Nummer und Prozess-ID wird angezeigt $ vim Telegramme.c [1]+ Done find . -name '*.c' -print >c-files.txt # Benachrichtigung, dass Kommando fertig $ less c-files.txt # Anzeigen des FilesObiges Kommando könnte mittels
kill %1 oder kill 3751 (kill und Prozess-ID) vorzeitig abgebrochen werden.Programme im
Vordergrundkönnen mit
^c (Strg+C) abgebrochen werden.Befehlssyntax
Generell sind Unix-Kommandos wie folgt aufgebaut:$ cmd [optionen] [argument]...Die eckigen Klammern
[ ] zeigen an, dass dieser Teil optional ist. Die drei Punkte ...bedeuten, dass der Teil davor mehrfach vorhanden sein kann.Prinzipiell können immer mehrere Parameter angegeben werden. Optionen beginnen immer mit einem Minus (
-) und werden von einem Buchstaben gefolgt. Mehrere Optionen können zusammengefasst werden. z.B. ls -a -l kann auch als ls -al eingegeben werden.Viele (neuere, GNU-) Programme erlauben auch
langeOptionen, d.h. ganze Wörter zur Bezeichnung einer Option. Solche Optionen beginnen mit zwei Minus (
–). Das Kommando findist hier eine Ausnahme (s.o.).Beispiel:
ls -l und ls –format=long geben beide den Inhalt des Verzeichnisses im langen Format aus.Generell sind Wildcards und reguläre Ausdrücke als Argumente möglich (die Shell erweitert reguläre Ausdrücke auf Listen von Parametern, d.h. das Kommando wird dann mit einer Liste aller passenden Files aufgerufen).
Wildcards
Wildcards sind Ersetzungsmuster, die von der Shell ersetzt werden. Wenn Sie z.B. alle Dateien auflisten wollen, die mit einem'a' beginnen, dann geben Sie echo a* ein. Es werden dann Dateien der Art a, a1, abc, alloc.c aufgelistet, falls sie existieren. Der '*' steht fürkein, ein oder mehrere beliebige Zeichen. Wenn Sie Dateien suchen, die ein 'z' enthalten, dann geben Sie echo *z* ein. Tatsächlich ändert aber die Shell die Parameterliste für den Befehl echo, d.h. die Shell erzeugt eine Liste von Dateinamen, auf die das Muster zutrifft und ruft dann erst echo auf.Nehmen Sie an, das aktuelle Verzeichnis enthielte folgende Dateien:
a.c zahlen.c anz.c anz.h anz hello.c a.outWenn Sie nun
echo *z*eingeben, erzeugt die Shell folgenden Aufruf
echo zahlen.c anz.c anz.hund führt den Befehl aus.
echo braucht sich nicht darum zu kümmern!Die Shell versteht noch andere Musterangaben. Beispielsweise:
[aeiou]* | alle Dateien, die mit einem Selbstlaut beginnen |
[0-9a-h]* | alle Dateien, die mit 0 bis 9 oder a bis h beginnen |
?? | alle Dateien, die aus genau 2 Zeichen bestehen (? steht für ein Zeichen) |
*.[^ch] | alle Dateien, die nicht mit .c oder .h enden |
\* | alle Dateien, die einen Stern enthalten |
man bash.Abkürzungen
Tilde~~/ ist eine Abkürzung für das Home-Verzeichnis des angemeldeten Benutzers (meist/home/user, wenn user der Loginname).~user/ ist die Abkürzung für das Homeverzeichnis des Users user.aliasMit dem Befehl
alias können selbst Abkürzungen zu längeren Befehlen gemacht werden:alias md="mkdir" | md ist nun eine Kurzversion von mkdir (MaKe DIRectory) |
.bashrc speichern..bashrc ist eine Datei, die automatisch beim Starten einer bash interpretiert (ausgeführt) wird.Der Befehl
alias ohne Argumente gibt die Liste der derzeit aktiven Abkürzungen aus.Shell-Variable
Da diebash eine vollständige Programmiersprache ist, gibt es natürlich auch Variable. Diese Variable werden nicht nur für die Programmierung eingesetzt sondern auch für die Konfiguration.Shell-Variable werden üblicherweise in Großbuchstaben geschrieben (Groß-/Kleinschreibung ist entscheidend).
Für die interaktive Verwendung wird normalerweise das Kommando
export verwendet:export PATH=~/bin:$PATHMit obigem Befehl wird der Suchpfad, das sind diejenigen Verzeichnisse, in denen ein Programm oder ein Kommando gespeichert ist, geändert. Es wird der Pfad
~/bin vorne angefügt. $PATH liefert den Inhalt der Variable PATH (es erfolgt reine Textersetzung).Einige Variable sind schon vordefiniert:
$HOME | Homeverzeichnis |
$SHELL | die verwendete Shell |
Ein-/Ausgabeumlenkung
Die Ausgabe von Kommandos kann mit dem Größerzeichen (>) in eine Datei umgelenkt werden. Z.B.:ls -l /usr/bin > ls.txtDie Datei
ls.txt wird erzeugt und die Ausgabe von ls darin gespeichert.Verwendet man zwei Größerzeichen (
>>), so wird die Ausgabe an die angegebene Datei angehängt.Umgekehrt kann auch die Eingabe für ein Programm aus einer Datei erfolgen, indem man das Kleinerzeichen verwendet:
grepDiese Varianten können kombiniert werden.^d<eingabedatei
kommando parameter… <eingabedatei>ausgabedateiOft werden Kommandos direkt kombiniert, indem die Ausgabe eines Programms direkt in die Eingabe des nächsten Programms
gepumptwird. Die Programme werden mit einer pipe(pipeline) verbunden. Das dafür nötige Zeichen ist der senkrechte Strich (
|):ls -l | grepObiger Befehl gibt alle Verzeichnisse aus, da^d
grep mit dem Parameter ^d
alle Zeilen, die mit einem 'd' beginnen, ausgibt.Es können beliebig viele Programme mit pipes verbunden werden, es entsteht dadurch eine richtige Verarbeitungskette. Ist die Ausgabe sehr lange, so könnte im obigen Beispiel noch
less verwendet werden, um in der Ausgabe blättern zu können.ls -l | grepAuf diese Weise lassen sich komplexe Aufgaben einfach und effizient erledigen.^d| less
Dabei ist zu beachten, dass die Shell hier einige Arbeit übernimmt: bei der Eingabeumlenkung öffnet die Shell die Datei zum Lesen und
tipptdie Zeilen ein. Bei der Ausgabeumlenkung öffnet die Shell die Datei zum Schreiben und verschiebt die Ausgabe in diese Datei. Die pipe kann man sich als temporäre Datei vorstellen, in die das eine Programm schreibt und aus der das nächste Programm liest, wenngleich der Mechanismus natürlich effizienter gelöst ist.
Wichtige Kommandos
Fast alle Befehle oder Programme erlauben die Option-h, -help (ein Minus) oder –help (zwei Minus) und geben dann eine Kurzhilfe aus.ls [optionen] [path]...Anzeigen des Inhalts von Verzeichnissen. Die wichtigsten Optionen sind:
-l um alle Informationen (langes Format) anzuzeigen, -a um alle Dateien anzuzeigen (auch die versteckten)cp src... destKopieren von Dateien. Hat
cp mehr als zwei Parameter, so muss der letzte Parameter ein Verzeichnis sein.Mit der Option
-r können rekursiv ganze Verzeichnisbäume kopiert werden.mv src... destUmbenennen/Verschieben von Dateien (move). Hat
mv mehr als zwei Parameter, so muss der letzte Parameter ein Verzeichnis sein.rm list...Löschen von Dateien (remove).
Mit der Option
-r können rekursiv ganze Verzeichnisbäume gelöscht werden (VORSICHT: rm -rf * löscht alles innerhalb und unterhalb des aktuellen Verzeichnises).mkdir list...Erstellen von Verzeichnissen.
cd [path]Wechsel in das angegebene Verzeichnis. Wird kein Parameter angegeben, so wird ins Home-Verzeichnis gewechselt.
rmdir list...Löschen von Verzeichnissen (nur leere Verzeichnisse).
cat [list...]Ausgeben der angegebenen Dateien (die angegebenen Dateien werden auf diese Weise verkettet, da sie unmittelbar hintereinander ausgegeben werden)
less [list...]Seitenweise Ausgabe der angegebenen Dateien
tar czf archiv.tgz list...Ein komprimiertes Archiv mit dem Namen
archiv.tgz aus den Dateien/Verzeichnissen list… erzeugentar xzf archiv.tgzDas Archiv wieder auspacken
tar tzf archiv.tgzDen Inhalt des Archivs ausgeben.
tar bietet noch viel mehr Optionen und Möglichkeiten und war ursprünglich ein Programm zur Datensicherung auf Bänder (tape archiver).file list...gibt die Dateitypen aus. Unter UNIX haben die Datei-Endungen nicht die Bedeutung wie unter Windows, oft kann die Endung beliebig gewählt werden. Das Programm
file öffnet nun die angegebenen Dateien und versucht aufgrund des Inhalts den Typ zu ermitteln.touch list...ändert die Zugriffszeit der angegebenen Dateien oder erzeugt diese, wenn sie nicht existieren (Dateien mit der Länge 0).
grep suchbegriff [list...]Sucht den Suchbegriff in den gegebenen Dateien oder Standardeingabe (Eintippen oder Eingabeumlenkung). Wenn nur der Dateiname gesucht ist, der den Suchbegriff enthält, dann ist die Option
-l anzugeben. Der Suchbegriff kann aus regulären Ausdrücken bestehen, wodurch man komplexe Suchmuster angeben kann. Zu beachten ist allerdings, dass viele Sonderzeichen für reguläre Ausdrücke, eine spezielle Bedeutung in der Shell haben. Sie müssen daher maskiert werden, z.B. mit vorangestelltem \ oder unter einfache Hochkomma ('). Mehr dazu unter man grep bzw. man bash.psProzessstatus, listet alle Prozesse auf, die in dieser Shell gestartet wurden.
ps axulistet alle Prozesse, aller User plus Zusatzinformationen auf. Die erste Spalte enthält den Usernamen, die zweite Spalte die Prozess-ID (PID) und die letzte Spalte den genauen Befehl.
kill [signal] pid...Schickt den angegebenen Prozessen das TERM-Signal (Terminieren). Die wichtigen Signale sind:
-TERM, -KILL (tötet den Prozess auf alle Fälle)killall [signal] name...Schickt den angegebenen Prozessen das TERM-Signal (Terminieren). Die Prozesse werden durch den Befehlsnamen name (aufgerufenes Kommando) ausgewählt.
Will man z.B. alle mozilla-Prozesse killen, gibt man
killall mozilla ein.sort [list...]gibt die Zeilen der angegebenen Dateien sortiert aus (bzw. die Zeilen der Standardeingabe).
uniq [eingabedatei] [ausgabedatei]löscht doppelte Zeilen aus einer sortierten Eingabe.
Fortgeschrittenes
Es gibt mehrere Möglichkeiten, aus der Ausgabe eines Programms Argumente für die Kommandozeile zu machen.- Backticks:
$ ls `echo $HOME`
Hier wird zunächst der Befehlecho $HOMEausgeführt und dessen Ausgabe wird zum Argument des Befehlsls(das Home-Verzeichnis wird aufgelistet). xargs
Das ist ein Programm, das von der Standardeingabe zeilenweise liest und jede Zeile als ein Kommandozeilenargument an dasxargsübergebene Programm übergibt. Obiges Beispiel kann man also auch so schreiben:
echo $HOME|xargs ls
Hilfe
UNIX-Systeme werden normalerweise mit ausführlicher Online-Dokumentation ausgeliefert. Die Standarddokumentation entspricht den gedruckten Handbüchern und ist in mehrere Abschnitte eingeteilt:1 Ausführbare Programme oder Shellbefehle
2 Systemaufrufe (Kernelfunktionen)
3 Bibliotheksaufrufe (Funktionen in System-Bibliotheken)
4 Spezielle Dateien (gewöhnlich in
/dev)5 Dateiformate und Konventionen, z. B.
/etc/passwd6 Spiele
7 Makropakete und Konventionen, z. B. man(7), groff(7)
8 Systemadministrationsbefehle (in der Regel nur für root)
9 Kernelroutinen [Nicht Standard]
n neu [veraltet]
l lokal [veraltet]
p öffentlich [veraltet]
o alt [veraltet]
Zu jedem Befehl (Thema) gibt es eine Seite (können auch mehrere Seiten sein) mit dem Namen des Befehls (Themas). Will man eine bestimmte Seite des Manuals lesen, so verwendet man den Befehl
man (manual):man [abschnitt] seiteWird abschnitt weggelassen, so zeigt
man die passende Seite mit der niedrigsten Abschnittsnummer an. Oft gibt es zu einem Thema in mehreren Abschnitten eine Seite. Dann muss der gewünschte Abschnitt angegeben werden.Beispiele:
man man | Hilfe zu man |
man bash | Hilfe zur bash |
man tar | Hilfe zu tar |
man printf | Hilfe zu printf der Shell |
man 3 printf | Meist will man aber Hilfe zur C-Funktion printf |
man -k schlüsselwort kann man nach Schlüsselworten suchen lassen. Die Ausgabe ist eine Liste der Befehle, auf die das Schlüsselwort zutrifft.apropos schlüsselwort sucht nach Schlüsselworten in der Indexdatenbank der Manualseiten.Für GNU-Programme hat sich die Dokumentation im info-Format eingebürgert:
info seite
kdehelp bietet Zugriff auf all diese Informationen sowie den Hilfetexten des KDE-Desktops.kdehelp ist auch über einen Menüpunkt des KDE-Menüs erreichbar. Bei neueren KDE-Versionen heißt das Programm khelpcenter.Weitere Informationen
- Einführung in die Bourne Again Shell (bash)
- Einführung in die Bourne Again Shell (bash) (pdf)
/bin/bash- Treffpunkt für Linux-Shelluser
Fragen
1. Was ist eine Shell?2. Geben Sie Beispiele verschiedener Shells!
3. Wie wird die Eingabe von langen Pfaden bei der bash erleichtert?
4. Welche Möglichkeiten gibt es frühere Befehle wieder zu verwenden? Nennen Sie 3 Arten!
5. Wie können in einer Shell mehrere Programme so gestartet werden, dass sie gleichzeitig laufen?
6. Wie funktioniert Job-Control? Was ist der Zweck?
7. Was sind Shell-Variable? Nennen Sie zwei Beispiele für die Verwendung!
8. Wie sieht die allgemeine Befehlssyntax aus?
9. Welche Bedeutung hat das Symbol
~ ?10. Was können Sie tun, damit Sie statt
ls das Kommandos dir verwenden können?11. Was müssen Sie tun, damit
dir auch beim nächsten Mal wieder funktioniert?12. Was können Sie tun, wenn ein Programm keine Dateien lesen/schreiben kann, Sie aber mit diesem Programm dennoch Dateien bearbeiten wollen?
13. Sie haben 3 Dateien
adr1, adr2 und adr3, welche Zeilen mit Namen und e-Mail-Adressen enthalten. Eine Zeile hat die Form name vorname email. Die Einträge sind nicht sortiert. Manche Namen kommen nur in einer Datei vor, andere in mehreren Dateien. Geben Sie die Kommandozeile an, die alle 3 Dateien verknüpft, sortiert, die doppelten Namen löscht und in die Datei adr ausgibt. Welcher Mechanismus muss hier verwendet werden?14. Sie haben ein Programm
myprog gestartet, welches hängen geblieben ist. Welche Möglichkeiten haben Sie, das Programm zu beenden?15. Sie wollen wissen, welche C- oder Java-Datei im aktuellen Verzeichnis die Funktion
longjmp enthält. Geben Sie das Kommando an! Was passiert hier genau?16. Sie wissen nicht genau, wie Befehl zum Archivieren/Zippen von Dateien heißt. Wie finden Sie die Information?
Abonnieren Posts [Atom]