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 --versiondrush status — Zeigt den Status der Drupal-Site an: Root-Verzeichnis, URI, Datenbank, PHP-Version, Drush-Version usw.
drush statusdrush status --fields=drupal-version,db-status — Zeigt nur bestimmte Statusfelder an.
drush status --fields=drupal-version,db-statusdrush list — Listet alle verfügbaren Drush-Befehle auf.
drush listdrush list --filter=<group> — Listet die Befehle einer bestimmten Gruppe auf (z. B. cache, config, pm, sql, user).
drush list --filter=configdrush help <command> — Zeigt Hilfe und alle Optionen zu einem bestimmten Drush-Befehl an.
drush help config:exportdrush core:requirements — Zeigt Drupals Statusbericht an (entspricht admin/reports/status). Listet etwaige Probleme der Site auf.
drush core:requirementsdrush core:edit — Öffnet die aktive services.yml in deinem Standard-Editor.
drush core:editCache
drush cache:rebuild — Baut alle Caches neu auf. Das Drupal-8+-Äquivalent zu cache-clear all. Alias: cr
drush cache:rebuilddrush cr — Alias für cache:rebuild. Der am häufigsten genutzte Drush-Befehl.
drush crdrush cache:clear <bin> — Leert einen bestimmten Cache-Bin (z. B. render, page, menu, css_js, theme, token).
drush cache:clear renderdrush cache:get <cid> <bin> — Liest einen bestimmten Cache-Eintrag anhand seiner Cache-ID aus und zeigt ihn an.
drush cache:get my_module.data defaultdrush cache:set <cid> <data> <bin> — Schreibt einen beliebigen Wert in einen bestimmten Cache-Bin.
drush cache:set my_key "hello" defaultKonfiguration
drush config:export — Exportiert die aktive Drupal-Konfiguration in das Sync-Verzeichnis (config/sync). Alias: cex
drush config:exportdrush cex — Alias für config:export.
drush cexdrush config:import — Importiert die Konfiguration aus dem Sync-Verzeichnis in die aktive Datenbank-Konfiguration. Alias: cim
drush config:importdrush cim — Alias für config:import.
drush cimdrush config:import --partial — Importiert nur die im Sync-Verzeichnis vorhandenen Config-Dateien und ignoriert fehlende.
drush config:import --partialdrush config:status — Zeigt, welche Konfigurationselemente sich zwischen aktivem (DB) und Sync-Verzeichnis (Dateien) unterscheiden.
drush config:statusdrush config:diff <name> — Zeigt den Unterschied zwischen aktiver und synchronisierter Config für ein bestimmtes Config-Element.
drush config:diff system.sitedrush config:get <name> — Zeigt den vollständigen Wert eines Konfigurationsobjekts an.
drush config:get system.sitedrush config:get <name> <key> — Liest einen bestimmten Schlüssel aus einem Konfigurationsobjekt aus.
drush config:get system.site namedrush 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.settingsdrush config:edit <name> — Öffnet ein Konfigurationselement im Editor. Änderungen werden beim Beenden gespeichert.
drush config:edit system.performanceModule & Themes (pm)
drush pm:list — Listet alle installierten Module und Themes mit ihrem Status auf. Alias: pml
drush pm:listdrush pm:list --status=enabled — Listet nur aktivierte Module und Themes auf.
drush pm:list --status=enableddrush pm:list --type=module — Listet nur Module auf (keine Themes oder Profile).
drush pm:list --type=moduledrush pm:enable <module> — Aktiviert ein oder mehrere Module. Drush löst Abhängigkeiten automatisch auf. Alias: en
drush pm:enable views develdrush en <module> — Alias für pm:enable.
drush en admin_toolbardrush pm:uninstall <module> — Deinstalliert ein oder mehrere Module und entfernt deren Konfiguration/Daten. Alias: pmu
drush pm:uninstall develdrush pm:info <module> — Zeigt detaillierte Informationen zu einem Modul oder Theme an.
drush pm:info viewsUpdates & Deployment
drush updatedb — Führt ausstehende Datenbank-Update-Hooks aus (aus hook_update_N). Alias: updb
drush updatedbdrush updb — Alias für updatedb.
drush updbdrush updatedb --no-post-updates — Führt DB-Updates aus, überspringt aber Post-Update-Hooks.
drush updatedb --no-post-updatesdrush deploy — Standard-Deployment-Sequenz: updatedb, config:import, cache:rebuild, deploy:hook. Nach dem Einspielen von Code verwenden.
drush deploydrush deploy:hook — Führt alle ausstehenden hook_deploy_NAME()-Funktionen aus (Post-Deploy-Aufgaben).
drush deploy:hookdrush core:update — Spielt ausstehende Drupal-Core-Updates ein (enthält updb, cim, cr).
drush core:updatedrush 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 crdrush 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 crDatenbank
drush sql:cli — Öffnet eine interaktive SQL-Shell, die mit der Drupal-Datenbank verbunden ist. Alias: sqlc
drush sql:clidrush 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.sqldrush sql:dump --gzip --result-file=<file> — Exportiert die Datenbank in eine komprimierte SQL-Datei.
drush sql:dump --gzip --result-file=backup.sqldrush sql:dump --tables-list=<tables> — Dumpt nur bestimmte Tabellen (kommagetrennt).
drush sql:dump --tables-list=node,node_field_datadrush sql:drop — Löscht alle Tabellen der Drupal-Datenbank. Mit Vorsicht verwenden!
drush sql:dropdrush 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:sanitizedrush sql:sanitize --sanitize-password=<pass> — Bereinigt die Datenbank und setzt für alle Benutzer ein bestimmtes Passwort.
drush sql:sanitize --sanitize-password=admindrush sql:connect — Gibt die DB-Verbindungszeichenfolge zur Verwendung mit anderen Tools aus.
drush sql:connectdrush sql:create — Erstellt die in settings.php definierte Datenbank (falls sie noch nicht existiert).
drush sql:createBenutzerverwaltung
drush user:login — Erzeugt eine Einmal-Login-URL für Benutzer 1 (Admin). Alias: uli
drush user:logindrush uli — Alias für user:login. Öffnet eine Einmal-Login-URL für den Admin.
drush ulidrush user:login --name=<username> — Erzeugt eine Einmal-Login-URL für einen bestimmten Benutzer.
drush user:login --name=editordrush user:info <username> — Zeigt Informationen zu einem bestimmten Benutzerkonto an.
drush user:info admindrush user:create <username> --mail=<email> --password=<pass> — Erstellt ein neues Benutzerkonto.
drush user:create john --mail=john@example.com --password=secretdrush user:password <username> <password> — Setzt ein neues Passwort für ein Benutzerkonto. Alias: upwd
drush user:password admin newpassword123drush upwd <username> <password> — Alias für user:password.
drush upwd admin admindrush user:block <username> — Blockiert (deaktiviert) ein Benutzerkonto.
drush user:block spammerdrush user:unblock <username> — Hebt die Blockierung eines zuvor gesperrten Benutzerkontos auf.
drush user:unblock johndrush user:cancel <username> — Löscht ein Benutzerkonto.
drush user:cancel olduserdrush user:role:add <role> <username> — Fügt einem bestehenden Benutzer eine Rolle hinzu.
drush user:role:add editor johndrush user:role:remove <role> <username> — Entfernt eine Rolle von einem Benutzer.
drush user:role:remove editor johnState & Variablen
drush state:get <key> — Liest den Wert einer Drupal-State-Variable aus.
drush state:get system.cron_lastdrush state:set <key> <value> — Setzt eine Drupal-State-Variable auf einen neuen Wert.
drush state:set system.maintenance_mode 1drush state:delete <key> — Löscht eine Drupal-State-Variable.
drush state:delete mymodule.custom_flagCron & Queue
drush cron — Führt alle fälligen Cron-Aufgaben aus, wie sie von hook_cron() der Module definiert sind.
drush crondrush queue:list — Listet alle verfügbaren Queues mit ihrer Anzahl an Einträgen auf.
drush queue:listdrush queue:run <queue> — Verarbeitet alle Einträge einer bestimmten Queue.
drush queue:run mymodule_import_queuedrush queue:run <queue> --items-limit=<n> — Verarbeitet nur eine begrenzte Anzahl an Queue-Einträgen.
drush queue:run mymodule_import_queue --items-limit=50drush queue:delete <queue> — Löscht alle Einträge einer bestimmten Queue, ohne sie zu verarbeiten.
drush queue:delete mymodule_import_queueWatchdog (Logging)
drush watchdog:show — Zeigt die jüngsten Watchdog-Logeinträge an. Alias: ws
drush watchdog:showdrush ws — Alias für watchdog:show.
drush wsdrush watchdog:show --count=<n> — Zeigt die letzten N Watchdog-Einträge an (Standard: 10).
drush watchdog:show --count=50drush watchdog:show --severity=<level> — Filtert nach Schweregrad: debug, info, notice, warning, error, critical, alert, emergency.
drush watchdog:show --severity=errordrush watchdog:show --type=<type> — Filtert Watchdog-Meldungen nach Typ (z. B. php, cron, user, system).
drush watchdog:show --type=phpdrush 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:taildrush watchdog:delete --severity=<level> — Löscht Watchdog-Einträge eines bestimmten Schweregrads.
drush watchdog:delete --severity=debugdrush watchdog:delete --all — Löscht alle Watchdog-Einträge.
drush watchdog:delete --allSite-Installation
drush site:install — Installiert Drupal mit dem Standard-Profil. Löscht und erstellt alle Tabellen neu. Alias: si
drush site:installdrush si <profile> — Installiert Drupal mit einem bestimmten Installationsprofil.
drush si minimaldrush 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/drupaldrush 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.comdrush 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.comdrush site:install --existing-config — Installiert Drupal aus bestehender Konfiguration im Verzeichnis config/sync.
drush site:install --existing-configAliase & 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:rebuilddrush site:alias — Zeigt alle definierten Site-Aliase an.
drush site:aliasdrush sql:sync @<source> @<target> — Kopiert die Datenbank von einem Site-Alias zu einem anderen (z. B. Prod nach Local).
drush sql:sync @prod @selfdrush 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:rebuilddrush --root=/var/www/drupal <command> — Zielt auf eine Drupal-Installation in einem bestimmten Verzeichnispfad.
drush --root=/var/www/drupal statusGenerate (Code-Generierung)
drush generate — Listet alle verfügbaren Code-Generatoren auf.
drush generatedrush generate module — Erstellt interaktiv das Grundgerüst eines neuen Custom-Moduls mit allen Boilerplate-Dateien.
drush generate moduledrush generate controller — Generiert eine Drupal-Controller-Klasse für ein Modul.
drush generate controllerdrush generate service — Generiert eine Drupal-Service-Klasse samt Service-Definition.
drush generate servicedrush generate form — Generiert eine Drupal-Formular-Klasse (ConfigFormBase oder FormBase).
drush generate formdrush generate plugin:block — Generiert eine eigene Block-Plugin-Klasse.
drush generate plugin:blockdrush generate plugin:field:type — Generiert ein eigenes Field-Type-Plugin.
drush generate plugin:field:typedrush generate theme — Erstellt das Grundgerüst eines neuen Custom-Themes mit allen erforderlichen Dateien.
drush generate themedrush generate hook — Generiert die Implementierung eines Drupal-Hooks in der .module-Datei eines Moduls.
drush generate hookTypischer 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 deploydrush 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 crdrush 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:rebuilddrush 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 crdrush 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 deploydrush 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.
Weiterführende Links
- Drush-Dokumentation – offizielle Dokumentation mit Befehlsreferenz und Anleitungen (englisch)
- Drupal-Dokumentation – offizielle Drupal-Dokumentation rund um Entwicklung und Betrieb (englisch)