12.3. 시간/날짜 명령어

명령어 목록

date

간단하게 date라고만 치면 날짜와 시간을 표준 출력으로 보여줍니다. 이 명령어에서 진짜 재밌는 부분은 형식화와 파싱 옵션입니다.

예 12-7. date 쓰기

#!/bin/bash
# 'date' 명령어 연습

echo "올해가 시작한 뒤로 지금까지 `date +%j` 일이 지났습니다."
# 날짜를 형식화 하려면 포매터 앞에 '+'를 써야 됩니다.
# %j 는 오늘이 연중 몇 번째 날인가를 알려줍니다.

echo "1970/01/01 이후로 지금까지 `date +%s` 초가 지났습니다."
#  %s 는 "UNIX 에폭(epoch)"이 시작한 뒤로 현재까지 몇 초가 지났는지를 알려줍니다.
#+ 이걸 도대체 어디다 써 먹죠?

prefix=temp
suffix=`eval date +%s`  # 'date'의 "+%s" 옵션은 GNU 전용 옵션입니다.
filename=$prefix.$suffix
echo $filename
#  "유일한" 임시 파일 이름으로 $$ 를 쓰는 것 보다 더 훌륭합니다.

# 더 많은 형식화 옵션을 보려면 'date' 맨 페이지를 읽어 보세요.

exit 0
zdump

주어진 타임 존에 해당하는 시간을 에코.

bash$ zdump EST
EST  Tue Sep 18 22:09:22 2001 EST
	      

time

명령어 실행 시간에 대한 아주 자세한 통계들을 보여줍니다.

time ls -l / 의 출력은 다음과 같습니다.
0.00user 0.01system 0:00.05elapsed 16%CPU (0avgtext+0avg
data 0maxresident)k
 0inputs+0outputs (149major+27minor)pagefaults 0swaps

time과 아주 비슷한 바로 앞 장의 times 명령어도 참고하세요.

참고: time은 Bash 2.0 버전 이후로 쉘 예약어가 됐기 때문에 파이프라인에서 쓰이면 약간 다른 동작을 보입니다.

touch

파일에 대한 접근/수정 시각을 현재 시각이나 특정한 시각으로 바꿔 주는 유틸리티지만 새 파일을 만들 때 쓸 수도 있습니다. zzz란 파일이 없다고 가정하고 touch zzz 라고 하면 크기가 0인 zzz을 새로 만들어 줍니다. 이런 식으로 시간 정보를 갖는 빈 파일을 만들어서 프로젝트의 변경 날짜를 추적하는데 쓰는 등의 사용법이 가능합니다.

touch 명령어는 : >> newfile 과 동일한 동작을 합니다(보통 파일에 대해서).

at

작업 제어 명령어인 at은 주어진 명령어들을 특정 시간에 수행합니다. 이 명령어는 표면상으로는 crond과 닮아 있지만 여러 명령어들을 단지 한 번만 수행하려고 할 때 주로 쓰입니다.

at 2pm January 15 라고 하면 그 시간에 실행시킬 명령어들을 물어보는데 이 명령어는 실용적인 목적때문에 쉘 스크립트와 호환되는 명령어면 다 됩니다. 스크립트에서 한 줄에 이것을 타이핑할 것이기 때문입니다. 입력은 Ctl-D 로 끝냅니다.

-f 옵션을 쓰거나 입력 재지향(<)을 써서 파일에 저장되어 있는 명령어들을 읽어 들일 수 있습니다. 이 파일은 쉘 스크립트가 될 수도 있지만 당연히 사용자 입력이 필요 없어야 합니다. 실행할 파일에 run-parts 명령어를 넣어 두면 다른 종류의 여러 스크립트들을 돌릴 수 있기 때문에 아주 멋지게 쓸 수 있습니다.

bash$ at 2:30 am Friday < at-jobs.list
job 2 at 2000-10-27 02:30
	      

batch

batchat과 비슷한 작업 제어 명령어지만 다른 점은 시스템 부하가 0.8 이하인 경우에만 명령어들을 실행합니다. at처럼 -f 옵션을 써서 실행할 명령어를 파일에서 읽을 수 있습니다.

cal

깔끔한 형태의 월별 달력을 표준출력으로 출력합니다. 현재를 비롯해 아주 먼 과거나 미래도 보여 줍니다.

sleep

쉘의 wait 루프와 같습니다. 주어진 초단위 시간 동안 아무일도 안 하면서 멈추어 있습니다. 타이밍, 혹은 백그라운드로 돌면서 특정한 사건이 일어나는지 주기적으로 확인하는등의 경우에 유용하게 쓰일 수 있습니다(예 30-5 참고).
sleep 3
# 3 초 대기.

참고: sleep 명령어의 단위는 기본적으로 초를 쓰지만 분이나 시간, 일 단위도 지정해 줄 수 있습니다.
sleep 3 h
# 3 시간 대기!

usleep

마이크로슬립(Microsleep)("u"는 그리스 문자 "mu"로 읽던가 마이크로(micro) 접두사 그대로 읽으면 됩니다). 이 명령어는 위에서 설명한 sleep과 하는 일이 같지만 마이크로초 동안 "잠들어" 있습니다. 아주 짧은 시간 동안의 타이밍에 쓰이거나 굉장히 잦은 간격으로 진행되는 프로세스를 폴링할 때 쓰일 수 있습니다.
usleep 30
# 30 마이크로초 대기.

경고

usleep은 특별히 정확한 타이밍을 제공하지 않기 때문에 아주 중요한 타이밍 루프에는 안 맞습니다.

hwclock, clock

hwclock는 시스템의 하드웨어 클럭을 읽거나 조절해 줍니다. 몇몇 옵션은 루트 권한이 필요합니다. /etc/rc.d/rc.sysinit 시스템 구동 파일은 부팅시에 hwclock을 써서 하드웨어 클럭으로 시스템 시간을 맞춰줍니다.

clock 명령어는 hwclock과 동의어입니다.