Multiple Section revised

This commit is contained in:
Uwe Schimanski
2025-06-21 20:53:55 +02:00
parent 81d5fbb1bf
commit 076e9adcf7
13 changed files with 1078 additions and 1013 deletions

View File

@@ -1,6 +1,7 @@
\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.
Eine weitere alternative ist {\ttfamily Fastfetch}. Einerseits besticht das Programm mit seiner Geschwindigkeit, andererseits befindet sich auh hier die Konfiguration im Verzeichnis ~/.config/fastfetch. Mit dem Kommando {\ttfamily fastfetcg \verb|--|gen-config} wird die Datei config.json erstellt.\\
Eine Dokumentation über die Config-Datei kann man unter \url{https://github.com/fastfetch-cli/fastfetch/wiki/Configuration} finden.
\begin{figure}[ht]
\centering
\includegraphics[scale=0.5]{Kapitel12/Pictures/Fastfetch.jpg}

View File

@@ -1,4 +1,4 @@
\section{KVM (Kernel-based Virtual Machine)}
\section{Qemu und 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}.
@@ -19,49 +19,31 @@ irqbypass 16384 1 kvm
%-------------------------------------------------------------------------------
% 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:\\
\subsection{Installation und Konfiguration Qemu}
Die nachfolgenden Pakete werden für die Installation von Qemu benötigt.
\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-full
\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>pacman -S qemu-full qemu-guest-agent virt-manager virt-viewer bridge-utils
\end{lstlisting}
In der Datei /etc/libvirt/libvirtd.conf werden von zwei Einträgen das # entfernt. Danach wird dem User die Gruppe {\fftamily libvirt} hinzugefügt. Zum Abschluss aktivieren wor den Dienst libvirtd und melden uns einmal Ab und wieder An, damit die Änderungen greifen.
\listBash
\begin{lstlisting}[captionpos=b, caption=Konfiguration]
root@tux>grep unix_sock_group /etc/libvirt/libvirtd.conf
unix_sock_group = "libvirt"
root@tux>zypper install qemu-kvm python-virtinst libvirt libvirt-python virt-mamanger libguestfs-tools
root@tux>grep unix_sock_rw /etc/libvirt/libvirtd.conf
unix_sock_rw_perms = "0770"
root@tux># Arch install
root@tux>pacman -S qemu qemu-guest-agent qemu-arch-extra virt-manager virt-viewer bridge-utils
uws@tux>sudo usermod -aG libvirt $USER
root@tux># Firewall
root@tux>pacman -S ebtables iptables
root@tux># After reboot
root@tux>systemctl start libvirtd
root@tux>systemctl enable libvirtd
root@tux>systemctl enable --now libvirtd.service
\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
@@ -448,7 +430,7 @@ Als erstes wird in der Datei {\ttfamily /etc/fstab} die nachfolgende Zeile einge
\listBash
\begin{lstlisting}[captionpos=b, caption=Edit fstab]
root@tux>grep huge /etc/fstab
hugetlbfs /dev/hugepages hugetlbfs mode=1770,gid=78 0 0
hugetlbfs /dev/hugepages hugetlbfs mode=1770,gid=kvm 0 0
\end{lstlisting}
Nun mounten wir die {\ttfamily hugepages} und kontrollieren das erfolgreiche verbinden.
\listBash

View File

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

View File

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

View File

@@ -1,33 +0,0 @@
\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}

View File

@@ -4,7 +4,248 @@
%----------------------------------------------------------
\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.
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.\\
Eine Auswahl an Built-in Variablen sind in der nachfolgenden Tabelle aufgelistet.
\begin{longtable}[l]{p{3cm}p{13cm}}
\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{Liste Build in Variable} \\
\endlastfoot
\verb|$|0 & Es stellt den gesamten Eingabedatensatz dar.\\
\verb|$|1 - \verb|$|n & Es stellt das n-te Feld im aktuellen Datensatz dar, wobei die Felder durch FS getrennt sind.\\
ARGC & Ausgabe der Anzahl in der Befehlszeile bereitgestellten Argumente.\\
ARGV & Es handelt sich um ein Array, das die Befehlszeilenargumente speichert. Der gültige Index des Arrays reicht von 0 bis ARGC-1.\\
ENVIRON & Es ist ein assoziatives Array von Umgebungsvariablen.\\
FILENAME & Ausgabe des aktuellen Datei Namen\\
FS & Es stellt das (Eingabe-)Feldtrennzeichen dar und sein Standardwert ist Leerzeichen. Mit der Befehlszeilenoption \verb|-|F kann man den Feldtrenner ändern.\\
NF & Augabe der leeren Zeilenpositionen.\\
NR & Es stellt die Nummer des aktuellen Datensatzes dar.\\
OFS & Es stellt das Ausgabefeldtrennzeichen dar und sein Standardwert ist ein Leerzeichen.\\
ORS & Es stellt das Trennzeichen für Ausgabedatensätze dar und sein Standardwert ist „Newline“.\\
RLENGTH & Es stellt die Länge der Zeichenfolge dar, die von der Match-Funktion abgeglichen wurde. Die Match-Funktion von AWK sucht in der Eingabezeichenfolge nach einer gegebenen Zeichenfolge.\\
RS & Es stellt den (Eingabe-)Datensatztrenner dar und sein Standardwert ist „Newline“.\\
RSTART & Es stellt die erste Position in der Zeichenfolge dar, die von der Übereinstimmungsfunktion abgeglichen wurde.\\
\end{longtable}
\newpage
%----------------------------------------------------------
% Test Data
%----------------------------------------------------------
\subsubsection{Test Data}
Für das Testen wurden zwei Dateien verwendet, einmal die employees.txt und die geeks.txt
\listBash
\begin{lstlisting}[captionpos=b, caption=Test Data]
uws@tux>cat employees.txt
ajay manager account 45000
sunil clerk account 25000
varun manager sales 50000
amit manager account 47000
tarun peon sales 15000
deepak clerk sales 23000
sunil peon sales 13000
satvik director purchase 80000
uws@tux>cat geeks.txt
A B C
Tarun A12 1
Man B6 2
Praveen M42 3
Hirsch Z4 4
\end{lstlisting}
%----------------------------------------------------------
% Build-In Variablen
%----------------------------------------------------------
\subsubsection{Build-In Variablen Beispiele}
{\ttfamily \verb|$|0}\\
Anstelle von {\ttfamily print \$0}} kann man auch nur {\ttfamily print} angeben und es werden alle Inhalte ausgegeben.
\listBash
\begin{lstlisting}[captionpos=b, caption=Beispiel \$0]
uws@tux># Alternative: awk '{print}' employees.txt
uws@tux>awk '{print $0}' employees.txt
ajay manager account 45000
sunil clerk account 25000
varun manager sales 50000
amit manager account 47000
tarun peon sales 15000
deepak clerk sales 23000
sunil peon sales 13000
satvik director purchase 80000
\end{lstlisting}
{\ttfamily \verb|$|1 .. n}
\begin{lstlisting}[captionpos=b, caption=Beispiel \$1 .. n]
uws@tux># Ausgabe der Spalten 1 und 4
uws@tux>awk '{print $1 "\t" $4}' employees.txt'
ajay 45000
sunil 25000
varun 50000
amit 47000
tarun 15000
deepak 23000
sunil 13000
satvik 80000
\end{lstlisting}
\newpage
{\ttfamily ARGC}
\begin{lstlisting}[captionpos=b, caption=Beispiel ARGC]
uws@tux># awk => Argument 0, siehe auch ARGV
uws@tux>awk 'BEGIN {print "Arguments =", ARGC}' Eins Zwei Drei
Arguments = 4
\end{lstlisting}
{\ttfamily ARGV}
\begin{lstlisting}[captionpos=b, caption=Beispiel ARGV]
uws@tux>awk 'BEGIN {
for (i = 0; i < ARGC - 1; ++i) {
printf "ARGV[%d] = %s\n", i, ARGV[i]
}
}' Eins Zwei Drei
ARGV[0] = awk
ARGV[1] = Eins
ARGV[2] = Zwei
\end{lstlisting}
{\ttfamily ENVIRON}
\begin{lstlisting}[captionpos=b, caption=Beispiel ENVIRON]
uws@tux>awk 'BEGIN { print ENVIRON["HOME"] }'
/home/uws
\end{lstlisting}
{\ttfamily FILENAME}
\begin{lstlisting}[captionpos=b, caption=Beispiel FILENAME]
uws@tux>awk 'END {print FILENAME}' employees.txt
employees.txt
\end{lstlisting}
{\ttfamily FS}
\begin{lstlisting}[captionpos=b, caption=Beispiel FS]
uws@tux>awk 'BEGIN {print "FS = " FS}' | cat -vte
FS = $
\end{lstlisting}
\newpage
{\ttfamily NF}
\begin{lstlisting}[captionpos=b, caption=Beispiel NF]
uws@tux># Zeigt alle leeren Zeilenpositionen an, falls vorhanden
uws@tux>awk 'NF < 0' geeks.txt
uws@tux>awk 'NF == 0 {print NR}' geeks.txt
4
6
uws@tux>awk 'NF <= 0 {print NR}' geeks.txt
4
6
uws@tux># Ausgabe aller Zeilen, ausser die Leerzeilen
uws@tux>awk 'NF > 0' geeks.txt
A B C
Tarun A12 1
Man B6 2
Praveen M42 3
Hirsch Z4 4
uws@ŧux># Anzeige der ersten und letzten Spalte
uws@tux>awk '{print $1,$NF}' employees.txt
ajay 45000
sunil 25000
varun 50000
amit 47000
tarun 15000
deepak 23000
sunil 13000
satvik 80000
\end{lstlisting}
{\ttfamily NR}
\begin{lstlisting}[captionpos=b, caption=Beispiel NR]
uws@tux># Zeilen in einer Datei zählen
uws@tux>awk 'END { print NR }' geeks.txt
7
uws@tux># Ausgabe des erste Element mit der durch - getrennten Zeilennummer
uws@tux>awk '{print NR "- " $1 }' geeks.txt
- A
2- Tarun
3- Man
4-
5- Praveen
6-
7- Hirsch
uws@tux># Ausgabe der Zeilen 3 bis 6
uws@tux>awk 'NR==3, NR==6 {print NR,$0}' employees.txt
3 varun manager sales 50000
4 amit manager account 47000
5 tarun peon sales 15000
6 deepak clerk sales 23000
uws@tux># Anzeige der Zeilennummern
uws@tux>awk '{print NR,$0}' employees.txt
1 ajay manager account 45000
2 sunil clerk account 25000
3 varun manager sales 50000
4 amit manager account 47000
5 tarun peon sales 15000
6 deepak clerk sales 23000
7 sunil peon sales 13000
8 satvik director purchase 80000
\end{lstlisting}
{\ttfamily OFS}
\begin{lstlisting}[captionpos=b, caption=Beispiel OFS]
uws@tux># Es stellt das Ausgabefeldtrennzeichen dar und sein Standardwert ist ein Leerzeichen.
uws@tux>awk 'BEGIN {print "OFS = " OFS}' | cat -vte
OFS = $
\end{lstlisting}
{\ttfamily ORS}
\begin{lstlisting}[captionpos=b, caption=Beispiel ORS]
uws@tux>awk 'BEGIN {print "ORS = " ORS}' | cat -vte
OFS = $
\end{lstlisting}
{\ttfamily RLENGTH}
\begin{lstlisting}[captionpos=b, caption=Beispiel RLENGTH]
uws@tux># Es stellt die Länge der Zeichenfolge dar, die von der Match-Funktion abgeglichen wurde.
uws@tux># Die Match-Funktion von AWK sucht in der Eingabezeichenfolge nach einer gegebenen Zeichenfolge.
uws@tux>awk 'BEGIN { if (match("One Two Three", "re")) { print RLENGTH } }'
2
\end{lstlisting}
{\ttfamily LENGTH}
\begin{lstlisting}[captionpos=b, caption=Beispiel LENGTH]
uws@tux># Ausgabe der Länge des längsten Eintrags
uws@tux>awk '{ if (length($0) > max) max = length($0) } END { print max }' geeks.txt
19
uws@tux># Zeilen mit mehr als 10 Zeichen ausgeben
uws@tux>awk 'length($0) > 10' geeks.txt
A B C
Tarun A12 1
Man B6 2
Praveen M42 3
Hirsch Z4 4
\end{lstlisting}
{\ttfamily RS}
\begin{lstlisting}[captionpos=b, caption=Beispiel RS]
uws@tux># Es stellt den (Eingabe-)Datensatztrenner dar
uws@tux># und sein Standardwert ist "Newline".
uws@tux>awk 'BEGIN {print "RS = " RS}' | cat -vte
RS = $
\end{lstlisting}
{\ttfamily RSTART}
\begin{lstlisting}[captionpos=b, caption=Beispiel RSTART]
uws@tux># Es stellt die erste Position in der Zeichenfolge dar, die von der
uws@tux># Übereinstimmungsfunktion abgeglichen wurde.
uws@tux>awk 'BEGIN { if (match("One Two Three", "Thre")) { print RSTART } }'
9
\end{lstlisting}
\newpage
%----------------------------------------------------------
% Weitere Beispiele
%----------------------------------------------------------
\subsubsection{Weitere Beispiele}
\listBash
\begin{lstlisting}[captionpos=b, caption=Beispiel awk]
uws@tux>echo $USER | awk '{print "Hallo " $1 " :-)"}'
@@ -58,6 +299,7 @@ nobody 65534
adm 999 daemon
wheel 998 uws
\end{lstlisting}
\newpage
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]
@@ -67,6 +309,33 @@ utmp:x:997:
audio:x:996:
disk:x:995:
\end{lstlisting}
In diesem Beispiel wird nach einem String in der Datei gesucht.
\listBash
\begin{lstlisting}[captionpos=b, caption=Search]
uws@tux>awk '/manager/ {print}' employees.txt
ajay manager account 45000
varun manager sales 50000
amit manager account 47000
uws@tux>awk '{ if($2 == "B6") print $0;}' geeks.txt
Man B6 2
\end{lstlisting}
Ausgabe der Quadrat Zahl der ersten Zahlen von 1 bis n, sagen wir 6.
\listBash
\begin{lstlisting}[captionpos=b, caption=Quadrat Zahl]
uws@tux>awk 'BEGIN { for(i=1;i<=6;i++) print "square of", i, "is",i*i; }'
square of 1 is 1
square of 2 is 4
square of 3 is 9
square of 4 is 16
square of 5 is 25
square of 6 is 36
\end{lstlisting}
\newpage
%----------------------------------------------------------
% AWK-Script
%----------------------------------------------------------
\subsubsection{AWK-Script}
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]

View File

@@ -1,11 +1,75 @@
\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.
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.\\
In der nachfolgenden Tabelle sind einige Parameter aufgelistet.
\begin{longtable}[l]{p{3cm}p{13cm}}
\rowcolor{hellgrau}\multicolumn{1}{l}{\textbf{Parameter}} & \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{Parameter}} & \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{Smartctl Parameter} \\
\endlastfoot
\verb|-|a & Gibt alle SMART Informationen aus\\
\verb|-|A & Ausgabe aller Attribute\\
\verb|-|H & Anzeige des Gesundheitszustands\\
\verb|-|i & Abfrage, ob SMART für das Device verfügbar ist\\
\verb|-|x & Gibt alle Informationen aus\\
\verb|--|scan & Listet alle verfügbaren devices auf.
\end{longtable}
%-------------------------------------------------------------------------------.
% Subsection: Informationen
%--------------------------------------------------------------------------------
\subsection{Informationen}
Eine Augabe alle Attribute kann man mit {\ttfamily smartctl \verb|-|A} machen.
\listBash
\begin{lstlisting}[captionpos=b, caption=Ausgabe Attribute]
uws@tux>sudo smartctl -A /dev/sda
smartctl 7.4 2023-08-01 r5530 [x86_64-linux-6.6.88-1-MANJARO] (local build)
Copyright (C) 2002-23, Bruce Allen, Christian Franke, www.smartmontools.org
=== START OF READ SMART DATA SECTION ===
SMART Attributes Data Structure revision number: 1
Vendor Specific SMART Attributes with Thresholds:
ID# ATTRIBUTE_NAME FLAG VALUE WORST THRESH TYPE UPDATED WHEN_FAILED RAW_VALUE
1 Raw_Read_Error_Rate 0x0032 100 100 050 Old_age Always - 0
5 Reallocated_Sector_Ct 0x0032 100 100 050 Old_age Always - 0
9 Power_On_Hours 0x0032 100 100 050 Old_age Always - 19712
\end{lstlisting}
\newpage
Erläuterung der Ausgabe:
\begin{longtable}[l]{p{3cm}p{13cm}}
\rowcolor{hellgrau}\multicolumn{1}{l}{\textbf{Ausgabe}} & \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{Ausgabe}} & \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{Ausgabe Bedeutung} \\
\endlastfoot
Value & aktueller Parameterwert - sinkend\\
Worst & bisher schlechtester Wert\\
Thresh & Grenzwert\\
Type & Bei Grenzunterschreitung droht baldiger Ausfall (Pre-fail), Info über Temperatur/Alterungsprozesse (Old age)\\
Update & Art der Aktualisierung, permanent (always) / Selbsttest (Offline data collection)\\
WHEN\verb|_|FAILED & Sofortiger Ausfall (FAILING\verb|_|NOW), keine Gefahr (In\verb|_|the\verb|_|past)\\
\end{longtable}
Informationen über einen Datenträger kann man sich mit den nachfolgenden Beispielen abfragen.
\listBash
\begin{lstlisting}[captionpos=b, caption=Beispiel smartctl]

View File

@@ -42,12 +42,12 @@ Weitere Repositories kann man sich in der Datei {\ttfamily /etc/pacman.conf} def
\subsection{Spiegel-Server}
Es gibt verschiedene Spiegel-Server von dem Hauptserver ftp.archlinux.org. Die Liste der Spiegel-Server befindet sich unter {\ttfamily /etc/pacman.d} und hat den Namen {\ttfamily mirrorlist}. Unter https://www.archlinux.de/?page=MirrorStatus kann man sich die Geschwindigkeit der Spiegelserver anzeigen lassen. Eine aktuelle Liste der Spiegel-Server kann man sich unter https://www.archlinux.org/mirrorlist erstellen lassen. Die Antwortzeiten der Spiegel-Server kann man mit {\ttfamily rankmirrors} oder auch mit {\ttfamily pacman-mirrors -g} testen.
\listBash
\begin{lstlisting}[captionpos=b, caption=Spiegelserver, label=lst:bash]
\begin{lstlisting}[captionpos=b, caption=Spiegelserver]
uws@tux>sudo pacman-mirrors -c Germany # update Germany Mirror Server
\end{lstlisting}
Die {\ttfamily mirrorlist} wird vom System immer wieder mal aktualisiert. Man kann sich auch eine eigene Mirroliste erstellen und diese in der {\ttfamily pacman.conf} in den entsprechenden Repositories Abschnitten einf"ugen.
\listBash
\begin{lstlisting}[captionpos=b, caption=Eigene Mirrorliste, label=lst:bash]
\begin{lstlisting}[captionpos=b, caption=Eigene Mirrorliste]
[core]
Include = /etc/pacman.d/mirrorlist
Include = /etc/pacman.d/myMirrorlist
@@ -56,10 +56,10 @@ Include = /etc/pacman.d/myMirrorlist
% Section: Update
%-------------------------------------------------------------------------------
\subsection{Update}
Mit dem Befehl {\ttfamily pacman -Syu} kann man eine komplette System Aktualisierung vornehmen. M"ochte man aber nur eine Aktualisierungen f"ur die installierten Pakete vornehmen, so kann das mit {\ttfamily checkupdates} geschehen.
Mit dem Befehl {\ttfamily pacman -Syu} kann man eine komplette System Aktualisierung vornehmen. M"ochte man aber nur eine Aktualisierungen f"ur die installierten Pakete vornehmen, so kann das mit {\ttfamily checkupdates} geschehen. Ein Update ohne Bestätigung kann man mit {\ttfamily \verb|--|noconfirm} gemacht werden.
\listBash
\begin{lstlisting}[captionpos=b, caption=Update, label=lst:bash]
uws@tux>sudo pacman -Syu
\begin{lstlisting}[captionpos=b, caption=Update]
uws@tux>sudo pacman -Syu [--noconfirm]
uws@tux>sudo checkupdates
\end{lstlisting}
@@ -69,7 +69,7 @@ uws@tux>sudo checkupdates
\subsection{Paket decline}
M"ochte man ein Paket von der Aktualisierung ausschlie"sen, so kann man das mit {\ttfamily \verb|--|ignore} machen. Eine ganze Paketgruppe wird mit {\ttfamily \verb|--|ignoregroup} ausgeschlossen. Soll ein Paket dauerhaft von einer Aktualisierung ausgeschlossen werden, so gibt man in der {\ttfamily /etc/pacman.conf} unter {\ttfamily IgnorePkg} die Pakete an, die nicht aktualisiert werden sollen.
\listBash
\begin{lstlisting}[captionpos=b, caption=Ignore Paket, label=lst:bash]
\begin{lstlisting}[captionpos=b, caption=Ignore Paket]
uws@tux>sudo pacman -Syu --ignore=<PaketName> # einzelne Pakete ausschliessen
uws@tux>sudo pacman -Syu ..ignoregroup=<PaketName> # ganze Paket Gruppe ausschliessen

View File

@@ -129,22 +129,55 @@ May 09 14:28:58 tux kernel: tpm_tis 00:01: A TPM error (7) occurred att ...
May 09 14:29_03 tux audspd[1040]: No plugins found, exiting
\end{lstlisting}
Anstelle der Angabe {\ttfamily -p err}, kann man auch {\ttfamily -p 3} angeben.\\
\begin{table}[ht]
\begin{tabular}{p{2cm}p{14cm}} % l => Text left, c => center, r => right, p => zeilenumbruch
\rowcolor{hellgrau}\emph{\textbf{Nummer}} & \emph{\textbf{Beschreibung}}\\
\hline
\hline
\begin{longtable}[l]{p{2cm}p{14cm}}
\rowcolor{hellgrau}\multicolumn{1}{l}{\textbf{Parameter}} & \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{Parameter}} & \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{<error Code} \\
\endlastfoot
0 & emerg\\
1 & alert\\
2 & crit\\
3 & err\\
4 & warning\\
5 & notice\\
6 & info\\
7 & debug\\
\end{tabular}
\caption{Error Code}
\end{table}
1 & alert\\
2 & crit\\
3 & err\\
4 & warning\\
5 & notice\\
6 & info\\
7 & debug\\
\end{longtable}
Nachfolgend eine Auswahl an Parametern, die man bei dem Aufruf von Journalctl mit angeben kann.
\begin{longtable}[l]{p{2cm}p{14cm}}
\rowcolor{hellgrau}\multicolumn{1}{l}{\textbf{Parameter}} & \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{Parameter}} & \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{Journalctl Parameter} \\
\endlastfoot
\verb|-|u & Angabe der Unit z.B. network.service\\
\verb|-|x & Ausgabe mit Erklärungstext\\
\verb|-|e & Pagerausgabe (less)\\
\verb|-|p & Error Code Angabe\\
\verb|-|b & Angabe des Reboots, z.B. -1 wird das vorletzte Reboot angezeigt.
\end{longtable}
\newpage
\begin{justify}
Alle protokollierten Bootvorg"ange, die sich im Journal befinden, k"onnen mit {\ttfamily \verb|--|list-boots} angezeigt werden.

View File

@@ -34,11 +34,12 @@ Alle verf"ugbaren Typen kann man sich mit dem Befehl {\ttfamily systemctl -t hel
% Section: Service starten
%--------------------------------------------------------------------------------
\subsection{Dienste starten}
Die Option {\ttfamily \verb|--|now} startet auch den Service. Bei einem disable wird der Service gestoppt. Man spart sich dadurch den Start Befehl.
\listBash
\begin{lstlisting}[captionpos=b, caption=Dienst starten, label=lst:bash]
uws@tux>sudo systemctl start <service_name>
uws@tux>sudo systemctl enable <service_name>
uws@tux>sudo systemctl enable [--now] <service_name>
\end{lstlisting}
%--------------------------------------------------------------------------------
% Section: Status

Binary file not shown.

View File

@@ -24,9 +24,9 @@
Goch, den \today
\end{center}
\vspace{2cm}
\begin{figure}[ht]
\includegraphics[scale=0.6, center]{Pictures/FirstPage.png}
\end{figure}
\begin{center}
\includegraphics[scale=0.6]{Pictures/FirstPage.png}
\end{center}
\end{titlepage}
%----------------------------------------------------------------------------------------

File diff suppressed because it is too large Load Diff