![如何理解 /etc/default/automysqlbackup 中的以下命令?](https://linux22.com/image/195021/%E5%A6%82%E4%BD%95%E7%90%86%E8%A7%A3%20%2Fetc%2Fdefault%2Fautomysqlbackup%20%E4%B8%AD%E7%9A%84%E4%BB%A5%E4%B8%8B%E5%91%BD%E4%BB%A4%EF%BC%9F.png)
我试图理解/etc/default/automysqlbackup
文件中的以下命令:
USERNAME=`grep user /etc/mysql/debian.cnf | tail -n 1 | cut -d"=" -f2 | awk '{print $1}'`
PASSWORD=`grep password /etc/mysql/debian.cnf | tail -n 1 | cut -d"=" -f2 | awk '{print $1}'`
DBNAMES=`find /var/lib/mysql -mindepth 1 -maxdepth 1 -type d | cut -d'/' -f5 | grep -v ^mysql\$ | tr \\\r\\\n ,\ `
DBNAMES=`mysql --defaults-file=/etc/mysql/debian.cnf --execute="SHOW DATABASES" | awk '{print $1}' | grep -v ^Database$ | grep -v ^mysql$ | grep -v ^performance_schema$ | grep -v ^information_schema$ | tr \\\r\\\n ,\ `
但我根本不明白。如果有人能向我解释一下那里发生的事情,我将非常感激。
答案1
USERNAME=`grep user /etc/mysql/debian.cnf | tail -n 1 | cut -d"=" -f2 | awk '{print $1}'`
使用以下命令运行管道:
grep user /etc/mysql/debian.cnf
,从中提取所有包含“用户”的行/etc/mysql/debian.cnf
;tail -n 1
,仅显示其输入的最后一行;cut -d"=" -f2
,提取由“=”分隔的行的第二部分;awk '{print $1}'
,这会删除该行中第一个单词周围的所有空格。
所有这一切的目的(未完美实现)是提取分配给user
in 的最后一个值/etc/mysql/debian.cnf
。结果存储在名为 的变量中USERNAME
。
线路PASSWORD
相似。
DBNAMES=`find /var/lib/mysql -mindepth 1 -maxdepth 1 -type d | cut -d'/' -f5 | grep -v ^mysql\$ | tr \\\r\\\n ,\ `
运行以下命令:
find /var/lib/mysql -mindepth 1 -maxdepth 1 -type d
,其中列出了 中的目录/var/lib/mysql
及其完整路径;cut -d'/' -f5
,提取由“/”分隔的第五个字段,IE目录的名称;grep -v ^mysql\$
,这会删除任何与“mysql”完全匹配的行;tr \\\r\\\n ,\
,它将所有回车符替换为“,”,并将所有换行符替换为空格。
目的是列出 中的所有目录/var/lib/mysql
,用空格分隔,不包括/var/lib/mysql/mysql
目录。结果存储在名为 的变量中DBNAMES
。
DBNAMES=`mysql --defaults-file=/etc/mysql/debian.cnf --execute="SHOW DATABASES" | awk '{print $1}' | grep -v ^Database$ | grep -v ^mysql$ | grep -v ^performance_schema$ | grep -v ^information_schema$ | tr \\\r\\\n ,\ `
具有相同的目的,但它解析MySQL命令的输出SHOW DATABASES
。awk '{print $1}'
用于从每一行中提取第一个单词,然后所有的grep
s 过滤掉各种值。