लिनक्स में सिस्टम स्टार्टअप की तारीख और समय प्राप्त करना


44

मुझे पता है कि uptimeएक मशीन के उठने और चलने के समय को प्रिंट करता है, लेकिन क्या इस आउटपुट से नीचे की गिनती की तुलना में स्टार्ट की तारीख प्राप्त करने का एक आसान (विश्वसनीय) तरीका है?

मैं चारों ओर देखने की कोशिश की /proc, लेकिन प्रासंगिकता के कुछ भी नहीं मिला। वहाँ भी इस तरह एक लाइन है मेरे पर dmesg:

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

लेकिन मैं सोच रहा हूँ कि क्या यह विधि वितरण और कर्नेल संस्करण अज्ञेयवादी है?


किस unreliable or hardबारे में है uptime?
बॉबी

2
@ बॉबी: प्रति कमांड या उसके फंक्शन के बारे में कुछ भी नहीं, लेकिन जैसा कि मैंने कहा कि मैं अंतिम सिस्टम बूट की तारीख और समय प्राप्त करना चाहता हूं, न कि यह कब से है। uptime"13 दिन, 21:01" जैसी स्ट्रिंग देता है, और आपको इसे उसी से गिनना होगा।
झो

4
यह अपटाइम मूल्य से वापस गिनने के लिए तुच्छ है। यदि आप विश्वसनीय चाहते हैं , तो आप चाहते हैं /proc/uptime
सैम होसेवर

जवाबों:


40

मुझे यहां कुछ कमांड मिले । कोशिश करो who -bया last reboot | head -1
whoसंख्यात्मक तिथियां देता है, जबकि last rebootसंक्षिप्त दिन / महीने के नाम देता है।


कैसे के बारे में अगर हम केवल तारीख चाहते हैं और कुछ नहीं?
T0xicCode

4
who -b | cut -d' ' -f13रिटर्न डेट केवल (-f14 रिटर्न टाइम)
charlesbridge

2
चेतावनी: last rebootमुझे सही तारीख नहीं दी गई! who -bकिया था।
qwertzguy

last rebootमुझे एक गलत तारीख भी दे दी, ऐसा लगता है कि wtmp को महीने के पहले दिन में घुमाया गया था
गोलिमार

23

यह कर्नेल से अपटाइम पर सवाल उठाता है और इसे स्थानीय समय क्षेत्र में प्रदर्शित करता है:

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

अन्य विकल्पों के बारे में सावधान रहें। lastआदेश काम कर जैसे ही बंद हो जाएगा wtmpघुमाया गया है। whoआदेश की उपलब्धता और की अखंडता पर निर्भर करता है utmp। और /proc/1बूट समय की तारीख के बजाय वर्तमान तिथि हो सकती है, और यहां तक ​​कि एक कठोर सिस्टम पर अनुपलब्ध हो सकता है। संपादित करें : dmesgकेवल एक निश्चित-लंबाई बैक बफर है, इसलिए यह अवास्तविक है, भी। कर्नेल लॉग हो सकते हैं, /var/logलेकिन अधिकांश वितरण केवल 8 सप्ताह तक ही रहते हैं।


1
दिलचस्प है, यह who -bमेरे 210-दिनों के अपटाइम सिस्टम पर एक या दो मिनट से असहमत है। ऐसा लगता है कि who -bरिपोर्ट समय की मोहर है, जबकि यह गिनती किसी तरह घड़ी की बूंदों से प्रभावित होती है, भले ही ये समय-समय पर एक रनिंग द्वारा सही हो ntpd
रुसलान

3
सभी वैकल्पिक उत्तरों की समीक्षा करने के बाद, निपटारा: date -d "`cut -f1 -d. /proc/uptime` seconds ago" -u(UTC में समय / तारीख)
david6

घटना का उत्तर। यदि कर्नेल को पता नहीं है, तो कोई नहीं जानता- यह सिस्टम के लिए सत्य का स्रोत है। सेकंड के लिए समय की गणना करना आसान हो जाता है (मैंने इस पर ठोकर खाई क्योंकि मैं जानना चाहता हूं कि "मेरे कौन से मेजबान ने आखिरी दिन [86,400 सेकंड]?" के भीतर रिबूट नहीं किया?)
माइक एस

17

मैं इस सवाल पर अड़ गया, जबकि एक सुसंगत, पारगम्य बूट समय प्राप्त करने का मार्ग खोज रहा था , जैसा कि बूट के बाद से समय-समय पर किया जाता है जो हर कॉल पर बदलता है।

ऐसा प्रतीत होता है कि uptime -sअधिकांश लिनक्स सिस्टम पर चाल चलेगी।


uptime -sउदाहरण के लिए आउटपुट 2017-08-09 01:23:45। यह सबसे अच्छा है, सबसे सरल होकर। यह कमांड पैकेज "प्राप्स" में शामिल है।
तैका काज़ुरा

uptimeCentOS 6 (में procps version 3.2.8) दुर्भाग्य से इसमें सहायता के लिए प्रतीत नहीं होता।
mwfearnley

uptime -sहमेशा लगातार परिणाम वापस नहीं करता है: superuser.com/q/1247713/71144
cweiske

1
ध्यान दें कि यह हमेशा स्थानीय समय में होता है , लेकिन यह वास्तव में टाइमज़ोन / ऑफसेट प्रिंट नहीं करता है। इसलिए, यदि आप इसे मशीनों से प्रोग्रामेटिक रूप से खींचना चाहते हैं, तो यह आदर्श नहीं है, क्योंकि आपको अपने उपयोग के मामले के आधार पर अलग-अलग समय-सीमा निर्धारित करने की आवश्यकता हो सकती है। तो, मैं कुछ अन्य उत्तर सुझाता हूँ।
जेजेसी

11

जब मैं थोड़ा घूमता हूं तो मुझे यह btimeरेखा मिली/proc/stat

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

और एक त्वरित खोज के बाद, मुझे यह पृष्ठ मिला: / proc / stat समझाया गया , जो "कर्नेल गतिविधि के बारे में जानकारी के विभिन्न टुकड़े जो /proc/statफ़ाइल में उपलब्ध हैं, को रेखांकित करता है ।"

"Btime" लाइन उस समय को देता है जिस पर सिस्टम बूट हुआ, यूनिक्स युग के बाद से सेकंड में।


1
लिखने में बहुत आसान लगता हैawk '/btime/{print $2}' /proc/stat
विलियम पर्सेल

@WilliamPursell सबसे आसान हमेशा वही होता है जो आप पहले से जानते हैं। मैं कोई अजीब जादूगर नहीं हूं। : पी
Oddstr13

अच्छी बात। हालाँकि, आपने बिल्ली का कृतज्ञतापूर्वक उपयोग किया। बस फ़ाइल से grep।
माइक एस

@ माइक सही है - हालाँकि, मैं अभी भी अपनी मूल कमांड श्रंखला के साथ एक स्पष्ट प्रतिनिधित्व के रूप में खड़ा हूँ जहाँ जानकारी मिली है, यहाँ तक कि मेरे उत्तर के 7 साल बाद भी।
Oddstr13

8
  • अच्छा : uptime -s, who -bया पार्स/proc/uptime
  • बुरा : ls -ld /proc/1और वेरिएंट।

इस उद्देश्य के लिए ls -ld / proc / 1 का उपयोग न करें। इसे कभी-कभी s2disk या s2ram के बाद अपडेट किया जाता है।

मेरे मामले में, who -bने कहा:

सिस्टम बूट 2 मई 09:51

जबकि ls -ld /proc/1:

dr-xr-xr-x 7 रूट रूट 0 मई 3 13:09 / proc / 1

ls -ldके लिए /procया /sysफिर से शुरू होने के बाद बनी रहती है, लेकिन यह कार्यान्वयन पर निर्भर है, और भविष्य में बदल सकता है, इसलिए इस तरह के तरीकों का उपयोग न करें। और अगर आपके सिस्टम की घड़ी स्थानीय समय में है , यूटीसी की नहीं , तो उनके पास नकारात्मक ऑफसेट है।

(मेरे पास अभी तक जवाब देने के लिए टिप्पणी करने का विशेषाधिकार नहीं है, इसलिए एक नया उत्तर खोला। क्षमा करें।)

EDIT: uptime -sपहली बार इस जवाब में mikegreiling द्वारा जवाब दिया गया था


2

यह देखने के लिए सबसे सरल तरीका है कि कब / sbin / init शुरू हुआ (यह हमेशा kh load होने के बाद शुरू होने वाली पहली प्रक्रिया है:

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

इसलिए मैं देख सकता हूं कि मेरी मशीन 27 मार्च 2011 की मध्यरात्रि में 6 मिनट तक चली।

यदि आप इसे स्क्रिप्टिंग में उपयोग करना चाहते हैं तो आप statइसके बजाय कमांड का उपयोग कर सकते हैं :

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

%Yयुग (1/1/70) के बाद से निर्दिष्ट समय के बाद से निर्देशिका पिछले बदल गया था (प्रक्रिया निर्माण के समय) सेकंड में और एक मानक यूनिक्स टाइमस्टैम्प है।


1
दुर्भाग्य से यह काम नहीं करता है: उन फ़ोल्डरों पर माइम अन्य कारणों से बदल सकता है (मेरे पास यहां एक सिस्टम है जिसमें 5 दिन का अपटाइम है और / proc / 1 का
माइम

1
यह विश्वसनीय नहीं है , जैसा कि मेरे उत्तर
तैका काज़ुरा

1

लिनक्स में,

ls -ld /proc

मुझे वह देने की आवश्यकता है जो मुझे चाहिए। ऊपर का पद विषम है। /proc/uptimeदिनांक मान नहीं है - इसे वर्तमान समय से घटाया जाना होगा। शायद उसका मतलब था:

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

uptime -sएक तिथि मान प्रदान करता है
mikegreiling

1

बैश के तहत, बिना पाइप या अन्य प्रक्रियाओं के बिना; बस पाठ:

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

(बस REPLYडिफ़ॉल्ट चर का पुन: उपयोग किया जाता है, लेकिन आप जो चाहें चुन सकते हैं)


जरूर, क्यों नहीं? चर प्रतिस्थापन के लिए किण्डा चतुर प्रयोग। ठंडा। +1। विचार के लिए धन्यवाद!
माइक एस

1

यह मजबूत प्रतीत होता है और यह आपको UTC और ISO8601 प्रारूप में देगा। (क्रमशः या तो निष्क्रिय करने के लिए अंतिम दो विकल्प निकालें):

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

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

(ऐसा करने का एक और तरीका, जो कुछ परिस्थितियों में उपयोगी है)


0

कमान:

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

आउटपुट:

 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 आदेश:

# 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
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.