Linux sistem saatini iyi biçimlendirme tarihine dönüştürün


11

/proc/uptimeKuyu biçiminde görüntülemek istiyorum :

DD:HH:MM:SS

/proc/uptime Saniyeler içinde sistemden vazgeçme süresi, saniyeleri bu biçime dönüştüren standart bir çözüm var mı?

Yanıtlar:


15

İşte olmayan bir yol perl:

awk '{printf("%d:%02d:%02d:%02d\n",($1/60/60/24),($1/60/60%24),($1/60%60),($1%60))}' /proc/uptime

1
Mükemmel cevap. \n Newline için iyi olurdu!
ankit7540

4

Bunu perl ve bazı basit matematik ile yapabilirsiniz:

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' 

Saniyeye ihtiyacınız yoksa, sadece uptimekomutu çalıştırabilirsiniz . Çıkışı daha sonra DD: HH: MM'ye dönüştürülebilir.

Örneğin kullanma (bu şekilde yalnızca çalışma süresi> 1s ise çalışır)

 uptime | perl -ne '/(\d*) day[^\d]*(\d*):(\d*)/ ; printf "%02d:%02d:%02d\n", $1, $2, $3'

3

Hayır, çünkü bu gerçekten zor bir sorun değil. Gün sayısını elde etmek için tamsayı bölümünü kullanarak saniye sayısını 86400'e bölün. Geri kalanını alın ve saat sayısını almak için bunu 3600'e bölün. Dakika sayısını elde etmek için geri kalanını 60'a bölün ve saniye cinsinden kalırsınız. Tüm bunlar, kabuğunuz expraritmetiği doğal olarak desteklemeyecek kadar eskiyse komutu kullanarak kabuktan yapılabilir

Dönemden beri saniye sayısını alarak ve bir insan okunabilir tarih içine dönüm olan sert sorun ve böylece örneğin bunu standart yolu vardır date -r SECONDSkabuğundan. Ama bu farklı bir problem.


3

Bu cevabın ilgili kısmının uyarlanması .

Çalışma süreniz bir yıldan az olduğu sürece aşağıdaki komutu kullanabilirsiniz:

TZ=UTC date -d@$(cut -d\  -f1 /proc/uptime) +'%j %T' | awk '{print $1-1"d",$2}'

En azından Linux'umda, toplam boşta kalma süresini içeren ikinci bir alan olduğundan, çalışma zamanı dosyasının ilk alanını çıkarırım. Bunu dönemden bu yana geçen saniye sayısı olarak görüyorum ve bunu yılın gününe, ardından da saat, dakika ve saniye cinsinden süreye dönüştürüyorum. Yılın günü bir gün başladığından beri, son awkçağrımda bir tane çıkarıyorum.


2
$ s=12345678
$ printf '%d:%02d:%02d:%02d\n' $((s/86400)) $((s/3600%24)) $((s/60%60)) $((s%60))
142:21:21:18

Dönemden bu yana geçen saniyeleri bir tarih ve saate dönüştürme:

$ gdate -d @1234567890 '+%F %T' # GNU date
2009-02-14 01:31:30
$ date -r 1234567890 '+%F %T' # BSD date
2009-02-14 01:31:30
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.