Unix ukládá čas jako počet sekund od 1. ledna 1970. A to znamená Linux také. Vysvětlujeme tento zdánlivě zvláštní systém, a proč byl Dened naplánován na 2038.
První unix epocha
Goethe ( 1749-1832. ) deklarované "každou sekundu je nekonečná hodnota." To je pravda, každý máme jen tolik sekund na planetě Zemi, a my nevíme, kdy naše poslední sekunda bude. Ale víme naše narozeniny, a když začalo naše smrtelné odpočítávání.
Unix. -jako Britská královna -Has dva narozeniny. Nebo přesněji, tam byly dvě samostatné příležitosti, na kterých začalo počítat sekundy své existence. Poprvé Unix začal počítat od půlnoci 1. ledna 1971.
Můžeme to zcela jasně vidět přezkoumáním sekce prvního vydání
Příručka pro programátor UNIX
, datum 3. listopadu 1971. Přejděte dolů na stránku 13 této části a uvidíte popis (nyní zaniklé)
čas
příkaz. Řekli jsme to "
čas
Vrátí čas od 00:00:00, 1. ledna 1971, měřeno v šedietích sekundy. "
Kalendáře a časové systémy měří čas začínající v minulosti v minulosti, jako je kosmologická událost, založení říše, nebo úspěch revoluce. V operačních systémech, libovolný čas a datum jsou vybrány jako bod, ze kterého spustí počítání. To je epocha Pro tento operační systém.
UNIX používal 32bitové nepodepsané celé číslo, aby držel počet 60. druhý od epochy. Jedná se o numerickou proměnnou schopnou přidržet hodnoty v rozsahu 0 až 4,294,967,295 (2 32. -1). To zní jako hodně. Ale pult se zvýšil na 60 krát za sekundu a jako programátorský manuál ukazuje, "chronologicky smýšlející uživatel si všimne, že 2 ** 32 Sixtiets z druhé je pouze asi 2,5 roku."
S rychlostí spotřeby 60 čísel za sekundu by čítač zasáhl maximální hodnotu 8. dubna 1973, o něco méně než 829 dní později.
Druhá unixová epocha
Netřeba dodávat, že to bylo jednat rychle. Integer nepodepsané bylo nahrazeno 32bitovým podepsaný celé číslo. Může se zdát překvapující volbou, protože podepsaný celé číslo je schopen držet menší počet pozitivních hodnot - 2,147,483,647 (2 31. \ t ) -Than Insigned Integer. Rychlost spotřeby však byla také snížena z 60. sekundy do všech sekund.
Trvá déle, než se počítá od 0 do 2 147 483 647 počítání jednoho čísla za sekundu, než se má počítat od 0 do 4,294,967,295 při 60 počtech za sekundu. A docela marže. Nový režim by nezasáhl svou maximální hodnotu jen něco málo přes 68 let. Vypadalo to tak daleko v budoucnu, že epocha byla dokonce resetována na dřívější bod v čase. Nová epocha byla nastavena na půlnoc 1. ledna 1970, UTC.
Že bod 68 let v budoucnu je nyní nepřítele. Abychom byli přesní, dostaneme se na 03:14:07 UTC 19. ledna 2038.
Jednoduchý, ale efektivní schéma
Pomocí jediného celého čísla počítat počet časových kroků z daného okamžiku je efektivní způsob uložení času. Nemusíte ukládat komplikované struktury let, měsíců, dnů a časů. A je to země, národní prostředí a časové pásmo nezávislé.
Vynásobení čísla do celého čísla podle velikosti časového kroku-v tomto případě, jeden druhý-vám dává čas od epochy a převedení z toho, že formátů specifických pro národní prostředí s úpravami časového pásma je poměrně triviální.
Dává vám však vestavěný horní hranici. Dříve nebo později budete zasáhnout maximální hodnotu, kterou můžete držet ve zvoleném typu proměnné. V době psaní tohoto článku je rok 2038 pouze 17 let.
Je to podobné, ale poněkud odlišný od problému s počátkem počítačových systémů z minulého století s použitím dvou číslic pro uložení roky. Když kalendář převalil do nového roku a nové století z roku 2000, by se hodnota rok uloženy jako „00“ být interpretován jako 2000 nebo 1900?
Korekce takzvaný „ Millenium Bug “Odhaduje se, že náklady USA sám více než 100 miliard $, a aby vzali tisíce-letý muž na adresu po celém světě. Byly tam nějaké problémy v prvních dnech ledna 2000, ale nic jako katastrofy, které by se konaly kdyby byla chyba ignorována.
Soudný den se odkládá
Vzhledem k tomu, Linux a všechny provozní Unix-lookalike systémy mají stejný problém, problém roce 2038 byla brána vážně nějakou dobu se opravuje se přidává do jádra od roku 2014. To je pokračující s opravami se přidává do jádra naposledy v lednu 2020, aby se zabývala problémem celé číslo 32-bit.
Samozřejmě, že pracovní Linux počítač obsahuje mnohem víc než jádro. Všechna provozní inženýrských sítí a Userland aplikací, které využívají systémového času přes různé API a rozhraní je třeba upravit tak, aby očekávat, že 64-bitové hodnoty. souborové systémy příliš musí být aktualizovány přijímat 64bitové časové značky pro soubory a adresáře.
Linux je všude . Havárie v Linuxu by znamenalo selhání všech možných systémů založených na počítačích. Linux běží většina z webu, většina z veřejného cloudu, a dokonce i kosmické lodi. To běží inteligentní domy a self-řídit auta. Smartphony mají Unix-odvozený jádro na svém srdci. Prakticky něco podobného síťových firewallů, směrovačů a širokopásmových modemů-, který vložené operační systémy uvnitř běhu na Linuxu.
Je skvělé, že Linux je na dobré cestě, aby byl opraven. Budeme-li nainstalovat aktualizace a to bude to. Ale jaké jsou šance, že všechny z těchto zařízení budou barevné skvrny a aktualizované? Mnoho z nich ani nebude v provozu do té doby, takže to bude diskutabilní, ale někteří budou i nadále ucpání pryč. Zastrčený v temnu a prašných vybrání v serverové místnosti a rack skříně možná, ale bude tam pracovat v tichosti, zatímco vteřin klíště by asi do čtvrt na tři ráno dne 19. ledna 2038.
Ale zařízení jako, že by měla být malá menšina. Drtivá většina systémů bude vidět čas krize přicházejí a odcházejí bez incidentu. Opět budeme moci relaxovat. Alespoň až do roku 2486 přístupů, což s sebou přináší přesně stejný problém pro systémy, které používají celá čísla založených 64bitové počítat čas od epochy.
Datum Command
Můžeme
použijte
datum
příkaz
ověřit Linux a jiné deriváty Unix stále použít původní, jednoduché schéma ukládání časovou hodnotu jako počet sekund od epochy.
Za použití
datum
Příkaz bez parametrů vypíše aktuální datum a čas do okna terminálu. Vy jste také ukázaly, časové pásmo, že čas je upraven pro. EDT je Eastern Daylight Time, což znamená, že naše testovací počítač ve východním časovém pásmu, a
letního
je ve skutečnosti. Když letní čas není ve skutečnosti, východní časové pásmo používá východního standardního času.
Chcete-li zobrazit podkladové celočíselnou hodnotu, můžeme použít formát displeje řetězec. Formát struny mají znaménko plus „+“ jako jejich první znak. Tyto „% s“ Formát symbolické znamená „ukazují sekund od epochy.“
Vezmeme-li hodnotu sekund vrácenou
datum
a krmiv zpět do
datum
příkaz s. \ t
-d.
(Zobrazení času popsaný řetězec) volby, bude to převést zpět na obyčejné datum a čas.
datum
datum +% s
datum -d @ 1633183955
Můžeme ukázat, že celočíselná hodnota skutečně představuje čas tím, že zobrazuje počet sekund, spaní po dobu 10 sekund, a ukazuje nový počet sekund. Tyto dvě celočíselné hodnoty se budou lišit podle přesně 10.
datum +% s & amp; & Co. sleep 10 amp; & amp; datum +% s
Viděli jsme, že můžeme projít několik sekund na
datum
příkazy a převede na datum a čas pro nás. Pokud budeme dělat jen to pomocí nula sekund jako vstupní naše hodnoty,
datum
Měl-li tisknout datum a čas Unix epochy.
tz = '' UTC datum -d '0 + '% x% R'
Příkaz porouchá takto:
-
TZ =‘UTC‘
: Epocha byl nastaven pomocí Coordinated Universal Time (UTC, takže musíme říci
datumpoužívat UTC. Dále jen „TZ =“ konstrukt nastavení skutečného časového pásma pouze pro aktuální příkaz. -
datum
: The.
datumpříkaz. -
-d.
@ 0
: Říkáme
datumpoužít řetězec jako vstup, není vhodná doba „právě teď.“ Řetězec míjíme v drží nula sekund. -
+‘% X% R‘
: Výstupní formát řetězce. Formát tokenu „% x“ říká,
datumPro zobrazení rok, měsíc a den. Dále jen „% R“ formátu symbolické pověřujedatumpoužívat 24hodinový formát pro hodiny a minuty. Vzhledem k tomu, tam jsou mezery ve formátu řetězce, můžeme zabalit celý řetězec v jednoduchých uvozovkách“'“Takže to řetězec považován za jeden bod.
Jak se dalo očekávat, výstup je půlnoci 1. ledna 1970.
PŘÍBUZNÝ: Jak zobrazit data a času v Linuxu terminálu (a používat jej v Bash skriptů)
Do příště
V jednoduchosti je často nejlepší. Počítání sekund od pevného nulového bodu, je nejjednodušší způsob, jak označit plynutí času. Ale postupem času přináší nové výzvy. S opravami, které byly zavedeny, to vypadá, že jsme jasný až do roku 2486.
Myslím, že to je bezpečné říkat, budeme bát, že o něco blíž k času.