Miért van a Unix-nak saját időfelfogása? Mi a korszak és mi az Y2038 probléma?
A Unix idő egy adott dátum és idő ábrázolásának eszköze, amelyet a Linux, a macOS és sok más interoperábilis rendszer használ. Annyira elterjedt, hogy valószínűleg anélkül használja, hogy tudatában lenne. Miután megértette a Unix időt, sok összefüggésben észreveszi. Számos eszköz segíthet a Unix idővel való munkában.
Mi a célja az Unix időnek?
Az Unix idő a rögzített idő és dátum óta eltelt összes másodpercek száma. Ez egy dátum / idő (vagy időbélyeg) formátum, amely másképp néz ki, mint az ember által olvasható dátumok és idők, amelyeket megszoktunk. Ez pusztán hatékonysági okokból történik. Sokkal kevesebb helyet igényel egyetlen másodpercet ábrázoló szám tárolása, mint az év, hónap, óra stb. Külön értékeinek tárolásához.
Természetesen a mai értelemben a térbeli különbség egyáltalán nem olyan nagy. De vegyük figyelembe, hogy a Unix az 1960-as évek végén jött létre, amikor a rendelkezésre álló tárhely jóval kisebb volt. Az időbélyegeket is gyakran használják, így a tárolásuk összeadódik. Például minden fájlhoz három időbélyeg társul.
A formátumot nagyjából lehetetlen lefordítani a fejedben, hacsak nem matematikai zseni vagy. De még mindig van néhány előnye az olvashatóbb alternatívákkal szemben, mint pl 2015. október 21., szerda, 07:28:00 GMT. Két Unix időbélyegzőt nagyon egyszerűen, egy pillanat alatt megrendelhet. Általában gyorsabb a két időbélyeg közötti különbség meghatározása is. Ez különösen igaz az egymáshoz közeli időpontokra, például a szomszédos napokra.
A korszakról
Tehát, a Unix idő egy másodperc összesített száma egy adott időpont óta. De mi ez az időpont? Ez van 00:00:00 UTC tovább 1970. január 1. Ezt gyakran Unix-korszaknak nevezik. A programozók kényelmükből választották ezt a dátumot a korszak számára, mivel ez volt a legközelebbi kerek dátum, amikor feltalálták a Unix időt.
Lehet, hogy jól látta ezt a dátumot, amikor valami rosszul esett. Ez egyértelműen hiba, de nagyon furcsán néz ki, amikor egy olyan dátumot eredményez, amely a sokunk születése előtti időről szól! Teljesen érthető, ha azonban tud a Unix időről. Ha bármely rendszer olyan időbélyeget próbál megjeleníteni, amelynek nincs értéke, az gyakran 0-ra változik, és megadja a pontos korszak dátumát.
A Unix időadat-formátum
Szigorúan véve nincs ilyen. Az eredeti adattípus 32 bites egész szám volt, és ez még mindig sokkal erősebb rendszerekben is így van.
Ez az adattípus lehetővé teszi, hogy az érték összesen 2 ^ 32 másodpercet tároljon, ami alig haladja meg a 136 évet. Ezt az értéket általában aláírják, vagyis negatív vagy pozitív lehet. Tehát általában 68 évet képvisel a korszak mindkét oldalán, azaz 1902-2038.
Ez természetesen még mindig korlátozott időszak. De az időbélyeg-formátum elsődleges célja olyan fogalmak voltak, mint a fájlmódosítás. Annak szükségessége, hogy sokkal inkább a jelenhez közeli időt képviselje, nem pedig az ókori történelmet vagy messze a jövőt. Még olyan alkalmazásoknál is, mint a naptárak, ritkán van szükség arra, hogy néhány évtizednél hosszabb dátumokat képviseljenek a jövőben.
De ez nem azt jelenti, hogy ez a korlátozott időtartam problémamentes...
A 2038-as év problémája
Az Y2K Bug (a történelem egyik legsúlyosabb programozási hibája) olyan számítógépes rendszereket érintett, amelyek éveket tároltak kétjegyű értékként. Amikor beköszönt a 2000-es év, az ilyen rendszerek úgy kezelték, mintha 1900 lenne. Abban az esetben ez nem volt olyan katasztrofális, mint attól tartottak, főleg azért, mert sokan sok időt és erőfeszítést töltöttek el előre, felkészülve arra.
Emeletes múltjában a megsemmisítés kódolása is. Egy kis hibás kód előfordulása súlyos katasztrófát okozott. Az alábbiakban a történelem 10 legsúlyosabb programozási hibáját mutatjuk be.
Ha az előző szakaszban figyelt, lehet, hogy észrevett egy hasonló problémát, amely befolyásolhatja a Unix idejét. Nos, a Unix időnek van saját adatproblémája: az Y2k38 probléma. (Gyakran problémának, nem hibának nevezik; talán optimistábbak lettünk a 2000-es év óta!) Amikor a Unix idő 2038-ban szó szerint elfogy, a rendszerek az új dátumokat akár 1902-nek, akár 1970-nek tekintik. Vagy esetleg csak teljesen megbuknak.
Legalábbis ez a probléma nem fog minket elérni a szilveszter éjfélkor. A 32 bites Unix idő utolsó másodperce március 19-re esik. Esetleg valószínűleg a legtöbb rendszert 2038-ig frissítjük, különben addigra elavulnak.
Néhány hasznos időbélyegforrás
A Epoch Converter A webhely a lehető legátfogóbb időbélyeg-átalakító. Azzal kezdődik, hogy az aktuális Unix-időt valós időben jeleníti meg, és szinte minden elképzelhető funkciót hozzáad. Fő felhasználása az időbélyegek és az ember által olvasható dátumok közötti átváltásra, mindkét irányban.
A Dan's Tools egy hatalmas gyűjteménye hasznos webalkalmazásoknak, amelyek közül az egyik a időbélyeg-átalakító. Alaposabb, de nagyon tiszta megjelenítésű és könnyen használható.
Az idö egy újabb, még minimalista megjelenést mutat be. Számos formátumban mutatja az időt, beleértve a Unix időt is. Az aktuális időt tartalmazza az oldal címe, amely hasznos.
Linuxon és macOS rendszeren a dátum program a dátum / idő kezelésének alapvető segédprogramja, beleértve a Unix időbélyegeket is. Minden argumentum nélkül hívják vissza az aktuális dátumot és időt ember által olvasható formátumban:
$ date
10. február, szerda 12:28:30 GMT 2021
Ha az aktuális dátumra / időre Unix-időre van szüksége, használja a +% s érv:
$ dátum +% s
1612960114
Az ember által olvasható dátumból időbélyeggé konvertálhat a -d jelölje meg, ha a dátum támogatja. A legtöbb Linux verziónak alapértelmezés szerint:
$ date -d "1970. január 2." +% s
82800
MacOS rendszeren dátum egy másik program, amelyhez más zászlókra van szükség:
$ date -j -f "% b% d% Y% T" "1970. január 02. 00:00:00" "+% s"
82800
A másik irányba haladva konvertálhat egy Unix időbélyegről a -r zászló:
$ dátum -r 1600000000
2020. szeptember 13., vasárnap 13:26:40 BST
Néhány más program használja a % s formátum a Unix idő kezeléséhez. Például, ha egy fájl módosítási dátumát Unix időben szeretné megjeleníteni, akkor a Linux verziója ls, a következőket használhatja:
$ ls -l --time-style = +% s index.tmp.html
-rw-r - r-- 1 ubuntu ubuntu 17862 1521649818 index.tmp.html
Az Unix idő felhasználása a programozási nyelvekben
A PHP rendelkezik idő() függvény, amely visszaadja az aktuális Unix időbélyeget. Az dátum() függvény időbélyeget vesz fel második argumentumaként:
$ php -r 'visszhang dátum ("Y-m-d", időpont ());'
2021-02-11
A JavaScript érdekes módon közelíti meg a dolgokat. Van egy Date.now () módszer a milliszekundumok számának lekérdezésére a Unix korszak óta. Természetesen ezt eloszthatja 1000-vel, és az eredményt kerekítve megadhatja az egyenértékű Unix-időt másodpercben:
> Math.floor (Date.now () / 1000)
1613083012
A Unix idő megértése
A Unix idő egy egyszerű fogalom, amely sok helyen felnő. Ha megértette, akkor nagyon hasznos lehet, például az időbeli különbségek kiszámításakor. Felismerheti azt is, hogy ez egyes hibákat miért okozhat.
Az olyan fogalmak, mint a korszak és az időbélyegek, fontos részei a Linux használatának megkezdésének. Ha többet szeretne megtudni olyan alapvető dolgokról, mint pl ls, nézze meg az alapvető Linux parancsokról szóló útmutatónkat.
Szeretné megismerni a Linuxot? Kezdje ezekkel az alapvető Linux parancsokkal a szokásos számítási feladatok elsajátításához.
- Meg nem határozott
Bobby technológiai rajongó, aki szoftverfejlesztőként dolgozott a két évtized alatt. Szenvedélyesen játszik a játékokkal, a Switch Player Magazine Véleményszerkesztőjeként dolgozik, és elmerül az online publikálás és webfejlesztés minden aspektusában.
Iratkozzon fel hírlevelünkre
Csatlakozzon hírlevelünkhöz, amely műszaki tippeket, véleményeket, ingyenes e-könyveket és exkluzív ajánlatokat tartalmaz!
Még egy lépés…!
Kérjük, erősítse meg e-mail címét az imént elküldött e-mailben.