web-dev-qa-db-fra.com

Comment puis-je voir toute l'histoire de bash?

Tout d'abord, laissez-moi vous montrer un exemple ci-dessous.

Dans Shell (1), j'ai exécuté la commande suivante.

$ ping google.com
PING google.com (74.125.235.164) 56(84) bytes of data.
64 bytes from nrt19s12-in-f4.1e100.net (74.125.235.164): icmp_seq=1 ttl=54 time=2.85 ms
64 bytes from nrt19s12-in-f4.1e100.net (74.125.235.164): icmp_seq=2 ttl=54 time=3.42 ms

Et après cela, ouvrez un autre Shell (2) et regardez l’histoire.

$ history
 .
 .
 .
 8720  exit
 8721  clear
 8722  history

Dans ce cas, le shell ne peut pas voir l'historique exécuté par Shell (1), mais je veux voir tout l'historique de chaque bash.

Ma question est donc comment puis-je voir toute l'histoire de bash? Est-ce que quelqu'un sait comment pirater?

Merci beaucoup d'avance!

17
gipcompany

Vous devriez examiner l'option histappend Shell et l'indicateur -a à history:

histappend

Si cette option est définie, la liste d'historique est ajoutée au fichier nommé par la valeur de la variableHISTFILElorsque le shell se ferme, au lieu de remplacer le fichier.

history

-aAjoute les "nouvelles" lignes de l'historique (lignes de l'historique entrées depuis le début de la session bash en cours) au fichier d'historique.

Si vous mettez history -a dans votre Prompt_COMMAND, vous obtiendrez un fichier .bash_history toujours à jour.

14
Carl Norum
cat ~/.bash_history

fonctionnerait aussi, bien que j’ai tendance à utiliser 

vim ~/.bash_history 

puis utilisez /pour rechercher

18
etusm

essaye ça: 

Modifiez votre fichier .bashrc et ajoutez-le à la fin: 

shopt -s histappend
Prompt_COMMAND="history -n; history -a"
unset HISTFILESIZE
HISTSIZE=2000

source: http://subbass.blogspot.com.br/2009/10/howto-sync-bash-history-between.html

4
jfelipesp

Vous pouvez installer quelque chose comme l'historique de shell avancé, qui enregistrera chaque commande dans une base de données sqlite3. Il est livré avec un outil permettant d’interroger la base de données à partir de la ligne de commande . https://github.com/barabo/advanced-Shell-history

Avec cette configuration, vous aurez une vue unifiée de l'historique des commandes pour toutes les sessions. Vous obtenez également des informations telles que l'historique des commandes pour le répertoire de travail actuel (ou la sous-arborescence), le code de sortie de commande, la durée de la commande, etc.

Divulgation complète: j'ai écrit et entretenu l'outil.

1
carl.anderson

Comme plusieurs l'ont noté, vous devez utiliser shopt -s histappend. Vérifiez en exécutant shopt et en vérifiant que histappend est 'activé'.

Pour vous assurer que chaque commande (sur plusieurs shells simultanés) apparaît dans l'historique de chacun de ces shells, ajoutez ceci à la fin de votre fichier .bashrc:

# Skip if not an interactive Shell
if [ -z "${PS1}" ]; then return; fi
export Prompt_COMMAND="history -a; history -c, history -r; ${Prompt_COMMAND}

-a: ajoute les nouvelles lignes d'historique (lignes d'historique entrées depuis le début de la session Bash en cours) à l'historique fichier .

-c: efface l'historique liste .

-r: lit l'historique fichier et ajoute son contenu à l'historique liste .

Exécutez source .bashrc ou créez de nouvelles sessions et, dans plusieurs fenêtres de terminal, entrez le commentaire #Tn dans chacune d'elles. Ensuite, sur un terminal, entrez history | tail -N pour afficher les N dernières lignes. Vous devriez voir tous les commentaires entrés sur les différents terminaux.

Il peut être utile d’ajouter ce qui suit dans /etc/profile.d/bashrc.sh afin d’obtenir un timestamp sur chaque ligne de l’historique:

if [ -z "${PS1}" ]; then return; fi
export HISTTIMEFORMAT='%F %T '

Le résultat ressemble à ceci:

 [moi@laBoheme ~]$ history | tail -4
 3292  2019-01-22 12:41:27  # T1
 3293  2019-01-22 12:41:34  # T2
 3294  2019-01-22 12:41:42  # T3
 3295  2019-01-22 12:41:50  history | tail -4
0
DeanM