Sparen Sie 15% bei allen Hosting-Diensten

Teste deine Fähigkeiten und erhalte Rabatt auf jeden Hosting-Plan

Benutze den Code: Skills Anfangen
Abschnitte
Linux Verwaltung

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.sh

Um zu überprüfen, ob die Berechtigungen korrekt angewendet wurden:

ls -l script.sh

Sie sollten eine Ausgabe ähnlich wie folgt sehen:

-rwxr-xr-x 1 user user 1024 Jun 10 14:32 script.sh

Die 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.sh

Das ./ 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.sh

oder

/usr/local/bin/script.sh

Die 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.sh

oder für POSIX-konforme Skripte:

sh script.sh

Unterschied zwischen bash und sh

BefehlInterpreterUnterstützt Bash-spezifische Funktionen
bash script.shGNU BashJa
sh script.shPOSIX 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.sh

oder übergeben Sie das Skript direkt an bash mit erhöhten Rechten:

sudo bash script.sh

Wichtige 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 process

Methode 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 -e

Cron-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

ZeitplanCron-AusdruckBeispiel-Anwendungsfall
Jeden Tag um 2:00 Uhr0 2 * * *Nächtliche Datenbanksicherung
Jeden Montag um 6:00 Uhr0 6 * * 1Wöchentliche Protokollrotation
Jede Stunde0 * * * *Verfügbarkeitsprüfung
Alle 15 Minuten*/15 * * * *Cache-Aktualisierung
Beim Neustart des Systems@rebootEinen Service oder ein Script beim Booten starten

Beispiel: Automatisierte tägliche Sicherung

0 2 * * * /home/user/scripts/backup.sh >> /var/log/backup.log 2>&1

Dies 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.sh

oder äquivalent:

. script.sh

Dies 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

FehlermeldungWahrscheinliche UrsacheLösung
Permission deniedDatei hat keine AusführungsberechtigungFühren Sie chmod +x script.sh aus
No such file or directoryFalscher Pfad oder fehlende DateiÜberprüfen Sie den Pfad mit ls und pwd
bad interpreter: No such file or directoryFalsche Shebang-Zeile (z. B. Windows-Zeilenumbrüche)Führen Sie dos2unix script.sh aus, um Zeilenumbrüche zu beheben
command not foundSkript nicht in $PATH und kein ./-PräfixVerwenden Sie ./script.sh oder vollständigen absoluten Pfad
syntax error near unexpected tokenSkript für bash geschrieben, aber mit sh ausgeführtVerwenden 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/bash

oder für maximale Portabilität:

#!/usr/bin/env bash

2. 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.sh

oder ö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

VerzeichnisEmpfohlene 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>&1

7. 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 screen oder tmux ermö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

MethodeBefehlAnwendungsfall
Mit Berechtigung ausführenchmod +x script.sh && ./script.shStandardausführung
Mit bash ausführenbash script.shKeine Ausführungsberechtigung erforderlich
Mit sh ausführensh script.shPOSIX-kompatible Skripte
Als root ausführensudo ./script.shSkripte, die erhöhte Berechtigungen erfordern
Im Hintergrund ausführen./script.sh &Nicht blockierende Ausführung
Dauerhaft ausführennohup ./script.sh &SSH-Abmeldung überstehen
Mit cron planencrontab -eWiederkehrende automatisierte Aufgaben
Skript sourcingsource 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.