Linux'ta sistemin başlangıç ​​tarihini ve saatini alma


44

uptimeBir makinenin çalıştığı ve çalıştığı zamanı bastırdığını biliyorum , ancak başlangıç ​​tarihini elde etmenin bu çıktıdan geriye saymaktan daha kolay (güvenilir) bir yolu var mı?

Etrafa bakmaya çalıştım /procama alaka bir şey bulamadım. Benim de böyle bir çizgi var dmesg:

[    0.673492] rtc_cmos rtc_cmos: setting system clock to 2011-03-14 14:26:52 UTC (1300112812)

Ama bu yöntemin dağıtım ve çekirdek sürüm agnostik olup olmadığını merak ediyorum?


Nedir unreliable or hardhakkında uptime?
Bobby

2
@Bobby: Komut ya da işlevi hakkında hiçbir şey yok, ancak söylediğim gibi, son sistem açılışının tarihini ve saatini almak istiyorum, ne kadar zaman geçtiğinden değil. uptime"13 gün, 21:01" gibi bir dize döndürür ve bundan saymanız gerekir.
jho

4
Çalışma süresi değerinden geri saymak önemsizdir. İsterseniz güvenilir , istediğiniz /proc/uptime.
sam hocevar

Yanıtlar:


40

Burada bazı komutları buldum . who -bVeya deneyin last reboot | head -1.
whosayısal tarihler verirken last reboot, kısaltılmış gün / ay adlarını döndürür.


peki ya sadece tarihi ve başka hiçbir şeyi istemezsek?
T0xicCode

4
who -b | cut -d' ' -f13sadece tarihini verir (-f14 saatini döndürür)
charlesbridge

2
Uyarı: last rebootbana doğru tarihi vermedi! who -byaptı.
qwertzguy

last rebootbana da yanlış bir tarih verdi,
wtmp

23

Bu, çalışma zamanını çekirdekten sorgular ve yerel saat diliminde görüntüler:

date -d "`cut -f1 -d. /proc/uptime` seconds ago"

Diğer seçeneklere dikkat edin. lastKomut yakında kadar çalışmayı durdurur wtmpdöndürülmüş olmuştur. whoKomut kullanılabilirliği ve dürüstlüğüne bağlıdır utmp. Ve /proc/1yerine önyükleme süresi tarih geçerli tarih olabilir ve hatta bir sertleştirilmiş sistemde mevcut olabilir. Düzenleme : dmesgyalnızca sabit uzunlukta bir geri arabellek vardır, bu yüzden de uygun değil. Çekirdek günlükleri olabilir, /var/logancak çoğu dağıtım 8 haftada kalıyor.


1
İlginçtir ki, who -b210 günlük çalışma sistemime bir iki dakika kadar katılmıyorum . who -bBir zaman damgası rapor ediyor gibi gözüküyor , bu sayma, bir koşu tarafından periyodik olarak düzeltilse bile, saat kaymalarından bir şekilde etkileniyor ntpd.
Ruslan

3
Tüm alternatif cevapları inceledikten sonra, date -d "`cut -f1 -d. /proc/uptime` seconds ago" -u
şunlara

Olağanüstü cevap. Çekirdek bilmiyorsa, kimse bilmiyor - bu sistem için Hakikatin Kaynağı. Saniyeler, zaman hesaplamaları yapmayı kolaylaştırıyor (Buna son verdim ("Benim ev sahiplerimden hangileri son gün içinde yeniden başlamadı [86,400 saniye]?")
Mike S

17

Her aramada değişen açılıştan bu yana , tutarlı ve ayrılabilir bir açılış saati elde etmenin bir yolunu ararken bu soruya rastladım .

uptime -sÇoğu linux sistemde hile yapacak gibi görünüyor .


uptime -sçıktılar örn 2017-08-09 01:23:45. Bu en iyisidir, en basit haliyle. Bu komut "procps" paketine dahil edilmiştir.
teika kazura

uptimeCentOS 6 (içinde procps version 3.2.8) ne yazık ki, bunu desteklemek için görünmüyor.
mwfearnley

uptime -sher zaman sabit sonuçları döndürmez: superuser.com/q/1247713/71144
cweiske

1
Bunun her zaman yerel olduğunu unutmayın , ancak gerçekte saat dilimini / ofsetini yazdırmaz. Bu nedenle, bunu programlardan makineyle çekmek istiyorsanız, kullanım durumunuza bağlı olarak saat dilimlerini ayrı ayrı belirlemeniz gerekebileceğinden ideal değildir. Bu yüzden diğer cevaplardan bazılarını önerebilirim.
JJC,

11

Biraz alay ederken btimeçizgiyi buldum/proc/stat

cat /proc/stat | grep btime | awk '{ print $2 }'

ve hızlı bir aramadan sonra, bu sayfayı buldum: " Proc / stat ", " /proc/statdosyada mevcut olan çekirdek aktivitesi hakkında çeşitli bilgiler içerir ."

"Btime" satırı, Unix döneminden bu yana saniyeler içinde sistemin başlatıldığı zamanı verir.


1
Yazması çok daha kolay görünüyorawk '/btime/{print $2}' /proc/stat
William Pursell

@WilliamPursell en kolay her zaman zaten bildiğiniz şeydir. Ben garip sihirbaz değilim. : P
Oddstr13

İyi bir nokta. Ancak, kedi gratuitously kullandınız. Dosyadan sadece grep.
Mike S

@MikeS doğru - Bununla birlikte, cevabımdan 7 yıl sonra bile, bilginin nerede bulunduğunun net bir temsili olarak orijinal komuta zincirimin yanındayım.
Oddstr13

8
  • İyi : uptime -s, who -bya da ayrıştırma/proc/uptime
  • Kötü : ls -ld /proc/1ve çeşitleri.

Bunun için ls -ld / proc / 1 kullanmayın. Bazen s2disk veya s2ram'dan sonra güncellenir .

Benim durumumda who -bdedi ki:

sistem önyükleme 2 Mayıs 09:51

İken ls -ld /proc/1:

dr-xr-xr-x 7 kök kökü 0 May 3 13:09 / proc / 1

ls -ldiçin /procveya /sysçıkıldıktan sonra devam görünüyor, ama onun uygulama bağımlı ve bu yüzden bu tür yöntemleri kullanmayan, gelecekte değişebilir. Ve eğer sistem saatiniz UTC değil yerel ayardaysa, negatif kaymaları vardır.

(Henüz cevaplara yorum yapma yetkim yok, bu yüzden yeni bir cevap açtım. Üzgünüm.)

EDIT: uptime -silk önce bu cevapta mikegreiling tarafından cevaplandı


2

En basit yöntem / sbin / init'in ne zaman başladığını görmek (çekirdeğin yüklenmesinden sonra her zaman ilk başlatılan işlemdir):

# ls -ld /proc/1
dr-xr-xr-x 7 root root 0 2011-03-27 23:54 /proc/1

Böylece, makinemin 27 Mart 2011'de gece yarısına kadar 6 dakika içinde başladığını görebiliyorum.

statKomut dosyasında kullanmak istiyorsanız, bunun yerine komutu kullanabilirsiniz :

# stat --printf='%Y' /proc/1
1301266491

Dizinin %Yson değiştirilme zamanını (işlem oluşturma zamanı), çağdan (1/1/70) sonra saniye cinsinden belirtir ve standart bir unix zaman damgasıdır.


1
Ne yazık ki bu işe yaramıyor: Bu klasörlerdeki çalışma zamanı başka nedenlerle değişebilir (burada 5 günlük çalışma süresi olan bir sistemim var / / proc / 1'in çalışma süresi 25 dakika önce)
kdt

1
O var güvenilir değildir açıklandığı gibi, benim cevap
Teika Kazura

1

Linux'ta

ls -ld /proc

Bana ihtiyacım olanı veriyor gibi görünüyor. Yukarıdaki yazı garip. /proc/uptimeBir tarih değeri içermez - geçerli saatten çıkarılmalıdır. Belki de demek istedi:

date -d @$(( $(date +%s) - $(cut -f1 -d. /proc/uptime) ))

uptime -sbir tarih değeri sağlar
mikegreiling

1

Bash altında, borular ve başka işlemler olmadan; sadece metin:

$ REPLY="$(</proc/uptime)"
$ REPLY="${REPLY%%.*}"
$ echo "$REPLY"
31207

(Yalnızca REPLYvarsayılan değişkeni yeniden kullandım , ancak ihtiyacınız olanı seçebilirsiniz)


Tabii neden olmasın? Değişken zarafetin biraz zekice kullanılması. Güzel. +1. Fikir için teşekkürler!
Mike S

1

Bu sağlam görünüyor ve size UTC ve ISO8601 formatında veriyor. (Sırasıyla devre dışı bırakmak için son iki seçeneği kaldırın):

date -d "`cut -f1 -d. /proc/uptime` seconds ago" -u -Iseconds

0
date -d @$(sed -n '/^btime /s///p' /proc/stat)

(bunu yapmanın başka bir yolu, bazı durumlarda yararlıdır)


0

Komut:

(echo ' Currently:' | tr "\n" ' ' ; date +"%Y-%m-%d %k:%M:%S" ; echo '  Up Since:' | tr '\n' ' ' ; uptime -s ; echo '  Duration:' | tr '\n' ' ' ; uptime -p)

Çıktı:

 Currently: 2016-05-09  9:06:29
  Up Since: 2016-05-04 12:56:04
  Duration: up 4 days, 20 hours, 10 minutes

0

Tuptime komutuyla anlaşılır ve net :

# tuptime -t
No.             Startup Date                                          Uptime            Shutdown Date   End                    Downtime

1     09:43:39 AM 08/08/2017      41 days, 0 hours, 51 minutes and 2 seconds   10:34:41 AM 09/18/2017    OK                  10 seconds
2     10:34:51 AM 09/18/2017                         1 minute and 16 seconds   10:36:07 AM 09/18/2017    OK                    1 second
3     10:36:08 AM 09/18/2017                       13 minutes and 20 seconds   10:49:28 AM 09/18/2017    OK                   3 seconds
4     10:49:31 AM 09/18/2017       45 days, 0 hours, 1 minute and 20 seconds   09:50:51 AM 11/02/2017    OK                   4 seconds
5     09:50:55 AM 11/02/2017                       27 minutes and 25 seconds   10:18:20 AM 11/02/2017    OK                   4 seconds
6     10:18:24 AM 11/02/2017                                       9 seconds   10:18:33 AM 11/02/2017    OK                   9 seconds
7     10:18:42 AM 11/02/2017      4 days, 5 hours, 41 minutes and 47 seconds   04:00:29 PM 11/06/2017    OK                  44 seconds
8     04:01:13 PM 11/06/2017    15 days, 17 hours, 33 minutes and 48 seconds   09:35:01 AM 11/22/2017   BAD   10 minutes and 40 seconds
9     09:45:41 AM 11/22/2017               8 hours, 9 minutes and 20 seconds   05:55:01 PM 11/22/2017   BAD     7 minutes and 8 seconds
10    06:02:09 PM 11/22/2017                1 hour, 7 minutes and 54 seconds   07:10:03 PM 11/22/2017   BAD   11 minutes and 30 seconds
11    07:21:33 PM 11/22/2017               1 hour, 58 minutes and 32 seconds   09:20:05 PM 11/22/2017    OK                   5 seconds
12    09:20:10 PM 11/22/2017                       14 minutes and 52 seconds   09:35:02 PM 11/22/2017   BAD    5 minutes and 52 seconds
13    09:40:54 PM 11/22/2017                         4 minutes and 6 seconds   09:45:00 PM 11/22/2017   BAD    4 minutes and 51 seconds
14    09:49:51 PM 11/22/2017             11 hours, 15 minutes and 10 seconds   09:05:01 AM 11/23/2017   BAD    7 minutes and 20 seconds
15    09:12:21 AM 11/23/2017      3 days, 2 hours, 17 minutes and 40 seconds   11:30:01 AM 11/26/2017   BAD   27 minutes and 44 seconds
16    11:57:45 AM 11/26/2017   109 days, 19 hours, 12 minutes and 37 seconds   07:10:22 AM 03/16/2018    OK                  17 seconds
17    07:10:39 AM 03/16/2018     25 days, 3 hours, 55 minutes and 59 seconds   12:06:38 PM 04/10/2018    OK                   3 seconds
18    12:06:41 PM 04/10/2018      8 days, 19 hours, 3 minutes and 20 seconds   07:10:01 AM 04/19/2018   BAD    3 minutes and 52 seconds
19    07:13:53 AM 04/19/2018     77 days, 9 hours, 44 minutes and 39 seconds
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.