Làm cách nào để thay đổi ngày hệ thống trong Linux?
Tôi muốn thay đổi:
- Năm duy nhất
- Chỉ tháng
- Chỉ ngày
- Bất kỳ sự kết hợp của ba trên
sudo ntpd -gq
tự động cập nhật hệ thống bằng dịch vụ ntp.
Làm cách nào để thay đổi ngày hệ thống trong Linux?
Tôi muốn thay đổi:
sudo ntpd -gq
tự động cập nhật hệ thống bằng dịch vụ ntp.
Câu trả lời:
Sử dụng date -s
:
date -s '2014-12-25 12:34:56'
Chạy nó như root hoặc dưới sudo
. Chỉ thay đổi một trong năm / tháng / ngày là một thách thức nhiều hơn và sẽ liên quan đến việc lặp lại các bit của ngày hiện tại. Ngoài ra còn có các công cụ ngày GUI được tích hợp trong các môi trường máy tính để bàn chính, thường được truy cập qua đồng hồ.
Để chỉ thay đổi một phần thời gian, bạn có thể sử dụng thay thế lệnh trong chuỗi ngày:
date -s "2014-12-25 $(date +%H:%M:%S)"
sẽ thay đổi ngày, nhưng giữ thời gian. Xem man date
để định dạng chi tiết để xây dựng kết hợp khác: các thành phần riêng lẻ %Y
, %m
, %d
, %H
, %M
, và %S
.
date -s "2014-12-25 $(date +%H:%M:%S)"
để thay đổi ngày và sử dụng lại thời gian hiện tại.
date: cannot set date: Invalid argument
date -s 2018-01-01
. Ai đó cũng chia sẻ điều này trong một câu trả lời: superuser.com/questions/870068/
Thời gian hệ thống
Bạn có thể sử dụng date
để thiết lập ngày hệ thống. Việc triển khai GNU date
(như được tìm thấy trên hầu hết các hệ thống dựa trên Linux không nhúng) chấp nhận nhiều định dạng khác nhau để đặt thời gian, ở đây một vài ví dụ:
chỉ đặt năm:
date -s 'next year'
date -s 'last year'
chỉ đặt tháng:
date -s 'last month'
date -s 'next month'
chỉ đặt ngày:
date -s 'next day'
date -s 'tomorrow'
date -s 'last day'
date -s 'yesterday'
date -s 'friday'
tập hợp tất cả lại với nhau:
date -s '2009-02-13 11:31:30' #that's a magical timestamp
Thời gian phần cứng
Bây giờ thời gian hệ thống đã được đặt, nhưng bạn có thể muốn đồng bộ hóa nó với đồng hồ phần cứng:
Sử dụng --show
để in thời gian phần cứng:
hwclock --show
Bạn có thể đặt đồng hồ phần cứng theo thời gian hệ thống hiện tại:
hwclock --systohc
Hoặc thời gian hệ thống đến đồng hồ phần cứng
hwclock --hctosys
Bạn thay đổi ngày với date
lệnh. Tuy nhiên, lệnh mong đợi một ngày đầy đủ như là đối số:
# date -s "20141022 09:45"
Wed Oct 22 09:45:00 BST 2014
Để thay đổi một phần của ngày, hãy xuất ngày hiện tại với phần ngày mà bạn muốn thay đổi dưới dạng chuỗi và tất cả các phần khác dưới dạng biến định dạng ngày. Sau đó chuyển nó đến date -s
lệnh để đặt nó:
# date -s "$(date +'%Y12%d %H:%M')"
Mon Dec 22 10:55:03 GMT 2014
thay đổi tháng sang tháng thứ 12 - tháng 12.
Các định dạng ngày là:
%Y
- Năm%m
- Tháng%d
- Ngày%H
- Giờ%M
- PhútĐối với những người như tôi đang chạy ESXI 5.1, đây là những gì hệ thống đã trả lời tôi
~ # date -s "2016-03-23 09:56:00"
date: invalid date '2016-03-23 09:56:00'
Tôi đã phải sử dụng một lệnh ESX cụ thể thay thế:
esxcli system time set -y 2016 -M 03 -d 23 -H 10 -m 05 -s 00
Lệnh thay đổi ngày hệ thống là date
.
Có hai cách để gọi lệnh date (trong Linux):
date [OPTION]... [+FORMAT]
date [-u|--utc|--universal] [MMDDhhmm[[CC]YY][.ss]]
Cách dễ nhất là sử dụng date -s
vì nó cho phép sử dụng các ngày tương đối đơn giản
$ 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
Ngày không thay đổi vì nó được thực hiện với một người dùng hạn chế $
. Nếu bạn thực sự muốn ngày thay đổi, hãy sử dụng root ( #
) hoặc sudo:
$ sudo date -s yesterday; date
Sat Jan 5 07:21:07 EST 2019
Sat Jan 5 07:21:07 EST 2019
Vì vậy, thay đổi bất kỳ phần nào của một ngày tương đối cũng dễ như đặt tên cho nó:
$ 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
Ngày tuyệt đối phức tạp hơn một chút vì chúng cần chi tiết hơn:
$ date -s "2001-07-23 10:11:12"
Hoặc, bạn có thể sử dụng lệnh date hai lần:
$ date -s "$(date +'%Y-%m-%d %H:%M:%S')"
thay thế bất kỳ %
giá trị nào bằng một giá trị hợp lệ và ngày sẽ được đặt (chỉ với quyền root).
$ date -s "$(date +'%Y-11-%d %H:%M:%S')"
Wed Nov 6 08:37:15 EST 2019
Mẫu cuộc gọi ngày thứ hai được sử dụng để thay đổi trực tiếp ngày hệ thống.
date [-u|--utc|--universal] [MMDDhhmm[[CC]YY][.ss]]
Vì thế :
date 11230812 # MMDDhhmm
Sẽ đặt ngày vào ngày 23 tháng 11 lúc 08h và 12 phút.
BSD có một lệnh tương tự nhưng có định dạng khác ([[[[[cc] yy] mm] dd] HH] MM [.ss]).
Hãy thử date
làm người dùng hạn chế để xem những gì nó sẽ làm (không thay đổi bất cứ điều gì):
$ date 11230812
date: cannot set date: Operation not permitted
Sat Nov 23 08:12:00 EST 2019
Hoặc, nếu bạn thực sự muốn thay đổi ngày, với quyền root:
# date 11230812
# date
Sat Nov 23 08:12:00 EST 2019
Lưu ý rằng các dịch vụ như NTP hoặc chrony sẽ bị ảnh hưởng. Và, nếu được khởi động lại sẽ đặt lại ngày trở lại ngày thực.
Thêm một YY để đặt năm:
$ date 1123081222
date: cannot set date: Operation not permitted
Wed Nov 23 08:12:00 EST 2022
Hoặc một CCYY để thiết lập năm và thế kỷ:
$ date 112308121982
date: cannot set date: Operation not permitted
Tue Nov 23 08:12:00 EST 1982
Tôi đã sử dụng lệnh ngày và định dạng thời gian được liệt kê bên dưới để đặt thành công ngày từ lệnh shell terminal được thực hiện trên Android Things sử dụng Linux Kernal.
ngày 092615002017.00
MMDDHHMMYYYY.SS
MM - Tháng - 09
DD - Ngày - 26
HH - Giờ - 15
MM - Tối thiểu - 00
YYYY - Năm - 2017
.SS - giây - 00
date
, bạn có thể vui lòng thêm thông tin thêm về hệ thống này có liên quan đến điều gì và mức độ phù hợp với câu hỏi cụ thể này.
date --set='-2 years'
để đặt lại đồng hồ hai năm, để tất cả các yếu tố khác giống hệt nhau. Bạn có thể thay đổi tháng và ngày trong tháng theo cùng một cách. Tôi đã không kiểm tra xem điều gì sẽ xảy ra nếu phép tính đó dẫn đến thời gian thực sự không tồn tại, ví dụ như trong quá trình chuyển đổi DST, nhưng hành vi phải giống hệt với hành vi "đặt cả ngày và giờ thành giá trị cụ thể" thông thường.