Linux: tarihi komut satırıyla ayarlayın


76

Linux'ta sistem tarihi nasıl değiştirilir?

Değiştirmek istiyorum:

  • Sadece yıl
  • Sadece ay
  • Sadece tarih
  • Yukarıdaki üç herhangi bir kombinasyonu

2
Örneğin date --set='-2 years', saati diğer tüm öğeleri aynı bırakarak saati iki yıl geriye ayarlamak için kullanabilirsiniz . Ayı ve günü, aynı şekilde değiştirebilirsiniz. Bu hesaplamanın gerçekte olmayan bir tarihte sonuçlanıp sonuçlanmadığını kontrol etmedim, örneğin bir DST geçişi sırasında, ancak davranış her zamanki "hem tarihi hem de saati somut değerlere ayarla" davranışıyla aynı olmalıdır.
Christian Severin

Tarihi geçerli saate ayarlamaya çalıştığınızı varsayarak sudo ntpd -gq, ntp servisini kullanarak sistemin otomatik olarak güncellenmesini sağlayabilirsiniz.
Steven Soroka

Yanıtlar:


95

Kullanım date -s:

date -s '2014-12-25 12:34:56'

Bunu root olarak veya altında çalıştırın sudo. Yıl / ay / günün yalnızca bir tanesini değiştirmek daha zordur ve mevcut tarihin bitlerini içerir. Ayrıca, genellikle saatlerce erişilen belli başlı masaüstü ortamlarında yerleşik olan GUI tarih araçları da vardır.

Zamanın yalnızca bir bölümünü değiştirmek için tarih dizesinde komut değiştirme kullanabilirsiniz:

date -s "2014-12-25 $(date +%H:%M:%S)"

tarihi değiştirecek, fakat saati koruyacak. Bkz man datetek tek bileşenler şunlardır: diğer kombinasyonlar oluşturmak için ayrıntıları biçimlendirmek için %Y, %m, %d, %H, %M, ve %S.


Zamanını değiştirmek istemiyorum
SHW

5
Bunu yapmak için bir seçenek yok. date -s "2014-12-25 $(date +%H:%M:%S)"Ancak tarihi değiştirmek ve geçerli saati yeniden kullanmak için kullanabilirsiniz .
Michael Homer,

buraya geldi ve saatlerin yanı sıra dakikaların şu anki zamanla uyuşuyordu. - güzel
Alex2php

2
date: cannot set date: Invalid argument
Chris Stryczynski, 16

@MichaelHomer @SHW sadece tarihini bir komutla değiştirmek mümkündür date -s 2018-01-01. Birisi bunu bir cevapta da paylaştı: superuser.com/questions/870068/…
baptx

42

Sistem zamanı

dateSistem tarihini ayarlamak için kullanabilirsiniz . GNU'nun date(gömülü olmayan Linux tabanlı sistemlerin çoğunda olduğu gibi) uygulaması , zamanı ayarlamak için birçok farklı biçimi kabul eder, burada birkaç örnek:

sadece yılı ayarla:

date -s 'next year'
date -s 'last year'

sadece ayı ayarla:

date -s 'last month'
date -s 'next month'

sadece günü ayarla:

date -s 'next day'
date -s 'tomorrow'
date -s 'last day'
date -s 'yesterday'
date -s 'friday'

hepsini bir araya getirin:

date -s '2009-02-13 11:31:30' #that's a magical timestamp

Donanım zaman

Şimdi sistem saati ayarlandı, ancak donanım saati ile senkronize etmek isteyebilirsiniz:

--showDonanım zamanını yazdırmak için kullanın :

hwclock --show

Donanım saatini geçerli sistem saatine ayarlayabilirsiniz:

hwclock --systohc

Veya donanım saatine sistem zamanı

hwclock --hctosys

2
Belirsiz yollarını göstermek için bonus puanları, tarihi örneklerle ve "sistem saati" ile "donanım saati" arasındaki farkı belirtmek için belirleyebilirsiniz. Çok yardımcı cevap!
Mark Edington,

3

Tarihi datekomutla değiştirirsiniz . Ancak, komut argüman olarak tam bir tarih bekler:

# date -s "20141022 09:45"
Wed Oct 22 09:45:00 BST 2014

Tarihin bir bölümünü değiştirmek için geçerli tarihi, bir dize olarak değiştirmek istediğiniz tarih bölümü ve diğer tüm tarih biçimlendirme değişkenleri olarak verin. Sonra date -sonu ayarlamak için komuta geçmek :

# date -s "$(date +'%Y12%d %H:%M')"
Mon Dec 22 10:55:03 GMT 2014

ayı 12. ayına değiştirir - Aralık.

Tarih biçimleri:

  • %Y - yıl
  • %m - Ay
  • %d - Gün
  • %H - Saat
  • %M - Dakika

Değişmeye çalışıyorum ama değişmiyor: - $ sudo date --set = "2015-09-30 10: 05: 59.990" Çarşamba 30 Eylül 10:05:59 +0530 2015 $ tarih Per 23 Mayıs 10:10:37 +0530 2019
Vinod

2

Benim gibi ESXI 5.1 çalıştıranlar için, işte sistemin bana cevap verdiği

~ # date -s "2016-03-23 09:56:00"
date: invalid date '2016-03-23 09:56:00'

Bunun yerine belirli bir ESX komutunu kullanmak zorunda kaldım:

esxcli system time set  -y 2016 -M 03 -d 23  -H 10 -m 05 -s 00

3
-1 için teşekkürler, ama nedenini açıklar mısın? Daha iyi / daha eksiksiz / daha kesin bir cevabınız varsa, yorum yapmaktan çekinmeyin.
Balmipour

1

Komut için sistem tarihi değiştirmek olduğunu date.

Date komutunu çağırmanın iki yolu vardır (Linux'ta):

   date [OPTION]... [+FORMAT]
   date [-u|--utc|--universal] [MMDDhhmm[[CC]YY][.ss]]

Kolay

En kolay yol, basit göreceli tarihlerin date -skullanımına izin verdiğinden kullanmaktır.

 $ date -s yesterday; date
 date: cannot set date: Operation not permitted
 Sat Jan  5 07:21:07 EST 2019
 Sun Jan  6 07:21:07 EST 2019

Tarih değişmedi çünkü sınırlı bir kullanıcıyla yürütüldü $. Gerçekten tarihin değişmesini istiyorsanız, root ( #) veya sudo kullanın:

 $ sudo date -s yesterday; date
 Sat Jan  5 07:21:07 EST 2019
 Sat Jan  5 07:21:07 EST 2019

Dolayısıyla, göreli tarihin herhangi bir bölümünü değiştirmek , adlandırmak kadar kolaydır:

 $ date -s "5 years ago"
 Mon Jan  6 08:26:26 EST 2014

 $ date -s "+6 months"
 Sat Jul  6 08:28:39 EDT 2019

 $ date -s "+3 hours -13 minutes"
 Sun Jan  6 11:16:59 AST 2019

Mutlak tarihler, daha fazla ayrıntıya ihtiyaç duyduklarından biraz daha karmaşıktır:

 $ date -s "2001-07-23 10:11:12"

Veya date komutunu iki kez kullanabilirsiniz:

 $ date -s "$(date +'%Y-%m-%d %H:%M:%S')"

Herhangi birini %geçerli bir değerle değiştirin , tarih ayarlanacaktır (sadece root olarak).

 $ date -s "$(date +'%Y-11-%d %H:%M:%S')"
 Wed Nov  6 08:37:15 EST 2019

direkt

İkinci tarih çağrı formu, sistem tarihini doğrudan değiştirmek için kullanılır .

 date [-u|--utc|--universal] [MMDDhhmm[[CC]YY][.ss]]

Yani :

 date 11230812              # MMDDhhmm

Tarihi 23 Kasım’da 08: 00-12: 00 arasında belirleyecektir.

BSD benzer bir komuta ancak farklı bir biçime sahiptir ([[[[[[[] [y] a] a] aa] aaa] aaaa [.ss]).

dateNe olacağını görmek için sınırlı bir kullanıcı olarak deneyin (hiçbir şeyi değiştirmeden):

 $ date 11230812
 date: cannot set date: Operation not permitted
 Sat Nov 23 08:12:00 EST 2019

Veya, tarihi gerçekten değiştirmek istiyorsanız, root olarak:

 # date 11230812
 # date
 Sat Nov 23 08:12:00 EST 2019

NTP veya chrony gibi servislerin etkileneceğini unutmayın. Ve eğer yeniden başlatılırsa, tarihi tekrar gerçek tarihe döndürür.

Yılı ayarlamak için bir YY ekleyin:

 $ date 1123081222
 date: cannot set date: Operation not permitted
 Wed Nov 23 08:12:00 EST 2022

Veya yıl ve yüzyılı belirlemek için bir CCYY :

 $ date 112308121982
 date: cannot set date: Operation not permitted
 Tue Nov 23 08:12:00 EST 1982

-1

Linux Kernal'ı kullanan Android Nesnelerinde gerçekleştirilen terminal kabuğu komutundan tarihi başarıyla ayarlamak için aşağıda listelenen tarih komutunu ve saat biçimini kullandım.

092615002017.00

MMDDHHMMYYYY.SS

MM - Ay - 09

DD - Gün - 26

SS - Saat - 15

MM - Min - 00

YYYY - Yıl - 2017

.SS - ikinci - 00


Bu GNU veya BSD ile çalışmadığından date, bunun hangi sistemle alakalı olduğu ve bu özel soru ile nasıl alakalı olduğu hakkında daha fazla bilgi ekler misiniz?
Kusalananda
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.