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.