/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
, "="로 구분된 줄의 두 번째 부분을 추출합니다.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
, "/"로 구분된 다섯 번째 필드를 추출합니다.즉디렉터리 이름입니다.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를 추출하여 다양한 값을 필터링하는 데 사용됩니다.