GNU/Linux >> Linux Esercitazione >  >> Linux

Come gestire la cronologia dei comandi di Linux

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.


Linux
  1. Come usare il comando cronologia in Linux

  2. Come usare il comando Su in Linux

  3. Come utilizzare il comando apt per gestire i pacchetti in Linux

  4. Come cancellare un comando specifico dalla cronologia di Bash in Linux

  5. Comando della cronologia di Linux

Come abilitare il timestamp nella cronologia di Bash in Linux

Come rimuovere un comando dalla cronologia in Linux

Come controllare la cronologia dei comandi di Linux in base alle date

3 consigli utili su come utilizzare il comando cronologia in Linux

Come utilizzare il comando dello schermo su Linux per gestire i terminali

Come controllare il tempo di attività del tuo server Linux