Probabilmente sai come usare i tasti freccia su e giù per scorrere la cronologia di Bash, ma sapevi che c'è molto di più nella cronologia di Bash oltre alla semplice ripetizione dei comandi? C'è molto di più nella storia. O, dovrebbe riguardare molto di più la storia ? In entrambi i casi, il comando cronologia è uno di quei comandi oscuri che è potente e pratico da conoscere almeno a un livello di base. Questo articolo eliminerà il mistero dalla cronologia di Bash per renderlo uno strumento di amministrazione di sistema più intuitivo.
Lo sfondo
In Bash, la cronologia dei comandi è archiviata in un file (.bash_history
) nella tua home directory. L'inizio (.) rende il file nascosto dalla visualizzazione normale. Per vederlo, emetti ls -a
comando.
$ ls -a
. .. .bash_history .bash_logout .bash_profile .bashrc
Puoi operare sul file .bash_history come faresti con qualsiasi altro semplice file di testo ASCII.
Le tre variabili di ambiente correlate di cui devi essere a conoscenza sono HISTFILE, HISTFILESIZE e HISTSIZE.
- HISTFILE—/home/
/.bash_history - HISTFILESIZE:1000
- HISTSIZE:1000
La variabile HISTFILE contiene il nome e la posizione del file della cronologia di Bash. HISTFILESIZE indica quanti comandi possono essere memorizzati in .bash_history
file. HISTSIZE è il numero di comandi memorizzati nella cache. Una volta raggiunti i 1000 comandi, i comandi più vecchi verranno eliminati mentre quelli nuovi vengono salvati.
$ echo $HISTSIZE
1000
$ echo $HISTFILESIZE
1000
$ echo $HISTFILE
/home/khess/.bash_history
A ogni utente, incluso root, queste variabili e dimensioni sono assegnate per impostazione predefinita. Se vuoi cambiare queste variabili, modifica il file .bashrc nella tua home directory. Ad esempio, se vuoi modificare le variabili di dimensione in 500 comandi, modifica il .bashrc
archiviare e utilizzare le seguenti voci:
export HISTSIZE=500
export HISTFILESIZE=500
Per utilizzare i nuovi valori senza disconnettersi e riaccendersi, è possibile eseguire .bashrc
file.
$ . ~/.bashrc
I tuoi valori sono ora attivi per la tua shell corrente e per qualsiasi subshell.
$ echo $HISTSIZE
500
$ echo $HISTFILESIZE
500
Se non vuoi che la tua cronologia conservi i comandi duplicati, puoi indicare alla cronologia di ignorare le voci duplicate aggiungendo quanto segue al tuo file .bashrc:
export HISTCONTROL=ignoredups
Il problema
Il problema con la cronologia di Bash è che non è scritta in .bash_history
file fino a quando non ti disconnetti. Ciò rende impossibile utilizzare il comando history per lo scripting. Ad esempio, supponi di tenere una lezione su Linux e di voler verificare se gli studenti hanno eseguito un comando particolare per copiare i propri file su un'unità esterna montata. Se lo studente rimane connesso al sistema, non sarai in grado di determinare se la copia è stata eseguita perché il tuo script utilizza il suo file di cronologia (/home/student/.bash_history) per verificare se il comando è stato eseguito.
La soluzione
Per aggirare questa funzione, usa la scrittura opzione per la history
comando. Come parte dell'istruzione in classe, gli studenti dovrebbero eseguire questo comando per salvare la loro cronologia anche se non si disconnettono.
$ history -w
Questo scrive tutta la cronologia dei comandi della sessione corrente in HISTFILE. E ora il tuo script di controllo può facilmente trovare se il comando è stato eseguito. Devi anche fidarti che lo studente eseguirà il comando cronologia.
[ Dai un'occhiata alla lezione di storia di Seth Kenlon: Rendi la storia di Bash più utile con questi suggerimenti ]
Un altro problema
Poiché HISTSIZE e HISTFILESIZE sono relativamente grandi (1000 comandi), è possibile che lo studente abbia eseguito il comando prima. Puoi aggiungere la voce export HISTCONTROL=ignoredups nel loro .bashrc, ma questo non sarà di aiuto se lo studente ha eseguito un comando simile due giorni fa perché il file mostrerà un solo comando.
La soluzione a questo problema
Per aggirare questo problema, è necessario cancellare la cronologia dello studente all'accesso. Modifica di nuovo il file .bashrc e aggiungi il seguente comando.
history -c
Questo comando cancella la cronologia a ogni accesso e rimuove il problema di raccogliere un comando eseguito in precedenza. Non devi preoccuparti di raccogliere un comando dalle sessioni precedenti perché il sistema disconnette gli utenti inattivi dopo un periodo di tempo specificato se imposti il limite di tempo inattivo in /etc/profile
. Modifica il /etc/profile
file e aggiungi la voce seguente.
TMOUT=300
La variabile TMOUT utilizza un numero di secondi di inattività. In questo caso, 300 secondi sono cinque minuti. È possibile impostare questo valore su un numero qualsiasi di secondi. Questo valore avrà effetto al prossimo accesso per tutti utenti. Per impostare singoli valori di timeout, utilizza .bashrc
ma renditi conto che gli utenti possono modificare questo file a piacimento.
[ Scarica ora:una guida per l'amministratore di sistema allo scripting Bash. ]
Concludi
La cronologia di Bash è uno strumento utile, ma può essere frustrante se non si ha familiarità con le sue opzioni e stranezze. Ci sono molte altre opzioni disponibili nella cronologia. Controllare le pagine man per ulteriori informazioni. E ricorda che ogni comando che inserisci è una storia in divenire.