Khi bạn đang viết script trong Bash, chắc chắn bạn sẽ cần phải in ngày hoặc giờ và ngày hoặc giờ đó thường cần ở một định dạng cụ thể để đáp ứng các yêu cầu của những hàm khác. Đó là khi lệnh date có tác dụng.
Như bạn sẽ thấy, lệnh date trong Linux vừa đơn giản vừa linh hoạt, có nghĩa là nó sẽ chấp nhận tất cả các loại đầu vào và tạo ngày tháng ở nhiều định dạng. Nó cũng có các chức năng đặc biệt khác cho những nhiệm vụ tính toán khác nhau liên quan đến thời gian. Biết các tùy chọn và cú pháp của date chắc chắn sẽ giúp bạn thành thạo hơn trong việc viết script.
Cú pháp cơ bản của lệnh date
Cú pháp cơ bản cho lệnh date như sau:
date [OPTION]... [+FORMAT]
Điều đó có nghĩa là sau khi nhập ngày, bạn có thể nhập một tùy chọn, như -d hoặc -s, để gọi một hàm cụ thể (bài viết sẽ giải thích bên dưới).
Bạn cũng có thể theo dõi chúng bằng các chuỗi định dạng, luôn bắt đầu bằng ký tự +. Các chuỗi đó lấy những ký tự định dạng cụ thể, cũng được liệt kê bên dưới, để xác định đầu ra.
Ví dụ thực tế về lệnh date trên Linux
Bạn có thể đặt lệnh date để sử dụng theo một số cách. Hãy xem xét các trường hợp sử dụng phổ biến và hữu ích nhất.
1. Lấy thông tin ngày và giờ hiện tại
Bạn có thể lấy thông tin ngày và giờ cục bộ hiện tại ở định dạng mặc định bằng cách sử dụng lệnh date.
$ date
Mon 19 Apr 2021 12:41:17 PM CDT
Như bạn có thể thấy, date cung cấp cho bạn thông tin ngày và giờ có liên quan ở định dạng đơn giản và có thể đoán trước được.
2. Lấy một ngày trong quá khứ hoặc tương lai
Giả sử trong script, bạn cần tính toán ngày và giờ chính xác sau một tuần kể từ bây giờ. Lệnh date sẽ giúp bạn. Nhập lệnh này, sử dụng tùy chọn -d để nhận thông tin chi tiết liên quan đến các ngày trong tương lai:
$ date -d "next week"
Tue 27 Apr 2021 05:21:07 PM CDT
Tùy chọn -d, viết tắt của date, là nơi lệnh date thực sự tỏa sáng. Nó sẽ chấp nhận nhiều chuỗi ngày tùy chỉnh; chúng có thể mang tính kỹ thuật, như 20200315, 15/03/20 hoặc ở dạng có thể đọc được như Mar 15 2020. Nhưng bạn cũng có thể sử dụng các thuật ngữ tương đối, như tomorrow, yesterday, next Sunday, v.v… Hãy thoải mái thử nghiệm và xem date diễn giải các chuỗi đầu vào khác nhau như thế nào.
3. Định dạng ngày
Bạn có thể nhận thấy trong hai ví dụ trước, ngày mặc định theo một định dạng thời gian rất cụ thể. Vậy nếu bạn cần nó ở một định dạng khác thì sao?
Bạn có thể định dạng đầu ra của mình tương tự như lệnh printf. Ví dụ, bạn có thể in năm hiện tại bằng lệnh này:
date +"Year: %Y"
Dấu + báo hiệu rằng bạn muốn một chuỗi được định dạng và bất kỳ thứ gì xuất hiện sau đó bên trong dấu ngoặc kép, date sẽ xử lý và định dạng cho đầu ra.
Dưới đây là danh sách các ký tự định dạng mà bạn có nhiều khả năng sử dụng nhất:
Ký tự định dạng | Đầu ra |
---|---|
%H | Giờ (00-24) |
%I | Giờ (01-12) |
%M | Phút (00-59) |
%S | Giây (00-60) |
%p | AM hoặc PM |
%A | Thứ trong tuần dạng đầy đủ (ví dụ Sunday) |
%a | Thứ trong tuần dạng viết tắt (ví dụ Sun) |
%w | Số ngày trong tuần (0-6) |
%d | Ngày trong tháng (01-31) |
%j | Ngày trong năm (001-366) |
%B | Tháng dạng đầy đủ (ví dụ January) |
%b | Tháng dạng viết tắt (ví dụ Jan) |
%m | Số tháng (01-12) |
Bạn có thể nhận được danh sách đầy đủ các ký tự định dạng bằng cách sử dụng tùy chọn –help trong Terminal.
date --help
4. Nhận thông tin ngày trong tuần
Một cách sử dụng rất phổ biến và thực tế của định dạng ngày là lấy thông tin ngày trong tuần cho bất kỳ ngày cụ thể nào. Ví dụ, để kiểm tra ngày 4 tháng 11 năm 1995 rơi vào ngày nào trong tuần, hãy nhập một lệnh tương tự như sau:
$ date -d "1996-04-11" +"%A"
Friday
Tùy chọn -d chỉ ra rằng bạn muốn một ngày cụ thể, chuỗi “1996-04-11” cho biết bạn muốn ngày nào và định dạng +”%A” cho biết rằng bạn muốn ngày trong tuần cho đầu ra. Hãy nhớ rằng chuỗi ngày có thể ở nhiều định dạng, chứ không chỉ có một định dạng được chỉ định ở đây.
5. Nhận thông tin Giờ Phối hợp Quốc tế
Bằng cách đưa ra flag -u, bạn có thể nhận được thời gian hiện tại theo Giờ Phối hợp Quốc tế (UTC).
$ date -u
Wed 21 Apr 2021 12:46:59 PM UTC
6. Xuất giờ địa phương ở múi giờ khác
Nếu bạn cần lấy một ngày ở bất kỳ múi giờ nào khác, bạn có thể làm như vậy bằng cách đặt biến môi trường TZ= trước lệnh date.
Ví dụ, bạn có thể xem ngày và giờ hiện tại theo giờ chuẩn miền núi (MST) bằng lệnh sau:
$ TZ=MST date
Tue 20 Apr 2021 03:45:29 PM MST
Đối với mục đích của bạn, chỉ cần thay thế MST bằng các chữ cái viết tắt cho bất kỳ múi giờ nào bạn muốn. Bạn cũng có thể chọn sử dụng ký hiệu UTC. Ví dụ, để có cùng múi giờ, hãy thay thế MST bằng UTC+7.
Ngoài ra, bạn có thể đặt tên cho một lục địa và thành phố lớn để lấy thời gian theo giờ địa phương của thành phố cụ thể đó. Ví dụ:
$ TZ=America/Phoenix date
Tue 20 Apr 2021 03:45:29 PM MST
7. Lấy thông tin thời gian sửa đổi cuối cùng của file
Ví dụ, nếu bạn đang tạo bản sao lưu, bạn thường cần lấy thông tin ngày sửa đổi cuối cùng của file. Bạn có thể thực hiện việc này bằng cách chuyển tùy chọn -r và đặt tên file.
$ date -r /etc/shadow
Wed 14 Apr 2021 07:53:02 AM CDT
Bạn cũng có thể thay đổi timestamp (dấu thời gian) của file bằng lệnh touch trong Linux.
8. Xuất và chuyển đổi thời gian Unix
Bạn có thể tính số giây kể từ kỷ nguyên Unix bằng lệnh sau:
$ date +%s
1618955631
Bạn cũng có thể đảo ngược quá trình và chuyển đổi thời gian Unix thành một định dạng mà con người có thể đọc được thông qua việc sử dụng tùy chọn -d và ký tự @.
$ date -d @1618955631
Tue 20 Apr 2021 04:53:51 PM CDT
Tính toán thời gian Unix rất hữu ích nếu bạn cần một giây chính xác, chắc chắn sẽ giữ cho các thiết bị khác được đồng bộ.
9. Tạm thời đặt thời gian hệ thống
Bạn có thể thay đổi đồng hồ hệ thống của mình từ Terminal với lệnh date bằng cách chuyển đối số -s theo sau là thời gian bạn muốn. Ví dụ, bạn có thể đặt đồng hồ hệ thống thành 24 giờ trong tương lai bằng lệnh sau:
date -s "tomorrow"
Lưu ý rằng bạn sẽ cần các đặc quyền sudo để chuyển lệnh này. Ngoài ra, thay đổi có thể sẽ không liên tục (có nghĩa là đồng hồ của bạn sẽ quay trở lại thời điểm trước đó sau khi khởi động lại) bởi vì hầu hết các bản phân phối sử dụng những tiện ích khác để quản lý đồng hồ hệ thống, sẽ ghi đè thay đổi khi boot.