Chciałbym poznać całkowity czas pracy na moim laptopie w 2016 roku.
last reboot --since 2016-01-01 --until 2016-12-31 | grep -o '(.*)' | grep -v '-'
daje mi całkowity czas pracy laptopa w tym formacie:
(01:33)
(04:40)
(01:31)
(1+06:41)
(02:47)
(00:30)
Jak teraz to dodać?
command-line
bash
text-processing
time
daltonfury42
źródło
źródło
wtmp
dzienniki (co widać w wynikachlast
polecenia) są ustawione tak, aby obracały się co miesiąc (w/etc/logrotate.conf
), co oznacza, że po pewnym czasie najstarszy dziennik zostanie usunięty. Innymi słowy, cokolwiek próbujesz zrobićlast
, to nie będzie dokładneOdpowiedzi:
Oto wersja awk + awk:
last
ostatnia kolumna ma format(<days>+hours:minutes)
, w którymdays+
jest upuszczany, jeśli okres jest krótszy niż 1 dzień.Tutaj pierwsze
awk
polecenie wyprowadza ostatnią kolumnę, czas trwania zainteresowania, dlareboot
wpisów.Dla drugiego
awk
polecenia:FS
to jest[(+:)]
nawias lub+
lub:
. Tak,(h:m)
jest podzielony na,
h
,m
i(pierwszy i ostatni pola puste) i
(d+h:m)
jest podzielony na,
d
,h
,m
i(ponownie, pierwszy i ostatni pola puste).
0
W tym przypadku dodamy po prostu .h
id
może teraz mieć części ułamkowych.%d
), więc każda część ułamkowa jest ignorowana.źródło
Próbowanie ze skryptem bash i rozszerzenie polecenia. Używam
dateutils
do zsumowania czasu trwania.Dlatego do korzystania z tego skryptu potrzebny jest
dateutils
pakiet dostępny za pośrednictwemapt
. (sudo apt install dateutils
)Ten skrypt bierze również pod uwagę bieżący czas pracy (bieżąca sesja), a zatem dokładniejszy. Sekundy nie są liczone. Najniższa zgłoszona jednostka to minuta.
temp
.2015-01-01
do której dodano bieżący czas działania.new
org
a czasem pracy nettonew
.Wynik:
Poniższy skrypt dotyczy czasu przestoju dokładnie za rok od dnia uruchomienia skryptu .
źródło
Oto implementacja Pythona tego, czego chcę, ale jestem pewien, że istnieje elegancki sposób na zrobienie tego za pomocą bash:
źródło