/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
、「user」を含むすべての行を抽出します/etc/mysql/debian.cnf
。tail -n 1
、入力の最後の行だけが表示されます。cut -d"=" -f2
、 "="で区切られた行の2番目の部分を抽出します。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
、 "/"で区切られた5番目のフィールドを抽出します。つまりディレクトリ名です。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を抽出してさまざまな値をフィルタリングするために使用されます。