次のように、利用可能なコマンドがほとんどない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/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 でテストすればシステムを代表するだろうと思います。
root SSH アクセス権があるが多少制限されていて、SFTP と scp を許可しない場合は、次のことを試すことができます。
ssh limited-server 'cat > /etc/localtime' < /usr/share/zoneinfo/Some/Place