date명령 Tip.

date명령은 사실 가장 짜증나고 힘든부분중 하나다.
기본 date 명령으로 현재 시간을 가져올 수는 있지만,
사실상 사용불가능(?) 하다고 보는게 맞다.
date명령의 인자들을 통하여 변형된 현재 시간을 얻어보자.
[umttumt@log1 logs]$ date +%D
01/07/09
[umttumt@log1 logs]$ date +%Y
2009
[umttumt@log1 logs]$ date +%m
01
[umttumt@log1 logs]$ date +%d
07
[umttumt@log1 logs]$ date +%Y%m%d
20090107
[umttumt@log1 logs]$ date +%Y-%m-%d
2009-01-07
[umttumt@log1 logs]$ date +%Y-%m-%d-%H:%M:%S
2009-01-07-00:45:42
이런식으로 얻을 수 있다.
사실 date --help나 man date 해보면 금방 얻을 수 있는 정보들이다.
date를 이용하여 조금더 어려운걸 해보자.

현재로부터 1시간전의 시간 얻기.
현재로부터 3일전의 시간 얻기.
현재로부터 3개월 하고 하루 후의 시간 얻기.
[umttumt@log1 logs]$ date
2009. 01. 07. (수) 00:48:01 KST
[umttumt@log1 logs]$ date --date '1 hour ago'
2009. 01. 06. (화) 23:48:06 KST
[umttumt@log1 logs]$ date +%Y-%m-%d-%H:%M:%S --date '1 hour ago'
2009-01-06-23:48:22
[umttumt@log1 logs]$ date
2009. 01. 07. (수) 00:48:53 KST
[umttumt@log1 logs]$ date --date '3 day ago'
2009. 01. 04. (일) 00:49:40 KST
[umttumt@log1 logs]$ date --date '3 month'
2009. 04. 07. (화) 00:50:00 KST
[umttumt@log1 logs]$ date --date '3 month 1 day'
2009. 04. 08. (수) 00:50:23 KST
이정도면 원하는 시간을 얻어내고, 해당 시간을 필요한 표형방식대로 가공 가능할 것이다.

현재 시간의 unixtime stamp 얻기.
[umttumt@log1 logs]$ date +%s
1231257147
이건 잘 안쓰지만, 혹시 필요할지 모르니 참고로...

이렇게 열심히 설명했지만, 이걸 실제 bash 스크립트에서 변수로 만들지 못하면 사용 불가능할것이다.
변수로 만드는 방법또한 매우 간단하다.
[umttumt@log1 logs]$ TIME=$(date +%y%m%d%H --date '1 hour ago')
[umttumt@log1 logs]$ echo $TIME
09010623
이런식으로, TIME이라는 변수에 현재부터 1시간 이전의 시간을 담았다.


사실 처음 date를 가지고 이런짓을 하게된 이유는,
윈도우 2008, IIS 웹서버의 로그를 리눅스 서버로 가져와, 리눅스 서버에서 AWStats로 분석하기 위함이었다.
처음 웹서버에서 로그서버로 밀어 넣는 방법을 생각했으나,
역시나 윈도우 서버에서 해결할 방법이 쉽게 보이지 않았다.
결국 생각해낸 방법이, 웹로그를 1시간 단위로 남기고, 해당 로그를 리눅스서버에서 가져오는것이었다.
그런데 문제는, date명령을 통해 충분히 현재 시간을 만들어 낼 수 있었지만,
현재 시간의 로그파일을 가져오면 해당 로그파일은 작성중인 로그이기 때문에 가져와봐요 소용이 없다.
때문에 현재부터 1시간 이전의 로그파일을 가져오기 위해, date명령의 조작으로 원하는 시간값을 얻을 수 있었다.
저작자 표시
크리에이티브 커먼즈 라이선스
Creative Commons License
Trackback 0 Comment 0
prev 1 ... 34 35 36 37 38 39 40 41 42 ... 121 next