Miks on Unixil oma ajakontseptsioon? Mis on ajastu ja mis on Y2038 probleem?
Unixi aeg on kindla kuupäeva ja kellaaja esitamise viis, mida kasutavad Linux, macOS ja paljud muud koostalitlusvõimelised süsteemid. See on nii laialt levinud, et tõenäoliselt kasutate seda teadmata. Kui olete Unixi ajast aru saanud, märkate seda paljudes kontekstides. Mitmed tööriistad aitavad teil töötada Unixi ajaga.
Mis on Unixi aja eesmärk?
Unixi aeg on sekundite koguarv kindlast kellaajast ja kuupäevast alates. See on kuupäeva / kellaaja (või ajatempli) formaat, mis näeb välja erinevalt inimestel loetavatest kuupäevadest ja kellaaegadest, millega oleme harjunud. Seda puhtalt tõhususe huvides. Ühe sekundit tähistava numbri salvestamiseks kulub palju vähem ruumi kui aasta, kuu, tunni jne eraldi väärtuste salvestamiseks.
Muidugi pole tänapäevases mõttes ruumivahe sugugi nii suur. Kuid arvestage sellega, et Unix sai alguse 1960. aastate lõpus, kui vaba mälumaht oli palju väiksem. Samuti kasutatakse palju ajatempleid, nii et nende salvestamine suureneb. Näiteks on iga failiga seotud kolm ajatemplit.
Seda formaati on pea võimatu tõlkida, kui te pole matemaatiline geenius. Kuid sellel on siiski mõned eelised loetavamate alternatiivide ees nagu K, 21. oktoober 2015, 07:28:00 GMT. Kaks Unixi ajatemplit saate ühe pilguga väga lihtsalt tellida. Samuti on kahe ajatempli vahe välja selgitamine tavaliselt kiirem. See kehtib eriti lähedaste kuupäevade kohta, näiteks külgnevatel päevadel.
Ajastu kohta
Niisiis, Unixi aeg on sekundite koguarv konkreetsest ajahetkest alates. Aga mis see ajahetk on? See on 00:00:00 UTC peal 1. jaanuar 1970. Seda nimetatakse sageli Unixi ajastuks. Programmeerijad valisid ajastu jaoks selle kuupäeva mugavuse huvides, kuna see oli Unixi aja leiutamisel lähim ringikuupäev.
Võib-olla olete seda kuupäeva näinud, kui midagi on valesti läinud. See on ilmselgelt viga, kuid tundub väga imelik, kui selle tulemuseks on kuupäev enne seda, kui paljud meist sündisid! See on siiski täiesti mõistetav, kui teate Unixi ajast. Kui mõni süsteem üritab kuvada ajatemplit, millel pole mingit väärtust, tõlgitakse see sageli 0-ni ja tulemuseks on täpne ajastu kuupäev.
Unixi ajavorming
Rangelt võttes pole üht. Algne andmetüüp oli 32-bitine täisarv ja see püsib sageli isegi palju võimsamates süsteemides.
See andmetüüp võimaldab väärtusel salvestada kokku 2 ^ 32 sekundit, mis on veidi üle 136 aasta. See väärtus on tavaliselt allkirjastatud, mis tähendab, et see võib olla negatiivne või positiivne. Niisiis esindab see tavaliselt 68 aastat mõlemal pool ajastut, s.o 1902–2038.
See on muidugi veel piiratud periood. Kuid ajatemplivormingu esmaseks kasutuseks olid sellised mõisted nagu faili muutmine. Vajadus oli väga esindada pigem tänapäevale lähedast aega kui muinasajalugu või kauget tulevikku. Isegi selliste rakenduste nagu kalendrid puhul on harva vaja esitada kuupäevi rohkem kui paar aastakümmet tulevikus.
Kuid see ei tähenda, et see piiratud ajavahemik oleks probleemideta...
Aasta 2038 probleem
Viga Y2K (üks hullemaid programmeerimisvigu ajaloos) mõjutas arvutisüsteeme, mis salvestasid aastaid kahekohaliste väärtustena. Kui saabus 2000. aasta, suhtusid sellised süsteemid sellesse nagu 1900. aastasse. Sel juhul ei olnud see nii katastroofiline, kui kardeti, peamiselt seetõttu, et paljud inimesed kulutasid selleks ettevalmistamiseks palju aega ja vaeva.
Selle korruselises minevikus kodeeritakse ka sepistatud hävitamine. Veidi vigase koodi esinemine põhjustas suurel määral katastroofi. Järgnevalt on välja toodud 10 kõige hullemat programmeerimisviga ajaloos.
Kui pöörasite tähelepanu eelmises jaotises, võite olla märganud sarnast probleemi, mis võib mõjutada Unixi aega. Noh, Unixi ajal on omaette andmeprobleem: probleem Y2k38. (Seda nimetatakse sageli probleemiks, mitte veaks; võib-olla oleme alates aastast 2000 optimistlikumad!) Kui Unixi aeg 2038. aastal sõna otseses mõttes otsa saab, käsitlevad süsteemid uusi kuupäevi kas 1902. või 1970. aastal. Või võivad nad lihtsalt täielikult läbi kukkuda.
Vähemalt ei taba see probleem meid uusaastaööl südaööl. 32-bitise Unixi aja viimane sekund langeb 19. märtsile. Tõenäoliselt uuendame tõenäoliselt enamikke süsteeme aastaks 2038 või on need igatahes selleks ajaks vananenud.
Mõned kasulikud ajatempli ressursid
The Ajastu teisendaja sait on tõenäoliselt kõige ulatuslikum ajatempli muundur. See algab praeguse Unixi aja kuvamisega reaalajas ja lisab selle peale peaaegu kõik kujuteldavad funktsioonid. Selle peamine kasutusala on ajatemplite ja inimesele loetavate kuupäevade teisendamine mõlemas suunas.
Dan’s Tools on tohutult kasulik veebirakendus, millest üks on ajatempli muundur. See on põhilisem, kuid sellel on väga puhas esitus ja seda on lihtne kasutada.
Time.is esitleb teist, veelgi minimalistlikumat välimust. See näitab aega mitmes vormingus, sealhulgas Unixi aeg. See sisaldab lehe pealkirjas praegust aega, mis on kasulik.
Linuxis ja macOS-is kuupäev programm on peamine utiliit kuupäeva / kellaaja, sh Unixi ajatemplite käsitlemiseks. Ilma argumentideta helistades tagastab praeguse kuupäeva / kellaaja inimesele loetavas vormingus:
$ kuupäev
K 10. veebruar 12:28:30 GMT 2021
Kui vajate praegust kuupäeva / kellaaega Unixi aja järgi, kasutage nuppu +% s argument:
$ kuupäev +% s
1612960114
Inimloetavast kuupäevast saate teisendada ajatempliks, kasutades -d märkige, kui teie versioon on kuupäev toetab seda. Enamik Linuxi versioone peaksid vaikimisi:
$ date -d "2. jaanuar 1970" +% s
82800
MacOS-is kuupäev on erinev programm, mis nõuab teistsugust lippude komplekti:
$ date -j -f "% b% d% Y% T" "2. jaanuar 1970 00:00:00" "+% s"
82800
Teises suunas liikudes saate teisendada Unixi ajatemplist, kasutades -r lipp:
$ kuupäev -r 1600000000
Pühapäev, 13. september 2020, 13:26:40 BST
Mõnes teises programmis kasutatakse % s vormingus Unixi aja käsitlemiseks. Näiteks kui soovite faili muutmise kuupäeva näidata Unixi aja järgi, kasutage nuppu Linuxi versioon ls, saate kasutada järgmist:
$ ls -l - time-style = +% s index.tmp.html
-rw-r - r-- 1 ubuntu ubuntu 17862 1521649818 index.tmp.html
Kuidas kasutada Unixi aega programmeerimiskeeltes
PHP-l on aeg () funktsioon, mis tagastab praeguse Unixi ajatempli. Selle kuupäev () Funktsioon võtab teise argumendina ajatempli:
$ php -r 'kajakuupäev ("Y-m-d", kellaaeg ());'
2021-02-11
JavaScript läheneb asjadele huvitavalt. Sellel on Date.now () meetod millisekundite arvu saamiseks Unixi ajastust. Muidugi võite selle jagada 1000-ga ja tulemuse ümardada, et anda samaväärne Unixi aeg sekundites:
> Math.floor (kuupäev.nuud () / 1000)
1613083012
Unixi aja mõistmine
Unixi aeg on lihtne mõiste, mis kasvab paljudes kohtades. Kui olete sellest aru saanud, võib see osutuda üsna kasulikuks näiteks ajaerinevuste arvutamisel. Samuti saate ära tunda, millal see võib olla teatud vigade põhjus.
Sellised mõisted nagu ajastu ja ajatemplid on oluline osa Linuxiga alustamisel. Lisateavet selliste oluliste asjade kohta nagu ls, vaadake meie Linuxi põhikäskude juhendit.
Kas soovite Linuxiga tuttavaks saada? Alustage nende Linuxi põhikäskudega, et õppida tavalisi arvutusülesandeid.
- Täpsustamata
Bobby on tehnoloogiaentusiast, kes töötas tarkvaraarendajana peaaegu kaks aastakümmet. Ta on mängude vastu kirglik, töötab Switch Player Magazine'is arvustuste toimetajana ning on süvenenud veebiväljaannete ja veebiarenduse kõigisse aspektidesse.
Telli meie uudiskiri
Liituge meie uudiskirjaga, kus leiate tehnilisi näpunäiteid, ülevaateid, tasuta e-raamatuid ja eksklusiivseid pakkumisi!
Veel üks samm !!!
Palun kinnitage oma e-posti aadress meilis, mille me just saatsime.