Come vedere i timestamp nella storia di bash?


259

C'è un modo in cui posso vedere a che ora i comandi sono stati eseguiti dalla cronologia di bash? Possiamo vedere l'ordine ma c'è un modo per ottenere anche il tempo?

Bottom-line: tempo di esecuzione nella cronologia di Bash


7
Sono sorpreso da quanto scarsamente documentato sia su Linux che su BSD nelle manpage.
Sridhar Sarnobat,


4
se stai usando zsh:history -E
Vahid

4
Non sono sicuro del motivo per cui due risposte di seguito avvertono la necessità di dirti come aprire un terminale.
mwfearnley,

2
Secondo il blog a cui fa riferimento @ dog0, il timestampse apparentemente non viene salvato a meno che la HISTTIMEFORMATvariabile non sia stata impostata al momento dell'emissione dei comandi. In altre parole, se non lo hai impostato, impostarlo ora non ti aiuterà a recuperare i timestamp dei comandi precedentemente emessi.
Tomislav Nakic-Alfirevic,

Risposte:


318

Premi Ctrl+ Alt+ Tper aprire Terminale, quindi esegui il comando seguente:

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

Oppure, per rendere permanente la modifica per l'utente corrente:

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

Poi

history

Per maggiori informazioni vedi man bash o An AZ Index della riga di comando di Bash per Linux .

Per i comandi eseguiti prima HISTTIMEFORMAT dell'impostazione, l' ora corrente verrà salvata come data / ora. I comandi eseguiti dopo che è HISTTIMEFORMATstato impostato avranno il timestamp corretto salvato.


7
Perché dichiararlo con exportin .bash_profile? È una variabile letta solo da bash, non da comandi lanciati da essa, quindi non dovrebbe essere esportata.
Alvaro Gutierrez Perez,

71
Si noti che questo registrerà solo i timestamp per i nuovi elementi della cronologia , dopo che HISTTIMEFORMATè stato impostato per le sessioni, ovvero non è possibile utilizzarlo in modo retrospettivo. Alcune risposte qui danno l'impressione che il comando history mostri immediatamente voci con data e ora
Louis Maddox,

10
@ Louis - In realtà questo ha funzionato per me in modo retroattivo per me?!?!
stephenmm

19
@Jamil: per le persone che seguono gli standard ISO, è "% Y-% m-% d" per la parte data;)
Gauthier

13
@Gauthier - in realtà, usa% F per la data ISO ;-) man7.org/linux/man-pages/man3/strftime.3.html
brianmearns

73

Apri il terminale Ctrl+ Alt+ Ted esegui,

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

poi,

history

Per rendere permanenti le modifiche, seguire i passaggi seguenti,

gedit ~/.bashrc

è necessario aggiungere la riga seguente al file .bashrc e quindi salvarlo,

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

eseguire il comando seguente per sorgente .bashrc file,

source ~/.bashrc

Dopo quel historycomando di esecuzione .

inserisci qui la descrizione dell'immagine

fonte : http://www.cyberciti.biz/faq/unix-linux-bash-history-display-date-time/


Grazie per aver risposto, \ sarà un cambiamento permanente?
1313

1
Ehi, lo sto facendo in OS X e Windows (tramite MINGW) e lo sto aggiungendo in .bash_profile, qual è la differenza tra profilo e rc?
Lasagna Android

18

Sì, puoi: se impostato $HISTTIMEFORMAT, il .bash-historytimestamp sarà correttamente. Ciò non aiuta con i .bash-historycontenuti esistenti , ma aiuterà in futuro.


1
puoi espanderlo per maggiore chiarezza?
1313

5
Correzione al post precedente: l'impostazione di HISTTIMEFORMAT consente la visualizzazione dei timestamp ... anche esistenti. Il mio preferito è: HISTTIMEFORMAT = '% F% T' in quanto non importa da quale paese risiedi ... tutti sanno immediatamente che ore sono. :)

4
Ho impostato $ HISTTIMEFORMAT e ho ottenuto i tempi per oggi anche prima dei comandi di questo set.
Yasin Okumuş,

@ user491029 "... anche esistente". Questo è vero, ma fuorviante. Su Ubuntu 14.04, almeno, ha iniziato a mostrare i timestamp per tutte le voci della cronologia dopo aver impostato HISTTIMEFORMAT, ma sembra che i timestamp per qualsiasi comando eseguito prima della sessione corrente fossero i timestamp di accesso della sessione corrente.
jbobbins il

1

Vedrai le modifiche al prossimo accesso.

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

0

Per abilitare i timestamp della cronologia per tutti gli utenti, creare uno script in /etc/profile.d:

echo 'HISTTIMEFORMAT="%Y%m%d %T "' >> /etc/profile.d/timestamp.sh

1
Questo probabilmente non funzionerà per gli utenti che accedono tramite la GUI, poiché il terminale predefinito non eseguirà shell di login. /etc/bash.bashrcsarebbe un posto migliore.
muru,

0

Lo so, lo sto rispondendo molto tardi, ma per farlo per tutti gli utenti, puoi creare qualsiasi .shfile /etc/profile.de aggiungere la seguente riga ad esso:

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

Se non hai effettuato l'accesso come rooto superutente, devi usare il teecomando per fare questo:

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

Se si desidera aggiungere a qualsiasi file esistente, passare il -aflag al teecomando:

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

inserisci qui la descrizione dell'immagine


Ciao Shashank, grazie per aver aggiunto la risposta, ma in che modo questa risposta è diversa dalle altre? Se la tua risposta è completamente diversa, siamo lieti di averla, ma in caso contrario puoi migliorare le risposte esistenti.
rʒɑdʒɑ

Ciao, grazie per il commento. Questo è diverso dagli altri nel modo seguente: 1. Alcuni di loro hanno menzionato la creazione per tutti gli utenti, ma nessuno ha menzionato la creazione / spiegazione di un nome di file in /etc/profile.d. timestamp.shsembra molto vicino al tecnico (quindi crea confusione) quindi ho usato il nome existing-foo-file.sh(concetto di foo-bar). 2. Nessuno ha menzionato di usarlo con utenti non root. Quindi ho dato un esempio di utilizzo sudo. 3. Il terzo esempio migliora il secondo esempio di aggiunta a un file esistente. Dal momento che i principianti di Linux / Unix possono risolvere questo problema, ho elaborato.
Shashank Agrawal,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.