Read Linux Uptime and Load Without Guesswork
You will finish with a small, reliable routine for checking when a Linux system booted, how long it has been running, how many users are logged in, and whether its recent load is worth investigating. The examples use uptime from procps-ng 4.0.4, installed here as package version 2:4.0.4-4ubuntu3.3.
The route
Jump straight to the step you need, or tick off Done means at the end.
Allow about five minutes. You need a shell and permission to run ordinary read-only commands. None of the checks in this guide needs sudo, and none changes services, processes or configuration.
1. Check the installed command
Start by confirming which executable your shell will run and which package supplied it:
$ command -v uptime
/usr/bin/uptime
$ uptime --version
uptime from procps-ng 4.0.4
$ dpkg-query -W -f='${Package} ${Version}\n' procps
procps 2:4.0.4-4ubuntu3.3
The package version is distribution-specific. If your output differs, use your installed command's help and manual as the final authority for option spelling and output wording.
Checkpoint
You have verified the command rather than assuming that a similarly named script or alias is being used.
2. Read the one-line status
Run uptime with no options:
$ uptime
17:18:16 up 16 days, 1:19, 3 users, load average: 1.68, 1.84, 2.47
The line contains four kinds of information. The first value is the current time. The up field is the running time since boot. The users field comes from /var/run/utmp, so it describes recorded login sessions rather than the number of human beings currently looking at the machine. The three load values cover the previous 1, 5 and 15 minutes, in that order.
Do not read load average as a percentage. It is an average count of processes that were runnable or waiting in uninterruptible I/O. A value of 1 means sustained demand equivalent to one busy CPU. On a four-CPU machine, the same value can mean that roughly three CPUs were idle over that period. The manual's load figures are not divided by the number of CPUs.
That makes CPU count part of the interpretation, not part of the uptime command itself:
$ nproc
4
Compare the load with the number of available CPUs and look at the trend. A 15-minute value higher than the 1-minute value suggests that pressure may be easing. The reverse suggests that demand has recently increased. This is a screening check, not a diagnosis: a high load can involve CPU work, disk waits or another form of uninterruptible I/O.
3. Show a human-readable duration
Use --pretty, or its short form -p, when you want the uptime field separated into named units:
$ uptime --pretty
up 2 weeks, 2 days, 1 hour, 19 minutes
This format is easier to scan in a terminal, but it intentionally leaves out the current time, user count and load averages. It is therefore a presentation option, not a fuller health check. Use the plain command when you need the complete one-line status.
A common distraction trap is comparing a pretty duration with an old copy of the one-line output. The machine may have crossed a minute boundary between commands. If the exact values matter, capture one command's output and record the time at which you collected it.
4. Find the last boot time
Use --since, or -s, when the question is "when did this system start?" rather than "how long has it been running?":
$ uptime --since
2026-09-11 15:58:36
The documented format is yyyy-mm-dd HH:MM:SS. It is useful in incident notes because it is less ambiguous than a duration, especially when several machines are being compared. The displayed time follows the system's local time settings. Do not treat it as a proof that every service started at that instant: boot work can continue after the kernel start, and services can restart independently.
Checkpoint
Use --since for a boot timestamp, --pretty for a quick duration, and no option when you need all four headline fields.
5. Use help and version checks in scripts
--help prints the installed option list and exits. --version, or -V, prints version information and exits:
$ uptime --help
Usage:
uptime [options]
Options:
-p, --pretty show uptime in pretty format
-h, --help display this help and exit
-s, --since system up since
-V, --version output version information and exit
For a script, prefer an explicit option and parse a stable machine-readable source if you need exact fields. The ordinary display is designed for people and includes spacing, words and punctuation that can vary between procps releases. If you only need to alert on a threshold, consider whether a dedicated monitoring metric is a better interface than scraping terminal text.
Keep command substitution and quoting simple when logging a check:
$ log_line=$(uptime)
$ printf '%s\n' "$log_line"
17:18:16 up 16 days, 1:19, 3 users, load average: 1.68, 1.84, 2.47
This stores the output in a shell variable and prints it unchanged. It does not make the output more parseable, and it does not freeze the values for a later comparison.
6. Investigate a surprising result safely
If the user count looks wrong, remember that uptime reads the utmp database. Check the underlying login view with a separate command such as who, and account for terminals, remote sessions and stale records before drawing a conclusion.
If load is high, take another reading after a short interval and compare all three averages. Then inspect processes with tools such as top or ps. A high load with modest CPU use can point towards I/O waits, which is why killing a process immediately is a poor first response. These follow-up commands are observations; they do not require elevated privileges in the usual case.
If uptime reports that it cannot read /proc, check whether the proc filesystem is mounted and whether the environment is a restricted container or rescue system. The command relies on procfs for process information. If the user count is unavailable, check whether the system exposes /var/run/utmp. Do not create or edit either file merely to make the display look complete.
There is no undo step because every example here is read-only. If you are collecting diagnostics from a production host, avoid putting sensitive hostnames, usernames or output into a public ticket without reviewing the captured text first.
Done means
- You confirmed the installed
uptimebinary and procps-ng version. - You can read the current time, running time, utmp user count and 1, 5 and 15 minute load averages.
- You checked CPU count before judging whether a load value is high.
- You know when to use
--prettyand--since. - You can investigate odd values without editing procfs, utmp or service configuration.