利用可能なコマンドがほとんどない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

東部の夏時間。

異なる時間オフセット(冬/夏、夏時間など)間の変換は、2つのオフセットを指定して説明できます。変更される日付は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 でテストすればシステムを代表するだろうと思います。

root SSH アクセス権があるが多少制限されていて、SFTP と scp を許可しない場合は、次のことを試すことができます。

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

関連情報