<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ja">
	<id>https://wiki.archlinux.jp/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Eyssant</id>
	<title>ArchWiki - 利用者の投稿記録 [ja]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.archlinux.jp/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Eyssant"/>
	<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php/%E7%89%B9%E5%88%A5:%E6%8A%95%E7%A8%BF%E8%A8%98%E9%8C%B2/Eyssant"/>
	<updated>2026-06-13T21:24:30Z</updated>
	<subtitle>利用者の投稿記録</subtitle>
	<generator>MediaWiki 1.44.3</generator>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E6%99%82%E5%88%BB&amp;diff=38802</id>
		<title>システム時刻</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E6%99%82%E5%88%BB&amp;diff=38802"/>
		<updated>2024-09-01T10:08:37Z</updated>

		<summary type="html">&lt;p&gt;Eyssant: 小改動&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:メインボードと BIOS]]&lt;br /&gt;
[[Category:システム管理]]&lt;br /&gt;
[[en:System time]]&lt;br /&gt;
[[es:System time]]&lt;br /&gt;
[[fa:زمان]]&lt;br /&gt;
[[fr:System time]]&lt;br /&gt;
[[zh-hans:System time]]&lt;br /&gt;
[[zh-hant:System time]]&lt;br /&gt;
{{Related articles start}}&lt;br /&gt;
{{Related|ネットワークタイムプロトコルデーモン}}&lt;br /&gt;
{{Related|OpenNTPD}}&lt;br /&gt;
{{Related|Chrony}}&lt;br /&gt;
{{Related|systemd-timesyncd}}&lt;br /&gt;
{{Related articles end}}&lt;br /&gt;
&lt;br /&gt;
オペレーティング システムでは、時間 (クロック) は 3 つの部分によって決定されます: 時間の値、現地時間か UTC かそれ以外か、タイム ゾーン、および該当する場合は夏時間 (DST) です。この記事では、それらが何であるか、およびそれらの読み取り/設定方法について説明します。システムには、ハードウェア クロックとシステム クロックの 2 つのクロックが存在します。これについても、この記事で詳しく説明します。&lt;br /&gt;
&lt;br /&gt;
ほとんどのオペレーティング システムの標準的な動作は次のとおりです。&lt;br /&gt;
&lt;br /&gt;
* 起動時にハードウェア クロックからシステム クロックを設定します。&lt;br /&gt;
* システムクロックの正確な時刻を維持します。[[#時刻同期]] を参照してください。&lt;br /&gt;
* シャットダウン時にシステム クロックからハードウェア クロックを設定します。&lt;br /&gt;
&lt;br /&gt;
== ハードウェアクロック == &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;ハードウェアクロック&#039;&#039;&#039; (又の名をリアルタイムクロック (Real Time Clock, RTC) もしくは CMOS クロック) は次の値を保存しています: 年・月・日・時・分・秒。2016 年以降の[[UEFI]] ファームウェアには、タイムゾーンとサマータイムを保存する機能を備えられています。&lt;br /&gt;
&lt;br /&gt;
===  ハードウェアクロックの読み込み ===&lt;br /&gt;
&lt;br /&gt;
 # hwclock --show&lt;br /&gt;
&lt;br /&gt;
=== システムクロックからハードウェアクロックを設定する ===&lt;br /&gt;
&lt;br /&gt;
以下は、システムクロックからハードウェアクロックを設定するものです。さらに、{{ic|/etc/adjtime}} を更新するか、存在しない場合は作成します。このファイルに関するより詳しい情報は [[#タイムスキュー]] の項と同様に {{man|8|hwclock|The Adjtime File}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
 # hwclock --systohc&lt;br /&gt;
&lt;br /&gt;
== システムクロック ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;システムクロック&#039;&#039;&#039; (又の名をソフトウェアクロック) は次の情報を記録しています: 時刻、タイムゾーン、そして DST が適用されるかどうか。Linux カーネルは1970年1月1日の午前0時からの秒数でシステムクロックをはじき出します。システムクロックの初期値は {{ic|/etc/adjtime}} を使ってハードウェアクロックから算定されます。起動が完了した後は、システムクロックはハードウェアクロックとは独立して動作します。Linux カーネルはタイマー割り込みを数えることによりシステムクロックを記録します。&lt;br /&gt;
&lt;br /&gt;
=== 時刻を表示する ===&lt;br /&gt;
&lt;br /&gt;
現在のシステム時刻を確認するには (UTC と現地時間のどちらも表示されます):&lt;br /&gt;
&lt;br /&gt;
 $ timedatectl status&lt;br /&gt;
&lt;br /&gt;
root で同じコマンドを実行すればハードウェアクロックの時間も表示します。&lt;br /&gt;
&lt;br /&gt;
=== 時刻を設定する ===&lt;br /&gt;
&lt;br /&gt;
直接システムクロックを設定するには:&lt;br /&gt;
 # timedatectl set-time &amp;quot;yyyy-MM-dd hh:mm:ss&amp;quot;&lt;br /&gt;
例:&lt;br /&gt;
 # timedatectl set-time &amp;quot;2014-05-26 11:13:54&amp;quot;&lt;br /&gt;
2014年5月26日、11時13分54秒に設定されます。&lt;br /&gt;
&lt;br /&gt;
=== RTC ===&lt;br /&gt;
&lt;br /&gt;
ほとんどのオペレーティングシステムは:&lt;br /&gt;
&lt;br /&gt;
* 起動時にハードウェアクロックからシステムクロックを設定します&lt;br /&gt;
* [[Network Time Protocol daemon|NTP]] デーモンを使ってシステムクロックの時間を正確に保ちます&lt;br /&gt;
* シャットダウン時にシステムクロックからハードウェアクロックを設定します&lt;br /&gt;
&lt;br /&gt;
== 時刻系 ==&lt;br /&gt;
&lt;br /&gt;
2つの時刻系が存在します: 地方時 (&#039;&#039;&#039;localtime&#039;&#039;&#039;) と [[Wikipedia:ja:協定世界時|協定世界時]] (&#039;&#039;&#039;C&#039;&#039;&#039;oordinated &#039;&#039;&#039;U&#039;&#039;&#039;niversal &#039;&#039;&#039;T&#039;&#039;&#039;ime, &#039;&#039;&#039;UTC&#039;&#039;&#039;) です。地方時系は現在の&#039;&#039;タイムゾーン&#039;&#039;によって決まりますが、UTC は&#039;&#039;世界時&#039;&#039;であり、タイムゾーンの値は関係ありません。概念的には異なっていますが、UTC は GMT (グリニッジ標準時, Greenwich Mean Time) とも言われます。&lt;br /&gt;
&lt;br /&gt;
ハードウェアクロック (CMOS クロック, BIOS で表示される時間) で使われる時刻系はオペレーティングシステムによって定義されます。デフォルトでは、Windows は localtime を使いますが、Mac OS は UTC を使っていて、UNIX ライクなオペレーティングシステムでは決まっていません。一般的に、UTC を使う OS は起動時に CMOS (ハードウェアクロック) の時間を UTC 時間 (GMT, Greenwich time) だと認識して、あなたのタイムゾーンによってその時間を調整してシステム時刻を設定します。&lt;br /&gt;
&lt;br /&gt;
複数のオペレーティングシステムがマシンにインストールされている場合、それらはすべて同じハードウェアクロックから現在の時刻を取得します。システム間の競合を避けるために、UTC に設定することをお勧めします。それ以外の場合、ハードウェアクロックが「現地時間」に設定されている場合、たとえば [[Wikipedia:ja:夏時間|DST]] の変更後に複数のオペレーティングシステムがそれを調整する可能性があり、その結果、過剰な修正が行われます。異なるタイムゾーン間を移動し、オペレーティング システムの 1 つを使用してシステム/ハードウェア クロックをリセットするときにも、問題が発生する可能性があります。&lt;br /&gt;
&lt;br /&gt;
ハードウェアクロックは、{{ic|timedatectl}} コマンドで照会および設定ができます。&lt;br /&gt;
以下を使用して、Arch システムの現在のハードウェアクロック時間標準を確認できます。&lt;br /&gt;
&lt;br /&gt;
{{hc|$ timedatectl {{!}} grep local|&lt;br /&gt;
RTC in local TZ: no&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ハードウェアクロックは {{ic|timedatectl}} コマンドで尋ねたり設定できます。ハードウェアクロックの時刻系を localtime に変更するには次を実行してください:&lt;br /&gt;
&lt;br /&gt;
 # timedatectl set-local-rtc true&lt;br /&gt;
&lt;br /&gt;
ハードウェアクロックの時刻系を localtime に変更するには、次を実行してください:&lt;br /&gt;
&lt;br /&gt;
 # timedatectl set-local-rtc &#039;&#039;&#039;1&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
逆にハードウェアクロックの時刻系を UTC に戻すには次を実行してください:&lt;br /&gt;
&lt;br /&gt;
 # timedatectl set-local-rtc &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
これらは {{ic|/etc/adjtime}} を自動的に生成し、それに応じて RTC を更新します。これ以上の設定は必要ありません。&lt;br /&gt;
&lt;br /&gt;
カーネルの起動中、RTC ドライバーがロードされた時点で、ハードウェアクロックからシステムクロックを設定することができます。設定するかどうかはハードウェアプラットフォーム、カーネルのバージョン・ビルドオプション次第です。設定される場合、ブートシーケンスで既に、ハードウェアクロックは UTC と認識され {{ic|/sys/class/rtc/rtcN/hctosys}} (N=0,1,2,..) の値は 1 に設定されます。その後、{{ic|/etc/adjtime}} の値を使って、再度 systemd によってハードウェアクロックからシステムクロックが設定されます。そのため、ハードウェアクロックで localtime を使っているとブートシーケンス中に予期しない動作が発生するかもしれません。例えば、システム時刻が後戻りするなど。従ってこの設定は良いアイデアとは言えません。&lt;br /&gt;
&lt;br /&gt;
その後、{{ic|/etc/adjtime}} の値に応じて、systemd によってハードウェアクロックからシステムクロックが再度設定されます。したがって、ハードウェアクロックで localtime を使用すると、ブートシーケンス中に予期しない動作が発生する可能性があります。たとえば、システム時間が逆行することは、常に悪い考えです ([https://www.cl.cam.ac.uk/~mgk25/mswish/ut-rtc.html 他にもたくさんあります])。ハードウェアクロックが UTC に設定されていてローカルタイムゾーンについてカーネルに通知しないでください。その結果、Linux システムが使用する FAT ファイルシステムのタイムスタンプは UTC になります。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* {{ic|timedatectl}} を使うには [[D-Bus]] が有効になっている必要があります。そのため、(インストール中など) chroot 下でこのコマンドが使えないかもしれません。そのような場合には、hwclock コマンドを使って下さい。&lt;br /&gt;
* {{ic|/etc/adjtime}} が存在しない場合、[[systemd]] はハードウェアクロックが UTC に設定されていると認識しています。}}&lt;br /&gt;
&lt;br /&gt;
=== Windows で UTC を使う ===&lt;br /&gt;
&lt;br /&gt;
RTC を localtime に設定する理由に Windows とのデュアルブートをするためということがあります ([http://blogs.msdn.com/b/oldnewthing/archive/2004/09/02/224672.aspx Windows は localtime を使っています])。しかしながら、Windows ではレジストリを編集することで RTC で UTC を使っていても対応できるようにすることができます。従って、Linux に localtime を使わせるよりも Windows に UTC を使わせるようにすることが推奨されます。Windows に UTC を使わせる場合、Windows のインターネット時刻機能をオフにするようにしてください。オフにすると Windows はハードウェアクロックにメスを入れなくなるので、代わりに [[Network Time Protocol daemon|NTP]] デーモンを使って RTC を同期させる必要があります。&lt;br /&gt;
&lt;br /&gt;
{{ic|regedit}} を使って、レジストリに十六進数で {{ic|1}} の {{ic|DWORD}} 値を追加してください:&lt;br /&gt;
&lt;br /&gt;
 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TimeZoneInformation\RealTimeIsUniversal&lt;br /&gt;
&lt;br /&gt;
管理者権限で開いたコマンドプロンプトで以下のコマンドを実行することでも設定できます:&lt;br /&gt;
&lt;br /&gt;
 reg add &amp;quot;HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\TimeZoneInformation&amp;quot; /v RealTimeIsUniversal /d 1 /t REG_DWORD /f&lt;br /&gt;
&lt;br /&gt;
もしくは、以下の内容で {{ic|*.reg}} ファイルを (デスクトップに) 作成しそれをダブルクリックしてレジストリにインポートしてください:&lt;br /&gt;
&lt;br /&gt;
 Windows Registry Editor Version 5.00&lt;br /&gt;
 &lt;br /&gt;
 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TimeZoneInformation]&lt;br /&gt;
      &amp;quot;RealTimeIsUniversal&amp;quot;=dword:00000001&lt;br /&gt;
&lt;br /&gt;
{{Note|64ビット版の Windows を使っている場合で、上記の設定を行っても効果がないときは {{ic|DWORD}} の代わりに {{ic|QWORD}} を使うことで問題が解決することがあります。}}&lt;br /&gt;
&lt;br /&gt;
DST が変わったことで Windows が時計を更新すると行ってきた場合は、それに従って下さい。Windows は時計を UTC のままにしておき、表示する時間だけ修正します。&lt;br /&gt;
&lt;br /&gt;
値を設定した後にハードウェアクロックとシステムクロックの時刻を[[#時刻を設定する|更新]]する必要があるかもしれません。&lt;br /&gt;
&lt;br /&gt;
時計がずれる問題が発生している場合、{{ic|tzdata}} を再インストールしてタイムゾーンをもう一度設定してみてください:&lt;br /&gt;
&lt;br /&gt;
 # pacman -S tzdata&lt;br /&gt;
 # timedatectl set-timezone Asia/Tokyo&lt;br /&gt;
&lt;br /&gt;
=== Ubuntu で UTC を使う ===&lt;br /&gt;
&lt;br /&gt;
Ubuntu とその派生ディストリはインストール時に Windows が認識されたときにハードウェアクロックを &amp;quot;localtime&amp;quot; と認識されるように設定します。Linux 初心者が Windows コンピュータで Ubuntu を試したときにレジストリを編集しなくてもよいように故意にこのような挙動となっています。&lt;br /&gt;
&lt;br /&gt;
== タイムゾーン ==&lt;br /&gt;
&lt;br /&gt;
現在のゾーンを確認するには:&lt;br /&gt;
&lt;br /&gt;
 $ timedatectl status&lt;br /&gt;
&lt;br /&gt;
利用可能なゾーンを一覧するには:&lt;br /&gt;
&lt;br /&gt;
 $ timedatectl list-timezones&lt;br /&gt;
&lt;br /&gt;
タイムゾーンを変更するには:&lt;br /&gt;
&lt;br /&gt;
 # timedatectl set-timezone &amp;lt;Zone&amp;gt;/&amp;lt;SubZone&amp;gt;&lt;br /&gt;
&lt;br /&gt;
例:&lt;br /&gt;
&lt;br /&gt;
 # timedatectl set-timezone Asia/Tokyo&lt;br /&gt;
&lt;br /&gt;
このコマンドによって {{ic|/usr/share/zoneinfo/}} 下の zoneinfo ファイルを指し示したシンボリックリンク {{ic|/etc/localtime}} が作られます。リンクを手動で作成する場合 ([[chroot]] の中で {{ic|timedatectl}} が使用できない場合など)、{{man|7|archlinux}} に書かれているように、ハードリンクではなくシンボリックリンクを使ってください:&lt;br /&gt;
&lt;br /&gt;
 # ln -sf /usr/share/zoneinfo/&#039;&#039;Zone&#039;&#039;/&#039;&#039;SubZone&#039;&#039; /etc/localtime&lt;br /&gt;
&lt;br /&gt;
詳細は {{man|1|timedatectl}}, {{man|5|localtime}}, {{man|7|archlinux}} を見てください。&lt;br /&gt;
&lt;br /&gt;
{{Note|systemd 以前の設定ファイル {{ic|/etc/timezone}} がシステムにまだ存在している場合、もう使われていないので削除しても問題ありません。}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|&#039;&#039;tzselect&#039;&#039; を使ってインタラクティブにタイムゾーンを選択することもできます。}}&lt;br /&gt;
&lt;br /&gt;
=== 地理情報を元に設定 ===&lt;br /&gt;
&lt;br /&gt;
IP アドレスの位置情報を元に自動的にタイムゾーンを設定したい場合、{{ic|$ curl https://ipapi.co/timezone}} などで geolocation API を使ってタイムゾーンを取得して {{ic|timedatectl set-timezone}} に出力を渡すことで自動設定できます。以下のサービスが無料あるいは一部無料で geo-IP API を提供しています:&lt;br /&gt;
* https://freegeoip.app&lt;br /&gt;
* https://ipapi.co/&lt;br /&gt;
* http://ip-api.com/&lt;br /&gt;
* https://ipstack.com/&lt;br /&gt;
* https://timezoneapi.io/&lt;br /&gt;
&lt;br /&gt;
また、{{aur|tzupdate}} ツールは IP アドレスの位置情報を元にタイムゾーンを自動設定します。&lt;br /&gt;
&lt;br /&gt;
==== NetworkManager がネットワークに接続するたびにタイムゾーンを更新する ====&lt;br /&gt;
&lt;br /&gt;
[[NetworkManager# NetworkManager dispatcher を使用したネットワークサービス|NetworkManager dispatcher スクリプト]] を作成します:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/NetworkManager/dispatcher.d/09-timezone|&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
case &amp;quot;$2&amp;quot; in&lt;br /&gt;
    up)&lt;br /&gt;
        timedatectl set-timezone &amp;quot;$(curl --fail &amp;lt;nowiki&amp;gt;https://ipapi.co/timezone&amp;lt;/nowiki&amp;gt;)&amp;quot;&lt;br /&gt;
    ;;&lt;br /&gt;
esac&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|{{ic|up}} の代わりに {{ic|connectivity-change}} を使用すると、[[OpenConnect]] などのクライアントで VPN に接続するときにタイムゾーンの変更を防ぐことができます。}}&lt;br /&gt;
&lt;br /&gt;
あるいは、ツール {{aur|tzupdate}} が IP アドレスのジオロケーションに基づいてタイムゾーンを自動的に設定します。この [https://medium.com/@ipdata_co/what-is-the-best-commercial-ip-geolocation-api-d8195cda7027 最も人気のある IP 地理位置情報 API の比較] は、プロダクションでどの API を使うか決める際に役に立つかもしれません。&lt;br /&gt;
&lt;br /&gt;
== クロックスキュー ==&lt;br /&gt;
&lt;br /&gt;
全ての時計は&#039;&#039;本当の時間&#039;&#039; (一番正確なのは[[Wikipedia:ja:国際原子時|国際原子時]]) とは違う値を示しています、どの時計も完全ではありません。クォーツを使っている電子時計は（不完全な）時間を刻んでいますが、規則的なズレを生じさせています。この本質的な&#039;ズレ&#039;は&#039;クロックスキュー&#039;や&#039;クロックドリフト&#039;として知られています。&lt;br /&gt;
&lt;br /&gt;
ハードウェアクロックが {{ic|hwclock}} で設定された時、新しいドリフト値（一日に何秒ズレるか）が算定されます。このドリフト値は新しく設定された値と以前に設定されていたハードウェアクロックの値の差から計算され、以前のドリフト値とハードウェアクロックが最後に設定された時間を考慮しています。新しいドリフト値と時計が設定された時刻は {{ic|/etc/adjtime}} ファイルに書き込まれ以前の値を上書きします。これにより {{ic|hwclock --adjust}} を実行することでハードウェアクロックのずれを調整できるようになっています。また、{{ic|hwclock}} デーモンが有効になっている場合シャットダウン時にも実行されます (よって systemd を使っているシステムでは実行されません)。&lt;br /&gt;
&lt;br /&gt;
{{Note|以前に設定した時から24時間以内に再度 hwlock が設定された場合、{{ic|hwclock}} は経過時間が短すぎて正確にドリフトを計算できないとしてドリフトは再計算されません。}}&lt;br /&gt;
&lt;br /&gt;
ハードウェアクロックが時間の消失と取得を何度も繰り返している場合、不正なドリフトが保存されている可能性があります (ただし hwclock デーモンが実行中の場合に限ります)。これはハードウェアクロックの時間を間違って設定したり[[#時刻系|時刻系]]を Windows や Mac OS と合わせていないときに起こります。{{ic|/etc/adjtime}} を削除してドリフト値を削除してから、正しいハードウェアとシステムクロックの時間を設定して、時刻系が直ったか確認してください。&lt;br /&gt;
&lt;br /&gt;
{{Note|systemd を使用しているのに {{ic|/etc/adjtime}} に保存されているドリフト値を使いたい (つまり NTP を使えない・使いたくない) 場合、定期的に {{ic|hwclock --adjust}} を実行するか、それを代わりにする [[cron]] ジョブを作って下さい。}}&lt;br /&gt;
&lt;br /&gt;
ソフトウェアクロックはかなり正確ですが、他の時計と同じく完全に正しいわけではありませんし同じようにズレが起こります。稀に、カーネルが割り込みを飛ばしたときにシステム時刻が正確さを失うことがあります。ソフトウェアクロックの正確性を改善するツールが複数存在します。[[#時刻同期]]を見てください。&lt;br /&gt;
&lt;br /&gt;
== 時刻同期 ==&lt;br /&gt;
&lt;br /&gt;
[[Wikipedia:ja:Network Time Protocol|Network Time Protocol]] (NTP) はパケット交換でデータの遅延時間が不確定なネットワークを介してコンピュータシステムの時刻を同期するためのプロトコルです。NTP の実装は以下が存在します:&lt;br /&gt;
&lt;br /&gt;
* {{App|[[Chrony]]|ローミングフレンドリーで、常時オンラインではないシステムのために特別に設計されたクライアントとサーバーです。ほとんどの場合、ntpd よりも速く、より参照に近い形で収束します。|https://chrony.tuxfamily.org/|{{Pkg|chrony}}}}&lt;br /&gt;
* {{App|[[Network Time Protocol daemon]]|プロトコルの[[Wikipedia:ja:リファレンス実装|リファレンス実装]]であり、特に時刻サーバーでの使用が推奨されます。NTPd は割り込みの周期や1秒辺りのティックの数を調整してシステムクロックのずれを減らすことも可能です。NTPd の実行中は11分ごとにハードウェアクロックの再同期も行われます。|http://www.ntp.org/|{{Pkg|ntp}}}}&lt;br /&gt;
* {{App|[[NTPsec]]|NTPd のフォークで、セキュリティに重点を置いています。多くの古いコードが捨てられる以外は、同じように動作します。|https://ntpsec.org/|{{AUR|ntpsec}}}}&lt;br /&gt;
&lt;br /&gt;
適切な NTP ノード以下の機能を持つものは、SNTP（&amp;quot;Sinplified&amp;quot; の意）とみなされます。基本的な SNTP クライアントは、長期的なドリフトを追跡することなく、単に 1 つのサーバーから時刻を取得し、すぐに設定することができます。SNTP は精度が低いですが、より少ないリソースで動作します。この精度は通常、デスクトップユーザーや組み込みワークロードには十分ですが、NTP サーバーには受け入れられません。以下は、SNTP を実装しています：&lt;br /&gt;
&lt;br /&gt;
* {{App|[[ConnMan]]|A lightweight network manager with SNTP support.|[https://web.archive.org/web/20210224075615/https://01.org/connman https://01.org/connman (waybackmachine)]|{{Pkg|connman}}}}&lt;br /&gt;
* {{App|ntpclient|シンプルなコマンドライン NTP クライアント。|http://doolittle.icarus.com/ntpclient/|{{Aur|ntpclient}}}}&lt;br /&gt;
* {{App|[[OpenNTPD]]|クライアントとサーバーの両方を実装する OpenBSD プロジェクト。|http://www.openntpd.org/|{{Pkg|openntpd}}}}&lt;br /&gt;
* {{App|sntp|NTPd に付属している [[wikipedia:ja:Simple Network Time Protocol|SNTP]] クライアント。&#039;&#039;ntpdate&#039;&#039; を置き換えることができ、サーバー以外の環境での使用が推奨されます。|http://www.ntp.org/|{{Pkg|ntp}}}}&lt;br /&gt;
* {{App|[[systemd-timesyncd]]|クライアント側だけを実装したシンプルな [[wikipedia:ja:Simple Network Time Protocol|SNTP]] デーモン。リモートサーバーに時刻を問い合わせることだけを行います。大抵の環境ではクライアントだけで十分です。|https://www.freedesktop.org/wiki/Software/systemd/|{{Pkg|systemd}}}}&lt;br /&gt;
&lt;br /&gt;
== ユーザー別あるいは一時的に時刻を設定 ==&lt;br /&gt;
&lt;br /&gt;
ときとしてシステムの時刻は変えずに一時的に設定を変えたいということがあるでしょう。例えば、時間を使用するアプリケーションを開発していて実際に動きをテストしたい場合やタイムゾーンが異なる場所からサーバーにログインしている場合などです。&lt;br /&gt;
&lt;br /&gt;
アプリケーションにシステム時刻以外の時刻を使わせたいときは ({{Pkg|libfaketime}} に含まれている) {{man|1|faketime}} ユーティリティが使えます。&lt;br /&gt;
&lt;br /&gt;
アプリケーションにシステム設定のタイムゾーン以外のタイムゾーンを使わせたいときは、以下のように {{ic|TZ}} [[環境変数]]を設定してください:&lt;br /&gt;
&lt;br /&gt;
{{hc|1=$ date &amp;amp;&amp;amp; export TZ=&amp;quot;/usr/share/zoneinfo/Pacific/Fiji&amp;quot; &amp;amp;&amp;amp; date|2=&lt;br /&gt;
Tue Nov  1 14:34:51 CET 2016&lt;br /&gt;
Wed Nov  2 01:34:51 FJT 2016&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
環境変数によってシステムの時刻が変わるわけではないため、プログラムの開発時に UTC からの時差を変えたり DST をテストすることが可能です。&lt;br /&gt;
&lt;br /&gt;
タイムゾーンを別々に設定するケースとして同一システム上にユーザーが複数存在する場合も考えられます。シェルの設定ファイルで {{ic|TZ}} 変数を設定することでユーザーごとにタイムゾーンを設定できます。[[環境変数#変数の定義]]や[[自動起動#シェル]]を参照してください。&lt;br /&gt;
&lt;br /&gt;
== ヒントとテクニック ==&lt;br /&gt;
&lt;br /&gt;
=== fake-hwclock ===&lt;br /&gt;
&lt;br /&gt;
[https://github.com/xanmanning/alarm-fake-hwclock alarm-fake-hwclock] は RTC をバックアップするバッテリーが搭載されていないシステム用のスクリプトで、シャットダウン時に現在時刻を保存して、起動時に保存した時刻を復元する systemd サービスが付属しています。これによって時刻が飛んでしまうエラーを防ぐことができます。&lt;br /&gt;
&lt;br /&gt;
{{AUR|fake-hwclock-git}} を[[インストール]]して {{ic|fake-hwclock.service}} を[[Systemd#ユニットを使う|起動・有効化]]してください。&lt;br /&gt;
&lt;br /&gt;
== トラブルシューティング ==&lt;br /&gt;
&lt;br /&gt;
=== 時計が示している値が UTC でも localtime でもない ===&lt;br /&gt;
&lt;br /&gt;
さまざまな理由が考えられます。例えば、ハードウェアクロックが localtime で動いているのに、{{ic|timedatectl}} が UTC に設定されていると、タイムゾーンのオフセットが UTC に二重に適用されることで、localtime でも UTC でもない間違った値になってしまいます。&lt;br /&gt;
&lt;br /&gt;
時計を正しい時刻に直して、ハードウェアクロックに正しい UTC を書き込むには、以下の手順に従って下さい:&lt;br /&gt;
&lt;br /&gt;
* [[Network Time Protocol daemon|NTP]] を設定してください (サービスとして有効にする必要はありません)。&lt;br /&gt;
* [[#タイムゾーン|タイムゾーン]]を適切に設定してください。&lt;br /&gt;
* {{ic|ntpd -qg}} を実行して手動で時計をネットワークと同期してください、ローカル UTC とネットワーク UTC の時差は無視します。&lt;br /&gt;
* {{ic|hwclock --systohc}} を実行して現在のソフトウェア UTC 時刻をハードウェアクロックに書き込んで下さい。&lt;br /&gt;
&lt;br /&gt;
== 資料 ==&lt;br /&gt;
&lt;br /&gt;
* [http://sunnyan.tistory.com/entry/Linux-Clocks-and-Time Linux Tips - Linux, Clocks, and Time]&lt;br /&gt;
* [https://opensource.com/article/17/6/timekeeping-linux-vms An introduction to timekeeping in Linux VMs]&lt;br /&gt;
* {{Pkg|tzdata}} で使われている [http://www.twinsun.com/tz/tz-link.htm タイムゾーンと夏時間のソース]&lt;br /&gt;
* [https://www.ucolick.org/~sla/leapsecs/timescales.html Time Scales]&lt;br /&gt;
* [[Gentoo: System time]]&lt;br /&gt;
* [[Wikipedia:ja:時間]]&lt;br /&gt;
* [https://www.datetimeonline.com/time/gmt-utc-time The Difference Between GMT and UTC]&lt;/div&gt;</summary>
		<author><name>Eyssant</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E6%99%82%E5%88%BB&amp;diff=38640</id>
		<title>システム時刻</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E6%99%82%E5%88%BB&amp;diff=38640"/>
		<updated>2024-08-21T12:30:40Z</updated>

		<summary type="html">&lt;p&gt;Eyssant: 計時のためのリファレンスを追加&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:メインボードと BIOS]]&lt;br /&gt;
[[Category:システム管理]]&lt;br /&gt;
[[en:System time]]&lt;br /&gt;
[[es:System time]]&lt;br /&gt;
[[fa:زمان]]&lt;br /&gt;
[[fr:System time]]&lt;br /&gt;
[[zh-hans:System time]]&lt;br /&gt;
[[zh-hant:System time]]&lt;br /&gt;
{{Related articles start}}&lt;br /&gt;
{{Related|ネットワークタイムプロトコルデーモン}}&lt;br /&gt;
{{Related|OpenNTPD}}&lt;br /&gt;
{{Related|Chrony}}&lt;br /&gt;
{{Related|systemd-timesyncd}}&lt;br /&gt;
{{Related articles end}}&lt;br /&gt;
&lt;br /&gt;
オペレーティング システムでは、時間 (クロック) は 3 つの部分によって決定されます: 時間の値、現地時間か UTC かそれ以外か、タイム ゾーン、および該当する場合は夏時間 (DST) です。この記事では、それらが何であるか、およびそれらの読み取り/設定方法について説明します。システムには、ハードウェア クロックとシステム クロックの 2 つのクロックが存在します。これについても、この記事で詳しく説明します。&lt;br /&gt;
&lt;br /&gt;
ほとんどのオペレーティング システムの標準的な動作は次のとおりです。&lt;br /&gt;
&lt;br /&gt;
* 起動時にハードウェア クロックからシステム クロックを設定します。&lt;br /&gt;
* システムクロックの正確な時刻を維持します。[[#時刻同期]] を参照してください。&lt;br /&gt;
* シャットダウン時にシステム クロックからハードウェア クロックを設定します。&lt;br /&gt;
&lt;br /&gt;
== ハードウェアクロック == &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;ハードウェアクロック&#039;&#039;&#039; (又の名をリアルタイムクロック (Real Time Clock, RTC) もしくは CMOS クロック) は次の値を保存しています: 年・月・日・時・分・秒。2016 年以降の[[UEFI]] ファームウェアには、タイムゾーンとサマータイムを保存する機能を備えられています。&lt;br /&gt;
&lt;br /&gt;
===  ハードウェアクロックの読み込み ===&lt;br /&gt;
&lt;br /&gt;
 # hwclock --show&lt;br /&gt;
&lt;br /&gt;
=== システムクロックからハードウェアクロックを設定する ===&lt;br /&gt;
&lt;br /&gt;
以下は、システムクロックからハードウェアクロックを設定するものです。さらに、{{ic|/etc/adjtime}} を更新するか、存在しない場合は作成します。このファイルに関するより詳しい情報は [[#タイムスキュー]] の項と同様に {{man|8|hwclock|The Adjtime File}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
 # hwclock --systohc&lt;br /&gt;
&lt;br /&gt;
== システムクロック ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;システムクロック&#039;&#039;&#039; (又の名をソフトウェアクロック) は次の情報を記録しています: 時刻、タイムゾーン、そして DST が適用されるかどうか。Linux カーネルは1970年1月1日の午前0時からの秒数でシステムクロックをはじき出します。システムクロックの初期値は {{ic|/etc/adjtime}} を使ってハードウェアクロックから算定されます。起動が完了した後は、システムクロックはハードウェアクロックとは独立して動作します。Linux カーネルはタイマー割り込みを数えることによりシステムクロックを記録します。&lt;br /&gt;
&lt;br /&gt;
=== 時刻を表示する ===&lt;br /&gt;
&lt;br /&gt;
現在のシステム時刻を確認するには (UTC と現地時間のどちらも表示されます):&lt;br /&gt;
&lt;br /&gt;
 $ timedatectl status&lt;br /&gt;
&lt;br /&gt;
root で同じコマンドを実行すればハードウェアクロックの時間も表示します。&lt;br /&gt;
&lt;br /&gt;
=== 時刻を設定する ===&lt;br /&gt;
&lt;br /&gt;
直接システムクロックを設定するには:&lt;br /&gt;
 # timedatectl set-time &amp;quot;yyyy-MM-dd hh:mm:ss&amp;quot;&lt;br /&gt;
例:&lt;br /&gt;
 # timedatectl set-time &amp;quot;2014-05-26 11:13:54&amp;quot;&lt;br /&gt;
2014年5月26日、11時13分54秒に設定されます。&lt;br /&gt;
&lt;br /&gt;
=== RTC ===&lt;br /&gt;
&lt;br /&gt;
ほとんどのオペレーティングシステムは:&lt;br /&gt;
&lt;br /&gt;
* 起動時にハードウェアクロックからシステムクロックを設定します&lt;br /&gt;
* [[Network Time Protocol daemon|NTP]] デーモンを使ってシステムクロックの時間を正確に保ちます&lt;br /&gt;
* シャットダウン時にシステムクロックからハードウェアクロックを設定します&lt;br /&gt;
&lt;br /&gt;
== 時刻系 ==&lt;br /&gt;
&lt;br /&gt;
2つの時刻系が存在します: 地方時 (&#039;&#039;&#039;localtime&#039;&#039;&#039;) と [[Wikipedia:ja:協定世界時|協定世界時]] (&#039;&#039;&#039;C&#039;&#039;&#039;oordinated &#039;&#039;&#039;U&#039;&#039;&#039;niversal &#039;&#039;&#039;T&#039;&#039;&#039;ime, &#039;&#039;&#039;UTC&#039;&#039;&#039;) です。地方時系は現在の&#039;&#039;タイムゾーン&#039;&#039;によって決まりますが、UTC は&#039;&#039;世界時&#039;&#039;であり、タイムゾーンの値は関係ありません。概念的には異なっていますが、UTC は GMT (グリニッジ標準時, Greenwich Mean Time) とも言われます。&lt;br /&gt;
&lt;br /&gt;
ハードウェアクロック (CMOS クロック, BIOS で表示される時間) で使われる時刻系はオペレーティングシステムによって定義されます。デフォルトでは、Windows は localtime を使いますが、Mac OS は UTC を使っていて、UNIX ライクなオペレーティングシステムでは決まっていません。一般的に、UTC を使う OS は起動時に CMOS (ハードウェアクロック) の時間を UTC 時間 (GMT, Greenwich time) だと認識して、あなたのタイムゾーンによってその時間を調整してシステム時刻を設定します。&lt;br /&gt;
&lt;br /&gt;
複数のオペレーティングシステムがマシンにインストールされている場合、それらはすべて同じハードウェアクロックから現在の時刻を取得します。システム間の競合を避けるために、UTC に設定することをお勧めします。それ以外の場合、ハードウェアクロックが「現地時間」に設定されている場合、たとえば [[Wikipedia:ja:夏時間|DST]] の変更後に複数のオペレーティングシステムがそれを調整する可能性があり、その結果、過剰な修正が行われます。異なるタイムゾーン間を移動し、オペレーティング システムの 1 つを使用してシステム/ハードウェア クロックをリセットするときにも、問題が発生する可能性があります。&lt;br /&gt;
&lt;br /&gt;
ハードウェアクロックは、{{ic|timedatectl}} コマンドで照会および設定ができます。&lt;br /&gt;
以下を使用して、Arch システムの現在のハードウェアクロック時間標準を確認できます。&lt;br /&gt;
&lt;br /&gt;
{{hc|$ timedatectl {{!}} grep local|&lt;br /&gt;
RTC in local TZ: no&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ハードウェアクロックは {{ic|timedatectl}} コマンドで尋ねたり設定できます。ハードウェアクロックの時刻系を localtime に変更するには次を実行してください:&lt;br /&gt;
&lt;br /&gt;
 # timedatectl set-local-rtc true&lt;br /&gt;
&lt;br /&gt;
ハードウェアクロックの時刻系を localtime に変更するには、次を実行してください:&lt;br /&gt;
&lt;br /&gt;
 # timedatectl set-local-rtc &#039;&#039;&#039;1&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
逆にハードウェアクロックの時刻系を UTC に戻すには次を実行してください:&lt;br /&gt;
&lt;br /&gt;
 # timedatectl set-local-rtc &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
これらは {{ic|/etc/adjtime}} を自動的に生成し、それに応じて RTC を更新します。これ以上の設定は必要ありません。&lt;br /&gt;
&lt;br /&gt;
カーネルの起動中、RTC ドライバーがロードされた時点で、ハードウェアクロックからシステムクロックを設定することができます。設定するかどうかはハードウェアプラットフォーム、カーネルのバージョン・ビルドオプション次第です。設定される場合、ブートシーケンスで既に、ハードウェアクロックは UTC と認識され {{ic|/sys/class/rtc/rtcN/hctosys}} (N=0,1,2,..) の値は 1 に設定されます。その後、{{ic|/etc/adjtime}} の値を使って、再度 systemd によってハードウェアクロックからシステムクロックが設定されます。そのため、ハードウェアクロックで localtime を使っているとブートシーケンス中に予期しない動作が発生するかもしれません。例えば、システム時刻が後戻りするなど。従ってこの設定は良いアイデアとは言えません。&lt;br /&gt;
&lt;br /&gt;
その後、{{ic|/etc/adjtime}} の値に応じて、systemd によってハードウェアクロックからシステムクロックが再度設定されます。したがって、ハードウェアクロックで localtime を使用すると、ブートシーケンス中に予期しない動作が発生する可能性があります。たとえば、システム時間が逆行することは、常に悪い考えです ([https://www.cl.cam.ac.uk/~mgk25/mswish/ut-rtc.html 他にもたくさんあります])。ハードウェアクロックが UTC に設定されていてローカルタイムゾーンについてカーネルに通知しないでください。その結果、Linux システムが使用する FAT ファイルシステムのタイムスタンプは UTC になります。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* {{ic|timedatectl}} を使うには [[D-Bus]] が有効になっている必要があります。そのため、(インストール中など) chroot 下でこのコマンドが使えないかもしれません。そのような場合には、hwclock コマンドを使って下さい。&lt;br /&gt;
* {{ic|/etc/adjtime}} が存在しない場合、[[systemd]] はハードウェアクロックが UTC に設定されていると認識しています。}}&lt;br /&gt;
&lt;br /&gt;
=== Windows で UTC を使う ===&lt;br /&gt;
&lt;br /&gt;
RTC を localtime に設定する理由に Windows とのデュアルブートをするためということがあります ([http://blogs.msdn.com/b/oldnewthing/archive/2004/09/02/224672.aspx Windows は localtime を使っています])。しかしながら、Windows ではレジストリを編集することで RTC で UTC を使っていても対応できるようにすることができます。従って、Linux に localtime を使わせるよりも Windows に UTC を使わせるようにすることが推奨されます。Windows に UTC を使わせる場合、Windows のインターネット時刻機能をオフにするようにしてください。オフにすると Windows はハードウェアクロックにメスを入れなくなるので、代わりに [[Network Time Protocol daemon|NTP]] デーモンを使って RTC を同期させる必要があります。&lt;br /&gt;
&lt;br /&gt;
{{ic|regedit}} を使って、レジストリに十六進数で {{ic|1}} の {{ic|DWORD}} 値を追加してください:&lt;br /&gt;
&lt;br /&gt;
 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TimeZoneInformation\RealTimeIsUniversal&lt;br /&gt;
&lt;br /&gt;
管理者権限で開いたコマンドプロンプトで以下のコマンドを実行することでも設定できます:&lt;br /&gt;
&lt;br /&gt;
 reg add &amp;quot;HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\TimeZoneInformation&amp;quot; /v RealTimeIsUniversal /d 1 /t REG_DWORD /f&lt;br /&gt;
&lt;br /&gt;
もしくは、以下の内容で {{ic|*.reg}} ファイルを (デスクトップに) 作成しそれをダブルクリックしてレジストリにインポートしてください:&lt;br /&gt;
&lt;br /&gt;
 Windows Registry Editor Version 5.00&lt;br /&gt;
 &lt;br /&gt;
 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TimeZoneInformation]&lt;br /&gt;
      &amp;quot;RealTimeIsUniversal&amp;quot;=dword:00000001&lt;br /&gt;
&lt;br /&gt;
{{Note|64ビット版の Windows を使っている場合で、上記の設定を行っても効果がないときは {{ic|DWORD}} の代わりに {{ic|QWORD}} を使うことで問題が解決することがあります。}}&lt;br /&gt;
&lt;br /&gt;
DST が変わったことで Windows が時計を更新すると行ってきた場合は、それに従って下さい。Windows は時計を UTC のままにしておき、表示する時間だけ修正します。&lt;br /&gt;
&lt;br /&gt;
値を設定した後にハードウェアクロックとシステムクロックの時刻を[[#時刻を設定する|更新]]する必要があるかもしれません。&lt;br /&gt;
&lt;br /&gt;
時計がずれる問題が発生している場合、{{ic|tzdata}} を再インストールしてタイムゾーンをもう一度設定してみてください:&lt;br /&gt;
&lt;br /&gt;
 # pacman -S tzdata&lt;br /&gt;
 # timedatectl set-timezone Asia/Tokyo&lt;br /&gt;
&lt;br /&gt;
=== Ubuntu で UTC を使う ===&lt;br /&gt;
&lt;br /&gt;
Ubuntu とその派生ディストリはインストール時に Windows が認識されたときにハードウェアクロックを &amp;quot;localtime&amp;quot; と認識されるように設定します。Linux 初心者が Windows コンピュータで Ubuntu を試したときにレジストリを編集しなくてもよいように故意にこのような挙動となっています。&lt;br /&gt;
&lt;br /&gt;
== タイムゾーン ==&lt;br /&gt;
&lt;br /&gt;
現在のゾーンを確認するには:&lt;br /&gt;
&lt;br /&gt;
 $ timedatectl status&lt;br /&gt;
&lt;br /&gt;
利用可能なゾーンを一覧するには:&lt;br /&gt;
&lt;br /&gt;
 $ timedatectl list-timezones&lt;br /&gt;
&lt;br /&gt;
タイムゾーンを変更するには:&lt;br /&gt;
&lt;br /&gt;
 # timedatectl set-timezone &amp;lt;Zone&amp;gt;/&amp;lt;SubZone&amp;gt;&lt;br /&gt;
&lt;br /&gt;
例:&lt;br /&gt;
&lt;br /&gt;
 # timedatectl set-timezone Asia/Tokyo&lt;br /&gt;
&lt;br /&gt;
このコマンドによって {{ic|/usr/share/zoneinfo/}} 下の zoneinfo ファイルを指し示したシンボリックリンク {{ic|/etc/localtime}} が作られます。リンクを手動で作成する場合 ([[chroot]] の中で {{ic|timedatectl}} が使用できない場合など)、{{man|7|archlinux}} に書かれているように、ハードリンクではなくシンボリックリンクを使ってください:&lt;br /&gt;
&lt;br /&gt;
 # ln -sf /usr/share/zoneinfo/&#039;&#039;Zone&#039;&#039;/&#039;&#039;SubZone&#039;&#039; /etc/localtime&lt;br /&gt;
&lt;br /&gt;
詳細は {{man|1|timedatectl}}, {{man|5|localtime}}, {{man|7|archlinux}} を見てください。&lt;br /&gt;
&lt;br /&gt;
{{Note|systemd 以前の設定ファイル {{ic|/etc/timezone}} がシステムにまだ存在している場合、もう使われていないので削除しても問題ありません。}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|&#039;&#039;tzselect&#039;&#039; を使ってインタラクティブにタイムゾーンを選択することもできます。}}&lt;br /&gt;
&lt;br /&gt;
=== 地理情報を元に設定 ===&lt;br /&gt;
&lt;br /&gt;
IP アドレスの位置情報を元に自動的にタイムゾーンを設定したい場合、{{ic|$ curl https://ipapi.co/timezone}} などで geolocation API を使ってタイムゾーンを取得して {{ic|timedatectl set-timezone}} に出力を渡すことで自動設定できます。以下のサービスが無料あるいは一部無料で geo-IP API を提供しています:&lt;br /&gt;
* https://freegeoip.app&lt;br /&gt;
* https://ipapi.co/&lt;br /&gt;
* http://ip-api.com/&lt;br /&gt;
* https://ipstack.com/&lt;br /&gt;
* https://timezoneapi.io/&lt;br /&gt;
&lt;br /&gt;
また、{{aur|tzupdate}} ツールは IP アドレスの位置情報を元にタイムゾーンを自動設定します。&lt;br /&gt;
&lt;br /&gt;
==== NetworkManager がネットワークに接続するたびにタイムゾーンを更新する ====&lt;br /&gt;
&lt;br /&gt;
[[NetworkManager# NetworkManager dispatcher を使用したネットワークサービス|NetworkManager dispatcher スクリプト]] を作成します:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/NetworkManager/dispatcher.d/09-timezone|&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
case &amp;quot;$2&amp;quot; in&lt;br /&gt;
    up)&lt;br /&gt;
        timedatectl set-timezone &amp;quot;$(curl --fail &amp;lt;nowiki&amp;gt;https://ipapi.co/timezone&amp;lt;/nowiki&amp;gt;)&amp;quot;&lt;br /&gt;
    ;;&lt;br /&gt;
esac&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|{{ic|up}} の代わりに {{ic|connectivity-change}} を使用すると、[[OpenConnect]] などのクライアントで VPN に接続するときにタイムゾーンの変更を防ぐことができます。}}&lt;br /&gt;
&lt;br /&gt;
あるいは、ツール {{aur|tzupdate}} が IP アドレスのジオロケーションに基づいてタイムゾーンを自動的に設定します。この [https://medium.com/@ipdata_co/what-is-the-best-commercial-ip-geolocation-api-d8195cda7027 最も人気のある IP 地理位置情報 API の比較] は、プロダクションでどの API を使うか決める際に役に立つかもしれません。&lt;br /&gt;
&lt;br /&gt;
== クロックスキュー ==&lt;br /&gt;
&lt;br /&gt;
全ての時計は&#039;&#039;本当の時間&#039;&#039; (一番正確なのは[[Wikipedia:ja:国際原子時|国際原子時]]) とは違う値を示しています、どの時計も完全ではありません。クォーツを使っている電子時計は（不完全な）時間を刻んでいますが、規則的なズレを生じさせています。この本質的な&#039;ズレ&#039;は&#039;クロックスキュー&#039;や&#039;クロックドリフト&#039;として知られています。&lt;br /&gt;
&lt;br /&gt;
ハードウェアクロックが {{ic|hwclock}} で設定された時、新しいドリフト値（一日に何秒ズレるか）が算定されます。このドリフト値は新しく設定された値と以前に設定されていたハードウェアクロックの値の差から計算され、以前のドリフト値とハードウェアクロックが最後に設定された時間を考慮しています。新しいドリフト値と時計が設定された時刻は {{ic|/etc/adjtime}} ファイルに書き込まれ以前の値を上書きします。これにより {{ic|hwclock --adjust}} を実行することでハードウェアクロックのずれを調整できるようになっています。また、{{ic|hwclock}} デーモンが有効になっている場合シャットダウン時にも実行されます (よって systemd を使っているシステムでは実行されません)。&lt;br /&gt;
&lt;br /&gt;
{{Note|以前に設定した時から24時間以内に再度 hwlock が設定された場合、{{ic|hwclock}} は経過時間が短すぎて正確にドリフトを計算できないとしてドリフトは再計算されません。}}&lt;br /&gt;
&lt;br /&gt;
ハードウェアクロックが時間の消失と取得を何度も繰り返している場合、不正なドリフトが保存されている可能性があります (ただし hwclock デーモンが実行中の場合に限ります)。これはハードウェアクロックの時間を間違って設定したり[[#時刻系|時刻系]]を Windows や Mac OS と合わせていないときに起こります。{{ic|/etc/adjtime}} を削除してドリフト値を削除してから、正しいハードウェアとシステムクロックの時間を設定して、時刻系が直ったか確認してください。&lt;br /&gt;
&lt;br /&gt;
{{Note|systemd を使用しているのに {{ic|/etc/adjtime}} に保存されているドリフト値を使いたい (つまり NTP を使えない・使いたくない) 場合、定期的に {{ic|hwclock --adjust}} を実行するか、それを代わりにする [[cron]] ジョブを作って下さい。}}&lt;br /&gt;
&lt;br /&gt;
ソフトウェアクロックはかなり正確ですが、他の時計と同じく完全に正しいわけではありませんし同じようにズレが起こります。稀に、カーネルが割り込みを飛ばしたときにシステム時刻が正確さを失うことがあります。ソフトウェアクロックの正確性を改善するツールが複数存在します。[[#時刻同期]]を見てください。&lt;br /&gt;
&lt;br /&gt;
== 時刻同期 ==&lt;br /&gt;
&lt;br /&gt;
[[Wikipedia:ja:Network Time Protocol|Network Time Protocol]] (NTP) はパケット交換でデータの遅延時間が不確定なネットワークを介してコンピュータシステムの時刻を同期するためのプロトコルです。NTP の実装は以下が存在します:&lt;br /&gt;
&lt;br /&gt;
* {{App|[[Chrony]]|ローミングフレンドリーで、常時オンラインではないシステムのために特別に設計されたクライアントとサーバーです。ほとんどの場合、ntpd よりも速く、より参照に近い形で収束します。|https://chrony.tuxfamily.org/|{{Pkg|chrony}}}}&lt;br /&gt;
* {{App|[[Network Time Protocol daemon]]|プロトコルの[[Wikipedia:ja:リファレンス実装|リファレンス実装]]であり、特に時刻サーバーでの使用が推奨されます。NTPd は割り込みの周期や1秒辺りのティックの数を調整してシステムクロックのずれを減らすことも可能です。NTPd の実行中は11分ごとにハードウェアクロックの再同期も行われます。|http://www.ntp.org/|{{Pkg|ntp}}}}&lt;br /&gt;
* {{App|[[NTPsec]]|NTPd のフォークで、セキュリティに重点を置いています。多くの古いコードが捨てられる以外は、同じように動作します。|https://ntpsec.org/|{{AUR|ntpsec}}}}&lt;br /&gt;
&lt;br /&gt;
適切な NTP ノード以下の機能を持つものは、SNTP（&amp;quot;Sinplified&amp;quot; の意）とみなされます。基本的な SNTP クライアントは、長期的なドリフトを追跡することなく、単に 1 つのサーバーから時刻を取得し、すぐに設定することができます。SNTP は精度が低いですが、より少ないリソースで動作します。この精度は通常、デスクトップユーザーや組み込みワークロードには十分ですが、NTP サーバーには受け入れられません。以下は、SNTP を実装しています：&lt;br /&gt;
&lt;br /&gt;
* {{App|[[ConnMan]]|A lightweight network manager with SNTP support.|[https://web.archive.org/web/20210224075615/https://01.org/connman https://01.org/connman (waybackmachine)]|{{Pkg|connman}}}}&lt;br /&gt;
* {{App|ntpclient|シンプルなコマンドライン NTP クライアント。|http://doolittle.icarus.com/ntpclient/|{{Aur|ntpclient}}}}&lt;br /&gt;
* {{App|[[OpenNTPD]]|クライアントとサーバーの両方を実装する OpenBSD プロジェクト。|http://www.openntpd.org/|{{Pkg|openntpd}}}}&lt;br /&gt;
* {{App|sntp|NTPd に付属している [[wikipedia:ja:Simple Network Time Protocol|SNTP]] クライアント。&#039;&#039;ntpdate&#039;&#039; を置き換えることができ、サーバー以外の環境での使用が推奨されます。|http://www.ntp.org/|{{Pkg|ntp}}}}&lt;br /&gt;
* {{App|[[systemd-timesyncd]]|クライアント側だけを実装したシンプルな [[wikipedia:ja:Simple Network Time Protocol|SNTP]] デーモン。リモートサーバーに時刻を問い合わせることだけを行います。大抵の環境ではクライアントだけで十分です。|https://www.freedesktop.org/wiki/Software/systemd/|{{Pkg|systemd}}}}&lt;br /&gt;
&lt;br /&gt;
== ユーザー別あるいは一時的に時刻を設定 ==&lt;br /&gt;
&lt;br /&gt;
ときとしてシステムの時刻は変えずに一時的に設定を変えたいということがあるでしょう。例えば、時間を使用するアプリケーションを開発していて実際に動きをテストしたい場合やタイムゾーンが異なる場所からサーバーにログインしている場合などです。&lt;br /&gt;
&lt;br /&gt;
アプリケーションにシステム時刻以外の時刻を使わせたいときは ({{Pkg|libfaketime}} に含まれている) {{man|1|faketime}} ユーティリティが使えます。&lt;br /&gt;
&lt;br /&gt;
アプリケーションにシステム設定のタイムゾーン以外のタイムゾーンを使わせたいときは、以下のように {{ic|TZ}} [[環境変数]]を設定してください:&lt;br /&gt;
&lt;br /&gt;
{{hc|1=$ date &amp;amp;&amp;amp; export TZ=&amp;quot;/usr/share/zoneinfo/Pacific/Fiji&amp;quot; &amp;amp;&amp;amp; date|2=&lt;br /&gt;
Tue Nov  1 14:34:51 CET 2016&lt;br /&gt;
Wed Nov  2 01:34:51 FJT 2016&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
環境変数によってシステムの時刻が変わるわけではないため、プログラムの開発時に UTC からの時差を変えたり DST をテストすることが可能です。&lt;br /&gt;
&lt;br /&gt;
タイムゾーンを別々に設定するケースとして同一システム上にユーザーが複数存在する場合も考えられます。シェルの設定ファイルで {{ic|TZ}} 変数を設定することでユーザーごとにタイムゾーンを設定できます。[[環境変数#変数の定義]]や[[自動起動#シェル]]を参照してください。&lt;br /&gt;
&lt;br /&gt;
== ヒントとテクニック ==&lt;br /&gt;
&lt;br /&gt;
=== fake-hwclock ===&lt;br /&gt;
&lt;br /&gt;
[https://github.com/xanmanning/alarm-fake-hwclock alarm-fake-hwclock] は RTC をバックアップするバッテリーが搭載されていないシステム用のスクリプトで、シャットダウン時に現在時刻を保存して、起動時に保存した時刻を復元する systemd サービスが付属しています。これによって時刻が飛んでしまうエラーを防ぐことができます。&lt;br /&gt;
&lt;br /&gt;
{{AUR|fake-hwclock-git}} を[[インストール]]して {{ic|fake-hwclock.service}} を[[Systemd#ユニットを使う|起動・有効化]]してください。&lt;br /&gt;
&lt;br /&gt;
== トラブルシューティング ==&lt;br /&gt;
&lt;br /&gt;
=== 時計が示している値が UTC でも localtime でもない ===&lt;br /&gt;
&lt;br /&gt;
さまざまな理由が考えられます。例えば、ハードウェアクロックが localtime で動いているのに、{{ic|timedatectl}} が UTC に設定されていると、タイムゾーンのオフセットが UTC に二重に適用されることで、localtime でも UTC でもない間違った値になってしまいます。&lt;br /&gt;
&lt;br /&gt;
時計を正しい時刻に直して、ハードウェアクロックに正しい UTC を書き込むには、以下の手順に従って下さい:&lt;br /&gt;
&lt;br /&gt;
* [[Network Time Protocol daemon|NTP]] を設定してください (サービスとして有効にする必要はありません)。&lt;br /&gt;
* [[#タイムゾーン|タイムゾーン]]を適切に設定してください。&lt;br /&gt;
* {{ic|ntpd -qg}} を実行して手動で時計をネットワークと同期してください、ローカル UTC とネットワーク UTC の時差は無視します。&lt;br /&gt;
* {{ic|hwclock --systohc}} を実行して現在のソフトウェア UTC 時刻をハードウェアクロックに書き込んで下さい。&lt;br /&gt;
&lt;br /&gt;
== 資料 ==&lt;br /&gt;
&lt;br /&gt;
* [http://sunnyan.tistory.com/entry/Linux-Clocks-and-Time Linux Tips - Linux, Clocks, and Time]&lt;br /&gt;
* [https://opensource.com/article/17/6/timekeeping-linux-vms An introduction to timekeeping in Linux VMs]&lt;br /&gt;
* {{Pkg|tzdata}} で使われている [http://www.twinsun.com/tz/tz-link.htm タイムゾーンと夏時間のソース]&lt;br /&gt;
* [https://www.ucolick.org/~sla/leapsecs/timescales.html Time Scales]&lt;br /&gt;
* [[Gentoo: System time]]&lt;br /&gt;
* [[Wikipedia:ja:時間]]&lt;br /&gt;
* [https://www.datetimeonline.com/time/gmt_utc_time.php The Difference Between GMT and UTC]&lt;/div&gt;</summary>
		<author><name>Eyssant</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=Python&amp;diff=16131</id>
		<title>Python</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=Python&amp;diff=16131"/>
		<updated>2020-04-29T14:28:19Z</updated>

		<summary type="html">&lt;p&gt;Eyssant: /* 参照 */ added a python tutorial link&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:プログラミング言語]]&lt;br /&gt;
[[de:Python]]&lt;br /&gt;
[[en:Python]]&lt;br /&gt;
[[es:Python]]&lt;br /&gt;
[[ko:Python]]&lt;br /&gt;
[[ru:Python]]&lt;br /&gt;
[[zh-hans:Python]]&lt;br /&gt;
{{Related articles start}}&lt;br /&gt;
{{Related|Python パッケージガイドライン}}&lt;br /&gt;
{{Related|Python/仮想環境}}&lt;br /&gt;
{{Related|mod_wsgi}}&lt;br /&gt;
{{Related|Django}}&lt;br /&gt;
{{Related articles end}}&lt;br /&gt;
&lt;br /&gt;
[[Wikipedia:ja:Python|Wikipedia]] より:&lt;br /&gt;
&lt;br /&gt;
:Python は、広く使用されている汎用のスクリプト言語である。コードのリーダビリティが高くなるように言語が設計されているとされ、その構文のおかげで、C++ や Java などの言語に比べて、より少ないコード行数でプログラムを表現することができるとされている。小規模なプログラムから大規模なプログラムまで、さまざまなプログラムをクリアに書けるように、多くのコードが提供されている。&lt;br /&gt;
:Python は複数のプログラミングパラダイムをサポートしており、オブジェクト指向、命令型、関数型、手続き型などのスタイルでプログラムを書くことができる。動的型付けであり、自動メモリ管理が可能で、さまざまな領域をカバーする大規模な標準ライブラリを提供している。&lt;br /&gt;
&lt;br /&gt;
== インストール ==&lt;br /&gt;
&lt;br /&gt;
=== Python 3 ===&lt;br /&gt;
&lt;br /&gt;
Python 3 は Python 言語の最新バージョンであり、Python 2 と互換性がありません。大まかには同じですが、細かいところ、特に辞書や文字列などのオブジェクトの扱い方が大幅に変更されており、非推奨になっていた機能が多数削除されています。また、標準ライブラリが目立たないところで再編成されています。大まかな差異については、[https://wiki.python.org/moin/Python2orPython3 Python2orPython3] や Dive into Python 3 の [http://getpython3.com/diveintopython3/porting-code-to-python-3-with-2to3.html 章] を見て下さい。&lt;br /&gt;
&lt;br /&gt;
最新版の Python 3 をインストールするには、{{Pkg|python}} パッケージを[[インストール]]してください。&lt;br /&gt;
&lt;br /&gt;
最新の RC/ベータ版をソースからビルドしたいときは、[https://www.python.org/downloads/ Python Downloads] を訪れて下さい。[[Arch User Repository]] に [[PKGBUILD]] も含まれています。RC 版をビルドする場合、バイナリは (デフォルトで) {{ic|/usr/local/bin/python3.x}} にインストールされるので注意してください。&lt;br /&gt;
&lt;br /&gt;
=== Python 2 ===&lt;br /&gt;
&lt;br /&gt;
最新版の Python 2 をインストールするには、{{Pkg|python2}} パッケージを[[インストール]]してください。&lt;br /&gt;
&lt;br /&gt;
Python 2 は Python 3 と上手く共存することができます。このバージョンを実行するときは {{ic|python2}} を指定する必要があります。&lt;br /&gt;
&lt;br /&gt;
Python 2 を必要とするプログラムでは Python 3 の {{ic|/usr/bin/python}} ではなく {{ic|/usr/bin/python2}} を指定する必要があります。&lt;br /&gt;
&lt;br /&gt;
それには、プログラムやスクリプトをテキストエディタで開いて一番最初の行を変更してください。&lt;br /&gt;
&lt;br /&gt;
一番最初の行は以下のどちらかになっています:&lt;br /&gt;
 #!/usr/bin/env python&lt;br /&gt;
または:&lt;br /&gt;
 #!/usr/bin/python&lt;br /&gt;
&lt;br /&gt;
どちらにしても、{{ic|python}} を {{ic|python2}} に変更することでプログラムは Python 3 ではなく Python 2 を使用するようになります。&lt;br /&gt;
&lt;br /&gt;
スクリプトを変更せずに python2 を強制的に使用させる方法として {{ic|python2}} で明示的にプログラムを呼び出すという方法もあります、例:&lt;br /&gt;
 $ python2 &#039;&#039;myScript.py&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
最後に、スクリプトの呼び出しを制御できない場合、環境を変更する方法があります。この方法はスクリプトが {{ic|#!/usr/bin/env python}} を使っている場合のみ動作し、{{ic|#!/usr/bin/python}} を使っている場合は動作しません。このトリックは {{ic|env}} が {{ic|PATH}} 変数内の最初に一致したエントリを探すことに依存しています。&lt;br /&gt;
&lt;br /&gt;
まずダミーディレクトリを作成:&lt;br /&gt;
 $ mkdir ~/bin&lt;br /&gt;
そして {{ic|python}} から &#039;&#039;python2&#039;&#039; のシンボリックリンクと、設定スクリプトをディレクトリに追加:&lt;br /&gt;
 $ ln -s /usr/bin/python2 ~/bin/python&lt;br /&gt;
 $ ln -s /usr/bin/python2-config ~/bin/python-config&lt;br /&gt;
最後にあなたの {{ic|PATH}} 変数の&#039;&#039;最初に&#039;&#039;新しいディレクトリを追加してください:&lt;br /&gt;
 $ export PATH=~/bin:$PATH&lt;br /&gt;
{{Note|上記のコマンドによる[[環境変数]]の変更は永続的ではありません。現在のターミナルセッションでのみ有効です。}}&lt;br /&gt;
{{ic|env}} によってどの python インタプリタが使われているかを確認するには次のコマンドを使ってください:&lt;br /&gt;
 $ which python&lt;br /&gt;
&lt;br /&gt;
スクリプトによって呼び出される {{ic|#!/usr/bin/env python}} を使用して環境を変更する別の方法として [[#仮想環境]] を使うものがあります。&lt;br /&gt;
&lt;br /&gt;
== 昔のバージョン ==&lt;br /&gt;
&lt;br /&gt;
{{warning|2014年から Python のバージョン 2.7 と 3.4 以前はアップデートがもはやされていません。セキュリティパッチすらありません。インターネットを使用するアプリケーションや信頼できないコードで古いバージョンを使用するのは危険なので推奨されません。}}&lt;br /&gt;
&lt;br /&gt;
現在のバージョンの Python で動作しないアプリケーションのような、過去の遺物を使用したり、古いバージョンの Python が入っているディストリビューションでの Python プログラムの動作をテストするために、[[AUR]] から昔のバージョンの Python をインストールすることができます:&lt;br /&gt;
&lt;br /&gt;
* Python 3.5: {{AUR|python35}}&lt;br /&gt;
* Python 3.4: {{AUR|python34}}&lt;br /&gt;
* Python 2.6: {{AUR|python26}}&lt;br /&gt;
* Python 2.5: {{AUR|python25}}&lt;br /&gt;
* Python 1.5: {{AUR|python15}}&lt;br /&gt;
&lt;br /&gt;
古いバージョンの Python のモジュールやライブラリは {{ic|python&amp;lt;&#039;&#039;version without period&#039;&#039;&amp;gt;}} で AUR を検索することで見つけられます。例: 2.6 のモジュールを検索する場合 &amp;quot;python26&amp;quot;。&lt;br /&gt;
&lt;br /&gt;
== パッケージの管理 ==&lt;br /&gt;
&lt;br /&gt;
[[公式リポジトリ]]や [[AUR]] には膨大な Python パッケージが収められていますが、Python エコシステムには [https://pypi.python.org/ PyPI] (Python Package Index) を使用する独自のパッケージマネージャが存在します。&lt;br /&gt;
&lt;br /&gt;
* {{App|pip|Python パッケージをインストールするための PyPA ツール。|https://pip.pypa.io/|{{Pkg|python-pip}}, {{Pkg|python2-pip}}}}&lt;br /&gt;
* {{App|setuptools|Python パッケージを簡単にダウンロード・ビルド・インストール・アップグレード・アンインストール。|https://setuptools.readthedocs.io/|{{Pkg|python-setuptools}}, {{Pkg|python2-setuptools}}}}&lt;br /&gt;
&lt;br /&gt;
上記のツールの簡単な歴史や比較は [https://packaging.python.org/pip_easy_install/#pip-vs-easy-install pip vs easy_install] を見てください。&lt;br /&gt;
&lt;br /&gt;
Python のパッケージ管理におけるベストプラクティスは権威筋の [https://packaging.python.org/ こちら] の資料に詳しく載っています。&lt;br /&gt;
&lt;br /&gt;
{{Note|pip を pacman に統合して pip パッケージの PKGBUILD を自動的に生成するツールも存在します: {{AUR|pipman-git}}, {{AUR|pip2arch-git}}。}}&lt;br /&gt;
&lt;br /&gt;
== ウィジェットバインディング ==&lt;br /&gt;
&lt;br /&gt;
以下の[[Wikipedia:ja:ウィジェット・ツールキット|ウィジェットツールキット]]のバインディングが存在します:&lt;br /&gt;
* {{App|TkInter|Tk バインディング|https://wiki.python.org/moin/TkInter|標準モジュール}}&lt;br /&gt;
* {{App|pyQt|[[Qt]] バインディング|https://riverbankcomputing.com/software/pyqt/intro|{{AUR|python2-pyqt4}} {{Pkg|python2-pyqt5}} {{AUR|python-pyqt4}} {{Pkg|python-pyqt5}}}}&lt;br /&gt;
* {{App|pySide|[[Qt]] バインディング|https://wiki.qt.io/PySide|{{AUR|python2-pyside}} {{AUR|python-pyside}}}}&lt;br /&gt;
* {{App|pyGTK|[[GTK+|GTK+ 2]] バインディング|http://www.pygtk.org/|{{Pkg|pygtk}}}}&lt;br /&gt;
* {{App|PyGObject|GObject Introspection による [[GTK+|GTK+ 2/3]] バインディング|https://wiki.gnome.org/PyGObject/|{{Pkg|python2-gobject2}} {{Pkg|python2-gobject}} {{Pkg|python-gobject2}}{{Broken package link|パッケージが存在しません}} {{Pkg|python-gobject}}}}&lt;br /&gt;
* {{App|wxPython|wxWidgets バインディング|https://wxpython.org/|{{Pkg|python2-wxpython3}} {{Pkg|python-wxpython}}}}&lt;br /&gt;
以上のバインディングを Python で使うには、適当なウィジェットキットをインストールする必要があります。&lt;br /&gt;
&lt;br /&gt;
== ヒントとテクニック ==&lt;br /&gt;
&lt;br /&gt;
=== IPython ===&lt;br /&gt;
[http://ipython.org/ IPython] は Python コマンドラインの強化版です。{{Pkg|ipython}} と {{Pkg|ipython2}} パッケージで利用できます。IPython notebook を利用したい場合、IPython3 notebook には {{Pkg|jupyter-notebook}} を、IPython2 notebook には {{Pkg|ipython2-notebook}} をインストールしてください。&lt;br /&gt;
&lt;br /&gt;
 $ jupyter notebook&lt;br /&gt;
&lt;br /&gt;
を実行することでブラウザを開き IPython カーネルを実行することができます。ブラウザ上で notebook を作成するときに python のバージョンを指定することができます。&lt;br /&gt;
&lt;br /&gt;
[https://bpython-interpreter.org/ bpython] は Python インタプリタの ncurses インターフェイスです。公式リポジトリでは {{Pkg|bpython}} と {{Pkg|bpython2}} で利用できます。&lt;br /&gt;
&lt;br /&gt;
=== 仮想環境 ===&lt;br /&gt;
&lt;br /&gt;
Python は他の仮想環境や、システムの Python パッケージに干渉されることなくパッケージをインストールすることのできる隔離された環境を作成するツールを提供しています。特定のアプリケーションで利用される Python インタプリタを変更することもできます。&lt;br /&gt;
&lt;br /&gt;
詳細は [[Python/仮想環境]] を見てください。&lt;br /&gt;
&lt;br /&gt;
== Python2 シェルで補完を表示 ==&lt;br /&gt;
&lt;br /&gt;
{{Note|この項目は Python2 にのみ関連します。Python 3.4 から [https://docs.python.org/3/tutorial/interactive.html タブ補完] はデフォルトで有効になっています。}}&lt;br /&gt;
&lt;br /&gt;
Python のインタラクティブシェルに以下をコピーしてください:&lt;br /&gt;
{{hc|/usr/bin/python2|2=&lt;br /&gt;
import rlcompleter&lt;br /&gt;
import readline&lt;br /&gt;
readline.parse_and_bind(&amp;quot;tab: complete&amp;quot;)&lt;br /&gt;
}}&lt;br /&gt;
ソース: [http://algorithmicallyrandom.blogspot.com.es/2009/09/tab-completion-in-python-shell-how-to.html]&lt;br /&gt;
&lt;br /&gt;
== トラブルシューティング ==&lt;br /&gt;
=== ビルドスクリプトのバージョン問題の対処 ===&lt;br /&gt;
&lt;br /&gt;
多くのプロジェクトのビルドスクリプトは {{ic|python}} は Python 2 だと仮定していて、このことはエラーを起こします。典型的には {{ic|print &#039;foo&#039;}} は無効な文法であるというエラーが出ます。幸いにも多くの場合、シバン行にハードコードされた {{ic|#!/usr/bin/python}} ではなく {{ic|PATH}} から {{ic|python}} を呼び出していて、Python スクリプトはすべてプロジェクトツリーに含まれています。したがって、ビルドスクリプトを手動で変更する代わりに簡単なワークアラウンドがあります。以下のような {{ic|/usr/local/bin/python}} ファイルを作成してください:&lt;br /&gt;
&lt;br /&gt;
{{hc|/usr/local/bin/python|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
script=$(readlink -f -- &amp;quot;$1&amp;quot;)&lt;br /&gt;
case &amp;quot;$script&amp;quot; in (/path/to/project1/*|/path/to/project2/*|/path/to/project3*)&lt;br /&gt;
    exec python2 &amp;quot;$@&amp;quot;&lt;br /&gt;
    ;;&lt;br /&gt;
esac&lt;br /&gt;
&lt;br /&gt;
exec python3 &amp;quot;$@&amp;quot;&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
ここで {{ic|&amp;lt;nowiki&amp;gt;/path/to/project1/*|/path/to/project2/*|/path/to/project3*&amp;lt;/nowiki&amp;gt;}} は {{ic|&amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;}} によって区切られた Python 2 で動作させる必要のあるすべてのプロジェクトツリーです。&lt;br /&gt;
&lt;br /&gt;
ファイルを実行可能にすることを忘れないください:&lt;br /&gt;
&lt;br /&gt;
 # chmod +x /usr/local/bin/python&lt;br /&gt;
&lt;br /&gt;
その後指定したプロジェクトツリー内のスクリプトは Python 2 で動作します。&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* [http://shop.oreilly.com/product/0636920028154.do O&#039;Reilly&#039;s Learning Python, 5th edition] ([https://www.oreilly.co.jp/books/9784873113937/ 初めての Python 第3版])&lt;br /&gt;
* [http://www.diveintopython.net/ Dive Into Python], [http://getpython3.com/diveintopython3/ Dive Into Python3] ([http://diveintopython3-ja.rdy.jp/ 日本語訳])&lt;br /&gt;
* [https://python.swaroopch.com/ A Byte of Python]&lt;br /&gt;
* [https://learnpythonthehardway.org/ Learn Python the Hard Way]&lt;br /&gt;
* [https://learnpython.org/ Learn Python]&lt;br /&gt;
* [https://stephensugden.com/crash_into_python/ Crash into Python] (他のプログラミング言語に慣れていることを前提としてます)&lt;br /&gt;
* [https://www.apress.com/book/9781590598726 Beginning Game Development with Python and Pygame]&lt;br /&gt;
* [http://www.greenteapress.com/thinkpython/ Think Python] ([http://www.cauldron.sakura.ne.jp/thinkpython/thinkpython/ThinkPython.pdf 日本語訳])&lt;br /&gt;
* [https://pythonspot.com Pythonspot]&lt;br /&gt;
* [http://www.techbeamers.com/python-tutorial-step-by-step/ Learn Python Step by Step]&lt;br /&gt;
* [https://github.com/vinta/awesome-python awesome-python] - Python フレームワーク・ライブラリ・ソフトウェア・資料の厳選リスト。&lt;br /&gt;
* [https://github.com/mahmoud/boltons boltons] - 標準ライブラリで使える構造・レシピ・スニペット。&lt;br /&gt;
* [https://www.alphacodingskills.com/python/ Learn Python Basics to Advanced]&lt;/div&gt;</summary>
		<author><name>Eyssant</name></author>
	</entry>
</feed>