Drush (Drupal Shell) 是一个命令行界面工具,用于管理和维护 Drupal 网站,它极大地简化了开发、部署和日常管理任务,让你无需通过网页界面就能完成大量操作。

Drush 是什么?为什么用它?
想象一下,你不再需要:
- 一遍又一遍地点击网页界面来安装模块。
- 手动去
sites/default/files目录里查找文件。 - 在数据库中手动执行
UPDATE语句来修改内容。
有了 Drush,你只需要在终端中输入简洁的命令,就能瞬间完成这些操作。
核心优势:
- 高效自动化:批量执行任务,节省大量时间。
- 远程管理:可以通过 SSH 在本地管理远程服务器上的 Drupal 站点。
- 强大的开发工具:提供代码生成、数据库同步等开发利器。
- 脚本化:可以将常用操作写成脚本,实现一键部署和维护。
安装和准备工作
安装 Drush
对于 Drupal 9 及以上版本:

强烈推荐使用 Composer 来安装 Drush,并将其作为项目依赖,这是最现代、最可靠的方式。
在你的 Drupal 项目的根目录下(即 composer.json 文件所在目录),运行:
composer require drush/drush
安装完成后,vendor/bin/drush 命令就可以使用了。
对于 Drupal 7 或 8:

Drush 9 及以上版本不再支持 Drupal 7,对于 Drupal 7,你需要使用 Drush 8,可以通过 Composer 安装,但需要指定版本:
# 对于 Drupal 8 composer require drush/drush # 对于 Drupal 7 composer require drush/drush:^8.4
验证安装
进入你的 Drupal 项目根目录,运行以下命令来检查 Drush 是否能正确连接到你的 Drupal 网站:
# 使用绝对路径或相对路径 ./vendor/bin/drush status
如果看到类似下面的输出,说明安装成功:
Drupal version : 10.1.0
Site URI : http://default
Database driver : mysql
Database hostname: db
Database port : 3306
Database username: drupal
Database name : drupal
Database : ok
Drupal root : /path/to/your/drupal/web
Drupal settings : sites/default/settings.php
Drupal bootstrap: Successful
Default theme : olivero
Admin theme : claro
PHP binary : /usr/bin/php8.2
PHP config : /etc/php/8.2/cli/php.ini
PHP OS : Linux
Drush script : /path/to/your/drupal/vendor/bin/drush
Drush version : 12.3.0
Drush temp : /tmp
Drush configs : /path/to/your/drupal/drush/drush.yml
Install profile : standard
重要提示:
- 在日常使用中,为了方便,你可以将
vendor/bin目录添加到系统的PATH环境变量中,这样你就可以直接使用drush命令,而无需输入./vendor/bin/drush。 - Drush 需要正确的文件和目录权限才能工作,
sites/default目录和settings.php文件必须是可写的。
核心命令分类与示例
Drush 的命令非常多,下面是一些最常用和最核心的命令分类。
站点状态与信息
-
drush status或drush st显示 Drupal 站点的核心信息,如版本、数据库、根目录等,这是排查问题的第一步。
-
drush core:statusstatus命令的别名,功能相同。
-
drush pm:list或drush pml- 列出所有已安装和可用的项目(模块、主题等)。
--type=module只显示模块。--status=enabled只显示已启用的模块。
-
drush pm:info <module_name>显示某个特定模块的详细信息,如版本、描述、项目页面等。
模块与主题管理
-
drush pm:install <module_name>- 从 Drupal.org 下载并安装一个模块。
- 示例:
drush pm:install views(安装 Views 模块)
-
drush pm:uninstall <module_name>- 卸载一个模块,这会将其从
system表中移除,但通常不会删除其数据(除非模块另有规定)。 - 示例:
drush pm:uninstall overlay
- 卸载一个模块,这会将其从
-
drush en <module_name>(enable)- 启用一个已安装的模块。
- 示例:
drush en views(启用 Views 模块)
-
drush dis <module_name>(disable)- 禁用一个已启用的模块。
- 示例:
drush dis toolbar(禁用 Toolbar 模块)
-
drush theme:install <theme_name>安装一个主题。
-
drush theme:enable <theme_name>启用一个主题。
-
drush theme:uninstall <theme_name>卸载一个主题。
用户管理
-
drush user:login为当前站点的管理员(UID 1)生成一个一次性登录链接,并在浏览器中自动打开,非常方便!
-
drush uli <username>- 为指定用户生成一次性登录链接。
- 示例:
drush uli john.doe
-
drush user:create <username> --mail=<email> --password=<password>- 创建一个新用户。
- 示例:
drush user:create editor --mail=editor@example.com --password=securepassword
-
drush user:block <username>封禁一个用户。
-
drush user:unblock <username>解封一个用户。
内容与词汇表管理
-
drush cron手动执行 Drupal 的 Cron 任务,例如清理缓存、发送邮件、更新节点等。
-
drush config:export- 将当前站点的所有配置导出到
config/sync目录,这是用于在不同环境(开发、测试、生产)之间同步配置的核心命令。
- 将当前站点的所有配置导出到
-
drush config:import- 从
config/sync目录导入配置,覆盖当前站点的配置。(非常危险,请谨慎使用!)
- 从
-
drush node:delete <nid>- 删除指定 ID 的节点。
- 示例:
drush node:delete 123
-
drush node:access-rebuild重建节点访问权限,当你修改了节点访问控制规则后需要运行此命令。
-
drush taxonomy:term:delete <tid>删除指定 ID 的分类词。
清理与维护
-
drush cache:rebuild或drush cr- 最常用的命令之一! 清理所有缓存,当你修改了代码或配置后,通常需要运行它才能看到变化。
-
drush sql:drop- (极其危险!) 删除当前 Drupal 站点的整个数据库,通常在重建本地开发环境时使用。
-
drush sql:cli- 在当前 Drupal 数据库上打开一个命令行客户端(如
mysql),让你可以直接执行 SQL 语句。
- 在当前 Drupal 数据库上打开一个命令行客户端(如
-
drush sql:query "SELECT * FROM node LIMIT 10;"直接执行一条 SQL 查询并显示结果。
-
drush watchlog- 实时监视 Drupal 的日志文件(
./sites/default/files/php/watchdog.log),方便调试。
- 实时监视 Drupal 的日志文件(
开发者工具
-
drush generate- 一个强大的代码生成器,可以快速生成模块、插件、主题、内容等骨架代码。
- 示例:
drush generate module
-
drush debug:router显示 Drupal 的所有路由信息,用于开发自定义路径时查看路由定义。
高级用法
使用别名管理多个站点
如果你有多个 Drupal 站点,可以在 ~/.drush/drush.yml 或项目内的 drush/drush.yml 文件中定义别名,从而轻松地在它们之间切换。
示例配置 (drush/sites/my.site.yml):
mylocal: root: /var/www/html/drupal uri: http://local.drupal
然后你就可以这样使用:
# 在 mylocal 站点上执行状态查询 drush @mylocal status # 在 mylocal 站点上清除缓存 drush @mylocal cr
使用 Drush 命令脚本
你可以将一系列 Drush 命令写在一个文本文件中(每行一个命令),然后使用 drush php-script 来执行它。
示例脚本 (update_content.php):
<?php
// 这是一个 PHP 脚本,但可以通过 Drush 运行
// 加载 Drupal
$site = drush_get_context('DRUSH_SELECTED_SITE');
chdir($site->root);
require_once $site->root . '/includes/bootstrap.inc';
drush_bootstrap(DRUSH_BOOTSTRAP_DRUPAL);
// 执行一些操作
$nids = db_query("SELECT nid FROM node WHERE type = 'article'")->fetchCol();
foreach ($nids as $nid) {
$node = Node::load($nid);
$node->set('sticky', 1);
$node->save();
drush_print("Node $nid has been stickied.");
}
运行脚本:
drush php-script update_content.php
常见问题与技巧
-
命令找不到?
- 确保你位于 Drupal 项目的根目录下。
- 确保你使用了正确的路径(
./vendor/bin/drush)或者已经将vendor/bin添加到了PATH。 - 检查
drush status输出中的Drush script路径是否正确。
-
权限问题
- 确保 Web 服务器用户(如
www-data,apache)对sites/default目录和settings.php文件有写入权限。
- 确保 Web 服务器用户(如
-
drush cr无效?- 检查你的模块或主题是否有语法错误。
- 尝试清除 PHP 的 OPcache:
drush php-eval 'opcache_reset();'。 - 检查
sites/default/files目录是否有足够的权限。
-
获取帮助
drush或drush help:列出所有可用命令。drush help <command>:查看特定命令的详细用法和选项。drush topic:列出 Drush 的帮助文档主题。
Drush 是 Drupal 开发者和管理员的必备工具,虽然一开始需要花时间学习,但它带来的效率提升是巨大的,从简单的 drush cr 到复杂的 drush config:export/import,熟练掌握 Drush 将让你如虎添翼,建议从最常用的几个命令开始,逐步探索其强大的功能。
