Получение даты и времени запуска системы в Linux

Я знаю это uptime печатает время, когда машина была запущена и работает, но есть ли более простой (надежный) способ получения даты запуска, чем обратный отсчет с этого вывода?

Я пытался осмотреться /proc, но не нашел ничего актуального. Есть также такая линия на моем dmesg:

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

Но мне интересно, является ли этот метод независимым от распространения и версии ядра?

12 ответов

Решение

Я нашел несколько команд здесь. Пытаться who -b или же last reboot | head -1,
who дает числовые даты, в то время как last reboot возвращает сокращенные названия дня / месяца.

Это запрашивает время безотказной работы ядра и отображает его в местном часовом поясе:

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

Будьте осторожны с другими вариантами. last команда перестанет работать, как только wtmp был повернут. who Команда зависит от доступности и целостности utmp, А также /proc/1 может иметь текущую дату вместо даты времени загрузки и даже может быть недоступна в защищенной системе. Редактировать: dmesg имеет только задний буфер фиксированной длины, так что это тоже нереально. Журналы ядра могут быть в /var/log но большинство дистрибутивов хранят их только 8 недель.

Я наткнулся на этот вопрос, когда искал способ получить согласованное, разбираемое время загрузки, а не время после загрузки, которое меняется при каждом вызове.

Похоже, что uptime -s сделает трюк на большинстве систем Linux.

Я нашел btime линия в /proc/stat когда немного ковыряешься

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

и после быстрого поиска я нашел эту страницу: / proc / stat объяснена, которая обрисовывает в общих чертах "Различные части информации о деятельности ядра, которые доступны в/proc/stat файл."

Строка "btime" показывает время загрузки системы в секундах с начала эпохи Unix.

  • хорошо: 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 root root 0 мая 3 13:09 /proc/1

ls -ld за /proc или же /sys кажется, сохраняется после возобновления, но это зависит от реализации, и может измениться в будущем, поэтому не используйте такие методы. И если ваши системные часы имеют местное время, а не UTC, они имеют отрицательное смещение.

(У меня пока нет права комментировать ответы, поэтому открыл новый ответ. Извините.)

РЕДАКТИРОВАТЬ: uptime -s был первым ответом в этом ответе mikegreiling

Самый простой способ - посмотреть, когда был запущен /sbin/init (это всегда первый процесс, запускаемый после загрузки ядра):

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

Итак, я вижу, что моя машина загрузилась в 6 минут до полуночи 27 марта 2011 года.

Если вы хотите использовать его в сценариях, вы можете использовать stat команда вместо:

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

%Y указывает время с момента последнего изменения каталога (время создания процесса) в секундах с начала эпохи (1/1/70) и является стандартной меткой времени Unix.

Это кажется надежным и даст вам в формате UTC и ISO8601. (Удалите два последних параметра, чтобы отключить их соответственно):

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

Под Bash, без труб и прочих процессов; просто текст:

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

(Просто повторно REPLY переменная по умолчанию, но вы можете выбрать все, что вам нужно)

В Linux

ls -ld /proc

кажется, дает мне то, что мне нужно. Пост выше странный. /proc/uptime не содержит значения даты - оно должно быть вычтено из текущего времени. Может быть, он имел в виду:

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

Четко и кратко с командой 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

Команда:

(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
date -d @$(sed -n '/^btime /s///p' /proc/stat)

(еще один способ сделать это, который полезен в определенных обстоятельствах)

Другие вопросы по тегам