Jak zobaczyć znaczniki czasu w historii bash?

259

Czy jest jakiś sposób, aby zobaczyć, o której godzinie polecenia zostały wykonane z historii bash? Widzimy zamówienie, ale czy jest jakiś sposób, aby uzyskać czas?

Konkluzja: Czas wykonania w historii Bash

rɑːdʒɑ
źródło
7
Dziwi mnie, jak słabo udokumentowano to zarówno na Linuksie, jak i BSD na stronach podręcznika.
Sridhar Sarnobat
Sprawdź tego bloga - sanctum.geek.nz/arabesque/better-bash-history .
abhicantdraw
4
jeśli używasz zsh:history -E
Vahid
4
Nie jestem pewien, dlaczego dwie poniższe odpowiedzi uważają, że trzeba powiedzieć, jak otworzyć terminal.
mwfearnley,
2
Według blogu, do którego odwołuje się @ dog0, znacznik czasu najwyraźniej nie jest zapisywany, chyba że HISTTIMEFORMATzmienna została ustawiona podczas wydawania poleceń. Innymi słowy, jeśli go nie ustawiłeś, ustawienie go teraz nie pomoże ci pobrać znaczników czasu wcześniej wydanych poleceń.
Tomislav Nakic-Alfirevic

Odpowiedzi:

316

Naciśnij Ctrl+ Alt+, Taby otworzyć Terminal, a następnie uruchom poniższe polecenie:

HISTTIMEFORMAT="%d/%m/%y %T "

Lub, aby zmienić na stałe dla bieżącego użytkownika:

echo 'HISTTIMEFORMAT="%d/%m/%y %T "' >> ~/.bashrc
source ~/.bashrc

Następnie

history

Aby uzyskać więcej informacji, zobacz man bash lub Indeks AZ wiersza poleceń Bash dla systemu Linux .

W przypadku poleceń, które były uruchamiane wcześniej HISTTIMEFORMAT , bieżący czas zostanie zapisany jako znacznik czasu. Polecenia uruchomione po HISTTIMEFORMATustawieniu będą miały zapisany odpowiedni znacznik czasu.

Mitch
źródło
7
Dlaczego zadeklarować je exportw .bash_profile? Jest to zmienna odczytywana tylko przez bash, a nie przez uruchamiane z niej polecenia, więc nie powinna być eksportowana.
Alvaro Gutierrez Perez
71
Zauważ, że będzie to rejestrować znaczniki czasu tylko dla nowych elementów historii , po HISTTIMEFORMATustawiono dla sesji, tzn. Nie można użyć tego z mocą wsteczną. Niektóre odpowiedzi tutaj sprawiają wrażenie, że polecenie historii natychmiast pokazuje wpisy ze znacznikiem czasu
Louis Maddox
9
@Louis - Właściwie to działało dla mnie z mocą wsteczną dla mnie?!?!
stephenmm
19
@Jamil: dla osób, które przestrzegają norm ISO, jest to „% y-% m-% d” dla części daty;)
Gauthier
13
@Gauthier - w rzeczywistości użyj% F do daty ISO ;-) man7.org/linux/man-pages/man3/strftime.3.html
brianmearns
73

Otwórz terminal Ctrl+ Alt+ Ti uruchom,

HISTTIMEFORMAT="%d/%m/%y %T "

następnie,

history

Aby wprowadzić zmiany na stałe, wykonaj poniższe czynności,

gedit ~/.bashrc

musisz dodać poniższy wiersz do pliku .bashrc, a następnie zapisać go,

export HISTTIMEFORMAT="%d/%m/%y %T "

uruchom poniższe polecenie, aby źródłowy plik .bashrc,

source ~/.bashrc

Po tym historypoleceniu uruchomienia .

wprowadź opis zdjęcia tutaj

źródło : http://www.cyberciti.biz/faq/unix-linux-bash-history-display-date-time/

Avinash Raj
źródło
Dziękujemy za odpowiedź, czy będzie to trwała zmiana?
rɑːdʒɑ
1
Hej, robię to w OS X i Windows (poprzez MINGW), i dodaję to do .bash_profile, jaka jest różnica między profilem a rc?
LasagnaAndroid
18

Tak, możesz: jeśli ustawisz $HISTTIMEFORMAT, .bash-historybędzie odpowiednio datowany. To nie pomaga w przypadku istniejących .bash-historytreści, ale pomoże w przyszłości.

Dennis Kaarsemaker
źródło
1
czy możesz go rozwinąć dla większej przejrzystości?
rɑːdʒɑ
5
Korekta do poprzedniego postu: Ustawienie HISTTIMEFORMAT umożliwia wyświetlanie znaczników czasu ... nawet istniejących. Moje ulubione to: HISTTIMEFORMAT = '% F% T', ponieważ nie ma znaczenia, z którego kraju mieszkasz ... wszyscy od razu wiedzą, która jest godzina. :)
4
Ustawiłem $ HISTTIMEFORMAT i mam czasy na dziś, nawet przed poleceniami tego zestawu.
Yasin Okumuş
@ user491029 „... nawet istnieje”. To prawda, ale wprowadzająca w błąd. Przynajmniej na Ubuntu 14.04 zaczęło pokazywać znaczniki czasu dla wszystkich pozycji historii, kiedy ustawiłem HISTTIMEFORMAT, ale wygląda na to, że znaczniki czasu dla dowolnego polecenia wykonanego przed bieżącą sesją były znacznikiem czasu logowania dla bieżącej sesji.
jbobbins
1

Zobaczysz zmiany przy następnym logowaniu.

echo 'HISTTIMEFORMAT="%d/%m/%y %T "' >> ~/.bashrc
DimiDak
źródło
0

Aby włączyć znaczniki czasu historii dla wszystkich użytkowników, utwórz skrypt w /etc/profile.d:

echo 'HISTTIMEFORMAT="%Y%m%d %T "' >> /etc/profile.d/timestamp.sh
iii
źródło
1
Prawdopodobnie nie zadziała to dla użytkowników logujących się przez GUI, ponieważ domyślny terminal nie będzie uruchamiał powłok logowania. /etc/bash.bashrcbyłoby lepszym miejscem.
muru
0

Wiem, że odpowiadam na nie bardzo późno, ale aby to zrobić dla wszystkich użytkowników, możesz utworzyć dowolny .shplik /etc/profile.di dodać do niego następujący wiersz:

echo 'HISTTIMEFORMAT="%Y-%m-%d %T "' >> /etc/profile.d/existing-foo-file.sh

Jeśli nie jesteś zalogowany jako rootsuperużytkownik, musisz użyć teepolecenia, aby to zrobić:

echo 'HISTTIMEFORMAT="%Y-%m-%d %T "' | sudo tee /etc/profile.d/mytimestamp.sh

Jeśli chcesz dołączyć do dowolnego istniejącego pliku, przekaż -aflagę do teepolecenia:

echo 'HISTTIMEFORMAT="%Y-%m-%d %T "' | sudo tee -a /etc/profile.d/mytimestamp.sh

wprowadź opis zdjęcia tutaj

Shashank Agrawal
źródło
Cześć Shashank, dziękuję za dodanie odpowiedzi, ale czym różni się ona od innych? Jeśli Twoja odpowiedź jest zupełnie inna, chętnie ją otrzymamy, ale jeśli nie, możesz poprawić istniejące odpowiedzi.
rɑːdʒɑ
Cześć, dzięki za komentarz. Różni się to od innych w następujący sposób: 1. Niektóre z nich wspominały o tworzeniu dla wszystkich użytkowników, ale nikt nie wspominał o tworzeniu / wyjaśnianiu nazw plików /etc/profile.d. timestamp.shwygląda bardzo technicznie (co powoduje zamieszanie), więc użyłem nazwy existing-foo-file.sh(koncepcja foo-bar). 2. Nikt nie wspomniał o używaniu go z użytkownikami innymi niż root. Podałem więc przykład użycia sudo. 3. Trzeci przykład poprawia drugi przykład dołączania do istniejącego pliku. Ponieważ początkujący linux / unix mogą trafić w ten problem, opracowałem go.
Shashank Agrawal