Tôi muốn hiển thị /proc/uptime
ở định dạng tốt như:
DD:HH:MM:SS
/proc/uptime
cho tôi thời gian của hệ thống tính bằng giây, có giải pháp chuẩn nào chuyển đổi giây thành định dạng này không?
Tôi muốn hiển thị /proc/uptime
ở định dạng tốt như:
DD:HH:MM:SS
/proc/uptime
cho tôi thời gian của hệ thống tính bằng giây, có giải pháp chuẩn nào chuyển đổi giây thành định dạng này không?
Câu trả lời:
Bạn có thể làm điều này ví dụ với perl và một số phép toán đơn giản:
cat /proc/uptime | perl -ne '/(\d*)/ ; printf "%02d:%02d:%02d:%02d\n",int($1/86400),int(($1%86400)/3600),int(($1%3600)/60),$1%60'
Nếu bạn không cần giây, bạn chỉ cần chạy uptime
lệnh. Đầu ra của nó sau đó có thể được chuyển đổi đơn giản thành DD: HH: MM.
Ví dụ: sử dụng (chỉ hoạt động theo cách này nếu thời gian hoạt động> 1h)
uptime | perl -ne '/(\d*) day[^\d]*(\d*):(\d*)/ ; printf "%02d:%02d:%02d\n", $1, $2, $3'
Không, bởi vì nó không thực sự là một vấn đề khó khăn. Chia số giây cho 86400 bằng cách sử dụng phép chia số nguyên để lấy số ngày. Lấy phần còn lại và chia số đó cho 3600 để lấy số giờ. Chia phần còn lại cho 60 để lấy số phút và bạn còn lại với số giây. Tất cả điều này có thể thực hiện được từ shell bằng expr
lệnh nếu shell của bạn đủ cổ để không hỗ trợ số học nguyên bản
Lấy số giây kể từ kỷ nguyên và biến ngày đó thành ngày có thể đọc được của con người là một vấn đề khó khăn, và do đó, có những cách tiêu chuẩn để làm điều đó, ví dụ date -r SECONDS
từ vỏ. Nhưng đó là một vấn đề khác.
Điều chỉnh phần có liên quan của câu trả lời này .
Miễn là thời gian hoạt động của bạn dưới một năm, bạn có thể sử dụng lệnh sau:
TZ=UTC date -d@$(cut -d\ -f1 /proc/uptime) +'%j %T' | awk '{print $1-1"d",$2}'
Tôi trích xuất trường đầu tiên của tệp thời gian hoạt động, vì ít nhất trên Linux của tôi, có trường thứ hai chứa tổng thời gian nhàn rỗi. Tôi coi đó là số giây kể từ kỷ nguyên, và chuyển đổi nó thành ngày trong năm theo sau là thời gian tính bằng giờ, phút và giây. Vì ngày trong năm bắt đầu từ một, tôi trừ đi một trong số đó trong lần awk
gọi cuối cùng của tôi .
\n
cho dòng mới sẽ tốt!