Bash Scripting on RHEL & Fedora (Artikel 113)
Spezialisierte Shell-Programmierung für die Red Hat Welt. Erfahren Sie den Umgang mit Software Collections (SCL), Scripting von nmcli und die Integration in systemd-Dienste.
# Bash on RHEL: Spezial-Werkzeuge für Enterprise-Admins
TL;DR / Management Summary Während die Bash-Syntax universell ist, bietet RHEL (Red Hat Enterprise Linux) ein Set an Werkzeugen, die das Scripting in Enterprise-Umgebungen sicherer und mächtiger machen. In diesem Modul lernen wir, wie wir mit Software Collections (SCL) verschiedene Tool-Versionen in Skripten nutzen, wie wir den NetworkManager via Bash steuern und wie wir unsere Skript-Logs sauber in das RHEL-Ökosystem (
logger,journald) integrieren.
# 1. Einführung & Architektur
Die RHEL-spezifische Shell-Umgebung.
In RHEL ist Stabilität Trumpf. Das bedeutet, /usr/bin/bash bleibt oft über Jahre auf der gleichen Version. Neue Tools kommen oft über SCL (Software Collections).
# Der Scripting-Stack (Mermaid)
graph TD
A[Admin Script] --> B[SCL: Software Collections]
B --> C[Modern Python / Node / Ruby]
A --> D[RHEL Tools: nmcli, dnf, subscription-manager]
A --> E[System Logger: /usr/bin/logger]
E --> F[Journald / rsyslog]
# 2. Software Collections (SCL) in Skripten
Versionen jonglieren.
Wenn Ihr RHEL 7 standardmäßig Python 2.7 hat, Sie aber Python 3.9 für ein Skript brauchen:
#!/bin/bash
# Nutze SCL, um die Umgebung für den Rest des Skripts zu ändern
source scl_source enable rh-python39
# Jetzt läuft das Skript mit Python 3.9
python --version
# 3. RHEL Tools scripten: nmcli & dnf
Automatisierung von Core-Diensten.
# nmcli mit JSON-Parsing
Moderne RHEL-Tools können JSON ausgeben, was sie perfekt für Bash-Skripte in Kombination mit jq macht.
# Hole IP-Adresse von eth0 via nmcli und jq
IP=$(nmcli -g ip4.address device show eth0 | cut -d/ -f1)
echo "Current IP: $IP"
# Dnf Transaktions-Sicherheit
Nutzen Sie beim Scripting von dnf immer das --setopt=install_weak_deps=False Flag, um die Image-Größe gering zu halten.
# 4. Day-2 Operations: Logging & systemd
Skripte “erwachsen” machen.
# System-Logging mit logger
Schreiben Sie Meldungen direkt in das System-Journal, anstatt nur in eine Textdatei.
#!/bin/bash
TAG="MY_BACKUP_SCRIPT"
# Logge Start
logger -t $TAG "INFO: Starting daily backup"
# Führe Befehl aus und logge Fehler
if ! tar -czf /backup/data.tar.gz /data; then
logger -t $TAG -p user.err "ERROR: Backup failed!"
exit 1
fi
# 5. Troubleshooting & “War Stories”
Wenn der Cronjob schweigt.
# Story 1: “Der Pfad-Teufel in /etc/profile.d”
Symptom: Das Skript funktioniert, wenn der Admin es manuell startet, aber schlägt fehl, wenn es via cron oder systemd läuft.
Ursache: RHEL lädt viele Pfade (z.B. für Java oder SCL) erst in der interaktiven Login-Shell.
Lösung: Definieren Sie Pfade im Skript immer absolut (/usr/bin/dnf) oder sourcen Sie die Umgebung manuell: source /etc/profile.
# Story 2: “SELinux und der Script-Interpreter”
Symptom: Ein Bash-Skript in /home/admin/ kann keine Dateien in /var/www/ ändern, obwohl der User Root-Rechte hat.
Ursache: SELinux verhindert, dass Skripte aus dem User-Home in geschützte Systembereiche schreiben.
Lösung: Verschieben Sie Administrations-Skripte nach /usr/local/bin/ und geben Sie ihnen das Label bin_t.
# 6. Fazit & Empfehlung
- SCL: Nutzen Sie SCL für moderne Laufzeitumgebungen, anstatt Pakete aus unsicheren Quellen zu kompilieren.
- Logging: Nutzen Sie
logger. Es macht Ihre Skripte für Monitoring-Systeme sichtbarer. - JSON: Installieren Sie immer
jq, um die Ausgaben vonnmcliunddnfsicher zu parsen.
# Anhang: Cheatsheet
| Aufgabe | RHEL Befehl |
|---|---|
| SCL Liste | scl -l |
| SCL in Bash | source scl_source enable <name> |
| Log an Journald | logger -p user.info "Meldung" |
| JSON parsen | `dnf list installed --json |
| OS Release Info | source /etc/os-release && echo $PRETTY_NAME |
| Lockfile erstellen | flock -n /var/run/myscript.lock ... |
| Pfad zu Binary | which <command> |