Miksi Unixilla on oma aikakäsityksensä? Mikä on aikakausi ja mikä on Y2038-ongelma?
Unix-aika on tapa edustaa tietty päivämäärä ja aika, jota Linux, macOS ja monet muut yhteentoimivat järjestelmät käyttävät. Se on niin laajalle levinnyt, että todennäköisesti käytät sitä tietämättäsi. Kun ymmärrät Unix-ajan, huomaat sen monissa yhteyksissä. Useat työkalut voivat auttaa sinua työskentelemään Unix-ajan kanssa.
Mikä on Unix-ajan tarkoitus?
Unix-aika on sekuntien kokonaismäärä kiinteästä ajasta ja päivämäärästä. Se on päiväys / aika (tai aikaleima) -muoto, joka näyttää erilaiselta kuin ihmisten luettavissa olevat päivämäärät ja ajat. Tämä on puhtaasti tehokkuussyistä. Yhden sekuntia edustavan luvun tallentaminen vie paljon vähemmän tilaa kuin erillisten vuosiarvojen, kuukauden, tunnin jne. Tallentaminen.
Tietysti nykyhetkellä avaruusero ei ole ollenkaan niin suuri. Mutta ota huomioon, että Unix on syntynyt 1960-luvun lopulla, kun käytettävissä oleva tallennustila oli paljon pienempi. Aikaleimoja käytetään myös paljon, joten niiden varastointi lisääntyy. Esimerkiksi jokaiseen tiedostoon on liitetty kolme aikaleimaa.
Muotoa on melkein mahdotonta kääntää päähäsi, ellet ole matemaattinen nero. Mutta sillä on silti joitain etuja verrattuna luettavampiin vaihtoehtoihin, kuten Ke, 21. lokakuuta 2015 07:28:00 GMT. Voit tilata kaksi Unix-aikaleimaa erittäin helposti yhdellä silmäyksellä. Kahden aikaleiman välisen eron selvittäminen on yleensä myös nopeampaa. Tämä pätee erityisesti läheisiin päiviin, kuten vierekkäisiin päiviin.
Tietoja aikakaudesta
Joten, Unix-aika on sekuntien kokonaismäärä tietystä ajankohdasta lähtien. Mutta mikä on se ajankohta? Sen 00:00:00 UTC päällä 1. tammikuuta 1970. Tätä kutsutaan usein Unix-aikakaudeksi. Ohjelmoijat valitsivat tämän päivämäärän aikakaudelle mukavuuden vuoksi, koska se oli lähin kierrospäivä, kun he keksivät Unix-ajan.
Olet ehkä nähnyt tämän päivämäärän, kun jokin on mennyt pieleen. Se on selvästi vika, mutta se näyttää hyvin oudolta, kun se johtaa päivämäärään, joka oli ennen monien meistä syntyperää! Se on kuitenkin täysin ymmärrettävää, kun tiedät Unix-ajasta. Jos jokin järjestelmä yrittää näyttää aikaleiman, jolla ei ole arvoa, se kääntyy usein 0: ksi ja johtaa tarkkaan aikakauden päivämäärään.
Unix-aikatietomuoto
Tarkkaan ottaen sitä ei ole. Alkuperäinen tietotyyppi oli 32-bittinen kokonaisluku, ja näin on usein, jopa paljon tehokkaammissa järjestelmissä.
Tämän tietotyypin avulla arvo voi tallentaa yhteensä 2 ^ 32 sekuntia, mikä on hieman yli 136 vuotta. Tämä arvo on tyypillisesti allekirjoitettu, mikä tarkoittaa, että se voi olla negatiivinen tai positiivinen. Joten se edustaa yleensä 68 vuotta aikakauden kummallakin puolella eli vuosina 1902-2038.
Tämä on tietysti edelleen rajoitettu aika. Mutta aikaleimamuodon ensisijainen käyttö oli käsitteitä, kuten tiedoston muokkaaminen. Tarve oli suuresti edustaa aika, joka on lähellä nykyhetkeä, eikä muinaishistoria tai kaukana tulevaisuudesta. Jopa kalentereiden kaltaisissa sovelluksissa on harvoin tarvetta esittää päivämääriä yli muutaman vuosikymmenen tulevaisuuteen.
Mutta se ei tarkoita, että tämä rajoitettu ajanjakso on ongelmaton...
Vuoden 2038 ongelma
Y2K-vika (yksi historian pahimmista ohjelmointivirheistä) vaikutti tietokonejärjestelmiin, jotka tallensivat vuosia kaksinumeroisina arvoina. Kun vuosi 2000 oli tullut, tällaiset järjestelmät käsittelivät sitä ikään kuin se olisi 1900. Siinä tapauksessa se ei ollut niin katastrofaalista kuin pelättiin, lähinnä siksi, että monet ihmiset käyttivät paljon aikaa ja vaivaa etukäteen valmistautuakseen siihen.
Sen kerrostetussa menneisyydessä koodatut myös tuhot. Hieman virheellisen koodin esiintyminen aiheutti katastrofia suurella tasolla. Seuraavassa on 10 historian pahinta ohjelmointivirhettä.
Jos kiinnitit huomiota edelliseen osaan, olet ehkä havainnut samanlaisen ongelman, joka voi vaikuttaa Unix-aikaan. No, Unix-ajalla on oma dataongelmaan: Y2k38-ongelma. (Sitä kutsutaan usein ongelmaksi, ei virheeksi; ehkä olemme optimistisempia vuodesta 2000 lähtien!) Kun Unix-aika kirjaimellisesti loppuu vuonna 2038, järjestelmät käsittelevät uusia päivämääriä joko vuoteen 1902 tai 1970. Tai mahdollisesti he vain epäonnistuvat kokonaan.
Ainakin tämä ongelma ei osu meihin uudenvuodenaattona keskiyöllä. 32-bittisen Unix-ajan viimeinen sekunti putoaa 19. maaliskuuta. Todennäköisesti päivitämme useimmat järjestelmät vuoteen 2038 mennessä tai ne ovat vanhentuneet siihen mennessä joka tapauksessa.
Joitakin hyödyllisiä aikaleimaresursseja
Epoch Converter sivusto on mahdollisesti kattavin käytettävissä oleva aikaleimamuunnin. Se alkaa näyttämällä nykyinen Unix-aika - reaaliajassa - ja lisää sen päälle melkein kaikki kuviteltavat ominaisuudet. Sen pääasiallinen käyttötarkoitus on muuntaa aikaleimat ja ihmisen luettavissa olevat päivämäärät molempiin suuntiin.
Dan's Tools on valtava kokoelma hyödyllisiä verkkosovelluksia, joista yksi on aikaleiman muunnin. Se on yksinkertaisempi, mutta siinä on erittäin puhdas esitys ja helppo käyttää.
Kello on esittelee toisen, vieläkin minimalistisemman ilmeen. Se näyttää ajan useissa muodoissa, mukaan lukien Unix-aika. Se sisältää nykyisen ajan sivun otsikossa, mikä on hyödyllinen.
Linux- ja macOS-käyttöjärjestelmissä Päivämäärä Ohjelma on ydinapuohjelma päivämäärän ja kellonajan käsittelemiseen, mukaan lukien Unix-aikaleimat. Soitettu ilman argumentteja, se palauttaa nykyisen päivämäärän / kellonajan ihmisen luettavassa muodossa:
$ päivämäärä
Ke 10. helmikuuta 12:28:30 GMT 2021
Jos tarvitset nykyisen päivämäärän / kellonajan Unix-aikaan, käytä +% s Perustelu:
$ päivämäärä +% s
1612960114
Voit muuntaa ihmisen luettavasta päivämäärästä aikaleiman käyttämällä -d lippu, jos versiosi Päivämäärä tukee sitä. Useimpien Linux-versioiden pitäisi oletuksena:
$ date -d "2. tammikuuta 1970" +% s
82800
MacOSissa Päivämäärä on erilainen ohjelma, joka vaatii erilaiset liput:
$ date -j -f "% b% d% Y% T" "2. tammikuuta 1970 00:00:00" "+% s"
82800
Mene toiseen suuntaan, voit muuntaa Unix-aikaleimasta käyttämällä -r lippu:
$ päivämäärä -r 1600000000
Su 13. syyskuuta 2020 13:26:40 BST
Jotkut muut ohjelmat käyttävät % s muodossa käsitellä Unix-aikaa. Esimerkiksi, jos haluat näyttää tiedoston muokkauspäivämäärän Unix-ajassa, Linux-versio Ls, voit käyttää seuraavaa:
$ ls -l --time-style = +% s index.tmp.html
-rw-r - r-- 1 ubuntu ubuntu 17862 1521649818 index.tmp.html
Kuinka käyttää Unix-aikaa ohjelmointikielillä
PHP: llä on aika() toiminto, joka palauttaa nykyisen Unix-aikaleiman. Sen Päivämäärä() funktio ottaa aikaleiman toisena argumenttina:
$ php -r 'kaikupäivä ("Y-m-d", aika ());'
2021-02-11
JavaScript lähestyy asioita mielenkiintoisella tavalla. Sillä on Date.now () menetelmä saada millisekuntien lukumäärä Unix-aikakauden jälkeen. Voit tietysti jakaa tämän tuhannella ja pyöristää tuloksen, jolloin saat vastaavan Unix-ajan sekunneissa:
> Math.floor (päivämäärä. Nyt () / 1000)
1613083012
Unix-ajan ymmärtäminen
Unix-aika on yksinkertainen käsite, joka kasvaa monissa paikoissa. Kun ymmärrät sen, saatat löytää siitä varsin hyödyllisen esimerkiksi laskettaessa aikaeroja. Voit myös tunnistaa, milloin se voi aiheuttaa tiettyjä virheitä.
Käsitteet, kuten aikakausi ja aikaleimat, ovat tärkeä osa Linuxin käytön aloittamista. Jos haluat lisätietoja olennaisista asioista, kuten Ls, tutustu Linux-peruskomentojen oppaaseen.
Haluatko tuntea Linuxin? Aloita näistä Linux-peruskomennoista ja opi tavalliset laskentatehtävät.
- Määrittelemätön
Bobby on tekniikan harrastaja, joka työskenteli ohjelmistokehittäjänä kahden vuosikymmenen ajan. Hän on intohimoinen pelaamisesta, työskentelee Switch Editor -lehden arvostelujen toimittajana ja on upotettu verkkojulkaisuun ja verkkokehitykseen.
Tilaa uutiskirjeemme
Liity uutiskirjeeseemme, jossa on teknisiä vinkkejä, arvosteluja, ilmaisia e-kirjoja ja erikoistarjouksia!
Vielä yksi askel !!!
Vahvista sähköpostiosoitteesi juuri lähettämässäsi sähköpostiviestissä.