You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Bash脚本从env.php提取MySQL的dbname、用户名及密码?

提取Magento env.php中MySQL认证信息的Bash方案

一、定位正确的env.php文件

由于存在备份、开发站点等冗余文件,可通过路径过滤排除非生产环境的文件,命令如下:

find ~ -path "*/html/app/etc/env.php" ! -path "*backup*" ! -path "*dev*" ! -path "*staging*" ! -path "*test*"
  • 该命令仅查找用户家目录下标准html/app/etc/路径下的env.php,同时排除包含backup/dev/staging/test的备份/测试站点路径
  • 如果未找到结果,可去掉过滤条件,直接查找所有env.php,再通过ls -lt查看修改时间判断活跃站点(最新修改的大概率是正在使用的):
find ~ -path "*/html/app/etc/env.php" | xargs ls -lt

二、提取指定配置块的MySQL信息

使用awk脚本精准定位db配置块下的default连接,仅提取目标字段,避免匹配其他配置块(如Redis):

单文件提取命令

awk -F"'" '/\'db\' => \[/{in_db=1} in_db && /\'default\' => \[/{in_default=1} in_default && /\'dbname\'|username|password/{print $2": "$4} in_default && /\]/{in_default=0} in_db && /\]/{in_db=0}' /path/to/your/env.php

批量提取脚本

将以下内容保存为extract_mysql_creds.sh,方便日常使用:

#!/bin/bash

# 查找符合条件的env.php文件
env_files=$(find ~ -path "*/html/app/etc/env.php" ! -path "*backup*" ! -path "*dev*" ! -path "*staging*" ! -path "*test*")

# 如果未找到,放宽条件查找所有相关文件
if [ -z "$env_files" ]; then
    echo "未找到过滤后的文件,列出所有可能的env.php:"
    env_files=$(find ~ -path "*/html/app/etc/env.php")
fi

# 遍历文件并提取信息
for file in $env_files; do
    echo "=== 来自文件: $file ==="
    awk -F"'" '/\'db\' => \[/{in_db=1} in_db && /\'default\' => \[/{in_default=1} in_default && /\'dbname\'|username|password/{print $2": "$4} in_default && /\]/{in_default=0} in_db && /\]/{in_db=0}' "$file"
    echo ""
done

使用步骤

  1. 赋予脚本执行权限:
chmod +x extract_mysql_creds.sh
  1. 运行脚本:
./extract_mysql_creds.sh

脚本说明

  • awk通过标记变量in_db和in_default,仅在进入db配置块及子级default连接块时,提取dbname/username/password字段
  • 以单引号'为分隔符,直接获取键值对中的内容,避免复杂的正则匹配

内容的提问来源于stack exchange,提问作者procyon108

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 19:50:21