Я знаю, что 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
?uptime
возвращает строку типа «до 13 дней, 21:01», и вам нужно посчитать ее из этого./proc/uptime
.Ответы:
Я нашел несколько команд здесь . Попробуйте
who -b
илиlast reboot | head -1
.who
дает числовые даты, аlast reboot
возвращает сокращенные названия дней / месяцев.источник
who -b | cut -d' ' -f13
возвращается только дата (-f14 время возврата)last reboot
не дал мне правильную дату!who -b
сделал.last reboot
дал мне неправильную дату, wtmp, похоже, был повернут в первый день месяцаЭто запрашивает время безотказной работы ядра и отображает его в местном часовом поясе:
Будьте осторожны с другими вариантами. Команда
last
перестанет работать, как толькоwtmp
будет повернут. Командаwho
зависит от доступности и целостностиutmp
. И/proc/1
может иметь текущую дату вместо даты времени загрузки, и даже может быть недоступен в защищенной системе. Редактировать :dmesg
имеет только задний буфер фиксированной длины, так что это тоже нереально. Журналы ядра могут быть,/var/log
но большинство дистрибутивов хранят их только 8 недель.источник
who -b
минутой или двумя в моей системе с 210-дневным временем безотказной работы. Похоже,who -b
сообщает отметку времени, в то время как на этот подсчет как-то влияют смещения часов, даже если они периодически корректируются бегомntpd
.date -d "`cut -f1 -d. /proc/uptime` seconds ago" -u
(который имеет время / дату в UTC)Я наткнулся на этот вопрос, когда искал способ получить согласованное, разбираемое время загрузки , а не время после загрузки, которое меняется при каждом вызове.
Похоже, что
uptime -s
добьется цели в большинстве систем Linux.источник
uptime -s
выходы напр2017-08-09 01:23:45
. Это лучше всего, будучи самым простым. Эта команда входит в пакет «procps».uptime
в CentOS 6 (procps version 3.2.8
) это не поддерживается.uptime -s
не всегда возвращает постоянные результаты: superuser.com/q/1247713/71144Я нашел
btime
линию,/proc/stat
когда немного ковыряюсьи после быстрого поиска я нашел эту страницу: / proc / stat объяснена , которая обрисовывает в общих чертах "Различные части информации о деятельности ядра, которые доступны в
/proc/stat
файле".источник
awk '/btime/{print $2}' /proc/stat
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 , они имеют отрицательное смещение.(У меня пока нет права комментировать ответы, поэтому открыл новый ответ. Извините.)
EDIT:
uptime -s
сначала ответил на этот ответ на mikegreilingисточник
Самый простой способ - посмотреть, когда был запущен / sbin / init (это всегда первый процесс, запускаемый после загрузки ядра):
Итак, я вижу, что моя машина загрузилась в 6 минут до полуночи 27 марта 2011 года.
Если вы хотите использовать его в сценариях, вы можете использовать
stat
команду вместо:В
%Y
Определяет время , поскольку каталог последнего изменения (время создания процесса) в секундах с начала эпохи (1/1/70) и является стандартным Отметка времени Unix.источник
В Linux
кажется, дает мне то, что мне нужно. Пост выше странный.
/proc/uptime
не содержит значения даты - оно должно быть вычтено из текущего времени. Может быть, он имел в виду:источник
uptime -s
предоставляет значение датыПод Bash, без труб и прочих процессов; просто текст:
(Просто повторно использовали
REPLY
переменную по умолчанию, но вы можете выбрать все, что вам нужно)источник
Это кажется надежным и даст вам в формате UTC и ISO8601. (Удалите два последних параметра, чтобы отключить их соответственно):
источник
(еще один способ сделать это, который полезен в определенных обстоятельствах)
источник
Команда:
Выход:
источник
Четко и кратко с командой tuptime :
источник