Как надежно получить метку времени в который загруженная система?

Вы хотите [^[:alnum:]], нет [[:^alnum:]]. [:alnum:] упоминаемый класс символов POSIX. Скобки, окружающие скобки того класса символов, являются объемом, в котором Вы хотите быть.

12
30.10.2014, 16:22
4 ответа

Во-первых, crtime - это хитрость в Linux. Тем не менее, запуск чего-то вроде

$ stat -c %z /proc/ 
2014-10-30 14:00:03.012000000 +0100

или

$ stat -c %Z /proc/ 
1414674003

, вероятно, именно то, что вам нужно. Файловая система /proc определяется стандартом LFS и должна быть как для любой системы Linux, так и для большинства (всех?) UNIXen.

В качестве альтернативы, предполагая, что на самом деле вам не нужна точность в секундах, а только нужна корректная метка времени, вы можете использовать who:

$ who -b
   system boot  2014-10-30 14:00

Из man who: -b, --boot время последней загрузки системы

Вы можете преобразовать это в секунды после эпохи, используя GNU дата:

$ date -d "$(who -b | awk '{print $4,$3}' | tr - / )" +%s
1414674000
12
27.01.2020, 19:56

Другим решением является /proc/statbtime[1] :

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

Пример вывода:

1583547431

Это секунды -с метки времени эпохи -.

[1] http://man7.org/linux/man-pages/man5/proc.5.html

2
07.03.2020, 01:29

В macOS /procнедоступен, а /devесть. Вот еще несколько вариантов:

$ who -b
reboot   ~        Dec 17 18:45
$ stat -f %m /dev
1608227137

, где -f %mпоказывает время последнего изменения в формате «strftime (3 )».

$ stat -F /dev   
dr-xr-xr-x 3 root wheel 4606 Dec 17 18:45:37 2020 /dev/

Если инструменты GNU были установлены (через Homebrew ), они также доступны:

$ gwho -b
         system boot  2020-12-17 18:45
$ gstat -c %Y /dev
1608227137

, где -c %Yуказывает на отображение «времени последней модификации данных в секундах с начала эпохи».

$ gstat -c %y /dev
2020-12-17 18:45:37.000000000 +0100

%yчеловекочитаемый вместо этого.

1
09.02.2021, 08:25

Приведенные выше решения работают только на компьютерах с RTC. На Raspberry Pi и других встроенных системах без RTC эталонная временная метка системы будет установлена ​​на 0 при создании структуры системного каталога. Поскольку здесь речь идет о Linux, прочтите информацию из /proc/uptime

.
cat /proc/uptime | awk '{ print $1 }'
1
23.04.2021, 20:03

Теги

Похожие вопросы