菜鸟科技网

Drush命令有哪些常用操作?

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

Drush命令有哪些常用操作?-图1
(图片来源网络,侵删)

Drush 是什么?为什么用它?

想象一下,你不再需要:

  • 一遍又一遍地点击网页界面来安装模块。
  • 手动去 sites/default/files 目录里查找文件。
  • 在数据库中手动执行 UPDATE 语句来修改内容。

有了 Drush,你只需要在终端中输入简洁的命令,就能瞬间完成这些操作。

核心优势:

  • 高效自动化:批量执行任务,节省大量时间。
  • 远程管理:可以通过 SSH 在本地管理远程服务器上的 Drupal 站点。
  • 强大的开发工具:提供代码生成、数据库同步等开发利器。
  • 脚本化:可以将常用操作写成脚本,实现一键部署和维护。

安装和准备工作

安装 Drush

对于 Drupal 9 及以上版本:

Drush命令有哪些常用操作?-图2
(图片来源网络,侵删)

强烈推荐使用 Composer 来安装 Drush,并将其作为项目依赖,这是最现代、最可靠的方式。

在你的 Drupal 项目的根目录下(即 composer.json 文件所在目录),运行:

composer require drush/drush

安装完成后,vendor/bin/drush 命令就可以使用了。

对于 Drupal 7 或 8:

Drush命令有哪些常用操作?-图3
(图片来源网络,侵删)

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 statusdrush st

    显示 Drupal 站点的核心信息,如版本、数据库、根目录等,这是排查问题的第一步。

  • drush core:status

    • status 命令的别名,功能相同。
  • drush pm:listdrush 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:rebuilddrush cr

    • 最常用的命令之一! 清理所有缓存,当你修改了代码或配置后,通常需要运行它才能看到变化。
  • drush sql:drop

    • (极其危险!) 删除当前 Drupal 站点的整个数据库,通常在重建本地开发环境时使用。
  • drush sql:cli

    • 在当前 Drupal 数据库上打开一个命令行客户端(如 mysql),让你可以直接执行 SQL 语句。
  • drush sql:query "SELECT * FROM node LIMIT 10;"

    直接执行一条 SQL 查询并显示结果。

  • drush watchlog

    • 实时监视 Drupal 的日志文件(./sites/default/files/php/watchdog.log),方便调试。

开发者工具

  • 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 文件有写入权限。
  • drush cr 无效?

    • 检查你的模块或主题是否有语法错误。
    • 尝试清除 PHP 的 OPcache:drush php-eval 'opcache_reset();'
    • 检查 sites/default/files 目录是否有足够的权限。
  • 获取帮助

    • drushdrush help:列出所有可用命令。
    • drush help <command>:查看特定命令的详细用法和选项。
    • drush topic:列出 Drush 的帮助文档主题。

Drush 是 Drupal 开发者和管理员的必备工具,虽然一开始需要花时间学习,但它带来的效率提升是巨大的,从简单的 drush cr 到复杂的 drush config:export/import,熟练掌握 Drush 将让你如虎添翼,建议从最常用的几个命令开始,逐步探索其强大的功能。

分享:
扫描分享到社交APP
上一篇
下一篇