|
|
  |
|
|||||||||||
|   |   Portrait   |   Publikationen, Anleitungen etc.   |   Photoalbum   |   Links   |   switch to english   |   | |||||||
|
|
  |
|
|||||||||||
Arbeiten in der ShellMit einem Programm verknüpfte DateienImmer, wenn Sie ein Programm starten, sind damit drei Dateien verknüpft,stdin für den Standardinput, stdout für den Standardoutput, stderr für den Standardfehler. Sie finden diese Dateien in /dev stdin, stdout, stderr umleitenStandardinput und Standardouput sind mit Tastatur und Bildschirmanzeige verbunden, können aber mit Hilfe der unten erklärten Zeichen in eine andere Dateien oder Programme umgeleitet werden.
Beispiel :
Befehle verbindenBefehle, die den Standardinput lesen und in den Standartoutput schreiben können, nennt man unter Linux Filter. Solche Befehle lassen sich durch Pipes (|) mit anderen Befehlen zu einer Pipeline verbinden. Pipes nutzen den Output der ersten Befehls als Input für den nächsten.Beispiel :
Basis-BefehleDie hier aufgeführten Befehle können in der Regel mit vielen Optionen genutzt werden. Bitte nutzen Sie bei Bedarf und Interesse: man befehlFangen wir mit einem Befehl an, der bei Benutzung der manpages sehr hilfreich ist ... apropos - sucht die Manualkurzbeschreibung in der
Indexdatenbank
cat - eine oder mehrere Dateien hintereinander anzeigen
less - durchblättern einer Datei
mv -verschiebt eine Datei oder benennt sie um
cp - kopiert eine oder mehrere Dateien
find - sucht nach bestimmten Dateien
ls - zeigt den Inhalt eines Verzeichnisses
du - zeigt die Verteilung des belegten Plattenplatzes auf
die Verzeichnisse
ps - zeigt die Prozesse mit ihrem Status an
kill - beendet einen Prozess
pwd - gibt den Namen des aktuellen Verzeichnisses aus mkdir - erzeugt ein neues Verzeichnis
rmdir - löscht Verzeichnisse
rm - löscht Dateien
grep - durchsucht Dateien nach Ausdrücken
passwd - ändert das Paßwort zum System
lpq - die Druckerwarteschlange überprüfen
lpr -Druckaufträge an die Warteschlange senden
lprm - Druckaufträge aus der Schlange entfernen
Effektiv die bash nutzen (Schleifen)Warnung : Wenn Sie die folgenden Befehle auf Ihrem Rechner ausprobieren machen Sie zuvor eine Sicherungskopie. Erstens übernimmt der Autor keine Haftung für mögliche Tippfehler und zweitens können bei einer Variation der Befehle ein Fehler auftreten, der Ihre Daten vernichtet!Beginnen wir mit einem sehr einfachen Beispiel. Wir wollen mit Hilfe eines geeigneten Programms einige wav-Dateien in eine neues Format konvertieren. Um ein und den selben Befehl nicht x-Mal zu tippen benutzen wir eine einfache Schleife. for i in *.wav; do lame $i; done Wie funktioniert das? Der Variablen i nimmt nacheinander als Wert den Namen jeder Datei an auf die reguläre Ausdruck *.wav passt. Dieser Wert lässt sich mir $i ausgeben. done beendet dann schließlich die Schleife. Jetzt wollen wir nicht mehr den ganzen Ausdruck/Namen verwenden, sondern nur einen Teil davon. Dieses Problem tritt recht häufig auf, z.B. sollen alle *.htm Dateien in *.html Dateien umbenannt werden. Würde man das mit Hilfe z.B. des KDE-Dateimanagers erledigen wollen, müsste man ein und den selben Arbeitsschritt für jede Datei wiederholen. Mit der Bash und einer einfachen for-Schleife geht dies effektiver. for i in *.htm; do mv $i ${i%.*}.html; done Der neue Teil ist ja eigentlich nur ${i%.*}.html, sehen wir uns diesen also einmal genauer an. Wird ${var%ausdruck} benutzt sucht die bash die Variable i von hinter nach vorne nach diesen Ausdruck ab. Wird die fündig, trennt sie den rechten Teil vom Wert der Variablen i ab. Beispiel : i=/home/joerg/Entwicklung/anleitung.tex Dann ist ${i%.*}=/home/joerg/Entwicklung/anleitung oder ${i%/*}=/home/joerg/Entwicklung usw. Der Ausdruck ${var#ausdruck} tut das selbe von der anderen Seite aus,also vom Anfang zum Ende von i. Jetzt kommt die letzte Steigerung in Sachen bash-Schleifen. Als Beispiel benutze ich hier ein Problem, dass sich bei der Arbeit mit an diesen Internet-Seiten Verhältnismäßig oft einstellt. Die Seiten sind bestehen aus Tabellen, das bedeutet man wenn man einen Text in einer Navigationsleiste ändern möchte muss man das in über 50 html-Dokumenten tun. Die Lösung sieht wie folgt aus : Verzeichnis sichern, falls ich Mist baue: cp -r www www_sicherung cd www/ Das ganze Verzeichnis abwärts durchsuchen und mit Hilfe von sed und einer bash-Schleifen den gewünschten String ersetzen for i in $(find -type f -name "*.html"); do sed s/"Linux"/"Linux, *BSD und OpenSource "/g < $i > ${i-default}_ ;done und schließlich die temporären Dateien umbenennen. for i in *.html_; do mv $i ${i%.*}.html; done Wie funktioniert das? Erstens haben wir hier *.tex gegen $(find -type f -name "*.html") ausgetauscht. Dadurch sind wir nun nicht mehr auf ein Verzeichnis beschränkt, sondern können flexibler arbeiten. sed ist ein schöner flexibler, "nicht-interaktiver" Editor, der hier einen "Suchen-und-Ersetzen"-Job erledigt. sed ist sehr flexibel und nicht so schnell zu erklären. Wenn Sie mehr über sed lernen wollen, versuchen Sie doch einfach einmal man sed. Es existiert sogar eine deutsche Manpage zu sed. < $i bedeutet, dass die Datei $i vom stdin nach sed umgeleitet wird und > ${i-default}_ das die Ausgabe in die entsprechende Temporär-Datei umgeleitet wird. |