Unix varastoi aikaan kuin monta sekuntia sitten tammikuun 1. 1970. ja se tarkoittaa Linux ei liikaa. Me selittää tätä näennäisen outoa järjestelmää, ja miksi tuomiopäivä oli määrä 2038.
Ensimmäinen Unix Epoch
Goethe ( 1749-1832 ) Julisti ”Jokainen sekunti on ääretön arvo.” Se on totta, meillä jokaisella on vain niin monta sekuntia täällä Maa-planeetalla, ja emme tiedä milloin viimeinen toinen tulee. Mutta me tunnemme syntymäpäivä, ja kun kuolevaisuuden lähtölaskenta alkoi.
Unix -kuin Britannian kuningatar -Onko kaksi syntymäpäiviä. Tai tarkemmin, on ollut kaksi erillistä tapausta, joissa se alkoi laskea sekunteja sen olemassaolosta. Ensimmäistä kertaa Unix alkoi laskien oli puolenyön 01 tammikuu 1971.
Voimme nähdä tämän aivan selvästi tarkastelemalla osan ensimmäisen painoksen
Unix ohjelmoijan käsikirja
, Päivätty 3. marraskuuta 1971. Selaa alaspäin sivua 13 Tämän jakson ja näet kuvauksen (nyt haudattu)
aika
komento. Meille kerrotaan, että”
aika
palauttaa ajan jälkeen 00:00:00, tammikuu 1, 1971 mitattuna sixtieths toisen.”
Kalenterit ja aika järjestelmät mitata aikaa alkaen merkittäviä vaiheessa menneisyydessä, kuten kosmologisen tapahtuman perustamista imperiumi, tai menestys vallankumouksen. In käyttöjärjestelmissä, mielivaltainen aika ja päivämäärä on valittu paikka, josta laskenta alkaa. Tämä on aikakausi kyseiselle käyttöjärjestelmä.
Unix käytetty 32-bittinen etumerkitön kokonaisluku pitää lukua 60ths toisen jälkeen epookki. Tämä on numeerinen muuttuja, joka pystyy pitämään arvot välillä 0 4294967295 (2 32 -1). Se kuulostaa paljolta. Mutta laskuri kasvaa 60 kertaa sekunnissa, ja kuten ohjelmoijan käsikirja toteaa, ”Ajallinen ajattelevia käyttäjä huomaa, että 2 ** 32/60 toista on vain noin 2,5 vuotta.”
Nopeudella kulutus 60 numeroa sekunnissa, laskuri olisi osunut maksimiarvonsa 8. huhtikuuta 1973 hieman alle 829 päivää myöhemmin.
Toinen Unix Epoch
Sanomattakin on selvää, tämä vaikutetaan nopeasti. Allekirjoittamaton kokonaisluku korvattiin 32-bittinen allekirjoitettu kokonaisluku. Se voi tuntua yllättävä valinta, koska allekirjoitettu kokonaisluku pystyy pitämään pienemmän määrän myönteisiä arvoja-2147483647 (2 31 ) -Than etumerkitön kokonaisluku. Kuitenkin, nopeus kulutus oli myös vähentynyt 60ths toisen kokonaisiin sekuntia.
Se kestää kauemmin laskea 0 2147483647 laskenta yksi numero sekunnissa kuin se laskea 0 4294967295 60 lukemaa sekuntia kohti. Ja aivan marginaalilla. Uudessa järjestelmässä ei osunut maksimiarvonsa hieman yli 68 vuotta. Tämä tuntui niin kaukana tulevaisuudessa, että aikakausi oli jopa palauttaa aikaisempaan ajankohtaan. Uuden aikakausi oli asetettu keskiyö tammikuu 1, 1970 UTC.
Siinä vaiheessa 68 vuotta myöhemmin on nyt kiusallisen lähellä. Tarkkaan ottaen me päästä sitä 03:14:07 UTC tammikuu 19, 2038.
Yksinkertainen mutta tehokas järjestelmä
Käytetään yhtä kokonaisluvun laskea, kuinka monta kertaa askeleen päässä tiettynä ajankohtana on tehokas tapa tallentaa aikaa. Sinun ei tarvitse tallentaa monimutkaisia rakenteita vuosia, kuukausia, päiviä ja aikoja. ja se on maa, maa ja aikavyöhyke riippumaton.
Kertomalla numero kokonaisluku, jonka koko aika-askel, tässä tapauksessa, yksi toisen antaa kulunut aika epookki, ja muuntamiseen että kielikohtaiseen formaatteja aikavyöhykkeiden säädöt on suhteellisen triviaalia.
Se antaa sinulle sisäänrakennettu yläraja kuitenkin. Ennemmin tai myöhemmin aiot lyödä maksimiarvo voit pitää valitsemasi muuttujan tyyppiä. Tuolloin kirjallisesti tämän artikkelin, vuosi 2038 on vain 17 vuoden päässä.
Se on samanlainen, mutta hieman eri ongelmaan aikaisin tietokonejärjestelmien viime vuosisadalta kahdella numerolla tallentaa vuosia. Kun kalenteri kaataa uuteen vuoteen ja uuden vuosisadan 2000 olisi vuosi arvo tallennetaan ”00” tulkita 2000 tai 1900?
Korjaaminen ns ” Millenium Bug ”On arvioitu maksaneen pelkästään Yhdysvalloissa yli $ 100 miljardia ja ottaneen tuhansia miestyövuosia osoitteeseen maailmanlaajuisesti. Oli joitakin asioita ensimmäisinä päivinä tammikuu 2000 mutta mitään, kuten katastrofit olisi tapahtunut, jos vika olisi jätetty huomiotta.
Doomsday on lykätty
Koska Linux ja kaikki Unix-kaksoisolento käyttöjärjestelmien samaa asiaa, vuosi 2038 asia on otettu vakavasti jonkin aikaa, ja korjauksia lisätään ytimen vuodesta 2014. Tämä on käynnissä, ja korjauksia lisätään ytimen niinkin äskettäin kuin Jan. 2020 käsitellä 32-bittinen kokonaisluku ongelma.
Tietenkin toimivassa Linux tietokone sisältää paljon enemmän kuin ydin. Kaikki toiminta apuohjelmia ja userland sovelluksia, jotka hyödyntävät järjestelmän ajan läpi eri API ja rajapinnat on muutettava odottaa 64-bittisiä arvoja. Tiedostojärjestelmien liian on päivitettävä hyväksymään 64-bittinen aikaleimat tiedostoja ja hakemistoja.
Linux on kaikkialla . Rikkoutumiseen Linux merkitsisi epäonnistumisia kaikenlaisia atk-pohjaisiin järjestelmiin. Linux toimii useimmat web, useimmat julkisen pilvi, ja jopa avaruusalus. Se toimii älykkäät kodit ja itsensä ajaa autoa. Älypuhelimet ovat Unix-johdettu ydin heidän sydämensä. Melkein mitä tahansa kaltainen palomuurien, reitittimien ja laajakaistamodeemeja-, joka on upotettu käyttöjärjestelmissä sisällä Linuxissa.
On hienoa, että Linux on hyvin matkalla ollessa määrätty. Me asentaa päivityksiä ja että tulee olemaan se. Mutta mitkä ovat mahdollisuudet, että kaikki nämä laitteet on paikattu ja päivitetty? Monet heistä eivät edes ole käytössä silloin niin se on kiistanalainen kysymys, mutta jotkut silti kytkemällä pois. Piilossa pimeässä ja pölyinen syvennykset palvelinhuoneissa ja teline kaapit ehkä, mutta he ovat siellä, työ hiljaa, kun taas sekuntia rasti mukaan vasta noin varttia yli kolme aamulla 19 tammikuu 2038.
Mutta laitteet, kuten sen pitäisi olla pieni vähemmistö. Valtaosa järjestelmien näkevät crunch aika tulla ja mennä ilman välikohtauksia. Jälleen kerran me pystyä rentoutumaan. Ainakin, vuoteen 2486 lähestyessä tuoden mukanaan täsmälleen sama ongelma, jotka käyttävät 64-bittinen pohjainen kokonaislukuja laskemaan kerran sitten aikakautta.
Päivämäärä Command
Me voimme
Käytä
Päivämäärä
komento
tarkistaa Linux ja muut Unix johdannaiset silti käyttää alkuperäistä, yksinkertainen järjestelmä tallentamaan aika-arvosta, kun monta sekuntia, koska aikakauden.
Käyttämällä
Päivämäärä
komento ilman parametreja tulostaa nykyinen päivämäärä ja aika pääteikkuna. Olet osoittanut aikavyöhykkeen, että aika on oikaistu. EDT on Eastern Daylight Time, mikä tarkoittaa meidän testi tietokone on Itä aikavyöhyke, ja
kesäaika
on voimassa. Kun kesäaika ei ole vaikutusta, Itä aikavyöhyke käyttää itärannikon aikaa.
Nähdä taustalla kokonaisluku, voimme käyttää näyttöä muotomerkkijonoa. Muotomerkkijonojen on plusmerkki ”+”, kuten heidän ensimmäinen kirjain. ”% S” muodossa merkki tarkoittaa ”näyttää sekunnin jälkeen epookin.”
Jos otamme sekunnin arvo palauttama
Päivämäärä
ja syöttämään se takaisin osaksi
Päivämäärä
komento
--d
(Näyttö aikaa kuvataan merkkijono) vaihtoehto, se tulee muuntaa sen takaisin normaali päivämäärä ja kellonaika.
päivämäärä
päivämäärä +% s
päivämäärä -D @ 1633183955
Voimme osoittaa, että kokonaisluku todella edustaa aikaa näyttämällä, kuinka monta sekuntia, nukkuminen 10 sekuntia, ja osoittaa uusi sekuntien. Kaksi kokonaisluku arvot poikkeavat täsmälleen 10.
Päivämäärä +% S & amp; & amp; Sleep 10 & amp; & amp; Päivämäärä +% s
Olemme nähneet, että voimme siirtää useita sekunteja
Päivämäärä
komento ja se muuntaa meille aikaa ja päivämäärää. Jos teemme juuri sen, että nolla sekuntia syöttää arvomme,
Päivämäärä
pitäisi tulostaa Unix-aikakauden päivämäärä ja kellonaika.
TZ = 'UTC: n päivämäärä - @ 0 +'% x% R '
Komento hajoaa näin:
-
TZ = 'UTC'
: EPOCH asetettiin koordinoidun yleisen ajan (UTC, joten meidän on kerrottava
Päivämääräkäyttää UTC: tä. "TZ =" -konsultti asettaa tehokkaan aikavyöhykkeen vain nykyiseen komentoon. -
Päivämäärä
: The
Päivämääräkomento. -
--d
@ 0
: Kerromme
PäivämääräVoit käyttää merkkijonoa panoksena, ei aika "juuri nyt". Merkkijono, jonka lähdemme, pitivät nolla sekuntia. -
+ '% X% r'
: Lähtömuoto. "% X" -formaatti token kertoo
PäivämääräVoit näyttää vuoden, kuukauden ja päivän. "% R" -muotoinen token opettaaPäivämäärä24 tunnin muodon käyttäminen tuntia ja minuutteille. Koska muodossa on välilyöntejä, käärimme koko merkkijono yksittäisissä lainausmerkeissä """Joten se merkkijono käsiteltiin yhtenä kokonaisuutena.
Odotettaessa tuotos on keskiyöllä 1.1.1970.
Liittyvät: Kuinka näyttää päivämäärän ja kellonajan Linux-terminaalissa (ja käytä sitä bash-skripteissä)
Ensi kertaan
Yksinkertainen on usein paras. Sekuntien laskeminen kiinteästä datumista on yksinkertaisin tapa merkitä ajan kuluminen. Mutta ajan kuluminen tuo uusia haasteita. Kun korjaukset, jotka on otettu käyttöön, näyttää siltä, että olemme selkeitä vuoteen 2486.
Mielestäni on turvallista sanoa, että olemme huolissamme siitä hieman lähempänä aikaa.