Unix'in neden kendi zaman kavramı var? Çağ nedir ve Y2038 sorunu nedir?
Unix saati, Linux, macOS ve diğer birçok birlikte çalışabilir sistem tarafından kullanılan belirli bir tarih ve saati temsil etmenin bir yoludur. O kadar yaygın ki, muhtemelen farkında olmadan kullanıyorsunuz. Unix zamanını bir kez anladığınızda, onu birçok bağlamda fark edeceksiniz. Birkaç araç, Unix zamanı ile çalışmanıza yardımcı olabilir.
Unix Zamanının Amacı Nedir?
Unix zamanı, sabit bir saat ve tarihten itibaren toplam saniye sayısıdır. Bu, alıştığımız insan tarafından okunabilir tarih ve saatlerden farklı görünen bir tarih/saat (veya zaman damgası) biçimidir. Bu tamamen verimlilik nedenleriyle. Saniyeleri temsil eden tek bir sayıyı saklamak, yıl, ay, saat vb. için ayrı değerleri saklamaktan çok daha az yer kaplar.
Tabii ki, modern anlamda, alan farkı hiç de o kadar fazla değil. Ancak Unix'in 1960'ların sonlarında, kullanılabilir depolamanın çok daha küçük olduğu zamanlarda ortaya çıktığını düşünün. Zaman damgaları da çok kullanılır, bu nedenle depolamaları artar. Örneğin, her dosyanın kendisiyle ilişkilendirilmiş üç zaman damgası vardır.
Matematik dehası değilseniz, biçimi kafanızda çevirmek neredeyse imkansızdır. Ancak 21 Ekim 2015 Çarşamba 07:28:00 GMT gibi daha okunabilir alternatiflere göre hala bazı avantajları var . Bir bakışta çok kolay bir şekilde iki Unix zaman damgası sipariş edebilirsiniz. Ayrıca, iki zaman damgası arasındaki farkı bulmak genellikle daha hızlıdır. Bu, özellikle bitişik günler gibi birbirine yakın tarihler için geçerlidir.
Çağ Hakkında
Dolayısıyla, Unix zamanı, belirli bir zaman noktasından bu yana geçen toplam saniye sayısıdır. Ama zamanın bu noktası nedir? Bu var 00:00:00 UTC üzerine 1 Ocak 1970 . Bu genellikle Unix Çağı olarak adlandırılır. Programcılar, Unix zamanını icat ettiklerinde en yakın yuvarlak tarih olduğu için bu tarihi kolaylıktan dolayı seçtiler.
Bir şeyler ters gittiğinde bu tarihi görmüş olabilirsiniz. Açıkça bir böcek, ama çoğumuzun doğduğu zamandan önceki bir tarihle sonuçlandığında çok garip görünen bir böcek! Yine de, Unix zamanını bildiğinizde tamamen anlaşılabilir. Herhangi bir sistem, herhangi bir değeri olmayan bir zaman damgası görüntülemeye çalışıyorsa, genellikle 0'a çevrilir ve kesin dönem tarihi ile sonuçlanır.
Daha doğrusu öyle biri yok. Orijinal veri türü 32 bitlik bir tam sayıydı ve bu, çok daha güçlü sistemlerde bile genellikle böyle kalır.
Bu veri türü, değerin 136 yıldan biraz fazla olan toplam 2^32 saniye depolamasına izin verir. Bu değer tipik olarak işaretlidir, yani negatif veya pozitif olabilir. Bu nedenle, genellikle çağın her iki tarafında da 68 yılı temsil eder, yani 1902-2038.
Bu hala sınırlı bir süre tabi. Ancak zaman damgası biçiminin birincil kullanımı, dosya değişikliği gibi kavramlar içindi. Eski tarih ya da uzak geleceğe değil, şimdiki zamana yakın zamanı temsil etmeye çok ihtiyaç vardı. Takvimler gibi uygulamalar için bile, nadiren birkaç on yıldan daha ilerideki tarihleri temsil etmeye ihtiyaç duyulur.
Ancak bu, bu sınırlı sürenin sorunsuz olduğu anlamına gelmez…
2038 Yılı Sorunu
Y2K Bug ( tarihin en kötü programlama hatalarından biri ), yılları iki haneli değerler olarak saklayan bilgisayar sistemlerini etkiledi. 2000 yılı geldiğinde, bu tür sistemler ona 1900'müş gibi davrandı. Aslında, bu korkulduğu kadar felaket değildi, çünkü birçok insan önceden buna hazırlanmak için çok zaman ve emek harcamıştı.
Bir önceki bölüme dikkat ettiyseniz, Unix zamanını etkileyebilecek benzer bir sorun fark etmiş olabilirsiniz. Eh, Unix zamanının kendine ait bir veri sorunu var: Y2k38 sorunu. (Buna genellikle bug değil sorun denir; belki 2000 yılından beri daha iyimser olduk!) Unix zamanı 2038'de tam anlamıyla bittiğinde, sistemler yeni tarihleri ya 1902 ya da 1970 olarak ele alacak. Ya da muhtemelen onlar' Tamamen başarısız olacak.
En azından bu sorun yılbaşı gecesi gece yarısında başımıza gelmez. 32-bit Unix zamanının son saniyesi 19 Mart'a denk gelecek. Sonunda, muhtemelen çoğu sistemi 2038'e kadar yükselteceğiz veya o zamana kadar zaten eskimiş olacaklar.
Bazı Faydalı Zaman Damgası Kaynakları
Epoch Dönüştürücü sitesi muhtemelen mevcut dönüştürücü en kapsamlı damgası olduğunu. Geçerli Unix zamanını gerçek zamanlı olarak göstererek başlar ve bunun üzerine akla gelebilecek hemen hemen her özelliği ekler. Ana kullanımı, zaman damgaları ve insan tarafından okunabilir tarihler arasında her iki yönde de dönüşüm yapmaktır.
Dan's Tools, biri zaman damgası dönüştürücüsü olan, kullanışlı web uygulamalarının büyük bir koleksiyonudur . Daha basit ama çok temiz bir sunumu var ve kullanımı kolay.
Time.is başka, daha da minimalist bir görünüm sunar. Unix zamanı da dahil olmak üzere bir dizi formatta zamanı gösterir. Faydalı olan sayfa başlığında geçerli saati içerir.
Linux ve macOS'ta tarih programı, Unix zaman damgaları da dahil olmak üzere tarih/saatle ilgilenmek için temel yardımcı programdır. Herhangi bir argüman olmadan çağrıldığında, geçerli tarih/saati insan tarafından okunabilir bir biçimde döndürür:
$ date Wed Feb 10 12:28:30 GMT 2021
Unix zamanında geçerli tarih/saate ihtiyacınız varsa, +%s bağımsız değişkenini kullanın:
$ date +%s 1612960114
Sen kullanarak bir zaman damgası içine okunabilecek şekilde tarihinden itibaren dönüştürebilir -d sürümünüz varsa bayrak tarihinden destekliyorsa. Çoğu Linux sürümü varsayılan olarak şunları yapmalıdır:
$ date -d "Jan 2 1970" +%s 82800
macOS'ta tarih , farklı bir bayrak seti gerektiren farklı bir programdır:
$ date -j -f "%b %d %Y %T" "Jan 02 1970 00:00:00" "+%s" 82800
Diğer yöne giderek, -r bayrağını kullanarak bir Unix zaman damgasından dönüştürebilirsiniz :
$ date -r 1600000000 Sun 13 Sep 2020 13:26:40 BST
Diğer bazı programlar , Unix zamanı ile başa çıkmak için %s biçimini kullanır. Birlikte Unix zaman içinde bir dosyanın değiştirme tarihini, göstermek istiyorsanız Örneğin, Linux sürümü ls , aşağıdakileri kullanabilirsiniz:
$ ls -l --time-style=+%s index.tmp.html -rw-r--r-- 1 ubuntu ubuntu 17862 1521649818 index.tmp.html
Unix Time Programlama Dillerinde Nasıl Kullanılır?
PHP, geçerli Unix zaman damgasını döndüren time() işlevine sahiptir. Onun tarihi () işlevi, ikinci argüman olarak bir zaman damgası alır:
$ php -r 'echo date("Y-m-d", time());' 2021-02-11
JavaScript, olaylara ilginç bir şekilde yaklaşır. Bir sahiptir Date.now () Unix Dönemden beri milisaniye sayısını almak için yöntem. Elbette, bunu 1.000'e bölebilir ve sonucu, eşdeğer Unix süresini saniye cinsinden vermek için yuvarlayabilirsiniz:
> Math.floor(Date.now() / 1000) 1613083012
Unix Zamanını Anlamak
Unix zamanı, birçok yerde ortaya çıkan basit bir kavramdır. Bir kez anladığınızda, örneğin zaman farklarını hesaplarken oldukça faydalı bulabilirsiniz. Belirli hataların nedeninin ne zaman olabileceğini de anlayabilirsiniz.
Dönem ve zaman damgaları gibi kavramlar, Linux'a başlamanın önemli bir parçasıdır. ls gibi temel özellikler hakkında daha fazla bilgi edinmek için temel Linux komutları kılavuzumuza bakın.