Super User is a question and answer site for computer enthusiasts and power users. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

I know that uptime prints the time a machine has been up and running, but is there an easier (reliable) way to get the date of the start up than counting down from this output?

I tried looking around /proc, but didn't find anything of relevance. There's also a line like this on my dmesg: [ 0.673492] rtc_cmos rtc_cmos: setting system clock to 2011-03-14 14:26:52 UTC (1300112812), but I'm wondering if this method is distribution and kernel version agnostic.

share|improve this question
What's unreliable or hard about uptime? – Bobby Mar 28 '11 at 11:25
@Bobby: Nothing about the command or its function per se, but as said I want to get the date and time of last system boot, not how long it's been up since. uptime returns a string like "up 13 days, 21:01", and you'd need to count it from that. – jho Mar 28 '11 at 11:29
It's trivial to count back from the uptime value. If you want reliable, you want /proc/uptime. – sam hocevar Mar 28 '11 at 14:29
up vote 25 down vote accepted

I found some commands here. Try who -b or last reboot | head -1.
who gives numeric dates, while last reboot returns abbreviated day / month names.

share|improve this answer
how about if we only want the date and nothing else? – T0xicCode May 8 '12 at 3:00
who -b | cut -d' ' -f13 returns date only (-f14 returns time) – charlesbridge May 8 '12 at 11:15
Warning: last reboot did not give me the correct date ! who -b did. – qwertzguy Sep 18 '13 at 18:08
last reboot gave me an incorrect date too, wtmp seemed to have been rotated first day of the month – golimar Feb 17 '15 at 15:54

This queries the uptime from the kernel and displays it in the local timezone:

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

Be careful about other options. The last command will stop working as soon as wtmp has been rotated. The who command depends on the availability and integrity of utmp. And /proc/1 might have the current date instead of the boot time date, and could even be unavailable on a hardened system. Edit: dmesg only has a fixed-length back buffer, so it is unrealiable, too. The kernel logs may be in /var/log but most distributions only keep 8 weeks of them.

share|improve this answer
Interestingly, this disagrees with who -b by a minute or two on my 210-days-uptime system. Looks like who -b reports a time stamp, while this counting is somehow affected by clock drifts, even if these are periodically corrected by a running ntpd. – Ruslan Aug 27 '14 at 9:11
After reviewing all the alternate answers, settled on: date -d "`cut -f1 -d. /proc/uptime` seconds ago" -u (which has time/date in UTC) – david6 Jan 14 at 22:32
  • good: who -b or parsing /proc/uptime
  • bad: ls -ld /proc/1 and variants.

Don't use ls -ld /proc/1 for this purpose. It's sometimes updated after s2disk or s2ram.

In my case, who -b said:

system boot May 2 09:51

While ls -ld /proc/1:

dr-xr-xr-x 7 root root 0 May 3 13:09 /proc/1

ls -ld for /proc or /sys seem to persist after resuming, but it's implementation dependent, and may change in future, so don't use such methods. And if your system clock is in localtime, not UTC, they have negative offset.

(I don't have the privilege to comment to answers yet, so opened a new answer. Sorry.)

share|improve this answer

I stumbled on this question while looking for a way to get a consistent, parseable boot time, as opposed to time since boot which changes on every call.

It appears that uptime -s will do the trick on most linux systems.

share|improve this answer

I found the btime line in /proc/stat when poking around a bit

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

and after a quick search, I found this page: /proc/stat explained, which outlines the "Various pieces of information about kernel activity that are available in the /proc/stat file."

The "btime" line gives the time at which the system booted, in seconds since the Unix epoch.

share|improve this answer

The simplest way is to look to see when /sbin/init started (that's always the first process to be started after the kernel loads):

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

So I can see that my machine booted up at 6 minutes to midnight on the 27th of March 2011.

If you want to use it in scripting you can use the stat command instead:

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

The %Y specifies the time since the directory was last changed (process creation time) in seconds since the epoch (1/1/70) and is a standard unix timestamp.

share|improve this answer
Unfortunately this doesn't work: the mtime on those folders can change for other reasons (I have a system here that has a 5 day uptime and the mtime of /proc/1 is 25 minutes ago) – kdt Dec 18 '12 at 13:10
It's not reliable, as explained in my answer – teika kazura Feb 13 '15 at 5:46

In Linux,

ls -ld /proc

seems to give me what I need. The post above is odd. /proc/uptime does not contain a date value – it would have to be subtracted from the current time. Maybe he meant:

date -d @$(( $(date +%s) - $(cut -f1 -d. /proc/uptime) ))
share|improve this answer
uptime -s provides a date value – mikegreiling Nov 1 '14 at 20:56
date -d @$(sed -n '/^btime /s///p' /proc/stat)

(yet another way to do this, which is useful in certain circumstances)

share|improve this answer


(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
share|improve this answer

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .