사용 가능한 명령이 거의 없는 Linux 시스템에서 시간대를 설정하는 방법은 무엇입니까?

사용 가능한 명령이 거의 없는 Linux 시스템에서 시간대를 설정하는 방법은 무엇입니까?

다음과 같이 사용 가능한 명령이 거의 없는 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/localtimeAlpine 컨테이너에서 테스트:

% 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과 마찬가지로 대부분의 명령은 busyboxAlpine으로 테스트하면 시스템을 대표할 것이라고 생각합니다.

루트 SSH 액세스 권한이 있지만 다소 제한되어 있고 SFTP 및 scp를 허용하지 않는 경우 다음을 시도해 볼 수 있습니다.

ssh limited-server 'cat > /etc/localtime' < /usr/share/zoneinfo/Some/Place

관련 정보