First Version

This commit is contained in:
Uwe Schimanski 2024-10-14 17:00:20 +02:00
parent 33f99611b6
commit beb969dc3d
221 changed files with 17602 additions and 2 deletions

0
Anhang.tex Executable file
View File

0
Inhaltsverzeichnis.tex Executable file
View File

59
Kapitel1/BashKonfiguration.tex Executable file
View File

@ -0,0 +1,59 @@
\section{Bash}
\begin{justify}
Im pers"onlichen Home Verzeichnis liegt die versteckte Datei {\ttfamily .bashrc}. In dieser Datei kann man die Bash
konfigurieren. In dieser Datei k"onnen Aliase, Variablen und Funktionen definiert werden. Die neue Konfiguration
kann dann mit {\ttfamily source ./.bashrc} geladen werden.%\\[2ex]
%Beispiel einer .bashrc
\listBash
\begin{lstlisting}[captionpos=b, caption=Beispiel .bashrc]
# define alias
alias dir='ls --color=auto --format=vertical'
alias ls='ls -lahF --color=tty'
alias df='df -hT'
alias du='du -sch'
# other
tabs 4 # set tab size
# define variables
strBackupPach=/backup/tuxserver
strBackupLog=backup.log
export strBackupPath strBackupLog
export GREP_OPTIONS='--color=auto'
export GREP_COLOR='1;32' # Ansi color light green
# Functions
back() {
cd $strBackupPath
vi $strBackupLog
}
# Berechtigungen setzen fuer neuangelegte Objekte\\
umask 022
\end{lstlisting}
\pagebreak
In der nachfolgenden Tabelle werden die Konfigurationsdateien aufgelistet,
die bei einem Login/Aufruf einer Shell in der Reihenfolge verarbeitet werden.\\[1ex]
\begin{table}[ht]
\begin{tabular}{p{3cm}p{1.5cm}p{2cm}p{9cm}} % l => Text left, c => center, r => right, p => zeilenumbruch
\rowcolor{hellgrau}\emph{\textbf{Konfigurations}} & \emph{\textbf{Login}} & \emph{\textbf{Interaktive}} & \ \\
\rowcolor{hellgrau}\emph{\textbf{Datei}} & \emph{\textbf{Shell}} & \emph{\textbf{Shell}} & \emph{\textbf{Beschreibung}}\\
\hline
\hline
/etc/profile & X & - & Systemweit, wird bei einem Update "uberschrieben.\\
/etc/profile.local & X & - & Systemweit, bleibt bei einem Update erhalten.\\
/etc/bash.bashrc & X & - & Systemweit, wird bei einem Update "uberschrieben.\\
\~/.bashrc & X & X & Benutzerkonfiguration.\\
\~/.alias & X & X & Benutzerkonfiguration. In dieser Datei k"onnen die Alias verwaltet werden.\\
\~/.bash\_profile & X & X & Benutzerkonfiguration Wird eine der Dateien\\
\~/.bash\_login & X & X & gefunden, so wird diese verarbeitet, auch wenn\\
\~/.profile & X & X & die anderen Dateien vorhanden sind.\\
\end{tabular}
\caption{Liste der Dateien}
\end{table}
\begin{flushleft}
Bei einem Logout wird die Datei {\ttfamily \verb|~|/.bash\_logout} verarbeitet.\\[1ex]
\end{flushleft}
\end{justify}

View File

@ -0,0 +1,56 @@
\section{Bash}
\begin{flushleft}
Im pers"onlichen Home Verzeichnis liegt die versteckte Datei {\ttfamily .bashrc}. In dieser Datei kann man die Bash
konfigurieren. In dieser Datei k"onnen Aliase, Variablen und Funktionen definiert werden. Die neue Konfiguration
kann dann mit {\ttfamily source ./.bashrc} geladen werden.%\\[2ex]
%Beispiel einer .bashrc
\listBash
\begin{lstlisting}[captionpos=b, caption=Beispiel .bashrc, label=lst:bash]
# define alias
alias dir='ls --color=auto --format=vertical
alias ls='ls -lahF --color=tty'
alias df='df -hT'
alias du='du -sch'
# define variables
strBackupPach=/backup/tuxserver
strBackupLog=backup.log
export strBackupPath strBackupLog
export GREP_OPTIONS='--color=auto'
export GREP_COLOR='1;32' # Ansi color light green
# Functions
back() {
cd $strBackupPath
vi $strBackupLog
}
# Berechtigungen setzen f"uer neuangelegte Objekte\\
umask 022
\end{lstlisting}
In der nachfolgenden Tabelle werden die Konfigurationsdateien aufgelistet, die bei einem Login/Aufruf einer Shell in der Reihenfolge verarbeitet werden.\\[2ex]
%
% Hier kommt eine Tabelle, 4 Spalten
%
% \emph und \textbf => Kursiv und Fett
%
\begin{table}[ht]
\begin{tabular}{|l|l|l|p{8cm}|} % l => Text left, c => center, r => right, p => zeilenumbruch
\hline \rowcolor{hellgrau}\emph{\textbf{Konfigurations}} & \emph{\textbf{Login}} & \emph{\textbf{Interaktive}} & \ \\
\rowcolor{hellgrau}\emph{\textbf{Datei}} & \emph{\textbf{Shell}} & \emph{\textbf{Shell}} & \emph{\textbf{Beschreibung}}\\
\hline /etc/profile & X & - & Systemweit, wird bei einem Update "uberschrieben.\\
\hline /etc/profile.local & X & - & Systemweit, bleibt bei einem Update erhalten.\\
\hline /etc/bash.bashrc & X & - & Systemweit, wird bei einem Update "uberschrieben.\\
\hline \~/.bashrc & X & X & Benutzerkonfiguration.\\
\hline \~/.alias & X & X & Benutzerkonfiguration. In dieser Datei k"onnen die Alias verwaltet werden.\\
\hline \~/.bash\_profile & X & X & Benutzerkonfiguration Wird eine der Dateien\\
\hline \~/.bash\_login & X & X & gefunden, so wird diese verarbeitet, auch wenn\\
\hline \~/.profile & X & X & die anderen Dateien vorhanden sind.\\
\hline
\end{tabular}
\caption{Liste der Dateien}
\end{table}
Bei einem Logout wird die Datei {\ttfamily \~/.bash\_logout} verarbeitet.
\end{flushleft}

14
Kapitel1/BefehleMehrzeilig.tex Executable file
View File

@ -0,0 +1,14 @@
\section{Befehle mehrzeilig}
\begin{justify}
Wird eine Anweisung in der Shell zu lang, so kann man sie mit {\ttfamily \textbackslash}
am Ende der Zeile und nach einem Return in der zweiten Zeile weiterschreiben. Als
Prompt Text wird die Variable {\ttfamily PS2} ausgewertet.
\listBash
\begin{lstlisting}[captionpos=b, caption=Beispiel]
uws@tux>PS2="Weiter geht's>"
uws@tux>grep oracle /etc/passwd \
Weiter geht's>echo found
\end{lstlisting}
\end{justify}

127
Kapitel1/Color.tex Normal file
View File

@ -0,0 +1,127 @@
\section{Color ls}
\begin{justify}
Die Ausgabe von {\ttfamily ls} kann Farbig ausgegeben werden. Hierzu wird der Parameter {\ttfamily \verb|--|color} an dem Befehl angehangen. Die Ausgabe der Farben wird mit der Variable {\ttfamily \verb|$LS_|COLORS} gesteuert. Möchte man die Farben anpassen, so wird diese Variable in der Bash-Konfigurations Datei definiert und exportiert.
\listBash
\begin{lstlisting}[captionpos=b, caption=Color ls]
uws@tux>dircolors -b >> .bashrc
\end{lstlisting}
Der Aufbau für die Definition der Farbausgabe ist: key=Option;Vordergrund;Hintergrund \\
Eine Ausflistung der Keys sind in der nachfolgenden Tabelle aufgelistet.
\begin{longtable}[l]{p{3cm}p{13cm}}
\rowcolor{hellgrau}\multicolumn{1}{l}{\textbf{Key}} & \multicolumn {1}{l}{\textbf{Beschreibung}} \\
\hline
\hline
\endfirsthead
%\multicolumn{2}{c}{{\bfseries \tablename \thetable{} continued from previous page.}} \\
\multicolumn{2}{r}{{\bfseries continued from previous page.}} \\
\rowcolor{hellgrau}\multicolumn{1}{l}{\textbf{Key}} & \multicolumn {1}{l}{\textbf{Beschreibung}} \\
\hline
\hline
\endhead
%\multicolumn{2}{r}{{\bfseries \tablename \thetable{} Continued on next page}} \\
\multicolumn{2}{r}{{\bfseries Continued on next page}} \\
\endfoot
\caption{Liste Key} \\
\endlastfoot
no & Global default \\
fi & Normal file \\
di & Directory \\
ln & Symbolic link \\
bd & Block device \\
cd & Character device \\
or & Symbolic link to a nonexistent file \\
ex & Executable file \\
*.extension & Example, *.mp3
\end{longtable}
Hier die Liste der Optionen:
\begin{longtable}[l]{p{3cm}p{13cm}}
\rowcolor{hellgrau}\multicolumn{1}{l}{\textbf{No}} & \multicolumn {1}{l}{\textbf{Beschreibung}} \\
\hline
\hline
\endfirsthead
%\multicolumn{2}{c}{{\bfseries \tablename \thetable{} continued from previous page.}} \\
\multicolumn{2}{r}{{\bfseries continued from previous page.}} \\
\rowcolor{hellgrau}\multicolumn{1}{l}{\textbf{No}} & \multicolumn {1}{l}{\textbf{Beschreibung}} \\
\hline
\hline
\endhead
%\multicolumn{2}{r}{{\bfseries \tablename \thetable{} Continued on next page}} \\
\multicolumn{2}{r}{{\bfseries Continued on next page}} \\
\endfoot
\caption{Liste Option} \\
\endlastfoot
0 & default color \\
1 & bold \\
4 & underline \\
5 & flashing text \\
7 & reverse field \\
8 & concealed (invisible) \\
\end{longtable}
In der nachfolgende Tabelle werden die Farben für den Vordergrund ausgelistet.
\begin{longtable}[l]{p{3cm}p{13cm}}
\rowcolor{hellgrau}\multicolumn{1}{l}{\textbf{No}} & \multicolumn {1}{l}{\textbf{Farbe}} \\
\hline
\hline
\endfirsthead
%\multicolumn{2}{c}{{\bfseries \tablename \thetable{} continued from previous page.}} \\
\multicolumn{2}{r}{{\bfseries continued from previous page.}} \\
\rowcolor{hellgrau}\multicolumn{1}{l}{\textbf{No}} & \multicolumn {1}{l}{\textbf{Farbe}} \\
\hline
\hline
\endhead
%\multicolumn{2}{r}{{\bfseries \tablename \thetable{} Continued on next page}} \\
\multicolumn{2}{r}{{\bfseries Continued on next page}} \\
\endfoot
\caption{Liste Farbe Vordergrund} \\
\endlastfoot
31 & red \\
32 & green \\
33 & orange \\
34 & blue \\
35 & purple \\
36 & cyan \\
37 & grey \\
90 & dark grey \\
91 & light red \\
92 & light green \\
93 & yellow \\
94 & light blue \\
95 & light purple \\
96 & turqoise \\
97 & white
\end{longtable}
Die Farben für den Hintergrund sind folgende:
\begin{longtable}[l]{p{3cm}p{13cm}}
\rowcolor{hellgrau}\multicolumn{1}{l}{\textbf{No}} & \multicolumn {1}{l}{\textbf{Farbe}} \\
\hline
\hline
\endfirsthead
%\multicolumn{2}{c}{{\bfseries \tablename \thetable{} continued from previous page.}} \\
\multicolumn{2}{r}{{\bfseries continued from previous page.}} \\
\rowcolor{hellgrau}\multicolumn{1}{l}{\textbf{No}} & \multicolumn {1}{l}{\textbf{Farbe}} \\
\hline
\hline
\endhead
%\multicolumn{2}{r}{{\bfseries \tablename \thetable{} Continued on next page}} \\
\multicolumn{2}{r}{{\bfseries Continued on next page}} \\
\endfoot
\caption{Liste Farbe Hintergrund} \\
\endlastfoot
40 & black \\
41 & red \\
42 & green \\
43 & orange \\
44 & blue \\
45 & purple \\
46 & cyan \\
47 & grey \\
100 & dark grey \\
101 & light red \\
102 & light green \\
103 & yellow \\
104 & light blue \\
105 & light purple \\
106 & turquoise \\
107 & white \\
\end{longtable}
\end{justify}

240
Kapitel1/EditorVI.tex Executable file
View File

@ -0,0 +1,240 @@
\section{VI Editor}
\subsection{Konfiguration}
\begin{justify}
Die Einstellungen f"ur den VI Editor k"onnen global in der Datei {\ttfamily /etc/vimrc} oder f"ur jeden Benutzer in der Datei {\ttfamily ~/.vimrc} vorgenommen werden. Weitere Informationen "uber die vimrc gibt es hier: \url{https://www.linode.com/docs/tools-reference/tools/introduction-to-vim-customization/}
\listBash
\begin{lstlisting}[captionpos=b, caption=Beispiel vimrc]
" Kommentarzeile
" Syntax Color einschalten
syntax on
set nowrap
" Color config, possible colors
" black, blue, cyan, gra, grey, green, magenta, red, white, yellow, brown
" DarkBlue, DarkGreen, DarkCyan, DarkRed, DarkMagenta, DarkYellow
" LightGray, LightGrey, DarkGray, DarkGrey, LighBlue, LightBlue, LightCyan
" LightRed, LightMagenta, LightYellow
" highlight groups= comment, constant, normal, nontext, special, cursor
hi normal ctermfg=white ctermbg=black guifg=white guibg=black
hi nontext ctermfg=blue ctermbg=black guifg=blue guibg=black
hi comment ctermfg=green ctermbg=white
" Backup
set backup
set backupdir=~/tmp
" swap file
set dir=~/tmp
" show line numbers
set number
" show editing mode (insert/replace) on the last line
set showmode
" highlight matching brackets
set showmatch
" make searches case insensitive
set ignorecase
" Tab size (Anzeige und Plazierung)
set tabstop=3
" show cursor line and column in the status line
set ruler
" color scheme, files under /usr/share/vim/vim72/colors
color desert
\end{lstlisting}
%-------------------------------------------------------------------------------
% Section: Starten
%-------------------------------------------------------------------------------
\newpage
\subsection{Starten}
Den Editor {\ttfamily vi} kann man mit verschiedenen Optionen "offnen.
\begin{table}[ht]
\begin{tabular}{p{2,5cm}p{13,5cm}} % l => Text left, c => center, r => right, p => zeilenumbruch
\rowcolor{hellgrau}\emph{\textbf{Kommando}} & \emph{\textbf{Beschreibung}}\\
\hline
\hline
vi & Ohne Datei starten\\
vi <datei> & Starten mit der angegebenen Datei\\
vi +<datei> & Es wird in einer Kopie gearbeitet und erst bei dem beenden des Editors wird die Datei geschrieben\\
vi -r<datei> & Die Bearbeitung wird nach einem Absturz an der gleichen Stelle fortgesetzt\\
vi -R<datei> & Die Datei wird schreibgesch"utzt ge"offnet\\
\end{tabular}
\caption{Starten vi}
\end{table}
%-------------------------------------------------------------------------------
% Subsesction: Befehle
%-------------------------------------------------------------------------------
\subsection{Befehle}
Folgende Befehle gibt es im VI-Editor. Dieses ist aber nur ein Ausschnitt der Befehle.
\begin{flushleft}
\textbf{Speichern und Beenden}
\end{flushleft}
\begin{table}[ht]
\begin{tabular}{p{2,5cm}p{13,5cm}} % l => Text left, c => center, r => right, p => zeilenumbruch
\rowcolor{hellgrau}\emph{\textbf{Kommando}} & \emph{\textbf{Beschreibung}}\\
\hline
\hline
:q & Editor beenden\\
:q! & Editor beenden ohne zu speichern\\
:w & Datei speichern\\
:w! & Speichern erzwingen\\
:wq oder ZZ & Speichern und beenden\\
<strg> + z & Shell starten, zur"uck mit {\ttfamily fg}\\
\end{tabular}
\caption{Speichern und Beenden}
\end{table}
%---------- Kopieren ----------
\begin{flushleft}
\textbf{Kopieren}
\end{flushleft}
\begin{table}[ht]
\begin{tabular}{p{2,5cm}p{13,5cm}} % l => Text left, c => center, r => right, p => zeilenumbruch
\rowcolor{hellgrau}\emph{\textbf{Kommando}} & \emph{\textbf{Beschreibung}}\\
\hline
\hline
yy & Kopiert die aktuelle Zeile in den Puffer\\
ny & Kopiert n+1 Zeilen in den Puffer\\
yw & Kopiert ein Wort in den Buffer\\
\end{tabular}
\caption{Kopieren}
\end{table}
\newpage
%---------- Sonstiges ----------
\begin{flushleft}
\textbf{Sonstiges}
\end{flushleft}
\begin{table}[ht]
\begin{tabular}{p{2,5cm}p{13,5cm}} % l => Text left, c => center, r => right, p => zeilenumbruch
\rowcolor{hellgrau}\emph{\textbf{Kommando}} & \emph{\textbf{Beschreibung}}\\
\hline
\hline
u & Undo\\
U & Alle "Anderungen der aktuellen Zeile zur"ucknehmen\\
\end{tabular}
\caption{Sonstiges}
\end{table}
%---------- Navigieren ----------
\begin{flushleft}
\textbf{Navigieren}
\end{flushleft}
\begin{table}[ht]
\begin{tabular}{p{2,5cm}p{13,5cm}} % l => Text left, c => center, r => right, p => zeilenumbruch
\rowcolor{hellgrau}\emph{\textbf{Kommando}} & \emph{\textbf{Beschreibung}}\\
\hline
\hline
G & An das Ende springen\\
1G & In die erste Zeile Springen\\
0 & An dem Anfang der Zeile springen\\
\verb|^| & An dem Anfang der Zeile springen\\
\$ & An das Ende der Zeile springen\\
b & An den Anfang des letzten Wortes springen\\
w & An den Anfang des n"achsten Wortes springen\\
e & An das Ende des letzten Wortes springen\\
h & Ein Zeichen nach links\\
j & Eine Zeile nach unten\\
k & Eine Zeile nach oben\\
l & Ein Zeichen nach rechts\\
nG & n-te Zeile der Datei\\
H & Die erste Zeile des Bildschirms\\
+ & Die n"achste Zeile des Textanfangs\\
- & Die vorgerige Zeile des Textanfangs\\
( & Satzanfang\\
) & Satzende\\
\verb|{| & Absatzanfang\\
\verb|}| & Absatzende\\
\verb|[| & Am Anfang der Datei springen\\
\verb|]| & Am Ende der Datei springen\\
<strg> + u & Nach oben bl"attern\\
<strg> + d & Nach unten bl"attern\\
L & In der letzten Zeile der Bildschirmausgabe springen\\
\end{tabular}
\caption{Navigieren}
\end{table}
\newpage
%---------- Loeschen ----------
\begin{flushleft}
\textbf{L"oschen}
\end{flushleft}
\begin{table}[ht]
\begin{tabular}{p{2,5cm}p{13,5cm}} % l => Text left, c => center, r => right, p => zeilenumbruch
\rowcolor{hellgrau}\emph{\textbf{Kommando}} & \emph{\textbf{Beschreibung}}\\
\hline
\hline
x & Zeichen l"oschen\\
r & Zeichen ersetzen\\
s & Zeichen ersetzen und in den Bearbeitungsmodus wechseln\\
dd & Aktuelle Zeilen ausschneiden (Zwischenablage)\\
\verb|[|n\verb|]|dd & Die n"achsten [n] Zeilen ausschneiden\\
C & Zeile l"oschen\\
V & Zeile markieren\\
v & Zeichen markieren\\
d & Markierten Text l"oschen\\
cw & Aktuelles Wort ersetzten\\
dw & Aktuelles Wort l"oschen, incl. angeh"angtem Leerzeichen\\
de & Aktuelles Wort l"oschen, "uber Zeile hinaus\\
dl & Zeichen unter Cursor-Position l"oschen\\
dj & Zwei Zeilen l"oschen, Position ist die 1. Zeile\\
dk & Zwei Zeilen l"oschen, Position ist die 2. Zeile\\
:5,10d & Zeilen 5 bis 10 l"oschen\\
:.,\$d & Alle Zeilen l"oschen\\
nx & N-Zeichen ab Cursorposition\\
dL & Bis zum unteren Bildschirmrand l"oschen\\
d) & Bis zum Absatzende l"oschen\\
D & Bis zum Zeilenende l"oschen\\
\end{tabular}
\caption{L"oschen}
\end{table}
\newpage
%---------- Einfuegen ----------
\begin{flushleft}
\textbf{Einf"ugen}
\end{flushleft}
\begin{table}[ht]
\begin{tabular}{p{2,5cm}p{13,5cm}} % l => Text left, c => center, r => right, p => zeilenumbruch
\rowcolor{hellgrau}\emph{\textbf{Kommando}} & \emph{\textbf{Beschreibung}}\\
\hline
\hline
p & Zwischenablage nach aktueller Zeile einf"ugen\\
P & Zwischenablage vor aktueller Zeile einf"ugen\\
R & Text "uberschreiben\\
J & Aktuelle Zeile an das Ende der vorherigen Zeile anh"angen\\
o & Eine Zeile nach der aktuellen Zeile einf"ugen und in den Bearbeitungsmodus wechseln\\
O & Eine Zeile vor der aktuellen Zeile einf"ugen und in den Bearbeitungsmodus wechseln\\
a & Ein Leerzeichen einf"ugen und in den Bearbeitungsmodus wechseln\\
A & Zum Ende der Zeile springen und in den Bearbeitungsmodus wechseln\\
i & In den Bearbeitungsmodus wechseln\\
I & Am Anfang in den Bearbeitungsmodus wechseln\\
s<text> & Ein Zeichen wird durch Text ersetzt\\
S<text> & Eine ganze Zeile wird durch Text ersetzt\\
ns<text> & N-Zeichen werden durch Text ersetzt\\
cw<text> & Ein Wort durch Text ersetzt\\
\end{tabular}
\caption{Einf"ugen}
\end{table}
%---------- Suchen und Ersetzen ----------
\begin{flushleft}
\textbf{Suchen und Ersetzen}
\end{flushleft}
\begin{table}[ht]
\begin{tabular}{p{2,5cm}p{13,5cm}} % l => Text left, c => center, r => right, p => zeilenumbruch
\rowcolor{hellgrau}\emph{\textbf{Kommando}} & \emph{\textbf{Beschreibung}}\\
\hline
\hline
/Tux & Suchen nach dem Wort Tux\\
/ & Suche wiederholen\\
n & Suche wiederholen\\
:s/nach/durch & In aktueller Zeile suchen und ersetzen\\
:1,7s/nach/durch & In Zeile 1 bis 7 suchen und ersetzen\\
:\verb|%|/nach/durch & In allen Zeilen suchen und ersetzen\\
?<nach> & Die Suche erfolgt r"uckw"arts\\
? & Wiederholung r"uckw"arts\\
:s/nach/durch/g & Nur in der aktuellen Zeile wird gesucht und ersetzt\\
\end{tabular}
\caption{Suchen und Ersetzen}
\end{table}
\end{justify}

18
Kapitel1/Index.tex Executable file
View File

@ -0,0 +1,18 @@
\chapter{Konfiguration Shell}
%-------------------------------------------
% load other documents
%------------------------------------------
\input{Kapitel1/BashKonfiguration}
\input{Kapitel1/ShellGedaechnis}
\input{Kapitel1/BefehleMehrzeilig}
\newpage
\input{Kapitel1/Tastenzuordnung}
\input{Kapitel1/Tastaturfunktionen}
\newpage
\input{Kapitel1/Prompt}
\clearpage
\input{Kapitel1/EditorVI}
\clearpage
\input{Kapitel1/Sonderzeichen}
\include{Kapitel1/Color}

BIN
Kapitel1/Pictures/PromptTime.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

BIN
Kapitel1/Pictures/PromptZsh.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

156
Kapitel1/Prompt.tex Executable file
View File

@ -0,0 +1,156 @@
\section{Prompt}
\subsection{Bash}
\begin{justify}
Den Prompt kann mit der Variable {\ttfamily PS1} eingestellt werden.
\listBash
\begin{lstlisting}[captionpos=b, caption=Setzen PS1]
uws@tux>export PS1="[\t] \u@\h:\w>"
[10:26:22] uws@tux:~>
\end{lstlisting}
In der nachfolgenden Tabelle ist ein Auszug der Escape Sequencen.
\begin{table}[ht]
\begin{tabular}{lp{12cm}} % l => Text left, c => center, r => right, p => zeilenumbruch
\rowcolor{hellgrau}\emph{\textbf{Escape-Sequence}} & \emph{\textbf{Beschreibung}} \\
\hline
\hline
\verb|\|a & Der Ascii Klingel character (07) \\
\verb|\|d & Das Datum in "Wochentag Monat Datum" z.B. Mon Mai 22 \\
\verb|\|e & Der Ascii Escape character (033) \\
\verb|\|h & Der hostname bis zu ersten. \\
\verb|\|H & Der hostname \\
\verb|\|j & The number of jobs currently managed by the shell\\
\verb|\|l & The basename of the shell's terminal device name\\
\verb|\|n & Newline\\
\verb|\|r & Carriage return\\
\verb|\|s & Der Name der Shell, der Basisname von \$0\\
\verb|\|t & Die aktuelle Zeit im 24 Stunden Format HH:MM:SS\\
\verb|\|T & Die aktuelle Zeit im 12 Stunden Format HH:MM:SS\\
\verb|\|@ & Die aktuelle Zeit im 12 Stunden Format am/pm\\
\verb|\|u & Den Usernamen des angemeldeten User\\
\verb|\|v & Die Version der Bash\\
\verb|\|V & Das Release der Bash, Version + Patchlevel\\
\verb|\|w & Das aktuelle Arbeitsverzeichnis\\
\verb|\|W & Der Basisname des aktuellen Arbeitsverzeichnisses\\
\verb|\|! & The history number of this command\\
\verb|\|\# & The commans number of this command\\
\verb|\|\$ & Ist die UID gleich 0, dann \#, sonst \$\\
\verb|\|nnn & The character corresponding to the octal number nnn\\
\verb|\|\verb|\| & Ein Backslash\\
\verb|\|[ & Begin a sequence of non-printing characters, which could be used to embed a terminal control sequence into the prompt\\
\verb|\|] & End a sequence of non-printing characters\\
\end{tabular}
\caption{Auswahl Escape Sequencen}
\end{table}
\newpage
\begin{justify}
Dem Prompt kann man auch farbig darstellen. Um z.B. dem User root eine andere Farbe zuzuweisen. Die Angabe der Farbe wird durch {\ttfamily \verb|\|[} und {\ttfamily \verb|\|]} begrenzt. Es lassen sich der Hintergrund und der Text in Farbe darstellen.
\end{justify}
% ---------------Start new table ---------------
\begin{table}[ht]
\begin{tabular}{p{3.5cm}p{12.5cm}} % l => Text left, c => center, r => right, p => zeilenumbruch
\rowcolor{hellgrau}\emph{\textbf{Sequenz}} & \emph{\textbf{Farbe}}\\
\hline
\hline
\verb|\|[\verb|\|033[XXm\verb|\|] & Keine Hintergrundfarbe\\
\verb|\|[\verb|\|033[40;XXm\verb|\|] & Schwarz\\
\verb|\|[\verb|\|033[41;XXm\verb|\|] & Rot\\
\verb|\|[\verb|\|033[42;XXm\verb|\|] & Gr"un\\
\verb|\|[\verb|\|033[43;XXm\verb|\|] & Hellbraun\\
\verb|\|[\verb|\|033[44;XXm\verb|\|] & Blau\\
\verb|\|[\verb|\|033[45;XXm\verb|\|] & Lila\\
\verb|\|[\verb|\|033[46;XXm\verb|\|] & T"urkis\\
\verb|\|[\verb|\|033[47;XXm\verb|\|] & Hellgrau\\
\end{tabular}
\caption{Hintergrund Farben}
\end{table}
% ---------------Start new table ---------------
\begin{table}[ht]
\begin{tabular}{p{3.5cm}p{12.5cm}} % l => Text left, c => center, r => right, p => zeilenumbruch
\rowcolor{hellgrau}\emph{\textbf{Sequenz}} & \emph{\textbf{Farbe}}\\
\hline
\hline
\verb|\|[\verb|\|033[0;30m\verb|\|] & Schwarz\\
\verb|\|[\verb|\|033[1;30m\verb|\|] & Dunkelgrau\\
\verb|\|[\verb|\|033[0;31m\verb|\|] & Rot\\
\verb|\|[\verb|\|033[1;31m\verb|\|] & Hellrot\\
\verb|\|[\verb|\|033[0;32m\verb|\|] & Gr"un\\
\verb|\|[\verb|\|033[1;32m\verb|\|] & Hellgr"un\\
\verb|\|[\verb|\|033[0;33m\verb|\|] & Braun\\
\verb|\|[\verb|\|033[1;33m\verb|\|] & Gelb\\
\verb|\|[\verb|\|033[0;34m\verb|\|] & Blau\\
\verb|\|[\verb|\|033[1;34m\verb|\|] & Hellblau\\
\verb|\|[\verb|\|033[0;35m\verb|\|] & Lila\\
\verb|\|[\verb|\|033[1;35m\verb|\|] & Helles Lila\\
\verb|\|[\verb|\|033[0;36m\verb|\|] & Dunkles t"urkis\\
\verb|\|[\verb|\|033[1;36m\verb|\|] & T"urkis\\
\verb|\|[\verb|\|033[0;37m\verb|\|] & Hellgrau\\
\verb|\|[\verb|\|033[1;37m\verb|\|] & Wei"s\\
\verb|\|[\verb|\|033[0m\verb|\|] & Auf default Farbe setzten\\
\end{tabular}
\caption{Text Farben}
\end{table}
\newpage
\begin{justify}
Die Uhrzeit kann in dem nachfolgenden Beispiel in der rechten oberen Ecke platziert werden. Die Variable {\ttfamily COLUMNS} enth"alt die Anzahl der Spalten im Terminal.
\end{justify}
\listBash
\begin{lstlisting}[captionpos=b, caption=Uhrzeit rechts oben]
uws@tux>export PS1="\033[s\033[1;\$((COLUMNS-4))f\$(date +%H:%M)\033[u"
\end{lstlisting}
\begin{figure}[ht]
\centering
\includegraphics[scale=0.5]{Kapitel1/Pictures/PromptTime.png}
\caption{Prompt mit Zeitangabe}
\end{figure}
Im nachfolgenden Beispiel wird der Prompt mit der Farbe {\ttfamily gr"uen} dargestellt. Am Anfang leitet das {\ttfamily \verb|\|e} die Farbe ein und am Ende der Zeile wird durch ein {\ttfamily \verb|\|e[m} die Farbe wieder ausgeschaltet.
\listBash
\begin{lstlisting}[captionpos=b, caption=Prompt in Gr"un]
uws@tux>export PS1="\e[1;32m \u@\w:~> \e[m"
\end{lstlisting}
\newpage
%--------------------------------------------------------------------------------
% ZSH
%--------------------------------------------------------------------------------
\subsection{Zsh}
Die Farbwerte f"ur die Zsh Shell sind die gleichen wie die der Bash. Sie k"onnen in der vorherigen Tabelle nachgeschaut werden.
\listBash
\begin{lstlisting}[captionpos=b, caption=Beispiel Zsh Shell]
uws@tux>export PS1=$'\e[1;32m%n@%/:=> \e[0m'
\end{lstlisting}
\begin{figure}[ht]
\centering
\includegraphics[scale=0.5]{Kapitel1/Pictures/PromptZsh.png}
\caption{Zsh Prompt}
\end{figure}
In der nachfolgenden Tabelle ist ein Auszug der vorhandenen Escape Sequencen.
\begin{table}[ht]
\begin{tabular}{p{4cm}p{12cm}} % l => Text left, c => center, r => right, p => zeilenumbruch
\rowcolor{hellgrau}\emph{\textbf{Escape-Sequenz}} & \emph{\textbf{Beschreibung}}\\
\hline
\hline
\%/ & Arbeitsverzeichnis (pwd)\\
\%~ & Arbeitsverzeichnis, aber das Home Verzeichnis wird mit ~ angezeigt.\\
\%M & Der ganze Hostname\\
\%n & Der Hostname bis zum ersten Punkt\\
\%@ & Uhrzeit im 12 Stunden Format\\
\%T & Uhrzeit im 24 Stunden Format\\
\%* & Uhrzeit im 24 Stunden Format incl. der Sekunden\\
\%n & Username\\
\%N & Name eines Scripts, Source File oder Shell\\
\%w & Datum im day-dd Format\\
\%W & Datum immm/dd/yy Format\\
\%D & Datum im yy-mm-dd Format\\
\end{tabular}
\caption{Liste Escape Sequencen}
\end{table}
Die Farbe des Prompts nach der Shell Background Farbe einstellen. In dem nachfolgenden Beispiel wird abgefragt, ob die Hintergrundfarbe Wei"s ist.
\listBash
\begin{lstlisting}[captionpos=b, caption=Beispiel Backgrond Color]
if [ "${COLORFGBG}" = "0;15" ]; then
PS1=$'\e[0;30m%n@%m %~\e[0m\n$'
else
PS1=$'\e[1;32m%n@%m %~\e[1;33m %~\e[0m\n$'
fi
\end{lstlisting}
%\vspace{15cm}
\end{justify}

13
Kapitel1/ShellGedaechnis.tex Executable file
View File

@ -0,0 +1,13 @@
\section{Shell Ged"achnis}
\begin{justify}
Die bereits eingegebenen Befehle werden in der {\ttfamily ~/.bash\_history} gespeichert. Standardm"assig werden die letzten 500 Befehle eingetragen. Mit {\ttfamily uws@tux>echo
\$HISTSIZE} kann man sich den Wert anzeigen lassen. M"ochte man mehr Befehle speichern,
so kann das mit {\ttfamily uws@tux>export HISTSIZE=700} gemacht werden.\\[1ex]
Die Suchfunktion schaltet man mit {\ttfamily [strg+R]} oder {\ttfamily [strg+s]} ein.
Der Prompt ver"andert sich nun und den zu suchenden Befehl kann eingegebn werden.
Die Bash vervollst"andigt die Eingabe Automatisch. Um weiter zu suchen, einfach die
Tastenkombination noch einmal machen. Der gefundene Befehl wird dann mit einem
{\ttfamily Enter} abgeschickt oder mit dem dr"ucken der {\ttfamily Esc-Taste} kann
man den Befehl noch editieren.\\[1ex]
Mit {\ttfamily uws@tux>fc -l -10} werden die 10 letzten Befehle angezeigt.
\end{justify}

48
Kapitel1/Sonderzeichen.tex Executable file
View File

@ -0,0 +1,48 @@
\section{Sonderzeichen}
\begin{justify}
\begin{table}[ht]
\begin{tabular}{p{3cm}p{13cm}} % l => Text left, c => center, r => right, p => zeilenumbruch
\rowcolor{hellgrau}\emph{\textbf{Sonderzeichen}} & \emph{\textbf{Beschreibung}}\\
\hline
\hline
; & Trennt Kommandos\\
: & Dummy-Kommando, f"uhrt nichts aus\\
. & Ohne eigene Subshell das Kommando ausf"uhren. z.B. . datei\\
\verb|#| & Kommentar\\
\verb|&| & Das Programm wird im Hintergrund ausgef"uhrt\\
\verb|&&| & Bedingte Kommandoausf"uhrung. z.B. cmd1 \verb|&&| cmd2, dann wird cmd2 nur ausgef"uhrt, wenn cmd1 erfolgreich war\\
\verb||| & Verbindet Kommandos miteinander\\
|| & Bedingte Kommandoausf"uhrung, wie \verb|&&|, nur das cmd2 dann ausgef"uhrt wird, wenn cmd1 einen Fehler auswirft\\
\verb|*| & Jokerzeichen, alle\\
\verb|?| & Jokerzeichen, genau ein Zeichen\\
\verb|[xyz]| & Jokerzeichen, eines aus xyz\\
\verb|[^xyz]| & Jokerzeichen, alle ausser xyz\\
\verb|[ ausdruck ]| & Andere Schreibweise f"ur Test\\
\verb|~| & Homeverzeichnis\\
\verb|>| & Umleiten in einer Datei, Datei wird neu geschrieben\\
\verb|>>| & Umleiten in einer Datei, wird an die Datei angeh"angt\\
\verb|>&| & Umleiten der Standardausgabe\\
\verb|<| & Einlesen einer Datei\\
\verb|<< ende| & Einlesen einer Datei bis ende\\
\verb|(...)| & Innerhalb der Klammer werden die Kommandos in einer Shell ausgef"uhrt\\
\verb|{...}| & Kommandos gruppieren\\
\verb|{,,}| & Zeichenketten zusammenf"uhren\\
\verb|$| & Inhalt von Variablen\\
\verb|$*| oder \verb|$@| & Liste der "ubergebenen Parameter an die Shell\\
\verb|$#| & Parameteranzahl\\
\verb|$0| & Name des Shell-Programms\\
\verb|$?| & R"uckgabewert des letzten Kommandos\\
\verb|$!| & PID des letzten Hintergrundprozesses\\
\verb|$$| & PID der aktuellen Shell\\
\verb|$1 ... $9|& Parameter 1 bis 9\\
\verb|$(...)| & Kommandosubstitution\\
\verb|${...}| & Funktionen zur manipulation von zeichenketten\\
\verb|$[...]| & Berechnungen\\
\verb|"..."| & Sonderzeichen behalten ihre Wirkung\\
\verb|'...'| & Sonderzeichen verlieren ihre Wirkung\\
\verb|´...´| & Kommandosubstitution\\
\verb|\zeichen| & Demaskieren, hebt die Wirkung des Sonderzeichens aus\\
\end{tabular}
\caption{Sonderzeichen}
\end{table}
\end{justify}

25
Kapitel1/Tastaturfunktionen.tex Executable file
View File

@ -0,0 +1,25 @@
\section{Tastaturfunktionen}
\begin{justify}
\begin{table}[ht]
\begin{tabular}{p{3cm}p{13cm}} % l => Text left, c => center, r => right, p => zeilenumbruch
\rowcolor{hellgrau}\emph{\textbf{Taste}} & \emph{\textbf{Erkl"arung}} \\
\hline
\hline
\verb|[Strg] + [A]| & springt am Anfang der Eingabezeile \\
\verb|[Strg] + [E]| & springt am Ende der Eingabezeile \\
\verb|[Alt] + [B]| & springt ein Wort nach links in der Eingabezeile \\
\verb|[Esc] + [B]| & geht ein Wort zur"uck \\
\verb|[Alt] + [F]| & springt ein Wort nach rechts in der Eingabezeile \\
\verb|[Esc] + [F]| & geht ein Wort vor \\
\verb|[Strg] + [K]| & l"oscht von der Cursor-Position aus bis zum Ende der Zeile \\
\verb|[Strg] + [U]| & l"oscht von der Cursor-Poistion aus bis zum Anfang der Zeile \\
\verb|[Strg] + [W]| & l"oscht ein Wort nach links \\
\verb|[Strg] + [T]| & vertauscht die beiden Zeichen vor und hinter dem Cursor \\
\verb|[Alt] + [T]| & vertauscht die beiden vorangehenden W"orter in der Eingabezeile \\
\verb|[Esc] + [T]| & vertauscht die beiden vorangehenden W"orter \\
\verb|[Strg] + [L]| & r"aumt das Terminal Fenster auf \\
\verb|[Tab]| & Vervollst"andigen von Befehlen / Dateinamen oder Verzeichnisse\\
\end{tabular}
\caption{Auswahl Tastaturfunktionen}
\end{table}
\end{justify}

25
Kapitel1/Tastenzuordnung.tex Executable file
View File

@ -0,0 +1,25 @@
\section{Tastenzuordnung}
\begin{justify}
Eine Tastenzuordnung kann man auf zwei Arten realisieren. Entweder man definiert die
Tastenzuordnung in der {\ttfamily .bashrc} oder in der {\ttfamily .inputrc}. \\
\listBash
\begin{lstlisting}[captionpos=b, caption=Beispiel .bashrc]
# F1: zeigt /var/log/messages
bind '"\eOP":"tail -f /var/log/messages\n"'
# F2: wechselt nach /etc
bind '"\eOQ":"cd /etc\n"'
# F3: wiederholt das letzte Wort der aktuellen Zeile
bind '"\eOR":"!#$\e^"'
\end{lstlisting}
\listBash
\begin{lstlisting}[captionpos=b, caption=Beispiel .inputrc]
# F1: zeigt /var/log/messages
"\eOP":"tail -f /var/log/messages\n"
# F2: wechselt nach /etc
"\eOQ":"cd /etc\n"
# F3: wiederholt das letzte Wort der aktuellen Zeile
"\eOR":"!#$\e^"
\end{lstlisting}
\end{justify}

37
Kapitel10/Gruppen.tex Executable file
View File

@ -0,0 +1,37 @@
\section{Gruppen}
\subsection{Anlegen}
\begin{justify}
Neue Gruppen lassen sich mit dem Befehl {\ttfamily groupadd} anlegen.
\listBash
\begin{lstlisting}[captionpos=b, caption=Create Group, label=lst:bash]
root@tux>groupadd <GruppenName>
\end{lstlisting}
\subsection{"Andern}
Eine bestehende Gruppe kann man mit dem Befehl {\ttfamily groupmod} "andern. In der nachfolgenden Tabelle werden ein paar Optionen aufgelistet.
\begin{table}[ht]
\begin{tabular}{p{2cm}p{14cm}} % l => Text left, c => center, r => right, p => zeilenumbruch
\rowcolor{hellgrau}\emph{\textbf{Option}} & \emph{\textbf{Beschreibung}}\\
\hline
\hline
-g & "Andern der Group ID.\\
-a & Hinzuf"ugen einen Benutzers f"ur die Gruppe.\\
-R & L"o"schen eines Benutzers aus der Gruppe.\\
\end{tabular}
\caption{Optionen}
\end{table}
\listBash
\begin{lstlisting}[captionpos=b, caption=Modify Group, label=lst:bash]
root@tux>groupmod -a <BenutzerName> <Gruppen>
\end{lstlisting}
\subsection{L"oschen}
Eine Gruppen kann man mit dem Befehl {\ttfamily groupdel} l"oschen.
\listBash
\begin{lstlisting}[captionpos=b, caption=Delete Group, label=lst:bash]
root@tux>groupdel <GruppenName>
\end{lstlisting}
\subsection{Anzeigen}
\listBash
\begin{lstlisting}[captionpos=b, caption=Delete Group, label=lst:bash]
uws@tux>awk -F ':' '{print $1}' /etc/group
\end{lstlisting}
\end{justify}

8
Kapitel10/Index.tex Executable file
View File

@ -0,0 +1,8 @@
\chapter{Benutzer / Gruppen}
%-------------------------------------------
% load other documents
%------------------------------------------
\input{Kapitel10/User}
\input{Kapitel10/Gruppen}
\input{Kapitel10/LogonTime}
\include{Kapitel10/UserAngemeldet}

65
Kapitel10/LogonTime.tex Executable file
View File

@ -0,0 +1,65 @@
\section{Logon Zeit begrenzen}
\begin{justify}
M"ochte man die Anmeldezeit f"ur einen User festlegen, so kann man das mittels der {\ttfamily times.conf} im Verzeichnis {\ttfamily /etc/security} bewerkstelligen.
\subsection{Voraussetzung}
Das Paket {\ttfamily libpam-modules} muss installiert sein.
\subsection{Konfiguration}
Die Syntax in der {\ttfamily times.conf} ist:
\listBash
\begin{lstlisting}[captionpos=b, caption=Syntax times.conf, label=lst:bash]
<services>;<ttys>;<user>;<time> # Kommentar
\end{lstlisting}
Beispiel:
\listBash
\begin{lstlisting}[captionpos=b, caption=Beispiel, label=lst:bash]
Login;*;paul;MoFr1200-1700
\end{lstlisting}
Das Format f"ur die Zeitangabe ist HHMM-HHMM.\\
Format f"ur die Tage:
\begin{table}[ht]
\begin{tabular}{p{2cm}p{14cm}} % l => Text left, c => center, r => right, p => zeilenumbruch
\rowcolor{hellgrau}\emph{\textbf{K"urzel}} & \emph{\textbf{Tag}}\\
\hline
\hline
Mo & Montag\\
Tu & Dienstag\\
We & Mittwoch\\
Th & Donnerstag\\
Fr & Freitag\\
Sa & Samstag\\
So & Sonntag\\
Wk & Wochentags\\
Wd & Wochenende\\
Al & Alle Tage\\
MoWk & Alle Wochentage, au"ser Montag\\
AlFr & Alle Tage, au"ser Freitag\\
\end{tabular}
\caption{Liste Tage}
\end{table}
Folgende Operatoren gibt es:
\begin{table}[ht]
\begin{tabular}{p{2cm}p{14cm}} % l => Text left, c => center, r => right, p => zeilenumbruch
\rowcolor{hellgrau}\emph{\textbf{Operatoren}} & \emph{\textbf{Beschreibung}}\\
\hline
\hline
! & Logisches nicht\\
\& & Logisches und\\
| & Logisches oder\\
* & Platzhalter f"ur alles\\
\end{tabular}
\caption{Liste Operatoren}
\end{table}
Ein weiteres Beispiel:
\listBash
\begin{lstlisting}[captionpos=b, caption=Beispiel, label=lst:bash]
Login;tty*&!pts*;du|ich;!al1000-2400
\end{lstlisting}
Die User {\ttfamily du} und {\ttfamily ich} d"urfen sich an allen Tagen in der Zeit zwischen 10:00-24:00 nicht an den virtuellen Consolen anmelden. An Terminals (pty*) gilt die Sperre nicht.
\subsection{Aktivierung}
Damit die {\ttfamily times.conf} auch aktiv wird, so muss das Zeitmodul {\ttfamily pam\_time.so} in der Datei {\ttfamily common\_auth} im Verzeichnis {\ttfamily /etc/pam.d} geladen werden.
\listBash
\begin{lstlisting}[captionpos=b, caption=Common\_auth, label=lst:bash]
root@tux>grep pam_time common_auth
account required pam_time.so
\end{lstlisting}
\end{justify}

164
Kapitel10/User.tex Executable file
View File

@ -0,0 +1,164 @@
\section{Benutzer}
%-------------------------------------------------------------------------------
% Subsection: Anlegen
%-------------------------------------------------------------------------------
\subsection{Anlegen}
\begin{flushleft}
Neue Benutzer werden mit dem Befehl {\ttfamily useradd} angelegt. Eine Auswahl der Optionen folgt in der nachfolgenden Liste. Die {\ttfamily default} Werte stehen in der Datei {\ttfamily useradd}, die sich im Verzeichnis {\ttfamily /etc/defaults} befindet.
\begin{table}[ht]
\begin{tabular}{p{2cm}p{14cm}} % l => Text left, c => center, r => right, p => zeilenumbruch
\rowcolor{hellgrau}\emph{\textbf{Option}} & \emph{\textbf{Beschreibung}}\\
-c & Einen Kommentar mit angeben.\\
-d & Angabe des Home Verzeichnisses.\\
-e & Datum, wann das Konto abl"auft im Format YYYY-MM-DD.\\
-f & Nach wie vielen Tagen des inaktiven Kontos, nach Ablauf des Kennwortes, das Konto gesperrt werden soll.\\
-G & Angabe der Gruppen.\\
-g & Angabe der Hauptgruppe.\\
-m & Erstellen des Home Verzeichnisses.\\
-p & Passwort.\\
-r & Systemaccount.\\
-s & Angabe der Shell.\\
-u, \verb|--|uid & Angabe der UUID, z.B. 500\\
\end{tabular}
\caption{Optionen}
\end{table}
\listBash
\begin{lstlisting}[captionpos=b, caption=User Add, label=lst:bash]
root@tux>useradd <Benutzername>
root@tux>useradd <Benutzername> -u 500
\end{lstlisting}
%-------------------------------------------------------------------------------
% Subsection: Revise
%-------------------------------------------------------------------------------
\subsection{"Andern}
Einen angelegten Benutzer kann man mit dem Befehl {\ttfamily usermod} bearbeiten. Hierbei gelten die gleichen Optionen wie bei dem Anlegen eines neuen Benutzers.
\listBash
\begin{lstlisting}[captionpos=b, caption=Modify User, label=lst:bash]
root@tux>usermod -c "Home User" <Benutzername>
\end{lstlisting}
Gruppen k"onnen einem User mit {\ttfamily -G} zugewiesen werden. In der Kombination mit {\ttfamily -a} werden die angegebenen Gruppen dem User addiert.
\listBash
\begin{lstlisting}[captionpos=b, caption=Add Group, label=lst:bash]
root@tux>usermod -aG users,kvm,libvirt <Benutzername>
\end{lstlisting}
Die {\ttfamily UUID} eines Users kann mit {\ttfamily -u} ge"andert werden.
\listBash
\begin{lstlisting}[captionpos=b, caption=Modify UUID, label=lst:bash]
root@tux>usermod -u <uuid> <Benutzername>
\end{lstlisting}
%-------------------------------------------------------------------------------
% Subsection: Erase
%-------------------------------------------------------------------------------
\subsection{L"oschen}
Benutzer werden mit dem Befehl {\ttfamily userdel} gel"oscht. Gibt man die Option {\ttfamily -r} mit an, so wird das Home Verzeichnis mit gel"oscht.
\listBash
\begin{lstlisting}[captionpos=b, caption=Delete User, label=lst:bash]
root@tux>userdel -r <Benutzername>
\end{lstlisting}
%-------------------------------------------------------------------------------
% Subsection: Account lock
%-------------------------------------------------------------------------------
\subsection{Account sperren}
Einen User Account kann man sperren, in dem man die Default Shell austauscht. Wird der Eintrag auf {\ttfamily /usr/sbin/nologin} gesetzt, ist ein Anmelden am dem System nicht mehr m"oglich.
\listBash
\begin{lstlisting}[captionpos=b, caption=Nologin]
uws@tux>grep pi /etc/passwd
pi:x:1000:1000:Raspbian Account:/home/pi:/usr/sbin/nologin
\end{lstlisting}
Einen Account kann man auch mit {\ttfamily passwd -l <UserName} sperren. Mit {\ttfamily passwd -u <UserName>} kann man den Account wieder entsperren.
\listBash
\begin{lstlisting}[captionpos=b, caption=Passwd]
uws@tux># Account lock
uws@tux>sudo passwd -l pi
uws@tux># Account unlock
uws@tux>sudo passwd -u pi
\end{lstlisting}
%-------------------------------------------------------------------------------
% Subsection: Anzeigen
%-------------------------------------------------------------------------------
\subsection{Anzeigen}
Angelegte Benutzer kann man mit dem nachfolgenden Befehl sich anzeigen lassen. Mit {\ttfamily \$4} wird die GroupID ausgegeben.
\listBash
\begin{lstlisting}[captionpos=b, caption=List User, label=lst:bash]
uws@tux>awk -F ':' '{print $1}' /etc/passwd
uws@tux>awk -F ':' '{print $1 "-" $4}' /etc/passwd
\end{lstlisting}
F"ur die UID und Gruppen des angemeldeten Users gibt es auch die Variablen {\ttfamily UID} und {\ttfamily GROUPS}.
\listBash
\begin{lstlisting}[captionpos=b, caption=Show UID / GROUPS, label=lst:bash]
uws@tux>echo $UID
uws@tux>echo $GROUPS
\end{lstlisting}
%-------------------------------------------------------------------------------
% Subsection: Angemeldete User
%-------------------------------------------------------------------------------
Subsection{Angemeldete User}
In der folgenden Tabelle stehen die Befehle drin, die angemeldete User anzeigen.
\begin{table}[ht]
\begin{tabular}{p{2cm}p{14cm}} % l => Text left, c => center, r => right, p => zeilenumbruch
\rowcolor{hellgrau}\emph{\textbf{Befehl}} & \emph{\textbf{Beschreibung}}\\
\hline
\hline
w & Zeigt an, wer ist angemeldet und was sie tun.\\
who & Zeigt an, wer ist eingelogt.\\
last & Welche Benutzer waren angemeldet\\
\end{tabular}
\caption{Optionen}
\end{table}
%-------------------------------------------------------------------------------
% Subsection: Kennwort aendern
%-------------------------------------------------------------------------------
\subsection{Kennwort "andern}
Das Kennwort kann man mit dem Befehl {\ttfamily passwd} "andern.
\listBash
\begin{lstlisting}[captionpos=b, caption=Change Passwort, label=lst:bash]
root@tux>passwd <BenutzerName>
Changing password for <Benutzer>
New Password:
Reenter password:
\end{lstlisting}
%-------------------------------------------------------------------------------
% Subsection: Benutzer Info
%-------------------------------------------------------------------------------
\subsection{Benutzer Info's}
Informationen "uber die Benutzer kann man mit dem Programm {\ttfamily finger} sich anzeigen lassen.
\listBash
\begin{lstlisting}[captionpos=b, caption=Info's User, label=lst:bash]
uws@tux>finger uws
Login: uws Name: Uwe Schimanski
Directory: /home/uws Shell: /bin/bash
On since Fri Oct 14 12:26 (CEST) on pts/0
No Mail
No Plan
\end{lstlisting}
%-------------------------------------------------------------------------------
% Subsection: Fehlversuche
%-------------------------------------------------------------------------------
\subsection{Login Fehlversuche}
Mit {\ttfamily faillog -a} werden alle fehlversuche f"ur einen Login pro User angezeigt. Mit {\ttfamily faillog -u <UserName>} werden nur die fehlversuche des angegebenen Users angezeigt.
\listBash
\begin{lstlisting}[captionpos=b, caption=Fehlversuche]
uws@tux>sudo faillog -a
Login Fehlver. Maximum Letzter Auf
root 4 0 01/27/19 18:54:58 +0100 192.168.70.
bin 0 0 01/01/70 01:00:00 +0100
daemon 0 0 01/01/70 01:00:00 +0100
mail 0 0 01/01/70 01:00:00 +0100
ftp 0 0 01/01/70 01:00:00 +0100
http 0 0 01/01/70 01:00:00 +0100
uuidd 0 0 01/01/70 01:00:00 +0100
dbus 0 0 01/01/70 01:00:00 +0100
nobody 0 0 01/01/70 01:00:00 +0100
uws@tux>sudo faillog -u uws
Login Fehlver. Maximum Letzter Auf
uws 22 0 02/20/19 08:39:08 +0100 109.40.64.8
\end{lstlisting}
\end{flushleft}

41
Kapitel10/UserAngemeldet.tex Executable file
View File

@ -0,0 +1,41 @@
\section{Angemeldeter User}
\begin{justify}
Mit dem Konsolenprogramm {\ttfamily loginctl} kann man sich Informationen "uber den angemeldeten User holen, den Sperrbildschirm entsperren und weitere Aktionen durchf"uhren.
\subsection{Info}
\listBash
\begin{lstlisting}[captionpos=b, caption=User Info]
uws@tux>loginctl list-users
UID USER
---------
1000 uws
1 users listed
uws@tux>logictl list-user <UserName>
UID=1000
GID=1000
Name=uws
Timestamp=Sat 2020-04-18 14:41:56 CEST
TimestampMonotonic=34428981
RuntimePath=/run/user/1000
Service=user@1000.service
Slice=user-1000.slice
Display=2
State=active
Sessions=2
IdleHint=no
IdleSinceHint=0
IdleSinceHintMonotonic=0
Linger=no
\end{lstlisting}
%-------------------------------------------------------------------------------
% Subsection: User Terminate
%-------------------------------------------------------------------------------
\subsection{User Terminat}
\listBash
\begin{lstlisting}[captionpos=b, caption=User Terminate]
uws@tux>loginctl terminate-user "<UserName>"
uws@tux>loginctl kill-user "<UserName>"
\end{lstlisting}
\end{justify}

52
Kapitel11/Cups.tex Executable file
View File

@ -0,0 +1,52 @@
\section{CUPS (Common Unix Print System)}
\subsection{Konfiguration}
\begin{justify}
Die Konfiguration von CUPS kann mit dem Programm {\ttfamily cupsctl} vorgenommen werden. Die Konfigurations Datei befindet sich im Verzeichnis {\ttfamily /etc/cups} und tr"agt den Namen{\ttfamily cupsd.conf}. Eine Hilfe bekommt man mit {\ttfamily man cupsd.conf} angezeigt.\\
Nach "Anderung an der Konfiguration muss CUPS neu gestartet werden. In der nachfolgenden Tabelle sind einige der Konfigurartions Schalter aufgelistet.
\begin{table}[ht]
\begin{tabular}{p{4cm}p{12cm}} % l => Text left, c => center, r => right, p => zeilenumbruch
\rowcolor{hellgrau}\emph{\textbf{Schalter}} & \emph{\textbf{Beschreibung}}\\
\hline
\hline
\verb|--|[no-]debug-logging & Das Logging ein- oder ausschalten.\\
\verb|--|[no-]remote-admin & Remote Administration ein- oder ausschalten.\\
\verb|--|[no-]remote-any & Internet Zugriff erlauben oder ausschalten.\\
\verb|--|[no-]remote-printers & Remote Drucker anzeigen\\
\verb|--|[no-]share-printers & Drucker freigeben.\\
\verb|--|[no-]user-cancel-any & Benutzer d"urfen Jobs l"oschen.\\
-E Veschl"usselung & einschalten\\
-u <username> & Benutzername definieren.\\
-h <server[:port]> & Server Adresse.\\
\end{tabular}
\caption{Schalter}
\end{table}
\subsection{Verwaltung - Browser}
Die Verwaltung der Drucker unter CUPS kann man mit dem Browser durchf"uhren. Die Verwaltungsseite wird mit der URL {\ttfamily http://localhost:631} aufgerufen. Diese Seite l"ast sich nat"urlich auch von einem anderen Rechner aus aufrufen.
\subsection{Dienst starten}
Der Dienst wird mit {\ttfamily cups restart} neu gestartet. Au"ser {\ttfamily restart} gibt es auch noch {\ttfamily stop} und {\ttfamily stop}.
\listBash
\begin{lstlisting}[captionpos=b, caption=Synatx cups]
root@tux>cups <restart> <stop> <start>
\end{lstlisting}
\newpage
\subsection{Admin}
\begin{justify}
Standardm"a"sig darf nur der erste angelegte Benutzer Cups Administrieren. M"ochte man noch andere Benutzer die Administration erlauben, so sind diese Benutzer zu der Gruppe {\ttfamily lpadmin} hinzuzuf"ugen.
\end{justify}
\listBash
\begin{lstlisting}[captionpos=b, caption=Add User to group]
root@tux>adduser <username> lpadmin
\end{lstlisting}
\subsection{Druckdaten entfernen}
Abgearbeitet Druckdaten kann man mit dem nachfolgenden Befehl entfernen.
\listBash
\begin{lstlisting}[captionpos=b, caption=Delete Print Job]
root@tux>cupsctl AutoPurgeJobs=yes PreserveJobFiles=no PreserveJobHistory=no
\end{lstlisting}
\subsection{Servernamen Drucker}
Soll bei jedem Drucker auch der Servernamen mit angezeigt werden, so gibt man folgendes ein.
\listBash
\begin{lstlisting}[captionpos=b, caption=Modify Cups]
uws@tux>cupsctl BrowseShortNames=no
\end{lstlisting}
\end{justify}

65
Kapitel11/Drucken.md Executable file
View File

@ -0,0 +1,65 @@
# Drucken #
## 1. CUPS (Common Unix Print System) ##
### 1.1 Konfiguration ###
Die Konfiguration von CUPS kann mit dem Programm ***cupsctl*** vorgenommen werden. Die
Konfigurations Datei befindet sich im Verzeichnis ***/etc/cups*** und trägt den Namen ***cupsd.conf***. Eine
Hilfe bekommt man mit `man cupsd.conf` angezeigt.
In der nachfolgenden Tabelle sind einige der Konfigurartions Schalter aufgelistet.
|Schalter| Beschreibung|
|:-------|:------------|
|--[no-]debug-logging| Das Logging ein- oder ausschalten.|
|--[no-]remote-admin| Remote Administration ein- oder ausschalten.|
|--[no-]remote-any| Internet Zugriff erlauben oder ausschalten.|
|--[no-]remote-printers| Remote Drucker anzeigen|
|--[no-]share-printers| Drucker freigeben.|
|--[no-]user-cancel-any| Benutzer dürfen Jobs löschen.|
|-E Veschlüsselung| einschalten|
|-u <username>| Benutzername definieren.|
|-h <server[:port]>| Server Adresse.|
Nach Änderung an der Konfiguration muss CUPS neu gestartet werden.
### 1.2 Verwaltung - Browser ###
Die Verwaltung der Drucker unter CUPS kann man mit dem Browser durchführen. Die
Verwaltungsseite wird mit der URL ***http://localhost:631*** aufgerufen. Diese Seite läst sich
natürlich auch von einem anderen Rechner aus aufrufen.
### 1.3 Dienst starten ###
Der Dienst wird mit `cups restart` neu gestartet. Außer ***restart*** gibt es auch noch ***stop*** und
***start***.
```console
root@tux>cups <restart> <stop> <start>
```
### 1.4 Admin ###
Standardmäßig darf nur der erste angelegte Benutzer Cups Administrieren. Möchte man noch andere
Benutzer die Administration erlauben, so sind diese Benutzer zu der Gruppe ***lpadmin*** hinzuzufügen.
```console
root@tux>adduser <username> lpadmin
```
### 1.5 Druckdaten entfernen ###
Abgearbeitet Druckdaten kann man mit dem nachfolgenden Befehl entfernen.
```console
root@tux>cupsctl AutoPurgeJobs=yes PreserveJobFiles=no PreserveJobHistory=no
```
### 1.6 Servernamen Drucker ###
Soll bei jedem Drucker auch der Servernamen mit angezeigt werden, so gibt man folgendes ein.
```console
uws@tux>cupsctl BrowseShortNames=no
```

7
Kapitel11/Index.tex Executable file
View File

@ -0,0 +1,7 @@
\chapter{Drucken}
%-------------------------------------------
% load other documents
%------------------------------------------
\input{Kapitel11/Cups}
\newpage
\input{Kapitel11/Lpr}

92
Kapitel11/Lpr.tex Normal file
View File

@ -0,0 +1,92 @@
\section{Lpr, Lpq und Lpstat}
%===============================================================================
% Subesction: Allgemein
%===============================================================================
\subsection{Allgemein}
\begin{justify}
Mit dem Konsolen Befehl {\ttfamily lpr} kann man Dateien, wie z.B. PDF-Dokumente, ausdrucken. Der Befehl {\ttfamily lpq} gibt die aktuellen Druckaufträge aus. Auch der Befehl {\ttfamily lpstat} gibt die Druckaufträge aus.
%===============================================================================
% Subesction: Nützliche Scripte
%===============================================================================
\subsection{Nützliche Scripte}
\listBash
\begin{lstlisting}[captionpos=b, caption=Mehrere PDF einzeln drucken]
uws@tux>cat mdruck.sh
#!/usr/bin/env bash
for in in $(ls -1 *.pdf); do
printf "Druck von ${i}\n"
lpr ${i}
done
# Zeige Druckaufträge
lpq
\end{lstlisting}
\listBash
\begin{lstlisting}[captionpos=b, caption=Druckjobs anzeigen]
uws@tux>cat showjobs.sh
#!/usr/bin/env bash
# Abbruch des Scripts mit ctrl+c
while true; do
echo -e "\e[32m------------------------------------------------------------\e[0m"
datum=$(date)
echo -e "\e[31m\e[1mÜbersicht Druckaufträge ${datum}\e[0m"
for dru in $(lpstat -a | cut -d \ -f1); do
jobzahl=$(lpq -P${dru} | sed 1,2d | wc -l)
echo -e "\e[32m------------------------------------------------------------\e[0m"
echo -e "\e[7mDrucker: ${dru} ${jobzahl} Aufträge \e[0m"
lpq -P ${dru} | sed 1,2d | head -3
done
sleep 3
clear
done
\end{lstlisting}
%===============================================================================
% Subesction: Beispiele
%===============================================================================
\subsection{Beispiele}
Hier sind mehrere Beispiele.
\listBash
\begin{lstlisting}[captionpos=b, caption=Beispiele]
uws@tux># Eine PDF-Datei ausdrucken, Standarddrucker
uws@tux>lpr MyDok.pdf
uws@tux># Eine PDF-Datei ausdrucken, Drucker angeben
uws@tux>lpr -P HP502 MyDok.pdf
uws@tux># Mehrfach Ausdrucke
uws@tux>lpr -# 3 MyDok.pdf
uws@tux># Druckaufträge ausgeben
uws@tux>lpq
MFGO240 ist bereit
keine Einträge
uws@tux># Druckaufträge mit lpstat
uws@tux>lpstat -o
uws@tux># Druckauftrag löschen
uws@tux>lprm 4711
\end{lstlisting}
%===============================================================================
% Subesction: Lpstat
%===============================================================================
\subsection{Lpstat}
Mit dem Befehl {\ttfamily lpstat} kann man sich ebenso die Druckaufträge ausgeben lassen wie mit dem Befehl {\ttfamily lpq}. Nachfolgend sind einige Optionen von lpstat aufgelistet.
\begin{table}[ht]
\begin{tabular}{p{4cm}p{12cm}} % l => Text left, c => center, r => right, p => zeilenumbruch
\rowcolor{hellgrau}\emph{\textbf{Option}} & \emph{\textbf{Beschreibung}}\\
\hline
\hline
lpstat -o & alle Druckaufträge auflisten\\
lpstat -u User & Aufträge von User ausgeben.\\
lpstat -R & Rangliste der Druckaufträge\\
lpstat -R -u User & Rangliste der Druckaufträge von User\\
lpstat -d & Standarddrucker ausgeben\\
lpstat -v & Liste verfügbarer Drucker\\
lpstat -a & Liste aktiver Drucker\\
lpstat -r & Status des Druck-Daemons\\
\end{tabular}
\caption{Lpstat Option}
\end{table}
\end{justify}

14
Kapitel12/AsciiArt.tex Normal file
View File

@ -0,0 +1,14 @@
\section{Ascii Art}
\begin{justify}
Mit {\ttfamily figlet} kann man einen Text in Ascii Art auf der Shell ausgeben lassen.
\listBash
\begin{lstlisting}[captionpos=b, caption=Figlet]
uws@tux>figlet Arch Linux
_ _ _ _
/ \ _ __ ___| |__ | | (_)_ __ _ ___ __
/ _ \ | '__/ __| '_ \ | | | | '_ \| | | \ \/ /
/ ___ \| | | (__| | | | | |___| | | | | |_| |> <
/_/ \_\_| \___|_| |_| |_____|_|_| |_|\__,_/_/\_\
\end{lstlisting}
\end{justify}

133
Kapitel12/Conky.tex Executable file
View File

@ -0,0 +1,133 @@
\section{Conky - Desktop aufmotzen}
\subsection{Allgemein}
\begin{justify}
Mit dem Programm {\ttfamily conky} kann man sich auf dem Desktop einen Systemmonitor erstellen. Conky ist in fast allen Distributionen enthalten und kann mit dem jeweiligen Paketmanager installiert werden. Auch RSS-Feeds lassen sich mit conky auf dem Desktop darstellen. Es gibt "uber 250 Objekte und F"ahigkeiten, die das Programm mitbringt. Ab der Conky Version 1.10 hat sich die Syntax ge"andert und auch einige Variablen sind entfallen. F"ur die Konfigurationsdatei wird nun die LUA-Syntax verwendet.
%-------------------------------------------------------------------------------
% Subsection: Conky ausfuehren
%-------------------------------------------------------------------------------
\subsection{Conky ausf"uhren}
Ruft man {\ttfamily conky} ohne einen Parameter auf, so wird die Konfiguration aus dem Verzeichnis /etc/conky/conky.conf verwendet. Unter Arch Linux befindet sich die Datei unter /usr/share/doc/conky-1.10.8\verb|_|pre. Befindet sich im Home Verzeichnis auch eine .conkyrc Datei, so wird diese ausgewertet. Mit dem Parameter {\ttfamily -c} und der Angabe des Pfades und des Datei Namens wird dann diese Datei ausgewertet.
\listBash
\begin{lstlisting}[captionpos=b, caption=Conky ausf"uhren]
uws@tux>conky -c ~/.config/conky/.conkyrc
uws@tux># Kopiert die Standard Konfig in das Verzeichnis
uws@tux>conky -C ~/.config/conky/conky.conf
\end{lstlisting}
%-------------------------------------------------------------------------------
% Subsection: Konfiguration
%-------------------------------------------------------------------------------
\subsection{Konfiguration}
In der Konfigurationsdatei gibt es zwei Abschnitte. In dem ersten Abschnitt {\ttfamily conky.config} werden die Grunds"atzlichen Einstellungen vorgenommen und in dem Abschnitt {\ttfamily conky.text} wird definiert, was angezeigt werden soll.
\listBash
\begin{lstlisting}[captionpos=b, caption=Abschnitte Beispiel]
-- Kommentare werden mit zwei - eingeleitet
conky.config = {
alignment = 'bottom_right',
background = false,
...
};
conky.text = [[
${scroll 16 $nodename - $kernel}
$hr
${color grey}Uptime:$color $uptime
...
]]
\end{lstlisting}
Welche variablen es gibt, kann man unter \url{conky.sourceforge.net/variables.html} sich anzeigen lassen.
%-------------------------------------------------------------------------------
% Subsection: Definitionen
%-------------------------------------------------------------------------------
\subsection{Definitionen}
Das Aussehen und die Position des Conky Fensters werden in dem ersten Abschnitt definiert. Gr"o"senangabe erfolgen in Pixeln Angaben. Hier ein paar Definitionen.
\begin{table}[ht]
\begin{tabular}{p{4cm}p{12cm}}
\rowcolor{hellgrau}\emph{\textbf{Definition}} & \emph{\textbf{Beschreibung}}\\
\hline
\hline
alignment = 'top\verb|_|right' & Angabe der Position des Fensters\\
gap\verb|_|y = -10 & Verschieben des Conky Fensters nach oben oder unten\\
gap\verb|_|x = 5 & Verschieben des Conky Fensters nach rechts oder links\\
minimum\verb|_|height = 100 & Minimum der H"ohe\\
minimum\verb|_|width = 40 & Minimum der Breite\\
xinerama\verb|_|head = 1 & Auf welchem Monitor soll die Ausgabe erscheinen bei mehr als einen Bildschirm\\
update\verb|_|interval = 1.0 & Aktualisierungszeit, die Angabe erfolgt in Sekunden. 1.0 ist ein guter Wert\\
own\verb|_|window\verb|_|argb\verb|_|visual = true & Transparente Conky Anzeige einschalten\\
own\verb|_|window\verb|_|argb\verb|_|value = 0 & Bei 0 komplett durchsichtig und h"ohere Zahlen durchsichtigkeit abnehmend\\
double\verb|_|buffer = true & Bei flackernder Bildschirm Ausgabe einschalten\\
font = 'DejaVu Sans Mono:size=12' & Schriftart setzen, alle Linux Schriften k"onnen verwendet werden\\
draw\verb|_|borders = true & Rahmen um das Fenster darstellen\\
border\verb|_|width = 3 & St"arke des Rahmens\\
stippled\verb|_|borders = 1 & Gepunktete Umrandung\\
border\verb|_|inner\verb|_|margin = 5 & Abstand zum Rand, Angabe in Pixel\\
\end{tabular}
\caption{Definitionen}
\end{table}
Was man dann auf dem Desktop ausgeben m"ochte, wird dann im Abschnitt {\ttfamily conky.text} festgelegt. Hier wird dann auch die Position der Elemente definiert. Die Angaben stehen dann zwischen den {\ttfamily \verb|[[ und ]]|}. Nachfolgend eine kurze Liste der Variablen, die als Standard zu Verf"ugung stehen.
\begin{table}[ht]
\begin{tabular}{p{4cm}p{12cm}}
\rowcolor{hellgrau}\emph{\textbf{Variable}} & \emph{\textbf{Beschreibung}}\\
\hline
\hline
\$nodename & Hostname\\
\$kernel & Kernel\\
\$memperc\% & Speicherverbrauch in Prozent\\
\$swap & Swap Gr"o"se\\
\$swapmax & Maximale Swap Gr"o"se\\
\$swapperc & Aktueller Swap Verbrauch in Prozent\\
\$cpu\% & Prozessorlast in Prozent\\
\$fs\verb|_|used & Belegten Platz der Festplatte\\
\$fs\verb|_|size & Gr"o"se der Festplatte\\
\$hr & Horizontale Linie\\
scroll & Ausgabe als Laufband\\
\end{tabular}
\caption{Variablen}
\end{table}
Hier ein kleines Beispiel aus der C'T 18.26.
\listBash
\begin{lstlisting}[captionpos=b, caption=Beispiel]
congy.text = [[
${scroll 26 $nodename - $sysname $kernel on $machine | }
$hr
${color grey}RAM Usage:$color $mem/$memmax - $memperc% ${membar 4}
${color grey}Swap Usage:$color $swap/$swapmax - $swapperc% ${swapbar 4}
${color grey}CPU Usage:$color $cpu% ${cpubar 4}
$hr
${color grey}File Systems: / ${color${fs_used /\/${fs_size /} ${fs_bar 6 /}
\end{lstlisting}
Ein Bild oder auch ein Logo kann man mit {\ttfamily image} einbinden. Die zwei Zahlen hinter dem Parameter {\ttfamily -p} sind die Werte f"ur den Abstand des Bildes in Pixel x und y.
\listBash
\begin{lstlisting}[captionpos=b, caption=Bild einf"ugen]
${image .config/conky/MyLogo.jpg -p 170,25}
\end{lstlisting}
%-------------------------------------------------------------------------------
% Subsection: RSS Feed
%-------------------------------------------------------------------------------
\subsection{RSS Feed einbinden}
Auch RSS Feeds kann man mit Conky ausgeben.
\begin{table}[ht]
\begin{tabular}{p{4cm}p{12cm}}
\rowcolor{hellgrau}\emph{\textbf{Variable}} & \emph{\textbf{Beschreibung}}\\
\hline
\hline
feed\verb|_|title & Titel des Feeds\\
item\verb|_|title 1 & Titel des aktuellsten Feed\\
item\verb|_|titles 10 & Anzeige von 10 Feeds\\
item\verb|_|desc 1 & Ausgabe der Beschreibung\\
maximum\verb|_|width & Maximal Breite der Ausgabe, der Rest wird abgeschnitten\\
\end{tabular}
\caption{RSS Feed}
\end{table}
In dem n"achsten Beispiel werden die Feeds alle 15 Minuten aktualisiert und es werden 10 Feeds ausgegeben.
\listBash
\begin{lstlisting}[captionpos=b, caption=Beispiel RSS Feed]
${rss http://www.heise.de/newsticker/heise.rdf feed_title}
${rss http://www.heise.de/newsticker/heise.rdf item_title 1}
${rss http://www.heise.de/newsticker/heise.rdf item_desc 1}
${rss http://www.heise.de/newsticker/heise.rdf 15 item_titles 10}
\end{lstlisting}
%-------------------------------------------------------------------------------
% Subsection: Scripte ausfuehren
%-------------------------------------------------------------------------------
\subsection{Scripte ausf"uhren}
\end{justify}

9
Kapitel12/Fastfetch.tex Normal file
View File

@ -0,0 +1,9 @@
\section{Fastfetch}
\begin{flushleft}
Eine weitere alternative ist {\ttfamily Fastfetch}. Einerseits besticht das Programm mit seiner Geschwindigkeit, andererseits befindet sich auh hier die Konfiguration im Verzeichnis ~/.config/fastfetch.
\begin{figure}[ht]
\centering
\includegraphics[scale=0.5]{Kapitel12/Pictures/Fastfetch.jpg}
\caption{Fastfetch}
\end{figure}
\end{flushleft}

34
Kapitel12/Firefox.tex Executable file
View File

@ -0,0 +1,34 @@
\section{Firefox}
\subsection{Speicherbedarf}
\begin{flushleft}
Hat man im Browser mehrere Tabs offen, so steigt der RAM Verbrauch stark an. Auf Systemen, die nicht genug Hauptspeicher haben, wird dann Speicher in den Swap Bereich ausgelagert und das System l"auft dann schleppend. Damit der RAM Verbrauch optimiert wird, werden in der Config drei Parameter gesetzt.\\
Der erste Parameter regelt die Anzahl der Webseiten im Cache, die durch den Vor-/Zur"uckbutton angezeigt werden. Der zweite Parameter regelt den Speicher, den alle offenen Taby belegen d"urfen.
\listBash
\begin{lstlisting}[captionpos=b, caption=Parameter]
about:config
browser.sessionhistory.max_entries = 5
browser.sessionhistory.max_total_viewers = 3
\end{lstlisting}
\begin{table}[ht]
\begin{tabular}{p{2cm}p{14cm}} % l => Text left, c => center, r => right, p => zeilenumbruch
\rowcolor{hellgrau}\emph{\textbf{Wert}} & \emph{\textbf{Beschreibung}}\\
\hline
\hline
-1 & Automatik\\
0 & Es werden keine Seiten im RAM gespeichert\\
1 & 32MB\\
2 & 128MB\\
5 & 256MB\\
8 & 1/2/4GB\\
\end{tabular}
\caption{Werte Viewers}
\end{table}
Bei dem letzen Parameter kann man einstellen, das beim Minimieren der nicht mehr ben"otigte Speicher sofort frei gegeben werden soll. Ist der Eintrag nicht vorhanden, so wird ein Boolean Eintrag angelegt.
\listBash
\begin{lstlisting}[captionpos=b, caption=Speicher]
about:config
config.trim_on_minimize = true
\end{lstlisting}
\end{flushleft}

18
Kapitel12/Index.tex Executable file
View File

@ -0,0 +1,18 @@
\chapter{Programme}
%-------------------------------------------
% load other documents
%------------------------------------------
\input{Kapitel12/Kalendar}
%\input{Kapitel12/VirtualBox}
\newpage
\input{Kapitel12/Screenfetch}
\input{Kapitel12/Neofetch}
\newpage
\input{Kapitel12/Fastfetch}
\input{Kapitel12/MergePDF}
\newpage
\input{Kapitel12/Firefox}
\include{Kapitel12/Conky}
\input{Kapitel12/Youtube}
\include{Kapitel12/LsDeluxe}
\include{Kapitel12/AsciiArt}

20
Kapitel12/Kalendar.tex Executable file
View File

@ -0,0 +1,20 @@
\section{Kalender in der Shell}
\begin{justify}
In der Bash kann man sich einen Kalender anzeigen lassen mit dem Befehl {\ttfamily cal}.
Cal reicht zur"uck bis zum 1. Januar 0001.
\listBash
\begin{lstlisting}[captionpos=b, caption=Beispiel cal]
uws@tux>cal
June 2012
Su Mo Tu We Th Fr Sa
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
\end{lstlisting}
Gibt man dem Befehl {\ttfamily cal} noch den Parameter {\ttfamily -y} auf dem Weg, so wird das aktuelle Jahr
ausgegeben. Mit {\ttfamily cal 06 2005} wird der Juni 2005 ausgegeben. Die Angabe {\ttfamily cal -3} gibt den
aktuellen Monat mit dem vorherigen und nachfolgenden Monat aus. Bei dem Parameter {\ttfamily -j} werden
die Tage von 1 bis 365 gez"ahlt und ausgegeben.
\end{justify}

36
Kapitel12/Latex.tex Normal file
View File

@ -0,0 +1,36 @@
\section{Latex}
\subsection{Document Class}
\begin{flushleft}
Um eine neue Dokumenten Klasse händisch in Latex zu installieren, müssen die Dateien in bestimmte Verzeichnisse abgelegt werden. Die Verzeichnisse können je nach Distributation verschieden sein. Normalerweise wird in dem Verzeichnis /usr/share/texfm/tex/generic ein neues Verzeichnis angelegt und dort dann die Dateien hinein kopiert. Unter Arch Linux ist es das Verzeichnis /usr/share/textmf-dist/tex/generic. In diesen Verzeichnissen befinden sich die Systemweiten Klassen. Eine User Klasse wird im Verzeichnis ~/texmf/tex/latex wie die Systemweite ertellt. Zum Abschluss muss noch die Tex Filename Database aktualisiert werden. Systemweit mit {\ttfamily mktexlsr} und Userweit mit {\ttfamily texhash}.\\
In der nachfolgenden Tabelle werden Variablen und die dazugehörende Pfade aufgelistet. Informationen hierzu gibt es unter https://wiki.archlinux.org/index.php/TeX_Live.
\begin{longtable}[l]{p{4cm}p{12cm}}
\rowcolor{hellgrau}\multicolumn{1}{l}{\textbf{Variable}} & \multicolumn {1}{l}{\textbf{Arch default}} & \multicolumn {1}{l}{\textbf{Beschreibung}}\\
\hline
\hline
\endfirsthead
\multicolumn{2}{r}{{\bfseries continued from previous page.}} \\
\rowcolor{hellgrau}\multicolumn{1}{l}{\textbf{Variable}} & \multicolumn {1}{l}{\textbf{Arch default}} & \multicolumn {1}{l}{\textbf{Beschreibung}}\\
\hline
\hline
\endhead
\multicolumn{2}{r}{{\bfseries Continued on next page}} \\
\endfoot
\caption{Texfm Verzeichnisse} \\
\endlastfoot
TEXMFDIST & /usr/share/texmf-dist & Dateien der ursprünglichen Distribution\\
\end{longtable}
\listBash
\begin{lstlisting}[captionpos=b, caption=Installation]
root@tux>zypper install screenfetch
root@tux>pacman -Sy screenfetch
\end{lstlisting}
\begin{figure}[ht]
\centering
\includegraphics[scale=0.5]{Kapitel12/Pictures/Screenfetch.jpg}
\caption{Screenfetch}
\end{figure}
\end{flushleft}

58
Kapitel12/LsDeluxe.tex Executable file
View File

@ -0,0 +1,58 @@
\section{LsDeluxe (lsd)}
\begin{flushleft}
Das Consolen Programm {\ttfamily lsd} wertet den ls-Befehl mit Farben und Glyphen auf. Hierzu ist es notwendig, einen speziellen Schriftfont zu installieren. Am besten installiert man dazu die Nerd Fonts.
%-------------------------------------------------------------------------------
% Subsection: Installation
%-------------------------------------------------------------------------------
\subsection{Installation}
Als erstes installieren wir den Schriftfont. Hierzu nehmen wir den Nerd Font.
\listBash
\begin{lstlisting}[captionpos=b, caption=Installation Font]
root@tux>yaourt -S nerd-fonts-complete
\end{lstlisting}
Oder man holt sich den Font von der Seite {\ttfamily https://github.com/ryanoasis/nerd-fonts/blob/master/readme.md} und spielt ihn manuell ein.
\listBash
\begin{lstlisting}[captionpos=b, caption=Installation Font manuell]
root@tux>cp *.ttf /usr/share/fonts/hack
root@tux># Update font cache
root@tux>fc.cache -f -v
root@tux># Check install
root@tux>fc-list | grep Hack
\end{lstlisting}
Nun k"onnen wir das Programm installieren
\listBash
\begin{lstlisting}[captionpos=b, caption=Installation LsDeluxe]
root@tux>pacman -S lsd
\end{lstlisting}
%-------------------------------------------------------------------------------
% Subsection: Konfiguration
%-------------------------------------------------------------------------------
\subsection{Konfiguration}
M"ochte man den Befehl ls ersetzten durch lsd, so f"ugt man in der .bashrc eine Zeile mit einem Alias auf ls ein. Standardm"a"sig ist die Option -h gesetzt. In einer sp"ateren Version soll man auch die Farben "andern k"onnen, was im Moment noch nicht geht. Mit -A werden die Verzeichnisse . und .. ausgeblendet und mit der Option \verb|--|group-directories-first werden die Verzeichnisse oben angezeigt.
\listBash
\begin{lstlisting}[captionpos=b, caption=Konfiguration alias]
root@tux>grep lsd .bashrc
alias ls='lsd -lA --group-directories-first'
\end{lstlisting}
Die Konfigurationsdatei lautet .config/lsd/config.yaml. Ein dokumentiertes Beispiel gibt es auf der Github Seite.
\newpage
%-------------------------------------------------------------------------------
% Subsection: Beispiele
%-------------------------------------------------------------------------------
\subsection{Beispiele}
Eine Tree-Ausgabe kann man folgenderma\ss{}en machen.
\listBash
\begin{lstlisting}[captionpos=b, caption=Tree Ausgabe]
uws@tux>lsd --tree --depth 2
\end{lstlisting}
%-------------------------------------------------------------------------------
% Picture
%-------------------------------------------------------------------------------
\begin{figure}[ht]
\centering
\includegraphics[scale=0.5]{Kapitel12/Pictures/LsDeluxe.jpg}
\caption{lsd}
\end{figure}
\end{flushleft}

10
Kapitel12/MergePDF.tex Executable file
View File

@ -0,0 +1,10 @@
\section{Merge PDF Dateien}
\begin{flushleft}
Sollen mehrere PDF Dateien zu einer PDF Datei zusammen gef"ugt werden, so kann das mit {\ttfamily pdfunite}
gemacht werden.
\listBash
\begin{lstlisting}[captionpos=b, caption=Merge PDF-Dateien]
uws@tux>pdfunite in1.pdf in2.pdf in3.pdf out.pdf
\end{lstlisting}
\end{flushleft}

9
Kapitel12/Neofetch.tex Executable file
View File

@ -0,0 +1,9 @@
\section{Neofetch}
\begin{flushleft}
Als alternative zu {\ttfamily Screenfetch} gibt es auch das Programm {\ttfamily neofetch}. Der Unterschied zu Screenfetch ist, das man Neofetch auch konfigurieren kann. Die Konfiguration befindet sich im Verzeichnis ~/.config/neofetch.
\begin{figure}[ht]
\centering
\includegraphics[scale=0.5]{Kapitel12/Pictures/Neofetch.jpg}
\caption{Neofetch}
\end{figure}
\end{flushleft}

Binary file not shown.

After

Width:  |  Height:  |  Size: 83 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 139 KiB

BIN
Kapitel12/Pictures/Neofetch.jpg Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

64
Kapitel12/Programme.md Executable file
View File

@ -0,0 +1,64 @@
# Programme #
## 1. Kalender in der Shell ##
In der Bash kann man sich einen Kalender anzeigen lassen mit dem Befehl ***cal***. Cal reicht zurück bis
zum 1. Januar 0001.
```console
uws@tux>cal
June 2012
Su Mo Tu We Th Fr Sa
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
```
Gibt man dem Befehl ***cal*** noch den Parameter ***y*** auf dem Weg, so wird das aktuelle Jahr
ausgegeben. Mit `cal 06 2005` wird der Juni 2005 ausgegeben. Die Angabe `cal -3` gibt den
aktuellen Monat mit dem vorherigen und nachfolgenden Monat aus. Bei dem Parameter ***j*** werden
die Tage von 1 bis 365 gezählt und ausgegeben.
## 2. Virtual Box ##
Mit der Variable ***VBOX_USER_HOME*** kann man die Ablage der Konfiguration an einer zentralen Stelle
ablegen, wo alle Benutzer Zugriff darauf haben. Normalerweise werden die erstellten Maschinen nur
für den jeweiligen Benutzer angezeigt, der die Maschinen erstellt hat, da die Konfiguration
standardmäßig im Home Verzeichnis abgelegt wird.
```console
uws@tux>echo $VBOX_USER_HOME
/vm/configuration
```
Eine Liste aller erstellten Maschinen kann man sich mit VBoxManage sich anzeigen lassen.
```console
uws@tux>vboxmanage list vms
```
## 3. Screenfetch ##
Mit dem Programm ***Screenfetch*** kann man sich in der Console eine Übersicht des Systems
anzeigen lassen.
```console
root@tux>zypper install screenfetch
root@tux>pacman Sy screenfetch
```
<img src="D:\Daten\uws\Linux\Bash\markdown\Screenfetch.JPG" alt="Alt-Text" title="Beispiel" />
![Example](D:\Daten\uws\Linux\Bash\markdown\Sreenfetch.JPG "MyPC")
## 4. Merge PDF Dateien ##
Sollen mehrere PDF Dateien zu einer PDF Datei zusammen gefügt werden, so kann das mit ***pdfunite***
gemacht werden.
```console
uws@tux>pdfunite in1.pdf in2.pdf in3.pdf out.pdf
```

74
Kapitel12/Programme.tex Executable file
View File

@ -0,0 +1,74 @@
\section{Kalender in der Shell}
\begin{flushleft}
In der Bash kann man sich einen Kalender anzeigen lassen mit dem Befehl {\ttfamily cal}.
Cal reicht zur"uck bis zum 1. Januar 0001.
\listBash
\begin{lstlisting}[captionpos=b, caption=Beispiel cal]
uws@tux>cal
June 2012
Su Mo Tu We Th Fr Sa
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
\end{lstlisting}
Gibt man dem Befehl {\ttfamily cal} noch den Parameter {\ttfamily -y} auf dem Weg, so wird das aktuelle Jahr
ausgegeben. Mit {\ttfamily cal 06 2005} wird der Juni 2005 ausgegeben. Die Angabe {\ttfamily cal -3} gibt den
aktuellen Monat mit dem vorherigen und nachfolgenden Monat aus. Bei dem Parameter {\ttfamily -j} werden
die Tage von 1 bis 365 gez"ahlt und ausgegeben.
\end{flsuhleft}
\section{Virtual Box}
\begin{flushleft}
Mit der Variable {\ttfamily VBOX_USER_HOME} kann man die Ablage der Konfiguration an einer zentralen Stelle
ablegen, wo alle Benutzer Zugriff darauf haben. Normalerweise werden die erstellten Maschinen nur
f"ur den jeweiligen Benutzer angezeigt, der die Maschinen erstellt hat, da die Konfiguration
standardm"a"ss ig im Home Verzeichnis abgelegt wird.
\listBash
\begin{lstlisting}[captionpos=b, caption=Setzen Variable]
uws@tux>echo $VBOX_USER_HOME
/vm/configuration
\end{lstlisting}
Eine Liste aller erstellten Maschinen kann man sich mit VBoxManage sich anzeigen lassen.
\listBash
\begin{lstlisting}[captionpos=b, caption=Liste Virtuelle Maschinen]
uws@tux>vboxmanage list vms
\end{lstlisting}
\end{flsuhleft}
\section{Screenfetch}
\begin{flushleft
Mit dem Programm {\ttfamily Screenfetch} kann man sich in der Console eine "Ubersicht seines Systems
anzeigen lassen.
\listBash
\begin{lstlisting}[captionpos=b, caption=Installation screenfetch]
root@tux>zypper install screenfetch
root@tux>pacman Sy screenfetch
\end{lstlisting}
\begin{figure}[ht]
\centering
\includegraphics[scale=0.5]{Pictures/Screenfetch.jpg}
\caption{Screenfetch}
\end{figure}
\end{flsuhleft}
\section{Merge PDF Dateien}
\begin{flushleft
Sollen mehrere PDF Dateien zu einer PDF Datei zusammen gef"ugt werden, so kann das mit {\ttfamily pdfunite}
gemacht werden.
\listBash
\begin{lstlisting}[captionpos=b, caption=Merge PDF-Dateien]
uws@tux>pdfunite in1.pdf in2.pdf in3.pdf out.pdf
\end{lstlisting}
\end{flsuhleft}

19
Kapitel12/Screenfetch.tex Executable file
View File

@ -0,0 +1,19 @@
\section{Screenfetch}
\begin{flushleft}
Mit dem Programm {\ttfamily Screenfetch} kann man sich in der Console eine "Ubersicht seines Systems
anzeigen lassen.
\listBash
\begin{lstlisting}[captionpos=b, caption=Installation]
root@tux>zypper install screenfetch
root@tux>pacman -Sy screenfetch
\end{lstlisting}
\begin{figure}[ht]
\centering
\includegraphics[scale=0.5]{Kapitel12/Pictures/Screenfetch.jpg}
\caption{Screenfetch}
\end{figure}
\end{flushleft}

88
Kapitel12/Youtube.tex Executable file
View File

@ -0,0 +1,88 @@
\section{Youtube-dl - Video / Musik}
\begin{justify}
Mit dem Programm {\ttfamily youtube-dl} kann man die Videos von Youtube downloaden oder auch aus den Videos die Audio Spur extrahieren.
\subsection{Konfiguration}
Es gibt eine Systemweite Konfigurationsdatei und eine benutzerspezifische. Die Systemweite Datei {\ttfamily youtube-dl.conf} befindet sich im Verzeichnis /etc und die benutzerspezifische unter ~/.config/youtube-dl/config. Man kann auch verschiedene Konfigurationen erstellen und diese dann mit dem Parameter {\ttfamily \verb|--|config-location} verwenden. Mit dem Parameter {\ttfamily \verb|--|ignore-config} werden die Konfigurationsdateien nicht ber"ucksichtigt.
\listBash
\begin{lstlisting}[captionpos=b, caption=Beispiel Konfiguration]
uws@tux>cat audio.conf
# Location und entfernen der Youtube-ID aus dem Namen
-o "~/Music/%(title)s.%(ext)s"
# Nur Audio download
-x
# Audioformat
--audio-format mp3
# Audioqualitaet
--audio-quality 320
# Incl. ID3-Tags
--add-metadata
# Ignoriert Fehler in Playlisten
-i
# Vorhandene nicht ueberschreiben
-w
\end{lstlisting}
\listBash
\begin{lstlisting}[captionpos=b, caption=Beispiel alternative Konfiguration]
uws@tux>youtube-dl --config-location ~/.config/youtube-dl/config/video.conf youtube-url
\end{lstlisting}
Man kann sich auch verschiedene Aliase anlegen mit den Parametern.
\listBash
\begin{lstlisting}[captionpos=b, caption=Beispiel Alias]
uws@tux>alias yta="youtube-dl -x --audio-format mp3 --audio-quality 320 --add-metadata -o '/daten/music/%(title)s320.%(ext)s'"
\end{lstlisting}
%--------------------------------------------------------------------------------
% Subsction: Video Formate
%--------------------------------------------------------------------------------
\subsection{Video Formate}
Wird youtube-dl mit dem Parameter {\ttfamily -F} aufgerufen, so werden alle verf"ugbaren Formate des Videos ausgegeben und mit der Angabe des Format Codes wird dann das Video heruntergeladen.
\listBash
\begin{lstlisting}[captionpos=b, caption=Anzeige Video Formate]
uws@tux>youtube-dl -F https://www.youtube.com/watch?v=uekZpkYf7-E
[youtube] uekZpkYf7-E: Downloading webpage
[youtube] uekZpkYf7-E: Downloading video info webpage
[info] Available formats for uekZpkYf7-E:
format code extension resolution note
249 webm audio only DASH audio 57k , opus @ 50k, 2.02MiB
250 webm audio only DASH audio 76k , opus @ 70k, 2.68MiB
140 m4a audio only DASH audio 128k , m4a_dash container, mp4a.40.2@128k, 5.01MiB
171 webm audio only DASH audio 137k , vorbis@128k, 4.73MiB
251 webm audio only DASH audio 146k , opus @160k, 5.28MiB
278 webm 256x144 144p 96k , webm container, vp9, 24fps, video only, 3.66MiB
160 mp4 256x144 144p 109k , avc1.4d400c, 24fps, video only, 3.48MiB
242 webm 426x240 240p 222k , vp9, 24fps, video only, 7.15MiB
133 mp4 426x240 240p 353k , avc1.4d4015, 24fps, video only, 8.28MiB
243 webm 640x360 360p 419k , vp9, 24fps, video only, 14.05MiB
244 webm 854x480 480p 762k , vp9, 24fps, video only, 25.83MiB
134 mp4 640x360 360p 768k , avc1.4d401e, 24fps, video only, 18.12MiB
135 mp4 854x480 480p 1218k , avc1.4d401e, 24fps, video only, 30.53MiB
247 webm 1280x720 720p 1558k , vp9, 24fps, video only, 44.72MiB
136 mp4 1280x720 720p 1860k , avc1.4d401f, 24fps, video only, 48.42MiB
248 webm 1920x1080 1080p 2716k , vp9, 24fps, video only, 68.04MiB
137 mp4 1920x1080 1080p 3188k , avc1.640028, 24fps, video only, 69.19MiB
17 3gp 176x144 small , mp4v.20.3, mp4a.40.2@ 24k, 3.08MiB
36 3gp 320x180 small , mp4v.20.3, mp4a.40.2, 8.60MiB
18 mp4 640x360 medium , avc1.42001E, mp4a.40.2@ 96k, 25.05MiB (best)
uws@tux>youtube-dl -f 137 https://www.youtube.com/watch?v=uekZpkYf7-E
[youtube] uekZpkYf7-E: Downloading webpage
[youtube] uekZpkYf7-E: Downloading video info webpage
[download] Destination: Severija - Zu Asche, Zu Staub (Psycho Nikoros) - (Official Babylon Berlin O.S.T.)-uekZpkYf7-E.mp4
[download] 100% of 69.19MiB in 00:40
\end{lstlisting}
%-------------------------------------------------------------------------------
% Subsection: Audio extract
%-------------------------------------------------------------------------------
\subsection{Audio extract vom Video}
In dem n"achsten Beispiel wird die Audio Spur aus einem Video extrahiert und als MP3 Datei gespeichert.
\listBash
\begin{lstlisting}[captionpos=b, caption=Audio extract]
uws@tux>youtube-dl --extract-audio --audio-format mp3 --audio-quality 512k https://www.youtube.com/watch?v=uekZpkYf7-E
[youtube] uekZpkYf7-E: Downloading webpage
[youtube] uekZpkYf7-E: Downloading video info webpage
[youtube] uekZpkYf7-E: Downloading js player vfl07ioI6
[download] Destination: Severija - Zu Asche, Zu Staub (Psycho Nikoros) - (Official Babylon Berlin O.S.T.)-uekZpkYf7-E.webm
[download] 100% of 5.28MiB in 00:03
[ffmpeg] Destination: Severija - Zu Asche, Zu Staub (Psycho Nikoros) - (Official Babylon Berlin O.S.T.)-uekZpkYf7-E.mp3
Deleting original file Severija - Zu Asche, Zu Staub (Psycho Nikoros) - (Official Babylon Berlin O.S.T.)-uekZpkYf7-E.webm (pass -k to keep)
\end{lstlisting}
\end{justify}

325
Kapitel13/2019_01_01_KVM.tex Executable file
View File

@ -0,0 +1,325 @@
\section{KVM (Kernel-based Virtual Machine)}
\subsection{Voraussetzungen}
\begin{justify}
Die CPU muss die Virtualisierung unterst"utzen. Hierzu kann man die Eigenschaften der CPU abfragen. Intel CPU's m"ussen die Option {\ttfamily vmx} unterst"utzen und AMD CPU's {\ttfamily svm}.
\listBash
\begin{lstlisting}[captionpos=b, caption=Abfrage CPU Info, label=lst:bash]
root@tux>egrep '(vmx|svm)' /proc/cpuinfo
\end{lstlisting}
Zus"atzlich kann man nachschauen, ob die Kernel Module geladen worden sind.
\listBash
\begin{lstlisting}[captionpos=b, caption=Kernel Module]
root@tux>lsmod | grep kvm
kvm_intel 241664 0
kvm 704512 1 kvm_intel
irqbypass 16384 1 kvm
\end{lstlisting}
%-------------------------------------------------------------------------------
% Section: Installation KVM
%-------------------------------------------------------------------------------
\subsection{Installation KVM}
Au"ser dem Paket {\ttfamily KVM} werden noch andere n"utzliche Programme f"ur das erstellen und verwalten der Virtuellen Maschinen ben"otigt. F"ur {\ttfamily RedHat} Systeme lautet der Befehl f"ur die Installation {\ttfamily yum install}. Nach der Installation sollte ein Neustart des Systems erfolgen.\\
Folgende Pakete sind f"ur KVM n"utzlich:\\
\begin{itemize}
\item qemu-system-x86 => F"ur Intel X86 Systeme
\item qemu-system => F"ur andere Architekturen (PowerPC, ARM, Alpha, MIPS, Sparc, OpenRisc)
\item virtinst
\item lib-virt-daemon-system
\item libvirt-clients
\item libvirt-viewer
\item libvirt-manager => GUI f"ur KVM
\item openbsd-netcat => Zugriff per SSH
\end{itemize}
\listBash
\begin{lstlisting}[captionpos=b, caption=Installation, label=lst:bash]
root@tux>zypper install kvm
root@tux>zypper install qemu-kvm python-virtinst libvirt libvirt-python virt-mamanger libguestfs-tools
\end{lstlisting}
Ob die Installation erfolgreich war, kann man mit dem folgenden Befehl "uberpr"ufen.
\listBash
\begin{lstlisting}[captionpos=b, caption=Check Install]
uws@tux># User mit session, root mit system
uws@tux>virsh -c qemu:///session
Willkommen bei virsh, dem interaktiven Virtualisierungsterminal.
Tippen Sie: 'help' fuer eine Hilfe zu den Befehlen
'quit' zum Beenden
virsh #
\end{lstlisting}
%-------------------------------------------------------------------------------
% Section: User
%-------------------------------------------------------------------------------
\subsection{User}
Damit auch ein normaler User Virtuelle Maschinen erstellen und verwalten kann, muss er Mitglied in den Gruppen {\ttfamily libvirt, qemu, kvm} sein.
%-------------------------------------------------------------------------------
% Section: Network
%-------------------------------------------------------------------------------
\subsection{Network}
Nach der Installation wurde standardm"a"sig eine Netzwerk Konfiguration mit dem Namen {\ttfamily default} erstellt. Dieses kann man in der Verwaltungskonsole sich anzeigen lassen.
\listBash
\begin{lstlisting}[captionpos=b, caption=Show Netzwerk]
uws@tux>virsh -c qemu:///system
Willkommen bei virsh, dem interaktiven Virtualisierungsterminal.
Tippen Sie: 'help' fuer eine Hilfe zu den Befehlen
'quit' zum Beenden
virsh #net-list --all
Name Status Automatischer Start Bleibend
---------------------------------------------
default Aktiv yes yes
\end{lstlisting}
Sollte die {\ttfamily default} Konfiguration nicht gestartet sein, so kann man sie folgenderma"sen einschalten.
\listBash
\begin{lstlisting}[captionpos=b, caption=Einschalten Netzwerk]
uws@tux>virsh net-start default
Network default started
\end{lstlisting}
Um eine neue Konfiguration zu erstellen, muss man von einem Template (Vorlage) die neue Konfiguration erstellen. Das bedeutet, das vor dem erstellen in Virsh die Datei vorhanden sein muss. Hierzu k"onnen wir das default.xml aus dem Verzeichnis /etc/libvirt/qemu/networks verwenden. Wir kopieren es und anschlie"send "andern wir es ab. Bei dem erstellen der neuen Netzwerk Konfiguration ist die Angabe von {\ttfamily \verb|--|file} optional.
\listBash
\begin{lstlisting}[captionpos=b, caption=Create Netzwerk]
uws@tux>sudo cp /etc/libvirt/qemu/networks/default.xml /etc/libvirt/qemu/networks/myNetwork.xml
uws@tux>sudo vi /etc/libvirt/qemu/networks/myNetwork.xml
uws@tux>virsh -c qemu:///system
Willkommen bei virsh, dem interaktiven Virtualisierungsterminal.
Tippen Sie: 'help' fuer eine Hilfe zu den Befehlen
'quit' zum Beenden
virsh #net create --file /etc/libvirt/qemu/networks/myNetwork.xml
\end{lstlisting}
Die erstellten Virtuellen Maschinen haben Standard m"a"sig nur Netzzugriff auf die anderen Virtuellen Maschinen und zur Host Maschine. Sollen die Virtuellen Maschinen auch Zugriff auf das VLAN haben, so muss eine Netzwerk Br"ucke eingerichtet werden.\\
Hierzu wird in der Konfigurationsdatei, z.B. f"ur {\ttfamily eth0}, die Zeile {\ttfamily BRIDGE=br0} eingef"ugt und wenn dort eine IP-Adresse eingetragen ist, wird diese auskommentiert.\\
Nun wird eine Konfigurationsdatei {\ttfamily ifcfg-br0} f"ur die Netzwerk Br"ucke eingerichtet.
\listBash
\begin{lstlisting}[captionpos=b, caption=Einrichten Netzwerk Br"ucke]
root@tux># For RedHat and SuSE. in Debian /etc/network/interfaces
root@tux>cat /etc/sysconfig/network/ifcfg-br0
DEVICE="br0"
BOOTPROTO="static"
IPADDR="xxx.xxx.xxx.xxx"
NETMASK="255.255.25.0"
ONBOOT="yes"
TYPE="Briodge"
NM_CONTROLLED="no"
\end{lstlisting}
In der Datei {\ttfamily /etc/sysctl.conf} wird das {\ttfamily IP forwarding} aktiviert.
Danach muss ein Neustart der Maschine gemacht werden.
\listBash
\begin{lstlisting}[captionpos=b, caption=IP forwarding, label=lst:bash]
root@tux>grep "ipv3" systemctl.conf
inet.ipv3.ip_forward=1
\end{lstlisting}
%-------------------------------------------------------------------------------
% Section: Maschine Location
%-------------------------------------------------------------------------------
\subsection{Maschine Location}
Standard m"a"sig werden die Maschinen im Verzeichnis {\ttfamily /var/lib/libvirt/images} erstellt /
abgelegt. Es sollte also ausreichend Platz vorhanden sein.
%-------------------------------------------------------------------------------
% Section: Create Maschine
%-------------------------------------------------------------------------------
\subsection{Create Maschine}
F"ur {\ttfamily OpenSuSE} lautet der Befehl f"ur das Erstellen einer Maschine {\ttfamily vm-install} und f"ur {\ttfamily RedHat} Systeme {\ttfamily virt-install}. Nachfolgend ein Beispiel, wie unter RedHat eine Maschine erstellt wird.
\listBash
\begin{lstlisting}[captionpos=b, caption=Erstellen einer Maschine, label=lst:bash]
root@tux>virt-install \
-n myLinux \
--description "My own Linux Machine" \
--os-type=Linux \
--os-variante=debian7 \
--ram=4096 \
--vcpus=2 \
--disk path=/vmstore/machine/myLinux/myLinux.img,bus=virtio,size=20 \
--graphics none \
--cdrom /vmstore/images/debian7_x86_64.iso \
--network bridge:br0
\end{lstlisting}
\begin{table}[ht]
\begin{tabular}{p{4cm}p{12cm}} % l => Text left, c => center, r => right, p => zeilenumbruch
\rowcolor{hellgrau}\emph{\textbf{Option}} & \emph{\textbf{Beschreibung}}\\
\hline
\hline
-n & Name der Maschine\\
\verb|--|description & Beschreibung der Maschine\\
\verb|--|os-type & Linux, Solaris, Unix oder Windows\\
\verb|--|os-variante & Distribution type. Z.B. rhel7, centos6, debian7, suse13, win2k, win2k8, win7, win8\\
\verb|--|ram & Memory in MB\\
\verb|--|vcpus & Anzahl Virtuelle CPU\\
\verb|--|disk & Lage der Virtuellen Maschine und Gr"o"se der Festplatte in GB\\
\verb|--|graphics & None f"ur die Benutzung einer Text console auf dem VM serial Port, anstelle der Graphischen VNC Windows. Ist der xmanager aktiv, so kann der Parameter ignoriert werden.\\
\verb|--|cdrom & Installations Medium\\
\verb|--|network & Angabe des Netzwerk Devices\\
\end{tabular}
\caption{Beschreibung}
\end{table}
%-------------------------------------------------------------------------------
% Section: Konfiguration
%-------------------------------------------------------------------------------
\subsection{Konfiguration}
Die Konfiguration der virtuellen Maschinen wird in dem Verzeichnis {\ttfamily /etc/libvirt/qemu} abgelegt. Mit dem Befehl {\ttfamily virsh edit <VmName>} kann die Konfigurationsdatei bearbeitet werden.
\listBash
\begin{lstlisting}[captionpos=b, caption=Edit Maschine, label=lst:bash]
root@tux>virsh edit myLinux
\end{lstlisting}
%-------------------------------------------------------------------------------
% Section: Maschinen anzeigen
%-------------------------------------------------------------------------------
\subsection{Maschinen anzeigen}
Mit dem Befehl {\ttfamily virsh list --all} kann man sich die Virtuellen Maschinen anzeigen lassen.
\listBash
\begin{lstlisting}[captionpos=b, caption=Auflistung Maschinen, label=lst:bash]
root@tux>virsh list --all
ID Name State
-----------------------------
1 myLinux running
\end{lstlisting}
Weitere Informationen "uber die virtuelle Maschine k"onnen mit {\ttfamily virsh dominfo} abgefragt werden.
\listBash
\begin{lstlisting}[captionpos=b, caption=Auflistung Maschinen, label=lst:bash]
root@tux>virsh dominfo myLinux
Id: 1
Name: myLinux
UUID: 58083ae7-37dr-46c2-63d9-bd5dc49f642
OS Type: Linux
State: running
CPU(s): 2
CPU time: 305.4s
Max memory: 2097152 KiB
Used memory: 1032452 KiB
Persitent: yes
Autostart: disable
Manged save: no
Security model: selinux
Security DOI: 0
Security Label: system_u:system_r:virt_t:s0:c968,c799 (permissive)
\end{lstlisting}
Die CPU und Memory Belegung kann man sich mit {\ttfamily virt-top} anzeigen lassen.
%-------------------------------------------------------------------------------
% Section: VM Console
%-------------------------------------------------------------------------------
\subsection{VM Console}
Anmelden an der virtuellen Maschine kann mit dem Kommando {\ttfamily virsh console} gemacht werden. Die Console kann dann mit {\ttfamily ctrl +} wieder verlassen.
\listBash
\begin{lstlisting}[captionpos=b, caption=Verbinden Maschine, label=lst:bash]
root@tux>virsh console myLinux
\end{lstlisting}
%-------------------------------------------------------------------------------
% Section: Shutdown, Reboot
%-------------------------------------------------------------------------------
\subsection{Shutdown, Reboot und Start}
\listBash
\begin{lstlisting}[captionpos=b, caption=Verbinden Maschine, label=lst:bash]
root@tux>virsh shutdown myLinux
root@tux>virsh reboot myLinux
root@tux>virsh start myLinux
\end{lstlisting}
%-------------------------------------------------------------------------------
% Section: Cobvert Disk
%-------------------------------------------------------------------------------
\subsection{Convert Disk}
Eine Disk kann man in einem anderen Format konvertieren. Die Unterst"utzten Formate kann man sich mit dem folgenden Befehl sich anzeigen lassen.
\listBash
\begin{lstlisting}[captionpos=b, caption=Auflistung Formate, label=lst:bash]
root@tux>qemu-img -h | tail -n1
\end{lstlisting}
OVA-Dateien sind nichts anderes als Tar-Archive.
\listBash
\begin{lstlisting}[captionpos=b, caption=Entpacken OVA-Datei, label=lst:bash]
root@tux>tar -xvf <ova_file>
\end{lstlisting}
Mit {\ttfamily qemu-img convert} kann man das Ausgangsformat konvertieren.
\listBash
\begin{lstlisting}[captionpos=b, caption=Convert VMDK-Datei, label=lst:bash]
root@tux>qemu-img convert -o qcowl <vmdk.file> output sdb.qcow2
\end{lstlisting}
%-------------------------------------------------------------------------------
% Section: Resize Disk
%-------------------------------------------------------------------------------
\subsection{Resize Disk}
Eine Disk wird mit {\ttfamily qemu-img resize} vergr"o"s ert. Im nachfolgenden Beispiel wird die Disk um 10GB vergr"o"s ert.
\listBash
\begin{lstlisting}[captionpos=b, caption=Resize Disk, label=lst:bash]
root@tux>qemu-img resize <disk_image> +10G
\end{lstlisting}
%-------------------------------------------------------------------------------
% Section: Huge Pages
%-------------------------------------------------------------------------------
\subsection{Huge Pages}
Um {\ttfamily Huge Pages} f"ur die Virtuellen Maschinen zu Verf"ugung zu stellen, sind folgende Schritte zu machen.\\
Als erstes wird in der Datei {\ttfamily /etc/fstab} die nachfolgende Zeile eingef"ugt.
\listBash
\begin{lstlisting}[captionpos=b, caption=Edit fstab, label=lst:bash]
root@tux>grep huge /etc/fstab
hugetlbfs /dev/hugepages hugetlbfs mode=1770,gid=78 0 0
\end{lstlisting}
Nun mounten wir die {\ttfamily hugepages} und kontrollieren das erfolgreiche verbinden.
\listBash
\begin{lstlisting}[captionpos=b, caption=Mount Hugepages, label=lst:bash]
root@tux>mount /dev/hugepages
root@tux>mount | grep huge
hugetlbfs on /dev/hugepages type hugetlbfs (rw,relatime,mode=1770,gid=78)
\end{lstlisting}
Nun schauen wir nach, wie gro"s die Hugepages sind.
\listBash
\begin{lstlisting}[captionpos=b, caption=Gr"o"ss e Hugepages, label=lst:bash]
root@tux>grep Hugepagesize /proc/meminfo
Hugepagesize: 2048kB
\end{lstlisting}
Die Anzahl der Hugepages wird wie folgt berechnet: {\ttfamily RAM der virtuellen Maschine / 2}. Der ermittelte Wert wird dann aufgerundet. Beispiel: {\ttfamily 2GB RAM => 2048/2=1024 ~1050}. Dieser Wert wird nun eingetragen und kontrollieren es. Laufen mehrere Maschine auf dem Host, so z"ahlt man den RAM von allen Maschinen zusammen.
\listBash
\begin{lstlisting}[captionpos=b, caption=Check Hugepages, label=lst:bash]
root@tux>echo 1050 > /proc/sys/vm/nr\_hugepages
root@tux>grep HugePages\_Total /proc/meminfo
HugePages\_Total: 1050
\end{lstlisting}
Nun wird die Maschine mit der Option {\ttfamily mem-path} gestartet.
\listBash
\begin{lstlisting}[captionpos=b, caption=Start Maschine, label=lst:bash]
root@tux>qemu-system-x86_64 -enable-kvm -m 2048 -mem-path /dev/hugepages -
hda <disk> ..
root@tux>grep HugePages /proc/meminfo
\end{lstlisting}
F"ur das Dauerhafte einrichten der Huge Pages, wird in der Datei {\ttfamily /etc/sysctl.d/40-hugepages.conf} die folgende Zeile eingef"ugt. \\
Hinweis: Nicht f"ur Arch Linux Systeme.
\listBash
\begin{lstlisting}[captionpos=b, caption=Enable Hugepages, label=lst:bash]
root@tux>cat /etc/sysctl.d/40-hugepages.conf
vm.nr_hugepages = 1050
\end{lstlisting}
In der {\ttfamily /etc/default/qemu-kvm} wird der Wert von {\ttfamily KVM\_HUGEPAGES} von {\ttfamily 0}
auf {\ttfamily 1} gestellt und anschlie"ss end der Libvirt Dienst neu gestartet.\\
Hinweis: Gilt nur f"ur Debian oder Red Hat Systeme.
\listBash
\begin{lstlisting}[captionpos=b, caption=Neustart Service, label=lst:bash]
root@tux>grep KVM\_HUGEPAGES /etc/default/qemu-kvm
KVM\_HUGEPAGES = 1 # 0 = disable, 1 = enable
root@tux>systemctl restart libvirt-bin
root@tux># or
root@tux>service libvirt-bin restart
\end{lstlisting}
In der Konfiguration der Virtuellen Maschinen wir der nachfolgende Abschnitt eingef"ugt.
\listBash
\begin{lstlisting}[captionpos=b, caption=Konfiguration Maschine, label=lst:bash]
root@tux>virsh edit <machine>
<memoryBacking>
<hugepages/>
</memoryBacking>
\end{lstlisting}
\end{justify}

View File

@ -0,0 +1,65 @@
\section{Virtual Box}
\subsection{Konfiguration}
\begin{justify}
Mit der Variable {\ttfamily VBOX\_USER\_HOME} kann man die Ablage der Konfiguration an einer zentralen Stelle ablegen, wo alle Benutzer Zugriff darauf haben. Normalerweise werden die erstellten Maschinen nur f"ur den jeweiligen Benutzer angezeigt, der die Maschinen erstellt hat, da die Konfiguration
standardm"a"s ig im Home Verzeichnis abgelegt wird.
\listBash
\begin{lstlisting}[captionpos=b, caption=Setzen Variable, label=lst:bash]
uws@tux>echo $VBOX_USER_HOME
/vm/configuration
\end{lstlisting}
%-------------------------------------------------------------------------------
% Subsection: Verwaltung Console
%-------------------------------------------------------------------------------
\subsection{Verwaltung Console}
Um virtuelle Maschinen auf der Console zu verwalten, gibt es das Programm {\ttfamily VBoxManage}.
\listBash
\begin{lstlisting}[captionpos=b, caption=Beispiele Verwaltung]
uws@tux># Start VM's
uws@tux>VBoxSDL --startvm "Windows 7" # Alternative zu VBoxManage
uws@tux>VBoxManage startvm "Windows 7"
uws@tux># List VM's
uws@tux>vboxmanage list vms
uws@tux># Info ueber VM's
uws@tux>VBoxManage showvminfo "Windows 7"
uws@tux># Control
uws@tux>VBoxManage controlvm "Windows 7" pause
uws@tux>VBoxManage controlvm "Windows 7" resume
uws@tux>VBoxManage controlvm "Windows 7" reset
uws@tux>VBoxManage controlvm "Windows 7" poweroff
uws@tux>VBoxManage controlvm "Windows 7" acpipowerbutton
uws@tux># Export / Import
uws@tux>VBoxManage export "Windows 7" -o win7.ovf
uws@tux>VBoxManage import win7.ovf
\end{lstlisting}
Eine Disk kann man folgenderma"sen erstellen / konvertieren.
\listBash
\begin{lstlisting}[captionpos=b, caption=Create Disk]
uws@tux># Create Disk, Size in MB
uws@tux>VBoxManage createmedium disk --filename disk_sdb.vdi --size 30000
uws@tux># Konvert Disk
uws@tux>dd if=/dev/sdc of=disk.raw
uws@tux>VBoxManage convertfromraw disk.raw disk_sdc.vdi --format VDI
\end{lstlisting}
%-------------------------------------------------------------------------------
% Subsection: Gasterweiterung
%-------------------------------------------------------------------------------
\subsection{Gasterweiterung}
Wenn die Installation der VirtualBox Gasterweiterung mit einer Fehlermeldung nicht vollst"andig durchgef"uhrt wird, so m"ussen die Kernel Source noch installiert werden. Eventuell m"ussen auch die Module {\ttfamily gcc, make, automake} und {\ttfamily autoconf} installiert werden.
\listBash
\begin{lstlisting}[captionpos=b, caption=Kernel Source, label=lst:bash]
uws@tux>sudo zypper install kernel-source kernel-symbol
uws@tux>sudo zypper install gcc make automake autoconf
\end{lstlisting}
%-------------------------------------------------------------------------------
% Subsection: Phpvirtualbox
%-------------------------------------------------------------------------------
\subsection{PHPVirtualbox}
Mit dem Programm PHPVirtualbox kann man Virtuelle Maschinen in einem Browser verwalten. Unter OpenMediaVault wird das Programm in dem Verzeichnis /usr/share/phpvirtualbox installiert.
\end{justify}

24
Kapitel13/HyperV.tex Executable file
View File

@ -0,0 +1,24 @@
\section{Hyper-V}
%------------------------------------------------------------------------------
% Subsection: Light Display Manager
%------------------------------------------------------------------------------
\subsection{ Light Display Manager}
\begin{justify}
Kommt bei dem Starten einer Live-DVD / Stick die Meldung: \
[FAILED] Failed to start Light Display Manager \
so muss ein Paket nachinstalliert werden.
\listBash
\begin{lstlisting}[captionpos=b, caption=Solution]
CTRL+ALT+F2
Login as Manjaro/manjaro
manjaro@manjaro>sudo pacman -Syu
manjaro@manjaro>sudo pacman -S xf86-video-fbdev
manjaro@manjaro>sudo systemctl start lightdn
\end{lstlisting}
%------------------------------------------------------------------------------
% Subsection: Auswahl OS-System unvollständig
%------------------------------------------------------------------------------
%\subsection{Auswahl OS-System unvollständig}
\end{justify}

9
Kapitel13/Index.tex Executable file
View File

@ -0,0 +1,9 @@
\chapter{Virtualisierung}
%-------------------------------------------
% load other documents
%------------------------------------------
\input{Kapitel13/KVM}
\newpage
\input{Kapitel13/Troubleshooting}
\include{Kapitel13/VirtualBox}
\include{Kapitel13/HyperV}

511
Kapitel13/KVM.tex Executable file
View File

@ -0,0 +1,511 @@
\section{KVM (Kernel-based Virtual Machine)}
\subsection{Voraussetzungen}
\begin{justify}
Die CPU muss die Virtualisierung unterst"utzen. Hierzu kann man die Eigenschaften der CPU abfragen. Intel CPU's m"ussen die Option {\ttfamily vmx} unterst"utzen und AMD CPU's {\ttfamily svm}.
\listBash
\begin{lstlisting}[captionpos=b, caption=Abfrage CPU Info]
root@tux>egrep '(vmx|svm)' /proc/cpuinfo
\end{lstlisting}
Zus"atzlich kann man nachschauen, ob die Kernel Module geladen worden sind.
\listBash
\begin{lstlisting}[captionpos=b, caption=Kernel Module]
root@tux>lsmod | grep kvm
kvm_intel 241664 0
kvm 704512 1 kvm_intel
irqbypass 16384 1 kvm
\end{lstlisting}
%-------------------------------------------------------------------------------
% Section: Installation KVM
%-------------------------------------------------------------------------------
\subsection{Installation KVM}
Au"ser dem Paket {\ttfamily KVM} werden noch andere n"utzliche Programme f"ur das erstellen und verwalten der Virtuellen Maschinen ben"otigt. F"ur {\ttfamily RedHat} Systeme lautet der Befehl f"ur die Installation {\ttfamily yum install}. Nach der Installation sollte ein Neustart des Systems erfolgen.\\
Folgende Pakete sind f"ur KVM n"utzlich:\\
\begin{itemize}
\item qemu-kvm
\item qemu-system-x86 => F"ur Intel X86 Systeme
\item qemu-system => F"ur andere Architekturen (PowerPC, ARM, Alpha, MIPS, Sparc, OpenRisc)
\item virtinst
\item libvirt-daemon-system
\item libvirt-clients
\item libvirt-viewer
\item libvirt-manager => GUI f"ur KVM
\item bridge-utils
\item genisoimage
\item libosinfo-bin
\item openbsd-netcat => Zugriff per SSH
\end{itemize}
F"ur Manjaro (Arch) werden folgende Pakete ben"otigt.
\begin{itemize}
\item qemu
\item qemu-guest-agent
\item qemu-arch-extra
\item virt-manager
\item virt-viewer
\item bridge-utils
\item ebtables
\item iptables
\end{itemize}
\listBash
\begin{lstlisting}[captionpos=b, caption=Installation]
root@tux>zypper install kvm
root@tux>zypper install qemu-kvm python-virtinst libvirt libvirt-python virt-mamanger libguestfs-tools
root@tux># Arch install
root@tux>pacman -S qemu qemu-guest-agent qemu-arch-extra virt-manager virt-viewer bridge-utils
root@tux># Firewall
root@tux>pacman -S ebtables iptables
root@tux># After reboot
root@tux>systemctl start libvirtd
root@tux>systemctl enable libvirtd
\end{lstlisting}
Nach der Installation sollte der Server / PC neu gestartet werden. Ob die Installation erfolgreich war, kann man mit dem folgenden Befehl "uberpr"ufen.
\listBash
\begin{lstlisting}[captionpos=b, caption=Check Install]
uws@tux># User mit session, root mit system
uws@tux>virsh -c qemu:///session
Willkommen bei virsh, dem interaktiven Virtualisierungsterminal.
Tippen Sie: 'help' fuer eine Hilfe zu den Befehlen
'quit' zum Beenden
virsh #
\end{lstlisting}
%-------------------------------------------------------------------------------
% Section: User
%-------------------------------------------------------------------------------
\subsection{User}
Damit auch ein normaler User Virtuelle Maschinen erstellen und verwalten kann, muss er Mitglied in den Gruppen {\ttfamily libvirt, libvirt-qemu, qemu, kvm} sein. In den Distributionen sind nicht alle Gruppen vorhanden. In Arch Linux sind es zum Beispiel {\ttfamily kvm und libvirt}. Unter Debian sind es die Gruppen {\ttfamily kvm, libvirt, libvirt-qemu}.
%-------------------------------------------------------------------------------
% Section: Datastore
%-------------------------------------------------------------------------------
\subsection{Datastore}
Einen Datastore kann man mit einer XML-Datei erstellen.
\listBash
\begin{lstlisting}[captionpos=b, caption=Datastore]
uws@tux>cat Datastore.xml
<pool type='dir'>
<name>VmstoreSSD</name>
<uuid>1c2b3c2d-0140-1e49-a571-840f4c88210d</uuid>
<capacity unit='bytes'>0</capacity>
<allocation unit='bytes'>0</allocation>
<available unit='bytes'>0</available>
<source>
</source>
<target>
<path>/vmstore/machines</path>
<permissions>
<mode>0755</mode>
<owner>-1</owner>
<group>-1</group>
</permissions>
</target>
</pool>
uws@tux># Create Datastore
uws@tux>sudo virsh pool-create /vmstore/config/datastore/Datastore.xml
Pool VmstoreSSD aus Datastore.xml erstellt
\end{lstlisting}
%-------------------------------------------------------------------------------
% Section: Network
%-------------------------------------------------------------------------------
\subsection{Network}
Nach der Installation wurde standardm"a"sig eine Netzwerk Konfiguration mit dem Namen {\ttfamily default} erstellt. Dieses kann man in der Verwaltungskonsole sich anzeigen lassen.
\listBash
\begin{lstlisting}[captionpos=b, caption=Show Netzwerk]
uws@tux>virsh -c qemu:///system
Willkommen bei virsh, dem interaktiven Virtualisierungsterminal.
Tippen Sie: 'help' fuer eine Hilfe zu den Befehlen
'quit' zum Beenden
virsh #net-list --all
Name Status Automatischer Start Bleibend
---------------------------------------------
default Aktiv yes yes
\end{lstlisting}
Sollte die {\ttfamily default} Konfiguration nicht gestartet sein, so kann man sie folgenderma"sen einschalten.
\listBash
\begin{lstlisting}[captionpos=b, caption=Einschalten Netzwerk]
uws@tux>virsh net-start default
Network default started
\end{lstlisting}
Soll ein Netzwerk automatisch gestartet werden, so macht man das mit {\ttfamily net-autostart <NetworkName>}. F"ur das Abschalten gibt man noch die Option {\ttfamily \verb|--|disable} mit an.
\listBash
\begin{lstlisting}[captionpos=b, caption=Autostart Netzwerk]
uws@tux>virsh -c qemu:///system
Willkommen bei virsh, dem interaktiven Virrtualisierungsterminal.
Tippen Sie: 'help' fur eine Hilfe zu den Befehlen
'quit' zum Beenden
virsh #net-autostart default
virsh #net-autostart default --disable
\end{lstlisting}
Um eine neue Konfiguration zu erstellen, muss man von einem Template (Vorlage) die neue Konfiguration erstellen. Das bedeutet, das vor dem erstellen in Virsh die Datei vorhanden sein muss. Hierzu k"onnen wir das default.xml aus dem Verzeichnis /etc/libvirt/qemu/networks verwenden. Wir kopieren es und anschlie"send "andern wir es ab. Bei dem erstellen der neuen Netzwerk Konfiguration ist die Angabe von {\ttfamily \verb|--|file} optional.
\listBash
\begin{lstlisting}[captionpos=b, caption=Create Netzwerk]
uws@tux>sudo cp /etc/libvirt/qemu/networks/default.xml /etc/libvirt/qemu/networks/myNetwork.xml
uws@tux>sudo vi /etc/libvirt/qemu/networks/myNetwork.xml
uws@tux>virsh -c qemu:///system
Willkommen bei virsh, dem interaktiven Virtualisierungsterminal.
Tippen Sie: 'help' fuer eine Hilfe zu den Befehlen
'quit' zum Beenden
virsh #net create --file /etc/libvirt/qemu/networks/myNetwork.xml
\end{lstlisting}
Die erstellten Virtuellen Maschinen haben Standardm"a"sig nur Netzzugriff auf die anderen Virtuellen Maschinen und zur Host Maschine. Sollen die Virtuellen Maschinen auch Zugriff auf das VLAN haben, so muss eine Netzwerk Br"ucke eingerichtet werden.\\
Hierzu wird in der Konfigurationsdatei, z.B. f"ur {\ttfamily eth0}, die Zeile {\ttfamily BRIDGE=br0} eingef"ugt und wenn dort eine IP-Adresse eingetragen ist, wird diese auskommentiert.\\
Nun wird eine Konfigurationsdatei {\ttfamily ifcfg-br0} f"ur die Netzwerk Br"ucke eingerichtet.
\listBash
\begin{lstlisting}[captionpos=b, caption=Einrichten Netzwerk Br"ucke]
root@tux># For RedHat and SuSE. in Debian /etc/network/interfaces
root@tux>cat /etc/sysconfig/network/ifcfg-br0
DEVICE="br0"
BOOTPROTO="static"
IPADDR="xxx.xxx.xxx.xxx"
NETMASK="255.255.255.0"
ONBOOT="yes"
TYPE="Bridge"
NM_CONTROLLED="no"
root@tux># For Arch Linux with systemd
root@tux>cat /etc/systemd/network/mybridge.netdev
[NetDev]
Name=br0
Kind=bridge
root@tux>systemctl restart systemd-networkd
root@tux>cat /etc/systemd/network/bind.network
[Match]
Type=ether
[Network]
Bridge=br0
root@tux>cat /etc/systemd/network/mybridge.network
[Match]
Name=br0
[Network]
DHCP=ipv4
# Static IP
#DNS=192.168.10.254
#Address=192.168.10.87/24
#Gateway=192.168.10.254
root@tux>systemctl restart systemd-networkd
\end{lstlisting}
In der Datei {\ttfamily /etc/sysctl.conf} wird das {\ttfamily IP forwarding} aktiviert.
Danach muss ein Neustart der Maschine gemacht werden.
\listBash
\begin{lstlisting}[captionpos=b, caption=IP forwarding]
root@tux>grep "ipv3" systemctl.conf
inet.ipv3.ip_forward=1
\end{lstlisting}
%-------------------------------------------------------------------------------
% Section: Maschine Location
%-------------------------------------------------------------------------------
\subsection{Maschine Location}
Standard m"a"sig werden die Maschinen im Verzeichnis {\ttfamily /var/lib/libvirt/images} erstellt /
abgelegt. Es sollte also ausreichend Platz vorhanden sein.
%-------------------------------------------------------------------------------
% Section: Create Disk
%-------------------------------------------------------------------------------
\subsection{Create Disk}
Eine Disk f"ur die Virtuelle Maschine kann man mit {\ttfamily qemu\verb|_|img create} erstellen. In der Tabelle sind die Formate aufgef"uhrt, die man erstellen kann.
\begin{table}[ht]
\begin{tabular}{p{2cm}p{14cm}} % l => Text left, c => center, r => right, p => zeilenumbruch
\rowcolor{hellgrau}\emph{\textbf{Formate}} & \emph{\textbf{Beschreibung}}\\
\hline
%\hline
raw & Standard Format. Verf"ugt aber nicht "uber spezielle Funktionen wie Komprmierung, Snapshot usw. Performance m"a"sig am schnellsten\\
qcow2 & KVM Format mit den speziellen Funktionen\\
qed & Ein Qemu Format. Die Leistung ist besser als von Qcow2\\
qcow & Ist der Vorg"anger von qcow2\\
vmdk & Wird von VmWare verwendet\\
vdi & Wird von Virtual Box verwendet\\
vpc & Ist die erste Generation von Virtual PC\\
\end{tabular}
\caption{Disk Formate}
\end{table}
\listBash
\begin{lstlisting}[captionpos=b, caption=Create Disk]
uws@tux>qemu-img create -f qcow2 <Path2Disk>/sda.qcow2 40G
Formatting 'sda.qcow2', fmt=qcow2 size=42949672960 cluster_size=65536 preallocation=full lazy_refcounts=0ff refcount_bits=16
\end{lstlisting}
%-------------------------------------------------------------------------------
% Section: Info Disk
%-------------------------------------------------------------------------------
\subsection{Info Disk}
Informationen "uber eine Disk erh"alt man mit {\ttfamily qemu-img info}.
\listBash
\begin{lstlisting}[captionpos=b, caption=Info Disk]
uws@tux>qemu-img info <Path2Disk>/sda.qcow2
mage: sda.qcow2
file format: qcow2
virtual size: 40G (42949672960 bytes)
disk size: 40G
cluster_size: 65536
Format specific information:
compat: 1.1
lazy refcounts: false
refcount bits: 16
corrupt: false
\end{lstlisting}
%-------------------------------------------------------------------------------
% Section: Create Maschine
%-------------------------------------------------------------------------------
\subsection{Create Maschine}
F"ur {\ttfamily OpenSuSE} lautet der Befehl f"ur das Erstellen einer Maschine {\ttfamily vm-install} und f"ur {\ttfamily RedHat} Systeme {\ttfamily virt-install}. Nachfolgend ein Beispiel, wie unter RedHat eine Maschine erstellt wird.
\listBash
\begin{lstlisting}[captionpos=b, caption=Erstellen einer Maschine]
root@tux>virt-install \
-n myLinux \
--description "My own Linux Machine" \
--os-type=Linux \
--os-variante=debian7 \
--ram=4096 \
--vcpus=2 \
--disk path=/vmstore/machine/myLinux/myLinux.img,bus=virtio,size=20 \
--graphics none \
--cdrom /vmstore/images/debian7_x86_64.iso \
--network bridge:br0
\end{lstlisting}
\begin{table}[ht]
\begin{tabular}{p{4cm}p{12cm}} % l => Text left, c => center, r => right, p => zeilenumbruch
\rowcolor{hellgrau}\emph{\textbf{Option}} & \emph{\textbf{Beschreibung}}\\
\hline
\hline
-n & Name der Maschine\\
\verb|--|description & Beschreibung der Maschine\\
\verb|--|os-type & Linux, Solaris, Unix oder Windows\\
\verb|--|os-variante & Distribution type. Z.B. rhel7, centos6, debian7, suse13, win2k, win2k8, win7, win8\\
\verb|--|ram & Memory in MB\\
\verb|--|vcpus & Anzahl Virtuelle CPU\\
\verb|--|disk & Lage der Virtuellen Maschine und Gr"o"se der Festplatte in GB\\
\verb|--|graphics & None f"ur die Benutzung einer Text console auf dem VM serial Port, anstelle der Graphischen VNC Windows. Ist der xmanager aktiv, so kann der Parameter ignoriert werden.\\
\verb|--|cdrom & Installations Medium\\
\verb|--|network & Angabe des Netzwerk Devices\\
\end{tabular}
\caption{Beschreibung}
\end{table}
%-------------------------------------------------------------------------------
% Section: Konfiguration
%-------------------------------------------------------------------------------
\subsection{Konfiguration}
Die Konfiguration der virtuellen Maschinen wird in dem Verzeichnis {\ttfamily /etc/libvirt/qemu} abgelegt. Mit dem Befehl {\ttfamily virsh edit <VmName>} kann die Konfigurationsdatei bearbeitet werden.
\listBash
\begin{lstlisting}[captionpos=b, caption=Edit Maschine]
root@tux>virsh edit myLinux
\end{lstlisting}
%-------------------------------------------------------------------------------
% Section: Maschinen anzeigen
%-------------------------------------------------------------------------------
\subsection{Maschinen anzeigen}
Mit dem Befehl {\ttfamily virsh list --all} kann man sich die Virtuellen Maschinen anzeigen lassen.
\listBash
\begin{lstlisting}[captionpos=b, caption=Auflistung Maschinen]
root@tux>virsh list --all
ID Name State
-----------------------------
1 myLinux running
\end{lstlisting}
Weitere Informationen "uber die virtuelle Maschine k"onnen mit {\ttfamily virsh dominfo} abgefragt werden.
\listBash
\begin{lstlisting}[captionpos=b, caption=Auflistung Maschinen]
root@tux>virsh dominfo myLinux
Id: 1
Name: myLinux
UUID: 58083ae7-37dr-46c2-63d9-bd5dc49f642
OS Type: Linux
State: running
CPU(s): 2
CPU time: 305.4s
Max memory: 2097152 KiB
Used memory: 1032452 KiB
Persitent: yes
Autostart: disable
Manged save: no
Security model: selinux
Security DOI: 0
Security Label: system_u:system_r:virt_t:s0:c968,c799 (permissive)
\end{lstlisting}
Die CPU und Memory Belegung kann man sich mit {\ttfamily virt-top} anzeigen lassen.
%-------------------------------------------------------------------------------
% Section: VM Console
%-------------------------------------------------------------------------------
\subsection{VM Console}
Anmelden an der virtuellen Maschine kann mit dem Kommando {\ttfamily virsh console} gemacht werden. Die Console kann dann mit {\ttfamily ctrl +} wieder verlassen.
\listBash
\begin{lstlisting}[captionpos=b, caption=Verbinden Maschine]
root@tux>virsh console myLinux
\end{lstlisting}
%-------------------------------------------------------------------------------
% Section: Shutdown, Reboot
%-------------------------------------------------------------------------------
\subsection{Shutdown, Reboot und Start}
\listBash
\begin{lstlisting}[captionpos=b, caption=Verbinden Maschine]
root@tux>virsh shutdown myLinux
root@tux>virsh reboot myLinux
root@tux>virsh start myLinux
\end{lstlisting}
%-------------------------------------------------------------------------------
% Section: Convert Disk
%-------------------------------------------------------------------------------
\subsection{Convert Disk}
Eine Disk kann man in einem anderen Format konvertieren. Die Unterst"utzten Formate kann man sich mit dem folgenden Befehl sich anzeigen lassen.
\listBash
\begin{lstlisting}[captionpos=b, caption=Auflistung Formate]
root@tux>qemu-img -h | tail -n1
\end{lstlisting}
OVA-Dateien sind nichts anderes als Tar-Archive.
\listBash
\begin{lstlisting}[captionpos=b, caption=Entpacken OVA-Datei]
root@tux>tar -xvf <ova_file>
\end{lstlisting}
Mit {\ttfamily qemu-img convert} kann man das Ausgangsformat konvertieren. Mit der Option {\ttfamily -O} wird das output Format angegeben. Mit der optionalen Option {\ttfamily -f} kann man das Ausgangsformat angeben. Eine Liste der verfügbaren Formate kann man in der Tabelle 14.1 sehen.
\listBash
\begin{lstlisting}[captionpos=b, caption=Convert VMDK-Datei]
root@tux>qemu-img convert [-f] -O qcow2 sdb.qcow output sdb.qcow2
\end{lstlisting}
%-------------------------------------------------------------------------------
% Section: Resize Disk
%-------------------------------------------------------------------------------
\subsection{Resize Disk}
Eine Disk wird mit {\ttfamily qemu-img resize} vergr"o"s ert. Im nachfolgenden Beispiel wird die Disk um 10GB vergr"o"s ert.
\listBash
\begin{lstlisting}[captionpos=b, caption=Resize Disk]
root@tux>qemu-img resize <disk_image> +10G
\end{lstlisting}
%-------------------------------------------------------------------------------
% Section: Mount Disk
%-------------------------------------------------------------------------------
\subsection{Mount Disk Image}
Ein Disk Image kann man folgenderma\ss{}en mounten.
\listBash
\begin{lstlisting}[captionpos=b, caption=Mount Siak Image]
root@tux># Enable NBD
root@tux>modprobe nbd max_part=8
root@tux># Connect Disk Image as network block device
root@tux>qemu-nbd --connect=/dev/nbd0 /var/vmstore/pool/pcgov180.qcow
root@tux># List virtual machine partitions
root@tux>fdisk /dev/nbd0 -l
root@tux># Mount Disk Image
root@tux>mount /dev/nbd0p3 /mnt/nbd0p3
\end{lstlisting}
Nach erfolgreicher Arbeit an dem Image kann man das Image wieder aushängen.
\listBash
\begin{lstlisting}[captionpos=b, caption=Umount Disk Image]
root@tux>umount /mnt/nbd0p3
root@tux>qemu-nbd --disconnect /dev/nbd0
root@tux>rmmod nbd
\end{lstlisting}
%-------------------------------------------------------------------------------
% Section: Show UUID Disk-Image
%-------------------------------------------------------------------------------
\subsection{Anzeige UUID}
Eine Ausgabe der UUID von den Partitionen des Disk-Images kann man mit dem Befehl {\ttfamily virt-filesystems} machen. Hierzu muss das Paket {\ttfamily libguestfs-tools} installiert sein
\listBash
\begin{lstlisting}[captionpos=b, caption=UUID Disk-Image]
root@tux># Install libguestfs-tools
root@tux>apt install libguestfs-tools
root@tux># Show UUID
root@tux>virt-filesystems -a pcgov180.qcow --all --long --uuid -h
\end{lstlisting}
%-------------------------------------------------------------------------------
% Section: Video Ram
%-------------------------------------------------------------------------------
\subsection{Video RAM}
M"ochte man den Speicher f"ur die Video Card "andern, so sucht man in der Konfiguration nach der folgenden Zeile und "andert den Wert bei {\ttfamily vgamem}.
\listBash
\begin{lstlisting}[captionpos=b, caption=Change Video RAM]
root@tux>virsh edit <MachineName>
<model type="qxl" ram="131072" vram="131072" vgamem=16384" heads="1" primary="yes"/>
\end{lstlisting}
%-------------------------------------------------------------------------------
% Section: Huge Pages
%-------------------------------------------------------------------------------
\subsection{Huge Pages}
Um {\ttfamily Huge Pages} f"ur die Virtuellen Maschinen zu Verf"ugung zu stellen, sind folgende Schritte zu machen.\\
Als erstes wird in der Datei {\ttfamily /etc/fstab} die nachfolgende Zeile eingef"ugt.
\listBash
\begin{lstlisting}[captionpos=b, caption=Edit fstab]
root@tux>grep huge /etc/fstab
hugetlbfs /dev/hugepages hugetlbfs mode=1770,gid=78 0 0
\end{lstlisting}
Nun mounten wir die {\ttfamily hugepages} und kontrollieren das erfolgreiche verbinden.
\listBash
\begin{lstlisting}[captionpos=b, caption=Mount Hugepages]
root@tux>mount /dev/hugepages
root@tux>mount | grep huge
hugetlbfs on /dev/hugepages type hugetlbfs (rw,relatime,mode=1770,gid=78)
\end{lstlisting}
Nun schauen wir nach, wie gro"s die Hugepages sind.
\listBash
\begin{lstlisting}[captionpos=b, caption=Gr"o"ss e Hugepages]
root@tux>grep Hugepagesize /proc/meminfo
Hugepagesize: 2048kB
\end{lstlisting}
Die Anzahl der Hugepages wird wie folgt berechnet: {\ttfamily RAM der virtuellen Maschine / 2}. Der ermittelte Wert wird dann aufgerundet. Beispiel: {\ttfamily 2GB RAM => 2048/2=1024 ~1050}. Dieser Wert wird nun eingetragen und kontrollieren es. Laufen mehrere Maschine auf dem Host, so z"ahlt man den RAM von allen Maschinen zusammen.
\listBash
\begin{lstlisting}[captionpos=b, caption=Check Hugepages, label=lst:bash]
root@tux>echo 1050 > /proc/sys/vm/nr\_hugepages
root@tux>grep HugePages\_Total /proc/meminfo
HugePages\_Total: 1050
\end{lstlisting}
Nun wird die Maschine mit der Option {\ttfamily mem-path} gestartet.
\listBash
\begin{lstlisting}[captionpos=b, caption=Start Maschine]
root@tux>qemu-system-x86_64 -enable-kvm -m 2048 -mem-path /dev/hugepages -
hda <disk> ..
root@tux>grep HugePages /proc/meminfo
\end{lstlisting}
F"ur das Dauerhafte einrichten der Huge Pages, wird in der Datei {\ttfamily /etc/sysctl.d/40-hugepages.conf} die folgende Zeile eingef"ugt. \\
Hinweis: Nicht f"ur Arch Linux Systeme.
\listBash
\begin{lstlisting}[captionpos=b, caption=Enable Hugepages]
root@tux>cat /etc/sysctl.d/40-hugepages.conf
vm.nr_hugepages = 1050
\end{lstlisting}
In der {\ttfamily /etc/default/qemu-kvm} wird der Wert von {\ttfamily KVM\_HUGEPAGES} von {\ttfamily 0}
auf {\ttfamily 1} gestellt und anschlie"ss end der Libvirt Dienst neu gestartet.\\
Hinweis: Gilt nur f"ur Debian oder Red Hat Systeme.
\listBash
\begin{lstlisting}[captionpos=b, caption=Neustart Service]
root@tux>grep KVM\_HUGEPAGES /etc/default/qemu-kvm
KVM\_HUGEPAGES = 1 # 0 = disable, 1 = enable
root@tux>systemctl restart libvirt-bin
root@tux># or
root@tux>service libvirt-bin restart
\end{lstlisting}
In der Konfiguration der Virtuellen Maschinen wir der nachfolgende Abschnitt eingef"ugt.
\listBash
\begin{lstlisting}[captionpos=b, caption=Konfiguration Maschine]
root@tux>virsh edit <machine>
<memoryBacking>
<hugepages/>
</memoryBacking>
\end{lstlisting}
\end{justify}

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

62
Kapitel13/Troubleshooting.tex Executable file
View File

@ -0,0 +1,62 @@
\section{Troubleshooting (KVM)}
%------------------------------------------------------------------------------
% Subsection: Failed to start network default
%------------------------------------------------------------------------------
\subsection{Failed to start network default}
\begin{justify}
Bei dem starten des Netzwerkes f"ur die VM's kommt es zu einer Fehlermeldung.
\listBash
\begin{lstlisting}[captionpos=b, caption=Error Meldung]
root@tux>virsh net-start default
error: Failed to start network default
error: internal error: Failed to initialize a valid firewall backend
\end{lstlisting}
Unter Arch Linux (Manjaro) "uberpr"ufen wir die Firewall.
\listBash
\begin{lstlisting}[captionpos=b, caption=Check Firewall, label=lst:bash]
root@tux>systemctl status firewalld
firewalld.service - firewalld - dynamic firewall daemon
loaded: Loaded (/usr/lib/system/firewalld.service;enabled;Vendorpreset:disabled)
Active: active (running) since Thu 2017-03-09 19:15:39 CET;40s ago
Docs: man:firewalld(1)
Main PID: 590 (firewalld)
Tasks: 2 (limit 4915)
CGroup: /system.slice/firewalld.service
590 /usr/bin/python -ES /usr/bin/firewalld -nofork -nopid
root@tux>pacman -Syu ebtables dnsmasq
root@tux>systemctl restart libvirtd
\end{lstlisting}
Sollte keine Firewall installiert sein, so installiert man die Firewall nach.
\listBash
\begin{lstlisting}[captionpos=b, caption=Installation Firewall]
root@tux>pacman -Syu firewalld
\end{lstlisting}
%------------------------------------------------------------------------------
% Subsection: Auswahl OS-System unvollständig
%------------------------------------------------------------------------------
\subsection{Auswahl OS-System unvollständig}
Wir bei einer neu zu estellenden VM das Ziel OS nicht im Auswahlmenu angezeigt, so kann man die Osinfo-DB per hand aktualisieren.
\listBash
\begin{lstlisting}[captionpos=b, caption=Update Osinfo-DB]
root@tux># Debian
root@tux>apt install osinfo-db-tools
root@tux># Arch Linux / Manjaro
root@tux>pacman -S osinfo-db-tools
root@tux>curl -O https://releases.pagure.org/libosinfo/osinfo-db-20211013.tar.xz
root@tuc>osinfo-db-import --local osinfo-db-20210312.tar.xz
root@tux># Liste aller OS-Systeme
root@tux>osinfo-query --fields=release-date,eol-date,name os vendor="Microsoft Corporation"
Name | Release date | End of life
-----------------------+--------------+------------
Microsoft Windows 1.0 | 1985-11-20 | 2001-12-31
Microsoft Windows 10 | 2018-11-13 | 2029-01-09
Microsoft Windows 2.0 | 1987-12-09 | 2001-12-31
.
.
\end{lstlisting}
\end{justify}

124
Kapitel13/VirtualBox.tex Executable file
View File

@ -0,0 +1,124 @@
\section{Virtual Box}
\begin{justify}
Unter http://www.virtualbox.org/manual gibt es eine gute Dokmentation "uber Virtual Box.
\subsection{Konfiguration}
Mit der Variable {\ttfamily VBOX\_USER\_HOME} kann man die Ablage der Konfiguration an einer zentralen Stelle ablegen, wo alle Benutzer Zugriff darauf haben. Normalerweise werden die erstellten Maschinen nur f"ur den jeweiligen Benutzer angezeigt, der die Maschinen erstellt hat, da die Konfiguration
standardm"a"s ig im Home Verzeichnis abgelegt wird.
\listBash
\begin{lstlisting}[captionpos=b, caption=Setzen Variable]
uws@tux>echo $VBOX_USER_HOME
/vm/configuration
\end{lstlisting}
%-------------------------------------------------------------------------------
% Subsection: Verwaltung Console
%-------------------------------------------------------------------------------
\subsection{Verwaltung Console}
Um virtuelle Maschinen auf der Console zu verwalten, gibt es das Programm {\ttfamily VBoxManage}.
\listBash
\begin{lstlisting}[captionpos=b, caption=Beispiele Verwaltung]
uws@tux># Start VM's
uws@tux>VBoxSDL --startvm "Windows 7" # Alternative zu VBoxManage
uws@tux>VBoxManage startvm "Windows 7"
uws@tux># List VM's
uws@tux>vboxmanage list vms
uws@tux># Info ueber VM's
uws@tux>VBoxManage showvminfo "Windows 7"
uws@tux># Control
uws@tux>VBoxManage controlvm "Windows 7" pause
uws@tux>VBoxManage controlvm "Windows 7" resume
uws@tux>VBoxManage controlvm "Windows 7" reset
uws@tux>VBoxManage controlvm "Windows 7" poweroff
uws@tux>VBoxManage controlvm "Windows 7" acpipowerbutton
uws@tux># Export / Import
uws@tux># Endung ova - Alle Files in einem Container
uws@tux># Endung ovf - Es werden separate Dateien ertellt
uws@tux>VBoxManage export "Windows 7" -o win7.ova [--ovf20]
uws@tux>VBoxManage import win7.ova
\end{lstlisting}
Eine Disk kann man folgenderma"sen erstellen / konvertieren.
\listBash
\begin{lstlisting}[captionpos=b, caption=Create Disk]
uws@tux># Create Disk, Size in MB
uws@tux>VBoxManage createmedium disk --filename disk_sdb.vdi --size 30000
uws@tux># Konvert Disk
uws@tux>dd if=/dev/sdc of=disk.raw
uws@tux>VBoxManage convertfromraw disk.raw disk_sdc.vdi --format VDI
\end{lstlisting}
Möchte man wissen, wie die Virtual Disk heist oder wo sie liegt, so kann man das folgenderma"sen machen.
\listBash
\begin{lstlisting}[captionpos=b, caption=List Disk]
uws@tux>vboxmanage list vms --long | egrep "DCGOV230" | egrep "IDE|SATA"
IDE (0,0): /Path/to/Disk/sda.vmdk (UUID: 34..)
\end{lstlisting}
Eine Virtuelle Maschine kann man folgenderma"sen starten.
\listBash
\begin{lstlisting}[captionpos=b, caption=Start VM]
uws@tux>vboxmanage startvm "Name" [--type headless]
uws@tux># Start VM with Remote Desktop Server
uws@tux>vboxheadless --startvm "Name" --vrde on
uws@tux>vboxheadless --comment Name --startvm <uuid> --vrde config
\end{lstlisting}
Ausschalten einer VM.
\listBash
\begin{lstlisting}[captionpos=b, caption=VM Ausschalten]
uws@tux>vboxmanage controlvm "Name" [poweroff|aspipowerbutton]
\end{lstlisting}
%-------------------------------------------------------------------------------
% Subsection: Zugriff auf RDP Server
%-------------------------------------------------------------------------------
\subsection{Zugriff auf RDP Server}
Wurde f"ur eine Maschine unter Remote Display der Server aktiviet, so kommt zwar bei dem Verbinden zu dem Server eine User / Passwort Abfrage, hier braucht aber nichts eingegeben zu werden. Die Anmeldung an dem RDP Server wird trotzdem hergestellt. Im heimischen LAN kann man damit zwar leben, aber wenn die Maschine auch aus dem Internet erreichbar sein soll, so ist das schon ein Sicherheitsrisiko. Man kann f"ur jede Maschine User einrichten, die sich an den RDP Server anmelden d"urfen.
\listBash
\begin{lstlisting}[captionpos=b, caption=Rechteverwaltung RDP Server]
uws@tux>alias vb='vboxmanage'
uws@tux># Umstellung der Autentifizierungs Methode
uws@tux>vb setproperty vrdeauthlibrary "VBoxAuthSimple"
uws@tux># Aendern der Anmelde Methode
uws@tux>vb modifyvm <VmName> --vrdeauthtyp external
uws@tux># Passwort Hash erzeugen
uws@tux>vb internalcommands passwordhash "MyPassword"
Password hash: dc1e7c03e162397.....
uws@tux># Create User und Anzeige
uws@tux>vb setextradata "VmName" "VBoxAuthSimple/users/paul" dc1e7c03e162397.....
uws@tux>vb getextradata "VmName" enumerate | grep VB
Key: VBoxAuthSimple/users/paul, Value: dc1e7c03e162397.....
uws@tux># Loeschen eines Users
uws@tux>vb setextradata "VmName" "VBoxAuthSimple/users/paul"
\end{lstlisting}
Wird versucht unter Windows mit mstsc.exe eine Remote Desktop Verbindung herzustellen, so muss \verb|"|Save Credentials\verb|"| aktiviert werden, ansonsten kommt keine Verbindung zu stande.
\begin{figure}[ht]
\centering
\includegraphics[scale=0.5]{Kapitel13/Pictures/ExampleMSTSC.png}
\caption{MSTSC}
\end{figure}
%-------------------------------------------------------------------------------
% Subsection: Gasterweiterung
%-------------------------------------------------------------------------------
\subsection{Gasterweiterung}
Wenn die Installation der VirtualBox Gasterweiterung mit einer Fehlermeldung nicht vollst"andig durchgef"uhrt wird, so m"ussen die Kernel Source noch installiert werden. Eventuell m"ussen auch die Module {\ttfamily gcc, make, automake} und {\ttfamily autoconf} installiert werden.
\listBash
\begin{lstlisting}[captionpos=b, caption=Kernel Source]
uws@tux>sudo zypper install kernel-source kernel-symbol
uws@tux>sudo zypper install gcc make automake autoconf
\end{lstlisting}
%-------------------------------------------------------------------------------
% Subsection: Phpvirtualbox
%-------------------------------------------------------------------------------
\subsection{PHPVirtualbox}
Mit dem Programm PHPVirtualbox kann man Virtuelle Maschinen in einem Browser verwalten. Unter OpenMediaVault wird das Programm in dem Verzeichnis /usr/share/phpvirtualbox installiert.
\end{justify}

295
Kapitel13/Virtualisierung.md Executable file
View File

@ -0,0 +1,295 @@
# Virtualisierung #
## 1. KVM (Kernel-based Virtual Machine) ##
### 1.1 Voraussetzungen ###
Die CPU muss die Virtualisierung unterstützen. Hierzu kann man die Eigenschaften der CPU abfragen.
```console
root@tux>egrep (vmx|svm) /proc/cpuinfo
```
### 1.2 Installation KVM ###
Außer dem Paket ***KVM*** werden noch andere nützliche Programme für das erstellen und verwalten der
Virtuellen Maschinen benötigt. Für ***RedHat*** Systeme lautet der Befehl für die Installation `yum
install`. Nach der Installation sollte ein Neustart des Systems erfolgen.
```console
root@tux>zypper install kvm
root@tux>zypper install qemu-kvm python-virtinst libvirt libvirt-python virt-mamanger libguestfs-tools
```
### 1.3 Network ###
Die erstellten Virtuellen Maschinen haben Standard mäßig nur Netzzugriff auf die anderen Virtuellen
Maschinen und zur Host Maschine. Sollen die Virtuellen Maschinen auch Zugriff auf das VLAN haben,
so muss eine Netzwerk Brücke eingerichtet werden.
Hierzu wird in der Konfigurationsdatei, z.B. für ***eth0***, die Zeile ***BRIDGE=br0*** eingefügt und wenn dort
eine IP-Adresse eingetragen ist, wird diese auskommentiert.
Nun wird eine Konfigurationsdatei ifcfg-br0 für die Netzwerk Brücke eingerichtet.
```console
root@tux>cat ifcfg-br0
DEVICE=”br0”
BOOTPROTO=”static”
IPADDR=”xxx.xxx.xxx.xxx”
NETMASK=”255.255.25.0”
ONBOOT=”yes”
TYPE=”Briodge”
NM_CONTROLLED=”no”
```
In der Datei ***/etc/sysctl.conf*** wird das ***IP forwarding*** aktiviert. Neustart der Maschine.
```console
root@tux>grep ”ipv3” systemctl.conf
inet.ipv3.ip_forward=1
```
### 1.4 Maschine Location ###
Standard mäßig werden die Maschinen im Verzeichnis ***/var/lib/libvirt/images*** erstellt /
abgelegt. Es sollte also ausreichend Platz vorhanden sein.
### 1.5 Create Maschine ###
Für ***OpenSuSE*** lautet der Befehl für das Erstellen einer Maschine ***vm-install*** und für ***RedHat***
Systeme ***virt-install***. Nachfolgend ein Beispiel, wie unter RedHat eine Maschine erstellt wird.
```console
root@tux>virt-install \
-n myLinux \
--description “My own Linux Machine“ \
--os-type=Linux \
--os-variante=debian7 \
--ram=4096 \
--vcpus=2 \
--disk path=/vmstore/machine/myLinux/myLinux.img,bus=virtio,size=20 \
--graphics none \
--cdrom /vmstore/images/debian7_x86_64.iso \
--network bridge:br0
```
|Option|Beschreibung|
|:-----|:-----------|
|-n |Name der Maschine|
|--description| Beschreibung der Maschine|
|--os-type| Linux, Solaris, Unix oder Windows|
|--os-variante| Distribution type. Z.B. rhel7, centos6, debian7, suse13, win2k, win2k8, win7, win8|
|--ram| Memory in MB|
|--vcpus| Anzahl Virtuelle CPU|
|--disk| Lage der Virtuellen Maschine und Größe der Festplatte in GB|
|--graphics| None für die Benutzung einer Text console auf dem VM serial Port, anstelle der Graphischen VNC Windows. Ist der xmanager aktiv, so kann der Parameter ignoriert werden.|
|--cdrom| Installations Medium|
|--network| Angabe des Netzwerk Devices|
### 1.6 Konfiguration ###
Die Konfiguration der virtuellen Maschinen wird in dem Verzeichnis ***/etc/libvirt/qemu*** abgelegt.
Die Konfigurations Datei kann mit dem Befehl `virsh edit <VmName>` bearbeitet werden.
```console
root@tux>virsh edit myLinux
```
### 1.7 Maschinen anzeigen ###
Mit dem Befehl `virsh list --all` kann man sich die Virtuellen Maschinen anzeigen lassen.
```console
root@tux>virsh list --all
ID Name State
-----------------------------
1 myLinux running
```
Weitere Informationen über die virtuelle Maschine können mit `virsh dominfo` abgefragt werden.
```console
root@tux>virsh dominfo myLinux
Id: 1
Name: myLinux
UUID: 58083ae7-37dr-46c2-63d9-bd5dc49f642
OS Type: Linux
State: running
CPU(s): 2
CPU time: 305.4s
Max memory: 2097152 KiB
Used memory: 1032452 KiB
Persitent: yes
Autostart: disable
Manged save: no
Security model: selinux
Security DOI: 0
Security Label: system_u:system_r:virt_t:s0:c968,c799 (permissive)
```
Die CPU und Memory Belegung kann man sich mit ***virt-top*** anzeigen lassen.
### 1.8 VM Console ###
Anmelden an der virtuellen Maschine kann mit dem Kommando `virsh console` gemacht werden.
Die Console kann dann mit ***ctrl +*** wieder verlassen.
```console
root@tux>virsh console myLinux
```
### 1.9 Shutdown, Reboot und Start ###
```console
root@tux>virsh shutdown myLinux
root@tux>virsh reboot myLinux
root@tux>virsh start myLinux
```
### 1.10 Convert Disk ###
Eine Disk kann man in einem anderen Format konvertieren. Die Unterstützten Formate kann man sich
mit dem folgenden Befehl sich anzeigen lassen.
```console
root@tux>qemu-img h | tail n1
```
OVA-Dateien sind nichts anderes als Tar-Archive.
```console
root@tux>tar xvf <ova_file>
```
Mit `qemu-img convert` kann man das Ausgangsformat konvertieren.
```console
root@tux>qemu-img convert o qcowl <vmdk.file> output sdb.qcow2
```
### 1.11 Resize Disk ###
Eine Disk wird mit `qemu-img resize` vergrößert. Im nachfolgenden Beispiel wird die Disk um 10GB
vergrößert.
```console
root@tux>qemu-img resize <disk_image> +10G
```
### 1.12 Huge Pages ###
Um ***Huge Pages*** für die Virtuellen Maschinen zu Verfügung zu stellen, sind folgende Schritte zu
machen.
Als erstes wird in der Datei ***/etc/fstab*** die nachfolgende Zeile eingefügt.
```console
root@tux>grep huge /etc/fstab
hugetlbfs /dev/hugepages hugetlbfs mode=1770,gid=78 0 0
```
Nun mounten wir die ***hugepages*** und kontrollieren das erfolgreiche verbinden.
```console
root@tux>mount /dev/hugepages
root@tux>mount | grep huge
hugetlbfs on /dev/hugepages type hugetlbfs (rw,relatime,mode=1770,gid=78)
```
Nun schauen wir nach, wie groß die Hugepages sind.
```console
root@tux>grep Hugepagesize /proc/meminfo
Hugepagesize: 2048kB
```
Die Anzahl der Hugepages wird wie folgt berechnet: `RAM der virtuellen Maschine / 2`.
Der ermittelte Wert wird dann aufgerundet. Beispiel: 2GB RAM => 2048/2=1024 ~1050
Dieser Wert wird nun eingetragen und kontrollieren es. Laufen mehrere Maschine auf dem Host, so
zählt man den RAM von allen Maschinen zusammen.
```console
root@tux>echo 1050 > /proc/sys/vm/nr_hugepages
root@tux>grep HugePages_Total /proc/meminfo
HugePages_Total: 1050
```
Nun wird die Maschine mit der Option ***mem-path*** gestartet.
```console
root@tux>qemu-system-x86_64 enable-kvm m 2048 mem-path /dev/hugepages
hda <disk> ..
root@tux>grep HugePages /proc/meminfo
```
Für das Dauerhafte einrichten der Huge Pages, wird in der Datei ***/etc/sysctl.d/40-
hugepages.conf*** die folgende Zeile eingefügt. Hinweis: Nicht für Arch Linux Systeme.
```console
root@tux>cat /etc/sysctl.d/40-hugepages.conf
vm.nr_hugepages = 1050
```
In der ***/etc/default/qemu-kvm*** wird der Wert von ***KVM_HUGEPAGES*** von ***0*** auf ***1*** gestellt und
anschließend der Libvirt Dienst neu gestartet. Hinweis: Gilt nur für Debian oder Red Hat Systeme.
```console
root@tux>grep KVM_HUGEPAGES /etc/default/qemu-kvm
KVM_HUGEPAGES = 1 # 0 = disable, 1 = enable
root@tux>systemctl restart libvirt-bin
root@tux># or
root@tux>service libvirt-bin restart
```
In der Konfiguration der Virtuellen Maschinen wir der nachfolgende Abschnitt eingefügt.
```console
root@tux>virsh edit <machine>
<memoryBacking>
<hugepages/>
</memoryBacking>
```
## 2. Troubleshooting ##
### 2.1 Failed to start network default ###
Bei dem starten des Netzwerkes für die VMs kommt es zu einer Fehlermeldung.
```console
root@tux>virsh net-start default
error: Failed to start network default
error: internal error: Failed to initialize a valid firewall backend
```
Unter Arch Linux (Manjaro) überprüfen wir die Firewall.
```console
root@tux>systemctl status firewalld
firewalld.service firewalld dynamic firewall daemon
loaded: Loaded (/usr/lib/system/firewalld.service;enabled;Vendorpreset:disabled)
Active: active (running) since Thu 2017-03-09 19:15:39 CET;40s ago
Docs: man:firewalld(1)
Main PID: 590 (firewalld)
Tasks: 2 (limit 4915)
CGroup: /system.slice/firewalld.service
590 /usr/bin/python ES /usr/bin/firewalld nofork nopid
root@tux>pacman Syu ebtables dnsmasq
root@tux>systemctl restart libvirtd
```
Sollte keine Firewall installiert sein, so installiert man die Firewall nach.
```console
root@tux>pacman Syu firewalld
```

View File

@ -0,0 +1,7 @@
\chapter{Virtualisierung}
%-------------------------------------------
% load other documents
%------------------------------------------
\input{Kapitel13/KVM}
\newpage
\input{Kapitel13/Troubleshooting}

View File

@ -0,0 +1,249 @@
\section{KVM (Kernel-based Virtual Machine)}
\subsection{Voraussetzungen}
\begin{justify}
Die CPU muss die Virtualisierung unterst"utzen. Hierzu kann man die Eigenschaften der CPU abfragen. Intel CPU's m"ussen die Option {\ttfamily vmx} unterst"utzen und AMD CPU's {\ttfamily svm}.
\listBash
\begin{lstlisting}[captionpos=b, caption=Abfrage CPU Info, label=lst:bash]
root@tux>egrep '(vmx|svm)' /proc/cpuinfo
\end{lstlisting}
%-------------------------------------------------------------------------------
% Section: Installation KVM
%-------------------------------------------------------------------------------
\subsection{Installation KVM}
Au"ser dem Paket {\ttfamily KVM} werden noch andere n"utzliche Programme f"ur das erstellen und verwalten der Virtuellen Maschinen ben"otigt. F"ur {\ttfamily RedHat} Systeme lautet der Befehl f"ur die Installation {\ttfamily yum install}. Nach der Installation sollte ein Neustart des Systems erfolgen.
\listBash
\begin{lstlisting}[captionpos=b, caption=Installation, label=lst:bash]
root@tux>zypper install kvm
root@tux>zypper install qemu-kvm python-virtinst libvirt libvirt-python virt-mamanger libguestfs-tools
\end{lstlisting}
%-------------------------------------------------------------------------------
% Section: Network
%-------------------------------------------------------------------------------
\subsection{Network}
Die erstellten Virtuellen Maschinen haben Standard m"a"sig nur Netzzugriff auf die anderen Virtuellen Maschinen und zur Host Maschine. Sollen die Virtuellen Maschinen auch Zugriff auf das VLAN haben, so muss eine Netzwerk Br"ucke eingerichtet werden.\\
Hierzu wird in der Konfigurationsdatei, z.B. f"ur {\ttfamily eth0}, die Zeile {\ttfamily BRIDGE=br0} eingef"ugt und wenn dort eine IP-Adresse eingetragen ist, wird diese auskommentiert.\\
Nun wird eine Konfigurationsdatei {\ttfamily ifcfg-br0} f"ur die Netzwerk Br"ucke eingerichtet.
\listBash
\begin{lstlisting}[captionpos=b, caption=Einrichten Netzwerk Br"ucke, label=lst:bash]
root@tux>cat ifcfg-br0
DEVICE="br0"
BOOTPROTO="static"
IPADDR="xxx.xxx.xxx.xxx"
NETMASK="255.255.25.0"
ONBOOT="yes"
TYPE="Briodge"
NM_CONTROLLED="no"
\end{lstlisting}
In der Datei {\ttfamily /etc/sysctl.conf} wird das {\ttfamily IP forwarding} aktiviert.
Danach muss ein Neustart der Maschine gemacht werden.
\listBash
\begin{lstlisting}[captionpos=b, caption=IP forwarding, label=lst:bash]
root@tux>grep "ipv3" systemctl.conf
inet.ipv3.ip_forward=1
\end{lstlisting}
%-------------------------------------------------------------------------------
% Section: Maschine Location
%-------------------------------------------------------------------------------
\subsection{Maschine Location}
Standard m"a"sig werden die Maschinen im Verzeichnis {\ttfamily /var/lib/libvirt/images} erstellt /
abgelegt. Es sollte also ausreichend Platz vorhanden sein.
%-------------------------------------------------------------------------------
% Section: Create Maschine
%-------------------------------------------------------------------------------
\subsection{Create Maschine}
F"ur {\ttfamily OpenSuSE} lautet der Befehl f"ur das Erstellen einer Maschine {\ttfamily vm-install} und f"ur {\ttfamily RedHat} Systeme {\ttfamily virt-install}. Nachfolgend ein Beispiel, wie unter RedHat eine Maschine erstellt wird.
\listBash
\begin{lstlisting}[captionpos=b, caption=Erstellen einer Maschine, label=lst:bash]
root@tux>virt-install \
-n myLinux \
--description "My own Linux Machine" \
--os-type=Linux \
--os-variante=debian7 \
--ram=4096 \
--vcpus=2 \
--disk path=/vmstore/machine/myLinux/myLinux.img,bus=virtio,size=20 \
--graphics none \
--cdrom /vmstore/images/debian7_x86_64.iso \
--network bridge:br0
\end{lstlisting}
\begin{table}[ht]
\begin{tabular}{p{2cm}p{14cm}} % l => Text left, c => center, r => right, p => zeilenumbruch
\rowcolor{hellgrau}\emph{\textbf{Option}} & \emph{\textbf{Beschreibung}}\\
\hline
\hline
-n & Name der Maschine\\
\verb|--|description & Beschreibung der Maschine\\
\verb|--|os-type & Linux, Solaris, Unix oder Windows\\
\verb|--|os-variante & Distribution type. Z.B. rhel7, centos6, debian7, suse13, win2k, win2k8, win7, win8\\
\verb|--|ram & Memory in MB\\
\verb|--|vcpus & Anzahl Virtuelle CPU\\
\verb|--|disk & Lage der Virtuellen Maschine und Gr"o"se der Festplatte in GB\\
\verb|--|graphics & None f"ur die Benutzung einer Text console auf dem VM serial Port, anstelle der Graphischen VNC Windows. Ist der xmanager aktiv, so kann der Parameter ignoriert werden.\\
\verb|--|cdrom & Installations Medium\\
\verb|--|network & Angabe des Netzwerk Devices\\
\end{tabular}
\caption{Beschreibung}
\end{table}
%-------------------------------------------------------------------------------
% Section: Konfiguration
%-------------------------------------------------------------------------------
\subsection{Konfiguration}
Die Konfiguration der virtuellen Maschinen wird in dem Verzeichnis {\ttfamily /etc/libvirt/qemu} abgelegt. Mit dem Befehl {\ttfamily virsh edit <VmName>} kann die Konfigurationsdatei bearbeitet werden.
\listBash
\begin{lstlisting}[captionpos=b, caption=Edit Maschine, label=lst:bash]
root@tux>virsh edit myLinux
\end{lstlisting}
%-------------------------------------------------------------------------------
% Section: Maschinen anzeigen
%-------------------------------------------------------------------------------
\subsection{Maschinen anzeigen}
Mit dem Befehl {\ttfamily virsh list --all} kann man sich die Virtuellen Maschinen anzeigen lassen.
\listBash
\begin{lstlisting}[captionpos=b, caption=Auflistung Maschinen, label=lst:bash]
root@tux>virsh list --all
ID Name State
-----------------------------
1 myLinux running
\end{lstlisting}
Weitere Informationen "uber die virtuelle Maschine k"onnen mit {\ttfamily virsh dominfo} abgefragt werden.
\listBash
\begin{lstlisting}[captionpos=b, caption=Auflistung Maschinen, label=lst:bash]
root@tux>virsh dominfo myLinux
Id: 1
Name: myLinux
UUID: 58083ae7-37dr-46c2-63d9-bd5dc49f642
OS Type: Linux
State: running
CPU(s): 2
CPU time: 305.4s
Max memory: 2097152 KiB
Used memory: 1032452 KiB
Persitent: yes
Autostart: disable
Manged save: no
Security model: selinux
Security DOI: 0
Security Label: system_u:system_r:virt_t:s0:c968,c799 (permissive)
\end{lstlisting}
Die CPU und Memory Belegung kann man sich mit {\ttfamily virt-top} anzeigen lassen.
%-------------------------------------------------------------------------------
% Section: VM Console
%-------------------------------------------------------------------------------
\subsection{VM Console}
Anmelden an der virtuellen Maschine kann mit dem Kommando {\ttfamily virsh console} gemacht werden. Die Console kann dann mit {\ttfamily ctrl +} wieder verlassen.
\listBash
\begin{lstlisting}[captionpos=b, caption=Verbinden Maschine, label=lst:bash]
root@tux>virsh console myLinux
\end{lstlisting}
%-------------------------------------------------------------------------------
% Section: Shutdown, Reboot
%-------------------------------------------------------------------------------
\subsection{Shutdown, Reboot und Start}
\listBash
\begin{lstlisting}[captionpos=b, caption=Verbinden Maschine, label=lst:bash]
root@tux>virsh shutdown myLinux
root@tux>virsh reboot myLinux
root@tux>virsh start myLinux
\end{lstlisting}
%-------------------------------------------------------------------------------
% Section: Cobvert Disk
%-------------------------------------------------------------------------------
\subsection{Convert Disk}
Eine Disk kann man in einem anderen Format konvertieren. Die Unterst"utzten Formate kann man sich mit dem folgenden Befehl sich anzeigen lassen.
\listBash
\begin{lstlisting}[captionpos=b, caption=Auflistung Formate, label=lst:bash]
root@tux>qemu-img -h | tail -n1
\end{lstlisting}
OVA-Dateien sind nichts anderes als Tar-Archive.
\listBash
\begin{lstlisting}[captionpos=b, caption=Entpacken OVA-Datei, label=lst:bash]
root@tux>tar -xvf <ova_file>
\end{lstlisting}
Mit {\ttfamily qemu-img convert} kann man das Ausgangsformat konvertieren.
\listBash
\begin{lstlisting}[captionpos=b, caption=Convert VMDK-Datei, label=lst:bash]
root@tux>qemu-img convert -o qcowl <vmdk.file> output sdb.qcow2
\end{lstlisting}
%-------------------------------------------------------------------------------
% Section: Resize Disk
%-------------------------------------------------------------------------------
\subsection{Resize Disk}
Eine Disk wird mit {\ttfamily qemu-img resize} vergr"o"s ert. Im nachfolgenden Beispiel wird die Disk um 10GB vergr"o"s ert.
\listBash
\begin{lstlisting}[captionpos=b, caption=Resize Disk, label=lst:bash]
root@tux>qemu-img resize <disk_image> +10G
\end{lstlisting}
%-------------------------------------------------------------------------------
% Section: Huge Pages
%-------------------------------------------------------------------------------
\subsection{Huge Pages}
Um {\ttfamily Huge Pages} f"ur die Virtuellen Maschinen zu Verf"ugung zu stellen, sind folgende Schritte zu machen.\\
Als erstes wird in der Datei {\ttfamily /etc/fstab} die nachfolgende Zeile eingef"ugt.
\listBash
\begin{lstlisting}[captionpos=b, caption=Edit fstab, label=lst:bash]
root@tux>grep huge /etc/fstab
hugetlbfs /dev/hugepages hugetlbfs mode=1770,gid=78 0 0
\end{lstlisting}
Nun mounten wir die {\ttfamily hugepages} und kontrollieren das erfolgreiche verbinden.
\listBash
\begin{lstlisting}[captionpos=b, caption=Mount Hugepages, label=lst:bash]
root@tux>mount /dev/hugepages
root@tux>mount | grep huge
hugetlbfs on /dev/hugepages type hugetlbfs (rw,relatime,mode=1770,gid=78)
\end{lstlisting}
Nun schauen wir nach, wie gro"s die Hugepages sind.
\listBash
\begin{lstlisting}[captionpos=b, caption=Gr"o"ss e Hugepages, label=lst:bash]
root@tux>grep Hugepagesize /proc/meminfo
Hugepagesize: 2048kB
\end{lstlisting}
Die Anzahl der Hugepages wird wie folgt berechnet: {\ttfamily RAM der virtuellen Maschine / 2}. Der ermittelte Wert wird dann aufgerundet. Beispiel: {\ttfamily 2GB RAM => 2048/2=1024 ~1050}. Dieser Wert wird nun eingetragen und kontrollieren es. Laufen mehrere Maschine auf dem Host, so z"ahlt man den RAM von allen Maschinen zusammen.
\listBash
\begin{lstlisting}[captionpos=b, caption=Check Hugepages, label=lst:bash]
root@tux>echo 1050 > /proc/sys/vm/nr\_hugepages
root@tux>grep HugePages\_Total /proc/meminfo
HugePages\_Total: 1050
\end{lstlisting}
Nun wird die Maschine mit der Option {\ttfamily mem-path} gestartet.
\listBash
\begin{lstlisting}[captionpos=b, caption=Start Maschine, label=lst:bash]
root@tux>qemu-system-x86_64 -enable-kvm -m 2048 -mem-path /dev/hugepages -
hda <disk> ..
root@tux>grep HugePages /proc/meminfo
\end{lstlisting}
F"ur das Dauerhafte einrichten der Huge Pages, wird in der Datei {\ttfamily /etc/sysctl.d/40-hugepages.conf} die folgende Zeile eingef"ugt. \\
Hinweis: Nicht f"ur Arch Linux Systeme.
\listBash
\begin{lstlisting}[captionpos=b, caption=Enable Hugepages, label=lst:bash]
root@tux>cat /etc/sysctl.d/40-hugepages.conf
vm.nr_hugepages = 1050
\end{lstlisting}
In der {\ttfamily /etc/default/qemu-kvm} wird der Wert von {\ttfamily KVM\_HUGEPAGES} von {\ttfamily 0}
auf {\ttfamily 1} gestellt und anschlie"ss end der Libvirt Dienst neu gestartet.\\
Hinweis: Gilt nur f"ur Debian oder Red Hat Systeme.
\listBash
\begin{lstlisting}[captionpos=b, caption=Neustart Service, label=lst:bash]
root@tux>grep KVM\_HUGEPAGES /etc/default/qemu-kvm
KVM\_HUGEPAGES = 1 # 0 = disable, 1 = enable
root@tux>systemctl restart libvirt-bin
root@tux># or
root@tux>service libvirt-bin restart
\end{lstlisting}
In der Konfiguration der Virtuellen Maschinen wir der nachfolgende Abschnitt eingef"ugt.
\listBash
\begin{lstlisting}[captionpos=b, caption=Konfiguration Maschine, label=lst:bash]
root@tux>virsh edit <machine>
<memoryBacking>
<hugepages/>
</memoryBacking>
\end{lstlisting}
\end{justify}

View File

@ -0,0 +1,33 @@
\section{Troubleshooting}
\subsection{Failed to start network default}
\begin{justify}
Bei dem starten des Netzwerkes f"ur die VM's kommt es zu einer Fehlermeldung.
\listBash
\begin{lstlisting}[captionpos=b, caption=Error Meldung, label=lst:bash]
root@tux>virsh net-start default
error: Failed to start network default
error: internal error: Failed to initialize a valid firewall backend
\end{lstlisting}
Unter Arch Linux (Manjaro) "uberpr"ufen wir die Firewall.
\listBash
\begin{lstlisting}[captionpos=b, caption=Check Firewall, label=lst:bash]
root@tux>systemctl status firewalld
firewalld.service - firewalld - dynamic firewall daemon
loaded: Loaded (/usr/lib/system/firewalld.service;enabled;Vendorpreset:disabled)
Active: active (running) since Thu 2017-03-09 19:15:39 CET;40s ago
Docs: man:firewalld(1)
Main PID: 590 (firewalld)
Tasks: 2 (limit 4915)
CGroup: /system.slice/firewalld.service
590 /usr/bin/python -ES /usr/bin/firewalld -nofork -nopid
root@tux>pacman -Syu ebtables dnsmasq
root@tux>systemctl restart libvirtd
\end{lstlisting}
Sollte keine Firewall installiert sein, so installiert man die Firewall nach.
\listBash
\begin{lstlisting}[captionpos=b, caption=Installation Firewall, label=lst:bash]
root@tux>pacman -Syu firewalld
\end{lstlisting}
\end{justify}

275
Kapitel14/2020_04_26_Restic.tex Executable file
View File

@ -0,0 +1,275 @@
\section{Restic}
\subsection{Allgemein}
\begin{justify}
Mit dem Programm {\ttfamily restic} k"onnen in einer Shell ein Backup von Verzeichnissen erstellt werden. Das Programm macht auch Incrementelle Backups und versteht deduplication. Das Backup wird in dem Repository verschl"usselt abgelegt. Restic kann das Backup auch in der Cloud ablegen.
%-------------------------------------------------------------------------------
% Subsection: Installation
%-------------------------------------------------------------------------------
\subsection{Installation}
Das Programm ist in den meisten Repositorys der Distributionen enthalten und k"onnen "uber den Paketmanager installiert werden.
\listBash
\begin{lstlisting}[captionpos=b, caption=Installation]
uws@tux># Arch Linux
uws@tux>sudo pacman -S restic
uws@tux># Debian
uws@tux>sudo apt install restic
uws@tux># Fedora
uws@tux>sudo dnf install restic
uws@tux># RHEL und CentOS
uws@tux>sudo yum install yum-plugin-copr
uws@tux>sudo yum copr enable copart/restic
uws@tux>sudo yum install restic
\end{lstlisting}
%-------------------------------------------------------------------------------
% Subsection: Init Repo
%-------------------------------------------------------------------------------
\subsection{Repository erstellen}
Das Kennwort f"ur das Repository wird auch darin abgelegt. Als erstes wird das Repository initalisiert.
\listBash
\begin{lstlisting}[captionpos=b, caption=Repository erstellen]
uws@tux>restic init --repo /run/media/restic/repo
enter password for new backend:
enter password again:
created restic backend 0815b4711c at /run/media/restic/repo
Please noze that knowledge of your password is required to access the repository.
Losing your password means that your data is irrecoverable lost.
\end{lstlisting}
%-------------------------------------------------------------------------------
% Subsection: Backup
%-------------------------------------------------------------------------------
\subsection{Backup}
Ein Backup wird mit dem Parameter {\ttfamily backup} gemacht. Mit der Option {\ttfamily \verb|--|tag} kann man noch ein Tag definieren. Eine Ausf"uhrliche Ausgabe des Backups erh"alt man mit {\ttfamily -v, \verb|--|verbose}. Mit {\ttfamily \verb|--|verbose=2} gibt es eine noch detailierte Ausgabe.
\listBash
\begin{lstlisting}[captionpos=b, caption=Backup Commandozeile]
uws@tuc>restic -r /run/media/restic/repo --tag "First Backup" backup /daten
\end{lstlisting}
In einem Script kann man ben"otigte Parameter in Variablen definieren.
\begin{longtable}[l]{p{5cm}p{11cm}}
\rowcolor{hellgrau}\multicolumn{1}{l}{\textbf{Variable}} & \multicolumn {1}{l}{\textbf{Beschreibung}} \\
\hline
\hline
\endfirsthead
%\multicolumn{2}{c}{{\bfseries \tablename \thetable{} continued from previous page.}} \\
\multicolumn{2}{r}{{\bfseries continued from previous page.}} \\
\rowcolor{hellgrau}\multicolumn{1}{l}{\textbf{Variable}} & \multicolumn {1}{l}{\textbf{Beschreibung}} \\
\hline
\hline
\endhead
%\multicolumn{2}{r}{{\bfseries \tablename \thetable{} Continued on next page}} \\
\multicolumn{2}{r}{{\bfseries Continued on next page}} \\
\endfoot
\caption{Restic Variablen} \\
\endlastfoot
RESTIC\verb|_|REPOSITORY & Angabe des Repositories oder Angabe mit -r\\
RESTIC\verb|_|PASSWORD\verb|_|FILE & Passwort Datei\\
RESTIC\verb|_|PASSWORD & Das Passwort des Repositories\\
AWS\verb|_|ACCESS\verb|_|KEY\verb|_|ID & Amazon S3 access key ID\\
AWS\verb|_|SECRET\verb|_|ACCESS\verb|_|KEY & Amazon S3 secret access key\\
ST\verb|_|AUTH & Auth URL f"ur Keystone vi authentication\\
ST\verb|_|USER & Username f"ur Keystone vi authentication\\
ST\verb|_|KEY & Passwort f"ur Keystone vi authentication\\
\end{longtable}
Beispiel eines einfachen Scripts.
\listBash
\begin{lstlisting}[captionpos=b, caption=Script Example]
uws@tux>cat BackupWithRestic.sh
#!/bin/env listBash
export RESTIC_REPOSITORY="/run/media/restic/Repo"
export RESTIC_PASSWORD="StrongSecretPassword"
restic -v -v --Tag "Restic Backup" backup /daten >> /daten/var/log/BackupRestic.log
# List Snapshots
restic snapshots
\end{lstlisting}
%-------------------------------------------------------------------------------
% Subsection: Backup prune
%-------------------------------------------------------------------------------
\subsection{Backup Vorhalten}
Man kann mit {\ttfamily forget} und weiteren Parametern definieren, wie lange Backups vorgehalten werden sollen. Mit dem Parameter {\ttfamily \verb|--|dry-run} werden die Backups nicht gel"oscht, sondern nur angezeigt, was gel"oscht werden soll. Gibt man hinter {\ttfamily forget} die ID des Snapshots mit an, so wird nur der Snapshot gel"oscht.
\begin{longtable}[l]{p{4cm}p{12cm}}
\rowcolor{hellgrau}\multicolumn{1}{l}{\textbf{Command}} & \multicolumn {1}{l}{\textbf{Beschreibung}} \\
\hline
\hline
\endfirsthead
%\multicolumn{2}{c}{{\bfseries \tablename \thetable{} continued from previous page.}} \\
\multicolumn{2}{r}{{\bfseries continued from previous page.}} \\
\rowcolor{hellgrau}\multicolumn{1}{l}{\textbf{Command}} & \multicolumn {1}{l}{\textbf{Beschreibung}} \\
\hline
\hline
\endhead
%\multicolumn{2}{r}{{\bfseries \tablename \thetable{} Continued on next page}} \\
\multicolumn{2}{r}{{\bfseries Continued on next page}} \\
\endfoot
\caption{Forget Commands} \\
\endlastfoot
-l, \verb|--|keep-last= & Behalte n Snapshots\\
-H, \verb|--|keep-hourly= & Behalte die letzten n Stunden Snapshots\\
-d, \verb|--|keep-daily= & Behalten die letzten n Tages Snapshots\\
-w, \verb|--|keep-weekly= & Behalte die letzten n Wochen Snapshots\\
-m, \verb|--|keep-monthly= & Behalte die letzten n Monats Snapshots\\
-y, \verb|--|keep-yearly= & Behalte die letzten n Jahres Snapshots\\
\verb|--|hostname= & L"osche nur die Snapshots von dem Host\\
-n, \verb|--|dry-run & Es erfolgt nur die Anzeige, was gel"oscht werden soll\\
\end{longtable}
\listBash
\begin{lstlisting}[captionpos=b, caption=Forget Beispiel]
uws@tux>restic -r /run/media/restic/Repo forget --dry-run --keep-last=2
enter password for repository:
repository 3b92a80b opend successfully, password is correct
Applying Policy: keep the last 2 snapshots snapshots
snapshots for (host [tux], paths [/daten])
keep 2 Snapshots
.
.
\end{lstlisting}
Das {\ttfamily forget} l"oscht die Daten nicht aus dem Repository, sondern erst der Parameter {\ttfamily prune}.
\listBash
\begin{lstlisting}[captionpos=b, caption=Prune]
uws@tux>restic -r /run/media/restic/Repo prune
\end{lstlisting}
%-------------------------------------------------------------------------------
% Subsection: List Snapshots
%-------------------------------------------------------------------------------
\subsection{List Snapshots}
Alle erstellten Snapshots k"onnen mit der Option snapshots angezeigt werden.
\listBash
\begin{lstlisting}[captionpos=b, caption=List alle Snapshots]
uws@tux>restic -r /run/media/restic/Repo snapshots
enter password for repository:
repository 3b92a80b opened successfully, password is correct
ID Time Host Tags Paths
-----------------------------------------------------------------------
9b431633 2019-03-24 18:01:19 svgo226 Program /daten/program/bin
39c1ce35 2019-03-25 08:51:15 svgo226 Daten /daten/program/bin
56daf1ba 2019-03-25 19:23:58 svgo226 Privat /fsgo002/daten/Privat
.
.
\end{lstlisting}
Man kann sich die Ausgabe auch Filtern nach Host, Tag oder Path.
\listBash
\begin{lstlisting}[captionpos=b, caption=List Snapshots by Filter]
uws@tux>restic -r /run/media/restic/Repo snapshots --tag Program
enter password for repository:
repository 3b92a80b opened successfully, password is correct
ID Time Host Tags Paths
-------------------------------------------------------------------------
9b431633 2019-03-24 18:01:19 svgo226 Program /daten/program/bin
-------------------------------------------------------------------------
1 snapshots
\end{lstlisting}
Eine Gruppierte Anzeige der Snapshots erh"alt man mit der Option \verb|--|group-by.
\listBash
\begin{lstlisting}[captionpos=b, caption=List Snapshots Gruppiert]
uws@tux>restic -r /run/media/restic/Repo snapshots --group-by tags
enter password for repository:
repository 3b92a80b opened successfully, password is correct
snapshots for (tags [Public]):
ID Time Host Tags Paths
----------------------------------------------------------------------
afee555e 2019-04-30 19:07:50 svgo226 Public /fsgo002/public
66c14051 2019-05-31 19:07:53 svgo226 Public /fsgo002/public
.
.
\end{lstlisting}
Informationen "uber einen Snapshot kann man aich auch mit {\ttfamily cat snapshot} sich anzeigen lassen.
\listBash
\begin{lstlisting}[captionpos=b, caption=Snapshot Info]
uws@tux>restic -r /run/media/restic/Repo cat snapshot 5d48ac37
enter password for repository:
repository a4a03d0e opened successfully, password is correct
{
"time": "2020-04-23T19:00:20.501944312+02:00",
"parent": "dbed1e40....",
"tree": "d62886620d...",
"paths": [
"/home/uws"
],
"hostname": "tux01",
"username": "uws",
"tags": [
"Home"
]
}
\end{lstlisting}
%-------------------------------------------------------------------------------
% Subsection: List Files
%-------------------------------------------------------------------------------
\subsection{List Files}
Eine Auflistung, welche Dateien sich in dem Backup befinden, bekommt man mit {\ttfamily ls}.
\listBash
\begin{lstlisting}[captionpos=b, caption=List Backup Files]
uws@tux>restic -r /run/media/restic/Repo ls -l <RepoID>
uws@tux># Anstelle der RepoID kann man auch latest nehmen.
\end{lstlisting}
%-------------------------------------------------------------------------------
% Subsection: Backup Statistic
%-------------------------------------------------------------------------------
\subsection{Backup Statistik}
Informationen "uber die Backups kann man mit {\ttfamily stats} erhalten.
\listBash
\begin{lstlisting}[captionpos=b, caption=Backup Informationen]
uws@tux>restic -r /run/media/restic/Repo stats
enter password for repository:
repository 3b92a80b opend successfully, password is correct
scanning...
Stats for all snapshots in restore-size mode:
Total File count: 1722
Total Size: 135.936 MiB
\end{lstlisting}
%-------------------------------------------------------------------------------
% Subsection: Backup Check
%-------------------------------------------------------------------------------
\subsection{Backup Check}
Das Repository kann man mit der Option {\ttfamily check} "uberpr"ufen.
\listBash
\begin{lstlisting}[captionpos=b, caption=Backup Check]
uws@tux>restic -r /run/media/restic/Repo check
using temporary cache in /tmp/restic-check-cache-259726251
enter password for repository:
repository 3b92a80b opend successfully, password is correct
created new cache in /tmp/restic-check-cache-259726251
create exclisu´ive lock for repository
load indexes
check all packs
check snapshots, trees and blobs
no errors where found
uws@tux>restic -r /run/media/restic/Repo check --check-unused
uws@tux>restic -r /run/media/restic/Repo check --read-data
\end{lstlisting}
Kommt bei {\ttfamily check} die Meldung: {\ttfamily error: load <snapshot/3f80fcb4a5>: invalid data returns}, so ist der angegebene Snapshot aus dem Repository zu l"oschen. Ein {\ttfamily check \verb|--|read-data} hilft hier nicht weiter.
\listBash
\begin{lstlisting}[captionpos=b, caption=Delete Snapshot]
uws@tux>restic -r /run/media/restic/Repo forget 3f80fcb4a5
\end{lstlisting}
Bei der Fehlermeldung {\ttfamily error: Loading index 259d3ec95: load <index/259...>: invalid data returned}, so kann man den Index neu aufbauen.
\listBash
\begin{lstlisting}[captionpos=b, caption=Index neu]
uws@tux>restic -r /run/media/restic/Repo rebuild-index
enter password for repository:
repository c7b67ed1 opened successfully, password is correct
counting files in repo
[0:00] 100.00% 1569 / 1569 packs
finding old index files
saved new indexes as [318c651d]
remove 1 old index files
\end{lstlisting}
%-------------------------------------------------------------------------------
% Subsection: Repository Unlock
%-------------------------------------------------------------------------------
\subsection{Repository Unlock}
St"uerzt das Programm w"ahrend eines Backups ab, so ist das Repository gesperrt. Mit der Option {\ttfamily unlock} kann man sie Sperre entfernen.
\listBash
\begin{lstlisting}[captionpos=b, caption=Repository Unlock]
uws@tux>restic -r /run/media/restic/Repo unlock
enter password for repository:
repository 3b92a80b opened successfully, password is correct
successfully removed locks
\end{lstlisting}
\end{justify}

321
Kapitel14/Borg.tex Executable file
View File

@ -0,0 +1,321 @@
\section{Borg}
\begin{justify}
Das Backup Programm {\ttfamily Borg} ist ein fork von dem Programm {\ttfamily Attic}. Borg und Attic sind in Python geschrieben und Attic wird nicht mehr weiterentwickelt.\\
Alle Borg Variablen gibt es hier:\\
https://borgbackup.readthedocs.io/en/stable/usage.html\verb|#|\\
Ein Auswahl von Borg Variablen:
\begin{table}[ht]
\begin{tabular}{p{4cm}p{12cm}} % l => Text left, c => center, r => right, p => zeilenumbruch
\hline \rowcolor{hellgrau}\emph{\textbf{Variable}} & \emph{\textbf{Beschreibung}}\\
\hline
\hline
BORG\_REPO & Wenn definiert, kann man die Abk"urzung ::archive benutzen\\
BORG\_PASSPHRASE & Wenn definiert, erfolgt keine Abfrage des Kennwortes mehr\\
BORG\_DISPLAY\_PASSPHRASE & \\
BORG\_KEYS\_DIR & Standard ist \verb|~|/.config/borg/keys. Ablage der Keys\\
BORG\_SECURITY\_DIR & Standard ist \verb|~|/.config/borg/security. Hier werden die Security Daten abgelegt\\
BORG\_CACHE\_DIR & Standard ist \verb|~|/.cache/borg. Zwischenspeicher, ben"otigt bei gro"sen Repositories viel Platz\\
\end{tabular}
\caption{Auswahl Variablen}
\end{table}
%-------------------------------------------------------------------------------
% Section: Installation
%-------------------------------------------------------------------------------
\subsection{Installation}
Unter Arch Linux kann man das Programm aus dem Repository installieren. Ebenso kann man die Software von dem Hersteller herunterladen und h"andisch installieren. Hierbei muss man sich sekbst um ein Update des Programms k"ummern.
\listBash
\begin{lstlisting}[captionpos=b, caption=Installation]
root@tux>pacman -Sy borg
uws@tux>wget https://github.com/borgbackup/borg/releases/download/1.1.0b5/borg-linux64
root@tux># je nach Distribution auch unter /usr/local/bin
root@tux>cp borg-linux64 /usr/bin/borg
root@tux>chown root:root /usr/bin/borg
root@tux>chmod 755 /usr/bin/borg
\end{lstlisting}
\newpage
%-------------------------------------------------------------------------------
% Section: Repository
%-------------------------------------------------------------------------------
\subsection{Repository erstellen}
\begin{justify}
Als erstes muss f"ur ein Backup ein Repository eingerichtet werden. Standardm"a"sig ist die Verschl"usselung des Backups eingeschaltet. Es wird eine Verschl"usselung mit einem {\ttfamily repokey} genommen. Um den Mode zu "andern, gibt man ein {\ttfamily -e <mode>} bei dem anlegen des Repositories an. Ausser {\ttfamily repokey} gibt es noch {\ttfamily none} und {\ttfamily keyfile}. Bei {\ttfamily repokey} befindet sich der Schl"ussel in der Datei {\ttfamily <repo\_path/config}. Bei {\ttfamily keyfile} wird die Datei im Home-Verzeichnis unter {\ttfamily \verb|~|/.config/borg/keys} abgespeichert. Diese Dateien sollten gesichert werden, um sie bei einem Defekt wieder herstellen zu k"onnen. Die Datenverschl"usselung wird mit einem 256-bit AES gemacht.
\end{justify}
\begin{table}[ht]
\begin{tabular}{lp{12cm}} % l => Text left, c => center, r => right, p => zeilenumbruch
none & keine Verschl"usselung\\
keyfile & Schl"ussel in \verb|~|/.config/keys\\
repokey & Schl"ussel im Repository\\
\end{tabular}
\end{table}
\listBash
\begin{lstlisting}[captionpos=b, caption=Repository erstellen]
uws@tux>borg init -e keyfile /repo/path
\end{lstlisting}
%-------------------------------------------------------------------------------
% Section: Backup erstellen
%-------------------------------------------------------------------------------
\subsection{Backup erstellen}
\listBash
\begin{lstlisting}[captionpos=b, caption=Backup erstellen]
uws@tux>borg create [-v] [--stats] [--list] [--progress] /repo/path::Sunday /daten/Bilder /daten/Music
\end{lstlisting}
\begin{table}[ht]
\begin{tabular}{lp{12cm}} % l => Text left, c => center, r => right, p => zeilenumbruch
-v, \verb|--|info & Ausf"uhrliche Ausgabe, log Level INFO\\
-n, \verb|--|dry-run & Testlauf\\
-s, \verb|--|stats & Statistik am Ende des Backups\\
\verb|--|list & Zeigt die Dateien an, die im Backup landen\\
-p, \verb|--|progress & Anzeige des Fortschritts\\
-C, \verb|--|compression & None, zlib, lz4, lzma. Es kann nach der Angabe der Kompression auch noch der Level angegeben werden z.B. zlib,8. Standard ist der Level 6.\\
-e, \verb|--|exclude & Ausschlie"sen von Dateien / Verzeichnissen. Kann mehrfach angegeben werden.\\
\end{tabular}
\end{table}
%-------------------------------------------------------------------------------
% Section: Backup Scripten
%-------------------------------------------------------------------------------
\subsection{Backup Scripten}
Bei jeder An- und Abfrage des Repositories wird nach dem Kennwort gefragt. Wird die
Variable {\ttfamily BORG\_PASSPHRASE} exportiert, so entf"allt die Passwort Abfrage.
Dieses kann in Backup Scripten verwendet werden.
\listBash
\begin{lstlisting}[captionpos=b, caption=Backup Script]
uws@tux>cat borg_example.shabox
#!/usr/bin/env bash
REPOSITORY=/backup/borg_bck
export BORG_PASSPHRASE='myKennwort'
BACKUPHOST=$(echo $HOSTNAME | cut -d'.' -f1)
borg create -v --stats \
$REPOSITORY::$BACKUPHOST-$(date +%Y_%m_%d) \
/daten/Scripts \
/daten/Programming \
--exclude /daten/Programming/Test
backup_exit=$?
# More examples for --exclude
# --exclude '/home/*/.cache'
# --exclude '*.pyc'
# Vorhaltezeit
# Die Angabe des Prefix ist notwendig, da dadurch sichergestellt ist,
# das nur die Backups geloescht werden, die von der Maschine stammen.
# Es werden sonst alle Backups geloescht.
borg prune -v --list $REPOSITORY --prefix $BACKUPHOST \
--keep-daily=7 --keep-weekly=4 --keep-monthly=6
prune_exit=$?
# Ermitteln des hoechsten Exit Codes
global_exit=$(( backup_exit > prune_exit ? backup_exit : prune_exit ))
if [ ${global_exit} -eq 1];
then
echo "Backup and/or Prune finished with warning"
fi
if [ ${global_exit} -gt 1];
then
echo "Backup and/or Prune finished with error"
fi
exit ${global_exit}
\end{lstlisting}
%-------------------------------------------------------------------------------
% Section: Kex Ex- und Importieren
%-------------------------------------------------------------------------------
\subsection{Key Ex- und Import}
\listBash
\begin{lstlisting}[captionpos=b, caption=Ex- / Import Key]
uws@tux>borg key export --paper /repo/path > repo_sec.paper
uws@tux>borg key import --paper /repo/path
\end{lstlisting}
%-------------------------------------------------------------------------------
% Section: Delete Backup
%-------------------------------------------------------------------------------
\subsection{Backup delete}
Mit dem ersten Beispiel wird nur das Backup vom Montag gel"oscht und bei dem zweiten
Beispiel werden alle Backups ud auch das Repository gel"oscht.
\listBash
\begin{lstlisting}[captionpos=b, caption=Backup delete]
uws@tux>borg delete /repo/path::Montag
uws@tux>borg delete /repo/path
\end{lstlisting}
%-------------------------------------------------------------------------------
% Section: Info Archiv
%-------------------------------------------------------------------------------
\subsection{Info Repo / Archiv}
Mit {\ttfamily borg list /repo/path::<backup\_name>} wird der Inhalt des Backups angezeigt.
Also alle Dateien, die sich in dem Archiv sich befinden. Ohne Angabe des Backups
werden nur die erstellten Backups angezeigt.
\listBash
\begin{lstlisting}[captionpos=b, caption=List Repo]
uws@tux>borg list /repo/path
fsgo002-2018_08_07 Tue, 2018-08-07 20:00:03 [6c1c6af082db16a502f1f81adcb07beb1a1cd977fdb17fcb04fd8951baf2c6f9]
fsgo002-2018_08_08 Wed, 2018-08-08 07:57:38 [d4353a6c7a515dd127241488a202d1d336db1e5628cadcefce35916d210a03e5]
fsgo002-2018_08_09 Thu, 2018-08-09 20:00:05 [06c0586d25ecdc9eedbf88c14d80a11cc6d42453423ca247dbfd2878d2498eed]
fsgo002-2018_08_10 Fri, 2018-08-10 20:00:05 [8c75710dc92de49bfcaed53286fe2d0d281cff89c7ca0f9a0e9e482068822c91]
\end{lstlisting}
\listBash
\begin{lstlisting}[captionpos=b, caption=Info Repo]
$ borg info /repo/path
Enter passphrase for key /repo/path:
Repository ID: 26d1581f08af88066cfdd976649edb70866d3d4304ffa673abcba73057a45538
Location: /repo/path
Encrypted: Yes (repokey)
Cache: /home/uws/.cache/borg/26d1581f08af88066cfdd976649edb70866d3d4304ffa673abcba73057a45538
Security dir: /home/uws/.config/borg/security/26d1581f08af88066cfdd976649edb70866d3d4304ffa673abcba73057a45538
------------------------------------------------------------------------------
Original size Compressed size Deduplicated size
All archives: 902.14 GB 848.43 GB 151.90 GB
Unique chunks Total chunks
Chunk index: 220795 1195021
\end{lstlisting}
\listBash
\begin{lstlisting}[captionpos=b, caption=Info Archiv]
uws@tux>borg info /repo/path::Montag
Enter passphrase for key /repo/path:
Name: Montag
Fingerprint: 9a8cc406...
Hostname: tux
Username: uws
Time (start): Mon, 2017-05-22 19:15:03
Time (end): Mon, 2017-05-22 19:15:33
Command line: /usr/bin/borg create -v --stats /repo/path::Montag ...
Number of files: 81
Original size Compressed size Deduplicated size
This archive: 2.88 MB 2.88 MB 26.62 kB
All archives: 60.58 MB 60.61 MB 56.49 MB
Unique chunks Total chunks
Chunk index: 700 823
\end{lstlisting}
%-------------------------------------------------------------------------------
% Section: Mount / Umount
%-------------------------------------------------------------------------------
\subsection{Mount / Umount}
Man kann das Repository oder ein Archiv mounten. Hierf"ur muss das Python Module
{\ttfamily llfuse} installiert sein.
\listBash
\begin{lstlisting}[captionpos=b, caption=Mount / Umount]
root@tux>pip install llfuse
uws@tux>borg mount /repo/path /path/to/mount
uws@tux>borg mount /repo/path::Montag /path/to/mount
uws@tux>borg umount /path/to/mount
\end{lstlisting}
%-------------------------------------------------------------------------------
% Section: Change Passwort
%-------------------------------------------------------------------------------
\subsection{Change Passwort}
\listBash
\begin{lstlisting}[captionpos=b, caption=Change Passwort]
uws@tux>borg init --encryption=keyfile -v /repo/path # create new repository
uws@tux>borg key change-passphrase -v /repo/path
\end{lstlisting}
%-------------------------------------------------------------------------------
% Section: Platzhalter
%-------------------------------------------------------------------------------
\subsection{Platzhalter}
\begin{table}[ht]
\begin{tabular}{lp{12cm}} % l => Text left, c => center, r => right, p => zeilenumbruch
\verb|{hostname}| & Name der Maschine, kurz\\
\verb|{fqdn}| & Name der Maschine, lang\\
\verb|{now}| & Aktuelle locale Datum und Zeit\\
\verb|{utynow}| & Aktuelle UTC Datum und Zeit\\
\verb|{user}| & User Name\\
\verb|{pid}| & Process ID\\
\verb|{borgversion}| & Version des Programms z.B. 1.0.8rc1\\
\verb|{borgmajor}| & Hauptbersion z.B 1\\
\verb|{borgminor}| & Unterversion z.B. 1.0\\
\verb|{borgpatch}| & Patch Version z.B. 1.0.8\\
\end{tabular}
\end{table}
\begin{justify}
Beispiele:
\end{justify}
\listBash
\begin{lstlisting}[captionpos=b, caption=Platzhalter]
uws@tux>borg create /repo/path::{hostname}-{user}-{utcnow} ...
uws@tux>borg create /repo/path::{hostname}-{now:%Y_%m_%d_%H:%M:%S} ...
uws@tux>borg prune --prefix '{hostname}-' ...
\end{lstlisting}
%-------------------------------------------------------------------------------
% Section: Restore
%-------------------------------------------------------------------------------
\subsection{Restore}
Es gibt mehrere Wege, Dateien aus dem Backup wieder herzustellen. F"ur ein Restore ist
es am besten, vorher ein neues Verzeichnis anzulegen, worin der Restore abgelegt
werden kann. Steht man in dem Produktiv Verzeichnis, werden die Daten bei einem
Restore "uberschrieben.\\
F"ur ein Restore kann man auch das Repository / Backup mounten und dann mit dem
Explorer die gew"unschten Daten wieder herstellen.
\listBash
\begin{lstlisting}[captionpos=b, caption=Create Restore Path]
uws@tux>mkdir -p /restore/data && cd /restore/data
\end{lstlisting}
Nun kann man mit {\ttfamily extract} die Daten aus dem Backup wieder herstellen.\\
In dem ersten Beispiel werden alle Daten aus dem Backup geholt.
\listBash
\begin{lstlisting}[captionpos=b, caption=Restore all]
uws@tux>borg extract -v --list /repo/path/::Montag
\end{lstlisting}
Dateien aus einem bestimmten Verzeichnis wieder herstellen.
\listBash
\begin{lstlisting}[captionpos=b, caption=Restore Path]
uws@tux>borg extract -v --list /repo/path::Montag /daten/scripts
\end{lstlisting}
Dateien von einem Restore ausschlie"sen.
\listBash
\begin{lstlisting}[captionpos=b, caption=Restore mit exclude]
uws@tux>borg extract -v --list /repo/path::Montag /daten/scripts -exclude '*.o'
\end{lstlisting}
%-------------------------------------------------------------------------------
% Section: Backup ueberpruefen
%-------------------------------------------------------------------------------
\subsection{Backup "uberpr"ufen}
Mit {\ttfamily borg check} kann man das Backup Repository "uberpr"ufen. Die
"Uberpr"ufung des Repositories kann unter Umst"anden sehr lange dauern, h"angt
von der Gr"o"se des Repositories ab.\\
Gibt man {\ttfamily \verb|--|repository-only} mit an, wird nur das Repository
"uberpr"uft und nicht auch noch die Backups. Dieses geht erheblich schneller.
Wird bei {\ttfamily \verb|--|archives-only} kein Backup Name mit angegeben,
so werden alle Backups "uberpr"uft.
\listBash
\begin{lstlisting}[captionpos=b, caption=Backup "uberpr"ufen]
uws@tux>borg check -v --repository-only /repo/path
uws@tux>borg check -v --archives-only /repo/path::Montag
\end{lstlisting}
%-------------------------------------------------------------------------------
% Section: Backup Rename
%-------------------------------------------------------------------------------
\subsection{Backup Rename}
M"ochte man ein Backup umbenennen, so kann man das mit {\ttfamily borg rename} machen.
\listBash
\begin{lstlisting}[captionpos=b, caption=Backup umbenennen]
uws@tux>borg rename /repo/path::Montag Monday
\end{lstlisting}
%-------------------------------------------------------------------------------
% Section: Borg unlock
%-------------------------------------------------------------------------------
\subsection{Borg unlock}
Bei jedem Backup wird bei dem Starten eine Lock Datei in dem Repository angelegt.
Bei einem Absturz des Backups kann es vorkommen, das die Lock Datei nicht
gel"oscht wurde. Mit {\ttfamily borg break-lock} kann man die Sperre aufheben.
\listBash
\begin{lstlisting}[captionpos=b, caption=Sperre aufheben]
uws@tux>borg break-lock /repo/path
\end{lstlisting}
\end{justify}

6
Kapitel14/Index.tex Executable file
View File

@ -0,0 +1,6 @@
\chapter{Backup}
%-------------------------------------------
% load other documents
%------------------------------------------
\input{Kapitel14/Borg}
\include{Kapitel14/Restic}

389
Kapitel14/Restic.tex Executable file
View File

@ -0,0 +1,389 @@
\section{Restic}
\subsection{Allgemein}
\begin{justify}
Mit dem Programm {\ttfamily restic} k"onnen in einer Shell ein Backup von Verzeichnissen erstellt werden. Das Programm macht auch Incrementelle Backups und versteht deduplication. Das Backup wird in dem Repository verschl"usselt abgelegt. Restic kann das Backup auch in der Cloud ablegen.
%-------------------------------------------------------------------------------
% Subsection: Installation
%-------------------------------------------------------------------------------
\subsection{Installation}
Das Programm ist in den meisten Repositorys der Distributionen enthalten und k"onnen "uber den Paketmanager installiert werden.
\listBash
\begin{lstlisting}[captionpos=b, caption=Installation]
uws@tux># Arch Linux
uws@tux>sudo pacman -S restic rclone
uws@tux># Debian
uws@tux>sudo apt install restic rclone
uws@tux># Fedora
uws@tux>sudo dnf install restic rclone
uws@tux># RHEL und CentOS
uws@tux>sudo yum install yum-plugin-copr
uws@tux>sudo yum copr enable copart/restic
uws@tux>sudo yum install restic rclone
\end{lstlisting}
%-------------------------------------------------------------------------------
% Subsection: Init Repo
%-------------------------------------------------------------------------------
\subsection{Repository erstellen}
Das Kennwort f"ur das Repository wird auch darin abgelegt. Als erstes wird das Repository initalisiert.
\listBash
\begin{lstlisting}[captionpos=b, caption=Repository erstellen]
uws@tux>restic init --repo /run/media/restic/repo
enter password for new backend:
enter password again:
created restic backend 0815b4711c at /run/media/restic/repo
Please noze that knowledge of your password is required to access the repository.
Losing your password means that your data is irrecoverable lost.
\end{lstlisting}
M"ochte man das Backup in die Cloud ablegen, so kann man das mit SFTP machen. Damit man nicht das Passwort des SFTP-Users eingeben muss, kann man ein Public Key erstellen.
\listBash
\begin{lstlisting}[captionpos=b, caption=Cloud Repository erstellen]
uws@tux>restic init --repo sftp:resticbck@sftp.hidrive.strato.com:/users/resticbck/backup.repo/Local
\end{lstlisting}
\newpage
Mit dem Programm {\ttfamily rclone} kann man sich Online Storage verbinden. Das Programm speichert nicht nur den Pfad und den User Namen, sondern auch das Passwort. Dokumentation über rclone gibt es unter https://rclone.org/docs.
\listBash
\begin{lstlisting}[captionpos=b, caption=Rclone und Restic]
uws@tux># Install rclone
uws@tux>sudo pacman -S rclone
uws@tux># Create connection
uws@tux>sudo rclone config
uws@tux># Create Repo
uws@tux>restic init --repo rclone:Hidrive:/users/resticbck/backup.repo/local
\end{lstlisting}
%-------------------------------------------------------------------------------
% Subsection: Backup
%-------------------------------------------------------------------------------
\subsection{Backup}
Ein Backup wird mit dem Parameter {\ttfamily backup} gemacht. Mit der Option {\ttfamily \verb|--|tag} kann man noch ein Tag definieren. Eine Ausf"uhrliche Ausgabe des Backups erh"alt man mit {\ttfamily -v, \verb|--|verbose}. Mit {\ttfamily \verb|--|verbose=2} gibt es eine noch detailierte Ausgabe.
\listBash
\begin{lstlisting}[captionpos=b, caption=Backup Commandozeile]
uws@tuc>restic -r /run/media/restic/repo --tag "First Backup" backup /daten
\end{lstlisting}
In einem Script kann man ben"otigte Parameter in Variablen definieren.
\begin{longtable}[l]{p{5cm}p{11cm}}
\rowcolor{hellgrau}\multicolumn{1}{l}{\textbf{Variable}} & \multicolumn {1}{l}{\textbf{Beschreibung}} \\
\hline
\hline
\endfirsthead
%\multicolumn{2}{c}{{\bfseries \tablename \thetable{} continued from previous page.}} \\
\multicolumn{2}{r}{{\bfseries continued from previous page.}} \\
\rowcolor{hellgrau}\multicolumn{1}{l}{\textbf{Variable}} & \multicolumn {1}{l}{\textbf{Beschreibung}} \\
\hline
\hline
\endhead
%\multicolumn{2}{r}{{\bfseries \tablename \thetable{} Continued on next page}} \\
\multicolumn{2}{r}{{\bfseries Continued on next page}} \\
\endfoot
\caption{Restic Variablen} \\
\endlastfoot
RESTIC\verb|_|REPOSITORY & Angabe des Repositories oder Angabe mit -r\\
RESTIC\verb|_|PASSWORD\verb|_|FILE & Passwort Datei\\
RESTIC\verb|_|PASSWORD & Das Passwort des Repositories\\
AWS\verb|_|ACCESS\verb|_|KEY\verb|_|ID & Amazon S3 access key ID\\
AWS\verb|_|SECRET\verb|_|ACCESS\verb|_|KEY & Amazon S3 secret access key\\
ST\verb|_|AUTH & Auth URL f"ur Keystone vi authentication\\
ST\verb|_|USER & Username f"ur Keystone vi authentication\\
ST\verb|_|KEY & Passwort f"ur Keystone vi authentication\\
RCLONE\verb|_|BWLIMIT & Bandbreite limit z.B. 1M\\
RCLONE\verb|_|VERBOSE & Debugging einschalten z.B. =2\\
\end{longtable}
Beispiel eines einfachen Scripts.
\listBash
\begin{lstlisting}[captionpos=b, caption=Script Example]
uws@tux>cat BackupWithRestic.sh
#!/bin/env listBash
export RESTIC_REPOSITORY="/run/media/restic/Repo"
export RESTIC_PASSWORD="StrongSecretPassword"
restic -v -v --Tag "Restic Backup" backup /daten >> /daten/var/log/BackupRestic.log
# List Snapshots
restic snapshots
\end{lstlisting}
Ein Backup mit Rclone.
\listBash
\begin{lstlisting}[captionpos=b, caption=Backup mit Rclone]
uws@tux>restic -r rclone:Hidrive:/users/resticbck/backup.repo/local backup /daten
\end{lstlisting}
%-------------------------------------------------------------------------------
% Subsection: Backup prune
%-------------------------------------------------------------------------------
\subsection{Backup Vorhalten}
Man kann mit {\ttfamily forget} und weiteren Parametern definieren, wie lange Backups vorgehalten werden sollen. Mit dem Parameter {\ttfamily \verb|--|dry-run} werden die Backups nicht gel"oscht, sondern nur angezeigt, was gel"oscht werden soll. Gibt man hinter {\ttfamily forget} die ID des Snapshots mit an, so wird nur der Snapshot gel"oscht.
\begin{longtable}[l]{p{4cm}p{12cm}}
\rowcolor{hellgrau}\multicolumn{1}{l}{\textbf{Command}} & \multicolumn {1}{l}{\textbf{Beschreibung}} \\
\hline
\hline
\endfirsthead
%\multicolumn{2}{c}{{\bfseries \tablename \thetable{} continued from previous page.}} \\
\multicolumn{2}{r}{{\bfseries continued from previous page.}} \\
\rowcolor{hellgrau}\multicolumn{1}{l}{\textbf{Command}} & \multicolumn {1}{l}{\textbf{Beschreibung}} \\
\hline
\hline
\endhead
%\multicolumn{2}{r}{{\bfseries \tablename \thetable{} Continued on next page}} \\
\multicolumn{2}{r}{{\bfseries Continued on next page}} \\
\endfoot
\caption{Forget Commands} \\
\endlastfoot
-l, \verb|--|keep-last= & Behalte n Snapshots\\
-H, \verb|--|keep-hourly= & Behalte die letzten n Stunden Snapshots\\
-d, \verb|--|keep-daily= & Behalten die letzten n Tages Snapshots\\
-w, \verb|--|keep-weekly= & Behalte die letzten n Wochen Snapshots\\
-m, \verb|--|keep-monthly= & Behalte die letzten n Monats Snapshots\\
-y, \verb|--|keep-yearly= & Behalte die letzten n Jahres Snapshots\\
\verb|--|hostname= & L"osche nur die Snapshots von dem Host\\
-n, \verb|--|dry-run & Es erfolgt nur die Anzeige, was gel"oscht werden soll\\
\end{longtable}
\listBash
\begin{lstlisting}[captionpos=b, caption=Forget Beispiel]
uws@tux>restic -r /run/media/restic/Repo forget --dry-run --keep-last=2
enter password for repository:
repository 3b92a80b opend successfully, password is correct
Applying Policy: keep the last 2 snapshots snapshots
snapshots for (host [tux], paths [/daten])
keep 2 Snapshots
.
.
\end{lstlisting}
Das {\ttfamily forget} l"oscht die Daten nicht aus dem Repository, sondern erst der Parameter {\ttfamily prune}.
\listBash
\begin{lstlisting}[captionpos=b, caption=Prune]
uws@tux>restic -r /run/media/restic/Repo prune
\end{lstlisting}
%-------------------------------------------------------------------------------
% Subsection: Backup löschen
%-------------------------------------------------------------------------------
\subsection{Backup löschen}
Ein einzelnes Backup kann mit {\ttfamily forget} gelöscht werden.
\listBash
\begin{lstlisting}[captionpos=b, caption=Backup löschen]
uws@tux>restic -r /run/media/restic/Repo/Local forget 1cdcc44a
enter password for repository:
repository fa95143a opened successfully, password is correct
[0:00] 100.00% 1 / 1 files deleted...
\end{lstlisting}
\newpage
%-------------------------------------------------------------------------------
% Subsection: List Snapshots
%-------------------------------------------------------------------------------
\subsection{List Snapshots}
Alle erstellten Snapshots k"onnen mit der Option snapshots angezeigt werden.
\listBash
\begin{lstlisting}[captionpos=b, caption=List alle Snapshots]
uws@tux>restic -r /run/media/restic/Repo snapshots
enter password for repository:
repository 3b92a80b opened successfully, password is correct
ID Time Host Tags Paths
-----------------------------------------------------------------------
9b431633 2019-03-24 18:01:19 svgo226 Program /daten/program/bin
39c1ce35 2019-03-25 08:51:15 svgo226 Daten /daten/program/bin
56daf1ba 2019-03-25 19:23:58 svgo226 Privat /fsgo002/daten/Privat
.
.
\end{lstlisting}
Man kann sich die Ausgabe auch Filtern nach Host, Tag oder Path.
\listBash
\begin{lstlisting}[captionpos=b, caption=List Snapshots by Filter]
uws@tux>restic -r /run/media/restic/Repo snapshots --tag Program
enter password for repository:
repository 3b92a80b opened successfully, password is correct
ID Time Host Tags Paths
-------------------------------------------------------------------------
9b431633 2019-03-24 18:01:19 svgo226 Program /daten/program/bin
-------------------------------------------------------------------------
1 snapshots
\end{lstlisting}
Eine Gruppierte Anzeige der Snapshots erh"alt man mit der Option \verb|--|group-by.
\listBash
\begin{lstlisting}[captionpos=b, caption=List Snapshots Gruppiert]
uws@tux>restic -r /run/media/restic/Repo snapshots --group-by tags
enter password for repository:
repository 3b92a80b opened successfully, password is correct
snapshots for (tags [Public]):
ID Time Host Tags Paths
----------------------------------------------------------------------
afee555e 2019-04-30 19:07:50 svgo226 Public /fsgo002/public
66c14051 2019-05-31 19:07:53 svgo226 Public /fsgo002/public
.
.
\end{lstlisting}
Informationen "uber einen Snapshot kann man sich auch mit {\ttfamily cat snapshot} sich anzeigen lassen.
\listBash
\begin{lstlisting}[captionpos=b, caption=Snapshot Info]
uws@tux>restic -r /run/media/restic/Repo cat snapshot 5d48ac37
enter password for repository:
repository a4a03d0e opened successfully, password is correct
{
"time": "2020-04-23T19:00:20.501944312+02:00",
"parent": "dbed1e40....",
"tree": "d62886620d...",
"paths": [
"/home/uws"
],
"hostname": "tux01",
"username": "uws",
"tags": [
"Home"
]
}
\end{lstlisting}
%-------------------------------------------------------------------------------
% Subsection: List Files
%-------------------------------------------------------------------------------
\subsection{List Files}
Eine Auflistung, welche Dateien sich in dem Backup befinden, bekommt man mit {\ttfamily ls}.
\listBash
\begin{lstlisting}[captionpos=b, caption=List Backup Files]
uws@tux>restic -r /run/media/restic/Repo ls -l <RepoID>
uws@tux># Anstelle der RepoID kann man auch latest nehmen.
\end{lstlisting}
%-------------------------------------------------------------------------------
% Subsection: Backup Statistic
%-------------------------------------------------------------------------------
\subsection{Backup Statistik}
Informationen "uber die Backups kann man mit {\ttfamily stats} erhalten.
\listBash
\begin{lstlisting}[captionpos=b, caption=Backup Informationen]
uws@tux>restic -r /run/media/restic/Repo stats
enter password for repository:
repository 3b92a80b opend successfully, password is correct
scanning...
Stats for all snapshots in restore-size mode:
Total File count: 1722
Total Size: 135.936 MiB
\end{lstlisting}
%-------------------------------------------------------------------------------
% Subsection: Backup Check
%-------------------------------------------------------------------------------
\subsection{Backup Check}
Das Repository kann man mit der Option {\ttfamily check} "uberpr"ufen.
\listBash
\begin{lstlisting}[captionpos=b, caption=Backup Check]
uws@tux>restic -r /run/media/restic/Repo check
using temporary cache in /tmp/restic-check-cache-259726251
enter password for repository:
repository 3b92a80b opend successfully, password is correct
created new cache in /tmp/restic-check-cache-259726251
create exclisu´ive lock for repository
load indexes
check all packs
check snapshots, trees and blobs
no errors where found
uws@tux>restic -r /run/media/restic/Repo check --check-unused
uws@tux>restic -r /run/media/restic/Repo check --read-data
\end{lstlisting}
Kommt bei {\ttfamily check} die Meldung: {\ttfamily error: load <snapshot/3f80fcb4a5>: invalid data returns}, so ist der angegebene Snapshot aus dem Repository zu l"oschen. Ein {\ttfamily check \verb|--|read-data} hilft hier nicht weiter.
\listBash
\begin{lstlisting}[captionpos=b, caption=Delete Snapshot]
uws@tux>restic -r /run/media/restic/Repo forget 3f80fcb4a5
\end{lstlisting}
Bei der Fehlermeldung {\ttfamily error: Loading index 259d3ec95: load <index/259...>: invalid data returned}, so kann man den Index neu aufbauen.
\listBash
\begin{lstlisting}[captionpos=b, caption=Index neu]
uws@tux>restic -r /run/media/restic/Repo rebuild-index
enter password for repository:
repository c7b67ed1 opened successfully, password is correct
counting files in repo
[0:00] 100.00% 1569 / 1569 packs
finding old index files
saved new indexes as [318c651d]
remove 1 old index files
\end{lstlisting}
Weitere Beispiele f"ur einen Check.
\listBash
\begin{lstlisting}[captionpos=b, caption=More examples]
uws@tux>restic -vvv -r /run/media/restic/Repo check
uws@ux>restic -r /run/media/restic/Repo check --verbose
\end{lstlisting}
%-------------------------------------------------------------------------------
% Subsection: Repository Unlock
%-------------------------------------------------------------------------------
\subsection{Repository Unlock}
St"uerzt das Programm w"ahrend eines Backups ab, so ist das Repository gesperrt. Mit der Option {\ttfamily unlock} kann man sie Sperre entfernen.
\listBash
\begin{lstlisting}[captionpos=b, caption=Repository Unlock]
uws@tux>restic -r /run/media/restic/Repo unlock
enter password for repository:
repository 3b92a80b opened successfully, password is correct
successfully removed locks
\end{lstlisting}
%-------------------------------------------------------------------------------
% Subsection: Restore
%-------------------------------------------------------------------------------
\subsection{Restore}
Ein Restore eines Backups kann man unterschiedlich machen. Als erstes wird ein komplettes Backup in ein anders Verzeichnis zur"uck gesichert. In den zweiten Beispiel wird das letze Backup mit der Angabe des Hostname zur"uck gesichert. Nun aber in das Original Verzeichnis.
\listBash
\begin{lstlisting}[captionpos=b, caption=Restore]
uws@tux>restic -r /run/media/restic/Repo restore e6bc8zdf --target /tmp/restore
uws@tux>restic -r /run/media/restic/Repo restore latest --host tux01 [--path "/..."]
uws@tux># Einzelne Datei restore
uws@tux>restic -r /run/media/restic/Repo restore e6bc8zdf --target /tmp/restore --include /daten/uws.txt
\end{lstlisting}
Man kann auch das Repository oder auch ein einzelnes Backup mounten und dann gezielt Daten zur"uck sichern.
\listBash
\begin{lstlisting}[captionpos=b, caption=Restore mount]
uws@tux>mkdir /mnt/restic
uws@tux>restic -r /run/media/restic/Repo mount /mnt/restic
\end{lstlisting}
%-------------------------------------------------------------------------------
% Subsection: Repository Keys
%-------------------------------------------------------------------------------
\subsection{Repository Keys}
Für ein Repository können verschiedene Keys oder Passwörter definiert werden. Mit {\ttfamily list, add, remove} und {\ttfamily passwd} können die Keys / Passwörter verwaltet werden. Mit der Option passwd kann ein Passwort geändert werden.
\listBash
\begin{lstlisting}[captionpos=b, caption=Repository Encryption]
uws@tux>restic -r /run/media/restic/Repo key list
enter password for repository:
repository fa95143a opened successfully, password is correct
ID User Host Created
---------------------------------------------
*948c668a root fsgo220 2020-08-23 14:11:22
---------------------------------------------
\end{lstlisting}
\newpage
%-------------------------------------------------------------------------------
% Subsection: Probleme
%-------------------------------------------------------------------------------
\subsection{Probleme}
\subsubsection{Invalid Data returned}
Kommt bei Abfrage nach den Snapshots am Anfang folgenden Meldung:\\
could not load snapshot e763f31b: load <snapshot/e763f31bfc>: invalid data returned \\
und der Snapshot ist in der Liste nicht zu finden.\\
Solution:\\
Die Datei aus dem Repository unter snapshot l"oeschen.
\subsubsection{Error for tree}
Kommt bei einem {\ttfamily restic check} die Meldung, error for tree 1ccd1cbf, so ist folgendes zu tun. Man kann auch nach mehreren Trees suchen, einfach den n"achsten Wert ohne Komma, aber mit einem Leerzeichen, angeben.
\listBash
\begin{lstlisting}[captionpos=b, caption=Snapshot finden und l"oschen]
uws@tux>restic -r /run/media/restic/Repo find --tree 1ccd1cbf
repository c7b67ed1 opened successfully, password is correctFound tree 1ccd1cbf2c0c78...
... path /daten/var/log
... in snapshot d3a89153 (2020-05-20 21:15:05)
uws@tux>restic -r /run/media/restic/Repo forget d3a89153
uws@tux>restic -r /run/media/restic/Repo prune
uws@tux>restic -r /run/media/restic/Repo rebuild-index
uws@tux>restic -r /run/media/restic/Repo check
using temporary cache in /tmp/restic-check-cache-228305902
repository c7b67ed1 opened successfully, password is correct
created new cache in /tmp/restic-check-cache-228305902
create exclusive lock for repository
load indexes
check all packs
check snapshots, trees and blobs
no errors were found
\end{lstlisting}
\end{justify}

38
Kapitel2/Base64.tex Normal file
View File

@ -0,0 +1,38 @@
\section{Base64}
%---------------------------------------------------
% Subsection: Allgemein
%---------------------------------------------------
\subsection{Allgemein}
\begin{justify}
Base64 ist ein Verfahren zur Kodierung von 8-Bit-Binärdaten (z. B. ausführbare Programme, ZIP-Dateien oder Bilder) in eine Zeichenfolge, die nur aus lesbaren, Codepage-unabhängigen ASCII-Zeichen besteht.\\
Base64 wird auch zur Kodierung von Benutzernamen und Passwörter in der HTTP-Basisauthentifizierung und auch zur Übertragung von SH-Server-Zertifikaten benutzt.\\
Eine Verschlüsselung ist Base64 nicht.
%---------------------------------------------------
% Subsection: Encoding
%---------------------------------------------------
\subsection{Encoding}
Hier folgen ein paar Beispiele für das Erzeugen eines Base64-Strings.
\listBash
\begin{lstlisting}[captionpos=b, caption=Sty-Dateien]
uws@tux># String umwandeln
uws@tux>echo -n "Hello World" | base64
SGVsbG8gV29ybGQ=
uws@tux># Datei umwandeln, gegebenenfals Ausgabe umleiten
uws@tux>base64 /tmp/my-file.txt [> output.txt]
\end{lstlisting}
%---------------------------------------------------
% Subsection: Decoding
%---------------------------------------------------
\subsection{Decoding}
\listBash
\begin{lstlisting}[captionpos=b, caption=Sty-Dateien]
uws@tux># String decode
uws@tux>echo -n 'SGVsbG8gV29ybGQ=' | base64 --decode
Hello World
uws@tux># Datei decode
uws@tux>base64 --decode FileName > OutputName.extension
\end{lstlisting}
\end{justify}

75
Kapitel2/Berechtigungen.tex Executable file
View File

@ -0,0 +1,75 @@
\section{Berechtigungen}
\subsection{Chmod, Chown und Chgrp}
\begin{justify}
Die Berechtigungen f"ur ein Verzeichnis / Dateien k"onnen mit dem Befehl {\ttfamily chmod} gesetzt werden. Der Befehl {\ttfamily chown} setzt den Besitzer des Verzeichnisses und kann auch die Gruppe setzen. F"ur das setzen der Gruppe gibt es auch noch den Befehl {\ttfamily chgrp}. Mit der Option {\ttfamily -R} werden alle Verzeichnisse rekursiv ge"andert.\\
\listBash
\begin{lstlisting}[captionpos=b, caption=Beispiel Berechtigung]
uws@tux>chmod -R 775 /u01/app
uws@tux>chown -R uws:users /u01/app
uws@tox>chgrp -R users /u01/app
\end{lstlisting}
7=Lesen, Schreiben und Ausf"uhren\\
6=Lesen und Schreiben\\
5=Lesen und Ausf"uhren\\
4=Nur Lesen\\
3=Schreiben und Ausf"uhren\\
2=Nur Schreiben\\
1=Nur Ausf"uhren\\
0=Keine Berechtigung\\[2ex]
Eine andere M"oglichkeit mit {\ttfamily chmod} die Rechte zu vergeben, ist die Angabe der Benutzergruppe. Mit einem Minus Zeichnen werden der Gruppe die Rechte wieder entzogen.
\listBash
\begin{lstlisting}[captionpos=b, caption=Beispiel Benutzergruppen]
uws@tux>chmod g=rw MeineDoku.txt
uws@tux>chmod g-w MeineDoku.txt
uws@tux>chmod g+x MeineDoku.txt
\end{lstlisting}
u=Eigent"umer(User)\\
g=Gruppe(Group)\\
o=Andere(Other)\\
a=Alle(all)
\subsection{Chattr}
Mit dem Bash Befehl {\ttfamily chattr} (Change Attribute) k"onnen Attribute f"ur Dateien oder Verzeichnisse gesetzt werden. Man kann zum Beispiel einzelne Dateien f"ur das L"oschen sperren. Mit {\ttfamily +} wird das Attribute gesetzt und mit {\ttfamily -} wird das Attribute gel"oscht.\\[2ex]
\listBash
\begin{lstlisting}[captionpos=b, caption=Beispiel Berechtigung]
root@tux># immutable File / Path, can't delete or more
root@tux>chattr +i <file\_name>
root@tux># append mode, File can add Data, not modified
root@tux>chattr -a <file\_name>
root@tux>lsattr
\end{lstlisting}
\subsection{ACL}
Die Zugriffsrechte lassen sich auch "uber {\ttfamily Access Control Lists (ACL)} setzen. Um ACL nutzen zu k"onnen, muss das Dateisystem mit den Optionen {\ttfamily user\_xattr} und {\ttfamily acl} eingeh"angt sein. Mit dem Befehl {\ttfamily setfacl} kann man Benutzer und auch Gruppen dem jeweiligen Objekt zuordnen. Um sich die Berechtigungen anzeigen zu lassen, wird der Befehl {\ttfamily getfacl} verwendet. Hat man ACL Berechtigungen gesetzt, so wird bei einem {\ttfamily ls -l} ein '+' Zeichen hinter den Berechtigungen angezeigt. Mit Dolphin und auch mit dem Konqueror lassen sich die ACL Berechtigungen bequem mittels der GUI setzen.
\listBash
\begin{lstlisting}[captionpos=b, caption=Beispiel ACL]
uws@tux>setfacl -m u:oracle:rw MeineDoku.txt
uws@tux>setfacl -m g:privat:rw bild1.jpg
uws@tux>getfacl bild1.jpg
\end{lstlisting}
Man kann ein Verzeichnis mit {\ttfamily chmod 700} auf restriktiven Zugriff setzen um anschlie"send einem Benutzer oder auch nur einer Gruppe den Zugriff auf diesem Verzeichnis zu erlauben.
\subsection{Sticky-Bit}
Hat man einer Datei das Schreibrecht anderen Usern erteilt, so k"onnen diese User diese Datei auch l"oschen, da das Schreibrecht auch das l"oschen beinhaltet. Setzt man auf das Verzeichnis das {\ttfamily Sticky-Bit}, so darf nur der Eigent"umer die Datei l"oschen oder umbenennen. Die anderen User d"urfen nur noch in diese Datei schreiben. Das wegnehmen des {\ttfamily Sticky-Bits} geschieht anstelle des Plus Zeichens mit einem Minus Zeichen.
\listBash
\begin{lstlisting}[captionpos=b, caption=Beispiel ACL]
uws@tux>chmod +t /transfer/data
uws@tux>ls -l /transfer
drwxr-xr-t 2 uws users 296 data
uws@tux>chmod +t MeineDoku.txt
uws@tux>chmod -t /transfer/data
\end{lstlisting}
Um User zu erlauben, ein Programm auszuführen, das nur z.B. der User root ausführen darf, setzt man das Sticky Bit {\ttfamily \verb|-|s}.
\listBash
\begin{lstlisting}[captionpos=b, caption=Beispiel Sticky Bit]
uws@tux>chmod u+s /usr/sbin/ProgramName
\end{lstlisting}
\end{justify}

61
Kapitel2/Curl.tex Executable file
View File

@ -0,0 +1,61 @@
\section{Curl}
\begin{justify}
Mit dem Programm {\ttfamily curl} kann man Dateien downloaden oder auch Infomationen "uber eine Web Seite erhalten.
\listBash
\begin{lstlisting}[captionpos=b, caption=Beispiel Curl]
uws@tux>curl -I -L https://www.apache.org
HTTP/1.1 200 OK
Date: Wed, 25 Jul 2018 13:45:23 GMT
Server: Apache/2.4.18 (Ubuntu)
Last-Modified: Wed, 25 Jul 2018 13:10:17 GMT
ETag: "efc3-571d2999a81b8"
Accept-Ranges: bytes
Content-Length: 61379
Vary: Accept-Encoding
Cache-Control: max-age=3600
Expires: Wed, 25 Jul 2018 14:45:23 GMT
Content-Type: text/html
uws@tux>curl -# http://... # Progress bar
uws@tux>curl -o <OutputFileName> http://...
uws@tux>curl -v ... # Detailierte Ausgabe
uws@tux>curl -V ... # Ausgabe der Version
\end{lstlisting}
Ebenso kann man mit {\ttfamily curl} auch Wetter Informationen sich in der Shell anzeigen lassen.
\listBash
\begin{lstlisting}[captionpos=b, caption=Wetter]
uws@tux>curl wttr.in # Standort wird ermittelt
uws@tux>curl wttr.in/Goch # Angabe des Ortes
uws@tux>curl wttr.in/Moon # Mondphase
uws@tux>curl -s ... # Silent Mode
uws@tux># Ausgabe in deutsch
uws@tux>curl -H "Accept-Language: de" wttr.in/Goch
\end{lstlisting}
Wurde ein Download abgebrochen, so kann man ihn wieder mit dem Parameter -C fortsetzten. Bei einem Zertifikatsfehler kann der Parameter -k genommen werden. Mit diesem Parameter wird der Fehler ignoriert.
\listBash
\begin{lstlisting}[captionpos=b, caption=Download fortsetzten]
uws@tux># Großschreibung und Minuszeichen beachten
uws@tux>curl -S - "https://releases.ubuntu.com/20...."
\end{lstlisting}
Es ist auch Möglich, ein Installationsskript herunterzuladen und auszuführen.
\listBash
\begin{lstlisting}[captionpos=b, caption=Skript ausführen]
uws@tux># -s => silent, -f => keine Fehlermeldungen
uws@tux>curl -sf "https://www.getlektor.com/installer.py" | sudo python3
uws@tux># Nur das Skript herunterladen
uws@tux>curl -O "https://www.getlektor.com/installer.py"
\end{lstlisting}
Eine Hilfe "uber Befehle kann man sich folgenderma"sen anzeigen lassen.
\listBash
\begin{lstlisting}[captionpos=b, caption=Hilfe Commands]
uws@tux>curl cheat.sh/ip
\end{lstlisting}
\end{justify}

286
Kapitel2/Dateien.tex Executable file
View File

@ -0,0 +1,286 @@
\section{Dateien}
%-------------------------------------------------------------------------------
% Subsection: find
%-------------------------------------------------------------------------------
\subsection{Suchen mit find}
\begin{justify}
Nach einer Datei in dem System suchen, kann man mit dem Befehl {\ttfamily find} in der Shell machen.\\
Findet alle Dateien, die gr"o"ser sind als 10MB. Mit {\ttfamily \$} wird das Ergebnis von {\ttfamily find} als Parameter dem Befehl {\ttfamily ls} "ubergeben. Gefundene Dateien k"onnen mit einer Aktion weiterverarbeitet werden. Hierzu gibt es die Option {\ttfamily -exec}. Der Programmaufruf muss mit {\ttfamily \{\}} beendet werden und wird mit einem Semikolon abschlossen. In der Bash muss das Semikolon mit {\ttfamily \verb|\|} maskiert werden. In dem dritten Beispiel werden alle Dateien aufgelistet, die "alter als 10 Tage sind.\\
\listBash
\begin{lstlisting}[captionpos=b, caption=Beispiele find]
uws@tux>ls -lah $(find / -type f -size +10M)
uws@tux>find /usr -size +10M -exec ls -lah {} \;
uws@tux># Findet Dateien die zwischen 20MB und 40MB sind
uws@tux>find . -size +20M -size -40M -ls
uws@tux># Parameter fuer -type
uws@tux># f = echten Dateien, -d = Verzeichnisse, -l = links
uws@tux>find /usr -type f \( -name '*.*' \) -ctime +10 -exec ls {} \;
uws@tux>find /usr -name '*.conf' -type f -mtime -1 [-ls]
\end{lstlisting}
Hier wird nach Dateien gesucht, die neuer sind als die angegebene Referenz Datei.
\listBash
\begin{lstlisting}[captionpos=b, caption=Beispiel newer]
uws@tux>touch -date='10:00' /tmp/ref
uws@tux>find -newer /tmp/ref
\end{lstlisting}
Die gefundenen Dateien in einem Tar-Archiv packen.
\listBash
\begin{lstlisting}[captionpos=b, caption=Beispiel f"ur tar]
uws@tux>find -iname '*.jpg' -exec tar -rf bilder.tar {} \;
\end{lstlisting}
Anzahl der Dateien in einem Verzeichnis ausgeben.
\listBash
\begin{lstlisting}[captionpos=b, caption=Beispiel Anzahl Dateien]
uws@tux>ls | wc -l
uws@tux> find /home/uws/Documents -type f | wc -l
\end{lstlisting}
Nach leeren Dateien suchen und nach einer Best"atigung werden sie gel"oscht.
\listBash
\begin{lstlisting}[captionpos=b, caption=Beispiel f"ur l"oschen]
uws@tux>find / -empty -ok rm "{}" \;
\end{lstlisting}
Nach Dateien oder Verzeichnissen suchen, die nicht dem Suchkriterium entsprechen. Die Option {\ttfamily -regex} ber"ucksichtigt den kompletten Pfad, wobei {\ttfamily -name} nur den Namen ber"ucksichtigt ohne den Pfad.
\listBash
\begin{lstlisting}[captionpos=b, caption=Beispiel f"ur l"oschen]
uws@tux>find / \! -regex ".*spool.*" -empty -ok rm -rf "{}" \;
\end{lstlisting}
% Date search
Dateien finden, die innerhalb der letzten 120 Minuten ver"andert wurden. Ohne das {\ttfamily -} vor der Angabe der Zeit (120), wird alles gefunden, was vor 2 Stunden ge"andert wurde. Mit einem {\ttfamily +} werden Dateien gefunden, die vor der angegebenen Zeit ver"andert worden sind.
\listBash
\begin{lstlisting}[captionpos=b, caption=Beispiel Date / Time]
uws@tux>find /etc /usr -mmin -120
uws@tux>find ~ -mmin +120 mmin -1440
uws@tux>fing . -name '*.*' -type f -mtime -1 -exec zip /backup/last.zip "{}" ";"
\end{lstlisting}
\begin{longtable}[l]{p{3cm}p{13cm}}
\rowcolor{hellgrau}\multicolumn{1}{l}{\textbf{Bedingung}} & \multicolumn {1}{l}{\textbf{Beschreibung}} \\
\hline
\hline
\endfirsthead
\multicolumn{2}{r}{{\bfseries continued from previous page.}} \\
\rowcolor{hellgrau}\multicolumn{1}{l}{\textbf{Bedingung}} & \multicolumn {1}{l}{\textbf{Beschreibung}} \\
\hline
\hline
\endhead
\multicolumn{2}{r}{{\bfseries Continued on next page}} \\
\endfoot
\caption{Suchbedingung von find} \\
\endlastfoot
-name & Sucht nach den Dateien\\
-iname & Sucht nach Dateien, ignoriert aber Gro\ss{}- und Kleinschreibung\\
-size & Sucht nach Datei Größe, Angabe in K,M und G\\
-type & Sucht nach Type, f für Dateien, d für Verzeichnisse und l für symbolosche Links\\
-atime [+-]zeit & Access Time, Zugriff mehr oder weniger in Tagen\\
-amin [+-]zeit & Sucht nach Dateien, Zugriff mehr oder weniger in Minuten\\
-mtime [+-]zeit & Modification Time, Veränderung mehr oder weniger in Tagen\\
-mmin [+-]zeit & Sucht nach Dateien, Veränderung mehr oder weniger in Minuten\\
-ctime [+-]zeit & Creation Time\\
-perm 0000 & Sucht nach Dateien mit den Zugriffsrechten 0000 (Oktalzahl)\\
-user & Sucht nach Dateien des angegebenen User\\
-exec command \verb|"{}" ";"| & Führt den Befehl aus.\\
-ok command \verb|"{}" ";"| & Führt den Befehl nach Rückfrage aus\\
\end{longtable}
%----------------------------------------------------------
% Löschen
%----------------------------------------------------------
\subsection{L"oschen}
Dateien k"onnen mit dem Befehl {\ttfamily rm} gel"oscht werden. Wir die Option {\ttfamily -v} mit angegeben, so wird die Ausgabe detailierter. In dem nachfolgenden Beispiel werden alle Dateien gel"oscht, die "alter als 10 Tage sind.
\listBash
\begin{lstlisting}[captionpos=b, caption=Beispiel l"oschen]
uws@tux>find /daten -type f \( -name '*.jpg' \) -ctime +10 -exec rm {} \;
\end{lstlisting}
Alle Dateien l"oschen, ausser die Txt und Log Dateien.
\begin{lstlisting}[captionpos=b, caption=Exclude]
uws@tux>rm !(*.txt|*.log)
\end{lstlisting}
%----------------------------------------------------------
% Vergleichen
%----------------------------------------------------------
\subsection{Vergleichen}
Einen Unterschied von zwei oder drei Dateien kann man mit dem Befehl {\ttfamily diff[3]} anzeigen lassen.
\listBash
\begin{lstlisting}[captionpos=b, caption=Beispiel vergleichen]
uws@tux>diff <datei1> <datei2>
uws@tux>diff3 <datei1> <datei2> <datei3>
\end{lstlisting}
%----------------------------------------------------------
% Datei patchen
%----------------------------------------------------------
\subsection{Datei patchen}
Sollen zwei Dateien auf dem gleichen Stand gebracht werden, so erstellt man als erstes eine Differenz Datei und die so erstellte Datei wird dann in die erste Datei mit {\ttfamily patch} eingef"ugt.
\listBash
\begin{lstlisting}[captionpos=b, caption=Beispiel Datei patch]
uws@tux>diff datei1 datei2 > d1_d2.diff
uws@tux>patch datei1 < d1_d2.diff
patching file datei1
\end{lstlisting}
%----------------------------------------------------------
% Neuere Dateien kopieren
%----------------------------------------------------------
\subsection{Nur neuere Dateien kopieren}
Mit dem Befehl {\ttfamily cp} und der Option {\ttfamily -u} kann man Dateien kopieren, die ein neueres Datum haben als die auf dem Zielverzeichnis.
\listBash
\begin{lstlisting}[captionpos=b, caption=Beispiel neuere Dateien kopieren]
uws@tux>cp -dpRux /home /mnt/media/home
\end{lstlisting}
%----------------------------------------------------------
% Anzahl Dateien
%----------------------------------------------------------
\subsection{Anzahl Dateien}
M"ochte man die Anzahl der Dateien in einem Verzeichnis ermitteln, so kann man das mit der Kombination von {\ttfamily ls} und {\ttfamily wc} erledigen.
\listBash
\begin{lstlisting}[captionpos=b, caption=Beispiel Anzahl Dateien]
uws@tux>ls | wc -l
\end{lstlisting}
%----------------------------------------------------------
% Dateien Anlegen / Datum aktualisieren
%----------------------------------------------------------
\subsection{Dateien anlegen / Datum aktualisieren}
Eine leere Datei wird mit dem Befehl {\ttfamily touch} angelegt. Dieser Befehl wertet die {\ttfamily umask} aus und legt die neue Datei mit den Berechtigungen an. Ebenso kann man mit {\ttfamily touch} einer vorhandenen Datei das aktuelle Datum mit Uhrzeit verpassen.
\listBash
\begin{lstlisting}[captionpos=b, caption=Beispiel touch]
uws@tux>touch empty.txt
uws@tux>touch *.txt
\end{lstlisting}
%----------------------------------------------------------
% Dateien nach Groesse / Zeit anzeigen
%----------------------------------------------------------
\subsection{Dateien nach Gr"o"se / Zeit anzeigen}
Mit der Option {\ttfamily -S} werden die Dateien nach Gr"o"se absteigend angezeigt. Mit der zus"atzlichen Option {\ttfamily -r} wird die sortierreihenfolge umgedreht.In dem ersten Beispiel werden die 15 Gr"o"sten Dateien angezeigt und in dem zweiten Beispiel wird nach der Datum / Zeit sortiert.
\listBash
\begin{lstlisting}[captionpos=b, caption=Beispiel Gr"o"se / Zeit]
uws@tux>ls -lahS | head -n 15
uws@tux>ls -lahtr
\end{lstlisting}
\newpage
%----------------------------------------------------------
% Status Informationen
%----------------------------------------------------------
\subsection{Status Informationen}
Mit dem Befehl {\ttfamily stat} kann man sich die Status Informationen einer Datei / Filesystem anzeigen lassen.
\listBash
\begin{lstlisting}[captionpos=b, caption=Beispiel stat File]
uws@tux>stat myfile.txt
File: 'myfile.txt'
Size: 337 Blocks: 8 IO Block: 4096 regular file
Device: fc03h/64515d Inode: 1048633 Links: 1
Access: (0644/-rw-r-r--) UID: ( 502/ uws) GID: ( 502/ uws)
Access: 2016-04-18 09:08:18.605079663 +0200
Modify: 2014-01-22 11:48:29.896951359 +0200
Change: 2014-01-22 11:48:29.909951675 +0200
\end{lstlisting}
M"ochte man sich Informationen "uber ein Device anzeigen lassen, so gibt man die Option {\ttfamily -f} mit an. Wird die Option nicht mit angegeben, so werden die Informationen als normales File ausgegeben.
\listBash
\begin{lstlisting}[captionpos=b, caption=Beispiel stat Device]
uws@tux>stat -f /dev/sda1
File: "/dev/sda1"
ID: 0 Namelen: 255 Type: tmpfs
Block Size: 4096 Fundamental block size: 4096
Blocks: Total: 4641806 Free: 4641760 Available: 4641760
Inodes: Total: 4641806 Free: 4641090
\end{lstlisting}
Informationen "uber die Group ID eines Owner sich anzeigen lassen, geschieht mit der Option {\ttfamily -\hspace{0.05cm}-format=\%g}. In der nachfolgenden Liste gibt es eine "Ubersicht der Format Ausgaben.
\begin{table}[ht]
\begin{tabular}{p{2cm}p{14cm}} % l => Text left, c => center, r => right, p => zeilenumbruch
\rowcolor{hellgrau}\emph{\textbf{Format}} & \emph{\textbf{Beschreibung}}\\
\hline
\hline
\%a & Zugriffsrechte in Octal\\
\%A & Zufriffsrechte in Human form\\
\%b & Anzahl der belegten Bl"ocke\\
\%B & Gr"o"se in Bytes\\
\%C & SELinux security\\
\%d & Device Nummer in Dezimal\\
\%D & Device Nummer in Hex\\
\%f & Raw Mode in Hex\\
\%F & File Type\\
\%g & Group ID vom Owner\\
\%G & Group Name des Owner\\
\%h & Nummer der hard links\\
\%i & Inode Nummer\\
\%n & Datei Name\\
\%N & Quoted Datei Name\\
\%o & I/O Block Gr"o"se\\
\%s & Total size, in Bytes\\
\%t & Major device type in Hex\\
\%T & Minor device type in Hex\\
\%u & User ID des Owners\\
\%U & User Name des Owners\\
\%x & Datum / Zeit des letzten Zugriffs\\
\%X & Datum / Zeit des letzten Zugriffs in Sekunden\\
\%y & Datum / Zeit der letzten Modifikation\\
\%Y & Datum / Zeit der letzten Modification in Sekunden\\
\%z & Datum / Zeit des letzten "Anderung\\
\end{tabular}
\caption{Formate}
\end{table}
\listBash
\begin{lstlisting}[captionpos=b, caption=Beispiel stat format, label=lst:bash]
uws@tux>stat --format=%x myfile.txt
2014-01-22 11:48:29.896951359 +0200
\end{lstlisting}
Anstelle von {\ttfamily -\hspace{0.05cm}-format} kann auch ein {\ttfamily -c} genommen werden.
\listBash
\begin{lstlisting}[captionpos=b, caption=Beispiel stat format]
uws@tux>stat -f -c%n /dev/sda1
/dev/sda1
uws@tux>stat -f -c%c /dev/sda1
4644806
\end{lstlisting}
%----------------------------------------------------------
% Unveraenderliche Dateien
%----------------------------------------------------------
\subsection{Unver"anderliche Dateien}
F"ur die Dateisysteme {\ttfamily EXT2} und {\ttfamily EXT3} gibt es ein zus"atzliches Attribute, die Dateien unver"anderlich machen, solange das Attribut gesetzt ist. Mit dem Befehl {\ttfamily lsattr} kann man sich das Attribute anzeigen lassen und der Befehl {\ttfamily chattr} mit dem Attribut {\ttfamily -i} setzt das Attribut.
\listBash
\begin{lstlisting}[captionpos=b, caption=Beispiel Unver"anderliche Datei]
uws@tux>lsattr *.txt
uws@tux>chattr -i *.txt
\end{lstlisting}
\newpage
%----------------------------------------------------------
% Dateien konvertieren
%----------------------------------------------------------
\subsection{Dateien konvertieren}
Um eine Windows-Datei in das Linux / Unix Format zu konvertieren und auch in die andere Richtung, gibt es die Programme {\ttfamily fromdos, todos, dos2unix} und {\ttfamily unix2dos}. Gegebenenfalls m"ussen die Programme nachinstalliert werden.
\listBash
\begin{lstlisting}[captionpos=b, caption=Beispiel Datei konvertieren]
uws@tux>fromdos <datei>
uws@tux>unix2dos <datei>
\end{lstlisting}
%----------------------------------------------------------
% Dateianfang anzeigen
%----------------------------------------------------------
\subsection{Dateianfang anzeigen}
Anzeige der ersten {\ttfamily <n>} Zeilen einer Datei / Bildschirm Ausgabe.
\listBash
\begin{lstlisting}[captionpos=b, caption=Beispiel Datei konvertieren]
uws@tux>head -10 /var/log/messages
\end{lstlisting}
%----------------------------------------------------------
% Dateiinhalt ausgeben
%----------------------------------------------------------
\subsection{Dateiinhalt ausgeben}
Mit dem Befehl {\ttfamily cat} wird der Inhalt einer Datei von oben nach unten ausgegeben. M"ochte man die Ausgabe von unten nach oben haben, so gibt es hierf"ur den Befehl {\ttfamily tac}.
\listBash
\begin{lstlisting}[captionpos=b, caption=Beispiel Dateiinhalt ausgeben]
uws@tux>tac /var/log/messages | less
\end{lstlisting}
\end{justify}

36
Kapitel2/Functions.tex Normal file
View File

@ -0,0 +1,36 @@
\section{Functions}
%---------------------------------------------------
% Subsection: Notes Pfade
%---------------------------------------------------
\subsection{List Functions}
\begin{justify}
Es gibt verschiedene Methoden Functions sich anzeigen zu lassen. Entweder nur die Namen der Function oder eine Vollst\"andige Ausgabe.
\listBash
\begin{lstlisting}[captionpos=b, caption=List Function]
uws@tux># Only Function Name
uws@tux>declare -F
declare -f bashrc_update
declare -f check_sw
uws@tux># Detail list all Functions
uws@tux>declare -f
uws@tux># Detail list Function
uws@tux>declare -f FunctionName
uws@tux># Oder auch
uws@tux># Only Function Name
uws@tux>typeset -F
declare -f bashrc_update
declare -f check_sw
uws@tux># Detail list all Functions
uws@tux>typeset -f
uws@tux># Detail list Function
uws@tux>zypeset -f FunctionName
uws@tux># or
uws@tux>type FunctionName
\end{lstlisting}
\end{justify}

129
Kapitel2/Grep.tex Executable file
View File

@ -0,0 +1,129 @@
\section{Grep}
\subsection{In Farbe}
\begin{justify}
Soll die Ausgabe von {\ttfamily grep} in Farbe passieren, so gibt man die Option {\ttfamily -\hspace{0.05cm}-color=auto} mit an. Dauerhaft kann man diese Option in der {\ttfamily .bashrc} einschalten.
\listBash
\begin{lstlisting}[captionpos=b, caption=Grep Color]
uws@tux>grep --color=auto
uws@tux>cat .bashrc
export GREP_OPTIONS='--color=auto'
export GREP_COLOR='1;32' # hellgruen, ANSI Farbcode
\end{lstlisting}
%----------------------------------------------------------
% Klein / Grossschreibung
%----------------------------------------------------------
\subsection{Klein- / Gro"sschreibung}
M"ochte man alle W"orter finden, egal, ob Klein- oder Gro"sschreibung, so wird hierzu der Parameter {\ttfamily -i} angegeben.
\listBash
\begin{lstlisting}[captionpos=b, caption=Upper und Lower character]
uws@tux>grep -i "rman-08" /home/uws/log/rman_level0.log
RMAN-0815 ****************************
rman-0816 Errors found
\end{lstlisting}
%----------------------------------------------------------
% Exakte Suche
%----------------------------------------------------------
\subsection{Exakte Suche}
Soll nur nach dem genauen Wort gesucht werden, so gibt man die Option {\ttfamily -w} an.
\listBash
\begin{lstlisting}[captionpos=b, caption=Exakte Suche]
uws@tux>grep -w "rman-08" /home/uws/log/rman_level0.log
rman-0816 Errors found
\end{lstlisting}
%----------------------------------------------------------
% Mehrere Woerter suchen
%----------------------------------------------------------
\subsection{Mehrere W"orter Suchen}
Nach mehreren W"ortern kann man mit {\ttfamily egrp} suchen. Die Angabe der Option {\ttfamily -w} ist optional.
\listBash
\begin{lstlisting}[captionpos=b, caption=Mehrere W"orter Suchen]
uws@tux>egrep -w "RMAN-08|rman-08" /home/uws/log/rman_level0.log
RMAN-0815 ****************************
rman-0816 Errors found
\end{lstlisting}
Mit {\ttfamily grep} kann man die Optionen {\ttfamily -E} oder {\ttfamily -e} nehmen. {\ttfamily Egrep} ist ein {\ttfamily grep} mit der Option {\ttfamily -E}. Gibt man ein {\ttfamily .*} in dem Suchstring ein, so ist es wie ein {\ttfamily und}. Ein {\ttfamily oder} wird mit einem {\ttfamily Pipe} gemacht. Nachfolgend sind einige Beispiele aufgelistet.
\listBash
\begin{lstlisting}[captionpos=b, caption=Mehrere W"orter Suchen]
uws@tux>grep -i "Manager\|Sales" employee.txt
100 Thomas Manager Sales $5,000
400 Willi Manager Marketing $2,500
uws@tux>grep -i -E "Manager|Sales" employee.txt
uws@tux>egrep -i "manager|sales" employee.txt
uws@tux>grep -e "Manager" -e "Sales" employee.txt
uws@tux>grep -E "Manager.*Sales" employee.txt
100 Thomas Manager Sales $5,000
\end{lstlisting}
%----------------------------------------------------------
% Zeilen Nummer
%----------------------------------------------------------
\subsection{Zeilen Nummer}
Mit der Option {\ttfamily -n} wird auch die Zeilen Nummer mit ausgegeben.
\listBash
\begin{lstlisting}[captionpos=b, caption=Zeilen Nummern]
uws@tux>grep -n "RMAN-08" /home/uws/log/rman_level0.log
2:RMAN-0815 **********************************
\end{lstlisting}
%----------------------------------------------------------
% Anzahl Uebereinstimmungen
%----------------------------------------------------------
\subsection{Anzahl "Ubereinstimmungen}
M"ochte man nur die Anzahl der gefundenen "Ubereinstimmungen angezeigt bekommen, so nimmt man hierfür die Option {\ttfamily -c}.
\listBash
\begin{lstlisting}[captionpos=b, caption="Ubereinstimmungen]
uws@tux>grep -c "RMAN-08" /home/uws/log/rman_level0.log
1
\end{lstlisting}
%----------------------------------------------------------
% Alles ausgeben
%----------------------------------------------------------
\subsection{Alles ausgeben}
Mit {\ttfamily -v} wird alles ausgegeben, au"ser dem Suchstring.
\listBash
\begin{lstlisting}[captionpos=b, caption=Alles Suchen]
uws@tux>grep -v "RMAN-08" /home/uws/log/rman_level0.log
Recovery Manager: Release 11.1.0.6.0 - Production on Mon Apr 29 19:00:00 2013
Copyright © 1982, 2007 Oracle. All rights reserved
\end{lstlisting}
%----------------------------------------------------------
% Ausgabe Datei
%----------------------------------------------------------
\subsection{Ausgabe Datei}
In welchen Dateien sich der Suchstring befindet, wird mit der Option {\ttfamily -l} ermittelt.
\listBash
\begin{lstlisting}[captionpos=b, caption=Ausgabe Datei]
uws@tux>grep -l "RMAN-08" /home/uws/log/*.log
/home/uws/log/rman_level0.log
/home/uws/log/rman_level1.log
\end{lstlisting}
%----------------------------------------------------------
% Regex
%----------------------------------------------------------
\subsection{Regex}
Nach einem Suchmuster (Regular Expression) filtern.
\listBash
\begin{lstlisting}[captionpos=b, caption=Regex]
uws@tux>grep -i 'Hans[0-9][0-9]' /etc/passwd
uws@tux>grep -i service_name tnsnames.ora | grep -v WARTUNG | \
grep -i 'pds[0-9][0-9]' | awk '{print $5}' | sed 's#..$##'
\end{lstlisting}
%----------------------------------------------------------
% Weitere Ausgabe
%----------------------------------------------------------
\subsection{Weitere Ausgabe}
Möchte man nach dem gefundenen Suchmuster noch weitere Zeilen ausgegeben bekommen, so gibt man die Option {\ttfamily -A}, gefolgt von der Anzahl der gewünschten Zeilen.
\listBash
\begin{lstlisting}[captionpos=b, caption=Weitere Ausgabe]
uws@tux>cat /tmp/output.txt | grep -A2 Plus
SQL*Plus: Release 19.0.0.0.0 - Production on Tue Jan 31 08:22:50 2023
Version 19.17.0.0.0
uws@tux>cat /tmp/output.txt |grep -A2 Plus | grep Version
Version 19.17.0.0.0
\end{lstlisting}
\end{justify}

31
Kapitel2/Index.tex Executable file
View File

@ -0,0 +1,31 @@
\chapter{Befehle und Programme}
%-------------------------------------------
% load other documents
%------------------------------------------
\input{Kapitel2/Ordner}
\newpage
\input{Kapitel2/Berechtigungen}
\newpage
\input{Kapitel2/LSOF}
\input{Kapitel2/Dateien}
\newpage
\input{Kapitel2/Programme}
\newpage
\input{Kapitel2/Mails} % Mails
\newpage
\input{Kapitel2/Grep}
\newpage % Suchen in Dateien
\input{Kapitel2/Links} % Hard- und Softlinks
\input{Kapitel2/SizeShell} % Groesse und Position der Shell
\newpage
\input{Kapitel2/SearchReplace} % Suchen und ersetzen (sed und tr)
\newpage
\input{Kapitel2/SpaltenOperationen} % Spalten Operatinen (awk und cut)
\input{Kapitel2/KlammerExpand} % Klammerexpandierung
\newpage
\input{Kapitel2/Verschiedenes} % Verschiedenes
\input{Kapitel2/Curl} % Curl
\input{Kapitel2/Latex} % Latex
\input{Kapitel2/Base64} % Base64 Codierung
\input{Kapitel2/Kde}
\input{Kapitel2/Functions}

17
Kapitel2/Index.tex.new Executable file
View File

@ -0,0 +1,17 @@
\chapter{Befehle}
%-------------------------------------------
% load other documents
%------------------------------------------
\input{Kapitel2/Ordner}
%\input{Kapitel2/Berechtigungen}
%\input{Kapitel2/LSOF}
%\input{Kapitel2/Dateien}
%\input{Kapitel2/Programme}
%\input{Kapitel2/Mails} % Mails
%\input{Kapitel2/Grep} % Suchen in Dateien
%\input{Kapitel2/Links} % Hard- und Softlinks
%\input{Kapitel2/SizeShell} % Groesse und Position der Shell
%\input{Kapitel2/SearchReplace} % Suchen und ersetzen (sed und tr)
%\input{Kapitel2/SpaltenOperationen} % Spalten Operatinen (awk und cut)
%\input{Kapitel2/KlammerExpand} % Klammerexpandierung
%\input{Kapitel2/Verschiedenes} % Verschiedenes

17
Kapitel2/Kde.tex Normal file
View File

@ -0,0 +1,17 @@
\section{KDE Plasma}
%---------------------------------------------------
% Subsection: Notes Pfade
%---------------------------------------------------
\subsection{Notes Pfade}
\begin{justify}
Legt man in dem Programm eine neue Notiz an, so werden diese in dem Pfad {\ttfamily /home/uws/.local/share/plasma\verb|_|notes} abgelegt. In diesen Dateien kann man z.B. die Textfarbe ändern. Die Dateien werden in einem HTMl-Format angelegt.
%---------------------------------------------------
% Subsection: Startbildschirm
%---------------------------------------------------
\subsection{Startbildschirm}
Unter KDE werden die installierten Startbildschirme unter folgende Pfade gespeichert:
\begin{itemize}
\item User: \verb|$|HOME/.local/share/plasma/look-and-feel
\item System: /usr/share/plasma/look-and-feel
\end{itemize}
\end{justify}

47
Kapitel2/KlammerExpand.tex Executable file
View File

@ -0,0 +1,47 @@
\section{Klammerexpandierung}
\begin{justify}
Man kann nur Zahlen und Buchstaben expandieren.
\listBash
\begin{lstlisting}[captionpos=b, caption=Beispiele Klammerexpandierung]
uws@tux>echo {A..Z}
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
uws@tux>echo {1..12}
1 2 3 4 5 6 7 8 9 10 11 12
uws@tux>echo {1..12..2}
1 3 5 7 9 11
uws@tux>echo {a,b,c}{d,e,f}
ad ae af bd be bf cd ce cf
uws@tux>echo {a{1..3},b,c}{d,e,f}
a1d a1e a1f a2d a2e a2f a3d a3e a3f bd be bf cd ce cf
uws@tux>ls -l {,/local}/usr{,/share} # entspricht
ls -l /local/usr
ls -l /local/usr/share
ls -l /usr
ls -l /usr/share
uws@tux>ls -l a?.sh
-rw-rw-r-- 1 uws users 0 Sep 9 12:43 a1.sh
uws@tux>ls -l [ab]*
-rw-rw-r-- 1 uws users 0 Sep 9 12:43 a1.sh
-rw-rw-r-- 1 uws users 0 Sep 9 12:43 b1.sh
uws@tux>ls -l [a-c]*
-rw-rw-r-- 1 uws users 0 Sep 9 12:43 a1.sh
-rw-rw-r-- 1 uws users 0 Sep 9 12:43 b1.sh
-rw-rw-r-- 1 uws users 0 Sep 9 12:43 c1.sh
uws@tux>ls -l [^ab]*
-rw-rw-r-- 1 uws users 0 Sep 9 12:43 c1.sh
uws@tux>echo a?.sh
a1.sh
uws@tux>echo *
a1.sh b1.sh c1.sh
\end{lstlisting}
\end{justify}

130
Kapitel2/LSOF.tex Executable file
View File

@ -0,0 +1,130 @@
\section{LSOF - Ge"offnete Dateien anzeigen}
\subsection{Optionen}
\begin{justify}
Einen "Uberblick "uber die wichtigsten Optionen sind in der nachfolgenden Tabelle aufgelistet (Aus LinuxUser 04.2016).
\begin{table}[ht]
\begin{tabular}{p{4cm}p{12cm}} % l => Text left, c => center, r => right, p => zeilenumbruch
\rowcolor{hellgrau}\emph{\textbf{Option}} & \emph{\textbf{Beschreibung}}\\
\hline
\hline
-a & Logisches Und\\
-b & Verhindert, dass Lsof blockierende Funktionen verwendet\\
-c <Zeichen> & Suchkriterium\\
+c <Anzahl> & Wie viele Zeichen sollen ber"ucksichtigt werden\\
+d <Verzeichnis> & Alles wird ausgegeben, was in dem angegebenen Verzeichnis ist\\
-d <Muster> & Alles ausschlie"sen, was dem Muster entspricht.\\
+D <Verzeichnis> & Wie +d, nur werden auch Unterverzeichnisse ber"ucksichtigt.\\
+/-f & Definiert, wie Lsof Pfade interpretieren soll\\
-i4/-i6 & IPv4 oder IPv6-Verbindungen ber"ucksichtigen\\
-p <PID> & Angabe der PID \\
-t & Nur PID ausgeben\\
-u <User> & Nur die Dateien ausgeben, die dem angegebenen User geh"oren\\
-U & Unix Domain Sockets verwenden\\
-T <Key> & TCP/IP-Informationen gem"a"s Key ausgeben\\
-s & Dateigr"o"se anzeigen.\\
-S <Sekunden> & Timeout f"uer Kernel-Funktionen\\
+/- <Sekunden> & Aktiviert deb Wiederholungs.\\
-V & Markiert angeforderte, aber nicht gefundene Befehle, Dateien u.s.w\\
\end{tabular}
\caption{Optionen lsof}
\end{table}
%----------------------------------------------------------
%Was hat ein Programm offen
%----------------------------------------------------------
\subsection{Was hat ein Programm offen}
\listBash
\begin{lstlisting}[captionpos=b, caption=Programm Info]
uws@tux>lsof -c <programm_name>
uws@tux>lsof -c bash
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
bash 2823 uws cwd DIR 8,36 4096 1071099 /home/uws
bash 2823 uws rtd DIR 0,32 246 256 /
bash 2823 uws txt REG 0,32 656584 275 /bin/bash
.
.
\end{lstlisting}
\newpage
%---------- File Deskriptoren ------
\begin{justify}
In der nachfolgenden Tabelle werden die File-Deskriptoren (FD) mit ihren Beschreibungen aufgelistet.
\end{justify}
\begin{table}[ht]
\begin{tabular}{p{2cm}p{14cm}} % l => Text left, c => center, r => right, p => zeilenumbruch
\rowcolor{hellgrau}\emph{\textbf{Name}} & \emph{\textbf{Beschreibung}}\\
\hline
\hline
cwt & Arbeitsverzeichnis (Current Working Directory)\\
txt & Textdatei\\
rtd & Wurzelverzeichnis (Root Directory)\\
mem & Bibliotheken (Memory-mapped File)\\
mmap & Ger"atezugriff (Memory-mapped Device)\\
ltx & Shared Librarys\\
err & Zugriffsfehler\\
pd & Elternverzeichnis (Parent Directory)\\
\end{tabular}
\caption{File-Deskriptoren}
\end{table}
F"ur die Type gibt es folgende Namen.
\begin{table}[ht]
\begin{tabular}{p{2cm}p{14cm}} % l => Text left, c => center, r => right, p => zeilenumbruch
\hline
\hline
\rowcolor{hellgrau}\emph{\textbf{Name}} & \emph{\textbf{Beschreibung}}\\
REG & Regul"are locale Datei\\
DIR & Verzeichnis\\
PIPE & Pipe\\
IPv4, IPv6 & IP-Verbindung (Socket)\\
DEL & Gel"oschte Datei\\
BLK & Block Device\\
CHR & Character Device\\
\end{tabular}
\caption{Type}
\end{table}
%----------------------------------------------------------
%Portzugriff
%----------------------------------------------------------
\subsection{Portzugriff}
\listBash
\begin{lstlisting}[captionpos=b, caption=Beispiel Portzugriff]
uws@tux>lsof -i :<port_no>
uws@tux>lsof -i :80
\end{lstlisting}
%----------------------------------------------------------
%Verzeichniszugriff
%----------------------------------------------------------
\subsection{Verzeichniszugriff}
\listBash
\begin{lstlisting}[captionpos=b, caption=Beispiel Verzeichniszugriff]
uws@tux>lsof +D <Verzeichnis>
uws@tux>lsof +D /daten/allgemein
\end{lstlisting}
%----------------------------------------------------------
%Benutzerzugriff
%----------------------------------------------------------
\subsection{Benutzerzugriff}
Wird vor dem Usernamen ein {\ttfamily \verb|^|} vorangestellt, so werden alle offenen Dateien ausgelistet, au"ser von dem Benutzer mit dem {\ttfamily \verb|^|}\\
\listBash
\begin{lstlisting}[captionpos=b, caption=Beispiel Benutzerzugriff]
uws@tux>lsof -u <username>
uws@tux>lsof -u uws
uws@tux>lsof -u ^root
\end{lstlisting}
%----------------------------------------------------------
%Prozesszugriff
%----------------------------------------------------------
\subsection{Prozesszugriff}
\listBash
\begin{lstlisting}[captionpos=b, caption=Beispiel Prozesszugriff]
uws@tux>lsof -p <pid>
uws@tux>lsof -p 2326
uws@tux>lsof -d txt
\end{lstlisting}
\end{justify}

68
Kapitel2/Latex.tex Normal file
View File

@ -0,0 +1,68 @@
\section{Latex}
%---------------------------------------------------
% Subsection: Sty-Dateien
%---------------------------------------------------
\subsection{Sty-Dateien}
\begin{justify}
Neue Fonts oder Sty-Dateien werden in das texmf Verzeichnis kopiert und anschlie\ss{}end wird die Latex-DB aktualisiert. Am besten ist es, in dem Latex Verzeichnis ein neues Verzeichnis zu erstellen und darin dann die Dateien zu kopieren. Hat man eine neue Dokumentenklasse heruntergeladen und in der Zip-Datei befindet sich eine Datei mit der Endung \verb|"ins"|, so kann man daraus die erforderlichen Dateien generieren. Diese Dateien werden dann in das Latex Verzeichnis kopiert.
\listBash
\begin{lstlisting}[captionpos=b, caption=Sty-Dateien]
uws@tux># Arch Linux path
uws@tux>cd /usr/share/texmf-dist/tex/latex
uws@tux># Other Linux
uws@tux>cd /usr/share/texmf/tex/latex
uws@tux># Create Directory
uws@tux>mkdir awesome && cd awesome
uws@tux>sudo cp -r /home/uws/Downloads/awesome/* .
uws@tux># Latex-DB update, texhash or mktexlsr
uws@tux>sudo texhash
uws@tux>sudo mktexlsr
uws@tux># New Documentclass
uws@tux>latex dinbrief.ins
\end{lstlisting}
%---------------------------------------------------
% Subsection: Umlaute
%---------------------------------------------------
\subsection{Umlaute}
Wurde mit \verb|\usepackage[latin1]{inputenc}| oder \verb|\usepackage[utf8]{inputenc}| die Zeichenkodierung in der Pr\"aambel definiert, so sollte man Umlaute direkt in dem Text eingeben können. Falls es doch noch zu Problemen kommen sollte bei der Ausgabe, so kann man die Umlaute auch folgenderma\ss{}en eingeben:\\
\verb|\"A|, \verb|\"O|, \verb|\"U|, \verb|\"a|, \verb|\"o|, \verb|\"u| und \verb|\ss{}| ergeben dann Ä, Ö, Ü, ä, ö, ü und \ss{}.
%---------------------------------------------------
% Subsection: PDF erstellen
%---------------------------------------------------
\subsection{PDF erstellen}
Aus einer Tex-Datei kann man mit {\ttfamily xelatex} oder {\ttfamily pdflatex} PDF-Dateien erstellen.
%---------------------------------------------------
% Subsection: Package ngerman
%---------------------------------------------------
\subsection{Package ngerman}
Wir bei dem erstellen einer PDF-Datei eine Meldung ausgegeben, es würde das Package ngerman fehlen,so kann man es mit dem Paketmanager der Distribution nachinstallieren.
\listBash
\begin{lstlisting}[captionpos=b, caption=Sty-Dateien]
uws@tux># Arch Linux und Manjaro
uws@tux>pamac install texlive-langgerman
uws@tux># Debian
uws@tux>sudo apt install texlive-lang-ngerman
\end{lstlisting}
\newpage
%---------------------------------------------------
% Subsection: Solutions
%---------------------------------------------------
\subsection{Solutions}
\subsubsection{Error xelatex.fmt}
Kommt bei dem erstellen einer PDF-Datei folgende Fehlermeldung:
{\ttfamily xelatex.fmt made by different executable version, strings are different}
\linebreak
kann man das Problem folgenderma\ss{}en l\"osen.
\listBash
\begin{lstlisting}[captionpos=b, caption=xelatex]
uws@tux># Arch Linux und Manjaro
uws@tux>sudo pacman -S texlive-xetex
\end{lstlisting}
\end{justify}

45
Kapitel2/Links.tex Executable file
View File

@ -0,0 +1,45 @@
\section{Links}
\subsection{Anlegen}
\begin{flushleft}
Links (Verweise) k"onnen mit dem Befehl {\ttfamily ln} angelegt werden. Ohne Optionen werden
{\ttfamily Hardlinks} angelegt und mit der Option {\ttfamily -s Softlinks}.
\listBash
\begin{lstlisting}[captionpos=b, caption=Erstellen Links]
uws@tux>ln <quelle> <ziel>
uws@tux>ln -s <quelle> <ziel>
\end{lstlisting}
Ein {\ttfamily Softlink (Symbolischer Link)} zeigt direkt auf die Datei / Verzeichnis und ein
{\ttfamily Hardlink auf} einen Inode. Wenn die Datei umbenannt oder verschoben wird, so bekommt
der {\ttfamily Softlink} davon nicht mit, der Hardlink schon. Softlinks k"onnen Partitions- und
Dateisystem übergreifend erstellt werden, Hardlinks nicht. Hardlinks auf Verzeichnisse sollten
vermieden werden, sind aber grunds"atzlich m"oglich durch den User root.
%----------------------------------------------------------
% Anzeigen
%----------------------------------------------------------
\subsection{Anzeigen}
\listBash
\begin{lstlisting}[captionpos=b, caption=Links anzeigen]
uws@tux>ls -l
MeineDatei.pdf > /home/uws/Daten/Bash.pdf
uws@tux>ls -l | grep .-\>
\end{lstlisting}
%----------------------------------------------------------
% Loeschen
%----------------------------------------------------------
\subsection{L"oschen}
\listBash
\begin{lstlisting}[captionpos=b, caption=Links l"oschen]
uws@tux>rm <Datei>
\end{lstlisting}
\end{flushleft}

50
Kapitel2/Mails.tex Executable file
View File

@ -0,0 +1,50 @@
\section{Mails}
\subsection{Konfiguration}
\begin{justify}
Lokale Mails k"onnen ohne Konfiguration verschickt werden. Sollen die Mail aber an einem Mail Server "ubergeben werden, so ist dieses zu konfigurieren. Folgende Parameter m"ussen in der Datei
{\ttfamily /etc/postfix/main.cf} ver"andert werden.
\listBash
\begin{lstlisting}[captionpos=b, caption=main.cf]
myhostname = tux.seabaer-ag.de
mydomain = seabaer-ag.de
myorigin = $mydomian
relayhost = [172.30.250.66]
root@tux>systemctl restart postfix
\end{lstlisting}
Soll der Absender umbenannt werden, so sind folgende Einstellungen vorzunehmen.
\listBash
\begin{lstlisting}[captionpos=b, caption=Absender]
root@tux>tail -n 4 /etc/postfix/main.cf
#
# translating sender e.g. "root@tux" to "uws@seabaer-ag.de"
#
Sender_canonical_maps = /etc/postfix/sender_canonical
root@tux>cat /etc/postfix/sender_canonical
#
# translating user root to uws@seabaer-ag.de
#
root uws@seabaer-ag.de
root@tux>postmap /etc/postfix/sender_canonical
root@tux>systemctl restart postfix
\end{lstlisting}
%----------------------------------------------------------
% Verschicken
%----------------------------------------------------------
\subsection{Verschicken}
Mails kann man mit dem Befehl {\ttfamily mail} verschicken.
\listBash
\begin{lstlisting}[captionpos=b, caption=Send Mail]
uws@tux>echo "Eine Mail fuer dich" | mail -s "Du hast Post" uws@localhost
uws@tux>cat mail.txt | mail -s "Mehrzeileige Mail" uws@localhost
\end{lstlisting}
Mit {\ttfamily -a} kann man Attachements verschicken. Wenn mehrere Attachements verschickt werden sollen, kann man die Option {\ttfamily -a} mehrmals angeben. Verschiedene Empf"anger werden mit einem Komma getrennt angegeben.
\listBash
\begin{lstlisting}[captionpos=b, caption=Send Attachmend]
uws@tux>mail -s "Anhang" -a Image1.jpg -a bhb.pdf uws@seabaer-ag.de,jan@yahoo.gr
\end{lstlisting}
\end{justify}

32
Kapitel2/Ordner.tex Executable file
View File

@ -0,0 +1,32 @@
\section{Ordner / Verzeichnisse}
\subsection{Anlegen}
\begin{justify}
Ordner / Verzeichnisse kann man mit dem Befehl {\ttfamily mkdir <name>} anlegen.\\
Mit dem nachfolgenden Befehl werden alle drei Verzeichnisse gleichzeitig angelegt. Ohne den Parameter {\ttfamily -p} kann man nur die Verzeichnisse anlegen, wenn das vorherige Verzeichnis existiert. In dem Beispiel unten m"ussten also die Verzeichnisse {\ttfamily daten} und {\ttfamily privat} vorhanden sein.
\listBash
\begin{lstlisting}[captionpos=b, caption=Create Verzeichnisse]
uws@tux>mkdir -p daten/privat/auto
\end{lstlisting}
Sollen die Verzeichnisse nebeneinander erstellt werden, so setzt man die Verzeichnisnamen in geschweiften Klammern.
\listBash
\begin{lstlisting}[captionpos=b, caption=Create Verzeichnisse einzeln]
uws@tux>mkdir -v {daten,privat,auto}
mkdir: created directory 'daten'
mkdir: created directory 'privat'
mkdir: created directory 'auto'
uws@tux>ls
daten
privat
auto
\end{lstlisting}
\subsection{L"oschen}
M"ochte man Verzeichnisse mit einem Inhalt l"oschen, so wird der Parameter {\ttfamily -r} mit angegeben. Der Parameter l"oscht die Verzeichnisse und entfernt die darin enthaltenen Dateien.
\listBash
\begin{lstlisting}[captionpos=b, caption=Verzeichnis l"oschen]
uws@tux>rm -rv daten privat auto/
removed directory 'daten'
removed directory 'privat'
removed directory 'auto'
\end{lstlisting}
\end{justify}

49
Kapitel2/Programme.tex Executable file
View File

@ -0,0 +1,49 @@
\section{Programme}
\subsection{Im Hintergrund ausf"uhren}
\begin{justify}
Um ein Programm im Hintergrund laufen zu lassen, so wird nach dem Befehl das {\ttfamily \verb|&|} Zeichen angeh"angt.
\listBash
\begin{lstlisting}[captionpos=b, caption=Beispiele Hintergrund]
uws@tux>tail -f /var/log/messages &
\end{lstlisting}
Hat man mehrere Programme im Hintergrund gestartet, so kann man sie sich mit dem Befehl {\ttfamily jobs} anzeigen lassen.
\listBash
\begin{lstlisting}[captionpos=b, caption=Beispiel Jobs]
uws@tux>jobs
\end{lstlisting}
Einen Job wieder in den Vordergrund zu holen, so wird der Befehl {\ttfamily fg} abgesetzt. Sind mehrere Jobs gestartet worden, so wird an dem Befehl {\ttfamily fg} noch ein {\ttfamily \%<job\_nr>} angeh"angt, um einen speziellen Job in den Vordergrund zu holen.
\listBash
\begin{lstlisting}[captionpos=b, caption=Beispiel Vordergrund]
uws@tux>fg
uws@tux>fg %2
\end{lstlisting}
Soll das Programm wieder in den Hintergrund laufen, so muss das Programm gestoppt werden, um ihn dann in den Hintergrund zu bringen.
\listBash
\begin{lstlisting}[captionpos=b, caption=Beispiel Stoppen]
uws@tux>ctrl+Z
uws@tux>bg
\end{lstlisting}
%----------------------------------------------------------
% Ausgabe Programmpfad
%----------------------------------------------------------
\subsection{Ausgabe des Programmpfads}
M"ochte man die Pfadangabe eines Programms sich anzeigen lassen, so gibt es zwei M"oglichkiten. In der ersten wird die {\ttfamily \$\{PATH\}} Variable ausgewertet.
\listBash
\begin{lstlisting}[captionpos=b, caption=Beispiel Programmpfad]
uws@tux>which <ProgrammName>
uws@tux>whereis <ProgrammName>
\end{lstlisting}
%----------------------------------------------------------
% Sandbox
%----------------------------------------------------------
\subsection{Programme in einer Sandbox ausf"uhren}
M"ochte man Programme oder auch Dienste in einem gesch"utzten Bereich ausf"uhren, kann man sie in einem {\ttfamily chroot-K"afig} starten. In diesem K"afig k"onnen Angreifer keinen Schaden anrichten.
\listBash
\begin{lstlisting}[captionpos=b, caption=Beispiel Sandbox]
uws@tux>chroot /nimm/das/als/root ftp -o option1
\end{lstlisting}
\end{justify}

238
Kapitel2/SearchReplace.tex Executable file
View File

@ -0,0 +1,238 @@
\section{Suchen \& Ersetzten}
\subsection{SED}
\begin{justify}
In einer Datei kann man mit dem Befehl {\ttfamily sed} nach Texten suchen und ersetzten. In dem nachfolgenden Beispiel wird er String {\ttfamily domain} durch {\ttfamily dom"ane} ersetzt und durch die Umleitung in eine neue Datei geschrieben.
\listBash
\begin{lstlisting}[captionpos=b, caption=Beispiel sed]
uws@tux>sed -e s/domain/dom"ane/g <datei> > <datei.neu>
\end{lstlisting}
Syntax Beispiele
\listBash
\begin{lstlisting}[captionpos=b, caption=Beispiele Syntax]
uws@tux>sed Kommando Textdatei
uws@tux>sed Kommando < Textdatei
uws@tux>Programm | sed Kommando | ...
uws@tux>sed -f Skript ...
uws@tux>sed -e Kommando1 -e Kommando2 -e Kommando3 ...
uws@tux>sed Kommando > Zieldatei
uws@tux>sed Kommando > Zieldatei 2>&1
\end{lstlisting}
Sed-Optionen
\begin{table}[ht]
\begin{tabular}{p{2cm}p{14cm}} % l => Text left, c => center, r => right, p => zeilenumbruch
\rowcolor{hellgrau}\emph{\textbf{Option}} & \emph{\textbf{Beschreibung}}\\
\hline
\hline
-e & Angabe auszuf"uhrender Befehle\\
-u & Auf Datenpufferung verzichten\\
-s & Dateien separat behandeln\\
-r & Erweiterte regul"are Ausdr"ucke verwenden\\
-i [Endung] & Sicherungsdatei anlegen\\
-f <script> & Script-Datei ausf"uhren\\
-n & Unterdr"ucken der nicht betroffenen Textbereiche\\
-v & Versinsabfrage\\
\end{tabular}
\caption{SED-Optionen}
\end{table}
\begin{justify}
M"ochte man mehrere Kommandos in einem Rutsch ausf"uhren, so kann man die Kommandos in einer Datei schreiben und diese Datei wird dann mit {\ttfamily -f} "ubergeben. In dieser Datei steht dann in jeder Zeile ein Sed-Befehl.
\end{justify}
\listBash
\begin{lstlisting}[captionpos=b, caption=Beispiel Script-Datei]
uws@tux>cat myFile
s/Hans//
s/ha/Ha/g
\end{lstlisting}
\newpage
\begin{justify}
In der nachfolgenden Tabelle wird eine Auswahl der Editierkommandos aufgelistet.
\end{justify}
\begin{table}[ht]
\begin{tabular}{p{2cm}p{14cm}} % l => Text left, c => center, r => right, p => zeilenumbruch
\rowcolor{hellgrau}\emph{\textbf{Kommando}} & \emph{\textbf{Beschreibung}}\\
\hline
\hline
i & Anf"ugen von Zeilen oberhalb der angegebenen Stelle\\
a & Anf"ugen von Zeilen unterhalb der angegebenen Stelle\\
p & Ausgabe der angegebenen Zeilen\\
l[l"ange] & Ausgabe der angegebenen Zeilen optional mit L"angenbegrenzung\\
y & Austausch von Zeichen\\
q & Sed beenden\\
c & Ersetzen von Text in der angegebenen Zeile\\
d & L"oschen der angegebenen Zeilen\\
s & Suchen und ersetzen\\
\end{tabular}
\caption{Editierkommandos}
\end{table}
F"ur die Option {\ttfamily s} gibt es noch folgenden Optionen.\\[1ex]
\begin{table}[ht]
\begin{tabular}{p{2cm}p{14cm}} % l => Text left, c => center, r => right, p => zeilenumbruch
\rowcolor{hellgrau}\emph{\textbf{Option}} & \emph{\textbf{Beschreibung}}\\
\hline
\hline
g & Befehl auf alle gefundenen Textstellen in der Zeile anwenden\\
p & Ergebnis der Aktion ausgeben\\
w[Datei] & Ergebnis in eine Datei schreiben\\
\end{tabular}
\caption{Optionen f"ur s}
\end{table}
\begin{justify}
Nachfolgend die Optionen der Editierkommandos.
\end{justify}
\begin{table}[ht]
\begin{tabular}{p{2cm}p{14cm}} % l => Text left, c => center, r => right, p => zeilenumbruch
\rowcolor{hellgrau}\emph{\textbf{Option}} & \emph{\textbf{Beschreibung}}\\
\hline
\hline
= & Ausgabe der Zeilennummer\\
g & Betrifft alle vorkommen\\
p & Gibt bei dem Editierkommando s die ge"anderte Zeile aus\\
w & Schreiben der bearbeiteten Zeilen in die Datei\\
\end{tabular}
\caption{Optionen Editierkommandos}
\end{table}
\newpage
\begin{justify}
Desweiteren gibt es noch Sonderzeichen f"ur SED.
\end{justify}
\begin{table}[ht]
\begin{tabular}{p{2cm}p{14cm}} % l => Text left, c => center, r => right, p => zeilenumbruch
\rowcolor{hellgrau}\emph{\textbf{Zeichen}} & \emph{\textbf{Beschreibung}}\\
\hline
\hline
( & "Offnet eine Anweisung\\
) & Schlie"st eine Anweisung\\
\{ & "Offnet optionale Anweisung\\
\} & Schlie"st optionale Anweisung\\
\verb|[| & "Offnet Klassenbeschreibung von Zeichen\\
\verb|]| & Schlie"st Klassenbeschreibung von Zeichen\\
\verb|"| & Maskiert eine Anweisung und l"ost Shell-Variablen auf\\
\verb|'| & Maskiert eine Anweisung und l"ost Shell-Variablen nicht auf\\
\verb|`| & Schlie"st Anweisungsblock ein\\
. & Ein beliebiges Zeichen au"ser Zeilenvorschub\\
, & trennt Parameter, etwa Zeilenangaben\\
Leerzeichen & Setzt Markierung (t- und b-Befehl)\\
\$ & Dokumentenende, letzte Zeile oder Zeilenende\\
\& & Platzhalter f"ur das Suchmuster, das in der Ersetzen-Anweisung mit ausgegeben wird\\
| & Oder (Abtrennen von regul"aren Ausdr"ucken)\\
/ & Trennzeichen in Editierkommandos\\
\verb|^| & Anfang der Zeile, aber: \verb|[^Begriff]| = Negierung\\
\verb|\| & Demaskieren\\
! & Nach Zeilenzahl: nicht diese Zeile ausgeben\\
* & Nie oder beliebig oft\\
+ & Muster mindestens einmal vorhanden\\
= & Ausgabe der Zeilennummern\\
\verb|\|n & Zeilenvorschub\\
\verb|\|t & Tabulator\\
\end{tabular}
\caption{Sonderzeichen}
\end{table}
\newpage
\begin{justify}
Nun werden in der n"achsten Tabelle die Suchmuster und Adressangaben aufgelistet.
\end{justify}
\begin{table}[ht]
\begin{tabular}{p{3cm}p{13cm}} % l => Text left, c => center, r => right, p => zeilenumbruch
\rowcolor{hellgrau}\emph{\textbf{Muster}} & \emph{\textbf{Beschreibung}}\\
\hline
\hline
(ohne) & Alle Zeilen\\
25 & Zeile 25\\
25! & Nicht Zeile 25\\
10,20 & Zeilen 10 bis 20\\
\$ & Letzte Zeile\\
'/Muster/!' & Nicht Suchmuster\\
\^Zeichen & Zeichen am Anfang\\
/Zeichenkette/ & Zeichenkette\\
\verb|[Zeichnemenge]| & Zeichenmenge\\
\verb|[:alpha:]| & Beliebige Buchstaben\\
\verb|[:lower:]| & Kleinbuchstaben\\
\verb|[:upper:]| & Gro"sbuchatben\\
\verb|[:alnum:]| & Alphanumerische Zeichen\\
\verb|[:digit:]| & Zahlen\\
\verb|[:xdigit:]| & Hexadezimalzahlen\\
\verb|[:blank:]| & Tabulatoren und Leerzeichen\\
\verb|[:space:]| & Leerzeichen\\
\verb|[:cntrl:]| & Steuerzeichen\\
\verb|[:print:]| & Druckbare Zeichen (ohne Steuerzeichen)\\
\verb|[:graph:]| & Sichtbare Zeichen (ohne Leerzeichen)\\
\verb|[:punct:]| & Satzzeichen\\
\end{tabular}
\caption{Suchmuster / Adressangaben}
\end{table}
\begin{justify}
Nun noch weitere Beispiele.
\end{justify}
\listBash
\begin{lstlisting}[captionpos=b, caption=Weitere Beispiele, label=lst:bash]
cat textdatei | sed -n '/Hans/p' # Sucht nach Hans
sed -n '/[Hh]an/p' textdatei # Alle Namen, die han oder Han beinhalten
sed -n '3,5!'p textdatei # Alle Zeilen, ausser 3 und 5
sed -n '/Hans/!'p textdatei # Alle Zeilen, ausser die mit Hans
sed -n '/[H|G]/'p textdatei # Zeilen, die H oder G enthalten
sed -n '/[H]\|[G]/!'p textdatei # Zeilen, die H oder G nicht enthalten
cat textdatei | sed -n '3p' # Ausgabe der Zeile 3
cat textdatei | sed -n '$p' # Ausgabe der letzten Zeile
sed -n '/[H]./,/[J]./!'p textdatei # Zeilen nicht ausgeben, die H oder J enthalten.\\
cat textdatei | sed -n '/[:alnum:]/'p # Alle Zeilen, die alphanumerische Zeichen enthalten\\
cat textdatei | sed -n 's/j/J/p' # Suchmuster nur beim ersten Auftreten ersetzten\\
cat textdatei | sed -n 's/j/J/gp' # Suchmuster bei jedem Auftreten ersetzten\\
sed -n 's/Hans//gp' textdatei # L"oschen des Wortes Hans\\
cat textdatei | sed -n '4s/Hans/Jens/gp' # Ersetzen von Hans durch Jens in der Zeile 4\\
sed -n '/ans/s09/089/gp' textdatei # Ersetzen von 09 durch 098 bei allen Zeilen mit dem Suchmuster ans\\
sed -n '/ans/!s0/089/gp' textdatei # Ersetzen von 09 durch 098 bei allen Zeilen die nicht ans enthalten\\
cat textdatei | sed -n s'/[0-9]\/]//'gp # L"oschen aller Zahlen mitsamt Schr"agstrichen\\
\end{lstlisting}
%----------------------------------------------------------
% TR
%----------------------------------------------------------
\subsection{TR}
Es gibt auch noch den Befehl {\ttfamily tr}, mit dem man Strings ersetzten kann. Achtung, der zu ersetzende String muss gleich lang sein, sonst werden die fehlenden Stellen aufgef"ullt.\\
Konvertieren Klein- auf Gro"sschreibung.
\listBash
\begin{lstlisting}[captionpos=b, caption=Konvertierung]
uws@tux>tr a-z A-Z < datei.old > datei.neu
uws@tux>tr [:lower:] [:upper:] < datei.old > datei.new
\end{lstlisting}
Ersetzen von Strings.
\listBash
\begin{lstlisting}[captionpos=b, caption=Ersetzen Strings]
tr '{}' '()' < datei.old > datei.neu
\end{lstlisting}
Konvertieren Leerzeichen zu Tab. F"ur jedes Leerzeichen wird ein Tab gesetzt. Sind zwei oder mehr Leerzeichen vorhanden, so gibt es auch die gleiche Anzahl an Tabs.
\listBash
\begin{lstlisting}[captionpos=b, caption=Tabs setzen]
uws@tux>echo "Zeile mit Leerzeichen" | tr [:space:] '\t'
Zeile mit Leerzeichen
\end{lstlisting}
Soll nur f"ur ein Tab gesetzt werden, auch wenn mehrere Leerzeichen vorkommen, so gibt man die Option {\ttfamily -s} mit an.
\listBash
\begin{lstlisting}[captionpos=b, caption=Tabs setzenh]
uws@tux>echo "Zeile mit Leerzeichen" | tr -s [:space:] '\t'
Zeile mit Leerzeichen
\end{lstlisting}
Setzen von nur einem Leerzeichen.
\listBash
\begin{lstlisting}[captionpos=b, caption=Leerzeichen setzen]
uws@tux>echo "Zeile mit viele Leerzeichen" | tr -s [:space:] ' '
Zeile mit viele Leerzeichen
\end{lstlisting}
L"oschen von Strings.
\listBash
\begin{lstlisting}[captionpos=b, caption=Strings l"oschen]
uws@tux>echo "Die User ID ist 784592" | tr -d 'D'
ie User I ist 784592
uws@tux>echo "Die User ID ist 784592" | tr -d [:digit:]
Die User ID ist
uws@tux>echo "Die User ID ist 784592" | tr -cd [:digit:]
784592
\end{lstlisting}
L"oschen aller non-printable Zeichen.
\listBash
\begin{lstlisting}[captionpos=b, caption=L"oschen non-printable]
uws@tux>tr -cd [:print:] < file.txt > file_new.txt
\end{lstlisting}
\end{justify}

12
Kapitel2/SizeShell.tex Executable file
View File

@ -0,0 +1,12 @@
\section{Gr"o"se und Position der Console}
%\subsection{Anlegen}
\begin{justify}
M"ochte man die Gr"o"se und Position der Console in Erfahrung bringen, so gibt es hierf"ur den Befehl {\ttfamily xwininfo}, den man in der Console absetzt. In der Ausgabe {\ttfamily geometry} steht dann die Gr"o"se und die Position des Fensters. Die Position des Fensters wird von der linken oberen Ecke aus gesehen. Diese Werte k"onnen dann z.B. f"ur die Konfiguration eines Gnome Konsolen Fenster gebraucht werden. Hierzu ist dann in der Konfiguration des Fenster unter Befehl der Wert {\ttfamily -geometry 100x150+10+10} einzugeben.
\listBash
\begin{lstlisting}[captionpos=b, caption=Gr"o"se und Position]
uws@tux>xwininfo
.
.
- geometry 100x150+10+10
\end{lstlisting}
\end{justify}

View File

@ -0,0 +1,89 @@
\section{Software kompilieren}
\subsection{Allgemein}
\begin{flushleft}
Nach dem entpacken des Quell Codes des Programms, befinden sich im Verzeichnis die Dateien {\ttfamily README} und
{\ttfamily INSTALL}. Diese Dateien ist die Dokumentation f"ur das kompilieren des Programms. Eventuell gibt es noch
ein Doc Verzeichnis. In der {\ttfamily Readme} Datei steht im Anschnitt {\ttfamily Requirements}, welche Pakete gebraucht werden.\\[1ex]
Die meisten Programme werden mit den drei Befehlen {\ttfamily ./configure, make} und {\ttfamily make install} "ubersetzt.\\[1ex]
Der Aufruf von {\ttfamily configure} erzeugt eine Datei mit den Namen {\ttfamily Makefile}. In dieser Datei stehen alle
Anweisung f"ur den Compiler, Pfade zu den Bibliotheken und den Header-Dateien.
\subsection{Grundausstattung}
Damit das kompilieren auch funktioniert, werden die Compiler gebraucht. F"ur das kompilieren des Quell Codes wird das Paket
{\ttfamily gcc, gcc-c++, glibc-devel} und {\ttfamily xorg-X11-devel} gebraucht. Au"serdem wird noch {\ttfamily autoconf, automake}
und {\ttfamily make} gebraucht.
\subsection{Configure}
In dem Verzeichnis des zu Übersetzenden Programms wird nun der {\ttfamily configure} Befehl abgesetzt.
\listBash
\begin{lstlisting}[captionpos=b, caption=Configure]
uws@tux>./configure
\end{lstlisting}
Dieses Script erstellt nun ein oder auch mehrere Makefiles. Ob es mehrere Makefiles werden, h"angt von dem zu kompilierenden
Programm ab. Wird der Befehl ohne Optionen abgesetzt, so landen die Dateien bei einer Installation im Verzeichnis /usr/ local.
Soll das Programm in einem anderen Verzeichnis installiert werden, so kann man die Option {\ttfamily -\vspace{0.01cm}-prefix=<Verzeichnis>} angeben.
\listBash
\begin{lstlisting}[captionpos=b, caption=Configure mit Prefix]
uws@tux>./configure --prefix=/opt/games
\end{lstlisting}
Mit der Option {\ttfamily -\vspace{0.01cm}-help} kann man sich die zu verwendeten Parameter anzeigen lassen.
\listBash
\begin{lstlisting}[captionpos=b, caption=Configure Hilfe]
uws@tux>./configure --help
\end{lstlisting}
Soll das Programm sp"ater nicht installiert werden, um das Programm direkt aus dem Programm Ordner auszuf"uhren,
so wird die Option {\-\vspace{0.01cmd}-disable-install} angeben.
\listBash
\begin{lstlisting}[captionpos=b, caption=Configure Disable Install]
uws@tux>./configure --disable-install
\end{lstlisting}
\subsection{Make}
Mit dem Aufruf {\ttfamily make} wird nun das Programm kompiliert. Je nach Rechnergeschwindigkeit kann das
kompilieren des Programms einige Zeit dauern. Stehen in den letzten Zeilen keine Fehlermeldungen (Fehler oder Error),
so hat das kompilieren des Programms funktioniert.
\listBash
\begin{lstlisting}[captionpos=b, caption=Make]
uws@tux>make
\end{lstlisting}
\subsection{Male Install}
Wurde das {\ttfamily configure-Script} nicht mit der Option {\ttfamily --disable-install} aufgerufen, so muss es
jetzt noch installiert werden. Die Installation erfolgt mit dem Aufruf {\ttfamily make install}.
\listBash
\begin{lstlisting}[captionpos=b, caption=Make Install]
uws@tux>make install
\end{lstlisting}
\subsection{Fehlerbehebung}
Meistens beschwert sich das {\ttfamily configure-Script} "uber fehlende Dateien oder Bibliotheken / Pakete.
So k"onnte eine Fehlemeldung lauten:
\listBash
\begin{lstlisting}[captionpos=b, caption=Fehlermeldung]
uws@tux>configure: error: Cannot find ncurses.h
\end{lstlisting}
Um herauszufinden, im welchen Paket diese Bibliothek sich befindet, kann man eine Suchmaschine daf"ur verwenden.
Die Suchmaschine {\ttfamily http://www.rpmseek.com} kann hierzu verwendet werden. In dem Suchfeld gibt man die
zu suchende Bibliothek ein und die Option Paket {\ttfamily enth"alt die Datei} sollte eingeschaltet sein.
Ein Klick nun auf {\ttfamily go} listet nun das zu installierende Paket auf.\\[1ex]
Einen Artikel "uber {\ttfamily configue-Fehler} gibt es unter dem folgenden Link:
http://www.linux-user.de/ausgabe/2004/06/028-configure.\\[1ex]
"Uber make-Fehler gibt es einen Artikel unter den folgenden Link:
http://www.linux-user.de/ausgabe/2004/06/032-make.
\end{flushleft}

195
Kapitel2/SpaltenOperationen.tex Executable file
View File

@ -0,0 +1,195 @@
\section{Spaltenweise Operationen}
%----------------------------------------------------------
% AWK
%----------------------------------------------------------
\subsection{AWK}
\begin{justify}
Das Program {\ttfamily awk} arbeitet Spaltenweise mit organisierten Informationen. Die Datenfelder fangen mit \verb|$1| an und als Trennzeichen ist standardmä\ss{}ig Leerzeichen oder Tabulator eingestellt. \verb|$0| gibt die komplette Zeile aus. Die Variable NF enthält die Anzahl der Datenfelder und die Variable NR die Zeilennummer. Mit dem Parameter \verb|--|dump\verb|-|variables kann man sich alle Variablen ausgeben lassen.
\listBash
\begin{lstlisting}[captionpos=b, caption=Beispiel awk]
uws@tux>echo $USER | awk '{print "Hallo " $1 " :-)"}'
Hallo uws :-)
uws@tux>echo "A B C D" | awk '{print $3 " " $4}'
C D
uws@tux> cal 05 2023 | awk '{print NR " | " NF " | " $0}'
1 | 2 | Mai 2023
2 | 7 | Mo Di Mi Do Fr Sa So
3 | 7 | 1 2 3 4 5 6 7
4 | 7 | 8 9 10 11 12 13 14
5 | 7 | 15 16 17 18 19 20 21
6 | 7 | 22 23 24 25 26 27 28
7 | 3 | 29 30 31
8 | 0 |
uws@tux>df | awk '/dev/ {summe+=$4} END {print summe " Kb"}'
1133 Kb
\end{lstlisting}
Ebenso lassen sich Dateien auswerten. Mit dem Parameter \verb|-F| legt man ein anderes Trennzeichen fest, ebenso kann man auch Posix-Zeichenklassen oder reguläre Ausdrücke verwenden.
\listBash
\begin{lstlisting}[captionpos=b, caption=Dateien auswerten]
uws@tux>awk '{print}' /etc/group
root:x:0:root
nobody:x:65534:
adm:x:999:daemon
wheel:x:998:uws
uws@tux># Trennzeichen ein Doppelpunkt
uws@tux>awk -F':' '{print $1}' /etc/group
uws@tux># Trennzeichen ein Komma, Tabulator oder Leerzeichen
uws@tux> awk -F'[,[:blank:]]' '{print $1 $2 $3}' data.txt
uws@tux># Ausgabe umsortieren
uws@tux>awk -F':' '{print $3 " " $1 " " $4}' /etc/group
0 root root
65534 nobody
999 adm daemon
998 wheel uws
uws@tux># Ausgabe formatieren mit printf
uws@tux>awk -F':' '{printf("%5s %s\n", $3,$4)}' /etc/group
uws@tux># Das Feld $2 wird nicht ausgegeben
uws@tux>awk -F':' '{$2=""; print}' /etc/group
oot 0 root
nobody 65534
adm 999 daemon
wheel 998 uws
\end{lstlisting}
In dem nächsten Beispiel sollen nur die Zeilen ausgegeben werden, wo das letzte Feld des eingelesenen Datensatzes leer ist.
\listBash
\begin{lstlisting}[captionpos=b, caption=Dateien auswerten]
uws@tux>awk -F':' '$NF=="" {print $0}' /etc/group
nobody:x:65534:
utmp:x:997:
audio:x:996:
disk:x:995:
\end{lstlisting}
Die Befehle für awk können auch in einer Datei geschrieben werden, die man dann mit dem Parameter \verb|-f| aufruft. Mit der Funktion {\ttfamily getline} kann man die Ausgabe eines Linux-Befehls einer awk-Variable übergeben. Ein awk-Script kann prinzipiell aus 3 Teilen bestehen, {ttfamily BEGIN-Block, Hauptteil} und {\ttfamily End-Block.} Einer dieser Teile muss mindestens vorhanden sein. Die Befehle im Begin-Block führt Awk vor dem einlesen der ersten Datenzeile aus. Das dient zum Initialisieren des Scripts und zum setzten von Variablen. Hier kann zum Beispiel ein Trennzeichen definiert werden. Die Befehle im End-Bock werden nach dem einlesen der letzten Datenzeile ausgeführt.
\listBash
\begin{lstlisting}[captionpos=b, caption=getline]
uws@tux>cat demo-getline.awk
# Einbinden von Linux-Befehlen
BEGIN {
"date +%x" | getline tag;
"date +%T" | getline zeit;
printf("\nHeute ist der %s und es ist %s Uhr.\n", tag, zeit);
}
uws@tux>awk -f demo-getline.awk
Heute ist der 11.05.2023 und es ist 18:52:33 Uhr.
\end{lstlisting}
\listBash
\begin{lstlisting}[captionpos=b, caption=Logdatei auswerten]
uws@tux>cat printlog.txt
Dokument User Drucker Format Medium col b/w KstSt
Vertrag.pdf hans mfg201 A4 mormal 10 2 0815
Anlage.pdf paul mfg211 A3 normal 0 1 4711
Bild.jpg walter mfg201 A4 hochglanz 1 0 2345
Kosten.doc hans mfg211 A4 normal 5 2 0815
Material.pdf uws mfg201 a3 normal 0 12 4711
uws@tux>cat auswertung.awk
# Auswertung der Anzahl der gedruckten Seiten
# Die erste Zeile wird überspungen
NR==1 {
next;
}
{
summe_color+=$6;
summe_bw+=$7;
}
END {
print " Frabdrucke: " summe_color;
print "Schwarz/Weiss-Drucke: " summe_bw;
}
uws@tux>awk -f auswertung.awk printlog.txt
Frabdrucke: 16
Schwarz/Weiss-Drucke: 17
\end{lstlisting}
\newpage
\listBash
\begin{lstlisting}[captionpos=b, caption=Seiten pro Kostenstelle]
uws@tux>cat auswertung2.awk
# Auswertung der Anzahl schwarz-weiss gedruckten
# Seiten pro Kostenstelle
NR==1 {
next;
}
# array drucke
{drucke[$8]+=$7}
END {
print "KstSt. Anzahl";
for (F in drucke) {print F " " drucke[F]}
}
uws@tux>awk -f auswertung2.awk printlog.txt
KstSt. Anzahl
2345 0
0815 4
4711 13
\end{lstlisting}
Eine Einführung, Tipps und Tricks gibt es \href{https://www.ostc.de/awk.pdf}{hier}. Einen Artikel in der LinuxUser kann man \href{https://www.linux-community.de/ausgaben/linuxuser/2005/10/awk-werkzeug-und-skriptsprache/2/}{hier} sich anschauen.
\newpage
%----------------------------------------------------------
% CUT
%----------------------------------------------------------
\subsection{CUT}
Mit dem Kommandozeilen Befehl {\ttfamily cut} k"onnen Spalten ausgelesen werden. In dem ersten Beispiel wird aus einer Datei das zweite Zeichen ausgelesen. Einen Bereich wird mit {\ttfamily -c2-4} ausgelesen.
\listBash
\begin{lstlisting}[captionpos=b, caption=Beispiel cut]
uws@tux>cut -c2 uws.txt
w
l
e
\end{lstlisting}
Ab einer Position bis zum Ende der Zeile wird folgenderma"sen ausgelesen.
\listBash
\begin{lstlisting}[captionpos=b, caption=Beispiel cut]
uws@tux>cut -c2- uws.txt
we is not working
lisabeth is at home
ernd has a car
\end{lstlisting}
Vom Anfang einer Zeile bis zur einer Bestimmten Position wird mit z.B. {\ttfamily -8} angegeben. Wird nur das Minus Zeichen angegeben, so wird die ganze Zeile ausgegeben.
\listBash
\begin{lstlisting}[captionpos=b, caption=Beispiel cut]
uws@tux>cut -c-6 uws.txt
Uwe is
Elisab
Bernd
\end{lstlisting}
Die Option {\ttfamily -b} ist wie die Angabe von {\ttfamily -c}.
\listBash
\begin{lstlisting}[captionpos=b, caption=Beispiel -b]
uws@tux>uname -a | cut -b 1-11,56-
\end{lstlisting}
Verschiedene Felder werden mit der Option {\ttfamily -f} ausgelesen und mit {\ttfamily -d} kann man das Trennzeichen setzten. Einen Bereich kann mit {\ttfamily -f 1-3,6,7} angegeben werden.
\listBash
\begin{lstlisting}[captionpos=b, caption=Beispiel Felderh]
uws@tux>uname -a | cut -d ' ' -f 2,3
tux 3.1.10-1.13-desktop
@uws@tux>grep -i "nfs" /etc/fstab | cut -d ' ' -f2
/data/mail
/data/pictures
/data/video
\end{lstlisting}
-d = Trennzeichen\\
-f = Spalte auslesen\\[1ex]
Alle Felder ausgeben, au"ser ein bestimmtes Feld.\
\listBash
\begin{lstlisting}[captionpos=b, caption=Beispiel Feld]
uws@tux>grep "/bin/zsh" /etc/passwd | cut -d ':' --complement -s -f7
uws:x:1000:1000:uws:/home/uws
\end{lstlisting}
F"ur die Ausgabe wird ein neues Trennzeichen definiert. Ein Zeilenvorschub wird mit einem {\ttfamily \$'\verb|\|n'} gemacht.
\listBash
\begin{lstlisting}[captionpos=b, caption=Beispiel Feldtrenner]
uws@tux>grep "/bin/zsh" /etc/passwd | cut -d ':' -s -f1,6,7 --outputdelimiter='#'
uws#/home/uws#/bin/zsh
\end{lstlisting}
\end{justify}

112
Kapitel2/Verschiedenes.tex Executable file
View File

@ -0,0 +1,112 @@
\section{Ausgabe sortieren}
\begin{justify}
Die Ausgabe wird sortiert.
\listBash
\begin{lstlisting}[captionpos=b, caption=Beispiel sortieren]
uws@tux>ls -l ~/bin| sort +4
\end{lstlisting}
%----------------------------------------------------------
% Rechnen
%----------------------------------------------------------
\section{Rechnen}
Mit dem Aufruf {\ttfamily expre} kann in der Shell auch gerechnet werden.
\listBash
\begin{lstlisting}[captionpos=b, caption=Beispiel Rechnen]
uws@tux>expr 5 \* 600
3000
\end{lstlisting}
%----------------------------------------------------------
% Variablen anzeigen
%----------------------------------------------------------
\section{Umgebunsvariablen anzeigen}
Die Umgebungsvariablen k"onnen mit dem Aufruf {\ttfamily printenv} angezeigt werden.
\listBash
\begin{lstlisting}[captionpos=b, caption=Beispiel Umgebungsvariablen]
uws@tux>printenv
\end{lstlisting}
%----------------------------------------------------------
% Pruefsummen
%----------------------------------------------------------
\section{Pr"ufsummen}
Eine Pr"ufsumme f"ur eine Datei kann man mit den Befehlen {\ttfamily md5sum, sha1sum, sha256sum} oder {\ttfamily sha512sum} erstellt werden.
\listBash
\begin{lstlisting}[captionpos=b, caption=Beispiel md5sum]
uws@tux>md5sum spiele.iso
cfda02fa72abd850335a9066656322e5 *spiele.iso
\end{lstlisting}
Den Inhalt einer Variablen kann man folgenderma"sen die Pr"ufsumme ermitteln.
\listBash
\begin{lstlisting}[captionpos=b, caption=Beispiel Variable]
uws@tux>echo "$uws" | sha1sum
uws@tux>uws1='echo "$uws" | sh1sum'
uws@tux>echo ${uws1%-} # Ausgabe Pruefsumme ohne abschliessenden '-'
\end{lstlisting}
%----------------------------------------------------------
% Programmschleife
%----------------------------------------------------------
\section{Programmschleife}
M"ochte man ein Programm in einer Schleife ausf"uhren, so kann man das mit dem Befehl {\ttfamily watch} machen. Dieses Programm f"uhrt den "ubergebenen Befehl jede Sekunde aus und gibt ihn auf der Konsole aus. Mit {\ttfamily -n} kann die Intervall Zeit mitgegeben werden.
\listBash
\begin{lstlisting}[captionpos=b, caption=Beispiel watch]
uws@tux>watch -n 2 cat /proc/meminfo
Every 2,0s: cat /proc/meminfo Wed Oct 29 14:01:22 2014
MemTotal: 4055224 kB
MemFree: 2581004 kB
.
.
\end{lstlisting}
Gibt man noch die Option {\ttfamily -d=cumulative} mit an, so werden alle "Anderungen an der Ausgabe grau hinterlegt. Ohne die Option {\ttfamily cumulative} werden nur die "Anderungen grau markiert, sie sich nach dem letzten Aufruf ge"andert haben.\\
Soll der auszuf"uhrende Befehl mit einem {\ttfamily Pipe (|)} Zeichen weiterverarbeitet werden, so muss die Befehlzeile in {\ttfamily ''} stehen.
\listBash
\begin{lstlisting}[captionpos=b, caption=Beispiel watch mit Pipe]
uws@tux>watch -d 'ls -l | grep uws'
\end{lstlisting}
%----------------------------------------------------------
% Merge PDF Dateien
%----------------------------------------------------------
\section{Merge PDF Dateien}
Mehrere PDF-Dateien zu einer PDF-Datei zusammen f"ugen, kann mit dem Befehl {\ttfamily pdfunite} gemacht werden.
\listBash
\begin{lstlisting}[captionpos=b, caption=Beispiel Merge PDF]
uws@tux>pdfunite in1.pdf in2.pdf in3.pdf out.pdf
\end{lstlisting}
%----------------------------------------------------------
% Tree
%----------------------------------------------------------
\section{Verzeichnisstruktur mit Tree}
Mit dem Befehl {\ttfamily tree} kann man sich Verzeichnisstrukturen anzeigen lassen. Dieses funktioniert auch mit Tar-Archiven.
\listBash
\begin{lstlisting}[captionpos=b, caption=Beispiel Tree]
uws@tux>tree my_tar
Daten
|
|- Datei1.pdf
|_ Datei2.jpg
\end{lstlisting}
%----------------------------------------------------------
% Screenshot
%----------------------------------------------------------
\section{Screenshot erstellen}
Einen Screenshot kann man mit dem Programm {\ttfamily import} machen. In dem nachfolgendem Beispiel wird ein Screenshot von dem ganzen Bildschirm angefertigt. Vorher wird 10 Sekunden gewartet.
\listBash
\begin{lstlisting}[captionpos=b, caption=Beispiel Screenshot]
uws@tux>sleep 10;import -window root screen.png
uws@tux># Screenshot vom ausgewählten Fenster
uws@tux>import -screen output.png
\end{lstlisting}
%----------------------------------------------------------
% Convert charcter set
%----------------------------------------------------------
\section{Convert Character Set}
Dateien in ein anderes Character Set zu konvertieren, kann man mit dem Programm {\ttfamily iconv} machen. Mit {\ttfamily iconv -l} werden die verf"ugbaren Character Sets aufgelistet.
\listBash
\begin{lstlisting}[captionpos=b, caption=Beispiel Convert]
uws@tux>iconf -f <from\_char> -t <to\_char>//TRANSLIT <input> -o <output>
uws@tux>iconv -f US-ASCII -t UTF-8//TRANSLIT Index.tex -o Index.new.tex
\end{lstlisting}
\end{justify}

55
Kapitel3/BTRFS.tex Executable file
View File

@ -0,0 +1,55 @@
\section{BTRFS}
\subsection{Speicherplatz Belegung}
\begin{justify}
Das Kommando {\ttfamily df} gibt f"ur das Dateisystem {\ttfamily BTRFS} nicht die richtige Menge des belegten Platzes aus. Damit man sich den belegten Platz anzeigen lassen kann, muss das Kommando innerhalb von {\ttfamily btrfs} angegeben werden.
\listBash
\begin{lstlisting}[captionpos=b, caption=Speicherplatz Belegung, label=lst:bash]
uws@tux>df -hT | grep -i "btrfs"
/dev/sda6 btrfs 89G 38G 50G 44% /
/dev/sda6 btrfs 89G 38G 50G 44% /boot/grub2/x86_64-efi
/dev/sda6 btrfs 89G 38G 50G 44% /.snapshots
/dev/sda6 btrfs 89G 38G 50G 44% /boot/grub2/i386-pc
/dev/sda6 btrfs 89G 38G 50G 44% /var/spool
/dev/sda6 btrfs 89G 38G 50G 44% /var/lib/libvirt/images
/dev/sda6 btrfs 89G 38G 50G 44% /var/lib/mailman
/dev/sda6 btrfs 89G 38G 50G 44% /srv
/dev/sda6 btrfs 89G 38G 50G 44% /opt
/dev/sda6 btrfs 89G 38G 50G 44% /var/opt
/dev/sda6 btrfs 89G 38G 50G 44% /var/log
/dev/sda6 btrfs 89G 38G 50G 44% /var/lib/mariadb
/dev/sda6 btrfs 89G 38G 50G 44% /var/crash
/dev/sda6 btrfs 89G 38G 50G 44% /var/lib/machines
/dev/sda6 btrfs 89G 38G 50G 44% /usr/local
/dev/sda6 btrfs 89G 38G 50G 44% /var/lib/mysql
/dev/sda6 btrfs 89G 38G 50G 44% /tmp
/dev/sda6 btrfs 89G 38G 50G 44% /var/tmp
/dev/sda6 btrfs 89G 38G 50G 44% /var/lib/pgsql
/dev/sda6 btrfs 89G 38G 50G 44% /var/lib/named
uws@tux>btrfs filesystem df /
Data, single: total=43.00GiB, used=35.73GiB
System, single: total=32.00MiB, used=16.00KiB
Metadata, single: total=3.00GiB, used=1.69GiB
GlobalReserve, single: total=112.25MiB, used=0.00B
\end{lstlisting}
%-------------------------------------------------------------------------------
% Section: Snapshoot anzeigen.
%-------------------------------------------------------------------------------
\subsection{Snapshot anzeigen}
Unter {\ttfamily OpenSuSE} und auch in anderen Distributionen gibt es f"ur die Snapshots das Tool {\ttfamily snapper}. Mit {\ttfamily snapper} lassen sich Dateien auf fr"uheren Snapshots wieder herstellen. Au"serdem lassen sich System-Rollbacks durchf"uhren, System"anderungen r"uckg"angig machen und Snapshots manuell erstellen / Verwalten. Eine GUI f"ur Snapper gibt es unter http://snapper.io.\\
\begin{justify}
Die Konfigurations-Datei {\ttfamily root} befindet sich im Verzeichnis {\ttfamily /etc/snapper/configs}. Die Konfiguration kann man sich folgenderma"sen anzeigen lassen.
\end{justify}
\listBash
\begin{lstlisting}[captionpos=b, caption=Show Config, label=lst:bash]
rootqtux>snapper list-configs
Config | Subvolume
-------+----------
root | /
\end{lstlisting}
Auflisten der angefertigten Snapshots.
\listBash
\begin{lstlisting}[captionpos=b, caption=Show Snapshots, label=lst:bash]
root@tux>snapper list # oder auch snapper ls
\end{lstlisting}
\end{justify}

18
Kapitel3/Badblocks.tex Executable file
View File

@ -0,0 +1,18 @@
\section{Badblocks}
\begin{justify}
"Uberpr"ufen der Festplatte / Partition nach Badblocks.
\listBash
\begin{lstlisting}[captionpos=b, caption=Check Badblocks]
uws@tux>sudo badblocks -v /dev/sda1
\end{lstlisting}
"Uberpr"ufen mit der Angabe der Block Size, default Wert ist 1024.
\listBash
\begin{lstlisting}[captionpos=b, caption=Block Size]
uws@tux>sudo badblocks -v -b 2048 /dev/sda1
\end{lstlisting}
Die Ausgabe in einer Datei speichern.
\listBash
\begin{lstlisting}[captionpos=b, caption=Speichern in Datei]
uws@tux>sudo badblocks -v -o badblocks.log /dev/sda1
\end{lstlisting}
\end{justify}

39
Kapitel3/BootPartitionClone.tex Executable file
View File

@ -0,0 +1,39 @@
\section{Boot Partition kopieren und aktivieren}
\begin{justify}
Soll die Boot Partition auf einer neuen Festplatte kopiert und aktiviert werden, so sind folgenden Schritte durchzuf"uhren. Als erstes wird der Inhalt der ersten Partition zu den neuen Partition kopiert. In dem unteren Beispiel wird angenommen, das die neue Partition unter /dev/sdb befindet.
\listBash
\begin{lstlisting}[captionpos=b, caption=Beispiel Kopieren Partition, label=lst:bash]
root@tux>dd id=/dev/sda1 of=/dev/sdba [noerror]
\end{lstlisting}
In der Datei {\ttfamily /etc/fstab} wird die neue Partition hinzugef"ugt und mit einem Kommentarzeichen am Anfang versehen.
\listBash
\begin{lstlisting}[captionpos=b, caption=Beispiel fstab, label=lst:bash]
root@tux>grep -i "boot" /etc/fstab
/dev/disk/by-id/scsi-SATA_VBOX_HARDDISK_VB9606f499-part1 /boot reiserfs acl,user_xattr 1 2
#/dev/disk/by-id/scsi-SATA_VBOX_HARDDISK_VB1d7291b2-part1 /boot reiserfs acl,user_xattr 1 2
\end{lstlisting}
\newpage
\begin{justify}
Nun kann die alte Partition abgehangen werden. Danach in der Datei {\ttfamily /etc/fstab} das Kommentarzeichen entfernen und es an der alten Partition hinzuf"ugen.
\end{justify}
\listBash
\begin{lstlisting}[captionpos=b, caption=Beispiel Umount /boot, label=lst:bash]
root@tux>umount /boot
root@tux>grep -i "boot" /etc/fstab
#/dev/disk/by-id/scsi-SATA_VBOX_HARDDISK_VB9606f499-part1 /boot reiserfs acl,user_xattr 1 2
/dev/disk/by-id/scsi-SATA_VBOX_HARDDISK_VB1d7291b2-part1 /boot reiserfs acl,user_xattr 1 2
\end{lstlisting}
Nun kann die neue Partition angehangen werden.
\listBash
\begin{lstlisting}[captionpos=b, caption=Beispiel Mount /boot, label=lst:bash]
root@tux>mount /boot
\end{lstlisting}
Als letztes muss f"ur die neue Platte die Option {\ttfamily bootable} aktiviert werden. F"ur die alte Platte muss diese Option nat"urlich deaktiviert werden.
\listBash
\begin{lstlisting}[captionpos=b, caption=Beispiel Bootable, label=lst:bash]
root@tux>cfdisk /dev/sdb
root@tux>cfdisk /dev/sda
\end{lstlisting}
\end{justify}

View File

@ -0,0 +1,14 @@
\section{Dateisystem konvertieren}
\subsection{EXT2 nach EXT3}
\begin{justify}
Um ein vorhandenes {\ttfamily EXT2} Dateisystem nach {\ttfamily EXT3} zu konvertieren, so f"uhrt man den Befehl {\ttfamily tune2fs} mit der Option {\ttfamily -j} aus. Nach einem Neustart steht das neue Dateisystem zu Verf"ugung.
\listBash
\begin{lstlisting}[captionpos=b, caption=Beispiel EXT2 nach EXT3, label=lst:bash]
uws@tux>tune2fs -j /dev/sda2
\end{lstlisting}
Ein Vorhandenes {\ttfamily EXT3} Dateisystem l"ast sich auch nach {\ttfamily EXT2} konvertieren. Auch hier steht das neue Dateisystem nach einem Neustart zu Verf"ugung.
\listBash
\begin{lstlisting}[captionpos=b, caption=Beispiel EXT3 nach EXT2, label=lst:bash]
root@tux>tune2fs -f -O ^has_journal /dev/sda2
\end{lstlisting}
\end{justify}

View File

@ -0,0 +1,23 @@
\section{Festplatte sicher l"oschen}
\begin{justify}
Soll eine Festplatte sicher gel"oscht werden, so kann man sie mit Nullen "uberschreiben. Die Angabe des Parameters {\ttfamily conv} ist optional. Mit diesem Parameter wird angegeben, das mit dem "uberschreiben weiter gemacht werden soll, wenn Festplatten Fehler vorliegen.
\listBash
\begin{lstlisting}[captionpos=b, caption=Mit Nullen "uberschreiben, label=lst:bash]
uws@tux>dd if=/dev/zero of=/dev/sdf bs=1MB conv=noerror
\end{lstlisting}
Soll die Festplatte mit Zufallszahlen "uberschrieben werden, so wird {\ttfamily urandom} anstelle von {\ttfamily zero} genommen. Dieses "uberschreiben kann bei einer 3TB Platte schon eine Woche dauern, da die Geschwindigkeit nur 10-20Mbytes/s ist.
\listBash
\begin{lstlisting}[captionpos=b, caption=Zufallszahlen, label=lst:bash]
uws@tux>dd if=/dev/urandom of=/dev/sdf bs=1MB conv=noerror
\end{lstlisting}
Schneller geht das "uberschreiben mit {\ttfamily openssl}. Dieses dauert bei einer 3TB Platte ca. 5 Stunden. {\ttfamily Urandom} erzeugt ein zuf"alliges Passwort und {\ttfamily openssl} erzeugt den Zufallsstrom durch AES-Verschl"usselung. (Aus der C'T 2/2016 S.161)
\listBash
\begin{lstlisting}[captionpos=b, caption=Openssl, label=lst:bash]
uws@tux>openssl enc -qes-256-ctr -pass pass:"$(dd if=/dev/urandom bs=128 count=1 2>/dev/null|base64)" -nosalt </dev/zero >/dev/sdf
\end{lstlisting}
Eine Festplatte kann mit dem Befehl {\ttfamily shred} mehrfach "uberschrieben werden. Die Anzahl des "uberschreibens wird mit {\ttfamily iterations} angegeben. Der Parameter {\ttfamily -v} steht f"ur {\ttfamily verbose}.
\listBash
\begin{lstlisting}[captionpos=b, caption=Shred, label=lst:bash]
uws@tux>shred --iterations=7 -v /dev/sdf
\end{lstlisting}
\end{justify}

View File

@ -0,0 +1,34 @@
\section{Festplatten / Partitionen anzeigen}
\begin{justify}
Informationen "uber Festplatten / Partitionen kann man sich mit dem Befehl {\ttfamily fdisk -l} sich anzeigen lassen. Hiermit bekommt man raus, an welchem Device ein USB Ger"at h"angt und angesprochen werden kann.
\listBash
\begin{lstlisting}[captionpos=b, caption=Beispiel Festplatten Informationen, label=lst:bash]
root@tux>fdisk -l
Festplatte /dev/sda: 232,9 GiB, 250059350016 Bytes, 488397168 Sektoren
Einheiten: Sektoren von 1 * 512 = 512 Bytes
Sektorgroesse (logisch/physikalisch): 512 Bytes / 512 Bytes
E/A-Groesse (minimal/optimal): 512 Bytes / 512 Bytes
Festplattenbezeichnungstyp: dos
Festplattenbezeichner: 0x853b391a
Gerae Boot Anfang Ende Sektoren Groesse Kn Typ
/dev/sda1 * 2048 206847 204800 100M 7 HPFS/NTFS/exFAT
/dev/sda2 206848 249648116 249441269 119G 7 HPFS/NTFS/exFAT
/dev/sda3 249649152 251418623 1769472 864M 27 Verst. NTFS WinRE
/dev/sda4 251418624 488396799 236978176 113G f W95 Erw. (LBA)
/dev/sda5 251420672 259835903 8415232 4G 82 Linux Swap / Solaris
/dev/sda6 259837952 444389375 184551424 88G 83 Linux
/dev/sda7 444391424 488396799 44005376 21G 83 Linux
Festplatte /dev/mmcblk0: 3,8 GiB, 4041211904 Bytes, 7892992 Sektoren
Einheiten: Sektoren von 1 * 512 = 512 Bytes
Sektorgroesse (logisch/physikalisch): 512 Bytes / 512 Bytes
E/A-Groesse (minimal/optimal): 512 Bytes / 512 Bytes
Festplattenbezeichnungstyp: dos
Festplattenbezeichner: 0x00000000
Geraet Boot Anfang Ende Sektoren Groesse Kn Typ
/dev/mmcblk0p1 8192 7892735 7884544 3,8G b W95 FAT32
\end{lstlisting}
\end{justify}

View File

@ -0,0 +1,8 @@
\section{Festplatten Statistic}
\begin{justify}
Mit dem Befehl {\ttfamily iostat} kann man sich den Durchsatz der Festplatten anzeigen lassen. Mit der Option {\ttfamily -N} wird der Durchsatz von LVM-Devices ausgegeben. Mit {\ttfamily -m} werden die Werte in MB und mit einer {\ttfamily Tahl} wird die Aktualisierung pro Sekunde angegeben. Gibt man die Option {\ttfamily --human} an, so werden die Werte in k, mb ausgegeben.
\listBash
\begin{lstlisting}[captionpos=b, caption=Statistic, label=lst:bash]
uws@tux>iostat -m 2
\end{lstlisting}
\end{justify}

17
Kapitel3/Festplattenplatz.tex Executable file
View File

@ -0,0 +1,17 @@
\section{Festplattenplatz}
\begin{justify}
Die Belegung des Festplattenplatzes kann man mit dem Befehl {\ttfamily df} abfragen. Die Option {\ttfamily -hT} gibt die Gr"o"se in humanable an und der Typ wird ausgegeben. Mit dem Befehl {\ttfamily du} wird die Gr"o"se des Verzeichnisses angezeigt.
\listBash
\begin{lstlisting}[captionpos=b, caption=Beispiel Festplattenplatz, label=lst:bash]
uws@tux>df -hT
Dateisystem Typ Groesse Benutzt Verf. Verw\% Eingehaengt auf
/dev/mapper/VG1 ext4 150GB 63GB 84GB 43\% /
/dev/sda1 ext4 99M 14M 85M 15\% /boot
uws@tux>du -sch
2,8M .
2,8M insgesamt
uws@tux>du -sch * --exclude='u0*' --exclude='home'
\end{lstlisting}
\end{justify}

View File

@ -0,0 +1,8 @@
\section{Filesystem Read-only Modus}
\begin{justify}
Befindet sich das Filesystem im Read-only Modus, so kann man es mit einem {\ttfamily remount} wieder in den normalen Modus versetzten.
\listBash
\begin{lstlisting}[captionpos=b, caption=Read-only Modus, label=lst:bash]
root@tux>mount -o remount /
\end{lstlisting}
\end{justify}

12
Kapitel3/FilesystemShow.tex Executable file
View File

@ -0,0 +1,12 @@
\section{Filesystem anzeigen}
\begin{justify}
M"ochte man sich das verwendete Filesystem einer Partition anzeigen lassen, so kann man das mit dem nachfolgenden Befehl machen. In dem zweiten Beispiel wird das Filesystem einer LVM-Partition ausgegeben.
\listBash
\begin{lstlisting}[captionpos=b, caption=Beispiel Filesystem Info, label=lst:bash]
uws@tux>file -s /dev/sdc1
/dev/sdc1: Linux rev 1.0 ext3 filesystem data, UUID=67...
uws@tux>file -s /dev/dm-1
/dev/dm-1: ReiserFS V3.6
\end{lstlisting}
\end{justify}

35
Kapitel3/Formatieren.tex Executable file
View File

@ -0,0 +1,35 @@
\section{Formatieren}
\begin{justify}
Eine Partition kann man mit einem Dateisystem formatieren. Unter Linux gibt es hierzu eine vielzahl an Datei Systemen. Eine Partition wird dann mit {\ttfamily mkfs} formatiert. Vorher ermittelt man das richtige Device mit {\ttfamily fdisk -l}.
\listBash
\begin{lstlisting}[captionpos=b, caption=Formatieren]
uws@tux>sudo fdisk -l
Festplatte /dev/sdd: 3,7 GiB, 3933208576 Bytes, 7682048 Sektoren
Disk model: STORAGE DEVICE
Einheiten: Sektoren von 1 * 512 = 512 Bytes
Sektorgroesse (logisch/physikalisch): 512 Bytes / 512 Bytes
E/A-Groesse (minimal/optimal): 512 Bytes / 512 Bytes
Festplattenbezeichnungstyp: dos
Festplattenbezeichner: 0x00000000
Geraet Boot Anfang Ende Sektoren Groesse Kn Typ
/dev/sdd1 14476 7698571 7684096 3,7G b W95 FAT32
uws@tux>mkfs.ext3 /dev/sdd1
\end{lstlisting}
Hier ist eine Auswahl an Dateisystemen, die man mit {\ttfamily mkfs} formatieren kann.
\begin{itemize}
\item brtfs
\item exfat
\item ext2/3/4
\item f2fs
\item fat
\item jfs
\item msdos
\item ntfs
\item reiserfs
\item vfat
\item xfs
\end{itemize}
\end{justify}

23
Kapitel3/Hdparm.tex Executable file
View File

@ -0,0 +1,23 @@
\section{Hdparm}
\begin{justify}
Mit {\ttfamily hdparm} kann man sich Informationen der Festplatten sich anzeigen lassen.
\subsection{Festplatte Speed Test}
\listBash
\begin{lstlisting}[captionpos=b, caption=Beispiel Speed Test, label=lst:bash]
uws@tux>hdparm -t /dev/sda
/dev/sda:
Timing buffered disk reads: 1542 MB in 3.00 seconds = 513.64 MB/sec
\end{lstlisting}
%-------------------------------------------------------------------------------
% Section: Power Management
%-------------------------------------------------------------------------------
\subsection{Power Management}
Die Abfrage des Power Management der Festplatte kann man auch mit {\ttfamily hdparm} sich anzeigen lassen. Gibt es als R"uckgabewert {\ttfamily 128} oder {\ttfamily 254}, so werden die K"opfe oft in die Parkposition gefahren. Mit dem Wert {\ttfamily 255} schaltet man dieses Verhalten ab. Gilt nicht f"ur SSD-Platten.
\listBash
\begin{lstlisting}[captionpos=b, caption=Beispiel Power Management, label=lst:bash]
uws@tux>hdparm -I /dev/sdb | grep -i "Advanced power management"
root@tux>hdparm -B 255 /dev/sdb
\end{lstlisting}
Damit dieses auch nach einem Neustart des Rechners gemacht wird, so wird der Befehl in der Datei {\ttfamily /etc/rc.local} eingetragen.
\end{justify}

179
Kapitel3/ISCSI.tex Normal file
View File

@ -0,0 +1,179 @@
\section{ISCSI}
\subsection{Installation}
\begin{justify}
Für das erstellen und verwalten von ISCSI-Verbindungen wir das Programm open-iscsi installiert.
\listBash
\begin{lstlisting}[captionpos=b, caption=Installation]
uws@tux># Arch linux
uws@tux>sudo pacman -S open-iscsi
uws@tux># OpenSusE
uws@tux>sudo zypper se open-iscsi
\end{lstlisting}
Nach de Installation der Software wird der Service gestartet.
\listBash
\begin{lstlisting}[captionpos=b, caption=Start Service]
uws@tux>sudo systemctl start iscsid
uws@tux>sudo systemctl enable iscsid
\end{lstlisting}
%-------------------------------------------------------------------------------
% Subsection: Konfiguration
%-------------------------------------------------------------------------------
\subsection{Konfiguration}
In der Datei {\ttfamily /etc/iscsi/iscsid.conf} wird der Dienst konfiguriert. Sollen die Targets beim Starten des Computers verbunden werden, so stellt man den Parameter {\ttfamily node.startup} auf automatic.
\listBash
\begin{lstlisting}[captionpos=b, caption=iscsid.conf]
# To request that the iscsi service scripts startup a session, use "automatic"
node.startup = automatic
# Parameter von No auf Yes stellen.
node.leading_login = Yes
\end{lstlisting}
%-------------------------------------------------------------------------------
% Subsection: Anzeige Targets
%-------------------------------------------------------------------------------
\subsection{Anzeige Targets}
Mit dem Kommandozeilen Befehl {\ttfamily iscsiadm} kann man sich die Targets von einem ISCSI-Server anzeigen lassen.
\listBash
\begin{lstlisting}[captionpos=b, caption=List Target]
uws@tux>sudo iscsiadm -m discovery -t sendtargets -p 192.168.70.231:3260
192.168.70.231:3260,1 iqn.2004-04.com.qnap:ts-453a:iscsi.vmstore1.f958d1
10.0.3.1:3260,1 iqn.2004-04.com.qnap:ts-453a:iscsi.vmstore1.f958d1
10.0.7.1:3260,1 iqn.2004-04.com.qnap:ts-453a:iscsi.vmstore1.f958d1
192.168.70.231:3260,1 iqn.2004-04.com.qnap:ts-453a:iscsi.oracle.f958d1
10.0.3.1:3260,1 iqn.2004-04.com.qnap:ts-453a:iscsi.oracle.f958d1
10.0.7.1:3260,1 iqn.2004-04.com.qnap:ts-453a:iscsi.oracle.f958d1
\end{lstlisting}
%-------------------------------------------------------------------------------
% Subsection: Anzeige Nodes
%-------------------------------------------------------------------------------
\subsection{Anzeige Nodes}
Nach dem Scannen der Targets von einem ISCSI-Server sind sie in der lokalen Maschine bekannt. Diese kann man sich anzeigen lassen.
\listBash
\begin{lstlisting}[captionpos=b, caption=Anzeige Nodes]
uws@tux>sudo iscsiadm -m node
10.0.3.1:3260,1 iqn.2004-04.com.qnap:ts-453a:iscsi.oracle.f958d1
10.0.7.1:3260,1 iqn.2004-04.com.qnap:ts-453a:iscsi.oracle.f958d1
192.168.70.231:3260,1 iqn.2004-04.com.qnap:ts-453a:iscsi.oracle.f958d1
10.0.3.1:3260,1 iqn.2004-04.com.qnap:ts-453a:iscsi.vmstore1.f958d1
10.0.7.1:3260,1 iqn.2004-04.com.qnap:ts-453a:iscsi.vmstore1.f958d1
192.168.70.231:3260,1 iqn.2004-04.com.qnap:ts-453a:iscsi.vmstore1.f958d1
\end{lstlisting}
%-------------------------------------------------------------------------------
% Subsection: Löschen Nodes
%-------------------------------------------------------------------------------
\subsection{Löschen Nodes}
Nicht benötigte Nodes kann man von der lokalen Maschine löschen.
\listBash
\begin{lstlisting}[captionpos=b, caption=Löschen Nodes]
uws@tux>sudo iscsiadm -m node --op delete --targetname iqn.2004-04.com.qnap:ts-453a:iscsi.vmstore1.f958d1 -p 10.0.3.1_3260
\end{lstlisting}
%-------------------------------------------------------------------------------
% Subsection: Mount Target
%-------------------------------------------------------------------------------
\subsection{Mount Targets}
Einen ISCSI-Target kann man folgenderma\ss{}en mounten.
\listBash
\begin{lstlisting}[captionpos=b, caption=Mount Target]
uws@tux>sudo iscsiadm -m node --targetname=iqn.2004-04.com.qnap:ts-453a:iscsi.oracle.f958d1 -p 192.168.70.231:3260 --login
[sudo] Passwort für uws:
Login to [iface: default, target: iqn.2004-04.com.qnap:ts-453a:iscsi.oracle.f958d1, portal: 192.168.70.231,3260] successful.
uws@tux># Show device
uws@tux>sudo fdisk -l
Festplatte /dev/sdc: 200 GiB, 214748364800 Bytes, 419430400 Sektoren
Festplattenmodell: iSCSI Storage
Einheiten: Sektoren von 1 * 512 = 512 Bytes
Sektorgröße (logisch/physikalisch): 512 Bytes / 512 Bytes
E/A-Größe (minimal/optimal): 512 Bytes / 8388608 Bytes
Festplattenbezeichnungstyp: gpt
Festplattenbezeichner: 59033A1A-5CFF-4305-9C17-18798D1FD610
Gerät Anfang Ende Sektoren Größe Typ
/dev/sdc1 34 32767 32734 16M Microsoft reserviert
/dev/sdc2 32768 419426303 419393536 200G Microsoft Basisdaten
uws@tux># Mount target
uws@tux>mount /dev/sdc2 /run/media/lun
\end{lstlisting}
%-------------------------------------------------------------------------------
% Subsection: Aktive Session
%-------------------------------------------------------------------------------
\subsection{Active Sessions}
Welche Sessions aktiv sind, kann man sich mit {\ttfamily \verb|--|mode session} sich anzeigen lassen.
\listBash
\begin{lstlisting}[captionpos=b, caption=Aktive Sessions]
uws@tux>sudo iscsiadm --mode session
tcp: [1] 192.168.70.231:3260,1 iqn.2004-04.com.qnap:ts-453a:iscsi.oracle.f958d1 (non-flash)
\end{lstlisting}
\newpage
%-------------------------------------------------------------------------------
% Subsection: Abmelden Target
%-------------------------------------------------------------------------------
\subsection{Abmelden Target}
Wird eine Verbindung nicht mehr benötigt, so kann man sich von dem Target abmelden.
\listBash
\begin{lstlisting}[captionpos=b, caption=Abmelden Tarrget]
uws@tux>sudo iscsiadm -m node -T iqn.2004-04.com.qnap:ts-453a:iscsi.oracle.f958d1 --portal 192.168.70.231:3260 -u
Logging out of session [sid: 1, target: iqn.2004-04.com.qnap:ts-453a:iscsi.oracle.f958d1, portal: 192.168.70.231,3260]
Logout of [sid: 1, target: iqn.2004-04.com.qnap:ts-453a:iscsi.oracle.f958d1, portal: 192.168.70.231,3260] successful.
\end{lstlisting}
%-------------------------------------------------------------------------------
% Subsection: SystemD mount
%-------------------------------------------------------------------------------
\subsection{SystemD mount}
Für das Mounten der ISCSI-Volumes kann man in SystemD bei dem Starten des Systems ein Script ausführen.
\listBash
\begin{lstlisting}[captionpos=b, caption=run-at-startup.service]
uws@tux>cat /etc/systemd/system/run-at-startup.service
[Unit]
Description=Run script at startup after network is up
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
RemainAfterExit=yes
ExecStart=/usr/bin/bash /daten/program/bin/MountIscsi.sh
TimeoutStartSec=0
[Install]
WantedBy=remote-fs.target
WantedBy=multi-user.target
\end{lstlisting}
Das Script MountIscsi.sh wird bei dem Starten des Systems, nachdem das Netzwerk zu Verfügung steht gestartet.
\listBash
\begin{lstlisting}[captionpos=b, caption=MountIscsi.sh]
uws@tux>cat /daten/program/bin/MountIscsi.sh
#!/usr/bin/env bash
Target1="docker"
Target2="vmstore1"
Stamp=$(date +%Y_%m_%d_%H_%M)
LogFile=/daten/var/log/mount_scsi_${Stamp}.log
printf "=> Login into SCSI-Targets\n" | tee -a ${LogFile}
iscsiadm -m node -T iqn.2004-04.com.qnap:ts-453a:iscsi.${Target1}.f958d1 -p 192.168.70.231:3260 --login
iscsiadm -m node -T iqn.2004-04.com.qnap:ts-453a:iscsi.${Target2}.f958d1 -p 192.168.70.231:3260 --login
printf "=> List active session\n" | tee -a ${LogFile}
iscsiadm -m session | tee -a ${LogFile}
sleep 10s
printf "=> Mount SCSI-Targets\n" | tee -a ${LogFile}
mount /docker/volumes
mount /vmstore
df | grep docker | tee -a ${LogFile}
df | grep vmstore | tee -a ${LogFile}
printf "================================================================================\n" | tee -a ${LogFile}
\end{lstlisting}
Die beiden ISCSI-Volumes wurden mit einem Label versehen und in der Datei /etc/fstab eingetragen.
\listBash
\begin{lstlisting}[captionpos=b, caption=fstab]
uws@tux>grep LABEL /etc/fstab
LABEL=DockerVolumes /docker/volumes ext4 defaults,_netdev,x-systemd.requires=iscsi.service 0 1
LABEL=Vmstore /vmstore ext4 defaults,_netdev,x-systemd.requires=iscsi.service 0 1
\end{lstlisting}
\end{justify}

30
Kapitel3/Index.tex Executable file
View File

@ -0,0 +1,30 @@
\chapter{Dateisystem}
%-------------------------------------------
% load other documents
%------------------------------------------
\input{Kapitel3/LVM}
\input{Kapitel3/Festplattenplatz}
\input{Kapitel3/DateisystemKonvertieren}
\input{Kapitel3/SMART}
\newpage
\input{Kapitel3/Wechseldatentraeger}
\input{Kapitel3/USB_Geraete}
\newpage
\input{Kapitel3/Formatieren}
\input{Kapitel3/FestplattenPartitionenShow}
\input{Kapitel3/BootPartitionClone}
\input{Kapitel3/IsoImage}
\input{Kapitel3/FilesystemShow}
\input{Kapitel3/Hdparm}
\input{Kapitel3/LoopbackDevice}
\input{Kapitel3/FestplattenStatistic}
\input{Kapitel3/FilesystemReadOnlyModus}
\input{Kapitel3/PartitonsInfo}
\include{Kapitel3/SwapSize}
\newpage
\input{Kapitel3/RAID}
\input{Kapitel3/SSHMount}
\input{Kapitel3/Badblocks}
\input{Kapitel3/FestplatteSicherLoeschen}
\input{Kapitel3/BTRFS}
\include{Kapitel3/ISCSI}

30
Kapitel3/IsoImage.tex Executable file
View File

@ -0,0 +1,30 @@
\section{Iso Image mounten}
\begin{justify}
Unter Linux ist es ganz einfach, ein Iso Image in das System einzubinden.
\listBash
\begin{lstlisting}[captionpos=b, caption=Beispiel mount Iso Image]
uws@tux>mount -o loop <path_to_iso_image> <mount_path>
\end{lstlisting}
Wenn das Image File ein Abbild einer Festplatte ist und dort mehrere Partitionen enthalten sind, so muss man als erstes den Start Sektor der Partition ermitteln. Anschlie"send kann man das Image mit einem {\ttfamily offset} mounten.
\listBash
\begin{lstlisting}[captionpos=b, caption=Beispiel mount Iso Image Partition]
uws@tux>sudo fdisk -l /image/sdb.img
Festplatte sdb.img: 465,78 GiB, 500107862016 Bytes, 976773168 Sektoren
Einheiten: Sektoren von 1 * 512 = 512 Bytes
Sektorgroesse (logisch/physikalisch): 512 Bytes / 512 Bytes
E/A-Groesse (minimal/optimal): 512 Bytes / 512 Bytes
Festplattenbezeichnungstyp: dos
Festplattenbezeichner: 0x2da52da4
Geraet Boot Anfang Ende Sektoren Groesse Kn Typ
ltgoxxx.img1 2048 24578047 24576000 11,7G 27 Verst. NTFS WinRE
ltgoxxx.img2 * 24578048 24782847 204800 100M 7 HPFS/NTFS/exFAT
ltgoxxx.img3 24782848 507141264 482358417 230G 7 HPFS/NTFS/exFAT
ltgoxxx.img4 507142144 976773119 469630976 224G f W95 Erw. (LBA)
ltgoxxx.img5 507144192 511365119 4220928 2G 82 Linux Swap / Solaris
ltgoxxx.img6 511367168 846915583 335548416 160G 83 Linux
ltgoxxx.img7 846917632 976773119 129855488 61,9G 83 Linux
uws@tux>mount -t auto -o loop,offsett=$((24782848*512)) /image/sdb.img /mnt/sdb4
\end{lstlisting}
\end{justify}

25
Kapitel3/LVM.tex Executable file
View File

@ -0,0 +1,25 @@
\section{Logical Volume (LVM) Informationen}
\begin{justify}
Anzeige der Physical Volumes Informationen.
\listBash
\begin{lstlisting}[captionpos=b, caption=Beispiel Physical Volume, label=lst:bash]
uws@tux>pvscan
uws@tux>pvdisplay /dev/sdb
\end{lstlisting}
Anzeige der Volume Group Informationen.
\listBash
\begin{lstlisting}[captionpos=b, caption=Beispiel Volume Group, label=lst:bash]
uws@tux>vgscan
uws@tux>vgdisplay /dev/volg1
\end{lstlisting}
Anzeige der Logical Volume Information.
\listBash
\begin{lstlisting}[captionpos=b, caption=Beispiel Logical Volume, label=lst:bash]
uws@tux>lvscan
uws@tux>lvdisplay /dev/volg1/system
\end{lstlisting}
Mehr zu diesem Thema gibt es in der separaten Dokumentation {\ttfamily Logical Volume Manager}.
\end{justify}

46
Kapitel3/LoopbackDevice.tex Executable file
View File

@ -0,0 +1,46 @@
\section{Loopback-Device}
\begin{justify}
Unter Linux kann man ein Loopback-Device (Container) erstellen, das dann in das System gemounted werden kann. Hierzu wird eine Container Datei erstellt und dann mit dem Loopback-Device verbunden. Die Gr"o"senangabe der Datei erfolgt in {\ttfamily kb}. Gibt es im Verzeichnis {\ttfamily /dev} keine {\ttfamily loop*} Eintr"age, so wird {\ttfamily losetup -f} einmal ausgef"uhrt.
\listBash
\begin{lstlisting}[captionpos=b, caption=Create Container, label=lst:bash]
root@tux> mkdir /container
root@tux>dd if=/dev/zero of=/container/lda bs=1024 count=102400
102400+0 Datensaetze ein
102400+0 Datensaetze aus
104857600 Bytes (105 MB) kopiert, 0,643267 s, 163 MB/s
root@tux>losetup -f # create /dev/loop*, when noct exist
root@tux>losetup /dev/loop1 /container/lda
\end{lstlisting}
Nun kann das Loopback-Device formatiert werden.
\listBash
\begin{lstlisting}[captionpos=b, caption=Formatieren, label=lst:bash]
root@tux>mkfs.ext4 /dev/loop1
root@tux>mkdir -p /media/container
root@tux>mount /dev/loop1 /media/container
\end{lstlisting}
Das L"oschen des Loopback-Devices wird mit der Option {\ttfamily -d} vorgenommen.
\listBash
\begin{lstlisting}[captionpos=b, caption=L"oschen Loopback-Device, label=lst:bash]
root@tux>umount /media/container
root@tux>losetup -d /dev/loop1
\end{lstlisting}
Damit das Loopback-Device bei einem Neustart des Systems automatisch gemounted wird, so ist in der Datei {\ttfamily /etc/fstab} folgendes hinzugef"ugt.
\listBash
\begin{lstlisting}[captionpos=b, caption=/etc/fstab, label=lst:bash]
root@tux>grep -i "loop1" /etc/fstab
/dev/loop1 /media/container ext4 defaults,loop 0 0
\end{lstlisting}
Verbundene Loopback-Devices kann man sich mit der Option {\ttfamily -l} anzeigen lassen.
\listBash
\begin{lstlisting}[captionpos=b, caption=Show Loopback-Device, label=lst:bash]
root@tux>losetup -l
NAME SIZELIMIT OFFSET AUTOCLEAR RO BACK-FILE
/dev/loop1 0 0 0 0 /container/lda
\end{lstlisting}
\end{justify}

19
Kapitel3/PartitonsInfo.tex Executable file
View File

@ -0,0 +1,19 @@
\section{Partitions Informationen}
\subsection{Tune2fs}
\begin{justify}
Informationen "uber EXT-Partitionen kann man sich mit {\ttfamily tune2fs} sich anzeigen lassen. {\ttfamily Tune2fs} kann nur f"ur die Dateisysteme {\ttfamily ext2,3,4} benutzt werden.
\listBash
\begin{lstlisting}[captionpos=b, caption=Beispiel tune2fs, label=lst:bash]
root@tux>tune2fs -l /dev/sda1
tune2fs 1.44.3 (10-July-2018)
Filesystem volume name: <none>
Last mounted on: /
Filesystem UUID: 24e303ee-9611-4479-81be-c418134dd3cf
Filesystem magic number: 0xEF53
Filesystem revision #: 1 (dynamic)
.
.
.
\end{lstlisting}
F"ur Loopback Devices wird {\ttfamily /dev/loop0} und f"ur ein Software Raid ein {\ttfamily /dev/md0} eingesetzt.
\end{justify}

297
Kapitel3/RAID.tex Executable file
View File

@ -0,0 +1,297 @@
\section{Software RAID}
\subsection{Allgemein}
\begin{justify}
Unter Linux kann man ein Software Raid erstellen. Hierzu gibt es das Programm {\ttfamily mdadm}. F"ur das Raid kann man Festplatten, Partitionen oder auch Loopback Devices nehmen. Die Konfigurationsdatei mdadm.conf befindet sich im Verzeichnis /etc/mdadm.\\
Mit {\ttfamily mdadm} kann man folgende Raids erstellen.
\begin{table}[ht]
\begin{tabular}{p{2cm}p{14cm}} % l => Text left, c => center, r => right, p => zeilenumbruch
\rowcolor{hellgrau}\emph{\textbf{Raid Level}} & \emph{\textbf{Beschreibung}}\\
\hline
\hline
Linear & Mehrere Partitionen aneinander h"angen\\
Multipath & Ein Mapping einer Datei auf zwei verschiedenen Pfade auf der leichen Partition\\
Fauly & Emuliert ein fehlerhaftes RAID f"ur Testf"alle\\
0 & Stripping, mehrere Platten werden zu einer gro"sen zusammen gef"ugt\\
1 & Spiegelung einer Platte\\
4 & Wie Raid 0, aber mit einer zus"atzlichen Platte f"ur Parit"atsbits\\
5 & Mindestens 3 Platten werden zusammen gef"ugt und die Parit"atsbits werden auf alle Platten verteilt\\
6 & Wie Raid 5, nur das zwei unabh"angige Parit"atsbits geschrieben werden\\
10 & Kombination von Raid 0 und Raid 1\\
\end{tabular}
\caption{Raid Levels}
\end{table}
\begin{justify}
Eine Auswahl der Optionen wird in der nachfolgenden Tabelle aufgelistet. Eine vollst"andige Liste incl. der Beschreibung kann man in der Manpage nachlesen.
\end{justify}
\begin{table}[ht]
\begin{tabular}{p{3cm}p{13cm}} % l => Text left, c => center, r => right, p => zeilenumbruch
\rowcolor{hellgrau}\emph{\textbf{Option}} & \emph{\textbf{Beschreibung}}\\
\hline
\hline
--add & F"ugt dem Raid eine Platte / Partition hinzu\\
--backup-file & Erstellt ein Backup File f"ur eine Raid Erweiterung\\
--detail & Array Details ausgeben\\
--fail & Status des Raids "andern\\
--force & Die Ausf"uhrung erzwingen\\
--help & Anzeige des Hilfe Textes\\
--level= & Raid Type\\
--query & "Uberpr"ufen, ob das Device ein MD-Device oder zu einem Raid geh"ort\\
--raid-device & Setzen der Anzahl der Platten in dem Raid\\
--remove & L"oschen einer Platte / Partition aus dem Raid\\
--stop & Anhalten / Beenden des Raids\\
--spare-disk & Angabe der Spare Platte\\
--test & Die angegebenen Optionen testen\\
--uuid= & Die UUID des Raids\\
--verbose & Erweiterte Informationen ausgeben, kann 2 mal gesetzt werden\\
--zero-superblock & L"oschen des Raid Superblocks\\
\end{tabular}
\caption{Optionen}
\end{table}
\newpage
%-------------------------------------------------------------------------------
% Section: Erstellen
%-------------------------------------------------------------------------------
\subsection{Raid Erstellen}
Damit wir das Erstellen von einem Raid System f"ur dieses Beispiel machen k"onnen, erstellen wir erstmal 4 Container mit einer Gr"o"se von 500MB und erstellen dann die Loopback Devices.
\listBash
\begin{lstlisting}[captionpos=b, caption=Create Loopback Device, label=lst:bash]
uws@tux>for a in 1 2 3 4; do dd if=/dev/zero of=/container/ld$a bs=1024 count=512000;done
512000+0 records in
512000+0 records out
524288000 bytes (524 MB) copied, 1.39163 s, 377 MB/s
512000+0 records in
512000+0 records out
524288000 bytes (524 MB) copied, 2.11694 s, 248 MB/s
512000+0 records in
512000+0 records out
524288000 bytes (524 MB) copied, 2.10103 s, 250 MB/s
512000+0 records in
512000+0 records out
524288000 bytes (524 MB) copied, 2.34669 s, 223 MB/s
uws@tux>losetup -f # Wenn /dev/loop* nicht vorhanden
root@tux>for a in 1 2 3 4; do losetup /dev/loop\$a /container/ld$a; done
\end{lstlisting}
Nun k"onnen wir Raid Systeme erstellen. Als erstes erstellen wir ein {\ttfamily Raid 0} System.
\listBash
\begin{lstlisting}[captionpos=b, caption=Create Raid 0, label=lst:bash]
root@tux>mdadm --create /dev/md/md0 --level=0 --raid-devices=2 /dev/loop1 /dev/loop2
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md/md0 started.
\end{lstlisting}
Ein Raid System mit einer fehlende Platte, die sp"ater hinzugef"ugt werden kann, wird folgenderma"sen erstellt.
\listBash
\begin{lstlisting}[captionpos=b, caption=Create Raid 1, label=lst:bash]
root@tux>mdadm --create /dev/md/md0 --level=1 --raid-devices=2 /dev/loop1 missing
mdadm: Note: this array has metadata at the start and
may not be suitable as a boot device. If you plan to
store '/boot' on this device please ensure that
your boot-loader understands ms/v1.x metadata, or use
--metadada=0.90
Continue creating arry? y
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md/md0 started.
root@tux># Fehlende Platte hinzufuegen
root@tux>mdadm --manage /dev/md/md0 --add /dev/loop2
mdadm: added /dev/loop2
\end{lstlisting}
Ein {\ttfamily Raid 5} System mit einer Spare Platte erstellt man folgenderma"sen.
\listBash
\begin{lstlisting}[captionpos=b, caption=Create Raid 5, label=lst:bash]
root@tux>mdadm --create /dev/md/md1 --level=5 --raid-devices=3 /dev/loop1 /dev/loop2 /dev/loop3 --spare-devices=1 /dev/loop4
\end{lstlisting}
Einem vorhandenen Raid System kann man nachtr"aglich auch eine {\ttfamily Spare} Platte hinzuf"ugen. Durch das Hinzuf"ugen einer weiteren Platte / Device, wird diese automatisch als {\ttfamily Spare} eingebunden.
\listBash
\begin{lstlisting}[captionpos=b, caption=Add Spare, label=lst:bash]
root@tux>mdadm --manage /dev/md/md0 --add /dev/loop3
\end{lstlisting}
%-------------------------------------------------------------------------------
% Section: Raid anzeigen
%-------------------------------------------------------------------------------
\subsection{Raid anzeigen}
Ein erstelltes Raid System kann man mit {\ttfamily mdadm -\hspace{0.05cm}-detail} sich anzeigen lassen.
\listBash
\begin{lstlisting}[captionpos=b, caption=Show Raid Info]
root@tux>mdadm --detail /dev/md/md0
Version: 1.2
Creation Time: Tue Oct 28 14:12:36 2014
Raid Level: raid1
Array Size: 511680 (499.77 MiB 523,96 MB)
Used Dev Size: 511680 (499.77 MiB 523,96 MB)
Raid Devices: 2
Total Devices: 3
Persistence: Superblock is persistent
Update Time: Tue Oct 28 14:12:36 2014
State: clean
Active Devices: 2
Working Devices: 3
Failed Devices: 0
Spare Devices: 1
Name: tux:md0 (local to host tux)
UUID: 9dc2cd57:64bf443e:86eea668:95ceb8ad)
Events: 17
Number Major Minor RaidDevice State
0 7 1 0 active sync /dev/loop1
1 7 2 1 active sync /dev/loop2
2 7 3 - spare /dev/loop1
\end{lstlisting}
Folgende Raid Zust"ande gibt es.
\begin{table}[ht]
\begin{tabular}{p{2cm}p{14cm}} % l => Text left, c => center, r => right, p => zeilenumbruch
\rowcolor{hellgrau}\emph{\textbf{Zustand}} & \emph{\textbf{Beschreibung}}\\
\hline
\hline
Clean & Normalzustand, es liegen keine Fehler vor.\\
Degrated & Ein Ausfall liegt vor, eine oder mehrere Platten sind defekt.\\
Resync & Die Sicherungsinformationen werden gepr"uft und ggf. neu erstellt.\\
Rebuild & Die Daten werden wieder hergetellt.\\
\end{tabular}
\caption{Raid Zust"ande}
\end{table}
Mit {\ttfamily examine und scan} zeigt den erkannten Array an.
\listBash
\begin{lstlisting}[captionpos=b, caption=Raid ermiiteln]
root@tux>mdadm --examine --scan
ARRAY /dev/md/Datastore metadata=1.2 UUID=8c08f95f:a4a0da14:d1386b30:eeaa6de4 name=fsgo220:Datastore
\end{lstlisting}
%-------------------------------------------------------------------------------
% Section: Raid loeschen
%-------------------------------------------------------------------------------
\subsection{Raid l"oschen}
Bevor ein Raid gel"oscht werden kann, muss das Raid angehalten werden. Danach muss von jeder Platte / Device der {\ttfamily superblock} enfernt werden, die die Platte / Device als Raid-Device festlegt. Das Entfernen des Superblocks muss f"ur jede Platte / Device gemacht werden, die dem Raid zugeordnet war.
\listBash
\begin{lstlisting}[captionpos=b, caption=Raid l"oschen, label=lst:bash]
root@tux>mdadm stop /dev/md/md0
mdadm: stopped /dev/md/md0
root@tux>mdadm --zero-superblock /dev/loop1
root@tux>mdadm --zero-superblock /dev/loop2
root@tux>mdadm --remove /dev/md/md0
\end{lstlisting}
\newpage
%-------------------------------------------------------------------------------
% Section: Platte entfernen
%-------------------------------------------------------------------------------
\subsection{Platte entfernen}
Ist eine Platte in dem Raid Verbund defekt, so muss sie mit {\ttfamily -\hspace{0.005cm}-remove} aus dem Raid Verbund entfernt werden.
\listBash
\begin{lstlisting}[captionpos=b, caption=Platte entfernen, label=lst:bash]
root@tux>mdadm --mange /dev/md/md0 --remove /dev/loop3
mdadm: hot removed /dev/loop3 from /dev/md/md0
\end{lstlisting}
Nach dem Entfernen der defekten Platte und dem hinzuf"ugen einer neuen, so wird das Raid System wieder hergestellt. Den Fortschritt des Rebuilds kann man sich anzeigen lassen.
\listBash
\begin{lstlisting}[captionpos=b, caption=Platte hinzuf"ugen, label=lst:bash]
root@tux>mdadm --mange /dev/md/md0 --add /dev/loop4
mdadm: added /dev/loop4
root@tux>watch -n 1 cat /proc/mdstat
\end{lstlisting}
%-------------------------------------------------------------------------------
% Section: Platte entfernen
%-------------------------------------------------------------------------------
\subsection{Dateisysten}
Das Raid System kann man einfach formatieren.
\listBash
\begin{lstlisting}[captionpos=b, caption=Formatieren ext4, label=lst:bash]
root@tux>mkfs -t ext4 /dev/md/md0 # oder mkfs.ext4
root@tux>mount /dev/md/mdo /media/data
\end{lstlisting}
Wurde ein Raid 0,5,6 oder 10 erstellt, so sollte das Dateisystem f"ur dieses Raid angepasst werden. Als erstes m"ussen die {\ttfamily Chunk Size} des Raid Systems ermittelt werden.
\listBash
\begin{lstlisting}[captionpos=b, caption=Formatieren Raid 5, label=lst:bash]
uws@tux>mdadm -D /dev/md/md0 | grep -i "Chunk Size"
Chunk Size: 512K
\end{lstlisting}
Nun k"onnen wir die Parameter per Hand ermitteln.
\begin{table}[ht]
\begin{tabular}{lp{14cm}} % l => Text left, c => center, r => right, p => zeilenumbruch
{\ttfamily block-size} & Die Gr"o"se der Dateisystembl"ocke in Bytes, heute sind es 4096 Byte (4 Kib)\\
{\ttfamily stride-size} & Die Chunk Size wird durch die {\ttfamily block-size} geteilt (512Kib/4Kib = 128)\\
{\ttfamily stride-width} & Hier wird die {\ttfamily stride-size} mal der effektiven Partition genommen. Bei einem Raid5 System mit 4 Platten (128*3=384)\\
\end{tabular}
\end{table}
\listBash
\begin{lstlisting}[captionpos=b, caption=Formatieren Raid 5, label=lst:bash]
root@tux>mkfs.ext4 -b 4096 -E stride=128,stripe-width=384 /dev/md/md0
\end{lstlisting}
%-------------------------------------------------------------------------------
% Section: Raid erweitern
%-------------------------------------------------------------------------------
\subsection{Raid erweitern}
In dem ersten Beispiel wird einem Raid eine Platte hinzugef"ugt. Danach k"onnen wir es mit {\ttfamily grow} erweitern. Vorher wurde ein Raid 5 System mit 3 Devices erstellt.
\listBash
\begin{lstlisting}[captionpos=b, caption=Raid erweitern, label=lst:bash]
root@tux>mdadm --manage /dev/md/md0 --add /dev/loop4
mdadm: added /dev/loop4
root@tux>mdadm --grow --raid-devices=4 /dev/md/md0 --backup-file=/tmp/md0.bck
mdadm: Need to backup 3072k of critical section..
\end{lstlisting}
Sollte das System bei der Erweiterung abst"urzen, so kann es mit dem Backup File fortgesetzt werden.
\listBash
\begin{lstlisting}[captionpos=b, caption=Raid Absturz, label=lst:bash]
root@tux>mdadm --manage /dev/md/md0 --continue --backup-file=/tmp/md0.bck
\end{lstlisting}
Zum Abschluss muss noch das Dateisystem erweitert werden.
\listBash
\begin{lstlisting}[captionpos=b, caption=Dateisystem erweitern, label=lst:bash]
root@tux>umount /data # oder /dev/md/md0
root@tux>fsck.ext4 -f /dev/md/md0
root@tux>resize2fs /dev/md/md0
root@tux>mount /data
\end{lstlisting}
%-------------------------------------------------------------------------------
% Section: Array wiederherstellen
%-------------------------------------------------------------------------------
\subsection{Array wiederherstellen}
Ist das Raid nicht mehr funktionst"uchtig, weil zwei Platten aus einem Raid 5 System ausgestiegen sind, verwendet man die ersten Platten, um das Raid zu aktivieren. Danch kann man die ausgestiegenen Platten hinzuf"ugen. Dieser Vorgehen wird auch f"ur ein Raid gebraucht, wenn es aus Loop Devices besteht.
\listBash
\begin{lstlisting}[captionpos=b, caption=Raid wiederherstellen, label=lst:bash]
root@tux>mdadm --stop /dev/md/md0
root@tux>mdadm --assemble /dev/md/md0 /dev/loop1 /dev/loop2 --force
root@tux>mdadm --re-add /dev/md/md0 /dev/loop3 /dev/loop4
\end{lstlisting}
%-------------------------------------------------------------------------------
% Section: Konfiguration sichern
%-------------------------------------------------------------------------------
\subsection{Konfiguration sichern}
Die Konfiguration des Raid Systems kann man auf zwei Arten sichern.
\listBash
\begin{lstlisting}[captionpos=b, caption=Konfiguration sichern, label=lst:bash]
root@tux>mdadm --detail --scan > /etc/mdadm.conf
root@tux>mdadm --detail --brief /dev/md0 > /etc/mdadm.conf
\end{lstlisting}
Eine Vollst"andige Sicherung wird ohne die Parameter {\ttfamily scan / brief} durchgef"uhrt.
\listBash
\begin{lstlisting}[captionpos=b, caption=Vollst"andige Sicherung, label=lst:bash]
root@tux>mdadm --detail /dev/md0 >> /etc/mdadm_full.conf
\end{lstlisting}
%-------------------------------------------------------------------------------
% Section: Tuning Resync / Rebuild
%-------------------------------------------------------------------------------
\subsection{Tuning Resync / Rebuild}
War eine Festplatte defekt und wurde eine neue Platte in das Raid System eingebunden, so findet dann ein {\ttfamily Resync / Rebuild} statt. Dieses kann man beschleunigen, in dem man in der Datei {\ttfamily speed\_limit\_min} einen neuen Wert setzt. Der Standard Wert ist 1000. In der Datei {\ttfamily speed\_limit\_max} steht die maximale Geschwindigkeit drin. Meistens ist sie auf 200MiB/s gesetzt. Nach einem Nneustart des Systems werden die Standardwerte wieder hergestellt.
\listBash
\begin{lstlisting}[captionpos=b, caption=Tunig Rebuild, label=lst:bash]
root@tux>echo 200000 > /proc/sys/dev/raid/speed_limit_min
\end{lstlisting}
Um den Fortschritt des Rebuilds nach dem Einbau einer neuen Festplatte sich anzeigen zu lassen, wird die Datei {\ttfamily /proc/mdstat} ausgelesen.
\listBash
\begin{lstlisting}[captionpos=b, caption=Status Rebuild]
root@tux>cat /proc/mdstat | grep recovery
[=>..........] recovery = 9.5% (187339328/1951945600) finish=957.6min speed=30710K/sec
\end{lstlisting}
\end{justify}

95
Kapitel3/SMART.tex Executable file
View File

@ -0,0 +1,95 @@
\section{Festplatten "uberwachen (SMART)}
\subsection{Allgemein}
\begin{justify}
Moderne Festplatten sind mit der {\ttfamily SMART} Technologie ausgestattet. Die Informationen kan man unter Linux mit dem Programm {\ttfamily smartctl} abrufen. F"ur die "Uberwachung der {\ttfamily SMART-Festplatten} ist der {\ttfamily smartctld} Daemon zust"andig.
%-------------------------------------------------------------------------------.
% Subsection: Informationen
%--------------------------------------------------------------------------------
\subsection{Informationen}
Informationen über einen Datenträger kann man sich mit den nachfolgenden Beispielen abfragen.
\listBash
\begin{lstlisting}[captionpos=b, caption=Beispiel smartctl]
uws@tux>sudo smartctl -i /dev/sda
smartctl 6.6 2017-11-05 r4594 [x86\_64-linux-4.12.14-lp150.12.4-default] (SUSE RPM)
Copyright (C) 2002-17, Bruce Allen, Christian Franke, www.smartmontools.org
=== START OF INFORMATION SECTION ===
Model Family: Samsung based SSDs
Device Model: Samsung SSD 750 EVO 250GB
Serial Number: S33SNWAH581202D
LU WWN Device Id: 5 002538 d701c5ba6
Firmware Version: MAT01B6Q
User Capacity: 250.059.350.016 bytes [250 GB]
Sector Size: 512 bytes logical/physical
Rotation Rate: Solid State Device
Form Factor: 2.5 inches
Device is: In smartctl database [for details use: -P show]
ATA Version is: ACS-2, ATA8-ACS T13/1699-D revision 4c
SATA Version is: SATA 3.1, 6.0 Gb/s (current: 6.0 Gb/s)
Local Time is: Wed Jul 25 17:49:47 2018 CEST
SMART support is: Available - device has SMART capability.
SMART support is: Enabled
uws@tux>sudo smartctl -ia /dev/sda # Ausgabe aller Informationen
uws@tux>sudo smartctl -H /dev/sda
smartctl 6.6 2017-11-05 r4594 [x86\_64-linux-4.12.14-lp150.12.4-default] (SUSE RPM)
Copyright (C) 2002-17, Bruce Allen, Christian Franke, www.smartmontools.org
=== START OF READ SMART DATA SECTION ===
SMART overall-health self-assessment test result: PASSED
\end{lstlisting}
Die Anzahl der Parkvorg"ange der K"opfe kann man auch mit {\ttfamily smartctl} abfragen. Die Festplatten sind zwischen 300.000 bis 600.000 Parkvorg"ange ausgelegt. Diesen Wert findet man unter der Tabelle {\ttfamily Vendor Specific SMART Attributes with Thresholds} in der Spalte {\ttfamily 193} und hat die Bezeichnung {\ttfamily Load\_Cycle\_Count}. Der Wert steht dann in der Spalte {\ttfamily RAW\_Value}. Handelt es sich um eine {\ttfamily ATA-Festplatte}, so fragt man die Informationen mit der Option {\ttfamily -d ata} ab.
\listBash
\begin{lstlisting}[captionpos=b, caption=Beispiel Parkvorg"ange]
uws@tux>sudo smartctl -a /dev/sda
uws@tux>sudo smartctl -d ata -a /dev/sda
\end{lstlisting}
%-------------------------------------------------------------------------------.
% Subsection: Selftest
%--------------------------------------------------------------------------------
\subsection{Selftest}
Um einen Status der Festplatte zu erhalten, muss vorher ein Selbsttest durchgeführt werden. Die Syntax hierzu lautet: \\
sudo smartctl -t <short|long|conveyance|select> /dev/sdc \\
Bei {\ttfamily select} kann man eine Range angeben, welche LBAs überprüft werden sollen. Das Select Statement kann auch mehrfach verwendet werden.
\listBash
\begin{lstlisting}[captionpos=b, caption=Beispiel Selftest]
uws@tux># Select Test
uws@tux>sudo smartctl -t select,10-20 -t select,30+31 /dev/sdc
uws@tux># ungefähre Zeitangabe des Selftest
uws@tux>sudo smartctl -c /dev/sdc
[...]
Short self-test routine
recommended polling time: ( 2) minutes.
Extended self-test routine
recommended polling time: ( 389) minutes.
Conveyance self-test routine
recommended polling time: ( 5) minutes.
[...]
uws@tux># Long Test
uws@tux>sudo smartctl -t long /dev/sdc
uws@tux># Anzeige nach Selftest
uws@tux>sudo smartctl -l selftest /dev/sdc
smartctl 7.3 2022-02-28 r5338 [x86_64-linux-6.1.0-23-amd64] (local build)
Copyright (C) 2002-22, Bruce Allen, Christian Franke, www.smartmontools.org
=== START OF READ SMART DATA SECTION ===
SMART Self-test log structure revision number 1
Num Test_Description Status Remaining LifeTime(hours) LBA_of_first_error
# 1 Extended offline Completed without error 00% 61894 -
\end{lstlisting}
%-------------------------------------------------------------------------------.
% Subsection: Überschreiben Bad Sectors
%--------------------------------------------------------------------------------
\subsection{Überschreiben Bad Sectors}
Werden bei dem Selftest in der Spalte LBA\verb|_|of\verb|_|first\verb|_|error ein Wert angezeigt, so kann dieser mit dem nachfolgenden Befehl überschrieben werden.
\listBash
\begin{lstlisting}[captionpos=b, caption=Bad Sectors]
uws@tux># Bad Sector z.B. bei 12345
uws@tux>sudo dd if=/dev/zero of=/dev/sdc seek=12345 count=1
\end{lstlisting}
\end{justify}

20
Kapitel3/SSHMount.tex Executable file
View File

@ -0,0 +1,20 @@
\section{SSH Mount}
\begin{justify}
Mit dem Programm {\ttfamily sshfs} kann man ein Verzeichnis von einem anderen Computer mounten. Standardm"a"sig wird der Mountpoint mit den Credentials des Users {\ttfamily root} gemounted. Mit {\ttfamily -o gid=} und {\ttfamily uid=} kann man einen anderen User angeben.
\listBash
\begin{lstlisting}[captionpos=b, caption=Mount mit ssh, label=lst:bash]
uws@tux>sshfs <user>@<server>:[pfad] <mount_point>
uws@tux>sshfs -o gid=1000,uid=1000 <user>@<server>:[pfad] <mount_point>
\end{lstlisting}
Mit {\ttfamily fusermount -u} wird der mount Point wieder entfernt.
\listBash
\begin{lstlisting}[captionpos=b, caption=Umount, label=lst:bash]
uws@tux>fusermount -u <mount_point>
\end{lstlisting}
SSH-Parameter k"onnen mit {\ttfamily SSHOPT} "ubergeben werden.
\listBash
\begin{lstlisting}[captionpos=b, caption=SSH-Parameter, label=lst:bash]
uws@tux>sshfs -o SSHOPT=
\end{lstlisting}
\end{justify}

Some files were not shown because too many files have changed in this diff Show More