Mengapakah Unix mempunyai konsep masanya sendiri? Apakah zaman itu dan apakah masalah Y2038?
Masa Unix ialah satu cara untuk mewakili tarikh dan masa tertentu, yang digunakan oleh Linux, macOS, dan banyak sistem saling kendali yang lain. Ia begitu meluas, sehinggakan anda mungkin menggunakannya tanpa disedari. Sebaik sahaja anda memahami masa Unix, anda akan melihatnya dalam banyak konteks. Beberapa alatan boleh membantu anda bekerja dengan masa Unix.
Apakah Tujuan Masa Unix?
Masa Unix ialah kiraan jumlah saat sejak masa dan tarikh tetap. Ia adalah format tarikh/masa (atau cap masa) yang kelihatan berbeza daripada tarikh dan masa yang boleh dibaca manusia yang biasa kita lakukan. Ini semata-mata atas sebab kecekapan. Ia memerlukan lebih sedikit ruang untuk menyimpan satu nombor yang mewakili saat berbanding untuk menyimpan nilai berasingan untuk tahun, bulan, jam, dsb.
Sudah tentu, dalam istilah moden, perbezaan ruang tidak begitu banyak sama sekali. Tetapi pertimbangkan bahawa Unix berasal pada akhir 1960-an apabila storan yang tersedia jauh lebih kecil. Cap masa juga banyak digunakan, jadi storan mereka bertambah. Sebagai contoh, setiap fail mempunyai tiga cap masa yang dikaitkan dengannya.
Formatnya agak mustahil untuk diterjemahkan dalam kepala anda melainkan anda seorang yang genius matematik. Tetapi ia masih mempunyai beberapa kelebihan berbanding alternatif yang lebih mudah dibaca seperti Rab, 21 Okt 2015 07:28:00 GMT . Anda boleh memesan dua cap waktu Unix dengan mudah, sekali imbas. Ia juga biasanya lebih cepat untuk mengetahui perbezaan antara dua cap waktu. Ini benar terutamanya untuk tarikh yang berdekatan, seperti pada hari bersebelahan.
Mengenai Epoch
Jadi, masa Unix ialah jumlah kiraan saat sejak titik masa tertentu. Tetapi apakah titik masa itu? Ia adalah 00:00:00 UTC pada 1 Januari 1970 . Ini sering dirujuk sebagai Epoch Unix. Pengaturcara memilih tarikh ini untuk zaman itu kerana ia adalah tarikh pusingan terdekat apabila mereka mencipta masa Unix.
Anda mungkin pernah melihat tarikh ini apabila ada masalah. Ia jelas satu pepijat, tetapi yang kelihatan sangat pelik apabila ia menghasilkan tarikh sebelum masa ramai di antara kita dilahirkan! Ia benar-benar boleh difahami, walaupun, apabila anda tahu tentang masa Unix. Jika mana-mana sistem cuba memaparkan cap masa yang tidak mempunyai sebarang nilai, ia selalunya akan diterjemahkan kepada 0 dan menghasilkan tarikh zaman yang tepat.
Tegasnya, tidak ada satu pun. Jenis data asal ialah integer 32-bit, dan ini selalunya kekal, walaupun dalam sistem yang lebih berkuasa.
Jenis data ini membolehkan nilai menyimpan sejumlah 2^32 saat, iaitu lebih daripada 136 tahun. Nilai ini biasanya ditandatangani, bermakna ia boleh menjadi negatif atau positif. Jadi, ia biasanya mewakili 68 tahun pada kedua-dua belah zaman iaitu 1902-2038.
Ini masih tempoh terhad, sudah tentu. Tetapi penggunaan utama format cap waktu adalah untuk konsep seperti pengubahsuaian fail. Keperluan adalah sangat banyak untuk mewakili masa yang dekat dengan masa kini, bukannya sejarah kuno atau jauh ke masa depan. Malah untuk aplikasi seperti kalendar, jarang terdapat keperluan untuk mewakili tarikh lebih daripada beberapa dekad ke hadapan.
Tetapi itu tidak bermakna jangka masa terhad ini tanpa masalah…
Masalah Tahun 2038
Pepijat Y2K ( salah satu kesilapan pengaturcaraan terburuk dalam sejarah ) menjejaskan sistem komputer yang menyimpan tahun sebagai nilai dua digit. Apabila tahun 2000 tiba, sistem sedemikian menganggapnya seolah-olah tahun 1900. Sekiranya berlaku, ini bukanlah bencana seperti yang dikhuatiri, terutamanya kerana ramai orang menghabiskan banyak masa dan usaha lebih awal, membuat persediaan untuk menghadapinya.
Jika anda memberi perhatian pada bahagian sebelumnya, anda mungkin telah melihat masalah serupa yang boleh menjejaskan masa Unix. Nah, masa Unix mempunyai masalah datanya sendiri: masalah Y2k38. (Ia sering dirujuk sebagai masalah, bukan pepijat; mungkin kami menjadi lebih optimis sejak tahun 2000!) Apabila masa Unix benar-benar habis pada tahun 2038, sistem akan menganggap tarikh baharu sama ada sebagai 1902 atau 1970. Atau mungkin mereka' hanya akan gagal sama sekali.
Sekurang-kurangnya masalah ini tidak akan menimpa kita pada pukul tengah malam pada Malam Tahun Baru. Detik terakhir masa Unix 32-bit akan jatuh pada 19 Mac. Kemungkinan besar, kami mungkin akan menaik taraf kebanyakan sistem menjelang 2038 atau sistem itu akan menjadi usang pada masa itu juga.
Beberapa Sumber Cap Masa Berguna
Tapak Epoch Converter mungkin merupakan penukar cap waktu paling komprehensif yang tersedia. Ia bermula dengan memaparkan masa Unix semasa—dalam masa nyata—dan menambah hampir setiap ciri yang boleh dibayangkan selain daripada itu. Kegunaan utamanya adalah untuk menukar antara cap waktu dan tarikh yang boleh dibaca manusia, dalam kedua-dua arah.
Dan's Tools ialah koleksi besar apl web yang berguna, salah satunya ialah penukar cap masa . Ia lebih asas, tetapi mempunyai persembahan yang sangat bersih dan mudah digunakan.
Time.is mempersembahkan satu lagi rupa yang lebih minimalis. Ia menunjukkan masa dalam beberapa format, termasuk masa Unix. Ia termasuk masa semasa dalam tajuk halamannya yang berguna.
Pada Linux dan macOS, program tarikh ialah utiliti teras untuk menangani tarikh/masa, termasuk cap waktu Unix. Dipanggil tanpa sebarang hujah, ia mengembalikan tarikh/masa semasa dalam format yang boleh dibaca manusia:
$ date Wed Feb 10 12:28:30 GMT 2021
Jika anda memerlukan tarikh/masa semasa dalam masa Unix, gunakan argumen +%s :
$ date +%s 1612960114
Anda boleh menukar daripada tarikh yang boleh dibaca manusia kepada cap masa menggunakan bendera -d jika versi tarikh anda menyokongnya. Kebanyakan versi Linux sepatutnya, secara lalai:
$ date -d "Jan 2 1970" +%s 82800
Pada macOS, tarikh ialah program yang berbeza, yang memerlukan set bendera yang berbeza:
$ date -j -f "%b %d %Y %T" "Jan 02 1970 00:00:00" "+%s" 82800
Melangkah ke arah lain, anda boleh menukar daripada cap waktu Unix menggunakan bendera -r :
$ date -r 1600000000 Sun 13 Sep 2020 13:26:40 BST
Sesetengah atur cara lain menggunakan format %s untuk menangani masa Unix. Sebagai contoh, jika anda ingin menunjukkan tarikh pengubahsuaian fail dalam masa Unix, dengan versi Linux ls , anda boleh menggunakan yang berikut:
$ ls -l --time-style=+%s index.tmp.html -rw-r--r-- 1 ubuntu ubuntu 17862 1521649818 index.tmp.html
Cara Menggunakan Masa Unix dalam Bahasa Pengaturcaraan
PHP mempunyai fungsi masa() yang mengembalikan cap masa Unix semasa. Its tarikh () fungsi mengambil cap masa sebagai argumen kedua:
$ php -r 'echo date("Y-m-d", time());' 2021-02-11
JavaScript mendekati sesuatu dengan cara yang menarik. Ia mempunyai kaedah Date.now() untuk mendapatkan bilangan milisaat sejak zaman Unix. Sudah tentu, anda boleh membahagikan ini dengan 1,000 dan membundarkan hasilnya untuk memberikan masa Unix yang setara dalam beberapa saat:
> Math.floor(Date.now() / 1000) 1613083012
Memahami Masa Unix
Masa Unix ialah konsep mudah yang muncul di banyak tempat. Sebaik sahaja anda memahaminya, anda mungkin mendapati ia agak berguna, sebagai contoh apabila mengira perbezaan masa. Anda juga boleh mengenali apabila ia mungkin menjadi punca pepijat tertentu.
Konsep seperti zaman dan cap masa adalah bahagian penting dalam memulakan Linux. Untuk mengetahui lebih lanjut tentang perkara penting seperti ls , lihat panduan kami untuk arahan asas Linux.