Nieuws:

Welkom, Gast. Alsjeblieft inloggen of registreren.
Heb je de activerings-mail niet ontvangen?

Auteur Topic: Inloggen in TTY 'sloopt' ~/.bash_history  (gelezen 270 keer)

Inloggen in TTY 'sloopt' ~/.bash_history
« Gepost op: 2015/09/27, 15:26:39 »
Gister heb ik het een en ander uitgezocht over de instellingen van BASH wat betreft de geschiedenis. Standaard staat er in je .bashrc een geschiedenisgrootte (HISTSIZE) van 1000 regels en een bestandsgrootte (HISTFILESIZE) van 2000 regels. Voor zover ik het nu heb begrepen houdt dit in dat per sessie (een terminal starten begint de sessie, een terminal afsluiten beëindigt de sessie) maximaal 1000 regels worden bewaard. Na het einde van de sessie worden deze 1000 regels toegevoegd aan geschiedenisbestand (~/.bash_history) als je histappend aan hebt staan. Standaard is dat zo in Ubuntu. Staan er door het toevoegen meer dan HISTFILESIZE(=2000) regels in je .bash_history wordt het begin van het  bestand afgesneden om het weer HISTFILESIZE te maken.

Nu komt het probleem (excuses voor de inleiding). Mijn .bashrc staat zo voor wat betreft geschiedenis:
# don't put duplicate lines or lines starting with space in the history.
# See bash(1) for more options
HISTCONTROL=ignoreboth

# append to the history file, don't overwrite it
shopt -s histappend

# for setting history length see HISTSIZE and HISTFILESIZE in bash(1)
HISTSIZE=-1
HISTFILESIZE=10000
Er zouden dus maximaal 10.000 regels moeten staan in mijn .bash_history. Als he bestand vol staat verwacht ik nog steeds dat er 10.000 regels in staan maar dat het begin wordt weggesneden. Tot mijn verbazing stonden er veel minder regels in. Toen las ik dit http://superuser.com/questions/575479/bash-history-truncated-to-500-lines-on-each-login Inloggen in een TTY (bijvoorbeeld CTRL + ALT + F1) blijkt het probleem te veroorzaken. Bij herstarten blijft .bash_history intakt maar na ingelogd te zijn geweest in een TTY blijkt .bash_history te zijn ingekort tot de 500 laatste regels. 500 schijnt ook de default te zijn voor HISTFILESIZE. Dus even gezocht op mijn systeem naar .bashrc. Dit staat er in /etc/skel/.bashrc (daaruit komt de .bashrc die standaard in de gebruikersmappen staat)
# don't put duplicate lines or lines starting with space in the history.
# See bash(1) for more options
HISTCONTROL=ignoreboth

# append to the history file, don't overwrite it
shopt -s histappend

# for setting history length see HISTSIZE and HISTFILESIZE in bash(1)
HISTSIZE=1000
HISTFILESIZE=2000
Er is echter nog een bestand /etc/bash.bashrc
# System-wide .bashrc file for interactive bash(1) shells.
...
Hierin staat niets qua geschiedenisinstellingen. Deze bashconfig lijkt actief in de TTY echo $HISTFILESIZE geeft dan 500 maar echo $HISTFILE geeft wel /home/erik/.bash_history. Nu lijkt de oplossing dus HISTFILE aanpassen naar iets anders in ~/.bashrc zodat de systeembrede bashinstellingen geen invloed hebben op mijn geschiedenisbestand. Mocht dat werken is het probleem opgelost. Maar ik wil het hier toch graag even navragen en kijken of er nog andere mogelijkheden zijn. Het nadeel van een apart bestand is weer dat commando's uit de TTY niet in dat bestand terechtkomen. Een groot geschiedenisbestand vind ik toch wel erg prettig want zo kun je makkelijk oude commando's opzoeken met grep. Hoe hebben jullie dit opgelost?

Re: Inloggen in TTY 'sloopt' ~/.bash_history
« Reactie #1 Gepost op: 2015/10/03, 13:24:47 »
Heb het nu 'opgelost' door een andere naam dan .bash_history te kiezen voor het bestand.

.bashrc ziet er nu zo uit voor wat betreft de geschiedenis:
# don't put duplicate lines or lines starting with space in the history.
# See bash(1) for more options
HISTCONTROL=ignoreboth

# append to the history file, don't overwrite it
shopt -s histappend

# for setting history length see HISTSIZE and HISTFILESIZE in bash(1)
HISTSIZE=-1
HISTFILESIZE=10000
# Set a different history file. This prevents truncating to 500 lines by system wide config.
HISTFILE=/home/erik/.bash_history_erik
# Set a format for timestamps that are prepended to a history line.
HISTTIMEFORMAT="[%F %T] "

Nu worden ook de timestamps opgeslagen bij elke bashregel. Het commando history maakt deze dan op volgens $HISTTIMEFORMAT. Voorbeeldje:
erik@erik-desktop:~$ hgrep uname
   36  [2015-09-29 23:59:19] uname -a
   39  [2015-10-02 20:15:09] uname
   43  [2015-10-03 10:26:40] uname
   44  [2015-10-03 13:07:48] hgrep uname