Um am Anfang einer Fachinformatiker-Ausbildung erste Erfahrungen mit Linux-Betriebssystemen und der Shell zu sammeln habe ich eine Reihe kleinerer Aufgaben zusammengestellt.
Die Bash ist eines der mächtigsten Werkzeuge im Linux-Alltag. Egal ob Automatisierung, Systemanalyse oder einfache Dateiverwaltung – mit ein paar Skripten lassen sich viele Aufgaben effizient lösen.
20 einfache Aufgaben mit der Bash
- Hello World
- Schreibe ein Bash-Skript, das „Hello, World!“ ausgibt.
- Date and Time
- Schreibe ein Skript, das das aktuelle Datum und die aktuelle Uhrzeit im Format
YYYY-MM-DD HH:MM:SSausgibt.
- Schreibe ein Skript, das das aktuelle Datum und die aktuelle Uhrzeit im Format
- Dateiinhalt anzeigen
- Erstelle ein Skript, das den Inhalt einer Datei anzeigt, deren Name als Argument übergeben wird.
- Dateien zählen
- Schreibe ein Skript, das die Anzahl der Dateien in einem Verzeichnis zählt, das als Argument übergeben wird.
- Dateigröße prüfen
- Schreibe ein Skript, das die Größe einer Datei prüft und ausgibt, ob die Datei größer als 1 MB ist.
- Backup erstellen
- Erstelle ein Skript, das eine Datei in ein Backup-Verzeichnis kopiert und das Backup mit dem aktuellen Datum versieht.
- Benutzerabfrage
- Schreibe ein Skript, das den Benutzer nach seinem Namen fragt und eine personalisierte Begrüßung ausgibt.
- Zufallszahl generieren
- Erstelle ein Skript, das eine Zufallszahl zwischen 1 und 100 generiert und ausgibt.
- Ping-Test
- Schreibe ein Skript, das eine IP-Adresse oder einen Hostnamen pingt und die Erreichbarkeit prüft.
- Datei suchen
- Erstelle ein Skript, das in einem Verzeichnis und dessen Unterverzeichnissen nach einer Datei mit einem bestimmten Namen sucht.
- Prozessliste
- Schreibe ein Skript, das die aktuellen laufenden Prozesse anzeigt und die Anzahl der Prozesse ausgibt.
- Benutzer und Gruppen
- Erstelle ein Skript, das alle Benutzer und ihre Gruppen auflistet.
- Dateien umbenennen
- Schreibe ein Skript, das alle
.txt-Dateien in einem Verzeichnis in.bakumbenennt.
- Schreibe ein Skript, das alle
- Speichernutzung
- Erstelle ein Skript, das die Festplattenspeichernutzung des Systems anzeigt.
- Netzwerk-Interfaces
- Schreibe ein Skript, das alle aktiven Netzwerk-Interfaces und ihre IP-Adressen auflistet.
- Wörter zählen
- Erstelle ein Skript, das die Anzahl der Wörter in einer Textdatei zählt, deren Name als Argument übergeben wird.
- Archiv erstellen
- Schreibe ein Skript, das ein Verzeichnis in eine
.tar.gz-Datei komprimiert.
- Schreibe ein Skript, das ein Verzeichnis in eine
- Log-Datei analysieren
- Erstelle ein Skript, das eine Log-Datei durchsucht und alle Zeilen ausgibt, die ein bestimmtes Schlüsselwort enthalten.
- Cron-Job erstellen
- Schreibe ein Skript, das einen neuen Cron-Job einrichtet, der täglich eine bestimmte Aufgabe ausführt.
- IP-Adresse ermitteln
- Erstelle ein Skript, das die öffentliche IP-Adresse des Systems ermittelt und anzeigt (Tipp: Nutzung eines externen Dienstes wie
curl ifconfig.me).
- Erstelle ein Skript, das die öffentliche IP-Adresse des Systems ermittelt und anzeigt (Tipp: Nutzung eines externen Dienstes wie
5 Aufgaben zur einfachen Logfileanalyse
- Fehlermeldungen extrahieren
- Schreibe ein Skript, das eine Logdatei nach Zeilen durchsucht, die das Wort „ERROR“ enthalten, und diese Zeilen in eine separate Datei speichert. Nutze
grepfür diese Aufgabe.
- Schreibe ein Skript, das eine Logdatei nach Zeilen durchsucht, die das Wort „ERROR“ enthalten, und diese Zeilen in eine separate Datei speichert. Nutze
- IP-Adressen filtern
- Schreibe ein Skript, das alle eindeutigen IP-Adressen aus einer Logdatei extrahiert und sortiert. Nutze awk und sort für diese Aufgabe.
- Zeilen mit Zeitstempel bearbeiten
- Schreibe ein Skript, das alle Zeilen in einer Logdatei umformatiert, indem der Zeitstempel (angenommen im Format [YYYY-MM-DD HH:MM:SS]) entfernt wird. Nutze sed für diese Aufgabe.
- Top 10 am häufigsten auftretende IP-Adressen
- Schreibe ein Skript, das die 10 häufigsten IP-Adressen in einer Logdatei ermittelt und sortiert ausgibt. Nutze awk, sort, uniq und head für diese Aufgabe.
- Bestimmte Felder aus Logdatei extrahieren
- Schreibe ein Skript, das bestimmte Felder (zum Beispiel den Zeitstempel und die Fehlermeldung) aus einer Logdatei extrahiert und formatiert ausgibt. Nutze cut und awk für diese Aufgabe.
5 Aufgaben zum Umgang mit Dateien/Dateisystem
- Verzeichnisse archivieren
- Schreibe ein Skript, das alle Verzeichnisse in einem angegebenen Verzeichnis findet und jeweils ein .tar.gz-Archiv erstellt.
- Alte Dateien löschen
- Schreibe ein Skript, das alle Dateien in einem Verzeichnis findet, die älter als 30 Tage sind, und diese löscht. Nutze find und eine for-Schleife.
- Benutzerinteraktion
- Schreibe ein Skript, das den Benutzer nach einem Verzeichnis fragt und überprüft, ob es existiert. Wenn es existiert, werden die Dateien im Verzeichnis gezählt und angezeigt. Nutze while, if und case.
- Automatisiertes Backup
- Schreibe ein Skript, das alle .txt-Dateien in einem Verzeichnis findet und diese in ein tägliches Backup-Verzeichnis verschiebt. Das Backup-Verzeichnis soll das aktuelle Datum als Namen haben.
- Dateigrößen überprüfen
- Schreibe ein Skript, das durch alle Dateien in einem Verzeichnis iteriert und die Dateien anzeigt, die größer als 100 MB sind. Nutze find, for und if.
Aufgaben zum Umgang im/mit dem Linux-Betriebssystem
- Übersicht der Softwareversionen
- Schreibe ein Skript welches die installierte Software auf einem System (Linux-Version, Kernel-Version, Pakete, Docker, Snap, Flathub) strukturiert in einer XML-Datei abspeichert
- Einfache Benachrichtigung per E-Mail
- Schreibe ein Skript, welches eine E-Mail sendet, sobald sich jemand auf dem System über eine SSH-Verbindung anmeldet.
Rsync
- Lokale Datensicherung mit Erhalt der Metadaten
- Erstelle mit rsync ein Backup eines Projektverzeichnisses in einen Backup-Ordner und achte dabei darauf, dass Berechtigungen, Zeitstempel und der detaillierte Übertragungsstatus (v-Option) beibehalten werden.
- Spiegelung und Bereinigung mittels Dry-Run
- Synchronisiere das Quellverzeichnis so mit dem Backup, dass gelöschte Dateien auch im Ziel entfernt werden (–delete), und teste den Befehl zur Sicherheit zuerst im Simulationsmodus (–dry-run).
- Remote-Synchronisation über eine sichere SSH-Verbindung
- Übertrage ein lokales Verzeichnis auf einen entfernten Server, indem du
rsyncüber das SSH-Protokoll nutzt, um Daten verschlüsselt zwischen zwei verschiedenen Systemen zu spiegeln.
- Übertrage ein lokales Verzeichnis auf einen entfernten Server, indem du
Lösungen
Hier geht es zu den Lösungsvorschlägen
🧩 20 einfache Bash-Aufgaben
1. Hello World
Schreibe ein Skript, das einfach:
echo "Hello, World!"
ausgibt.
2. Datum und Uhrzeit
Gib das aktuelle Datum im Format YYYY-MM-DD HH:MM:SS aus:
date "+%F %T"
3. Dateiinhalt anzeigen
Übergib einen Dateinamen als Argument:
cat "$1"
4. Dateien zählen
Zähle Dateien in einem Verzeichnis:
ls -1 "$1" | wc -l
5. Dateigröße prüfen
if [ $(stat -c%s "$1") -gt 1048576 ]; then
echo "Größer als 1 MB"
fi
6. Backup erstellen
cp "$1" backup/$(date +%F)_$(basename "$1")
7. Benutzerabfrage
read -p "Name: " name
echo "Hallo $name!"
8. Zufallszahl
echo $((RANDOM % 100 + 1))
9. Ping-Test
ping -c 1 "$1" && echo "Erreichbar" || echo "Nicht erreichbar"
10. Datei suchen
find "$1" -name "$2"
11. Prozesse anzeigen
ps aux | tee /dev/tty | wc -l
12. Benutzer & Gruppen
cut -d: -f1 /etc/passwd
13. Dateien umbenennen
for f in *.txt; do mv "$f" "${f%.txt}.bak"; done
14. Speicherverbrauch
df -h
15. Netzwerk-Interfaces
ip a
16. Wörter zählen
wc -w "$1"
17. Archiv erstellen
tar -czf archiv.tar.gz "$1"
18. Log-Datei durchsuchen
grep "$2" "$1"
19. Cron-Job erstellen
(crontab -l; echo "0 0 * * * /pfad/zum/script.sh") | crontab -
20. Öffentliche IP-Adresse
curl -s ifconfig.me
📊 5 Aufgaben zur Logfile-Analyse
🔍 Fehlermeldungen extrahieren
grep "ERROR" logfile.log > errors.log
🌐 IP-Adressen filtern
awk '{print $1}' logfile.log | sort | uniq
🧹 Zeitstempel entfernen
sed 's/\[[^]]*\] //g' logfile.log
🔝 Top 10 IPs
awk '{print $1}' logfile.log | sort | uniq -c | sort -nr | head -10
📑 Bestimmte Felder extrahieren
awk '{print $1, $5}' logfile.log
📁 Arbeiten mit Dateien & Dateisystem
📦 Verzeichnisse archivieren
for d in */; do tar -czf "$d.tar.gz" "$d"; done
🗑️ Alte Dateien löschen
find "$1" -type f -mtime +30 -delete
🤝 Benutzerinteraktion
read -p "Verzeichnis: " dir
if [ -d "$dir" ]; then
echo "Dateien: $(ls "$dir" | wc -l)"
fi
🔄 Automatisiertes Backup
dest=$(date +%F)
mkdir -p "$dest"
find . -name "*.txt" -exec mv {} "$dest" \;
📏 Große Dateien finden
find "$1" -type f -size +100M
🐧 Linux-Systemaufgaben
📋 Softwareübersicht als XML
Idee:
uname -a- Paketlisten (
dpkg,rpm) - Docker / Snap / Flatpak
→ Ausgabe strukturieren in XML (z. B. mit echo und Tags)
#!/bin/bash
# sysinfo_xml.sh
OUTPUT_FILE="/tmp/sysinfo.xml"
TIMESTAMP=$(date "+%Y-%m-%dT%H:%M:%S")
{
echo "<?xml version='1.0' encoding='UTF-8'?>"
echo "<systemreport host='$(hostname)' generated='$TIMESTAMP'>"
# OS & Kernel
echo " <base>"
echo " <os>$(grep 'PRETTY_NAME' /etc/os-release | cut -d= -f2 | tr -d '"')</os>"
echo " <kernel>$(uname -sr)</kernel>"
echo " </base>"
# DPKG
echo " <packages manager='dpkg'>"
dpkg-query -W -f=' <package><name>${Package}</name><version>${Version}</version></package>\n' | head -n 50
echo " </packages>"
# Docker
if command -v docker &> /dev/null; then
echo " <docker version='$(docker --version | awk '{print $3}' | tr -d ',')'>"
docker ps -a --format " <container><name>{{.Names}}</name><image>{{.Image}}</image><status>{{.Status}}</status></container>"
echo " </docker>"
fi
# Snap
if command -v snap &> /dev/null; then
echo " <snaps>"
snap list 2>/dev/null | tail -n +2 | awk '{print " <snap><name>"$1"</name><version>"$2"</version></snap>"}'
echo " </snaps>"
fi
echo "</systemreport>"
} > "$OUTPUT_FILE"
📧 E-Mail bei SSH-Login
Ansatz:
/etc/ssh/sshrc, ~/.bash_profile oder PAM-Hook nutzen- Script mit
mailodersendmail
who -l -u | mail -s "Informations-E-Mail login" Empfaenger@domain.de
🔄 rsync-Aufgaben
💾 Lokales Backup
rsync -av quelle/ ziel/
🧪 Dry-Run + Spiegelung
rsync -av --delete --dry-run quelle/ ziel/
🔐 Remote-Sync via SSH
rsync -av -e ssh quelle/ user@server:/ziel/