我在一家网站托管公司工作。我是一个绿色,作为新手,我对客户的服务器只有非根权限。通常,我需要排除mysql故障。因为我没有根权限,我必须使用客户的mysql凭据。这些可以在
~/<domain>/html/app/etc/env.php
示例块:
'db' => [
'table_prefix' => '',
'connection' => [
'default' => [
'host' => 'localhost',
'dbname' => 'xxxxx',
'username' => 'xxxxx',
'password' => 'xxxxx',
'model' => 'mysql4',
'engine' => 'innodb',
'initStatements' => 'SET NAMES utf8;',
'active' => '1',
'driver_options' => [
1014 => false
我需要从每个唯一服务器上的这个文件块中提取dbname、username和password。到目前为止,我一直使用cat,但是由于每个服务器都有其唯一路径的env.php(基于域名)我不知道如何一次性完成这个操作。使用find来搜索~/中的env.php是不起作用的,因为客户经常会复制他们的站点用于备份和开发目的,创建多个同名文件。
我的bash是非常基本的。任何提示都很感激,会让我的工作效率高得多。
到目前为止,我一直在手动移动到网站目录,并导航到我需要的文件。这很耗时。
编辑:使用基本的grep来查找文件中的这些字段不起作用,因为它返回所有块(redis等)的凭据,而不仅仅是mysql用户名/密码。
2条答案
按热度按时间carvr3hs1#
sed
可以很好地添加到您的工具箱中,因为您可以指定范围切换和要执行的块等内容。显然,
awk
非常适合于编程性更强的解决方案,但是已经有人解决了这个问题。2admgd592#
一个
grep
解决方案依赖于与您的示例匹配的'db'配置块的格式,该解决方案将使用grep的-B
开关来请求与=> 'mysql[0-9]*'
匹配的行之前的3行。这假定前面的3行是'dbname,username,and password'。因此,这可能相当脆弱。另一个选项(可能更不脆弱)是使用
awk
:这个awk命令将显式地在数据库配置块中查找dbname、password和username行,然后打印这些配置的值,该命令还将去掉输出中的单引号和尾随逗号。