Drush — Die Kommandozeile für Drupal

Drush ist das Kommandozeilen-Tool für Drupal: Cache leeren, Module verwalten, Datenbank und Config-Sync automatisieren. Für Drupal 8 bis 11.

Drush — kurz für Drupal Shell — ist das Kommandozeilen-Werkzeug, mit dem du eine Drupal-Installation steuerst, ohne dich durch die Administrationsoberfläche zu klicken. Cache leeren, Module aktivieren, Konfiguration zwischen Umgebungen synchronisieren, Datenbank-Updates ausführen oder ein komplettes Deployment anstoßen – all das erledigst du mit kurzen, skriptbaren Befehlen. Drush unterstützt die aktuellen Drupal-Versionen 8 bis 11 und ist aus dem Alltag von Drupal-Entwicklung und -Betrieb kaum wegzudenken. Dieser Guide zeigt dir die wichtigsten Kommandos von der Statusabfrage bis zum produktiven Deploy.

Kern & Info

drush --version — Zeigt die installierte Drush-Version an.

drush --version

drush status — Zeigt den Status der Drupal-Site an: Root-Verzeichnis, URI, Datenbank, PHP-Version, Drush-Version usw.

drush status

drush status --fields=drupal-version,db-status — Zeigt nur bestimmte Statusfelder an.

drush status --fields=drupal-version,db-status

drush list — Listet alle verfügbaren Drush-Befehle auf.

drush list

drush list --filter=<group> — Listet die Befehle einer bestimmten Gruppe auf (z. B. cache, config, pm, sql, user).

drush list --filter=config

drush help <command> — Zeigt Hilfe und alle Optionen zu einem bestimmten Drush-Befehl an.

drush help config:export

drush core:requirements — Zeigt Drupals Statusbericht an (entspricht admin/reports/status). Listet etwaige Probleme der Site auf.

drush core:requirements

drush core:edit — Öffnet die aktive services.yml in deinem Standard-Editor.

drush core:edit

Cache

drush cache:rebuild — Baut alle Caches neu auf. Das Drupal-8+-Äquivalent zu cache-clear all. Alias: cr

drush cache:rebuild

drush cr — Alias für cache:rebuild. Der am häufigsten genutzte Drush-Befehl.

drush cr

drush cache:clear <bin> — Leert einen bestimmten Cache-Bin (z. B. render, page, menu, css_js, theme, token).

drush cache:clear render

drush cache:get <cid> <bin> — Liest einen bestimmten Cache-Eintrag anhand seiner Cache-ID aus und zeigt ihn an.

drush cache:get my_module.data default

drush cache:set <cid> <data> <bin> — Schreibt einen beliebigen Wert in einen bestimmten Cache-Bin.

drush cache:set my_key "hello" default

Konfiguration

drush config:export — Exportiert die aktive Drupal-Konfiguration in das Sync-Verzeichnis (config/sync). Alias: cex

drush config:export

drush cex — Alias für config:export.

drush cex

drush config:import — Importiert die Konfiguration aus dem Sync-Verzeichnis in die aktive Datenbank-Konfiguration. Alias: cim

drush config:import

drush cim — Alias für config:import.

drush cim

drush config:import --partial — Importiert nur die im Sync-Verzeichnis vorhandenen Config-Dateien und ignoriert fehlende.

drush config:import --partial

drush config:status — Zeigt, welche Konfigurationselemente sich zwischen aktivem (DB) und Sync-Verzeichnis (Dateien) unterscheiden.

drush config:status

drush config:diff <name> — Zeigt den Unterschied zwischen aktiver und synchronisierter Config für ein bestimmtes Config-Element.

drush config:diff system.site

drush config:get <name> — Zeigt den vollständigen Wert eines Konfigurationsobjekts an.

drush config:get system.site

drush config:get <name> <key> — Liest einen bestimmten Schlüssel aus einem Konfigurationsobjekt aus.

drush config:get system.site name

drush config:set <name> <key> <value> — Setzt einen bestimmten Konfigurationsschlüssel auf einen neuen Wert.

drush config:set system.site name "My Drupal Site"

drush config:delete <name> — Löscht ein Konfigurationsobjekt vollständig aus dem aktiven Speicher.

drush config:delete my_module.settings

drush config:edit <name> — Öffnet ein Konfigurationselement im Editor. Änderungen werden beim Beenden gespeichert.

drush config:edit system.performance

Module & Themes (pm)

drush pm:list — Listet alle installierten Module und Themes mit ihrem Status auf. Alias: pml

drush pm:list

drush pm:list --status=enabled — Listet nur aktivierte Module und Themes auf.

drush pm:list --status=enabled

drush pm:list --type=module — Listet nur Module auf (keine Themes oder Profile).

drush pm:list --type=module

drush pm:enable <module> — Aktiviert ein oder mehrere Module. Drush löst Abhängigkeiten automatisch auf. Alias: en

drush pm:enable views devel

drush en <module> — Alias für pm:enable.

drush en admin_toolbar

drush pm:uninstall <module> — Deinstalliert ein oder mehrere Module und entfernt deren Konfiguration/Daten. Alias: pmu

drush pm:uninstall devel

drush pm:info <module> — Zeigt detaillierte Informationen zu einem Modul oder Theme an.

drush pm:info views

Updates & Deployment

drush updatedb — Führt ausstehende Datenbank-Update-Hooks aus (aus hook_update_N). Alias: updb

drush updatedb

drush updb — Alias für updatedb.

drush updb

drush updatedb --no-post-updates — Führt DB-Updates aus, überspringt aber Post-Update-Hooks.

drush updatedb --no-post-updates

drush deploy — Standard-Deployment-Sequenz: updatedb, config:import, cache:rebuild, deploy:hook. Nach dem Einspielen von Code verwenden.

drush deploy

drush deploy:hook — Führt alle ausstehenden hook_deploy_NAME()-Funktionen aus (Post-Deploy-Aufgaben).

drush deploy:hook

drush core:update — Spielt ausstehende Drupal-Core-Updates ein (enthält updb, cim, cr).

drush core:update

drush state:set system.maintenance_mode 1 --input-format=integer && drush cr — Aktiviert den Wartungsmodus und leert den Cache (vor einem Deployment).

drush state:set system.maintenance_mode 1 --input-format=integer && drush cr

drush state:set system.maintenance_mode 0 --input-format=integer && drush cr — Deaktiviert den Wartungsmodus und leert den Cache (nach einem Deployment).

drush state:set system.maintenance_mode 0 --input-format=integer && drush cr

Datenbank

drush sql:cli — Öffnet eine interaktive SQL-Shell, die mit der Drupal-Datenbank verbunden ist. Alias: sqlc

drush sql:cli

drush sql:query "<query>" — Führt eine SQL-Abfrage direkt gegen die Drupal-Datenbank aus. Alias: sqlq

drush sql:query "SELECT uid, name, mail FROM users_field_data LIMIT 10;"

drush sql:dump — Exportiert die vollständige Drupal-Datenbank als SQL-Dump nach stdout.

drush sql:dump > backup.sql

drush sql:dump --gzip --result-file=<file> — Exportiert die Datenbank in eine komprimierte SQL-Datei.

drush sql:dump --gzip --result-file=backup.sql

drush sql:dump --tables-list=<tables> — Dumpt nur bestimmte Tabellen (kommagetrennt).

drush sql:dump --tables-list=node,node_field_data

drush sql:drop — Löscht alle Tabellen der Drupal-Datenbank. Mit Vorsicht verwenden!

drush sql:drop

drush sql:sanitize — Bereinigt die Datenbank, indem E-Mail-Adressen verfremdet und Passwörter zurückgesetzt werden. Vor der Weitergabe auf Produktions-Dumps anwenden.

drush sql:sanitize

drush sql:sanitize --sanitize-password=<pass> — Bereinigt die Datenbank und setzt für alle Benutzer ein bestimmtes Passwort.

drush sql:sanitize --sanitize-password=admin

drush sql:connect — Gibt die DB-Verbindungszeichenfolge zur Verwendung mit anderen Tools aus.

drush sql:connect

drush sql:create — Erstellt die in settings.php definierte Datenbank (falls sie noch nicht existiert).

drush sql:create

Benutzerverwaltung

drush user:login — Erzeugt eine Einmal-Login-URL für Benutzer 1 (Admin). Alias: uli

drush user:login

drush uli — Alias für user:login. Öffnet eine Einmal-Login-URL für den Admin.

drush uli

drush user:login --name=<username> — Erzeugt eine Einmal-Login-URL für einen bestimmten Benutzer.

drush user:login --name=editor

drush user:info <username> — Zeigt Informationen zu einem bestimmten Benutzerkonto an.

drush user:info admin

drush user:create <username> --mail=<email> --password=<pass> — Erstellt ein neues Benutzerkonto.

drush user:create john --mail=john@example.com --password=secret

drush user:password <username> <password> — Setzt ein neues Passwort für ein Benutzerkonto. Alias: upwd

drush user:password admin newpassword123

drush upwd <username> <password> — Alias für user:password.

drush upwd admin admin

drush user:block <username> — Blockiert (deaktiviert) ein Benutzerkonto.

drush user:block spammer

drush user:unblock <username> — Hebt die Blockierung eines zuvor gesperrten Benutzerkontos auf.

drush user:unblock john

drush user:cancel <username> — Löscht ein Benutzerkonto.

drush user:cancel olduser

drush user:role:add <role> <username> — Fügt einem bestehenden Benutzer eine Rolle hinzu.

drush user:role:add editor john

drush user:role:remove <role> <username> — Entfernt eine Rolle von einem Benutzer.

drush user:role:remove editor john

State & Variablen

drush state:get <key> — Liest den Wert einer Drupal-State-Variable aus.

drush state:get system.cron_last

drush state:set <key> <value> — Setzt eine Drupal-State-Variable auf einen neuen Wert.

drush state:set system.maintenance_mode 1

drush state:delete <key> — Löscht eine Drupal-State-Variable.

drush state:delete mymodule.custom_flag

Cron & Queue

drush cron — Führt alle fälligen Cron-Aufgaben aus, wie sie von hook_cron() der Module definiert sind.

drush cron

drush queue:list — Listet alle verfügbaren Queues mit ihrer Anzahl an Einträgen auf.

drush queue:list

drush queue:run <queue> — Verarbeitet alle Einträge einer bestimmten Queue.

drush queue:run mymodule_import_queue

drush queue:run <queue> --items-limit=<n> — Verarbeitet nur eine begrenzte Anzahl an Queue-Einträgen.

drush queue:run mymodule_import_queue --items-limit=50

drush queue:delete <queue> — Löscht alle Einträge einer bestimmten Queue, ohne sie zu verarbeiten.

drush queue:delete mymodule_import_queue

Watchdog (Logging)

drush watchdog:show — Zeigt die jüngsten Watchdog-Logeinträge an. Alias: ws

drush watchdog:show

drush ws — Alias für watchdog:show.

drush ws

drush watchdog:show --count=<n> — Zeigt die letzten N Watchdog-Einträge an (Standard: 10).

drush watchdog:show --count=50

drush watchdog:show --severity=<level> — Filtert nach Schweregrad: debug, info, notice, warning, error, critical, alert, emergency.

drush watchdog:show --severity=error

drush watchdog:show --type=<type> — Filtert Watchdog-Meldungen nach Typ (z. B. php, cron, user, system).

drush watchdog:show --type=php

drush watchdog:show --filter=<string> — Filtert Watchdog-Meldungen, die eine bestimmte Zeichenkette enthalten.

drush watchdog:show --filter="Access denied"

drush watchdog:tail — Verfolgt das Watchdog-Log in Echtzeit (wie tail -f). Alias: wt

drush watchdog:tail

drush watchdog:delete --severity=<level> — Löscht Watchdog-Einträge eines bestimmten Schweregrads.

drush watchdog:delete --severity=debug

drush watchdog:delete --all — Löscht alle Watchdog-Einträge.

drush watchdog:delete --all

Site-Installation

drush site:install — Installiert Drupal mit dem Standard-Profil. Löscht und erstellt alle Tabellen neu. Alias: si

drush site:install

drush si <profile> — Installiert Drupal mit einem bestimmten Installationsprofil.

drush si minimal

drush site:install --db-url=mysql://user:pass@localhost/dbname — Installiert Drupal mit einer bestimmten Datenbank-Verbindungszeichenfolge.

drush site:install --db-url=mysql://drupal:drupal@localhost/drupal

drush site:install --account-name=<name> --account-pass=<pass> --account-mail=<email> — Setzt die Zugangsdaten des Admin-Kontos während der Installation.

drush site:install --account-name=admin --account-pass=admin --account-mail=admin@example.com

drush site:install --site-name="<name>" --site-mail=<email> — Setzt Site-Name und Site-E-Mail während der Installation.

drush site:install --site-name="My Drupal" --site-mail=info@example.com

drush site:install --existing-config — Installiert Drupal aus bestehender Konfiguration im Verzeichnis config/sync.

drush site:install --existing-config

Aliase & Multi-Site

drush @<alias> <command> — Führt einen Befehl auf einer entfernten oder alternativen Drupal-Site aus, die über einen Site-Alias definiert ist.

drush @prod cache:rebuild

drush site:alias — Zeigt alle definierten Site-Aliase an.

drush site:alias

drush sql:sync @<source> @<target> — Kopiert die Datenbank von einem Site-Alias zu einem anderen (z. B. Prod nach Local).

drush sql:sync @prod @self

drush rsync @<source>:%files/ @<target>:%files/ — Synchronisiert Dateien zwischen zwei Site-Aliasen per rsync.

drush rsync @prod:%files/ @self:%files/

drush --uri=<uri> <command> — Führt einen Befehl gezielt für eine bestimmte Multisite-URI aus.

drush --uri=sub.example.com cache:rebuild

drush --root=/var/www/drupal <command> — Zielt auf eine Drupal-Installation in einem bestimmten Verzeichnispfad.

drush --root=/var/www/drupal status

Generate (Code-Generierung)

drush generate — Listet alle verfügbaren Code-Generatoren auf.

drush generate

drush generate module — Erstellt interaktiv das Grundgerüst eines neuen Custom-Moduls mit allen Boilerplate-Dateien.

drush generate module

drush generate controller — Generiert eine Drupal-Controller-Klasse für ein Modul.

drush generate controller

drush generate service — Generiert eine Drupal-Service-Klasse samt Service-Definition.

drush generate service

drush generate form — Generiert eine Drupal-Formular-Klasse (ConfigFormBase oder FormBase).

drush generate form

drush generate plugin:block — Generiert eine eigene Block-Plugin-Klasse.

drush generate plugin:block

drush generate plugin:field:type — Generiert ein eigenes Field-Type-Plugin.

drush generate plugin:field:type

drush generate theme — Erstellt das Grundgerüst eines neuen Custom-Themes mit allen erforderlichen Dateien.

drush generate theme

drush generate hook — Generiert die Implementierung eines Drupal-Hooks in der .module-Datei eines Moduls.

drush generate hook

Typischer Deployment-Workflow

git pull && drush deploy — Holt den neuesten Code und führt die vollständige Drupal-Deploy-Sequenz aus (updb + cim + cr + deploy:hook).

git pull && drush deploy

drush state:set system.maintenance_mode 1 --input-format=integer && drush cr — Schritt 1: Wartungsmodus vor dem Deployment aktivieren.

drush state:set system.maintenance_mode 1 --input-format=integer && drush cr

drush updatedb -y && drush config:import -y && drush cache:rebuild — Schritt 2: DB-Updates ausführen, Config importieren, Caches neu aufbauen.

drush updatedb -y && drush config:import -y && drush cache:rebuild

drush state:set system.maintenance_mode 0 --input-format=integer && drush cr — Schritt 3: Wartungsmodus nach dem Deployment deaktivieren.

drush state:set system.maintenance_mode 0 --input-format=integer && drush cr

drush sql:dump --gzip --result-file=pre-deploy.sql && drush deploy — Vor dem Ausführen des deploy-Befehls einen DB-Backup-Dump anlegen.

drush sql:dump --gzip --result-file=pre-deploy.sql && drush deploy

drush sql:sync @prod @self && drush config:import -y && drush cr — Produktions-DB lokal einspielen, lokale Config importieren, Cache neu aufbauen.

drush sql:sync @prod @self && drush config:import -y && drush cr

Fazit

Drush macht aus wiederkehrenden Drupal-Aufgaben kurze, wiederholbare Befehle – genau das, was du für saubere Deployments und reproduzierbare Umgebungen brauchst. Einige Kommandos solltest du jedoch mit Respekt behandeln: sql:drop löscht ausnahmslos alle Tabellen deiner Datenbank, sql:cli und sql:dump legen die Datenbank-Zugangsdaten offen, und updatedb (updb) wie auch cache:rebuild (cr) führst du in Produktion nur bewusst und idealerweise im Wartungsmodus aus. Lege vor jedem größeren Eingriff einen Datenbank-Dump an, dann ist ein Fehlgriff schnell rückgängig gemacht.

  • Drush-Dokumentation – offizielle Dokumentation mit Befehlsreferenz und Anleitungen (englisch)
  • Drupal-Dokumentation – offizielle Drupal-Dokumentation rund um Entwicklung und Betrieb (englisch)

Verwandte Kommandos

  • artisan – Kommandozeilen-Tool des Laravel-Frameworks
  • cargo – Build-Tool und Paketmanager für Rust
  • composer – Abhängigkeitsmanager für PHP-Projekte