จะเปลี่ยนวันที่ของระบบใน Linux ได้อย่างไร?
ฉันต้องการเปลี่ยน:
- ปีเดียวเท่านั้น
- เดือนเดียวเท่านั้น
- วันที่เท่านั้น
- การรวมกันของทั้งสามข้างต้น
sudo ntpd -gq
เพื่อให้การอัปเดตระบบโดยอัตโนมัติโดยใช้บริการ ntp
จะเปลี่ยนวันที่ของระบบใน Linux ได้อย่างไร?
ฉันต้องการเปลี่ยน:
sudo ntpd -gq
เพื่อให้การอัปเดตระบบโดยอัตโนมัติโดยใช้บริการ ntp
คำตอบ:
ใช้date -s
:
date -s '2014-12-25 12:34:56'
sudo
เรียกว่าเป็นรากหรือใต้ การเปลี่ยนแปลงเพียงหนึ่งในปี / เดือน / วันนั้นเป็นสิ่งที่ท้าทายมากกว่าและจะเกี่ยวข้องกับการทำซ้ำบิตของวันที่ปัจจุบัน นอกจากนี้ยังมีเครื่องมือวันที่ GUI ที่สร้างขึ้นในสภาพแวดล้อมเดสก์ท็อปหลัก ๆ ซึ่งมักจะเข้าถึงได้ตลอดเวลา
หากต้องการเปลี่ยนเพียงบางส่วนคุณสามารถใช้การทดแทนคำสั่งในสตริงวันที่:
date -s "2014-12-25 $(date +%H:%M:%S)"
จะเปลี่ยนวันที่ แต่ให้เวลา ดูman date
การจัดรูปแบบรายละเอียดในการสร้างชุดอื่น ๆ : แต่ละองค์ประกอบมี%Y
, %m
, %d
, %H
, และ%M
%S
date -s "2014-12-25 $(date +%H:%M:%S)"
เพื่อเปลี่ยนวันที่และใช้เวลาปัจจุบันซ้ำได้
date: cannot set date: Invalid argument
date -s 2018-01-01
มันเป็นไปได้ที่จะเปลี่ยนเฉพาะวันที่มีคำสั่งเช่น บางคนแบ่งปันสิ่งนี้ในคำตอบด้วย: superuser.com/questions/870068/…
เวลาของระบบ
คุณสามารถใช้date
เพื่อกำหนดวันที่ของระบบ การนำ GNU ไปใช้date
(ตามที่พบในระบบที่ใช้ระบบปฏิบัติการลินุกซ์ส่วนใหญ่ที่ไม่ได้ฝังอยู่) ยอมรับรูปแบบที่แตกต่างกันมากมายเพื่อตั้งเวลานี่เป็นตัวอย่าง:
ตั้งเฉพาะปี:
date -s 'next year'
date -s 'last year'
ตั้งค่าเฉพาะเดือน:
date -s 'last month'
date -s 'next month'
ตั้งเฉพาะวัน:
date -s 'next day'
date -s 'tomorrow'
date -s 'last day'
date -s 'yesterday'
date -s 'friday'
รวมทั้งหมดเข้าด้วยกัน:
date -s '2009-02-13 11:31:30' #that's a magical timestamp
เวลาฮาร์ดแวร์
ขณะนี้เวลาของระบบได้รับการตั้งค่าแล้ว แต่คุณอาจต้องการซิงค์กับนาฬิกาฮาร์ดแวร์:
ใช้--show
เพื่อพิมพ์เวลาของฮาร์ดแวร์:
hwclock --show
คุณสามารถตั้งค่านาฬิกาฮาร์ดแวร์เป็นเวลาปัจจุบันของระบบ:
hwclock --systohc
หรือเวลาระบบไปยังนาฬิกาฮาร์ดแวร์
hwclock --hctosys
คุณเปลี่ยนวันที่ด้วยdate
คำสั่ง อย่างไรก็ตามคำสั่งคาดว่าวันที่เต็มเป็นอาร์กิวเมนต์:
# date -s "20141022 09:45"
Wed Oct 22 09:45:00 BST 2014
หากต้องการเปลี่ยนส่วนหนึ่งของวันที่ให้ส่งออกวันที่ปัจจุบันด้วยส่วนวันที่ที่คุณต้องการเปลี่ยนเป็นสตริงและอื่น ๆ ทั้งหมดเป็นตัวแปรการจัดรูปแบบวันที่ จากนั้นส่งผ่านไปยังdate -s
คำสั่งเพื่อตั้งค่า:
# date -s "$(date +'%Y12%d %H:%M')"
Mon Dec 22 10:55:03 GMT 2014
เปลี่ยนเดือนเป็นเดือนที่ 12 - ธันวาคม
รูปแบบวันที่คือ:
%Y
- ปี%m
- เดือน%d
- วัน%H
- ชั่วโมง%M
- นาทีสำหรับคนอย่างฉันใช้ ESXI 5.1 นี่คือสิ่งที่ระบบตอบฉัน
~ # date -s "2016-03-23 09:56:00"
date: invalid date '2016-03-23 09:56:00'
ฉันต้องใช้คำสั่ง ESX เฉพาะแทน:
esxcli system time set -y 2016 -M 03 -d 23 -H 10 -m 05 -s 00
คำสั่งที่จะเปลี่ยนวันระบบdate
คือ
มีสองวิธีในการเรียกคำสั่ง date (ใน Linux):
date [OPTION]... [+FORMAT]
date [-u|--utc|--universal] [MMDDhhmm[[CC]YY][.ss]]
วิธีที่ง่ายที่สุดคือการใช้date -s
ที่จะช่วยให้การใช้งานของง่าย ญาติวัน
$ 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
$
วันที่ไม่ได้เปลี่ยนเพราะมันกำลังดำเนินการกับผู้ใช้ที่ จำกัด หากคุณต้องการเปลี่ยนวันที่ให้ใช้ root ( #
) หรือ sudo:
$ sudo date -s yesterday; date
Sat Jan 5 07:21:07 EST 2019
Sat Jan 5 07:21:07 EST 2019
ดังนั้นการเปลี่ยนส่วนใด ๆ ของวันที่สัมพัทธ์จึงเป็นเรื่องง่ายเหมือนการตั้งชื่อ:
$ 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
วันที่แน่นอนจะซับซ้อนกว่านี้เล็กน้อยเนื่องจากต้องการรายละเอียดเพิ่มเติม:
$ date -s "2001-07-23 10:11:12"
หรือคุณสามารถใช้คำสั่ง date สองครั้ง:
$ date -s "$(date +'%Y-%m-%d %H:%M:%S')"
แทนที่ค่าใด ๆ%
ด้วยค่าที่ถูกต้องและวันที่จะถูกตั้งค่า (เป็น root เท่านั้น)
$ date -s "$(date +'%Y-11-%d %H:%M:%S')"
Wed Nov 6 08:37:15 EST 2019
รูปแบบวันที่สายที่สองจะใช้ในการโดยตรงเปลี่ยนวันระบบ
date [-u|--utc|--universal] [MMDDhhmm[[CC]YY][.ss]]
ดังนั้น:
date 11230812 # MMDDhhmm
จะตั้งวันที่ 23 พฤศจิกายนเวลา 08 น. และ 12 นาที
BSD มีคำสั่งที่คล้ายกันแต่มีรูปแบบที่แตกต่างกัน ([[[[[cc] yy] mm] dd] HH] MM [.ss])
ลองdate
ในฐานะผู้ใช้ที่ จำกัด เพื่อดูว่าจะทำอะไร (โดยไม่ต้องเปลี่ยนอะไรเลย):
$ date 11230812
date: cannot set date: Operation not permitted
Sat Nov 23 08:12:00 EST 2019
หรือถ้าคุณต้องการเปลี่ยนวันที่ในฐานะรูท:
# date 11230812
# date
Sat Nov 23 08:12:00 EST 2019
โปรดทราบว่าบริการเช่น NTP หรือ chrony จะได้รับผลกระทบ และหากเริ่มต้นใหม่จะรีเซ็ตวันที่กลับเป็นของจริง
เพิ่ม YY เพื่อตั้งปี:
$ date 1123081222
date: cannot set date: Operation not permitted
Wed Nov 23 08:12:00 EST 2022
หรือ CCYY เพื่อตั้งปีและศตวรรษ:
$ date 112308121982
date: cannot set date: Operation not permitted
Tue Nov 23 08:12:00 EST 1982
ฉันใช้คำสั่ง date และรูปแบบเวลาที่แสดงด้านล่างเพื่อตั้งค่าวันที่จากคำสั่ง terminal shell ให้ดำเนินการบน Android Things ซึ่งใช้ Linux Kernal
วันที่ 092615002017.00
MMDDHHMMYYYY.SS
MM - เดือน - 09
DD - วัน - 26
HH - ชั่วโมง - 15
MM - ต่ำสุด - 00
YYYY - ปี - 2017
.SS - วินาที - 00
date
คุณช่วยกรุณาเพิ่มข้อมูลเพิ่มเติมเกี่ยวกับระบบที่เกี่ยวข้องและคำถามที่เกี่ยวข้อง
date --set='-2 years'
เพื่อตั้งค่านาฬิกาสองปีโดยปล่อยให้องค์ประกอบอื่น ๆ ทั้งหมดเหมือนกัน คุณสามารถเปลี่ยนเดือนและวันของเดือนด้วยวิธีเดียวกัน ฉันไม่ได้ตรวจสอบสิ่งที่จะเกิดขึ้นหากการคำนวณนั้นส่งผลให้เกิด datetime ที่ไม่มีอยู่จริงเช่นในระหว่างการเปลี่ยนแปลงแบบ DST แต่พฤติกรรมนั้นควรจะเหมือนกันกับพฤติกรรม "ตั้งค่าทั้งวันที่และเวลาให้เป็นรูปธรรม"