Получение даты и времени запуска системы в 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.
В Linux
ls -ld /proc
кажется, дает мне то, что мне нужно. Пост выше странный. /proc/uptime
не содержит значения даты - оно должно быть вычтено из текущего времени. Может быть, он имел в виду:
date -d @$(( $(date +%s) - $(cut -f1 -d. /proc/uptime) ))
Под Bash, без труб и прочих процессов; просто текст:
$ REPLY="$(</proc/uptime)"
$ REPLY="${REPLY%%.*}"
$ echo "$REPLY"
31207
(Просто повторно REPLY
переменная по умолчанию, но вы можете выбрать все, что вам нужно)
Это кажется надежным и даст вам в формате UTC и ISO8601. (Удалите два последних параметра, чтобы отключить их соответственно):
date -d "`cut -f1 -d. /proc/uptime` seconds ago" -u -Iseconds
Четко и кратко с командой 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
date -d @$(sed -n '/^btime /s///p' /proc/stat)
(еще один способ сделать это, который полезен в определенных обстоятельствах)
Команда:
(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