다음과 같이 사용 가능한 명령이 거의 없는 Linux 시스템이 있습니다 /bin
.
/bin# ls
ash chattr clockdiff dd dumpkmap fdflush gunzip linux32 ls mktemp mt pidof printenv rmdir setserial su tracepath umount watch
busybox chgrp cp df echo fgrep gzip linux64 lsattr more mv ping ps run-parts sh sync tracepath6 uname zcat
cat chmod cpio dmesg egrep getopt hostname ln mkdir mount netstat ping6 pwd sed sleep tar traceroute6 usleep
catv chown date dnsdomainname false grep kill login mknod mountpoint nice pipe_progress rm setarch stty touch true vi
/usr/share/zoneinfo
게다가 목차도 없습니다 .
그렇다면 이 명령을 사용하여 시간대를 어떻게 설정합니까? 또한 다른 호스트에서 원격으로 시간대와 날짜를 동기화해야 합니다.
env 변수를 시도했지만 TZ
작동하지 않습니다. 예를 들면 다음과 같습니다.
root@xxx:/bin# date
Wed Aug 31 12:02:41 UTC 2023
root@xxx:/bin# TZ=America/New_York date
Thu Aug 31 12:03:50 America 2023
root@xxx:/bin# date
Thu Aug 31 12:04:58 UTC 2023
TZ를 설정한 후에는 시간이 변경되지 않습니다.
답변1
시간대 파일이 없는 경우에도 TZ
변수에 시간대를 설명하여 시간대를 지정할 수 있습니다(참조:man tzset
더 알아보기).
가장 작은 형식은 시간대 이름 뒤에 UTC의 시간대 오프셋이 오는 것입니다.
TZ=CEST-2
중앙 유럽 서머타임 또는
TZ=EDT4
동부 일광 절약 시간.
서로 다른 시간 오프셋(겨울/여름, 일광 절약 시간 등) 간의 변환은 두 개의 오프셋을 지정하여 설명할 수 있으며, 변경되는 날짜는 man tzset
뉴질랜드의 예입니다.
TZ="NZST-12:00:00NZDT-13:00:00,M10.1.0,M3.3.0"
때를하다시간대 파일은 TZ
목적을 나타내기 위해 콜론으로 시작해야 합니다.
TZ=:America/New_York
답변2
파일을 전송할 수 있으면 로컬 시스템에서 제한된 시스템 /usr/share/zoneinfo
으로 필요한 시간대 정의를 복사할 수 있습니다 . /etc/localtime
Alpine 컨테이너에서 테스트:
% docker run --rm -it alpine date
Fri Sep 1 07:15:13 UTC 2023
% docker run --rm -it -v /usr/share/zoneinfo/Asia/Calcutta:/etc/localtime alpine date
Fri Sep 1 12:45:17 IST 2023
명령 목록에는 ash
및 가 포함됩니다 busybox
. Linux에서 Almquist 셸의 IIRC 일반 버전은 dash 및 busybox sh이며 아마도 Alpine과 마찬가지로 대부분의 명령은 busybox
Alpine으로 테스트하면 시스템을 대표할 것이라고 생각합니다.
루트 SSH 액세스 권한이 있지만 다소 제한되어 있고 SFTP 및 scp를 허용하지 않는 경우 다음을 시도해 볼 수 있습니다.
ssh limited-server 'cat > /etc/localtime' < /usr/share/zoneinfo/Some/Place