Wie man eine .sh-Datei in Linux ausführt: Vollständiger Leitfaden für Anfänger und Systemadministratoren
Shell-Skripte sind das Rückgrat der Linux-Automatisierung. Egal ob Sie eine Webanwendung bereitstellen, Sicherungen planen oder einen neu bereitgestellten Server konfigurieren – .sh-Dateien ermöglichen es Ihnen, komplexe Befehlssequenzen in eine einzelne, wiederholbare ausführbare Datei zu bündeln. Dieser Leitfaden führt Sie durch jede Methode zum Ausführen von Shell-Skripten unter Linux – von der grundlegenden Ausführung bis hin zu Hintergrundprozessen und Cron-Planung – mit Best Practices, die sich in Produktionsumgebungen bewähren.
Was ist eine .sh-Datei in Linux?
Eine .sh-Datei ist ein Skript in Klartext, das in Shell-Sprache (typischerweise Bash oder POSIX sh) geschrieben ist und von der Linux-Shell Zeile für Zeile interpretiert und ausgeführt wird. Shell-Skripte werden verwendet für:
- Automatisierung wiederholter Systemadministrationsaufgaben
- Bereitstellung und Konfiguration von Anwendungen
- Verwaltung von Benutzern, Berechtigungen und Dateisystemen
- Planung von Wartungsaufgaben wie Sicherungen und Log-Rotation
- Bootstrap neuer Server nach der Bereitstellung
Wenn Sie eine VPS Hosting-Umgebung oder einen Dedicated Server verwalten, ist Shell-Scripting eine unverzichtbare Fähigkeit, die Ihnen jede Woche viele Stunden manuelle Arbeit spart.
Voraussetzungen
Bevor Sie eine .sh-Datei ausführen, stellen Sie sicher, dass Sie folgendes haben:
- Zugriff auf ein Linux-Terminal (lokal oder über SSH)
- Ein Benutzerkonto mit entsprechenden Berechtigungen
- Die Skriptdatei bereits auf dem System (lokal erstellt oder über SCP/SFTP übertragen)
Methode 1: Datei mit chmod ausführbar machen
Neu erstellte oder heruntergeladene .sh-Dateien haben standardmäßig keine Ausführungsberechtigungen. Bevor Sie das Skript als Programm ausführen, müssen Sie explizit Ausführungsrechte mit dem chmod-Befehl erteilen.
chmod +x script.shUm zu überprüfen, ob die Berechtigungen korrekt angewendet wurden:
ls -l script.shSie sollten eine Ausgabe ähnlich dieser sehen:
-rwxr-xr-x 1 user user 1024 Jun 10 14:32 script.shDie rwx-Flags bestätigen, dass die Datei jetzt vom Eigentümer, der Gruppe und anderen ausgeführt werden kann.
> Sicherheitstipp: Wenn Sie die Ausführung nur auf den Dateieigentümer beschränken möchten, verwenden Sie 700 statt 755.
Methode 2: Skript mit relativem oder absolutem Pfad ausführen
Sobald die Datei ausführbar ist, können Sie sie direkt vom Terminal aus ausführen.
Relativen Pfad verwenden (aktuelles Verzeichnis)
Wenn sich das Skript in Ihrem aktuellen Arbeitsverzeichnis befindet, präfixieren Sie es mit ./:
./script.shDas ./ teilt der Shell mit, dass sie im aktuellen Verzeichnis suchen soll, anstatt das System PATH zu durchsuchen.
Absoluten Pfad verwenden
Wenn sich das Skript an einem anderen Ort befindet, geben Sie seinen vollständigen Pfad an:
/home/user/scripts/script.shoder
/usr/local/bin/script.shDie Verwendung absoluter Pfade ist besonders wichtig beim Ausführen von Skripten aus Cron-Jobs oder anderen automatisierten Kontexten, in denen sich das Arbeitsverzeichnis unterscheiden kann.
Methode 3: Skript mit bash oder sh ausführen (keine Ausführungsberechtigung erforderlich)
Sie können ein Shell-Skript aufrufen, indem Sie den Interpreter explizit aufrufen, auch wenn die Datei keine Ausführungsberechtigungen hat. Dies ist besonders nützlich zum schnellen Testen eines Skripts, bevor Sie es dauerhaft ausführbar machen.
bash script.shoder für POSIX-konforme Skripte:
sh script.shUnterschied zwischen bash und sh
| Befehl | Interpreter | Unterstützt Bash-spezifische Funktionen |
|---|---|---|
| bash | GNU Bash | Ja |
| sh | POSIX sh (oft dash auf Ubuntu) | Nein |
Wenn Ihr Skript Bash-spezifische Syntax wie Arrays, [[ ]]-Bedingungen oder Prozessersetzung verwendet, verwenden Sie immer bash anstelle von sh.
Methode 4: Skript als Superuser (sudo) ausführen
Einige Skripte erfordern Root-Berechtigungen zum Ändern von Systemdateien, Verwalten von Diensten, Installieren von Paketen oder Ändern von Netzwerkkonfigurationen. Verwenden Sie sudo, um Berechtigungen zu erhöhen:
sudo ./script.shoder übergeben Sie das Skript direkt an bash mit erhöhten Rechten:
sudo bash script.shWichtige Sicherheitsüberlegungen
- Führen Sie ein Skript niemals als Root aus, ohne es vorher zu lesen. Ein bösartiges oder schlecht geschriebenes Skript mit sudo-Zugriff kann irreversible Systemschäden verursachen.
- Bevorzugen Sie die Ausführung von Skripten mit den minimal erforderlichen Berechtigungen.
- Wenn ein Skript nur in ein bestimmtes Verzeichnis schreiben muss, erwägen Sie, die Verzeichnisberechtigungen anzupassen, anstatt das gesamte Skript als Root auszuführen.
Methode 5: Skript im Hintergrund ausführen
Standardmäßig blockiert die Ausführung eines Skripts im Terminal Ihre Sitzung, bis das Skript abgeschlossen ist. Für lang laufende Aufgaben – wie große Dateiübertragungen, Datenbankmigrationen oder Server-Builds – möchten Sie den Prozess in den Hintergrund verschieben.
Mit dem &-Operator
./script.sh &Das &-Symbol verzweigt den Prozess in den Hintergrund und gibt sofort die Kontrolle an Ihr Terminal zurück. Die Shell gibt die PID (Process ID) des Hintergrund-Jobs aus, die Sie später zum Überwachen oder Beenden verwenden können.
Skript nach dem Abmelden mit nohup weiter ausführen
Wenn Sie sich von SSH abmelden, werden Hintergrund-Jobs, die mit & gestartet wurden, normalerweise beendet. Verwenden Sie nohup, um dies zu verhindern:
nohup ./script.sh &Die Ausgabe wird standardmäßig zu nohup.out umgeleitet. Um eine benutzerdefinierte Protokolldatei anzugeben:
nohup ./script.sh > /var/log/myscript.log 2>&1 &Hintergrund-Jobs überwachen
jobs # List background jobs in the current session
ps aux | grep script.sh # Find the process by name
kill PID # Terminate a specific background processMethode 6: Skriptausführung mit Cron planen
Für wiederkehrende Aufgaben – nächtliche Sicherungen, wöchentliche Bereinigungen, stündliche Integritätsprüfungen – ist der integrierte Cron-Scheduler von Linux die Standardlösung.
Crontab-Editor öffnen
crontab -eCron-Syntax
* * * * * /path/to/script.sh
│ │ │ │ │
│ │ │ │ └── Day of week (0–7, Sunday = 0 or 7)
│ │ │ └──── Month (1–12)
│ │ └────── Day of month (1–31)
│ └──────── Hour (0–23)
└────────── Minute (0–59)Praktische Cron-Beispiele
| Zeitplan | Cron-Ausdruck | Beispiel-Anwendungsfall |
|---|---|---|
| Täglich um 2:00 Uhr | 0 2 * * * | Nächtliche Datenbanksicherung |
| Jeden Montag um 6:00 Uhr | 0 6 * * 1 | Wöchentliche Log-Rotation |
| Jede Stunde | 0 * * * * | Verfügbarkeitsprüfung |
| Alle 15 Minuten | */15 * * * * | Cache-Aktualisierung |
| Beim Systemstart | @reboot | Dienst oder Skript beim Booten starten |
Beispiel: Automatisierte tägliche Sicherung
0 2 * * * /home/user/scripts/backup.sh >> /var/log/backup.log 2>&1Dies führt backup.sh täglich um 2:00 Uhr aus und hängt sowohl die Standardausgabe als auch Fehler an eine Protokolldatei an, um sie zu überprüfen.
> Profi-Tipp: Verwenden Sie immer absolute Pfade in Cron-Einträgen. Cron wird mit einer minimalen Umgebung ausgeführt und hat möglicherweise keinen Zugriff auf das gleiche PATH wie Ihre interaktive Shell.
Methode 7: Skript sourcen (im aktuellen Shell-Kontext ausführen)
Es gibt noch eine Ausführungsmethode, die es wert ist, bekannt zu sein: Sourcing eines Skripts. Im Gegensatz zu den obigen Methoden wird das Skript beim Sourcing in der aktuellen Shell-Sitzung ausgeführt, anstatt eine Subshell zu erzeugen. Dies bedeutet, dass alle im Skript definierten Variablen oder Funktionen in Ihrer aktuellen Umgebung bestehen bleiben.
source script.shoder gleichwertig:
. script.shDies wird häufig zum Laden von Umgebungsvariablen, zum Aktivieren virtueller Umgebungen oder zum Anwenden von Konfigurationsänderungen auf die aktuelle Sitzung verwendet.
Fehlerbehebung häufiger Fehler
| Fehlermeldung | Wahrscheinliche Ursache | Lösung |
|---|---|---|
Permission denied | Datei hat keine Ausführungsberechtigung | Führen Sie chmod +x script.sh aus |
No such file or directory | Falscher Pfad oder fehlende Datei | Überprüfen Sie den Pfad mit pwd und ls |
bad interpreter: No such file or directory | Falsche Shebang-Zeile (z. B. Windows-Zeilenumbrüche) | Führen Sie dos2unix script.sh aus, um Zeilenumbrüche zu beheben |
command not found | Skript nicht in PATH und kein ./ Präfix | Verwenden Sie ./script.sh oder den vollständigen absoluten Pfad |
syntax error near unexpected token | Skript für bash geschrieben, aber mit sh ausgeführt | Verwenden Sie bash explizit |
Best Practices zum Schreiben und Ausführen von Shell-Skripten
Die Befolgung dieser Praktiken macht Ihre Skripte sicherer, wartbarer und leichter zu debuggen – besonders in Server-Umgebungen.
1. Immer mit einer Shebang-Zeile beginnen
Die erste Zeile jedes Skripts sollte den Interpreter deklarieren:
#!/bin/bashoder für maximale Portabilität:
#!/usr/bin/env bash2. Strikten Modus aktivieren
Fügen Sie dies in der Nähe des Anfangs jedes Produktionsskripts hinzu:
set -euo pipefail- set -e — Beendet sofort, wenn ein Befehl fehlschlägt
- set -u — Behandelt nicht gesetzte Variablen als Fehler
- set -o pipefail — Erfasst Fehler in Pipe-Befehlen
3. Skript vor der Ausführung lesen
Führen Sie niemals eine .sh-Datei aus einer externen oder nicht vertrauenswürdigen Quelle aus, ohne ihren Inhalt vorher zu überprüfen:
cat script.shoder öffnen Sie es in einem Texteditor. Dies ist besonders wichtig beim Ausführen mit sudo.
4. Kommentare großzügig verwenden
#!/bin/bash
# backup.sh — Daily backup script for /var/www
# Author: sysadmin@example.com
# Last updated: 2024-06-10
# Define source and destination directories
SOURCE="/var/www"
DEST="/mnt/backup"5. Skripte in dedizierten Verzeichnissen organisieren
| Verzeichnis | Empfohlene Verwendung |
|---|---|
| /usr/local/bin | Systemweite Skripte, auf die alle Benutzer zugreifen können |
| ~/bin oder ~/.local/bin | Persönliche Benutzerskripte |
| /opt/appname/scripts | Anwendungsspezifische Automatisierungsskripte |
| /etc/cron.daily | Skripte, die täglich über Cron ausgeführt werden |
6. Skriptausgabe protokollieren
Leiten Sie die Ausgabe immer in eine Protokolldatei um für Skripte, die unbeaufsichtigt ausgeführt werden:
./script.sh >> /var/log/script.log 2>&17. Skripte zuerst in einer sicheren Umgebung testen
Bevor Sie ein Skript auf einem Produktionsserver bereitstellen, testen Sie es in einer Staging-Umgebung oder einer wegwerfbaren VPS-Instanz, wo Fehler keine Ausfallzeiten verursachen.
Shell-Skripte auf einem Linux-Server ausführen: Praktische Überlegungen
Beim Ausführen von Skripten auf einem Remote-Linux-Server – ob in einer gemeinsamen Umgebung oder auf einer dedizierten Maschine – spielen einige zusätzliche Faktoren eine Rolle:
- SSH-Zugriff: Die meisten serverseitigen Skripte werden über SSH ausgeführt. Tools wie screen oder tmux ermöglichen es Ihnen, persistente Sitzungen zu führen, damit lang laufende Skripte Trennungen überstehen.
- Benut
