Schlagwort-Archive: Shell

Bash: History mit Zeitpunkten und unbegrenzter Größe & .bashrc vs. .bash_profile

Auch wenn es einige Alternativen zur gewöhnlichen Bash unter Linux gibt, zählt sie auch heute noch zu den beliebtesten Shells. Auch ich selbst nutze sie auf meinem Server noch rege. Die Z shell (zsh) sieht zwar ebenso vielversprechend aus, aber das ist ein Thema für ein anderes mal.

Unbegrenzte History
Kommen wir zurück zur Bash: etwas, dass ich lange vermisst habe, war die Größe der History so festzulegen, dass diese nicht begrenzt ist. Oftmals gibt es dann doch den einen Befehl, der nützlicherweise noch in der History schlummern könnte, wenn er nicht schon dem Größenlimit zum Opfer gefallen wäre. Festlegen lässt sich die Historygröße grundsätzlich über die beiden Variablen HISTSIZE sowie HISTFILESIZE. HISTSIZE legt dabei die maximale Anzahl von Befehlen bzw. Zeilen fest, die in der History im Hauptspeicher während einer Sitzung festgehalten bleiben. HISTFILESIZE legt dagegen die maximale Anzahl von Befehlen bzw. Zeilen in der Historydatei fest, die gespeichert bzw. beim Start der Bash geladen werden. Wichtig ist also, beide Werte entsprechend anzupassen. Bis zur Bash Version 4.3 gab es AFAIK keine Möglichkeit, beide Werte auf „unlimitiert“ zu setzen, sodass lediglich ein möglichst hoher Wert eine Alternative darstellte. Seit Version 4.3 führt ein Wert kleiner 0 zu einer unbegrenzten Größenfestlegung. Dazu sind folgende beiden Einträge in die Bashkonfiguration aufzunehmen:

HISTFILESIZE=-1
HISTSIZE=-1

History mit Zeitangaben
Doch auch wenn nun verwendete Befehle weit in der Vergangenheit nachgeschlagen werden können, bleibt manchmal die Frage offen, zu welchem Zeitpunkt ein Befehl ausgeführt wurde. Über HISTTIMEFORMAT lässt sich das Historyformat entsprechend anpassen, sodass die History künftig um eine Zeitangabe erweitert wird.  Ein mögliches Format kann beispielsweise so aussehen:

HISTTIMEFORMAT=“[%d.%m.%y] %T „

Dies resultiert in Historyeinträgen im folgenden Schema:
536 [12.02.18] 00:13:56 ls -lha

.bashrc vs .bash_profile
Bleibt noch die Frage offen, in welche der beiden Dateien die neuen Kofigurationszeilen aufzunehmen sind. Grundsätzlich lassen sich die Einträge in beide Dateien eintragen, sie werden allerdings zu unterschiedlichen Zeitpunkten Verwendung finden. Die .bashrc wird bei jedem Öffnen eines interaktiven Terminals automatisch geladen, während die .bash_profile beim Öffnen einer Login-Shell geladen wird. Um auf der sicheren Seite zu sein, müssten die Einträge also in beiden Dateien vorgenommen werden. Bei einem Server, der ohnehin grundsätzlich über SSH angesteuert wird, lässt sich die .bashrc aber auch automatisch mit der .bash_profile ausführen. Dazu ist lediglich folgendes kleine Snippet in die .bash_profile einzutragen:

if [ -f ~/.bashrc ]; then
source ~/.bashrc
fi