Tar-Bruecke eingebaut
This commit is contained in:
parent
9e6a3f8e7a
commit
483c60f1db
@ -51,27 +51,6 @@ echo Die Katze ist aus dem Haus, Zeit, da
|
|||||||
Die Schleife wird nämlich dann so lange ausgeführt, bis \texttt{grep}\index{grep=\texttt{grep}} einen Fehler (bzw. eine erfolglose Suche) zurückmeldet.
|
Die Schleife wird nämlich dann so lange ausgeführt, bis \texttt{grep}\index{grep=\texttt{grep}} einen Fehler (bzw. eine erfolglose Suche) zurückmeldet.
|
||||||
|
|
||||||
|
|
||||||
\section{Eine Datei zeilenweise bearbeiten}
|
|
||||||
|
|
||||||
\texttt{cat datei.txt | while read i}
|
|
||||||
|
|
||||||
\begin{lstlisting}
|
|
||||||
#!/bin/sh
|
|
||||||
count=0
|
|
||||||
cat /etc/passwd | while read i; do
|
|
||||||
uid=`echo $i | cut -f 3 -d:`
|
|
||||||
if [ $uid -lt 100 ]; then
|
|
||||||
count=`expr $count + 1`
|
|
||||||
echo $count
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
echo Es sind $count Benutzer mit einer ID kleiner 100 eingetragen
|
|
||||||
\end{lstlisting}
|
|
||||||
|
|
||||||
TODO!!! Daten aus Subshell hochreichen
|
|
||||||
|
|
||||||
Achtung! while ist eine Subshell - Daten müssen hochgereicht werden.
|
|
||||||
|
|
||||||
\section{Ein typisches Init-Skript}\label{init-skript}\index{Init-Skript}
|
\section{Ein typisches Init-Skript}\label{init-skript}\index{Init-Skript}
|
||||||
|
|
||||||
Dieses Skript dient dazu, den Apache HTTP-Server zu starten. Es wird während des Bootvorgangs gestartet, wenn der dazugehörige Runlevel initialisiert wird.
|
Dieses Skript dient dazu, den Apache HTTP-Server zu starten. Es wird während des Bootvorgangs gestartet, wenn der dazugehörige Runlevel initialisiert wird.
|
||||||
|
@ -24,10 +24,66 @@ haben.
|
|||||||
|
|
||||||
\section{Die Tar-Brücke}
|
\section{Die Tar-Brücke}
|
||||||
|
|
||||||
TODO!!! tar-Brücke
|
Eine sogenannte Tar-Brücke benutzt man, wenn eine oder mehrere Dateien zwischen
|
||||||
|
Rechnern übertragen werden sollen, aber kein Dienst wie SCP oder FTP zur
|
||||||
|
Verfügung steht. Außerdem hat die Methode den Vorteil, daß Benutzerrechte und
|
||||||
|
andere Dateiattribute bei der Übertragung erhalten
|
||||||
|
bleiben\footnote{Vorausgesetzt natürlich, daß der Benutzer auf der entfernten
|
||||||
|
Seite über die nötigen Rechte verfügt.}.
|
||||||
|
|
||||||
%ssh 192.168.2.1 tar clf - / | (cd /mnt; tar xf - )
|
Der Trick besteht darin, auf einer Seite der Verbindung etwas mit \texttt{tar}
|
||||||
%tar cf - $j | rsh $i "(mkdir -p $PWD ;cd $PWD; tar xf -)"
|
einzupacken, dies durch eine Pipe auf die andere Seite der Verbindung zu
|
||||||
|
bringen und dort wieder zu entpacken.
|
||||||
|
|
||||||
|
Wenn dem Kommando \texttt{tar} an Stelle eines Dateinamens ein Minus-Zeichen
|
||||||
|
als Archiv gegeben wird, benutzt es~---~je nach der gewählten Aktion~---~die
|
||||||
|
Standard-Ein- bzw. -Ausgabe. Diese kann an ein weiteres \texttt{tar} übergeben
|
||||||
|
werden um wieder entpackt zu werden.
|
||||||
|
|
||||||
|
Ein Beispiel verdeutlicht diese Kopier-Fähigkeit:
|
||||||
|
|
||||||
|
\texttt{tar cf - . | ( cd /tmp/backup; tar xf - )}
|
||||||
|
|
||||||
|
Hier wird zunächst der Inhalt des aktuellen Verzeichnisses `verpackt'. Das
|
||||||
|
Resultat wird an die Standard-Ausgabe geschrieben. Auf der Empfängerseite der
|
||||||
|
Pipe wird eine Subshell geöffnet. Das ist notwendig, da das empfangende
|
||||||
|
\texttt{tar} in einem anderen Verzeichnis laufen soll. In der Subshell wird
|
||||||
|
zunächst das Verzeichnis gewechselt. Dann liest ein \texttt{tar} von der
|
||||||
|
Standard-Eingabe und entpackt alles was er findet. Sobald keine Eingaben mehr
|
||||||
|
kommen, beendet sich der Prozeß mitsamt der Subshell.
|
||||||
|
|
||||||
|
Am Ziel-Ort finden sich jetzt die gleichen Dateien wie am Quell-Ort.
|
||||||
|
|
||||||
|
Das ließe sich lokal natürlich auch anders lösen. Man könnte erst ein Archiv
|
||||||
|
erstellen, das dann an anderer Stelle wieder auspacken. Nachteil: Es muß
|
||||||
|
genügend Platz für das Archiv vorhanden sein. Denkbar wäre auch ein in den Raum
|
||||||
|
gestelltes \texttt{cp -Rp * /tmp/backup}. Allerdings fehlen einem dabei
|
||||||
|
mitunter nützliche \texttt{tar}-Optionen\footnote{Mit \texttt{-l} verläßt
|
||||||
|
\texttt{tar} beispielsweise nicht das File-System. Nützlich wenn eine Partition
|
||||||
|
gesichert werden soll.}, und die oben erwähnte Brücke wäre mit einem reinen
|
||||||
|
\texttt{cp} nicht möglich.
|
||||||
|
|
||||||
|
Eine Seite der Pipe kann nämlich auch ohne Probleme auf einem entfernten
|
||||||
|
Rechner `stattfinden'. Kommandos wie \texttt{ssh} oder \texttt{rsh} (letzteres
|
||||||
|
nur unter Vorsicht einsetzen!) schlagen die Brücke zu einem anderen System,
|
||||||
|
dort wird entweder gepackt und versendet oder quasi die Subshell gestartet und
|
||||||
|
gelesen. Das sieht wie folgt aus:
|
||||||
|
|
||||||
|
\texttt{ssh 192.168.2.1 tar clf - / | (cd /mnt/backup; tar xf - )}
|
||||||
|
|
||||||
|
Hier wird auf einem entfernten Rechner die Root-Partition verpackt, per SSH in
|
||||||
|
das lokale System geholt und lokal im Backup-Verzeichnis entpackt.
|
||||||
|
|
||||||
|
Der Weg in die andere Richtung ist ganz ähnlich:
|
||||||
|
|
||||||
|
\texttt{tar cf - datei.txt | ssh 192.168.2.1 \dq(mkdir -p \$PWD ;cd \$PWD; tar xf -)\dq}
|
||||||
|
|
||||||
|
Hier wird die Datei verpackt und versendet. Eine Besonderheit gegenüber dem
|
||||||
|
vorigen Beispiel bestehtdarin, daß das Zielverzeichnis bei Bedarf erstellt
|
||||||
|
wird, bevor die Datei dort entpackt wird. Zur Erklärung: Die Variable
|
||||||
|
\texttt{\$PWD} wird, da sie nicht von Ticks `gesichert' wird, schon lokal durch
|
||||||
|
die Shell expandiert. An dieser Stelle erscheint also auf dem entfernten System
|
||||||
|
der Name des aktuellen Verzeichnisses auf dem lokalen System.
|
||||||
|
|
||||||
|
|
||||||
\section{Binaries inside}
|
\section{Binaries inside}
|
||||||
|
Loading…
Reference in New Issue
Block a user