Мой компьютер говорит:
$ uptime
10:20:35 up 1:46, 3 users, load average: 0,03, 0,10, 0,13
И если я проверю, last
я увижу:
reboot system boot 3.19.0-51-generi Tue Apr 12 08:34 - 10:20 (01:45)
И тогда я проверяю:
$ ls -l /var/log/boot.log
-rw-r--r-- 1 root root 4734 Apr 12 08:34 boot.log
Тогда я вижу в /var/log/syslog
первой строке сегодняшнего дня:
Apr 12 08:34:39 PC... rsyslogd: [origin software="rsyslogd" swVersion="7.4.4" x-pid="820" x-info="http://www.rsyslog.com"] start
Так что, похоже, все сходится в 8:34
то время, когда моя машина загрузилась.
Однако мне интересно: какое точное время uptime
использует? Это uptime
процесс, который запускает и проверяет какой-то файл или это что-то на оборудовании?
Я использую Ubuntu 14.04.
linux
linux-kernel
uptime
fedorqui
источник
источник
systemd-analyze blame
также содержит время до инициализации ядра, по крайней мере, на UEFI.Ответы:
В моей системе он получает время безотказной работы
/proc/uptime
:Из справочной страницы proc :
Файловая система proc содержит набор псевдо-файлов. Это не настоящие файлы, они просто выглядят как файлы, но они содержат значения, которые предоставляются непосредственно ядром. Каждый раз, когда вы читаете файл, например
/proc/uptime
, его содержимое восстанавливается на лету. Файловая система proc - это интерфейс к ядру.В исходном коде ядра Linux
fs/proc/uptime.c
в строке 49 вы видите вызов функции:Это создает запись файловой системы proc, называемую
uptime
(procfs обычно монтируется под ней/proc
), и связывает с ней функцию, которая определяет допустимые файловые операции над этим псевдофайлом и функции, связанные с ними. В случае безотказной работы это как разread()
иopen()
операции. Однако, если вы проследите функции обратно, вы окажетесь здесь , где рассчитывается время безотказной работы.Внутренне, существует прерывание по таймеру, которое периодически обновляет время работы системы (помимо других значений). Интервал, в течение которого отсчитывается таймер-прерывание, определяется макросом препроцессора
HZ
, точное значение которого определяется в файле конфигурации ядра и применяется во время компиляции.Время простоя и количество циклов ЦП в сочетании с частотой
HZ
(циклов в секунду) можно рассчитать в количестве (секунд) с момента последней загрузки.Чтобы ответить на ваш вопрос: когда «uptime» начинает считать?
Поскольку uptime является внутренним значением ядра, которое увеличивается каждый цикл, он начинает считать, когда ядро инициализируется. То есть когда первый цикл закончился. Еще до того, как что-либо монтируется, непосредственно после того, как загрузчик дает контроль над образом ядра.
источник
Насколько я знаю,
uptime
использует/proc/uptime
для расчета работоспособности системы. Вы можете увидеть это более четко в исходном коде uptime.cисточник
/proc/uptime
вычисляется из времени безотказной работы.В стандартной системе UNIX (на основе оригинальных источников *)
uptime
читает/var/adm/utmpx
и проверяет последний раз записи перезагрузки.Другими словами: это извлекает дату, с которой вы также получаете,
who -b
а затем вычисляет время с тех пор.*)
uptime
является ссылкой наw
программу и была введена BSD в 1980 году.источник
/var/adm/utmpx
в моей системе. На самом деле даже нет/var/adm
w
реализация, все обстоит именно так, но Linux обычно делает вещи немного иначе.uptime
команду, не говоря уже о том, как она должна быть реализована. AFAICT, OS / X также не имеет / var / adm / utmpx. А некоторые системы на базе Linux получили сертификацию Unix-соответствия.