Come trovare la cronologia dei comandi della shell dalla creazione della macchina?


23

Ho creato un virtualbox Ubuntu un paio di settimane fa e da allora ho lavorato a progetti su e giù.

Ora vorrei trovare la sintassi di alcuni comandi digitati nel terminale una settimana fa, ma ho aperto e chiuso la finestra del terminale e riavviato la macchina numerose volte.

Come posso ottenere il historycomando per tornare al primo comando che ho digitato dopo aver creato la macchina?
O c'è un altro posto in cui tutti i comandi sono memorizzati in Ubuntu?


2
Per quanto ne so non puoi. È possibile tornare indietro solo quando è stato impostato il buffer della cronologia. Se ti stai chiedendo quale pacchetto potresti installare per salvare indefinitamente la cronologia dei comandi in futuro, forse dovresti rivedere la tua domanda.
RobotHumans,

Risposte:


26

Potrebbe essere o non essere possibile ottenere tutti i comandi. Dipende da quanti comandi hai eseguito e da come è stato impostato il limite storico.

Tuttavia puoi vedere che la cronologia è memorizzata qui

/home/<YOUR_USERNAME>/.bash_history

Domanda correlata (per la gestione della cronologia di più shell):

È possibile rendere immediata la scrittura su .bash_history?


3
Non è vero che la cronologia viene salvata da un solo terminale / shell. Quando si esegue history, mostra la cronologia della shell corrente come più recente e la cronologia di tutte le altre shell (comprese le shell nelle sessioni precedenti, anche attraverso i cicli di accensione) prima di quello. Tutte le istanze della shell salvano la loro cronologia a .bash_historyquando esce. Nessuna istanza lo salva automaticamente lì, prima di quel punto.
Eliah Kagan,

6

Per impostazione predefinita, non esiste alcun luogo in cui tutti i comandi vengono registrati e mantenuti indefinitamente, sebbene ~/.bash_historycontenga i comandi precedenti (se si utilizza bash, che è la shell predefinita in Ubuntu).

Se vuoi che tutti i comandi digitati vengano bashregistrati per sempre , devi configurarlo tu stesso. Ad esempio, è possibile inserire quanto segue nel ~/.bashrcfile per registrare tutti i comandi digitati in una bashshell nel file ~/.command_log:

# log every command typed and when
if [ -n "${BASH_VERSION}" ]; then
    trap "caller >/dev/null || \
printf '%s\\n' \"\$(date '+%Y-%m-%dT%H:%M:%S%z')\
 \$(tty) \${BASH_COMMAND}\" 2>/dev/null >>~/.command_log" DEBUG
fi

Quanto sopra imposta una trap DEBUG, che viene eseguita appena prima dell'esecuzione di un normale comando. Il callerbuilt-in viene utilizzato per verificare se il comando viene digitato in una shell interattiva o eseguito tramite qualcosa di simile ~/.bashrc. Il valore ${BASH_COMMAND}contiene il comando attualmente in esecuzione.


Vorrei notare che su macOS, questa tecnica registra anche update_terminal_cwdil file di cronologia, che è un comando che l'utente non esegue, ma viene eseguito automaticamente.
Ashish Ahuja,

5

Qualcosa che potrebbe anche interessarti è come cercare nella cronologia dei comandi precedente. Puoi invertire la ricerca nella cronologia dalla riga di comando premendo Ctrl+re digitando le lettere che desideri trovare. Se hai più di un comando corrispondente, premi di Ctrl+rnuovo. Per uscire dalla ricerca inversa, premere Ctrl+g.

http://www.ice2o.com/bash_quick_ref.html


4

Puoi tornare indietro solo quando è impostato il limite della cronologia; una volta raggiunto quel punto, la storia inizierà a essere sovrascritta. Tuttavia, è possibile avere dimensioni cronologiche maggiori per il futuro. Inserisci questo nel tuo .bashrc e specifica un valore (il mio è impostato su 1000):

export HISTSIZE=1000
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.