Comment voir les horodatages dans l'histoire de bash?

259

Existe-t-il un moyen de voir à quelle heure les commandes ont été exécutées à partir de l'historique bash? Nous pouvons voir la commande, mais y a-t-il un moyen d'obtenir le temps également?

Bottom-Line: le temps d'exécution dans l'historique Bash

rɑːdʒɑ
la source
7
Je suis surpris de constater à quel point cela est mal documenté sous Linux et BSD dans les pages de manuel.
Sridhar Sarnobat
Consultez ce blog sur - sanctum.geek.nz/arabesque/better-bash-history .
Abhicantdraw
4
si vous utilisez zsh:history -E
Vahid
4
Vous ne savez pas pourquoi deux réponses ci-dessous ressentent le besoin de vous expliquer comment ouvrir un terminal.
mwfearnley
2
Selon le blog référencé par @ dog0, timestampse ne semble apparemment pas être sauvegardé sauf si la HISTTIMEFORMATvariable a été définie lors de l' exécution des commandes. En d'autres termes, si vous ne l'avez pas défini, le configurer maintenant ne vous aidera pas à récupérer les horodatages des commandes précédemment émises.
Tomislav Nakic-Alfirevic

Réponses:

318

Appuyez sur Ctrl+ Alt+ Tpour ouvrir Terminal, puis exécutez la commande ci-dessous:

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

Ou, pour rendre la modification permanente pour l'utilisateur actuel:

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

ensuite

history

Pour plus d'informations, consultez man bash ou un index AZ de la ligne de commande Bash pour Linux .

Pour les commandes exécutées auparavant HISTTIMEFORMAT , l' heure actuelle sera enregistrée comme horodatage. Les commandes exécutées après le HISTTIMEFORMATréglage auront l’horodatage correct sauvegardé.

Mitch
la source
7
Pourquoi le déclarer avec exportdans .bash_profile? C'est une variable uniquement lue par bash, pas par les commandes lancées à partir de celle-ci, elle ne doit donc pas être exportée.
Alvaro Gutierrez Perez
71
Notez que cela n'enregistrera que les horodatages des nouveaux éléments de l'historique , une fois les HISTTIMEFORMATsessions définies, c'est-à-dire que vous ne pourrez pas utiliser cette information de manière rétrospective. Certaines réponses donnent l’impression que la commande historique affiche immédiatement les entrées horodatées
Louis Maddox
10
@Louis - En fait, cela a fonctionné pour moi rétroactivement pour moi?!?!
stephenmm
19
@Jamil: pour les personnes qui respectent les normes ISO, il s'agit de "% y-% m-% d" pour la partie date;)
Gauthier
13
@Gauthier - en fait, utilisez simplement% F pour la date ISO ;-) man7.org/linux/man-pages/man3/strftime.3.html
brianmearns
73

Ouvrir le terminal Ctrl+ Alt+ Tet courir,

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

ensuite,

history

Pour rendre les modifications permanentes, suivez les étapes ci-dessous,

gedit ~/.bashrc

vous devez ajouter la ligne ci-dessous au fichier .bashrc puis l'enregistrer,

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

exécutez la commande ci-dessous pour le fichier source .bashrc,

source ~/.bashrc

Après cette historycommande d' exécution .

entrez la description de l'image ici

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

Avinash Raj
la source
Merci de votre réponse, sera-ce un changement permanent?
rɑːdʒɑ
1
Hé, je le fais sous OS X et Windows (via MINGW), et je l’ajoute dans .bash_profile, quelle est la différence entre profile et rc?
LasagnaAndroid
18

Oui, vous pouvez: si vous le définissez $HISTTIMEFORMAT, le .bash-historysera correctement horodaté. Cela n'aide pas le .bash-historycontenu existant , mais aidera dans le futur.

Dennis Kaarsemaker
la source
1
pouvez-vous l'élargir pour plus de clarté?
rɑːdʒɑ
5
Correction à l'article précédent: Le réglage de HISTTIMEFORMAT permet l'affichage des horodatages ... même existants. Mon préféré est: HISTTIMEFORMAT = '% F% T', peu importe le pays dans lequel vous résidez ... tout le monde sait immédiatement quelle heure il est. :)
4
J'ai mis $ HISTTIMEFORMAT et j'ai eu les temps pour aujourd'hui même avant les commandes de cet ensemble.
Yasin Okumuş
@ user491029 "... même existant". C'est vrai, mais trompeur. Sur Ubuntu 14.04, au moins, il a commencé à afficher les horodatages de toutes les entrées de l’historique une fois que j’ai défini HISTTIMEFORMAT, mais il semble que les horodatages de toutes les commandes exécutées avant la session en cours correspondent à l’horodatage de connexion de la session en cours.
jbobbins
1

Vous verrez les changements lors de la prochaine connexion.

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

Pour activer les horodatages de l'historique pour tous les utilisateurs, créez un script dans /etc/profile.d:

echo 'HISTTIMEFORMAT="%Y%m%d %T "' >> /etc/profile.d/timestamp.sh
iii
la source
1
Cela ne fonctionnera probablement pas pour les utilisateurs qui se connectent via l'interface graphique, car le terminal par défaut n'exécutera pas de shells de connexion. /etc/bash.bashrcserait un meilleur endroit.
muru
0

Je sais que je réponds très tard, mais pour le faire pour tous les utilisateurs, vous pouvez créer n’importe quel .shfichier /etc/profile.det y ajouter la ligne suivante:

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

Si vous n'êtes pas connecté en tant que rootou superutilisateur, vous devez utiliser la teecommande pour ce faire:

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

Si vous souhaitez ajouter un fichier existant, transmettez -aflag à la teecommande:

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

entrez la description de l'image ici

Shashank Agrawal
la source
Bonjour Shashank, Merci d'avoir ajouté la réponse, mais en quoi cette réponse est-elle différente des autres? Si votre réponse est complètement différente, nous sommes heureux de l'avoir, mais sinon, vous pouvez améliorer les réponses existantes.
dimanche
Bonjour, merci d'avoir commenté. Ceci est différent des autres de la manière suivante: 1. Certains d’entre eux ont mentionné la création pour tous les utilisateurs mais personne n’a mentionné la création / explication d’un nom de fichier dans /etc/profile.d. timestamp.shsemble très proche de la technique (donc cela crée de la confusion) alors j'ai utilisé le nom existing-foo-file.sh(concept foo-bar). 2. Personne n'a mentionné son utilisation avec des utilisateurs non root. J'ai donc donné un exemple d'utilisation sudo. 3. Le 3ème exemple améliore le 2ème exemple d’ajout à un fichier existant. Comme les débutants sous Linux / Unix peuvent s’attaquer à ce problème, j’ai élaboré.
Shashank Agrawal le