15%

15% auf alle Hosting-Dienste sparen

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

Benutze den Code:

Skills
Anfangen
02.09.2025

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

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

ls -l script.sh

Sie sollten eine Ausgabe ähnlich dieser sehen:

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

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

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

oder

/usr/local/bin/script.sh

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

oder für POSIX-konforme Skripte:

sh script.sh

Unterschied zwischen bash und sh

BefehlInterpreterUnterstützt Bash-spezifische Funktionen
bashGNU BashJa
shPOSIX 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.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 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 process

Methode 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 -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
Täglich um 2:00 Uhr0 2 * * *Nächtliche Datenbanksicherung
Jeden Montag um 6:00 Uhr0 6 * * 1Wöchentliche Log-Rotation
Jede Stunde0 * * * *Verfügbarkeitsprüfung
Alle 15 Minuten*/15 * * * *Cache-Aktualisierung
Beim Systemstart@rebootDienst oder Skript 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 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.sh

oder gleichwertig:

. 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 häufiger Fehler

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 pwd und ls
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 den vollständigen absoluten Pfad
syntax error near unexpected tokenSkript für bash geschrieben, aber mit sh ausgeführtVerwenden 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/bash

oder für maximale Portabilität:

#!/usr/bin/env bash

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

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

VerzeichnisEmpfohlene Verwendung
/usr/local/binSystemweite Skripte, auf die alle Benutzer zugreifen können
~/bin oder ~/.local/binPersönliche Benutzerskripte
/opt/appname/scriptsAnwendungsspezifische Automatisierungsskripte
/etc/cron.dailySkripte, 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>&1

7. 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
15%

15% auf alle Hosting-Dienste sparen

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

Benutze den Code:

Skills
Anfangen