나는 Linux 배포판 설치 기간을 확인하기 위해 une2fs를 사용해 왔지만 시간대를 모르면 여기에 포함된 날짜가 그다지 유용하지 않습니다. 내가 사용한 정확한 명령은여기, 명확성을 위해 다음과 같습니다.
sudo tune2fs -l /dev/sda3 | grep created | sed 's/.*created\:\s*//g'
그러나 출력은 다음과 같은 형식입니다.
Fri Jun 23 23:59:22 2017
시간대가 언급되어 있지 않습니다. 그러나 date
다음 형식의 출력을 반환합니다.
Sun Jul 23 17:58:18 AEST 2017
AEST 시간대가 어떻게 언급되는지 참고하세요. 맨 페이지를 읽었습니다.tune2fs
. 웹 브라우저의 찾기 유틸리티를 사용하여 "날짜", "생성", "시간"을 검색했지만 날짜 형식 시간대에 대한 언급이 있거나 수동으로 설정할 수 있는 방법이 있는지 찾을 수 없었습니다. DuckDuckGo를 실행하여 "tune2fs date" 및 "tune2fs timezone"을 검색했는데 처음 5개 결과를 살펴봤지만 관련된 항목을 찾을 수 없습니다.
답변1
시간은 Unix epoch 시간으로 저장됩니다 s_mkfs_time
(슈퍼 블록) 달력 날짜가 아닌 시간대 독립적입니다.
표시할 때 tune2fs
달력/사람의 날짜로 변환하여 귀하의 시간대에 맞는 표현을 제공하세요.
UTC 시간을 얻으려면 다음 명령을 실행하십시오.
TZ=UTC0 LC_ALL=C tune2fs -l /dev/sda3 |
sed -n 's/^Filesystem created: *//p'
이는 tune2fs
시간대가 UTC(UTC에서 0 오프셋)임을 나타냅니다.
Filesystem created
영어로 반환되고 날짜가 사용자의 로케일에 관계없이(향후 국제화되는 경우) 미국 영어 스타일로 표시되도록 LC_ALL=C를 추가했습니다.e2fsprogs
슈퍼블록의 오프셋 0x108에 위치하고 S_mkfs_time
슈퍼블록은 블록 장치 내 오프셋 0x400에서 시작하므로 에포크 시간을 수동으로 검색할 수도 있습니다.
od -vAn -j 0x508 -N4 < /dev/sda3
원하는 형식으로 변환하세요.
$ date --iso-8601=s -d "@$(od -An -j0x508 -N4 -tu4 < /some/device)"
2017-07-23T12:20:22+01:00
$ date -u --iso-8601=s -d "@$(od -An -j0x508 -N4 -tu4 < /some/device)"
2017-07-23T11:20:22+00:00
답변2
날짜는 생성 당시의 로컬 시스템 시간대로 표시되는 것으로 나타납니다.
예를 들어, 내 /boot 파티션은 raid-1(/dev/md0)의 ext4입니다. 이는 작년에 부팅 드라이브를 SSD 4개로 교체하고 ZFS에서 루트로 변환할 때 생성한 것입니다. 만일을 대비해 /boot ext4 파티션을 유지했습니다.
# tune2fs -l /dev/md0 | sed -n -e 's/.*created\:\s*//gp'
Sat Oct 8 16:38:45 2016
# TZ=UTC tune2fs -l /dev/md0 | sed -n -e 's/.*created\:\s*//gp'
Sat Oct 8 05:38:45 2016
저는 또한 호주 동부 해안(멜버른)에 있고 16:38과 05:38의 차이는 11시간입니다. 이는 AEDT에 맞습니다(10월에 시작되는 일광 절약 시간을 준수하는 주의 경우).
그런데 grep의 출력을 sed나 awk로 파이프할 필요가 거의 없습니다. 둘 다 정규식 패턴 일치를 수행할 수 있습니다. awk의 예는 다음과 같습니다.
# tune2fs -l /dev/md0 | awk -F': +' '/created/ {print $2}'
Sat Oct 8 16:38:45 2016