Linux에는 다음과 같은 로그 파일이 있습니다.
Mar 2 09:46:45 [rest of the log]
Debian Linux의 많은 서비스 로그에는 연도 정보가 포함되어 있지 않기 때문에 내 생각에는 로그가 최근 이벤트를 암시하는 것 같습니다.
이 로그 줄이 마지막 10분인지 확인하고 싶어서 다음과 같이 했습니다.
Now="$(date '+%b %d %H:%M:%S')"
echo "Now : $Now"
TENMINSEC=$(date -d 'now - 10 minutes' '+%s')
echo "Ten min before : ${TENMINSEC}"
LOGDAT=$(date -d 'Mar 2 09:45:40' '+%s')
echo "LOGDAT : ${LOGDAT}"
if [ $LOGDAT -ge $TENMINSEC ];then
echo "Log date is greater";
fi
LOGDAT와 최근 10분을 초로 변환하여 비교합니다.
하지만 내가 원하는 일을 하고 있는지 혼란스럽죠? 연도 정보가 포함되지 않으면 결과에 영향이 없나요? 어떻게 해결할 수 있나요?
첨부된:
로그 파일 줄을 읽는 데 문제가 없습니다. 로그 파일에서 읽은 내용은 코드의 날짜(3월 2일 09:45:40)로 대체됩니다.
답변1
날짜 문자열에 연도가 지정되지 않으면 GNU date
(사용 중인 것으로 보이는)는 날짜가 현재 연도를 참조한다고 가정합니다.
$ date -d 'Mar 2 09:45:40'
Sat Mar 2 09:45:40 CET 2019
따라서 이 날짜를 Unix 시간으로 변환하고 동일한 형식의 다른 날짜와 비교하는 것은 새해 전날이 자정쯤이라는 점을 제외하면 올바른 일을 할 것입니다.
답변2
특정 날짜에 대해 date 명령이 생성하는 내용이 확실하지 않은 경우 언제든지 시도해 볼 수 있습니다. 이 특정한 경우에는 삭제하여 +%s
결과를 읽을 수 있습니다.
date -d 'Mar 2 09:45:40' # "02 Mar 2019 09:45:40"
또는 epoch 이후의 시간(초)이 주어지면 값을 다시 읽을 수 있는 날짜로 변환할 수 있습니다.
time=1546300800
date --date "@$time" # "01 Jan 2019 00:00:00"