Linux-Skript zur Systeminformationenserfassung¶
Linux bietet zahlreiche Werkzeuge und Befehle, um Systeminformationen abzurufen. Dieses Tutorial erklärt, wie du ein Bash-Skript erstellst, das wichtige Systeminformationen sammelt und in einer Datei speichert. Am Ende wirst du verstehen, wie die verschiedenen Komponenten des Skripts funktionieren und wie sie zusammenarbeiten.
Grundlegendes zu Bash-Skripten¶
Ein Bash-Skript ist eine Datei mit Shell-Befehlen, die nacheinander ausgeführt werden. Um ein Bash-Skript zu erstellen, benötigst du:
- Einen Texteditor wie
vim
,nano
odergedit
. - Berechtigungen zum Ausführen des Skripts, die mit dem Befehl
chmod +x dateiname.sh
gesetzt werden können.
Die erste Zeile eines Bash-Skripts ist immer der sogenannte Shebang:
#!/bin/bash
Dieser gibt an, dass das Skript mit der Bash-Shell ausgeführt werden soll.
Variablen in Bash¶
Variablen in Bash werden verwendet, um Werte zu speichern, die später im Skript wiederverwendet werden können. Sie können ohne spezielle Deklaration definiert werden:
VARIABLE_NAME="Wert"
Der Zugriff auf den Wert erfolgt durch das Voranstellen eines $
-Zeichens:
echo $VARIABLE_NAME
Variablen werden häufig verwendet, um Dateinamen, Konfigurationswerte oder Zwischenergebnisse zu speichern. Wichtig ist, dass keine Leerzeichen um das Gleichheitszeichen stehen, da dies zu einem Syntaxfehler führt.
Überblick über die verwendeten Befehle¶
1. Hostname¶
Der Befehl hostname
gibt den Namen des Computers aus.
2. Betriebssystem und Version¶
Informationen zum Betriebssystem findest du in der Datei /etc/os-release
. Diese Datei enthält Schlüssel-Wert-Paare. Mit grep
und cut
kannst du den Wert des Schlüssels PRETTY_NAME
extrahieren:
grep '^PRETTY_NAME' /etc/os-release | cut -d '"' -f2
3. Kernel-Version¶
Mit uname -r
wird die Kernel-Version angezeigt.
4. CPU-Informationen¶
Der Befehl lscpu
gibt detaillierte Informationen zur CPU aus. Mit grep
und awk
kannst du gezielt den Modellnamen abrufen:
lscpu | grep 'Model name' | awk -F: '{print $2}' | xargs
5. Arbeitsspeicher¶
Der Befehl free
zeigt die Nutzung des Arbeitsspeichers an. Die Option -h
gibt die Werte in einer menschenlesbaren Form aus:
free -h --si | awk '/^Mem:/ {print $2}'
6. Festplattenspeicher¶
Mit df
kannst du den Speicherplatz anzeigen lassen. Die Option --total
gibt eine Zusammenfassung:
df -h --total
7. Netzwerk (IP-Adresse)¶
Der Befehl hostname -I
listet alle IP-Adressen des Systems auf. Mit awk
kannst du die erste Adresse extrahieren:
hostname -I | awk '{print $1}'
8. Systemlaufzeit¶
Mit uptime -p
wird die Systemlaufzeit im lesbaren Format angezeigt.
9. Angemeldete Benutzer¶
Der Befehl w
zeigt alle angemeldeten Benutzer. Mit awk
und sort
kannst du diese Liste bereinigen:
w -h | awk '{print $1}' | sort | uniq
10. Ausstehende Updates¶
Wenn das System apt
als Paketmanager verwendet, kannst du die Anzahl der verfügbaren Updates abrufen:
apt list --upgradable 2>/dev/null | grep -v "Listing..." | wc -l
Falls apt
nicht verfügbar ist, kannst du andere Paketmanager wie yum
oder dnf
nutzen.
Struktur des Skripts¶
Ein Bash-Skript sollte klar strukturiert sein:
- Kopfzeile und Variablen: Definiere Variablen wie den Dateinamen.
- Befehle ausführen: Sammle die gewünschten Informationen.
- Ausgabe schreiben: Schreibe die gesammelten Daten in die Datei.
Beispiel für die Struktur:
#!/bin/bash
# Datei definieren
OUTPUT_FILE="system_steckbrief.txt"
# Informationen sammeln und schreiben
echo "Systeminformationen" > "$OUTPUT_FILE"
echo "==================" >> "$OUTPUT_FILE"
# Beispiel für Hostname
echo "Hostname: $(hostname)" >> "$OUTPUT_FILE"
Debugging und Tests¶
- Ausführlichkeit: Füge
set -x
am Anfang des Skripts hinzu, um jeden Befehl vor seiner Ausführung anzuzeigen. - Fehlerbehandlung: Nutze
if
-Bedingungen, um sicherzustellen, dass alle benötigten Befehle verfügbar sind:
if ! command -v hostname &> /dev/null; then
echo "Fehler: hostname ist nicht verfügbar."
exit 1
fi
- Testumgebung: Teste das Skript in einer isolierten Umgebung, bevor du es auf einem Produktivsystem ausführst.
Weiterführende Ressourcen¶
Mit diesem Wissen kannst du nun dein eigenes Bash-Skript schreiben, um Systeminformationen zu sammeln und in einer Datei zu speichern. Viel Erfolg!
💡 Übung¶
Skript zur Erstellung eines Steckbriefes über ein Linux System.
Hier ist ein Beispiel für ein Shell-Skript, das einen System-Steckbrief erstellt. Das Skript sammelt Informationen wie Hostname, Betriebssystem, Kernel-Version, CPU, Arbeitsspeicher und mehr. Es speichert die Ausgabe in einer Datei namens system_steckbrief.txt
.
#!/bin/bash
# Datei, in die der Steckbrief geschrieben wird
OUTPUT_FILE="system_steckbrief.txt"
# Systeminformationen sammeln
echo "System-Steckbrief" > "$OUTPUT_FILE"
echo "=================" >> "$OUTPUT_FILE"
# Hostname
echo "Hostname: $(hostname)" >> "$OUTPUT_FILE"
# Betriebssystem und Version
echo "Betriebssystem: $(grep '^PRETTY_NAME' /etc/os-release | cut -d '"' -f2)" >> "$OUTPUT_FILE"
# Kernel-Version
echo "Kernel-Version: $(uname -r)" >> "$OUTPUT_FILE"
# CPU-Information
echo "CPU: $(lscpu | grep 'Model name' | awk -F: '{print $2}' | xargs)" >> "$OUTPUT_FILE"
# Arbeitsspeicher
echo "Gesamter RAM: $(free -h --si | awk '/^Mem:/ {print $2}')" >> "$OUTPUT_FILE"
echo "Freier RAM: $(free -h --si | awk '/^Mem:/ {print $4}')" >> "$OUTPUT_FILE"
# Festplattenspeicher
echo "Festplatten-Speicherplatz:" >> "$OUTPUT_FILE"
df -h --total | grep total | awk '{print " Gesamt: "$2" Verwendet: "$3" Frei: "$4}' >> "$OUTPUT_FILE"
# Netzwerk
IP_ADDR=$(hostname -I | awk '{print $1}')
echo "IP-Adresse: $IP_ADDR" >> "$OUTPUT_FILE"
# Laufzeit (Uptime)
echo "System-Laufzeit: $(uptime -p)" >> "$OUTPUT_FILE"
# Benutzer, die angemeldet sind
echo "Angemeldete Benutzer:" >> "$OUTPUT_FILE"
w -h | awk '{print $1}' | sort | uniq >> "$OUTPUT_FILE"
# Installierte Updates (falls apt verfügbar ist)
if command -v apt &> /dev/null; then
echo "Ausstehende Updates:" >> "$OUTPUT_FILE"
apt list --upgradable 2>/dev/null | grep -v "Listing..." | wc -l | awk '{print " "$1" Pakete zum Aktualisieren."}' >> "$OUTPUT_FILE"
else
echo "Update-Status: Paketmanager apt nicht verfügbar." >> "$OUTPUT_FILE"
fi
# Zusammenfassung ausgeben
echo "System-Steckbrief wurde in $OUTPUT_FILE gespeichert."