First Version
0
Anhang.tex
Executable file
0
Inhaltsverzeichnis.tex
Executable file
59
Kapitel1/BashKonfiguration.tex
Executable 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}
|
56
Kapitel1/BashKonfiguration.tex.old
Executable 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
@ -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
@ -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
@ -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
@ -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
After Width: | Height: | Size: 18 KiB |
BIN
Kapitel1/Pictures/PromptZsh.png
Executable file
After Width: | Height: | Size: 19 KiB |
156
Kapitel1/Prompt.tex
Executable 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
@ -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
@ -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
@ -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
@ -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
@ -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
@ -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
@ -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
@ -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
@ -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
@ -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
@ -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
@ -0,0 +1,7 @@
|
||||
\chapter{Drucken}
|
||||
%-------------------------------------------
|
||||
% load other documents
|
||||
%------------------------------------------
|
||||
\input{Kapitel11/Cups}
|
||||
\newpage
|
||||
\input{Kapitel11/Lpr}
|
92
Kapitel11/Lpr.tex
Normal 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
@ -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
@ -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
@ -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
@ -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
@ -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
@ -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
@ -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
@ -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
@ -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
@ -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}
|
BIN
Kapitel12/Pictures/Fastfetch.jpg
Normal file
After Width: | Height: | Size: 83 KiB |
BIN
Kapitel12/Pictures/LsDeluxe.jpg
Normal file
After Width: | Height: | Size: 139 KiB |
BIN
Kapitel12/Pictures/Neofetch.jpg
Executable file
After Width: | Height: | Size: 50 KiB |
BIN
Kapitel12/Pictures/Screenfetch.jpg
Executable file
After Width: | Height: | Size: 40 KiB |
64
Kapitel12/Programme.md
Executable 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" />
|
||||
|
||||

|
||||
|
||||
## 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
@ -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
@ -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
@ -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
@ -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}
|
65
Kapitel13/2020_04_18_VirtualBox.tex
Normal 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
@ -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
@ -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
@ -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}
|
BIN
Kapitel13/Pictures/ExampleMSTSC.PNG
Normal file
After Width: | Height: | Size: 33 KiB |
62
Kapitel13/Troubleshooting.tex
Executable 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
@ -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
@ -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 VM’s 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
|
||||
```
|
||||
|
||||
|
7
Kapitel13/backup/2018_12_30/Index.tex
Executable file
@ -0,0 +1,7 @@
|
||||
\chapter{Virtualisierung}
|
||||
%-------------------------------------------
|
||||
% load other documents
|
||||
%------------------------------------------
|
||||
\input{Kapitel13/KVM}
|
||||
\newpage
|
||||
\input{Kapitel13/Troubleshooting}
|
249
Kapitel13/backup/2018_12_30/KVM.tex
Executable 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}
|
33
Kapitel13/backup/2018_12_30/Troubleshooting.tex
Executable 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
@ -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
@ -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
@ -0,0 +1,6 @@
|
||||
\chapter{Backup}
|
||||
%-------------------------------------------
|
||||
% load other documents
|
||||
%------------------------------------------
|
||||
\input{Kapitel14/Borg}
|
||||
\include{Kapitel14/Restic}
|
389
Kapitel14/Restic.tex
Executable 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
@ -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
@ -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
@ -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
@ -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
@ -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
@ -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
@ -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
@ -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
@ -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
@ -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
@ -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
@ -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
@ -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
@ -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
@ -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
@ -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
@ -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
@ -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}
|
89
Kapitel2/SoftwareKompilieren.tex
Executable 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
@ -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
@ -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
@ -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
@ -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
@ -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}
|
14
Kapitel3/DateisystemKonvertieren.tex
Executable 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}
|
23
Kapitel3/FestplatteSicherLoeschen.tex
Executable 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}
|
34
Kapitel3/FestplattenPartitionenShow.tex
Executable 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}
|
8
Kapitel3/FestplattenStatistic.tex
Executable 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
@ -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}
|
8
Kapitel3/FilesystemReadOnlyModus.tex
Executable 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
@ -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
@ -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
@ -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
@ -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
@ -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
@ -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
@ -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
@ -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
@ -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
@ -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
@ -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
@ -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}
|