Bearbeiten von „Kombination von Befehlen“

Zur Navigation springen Zur Suche springen

Warnung: Du bist nicht angemeldet. Deine IP-Adresse wird bei Bearbeitungen öffentlich sichtbar. Melde dich an oder erstelle ein Benutzerkonto, damit Bearbeitungen deinem Benutzernamen zugeordnet werden.

Die Bearbeitung kann rückgängig gemacht werden. Bitte prüfe den Vergleich unten, um sicherzustellen, dass du dies tun möchtest, und veröffentliche dann unten deine Änderungen, um die Bearbeitung rückgängig zu machen.

Aktuelle Version Dein Text
Zeile 1: Zeile 1:
[[Kategorie:Tutorials]]
[[Kategorie:Tutorial:Konsole]]
[[Übersicht über das Konsolen-Tutorial]]
[[Übersicht über das Konsolen-Tutorial]]
==Vorbemerkung==
==Vorbemerkung==
Zeile 41: Zeile 41:
Wir wollen uns merken, wie die Partitionstabellen aller Festplatten aussehen, um bei einem Schadensfall diese evt. reparieren zu können. Das Programm fdisk zeigt uns diese Daten an. Um sie aufzuheben, leiten wir die Ausgabe in eine Datei um:
Wir wollen uns merken, wie die Partitionstabellen aller Festplatten aussehen, um bei einem Schadensfall diese evt. reparieren zu können. Das Programm fdisk zeigt uns diese Daten an. Um sie aufzuheben, leiten wir die Ausgabe in eine Datei um:
<source lang="bash">
<source lang="bash">
  fdisk -l > ~/partitionen_2011_09_08.txt
  fdisk -l >/home/hardware-info/partitionen_2011_09_08.txt
</source>
</source>
'''Hinweis''': fdisk funktioniert nur als root.


===Here-Dokument===
===Here-Dokument===
Wenn nur Text, aber keine Datei vohanden ist, aber das Programm eine Datei braucht (als Eingabe), hilft das Here-Dokument:
Der einfachste Weg, einen mehrzeiligen Text in eine Datei zu schreiben, ist das sogenannte Here-Dokument, das mit <<MARKE eingeleitet und mit MARKE beendet wird. Dies ist vor allem bei Tutorials und in Scripts nützlich.
Anstelle der Datei wird <<MARKE eingesetzt.
Alle Zeilen nach dem Kommando bis zu der Zeile, die nur aus MARKE besteht, gehören dann zum Here-Dokument.  
Dies ist vor allem bei Tutorials und in Scripts nützlich.


====Beispiel====
====Beispiel====
Zeile 59: Zeile 55:
EOS
EOS
</source>
</source>
Damit ist ganz schnell die Datei hits_of_deep_purple.txt mit Text gefüllt.
Wird die Form <<'MARKE' verwendet, erfolgt keine Expansion von Shell-Variablen, ein '$' wird also als '$' ausgegeben.
Wird die Form <<'MARKE' verwendet, erfolgt keine Expansion von Shell-Variablen, ein '$' wird also als '$' ausgegeben.
<source lang="bash">
<source lang="bash">
Zeile 85: Zeile 79:


Hinweis: Die Option von ls ist die Zahl 1, die Option von wc ist der kleine Buchstabe l.
Hinweis: Die Option von ls ist die Zahl 1, die Option von wc ist der kleine Buchstabe l.
Eine Verkettung kann beliebig oft erfolgen:
<source lang="bash">
cat a.txt a.txt b.txt | sort | uniq -u | grep "[0-9]"
</source>
Diese Kette findet alle Zeilen von a.txt, die nicht in b.txt vorkommen und die mindestens eine Dezimalziffer enthalten.
Der Trick ist, dass durch die doppelte Angabe von a.txt in cat jede Zeile von a.txt zweimal in der Ausgabe vorkommt.
Steht eine Zeile in a.txt und in b.txt, kommt sie in der Ausgabe 3 mal vor, steht sie nur in a.txt, kommt sie 2 mal vor. Einzelzeilen müssen daher aus b.txt stammen und nicht in a.txt stehen.
uniq -u gibt nur die Zeilen aus, die genau einmal vorkommen (genauer kein Doppel davor oder danach haben). Wegen der letzen Einschränkung muss ein sort davorgeschaltet werden, das die Eingabe sortiert.


==Bedingte Ausführung==
==Bedingte Ausführung==
Zeile 107: Zeile 89:
In anderen Fällen ist es sinnvoll, einen Befehl nur dann auszuführen, wenn der vorausgehende Befehl '''nicht erfolgreich''' war. Das wird mit dem Symbol '||' erreicht:
In anderen Fällen ist es sinnvoll, einen Befehl nur dann auszuführen, wenn der vorausgehende Befehl '''nicht erfolgreich''' war. Das wird mit dem Symbol '||' erreicht:
<source lang="bash">
<source lang="bash">
  cp -a /etc ~/backup || echo "Problem beim Kopieren von /etc" >>~/log/backup.txt
  cp -a /etc /data/backup || echo "Problem beim Kopieren von /etc" >>/data/backup/log.txt
</source>
</source>
Wenn das Kopieren des Dateibaums von /etc einen Fehler aufwies, wird eine Meldung an eine Logdatei angehängt.
Wenn das Kopieren des Dateibaums von /etc einen Fehler aufwies, wird eine Meldung an eine Logdatei angehängt.
Zeile 114: Zeile 96:
Es können auch mehrere Befehle in eine Zeile geschrieben werden, das Trennzeichen ist dann ';'
Es können auch mehrere Befehle in eine Zeile geschrieben werden, das Trennzeichen ist dann ';'
<source lang="bash">
<source lang="bash">
pushd /etc; tar czf /tmp/etc.tgz * ; popd
pushd /home/jonny ; tar czf /tmp/home.tgz ; popd
</source>
</source>
Verzeichnis wird gespeichert und ins Verzeichnis /etc gegangen, ein Tar-Archiv erzeugt und das vorige Verzeichnis restauriert.
Verzeichnis wird gespeichert und ins Verzeichnis /home/jonny gegangen, ein Tar-Archiv erzeugt und das vorige Verzeichnis restauriert.
= Nächstes Kapitel =
* [[Nützliches für die Kommandozeile]]

Bitte kopiere keine Webseiten, die nicht deine eigenen sind, benutze keine urheberrechtlich geschützten Werke ohne Erlaubnis des Urhebers!
Du gibst uns hiermit deine Zusage, dass du den Text selbst verfasst hast, dass der Text Allgemeingut (public domain) ist, oder dass der Urheber seine Zustimmung gegeben hat. Falls dieser Text bereits woanders veröffentlicht wurde, weise bitte auf der Diskussionsseite darauf hin. Bitte beachte, dass alle Info-Theke-Beiträge automatisch unter der „Gemeinfreiheit“ stehen (siehe Info-Theke:Urheberrechte für Einzelheiten). Falls du nicht möchtest, dass deine Arbeit hier von anderen verändert und verbreitet wird, dann klicke nicht auf „Seite speichern“.

Abbrechen Bearbeitungshilfe (wird in einem neuen Fenster geöffnet)