Мне нужен список периодов времени, когда я использовал свой MacBook за последние 30 дней.
Было бы достаточно иметь список всех дат открытия и закрытия крышки (потому что я закрываю крышку всякий раз, когда не использую MacBook). Также поможет хронологический список всех дат сна / пробуждения / выключения / включения (и, возможно, входа в систему).
Что не помогло:
last
_/var/log/system.log
(которая, кстати, содержит только один день)Если достаточно иметь список всех циклов сна/бодрствования (крышка открыта, крышка закрыта), вы можете запустить:
pmset -g log | grep ' Wake '
или
pmset -g log | grep ' sleep '
Поэкспериментируйте со строкой, переданной в grep, чтобы получить необходимую информацию.
pmset -g log | grep 'Display is turned on'
.pmset -g log | grep -E 'Wake from|Entering Sleep'
Я немного рассмотрел это, и это кажется выполнимым, но вам нужно будет посмотреть на свое поведение с системой с течением времени, чтобы точно определить, какие сообщения в журналах нужно выполнить grep. Я выполнил следующий набор шагов, чтобы проанализировать полную историю циклов сна/бодрствования для этого MacBook, и она восходит к 12 августа.
Предварительные условия: Запись пользователю без полномочий root в ~/Downloads. Измените пути и имена выходных файлов по желанию.
#!/bin/bash
#
# Read system wake/sleep cycles from kernel logs from oldest to newest.
#
# First, read the archived kernel logs for wakes.
for file in $(ls -r /var/log/kernel.log.*) ; do bunzip2 -c $file | grep 'Wake reason:' >> ~/Downloads/wakeup.txt; done
#
# Read current kernel.log for wakes.
grep 'Wake reason:' /var/log/kernel.log >> ~/Downloads/wakeup.txt
#
# Read archived kernel logs for sleeps.
for file in $(ls -r /var/log/kernel.log.*) ; do bunzip2 -c $file | grep ': sleep' >> ~/Downloads/wakeup.txt; done
#
# Read current kernel.log for sleeps.
grep ': sleep' /var/log/kernel.log >> ~/Downloads/wakeup.txt
#
# Sort raw output from greps for chronological picture.
sort -o ~/Downloads/sortedwake.txt ~/Downloads/wakeup.txt
Это должно дать вам приличный скачок к получению более полной картины. Вы можете просмотреть журналы ядра, чтобы узнать, когда система была перезагружена и т. д. Как только вы узнаете, что фильтровать, вы сможете немного расширить это. Получайте удовольствие от этого.
И последнее замечание: если вы исследуете систему, которая посещает множество сетей, вы увидите, что имя вашей системы изменяется в журналах в соответствии с тем, что DNS-сервер связывает с вашим IP-адресом. Это выглядит немного странно, но это вполне нормальное поведение.
bunzip2
использовать gunzip
- удалить старые файлы в начале rm ~/Downloads/wakeup .txt rm ~/Downloads/sortedwake.txt Тогда ваш скрипт работает хорошо, НО, к сожалению, он содержит только 9 дней истории (самый старый файл журнала — system.log.9.gz
). Есть ли где-нибудь более старые скрытые резервные копии?/etc/newsyslog.conf
следующим образом: /var/log/system.log 640 40 * @T00 J Надеюсь, в будущем это сохранит мои файлы system.log в течение 40 дней. (Извините за уродливое форматирование, мини-Markdown на данный момент не работает)Наконец, я завернул его в однострочник, который извлекает системные события сна и пробуждения из нескольких файлов журнала:
(pmset -g log|grep -e " Sleep " -e " Wake "; syslog | grep -e "System Sleep" -e " Wake reason:") | more
Если ваша система уже использует log
вместо syslog
этого следующую команду:
(pmset -g log|grep -e " Sleep " -e " Wake "; log show | grep -e "System Sleep" -e " Wake reason:") | more
Подсказка 2: Команда syslog также автоматически ищет архивные записи system.log. По умолчанию существует 10 ежедневных резервных копий system.log. Чтобы сохранить 30-дневные резервные копии system.log для дальнейшего использования, добавьте следующую строку в /var/log/newsystemlog.conf
: (все еще оценивая, насколько хорошо это работает)
/var/log/system.log 640 30 * @T00 J
@trane-francks @aglasser Спасибо за ваш вклад! Они помогли отследить проблему.
Светлячок