Tar-Bruecke eingebaut
This commit is contained in:
		| @@ -51,27 +51,6 @@ echo Die Katze ist aus dem Haus, Zeit, da | ||||
| Die Schleife wird n<>mlich dann so lange ausgef<65>hrt, bis \texttt{grep}\index{grep=\texttt{grep}} einen Fehler (bzw. eine erfolglose Suche) zur<75>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} | ||||
|  | ||||
| Dieses Skript dient dazu, den Apache HTTP-Server zu starten. Es wird w<>hrend des Bootvorgangs gestartet, wenn der dazugeh<65>rige Runlevel initialisiert wird. | ||||
|   | ||||
| @@ -24,10 +24,66 @@ haben. | ||||
|  | ||||
| \section{Die Tar-Br<42>cke} | ||||
|  | ||||
| TODO!!! tar-Br<42>cke | ||||
| Eine sogenannte Tar-Br<42>cke benutzt man, wenn eine oder mehrere Dateien zwischen | ||||
| Rechnern <20>bertragen werden sollen, aber kein Dienst wie SCP oder FTP zur | ||||
| Verf<EFBFBD>gung steht. Au<41>erdem hat die Methode den Vorteil, da<64> Benutzerrechte und | ||||
| andere Dateiattribute bei der <20>bertragung erhalten | ||||
| bleiben\footnote{Vorausgesetzt nat<61>rlich, da<64> der Benutzer auf der entfernten | ||||
| Seite <20>ber die n<>tigen Rechte verf<72>gt.}. | ||||
|  | ||||
| %ssh 192.168.2.1 tar clf - / | (cd /mnt; tar xf - ) | ||||
| %tar cf - $j | rsh $i "(mkdir -p $PWD ;cd $PWD; tar xf -)" | ||||
| Der Trick besteht darin, auf einer Seite der Verbindung etwas mit \texttt{tar} | ||||
| 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<65>hlten Aktion~---~die | ||||
| Standard-Ein- bzw. -Ausgabe. Diese kann an ein weiteres \texttt{tar} <20>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<75>chst der Inhalt des aktuellen Verzeichnisses `verpackt'. Das | ||||
| Resultat wird an die Standard-Ausgabe geschrieben. Auf der Empf<70>ngerseite der | ||||
| Pipe wird eine Subshell ge<67>ffnet. Das ist notwendig, da das empfangende | ||||
| \texttt{tar} in einem anderen Verzeichnis laufen soll. In der Subshell wird | ||||
| zun<EFBFBD>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<7A> mitsamt der Subshell. | ||||
|  | ||||
| Am Ziel-Ort finden sich jetzt die gleichen Dateien wie am Quell-Ort. | ||||
|  | ||||
| Das lie<69>e sich lokal nat<61>rlich auch anders l<>sen. Man k<>nnte erst ein Archiv | ||||
| erstellen, das dann an anderer Stelle wieder auspacken. Nachteil: Es mu<6D> | ||||
| gen<EFBFBD>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<72><6C>t | ||||
| \texttt{tar} beispielsweise nicht das File-System. N<>tzlich wenn eine Partition | ||||
| gesichert werden soll.}, und die oben erw<72>hnte Br<42>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<42>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 <20>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<65>ber dem | ||||
| vorigen Beispiel bestehtdarin, da<64> das Zielverzeichnis bei Bedarf erstellt | ||||
| wird, bevor die Datei dort entpackt wird. Zur Erkl<6B>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} | ||||
|   | ||||
		Reference in New Issue
	
	Block a user