리눅스 date 명령어 완벽 가이드: 백업 스크립트와 실무 활용법

개요

리눅스 터미널에서 현재 시간을 확인하고 포맷을 자유롭게 변경하는 date 명령어의 기초부터 고급 옵션까지 살펴봅니다. 쉘 스크립트 로그 기록, 날짜 기반 백업 파일 생성, 타임스탬프 변환 등 현업에서 즉시 쓸 수 있는 실무 예제를 중심으로 정리합니다.

기본 날짜 조회 및 출력 포맷 커스터마이징

date 명령어는 현재 시스템의 날짜와 시간 정보를 기본 형식으로 화면에 출력합니다.
아무런 옵션이나 포맷 지시자를 지정하지 않으면 요일, 월, 일, 현재 시각, 표준 시간대, 연도가 순서대로 표시됩니다.
⚙️ [주요 옵션]

-d, --date=STRING : 현재 시간 대신 사용자가 입력한 특정 날짜 문자열을 기준으로 시간을 계산하여 출력합니다.
-s, --set=STRING : 시스템 날짜와 시간을 지정한 값으로 변경합니다.
-u, --utc : 로컬 시간대 대신 협정 세계시(UTC) 기준으로 날짜와 시간을 표시합니다.
-r, --reference=FILE : 특정 파일의 최종 수정 시간을 기준으로 날짜와 시간을 출력합니다.
-I, --iso-8601[=FMT] : 날짜와 시간을 ISO 8601 표준 규격 형식으로 출력합니다.

date

date 명령어 뒤에 + 기호와 포맷 지시자를 조합하여 날짜와 시간을 YYYY-MM-DD HH:MM:SS 형식으로 출력합니다.
%Y(연도 4자리), %m(월 2자리), %d(일 2자리), %H(24시간제 시), %M(분), %S(초)를 원하는 구분 기호와 함께 배치할 수 있습니다.
애플리케이션 로그 기록이나 데이터베이스 타임스탬프 규격에 맞추어 시간을 저장할 때 표준적으로 활용됩니다.

date ‘+%Y-%m-%d %H:%M:%S’

공백이나 콜론 없이 숫자와 언더스코어(_) 조합만으로 구성된 날짜 및 시간 문자열을 출력합니다.
공백이 포함되지 않아 파일 시스템에서 다루기 안전하므로 백업 파일이나 로그 파일의 타임스탬프 접미사로 가장 널리 사용됩니다.
스크립트 실행 시점마다 고유한 파일명을 생성하여 기존 파일이 덮어쓰이는 문제를 방지할 수 있습니다.

date ‘+%Y%m%d_%H%M%S’

%A와 %B 포맷 지시자를 사용하여 영문 요일과 월의 전체 명칭이 포함된 서술형 날짜를 출력합니다.
%A는 요일의 전체 이름(Saturday), %B는 월의 전체 이름(October)을 나타내며 사람이 읽기 편한 문장형 포맷을 만듭니다.
정기 보고서 헤더나 사용자 대상 안내 메시지에 친근한 날짜 표기를 제공할 때 유용합니다.

date ‘+%A, %B %d, %Y’

과거 및 미래 날짜 계산과 타임존 변환

-u 옵션을 사용하여 로컬 시스템 시간대 대신 협정 세계시(UTC) 기준으로 현재 날짜와 시각을 출력합니다.
글로벌 분산 서버 환경이나 다국적 서비스 로그를 표준 시간대로 분석하고 동기화할 때 기준 시각으로 활용됩니다.

date -u

일회성 환경 변수 TZ에 특정 시간대(America/New_York)를 지정하여 시스템 설정을 변경하지 않고 해당 지역의 현지 시각을 출력합니다.
해외 리전 서버의 운영 상황을 확인하거나 타임존 차이에 따른 작업 일정을 검토할 때 유용합니다.

TZ=‘America/New_York’ date

-d 옵션에 'yesterday' 키워드를 전달하여 어제 날짜를 계산하고 YYYY-MM-DD 포맷으로 출력합니다.
자정 이후 실행되는 전일 로그 수집이나 일일 데이터 백업 스크립트에서 대상 날짜를 동적으로 지정할 때 사용됩니다.

date -d ‘yesterday’ ‘+%Y-%m-%d’

-d 옵션에 '7 days ago' 표현식을 지정하여 정확히 7일 전의 날짜를 계산하여 출력합니다.
보존 기간이 지난 일주일 전 백업 파일이나 로그 데이터를 자동으로 검색하고 정리하는 유지 관리 스크립트에 주로 활용됩니다.

date -d ‘7 days ago’ ‘+%Y-%m-%d’

-d 옵션에 'next Monday'와 같은 자연어 요일 표현을 지정하여 다가오는 특정 요일의 날짜를 계산합니다.
주간 정기 점검 일정을 계산하거나 매주 특정 요일에 동작하는 예약 작업을 스크립트로 구현할 때 매우 유용합니다.

date -d ’next Monday’ ‘+%Y-%m-%d’

실무 백업 스크립트와 로그 파일 자동 명명 패턴

백업 스크립트 실습을 진행할 전용 디렉터리를 생성하고 해당 위치로 이동하기 위해 mkdir -p /tmp/backup_demo && cd /tmp/backup_demo 명령어를 실행합니다.

mkdir -p /tmp/backup_demo && cd /tmp/backup_demo

백업 대상 파일로 사용할 예제 설정 데이터를 만들기 위해 echo 'Application configuration data' > config.ini 명령어를 실행합니다.

echo ‘Application configuration data’ > config.ini

date '+%Y%m%d_%H%M%S' 명령어의 실행 결과를 명령어 치환 문법($())을 통해 BACKUP_TAG 쉘 변수에 할당합니다.
연, 월, 일, 시, 분, 초가 공백 없이 결합된 고유한 타임스탬프 문자열이 변수에 저장됩니다.
이 패턴을 사용하면 스크립트 실행 시점마다 중복되지 않는 고유한 식별자를 동적으로 생성할 수 있습니다.

BACKUP_TAG=$(date ‘+%Y%m%d_%H%M%S’)

앞서 생성한 BACKUP_TAG 변수를 파일명에 삽입하여 config.ini 파일을 압축하는 tar -czf "config_backup_${BACKUP_TAG}.tar.gz" config.ini 명령어를 실행합니다.
변수에 저장된 실시간 타임스탬프가 파일 이름에 반영되어 백업이 생성된 시점을 직관적으로 파악할 수 있습니다.
동일한 작업을 주기적으로 수행하더라도 기존 백업 파일이 덮어쓰이지 않고 안전하게 누적 보관됩니다.

tar -czf “config_backup_${BACKUP_TAG}.tar.gz” config.ini

ls -l config_backup_*.tar.gz 명령어를 실행하여 생성된 백업 파일의 상세 정보를 확인합니다.
실행 결과에서 config_backup_20261024_174030.tar.gz와 같이 실행 시점의 타임스탬프가 정확히 반영된 백업 파일이 정상 생성된 것을 확인할 수 있습니다.
이와 같은 자동 명명 패턴은 정기 백업 스크립트나 시간별 로그 수집 파이프라인에서 파일의 고유성을 보장하는 표준 기법입니다.

ls -l config_backup_*.tar.gz

유닉스 타임스탬프(Epoch) 상호 변환 및 실행 시간 측정

date +%s 명령어를 실행하여 1970년 1월 1일 00:00:00 UTC(유닉스 에포크)를 기준으로 경과한 현재 시각의 초 단위 타임스탬프를 출력합니다.
실행 결과로 반환된 고유한 정수값은 시스템 간 시간 데이터 전송이나 고유 식별자 생성에 활용됩니다.
시간차 연산이나 데이터베이스 인덱스 필드 등 표준 시간 규격이 필요한 작업에 널리 사용됩니다.

date +%s

-d 옵션에 @ 접두사와 타임스탬프 값(@1700000000)을 전달하여 초 단위 유닉스 시간을 사람이 읽을 수 있는 YYYY-MM-DD HH:MM:SS 형식으로 변환합니다.
@ 기호는 입력값이 일반 날짜 문자열이 아닌 유닉스 에포크 타임스탬프임을 date 명령어에 인식시킵니다.
서버 로그나 데이터베이스에 숫자로 저장된 에포크 시간을 직관적인 날짜와 시간으로 역변환하여 분석할 때 필수적으로 사용됩니다.

date -d @1700000000 ‘+%Y-%m-%d %H:%M:%S’

date +%s%N을 활용해 작업 전후의 나노초 단위 시각을 측정하고 산술 연산을 통해 경과 시간을 밀리초(ms) 단위로 계산하여 출력합니다.
초(%s)와 나노초(%N)를 결합하여 정밀한 타임스탬프를 구한 뒤 쉘의 산술 확장 문법($(( )))으로 밀리초 단위 차이를 도출합니다.
백업 작업이나 배치 스크립트의 성능을 벤치마킹하고 실행 구간별 소요 시간을 정밀하게 계측할 때 매우 효과적인 기법입니다.

START_TIME=$(date +%s%N); sleep 1; END_TIME=$(date +%s%N); ELAPSED=$(( (END_TIME - START_TIME) / 1000000 )); echo “Elapsed time: ${ELAPSED} ms”

지금까지 리눅스 date 명령어의 핵심 문법부터 백업 스크립트 작성과 실무 활용 팁까지 자세히 살펴보았습니다.
상황에 맞는 날짜 포맷과 옵션을 적용해 쉘 스크립트 자동화 작업을 더욱 안전하고 효율적으로 구축해 보시기 바랍니다.