특정 시간에 대한 서버의 특정 로그와 해당 시간에 대한 zip 로그를 찾는 방법

특정 시간에 대한 서버의 특정 로그와 해당 시간에 대한 zip 로그를 찾는 방법

위의 질문에 대한 명령을 받았습니다. 누구든지 아래 명령을 설명해 주시겠습니까?

DATE=`date +%m%d%Y-%H%M%S` ; for i in `ls -lt *.log* | grep "Oct 11" | grep -E '12:|13:|14:' | awk '{print $9}'`; do zip logs_`hostname`_${DATE}.zip $i; done

답변1

귀하가 언급하고 있는 스크립트는 전혀 잘 작성되지 않았으며 예상대로 작동하지 않을 수 있습니다.

수행하는 작업에 대한 분석은 다음과 같습니다.

날짜=date +%m%d%Y-%H%M%S

현재 날짜를 '10192016-171249'와 같은 형식으로 DATE에 저장합니다. 자세한 내용은 "남자 데이트"를 참조하세요. 그런데 이것은 날짜/시간을 저장하는 가장 좋은 방법은 아닙니다. 빠른 참조/정렬을 위해 날짜 부분에 YYYYMMDD 형식을 사용하는 것이 훨씬 더 선호됩니다.

ls -lt *.log*

현재 디렉터리에서 "*.log*" 패턴과 일치하는 모든 파일의 디렉터리 목록을 가져옵니다. 예를 들어 다음과 같을 수 있습니다.

-rw-r--r-- 1 root root  174106 Sep 30 17:28 dpkg.log.1
-rw-r--r-- 1 root root    1642 Oct 11 12:28 fontconfig.log
-rw-r----- 1 root adm   272254 Oct 11 11:28 kern.log.4.gz
-rw-r----- 1 root adm   272254 Oct 11 17:14 kernXX.log.1.gz
-rw-r----- 1 root adm      414 Sep 29 18:09 user.log.4.gz
-rw-r--r-- 1 root root     209 Sep 26 14:18 chipsee_clone.log
-rw-r--r-- 1 root root    1333 Apr  9  2015 pm-powersave.log.1

grep "10월 11일"

그런 다음 "Oct 11"이 있는 줄만 "추출"하여 다음을 제공합니다.

-rw-r--r-- 1 root root    1642 Oct 11 12:28 fontconfig.log
-rw-r----- 1 root adm   272254 Oct 11 11:28 kern.log.4.gz
-rw-r----- 1 root adm   272254 Oct 11 17:14 kernXX.log.1.gz

grep -E '12:|13:|14:

그런 다음 "12:", "13:" 또는 "14"가 존재하는 항목만 다시 추출합니다. (이 역시 시간 필드에 적용되지만 분 및 초 필드에도 적용되므로 매우 제대로 수행되지 않습니다.)

-rw-r--r-- 1 root root    1642 Oct 11 12:28 fontconfig.log
-rw-r----- 1 root adm   272254 Oct 11 17:14 kernXX.log.1.gz

awk '{인쇄 $9}'

나머지 줄에서 9번째 요소(파일 이름)를 추출합니다.

fontconfig.log

zip 로그 hostname_ _${DATE}.zip $i

위 명령 주위에 "for" 루프를 사용하면 각 파일이 이름이 다음과 같은 zip 파일에 추가됩니다.

logs_`hostname`_${DATE}.zip

hostname호스트 이름은 어디에 있고 "${DATE}"는 이전에 저장된 날짜입니다. 따라서 호스트 이름이 BLUERAY이고 위의 DATE를 사용하는 경우 다음과 같은 파일 이름을 얻게 됩니다.

logs_BLUERAY_10192016-171249.zip

다시 말하지만, 이 스크립트는 매우 형편없게 작성되었으므로 스크립트 작성 방법을 배우기 위해 이 스크립트(또는 동일한 작성자가 작성한 다른 스크립트)를 사용해서는 안 됩니다...

관련 정보