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 in Linux — von der grundlegenden Ausführung bis 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 das Linux-Shell zeilenweise interpretiert und ausführt. Shell-Skripte werden verwendet für:
- Automatisierung wiederholter Systemadministrationsaufgaben
- Bereitstellung und Konfiguration von Anwendungen
- Verwaltung von Benutzern, Berechtigungen und Dateisystemen
- Planung von Wartungsaufträgen wie Sicherungen und Protokollrotation
- 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 Stunden manueller Arbeit sparen wird.
Voraussetzungen
Bevor Sie eine .sh Datei ausführen, stellen Sie sicher, dass Sie über folgende Voraussetzungen verfügen:
- 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 wie folgt sehen:
-rwxr-xr-x 1 user user 1024 Jun 10 14:32 script.shDie x Flags bestätigen, dass die Datei jetzt vom Besitzer, 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 chmod 700 script.sh anstelle von chmod +x.
Methode 2: Führen Sie das Skript mit einem relativen oder absoluten Pfad aus
Sobald die Datei ausführbar ist, können Sie sie direkt vom Terminal aus ausführen.
Verwendung eines relativen Pfads (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.
Verwendung eines absoluten Pfads
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, wenn Skripte aus Cron-Jobs oder anderen automatisierten Kontexten ausgeführt werden, in denen sich das Arbeitsverzeichnis unterscheiden kann.
Methode 3: Führen Sie das Skript mit bash oder sh aus (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 script.sh | GNU Bash | Ja |
sh script.sh | POSIX sh (oft dash auf Ubuntu) | Nein |
Wenn Ihr Skript Bash-spezifische Syntax wie Arrays, [[ ]] Bedingungen oder Prozesssubstitution verwendet, verwenden Sie immer bash anstelle von sh.
Methode 4: Führen Sie das Skript als Superuser aus (sudo)
Einige Skripte erfordern Root-Berechtigungen, um Systemdateien zu ändern, Dienste zu verwalten, Pakete zu installieren oder Netzwerkkonfigurationen zu ändern. Verwenden Sie sudo zur Erhöhung der Berechtigungen:
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 zu irreversiblen Systemschäden führen.
- 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, Datenbankmigration oder Server-Builds — möchten Sie den Prozess in den Hintergrund verschieben.
Verwendung des & Operators
./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 zur Überwachung oder Beendigung verwenden können.
Skript nach dem Abmelden mit nohup weiterhin ausführen
Wenn Sie sich von SSH trennen, 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: Script-Ausfü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.
Öffnen Sie den Crontab-Editor
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 |
|---|---|---|
| Jeden Tag um 2:00 Uhr | 0 2 * * * | Nächtliche Datenbanksicherung |
| Jeden Montag um 6:00 Uhr | 0 6 * * 1 | Wöchentliche Protokollrotation |
| Jede Stunde | 0 * * * * | Verfügbarkeitsprüfung |
| Alle 15 Minuten | */15 * * * * | Cache-Aktualisierung |
| Beim Neustart des Systems | @reboot | Einen Service oder ein Script 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 jeden Tag 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 dieselbe $PATH wie Ihre interaktive Shell.
Methode 7: Ein Skript sourcen (Im aktuellen Shell-Kontext ausführen)
Es gibt noch eine weitere 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 spawnen. Das bedeutet, dass alle im Skript definierten Variablen oder Funktionen in Ihrer aktuellen Umgebung bestehen bleiben.
source script.shoder äquivalent:
. 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 bei häufigen Fehlern
| 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 ls und pwd |
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 vollständigen absoluten Pfad |
syntax error near unexpected token | Skript für bash geschrieben, aber mit sh ausgeführt | Verwenden Sie bash script.sh explizit |
Best Practices für das 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. Strict Mode aktivieren
Fügen Sie dies oben in jedem Produktionsskript hinzu:
set -euo pipefail-e— Sofort beenden, wenn ein Befehl fehlschlägt-u— Nicht gesetzte Variablen als Fehler behandeln-o pipefail— Fehler in verketteten Befehlen abfangen
3. Das Skript vor der Ausführung lesen
Führen Sie niemals eine .sh Datei aus einer externen oder nicht vertrauenswürdigen Quelle aus, ohne deren Inhalt vorher zu überprüfen:
cat script.shoder öffnen Sie sie in einem Texteditor. Dies ist besonders wichtig, wenn Sie mit sudo ausführen.
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 |
~/scripts/ oder ~/bin/ | Persönliche Benutzer-Skripte |
/opt/scripts/ | Anwendungsspezifische Automatisierungsskripte |
/etc/cron.daily/ | Skripte zur täglichen Ausführung über cron |
6. Skript-Ausgabe 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 zunächst in einer sicheren Umgebung testen
Bevor Sie ein Skript auf einem Produktionsserver bereitstellen, testen Sie es in einer Staging-Umgebung oder auf 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
screenodertmuxermöglichen es dir, persistente Sitzungen zu verwalten, damit lange laufende Skripte Trennungen überstehen. - Benutzerberechtigungen: In gemeinsamen Hosting-Umgebungen kann deine Fähigkeit, Skripte auszuführen, eingeschränkt sein. Ein VPS mit cPanel gibt dir vollständigen Root-Zugriff und vollständige Kontrolle über die Skriptausführung.
- Automatisierte Bereitstellungen: Kombiniere Shell-Skripte mit Cron-Jobs, um Bereitstellungen, Zertifikatsverlängerungen (besonders nützlich zusammen mit SSL-Zertifikaten) und routinemäßige Wartungsaufgaben zu automatisieren.
- Umgebungsvariablen: Skripte, die über Cron oder SSH ausgeführt werden, erben möglicherweise nicht die Umgebung deiner interaktiven Shell. Definiere alle erforderlichen Variablen explizit im Skript oder source eine Profildatei.
Schnellreferenz: Alle Methoden auf einen Blick
| Methode | Befehl | Anwendungsfall |
|---|---|---|
| Mit Berechtigung ausführen | chmod +x script.sh && ./script.sh | Standardausführung |
| Mit bash ausführen | bash script.sh | Keine Ausführungsberechtigung erforderlich |
| Mit sh ausführen | sh script.sh | POSIX-kompatible Skripte |
| Als root ausführen | sudo ./script.sh | Skripte, die erhöhte Berechtigungen erfordern |
| Im Hintergrund ausführen | ./script.sh & | Nicht blockierende Ausführung |
| Dauerhaft ausführen | nohup ./script.sh & | SSH-Abmeldung überstehen |
| Mit cron planen | crontab -e | Wiederkehrende automatisierte Aufgaben |
| Skript sourcing | source script.sh | Änderungen auf aktuelle Shell anwenden |
Fazit
Das Ausführen von .sh Dateien in Linux ist eine grundlegende Fähigkeit, die die volle Leistung der Systemautomatisierung freischaltet. Der grundlegende Arbeitsablauf ist einfach: Ausführungsberechtigung mit chmod +x gewähren, dann das Skript mit ./script.sh oder bash script.sh ausführen. Für Produktionsumgebungen kombinieren Sie absolute Pfade, strikten Modus, Protokollierung und Cron-Planung, um robuste und zuverlässige Automatisierungspipelines zu erstellen.
Wenn Sie Skripte auf einem Server verwalten, ist die Qualität Ihrer Hosting-Infrastruktur wichtig. AlexHost’s VPS Hosting und Dedicated Servers geben Ihnen vollständigen Root-Zugriff, stabile Verfügbarkeit und die Leistung, die Sie benötigen, um Automatisierungsaufgaben sicher auszuführen – ob Sie nächtliche Sicherungen planen, Anwendungen bereitstellen oder komplexe Multi-Skript-Workflows verwalten.
bei allen Hosting-Diensten