¿Cómo encontrar el historial de comandos de shell desde que se creó la máquina?

23

Creé una máquina Ubuntu virtualbox hace un par de semanas y he estado trabajando en proyectos de vez en cuando desde entonces.

Ahora me gustaría encontrar la sintaxis de algunos comandos que escribí en el terminal hace una semana, pero abrí y cerré la ventana del terminal y reinicié la máquina varias veces.

¿Cómo puedo hacer que el historycomando regrese al primer comando que escribí después de crear la máquina?
¿O hay otro lugar donde todos los comandos están almacenados en Ubuntu?

Edward Tanguay
fuente
2
Por lo que sé, no puedes. Solo puede retroceder hasta que se estableció el búfer de historial. Si está preguntando qué paquete podría instalar para guardar indefinidamente el historial de comandos en el futuro, tal vez debería revisar su pregunta.
RobotHumans

Respuestas:

26

Puede o no ser posible obtener todos los comandos. Depende de cuántos comandos ejecutó y cómo se estableció el límite del historial.

Sin embargo, puede ver que la lista del historial se almacena aquí

/home/<YOUR_USERNAME>/.bash_history

Pregunta relacionada (para manejar el historial de múltiples shell):

¿Es posible hacer que escribir en .bash_history sea inmediato?

Nosotros somos
fuente
3
No es cierto que el historial solo se guarde desde un terminal / shell. Cuando ejecuta history, muestra el historial del shell actual como el más reciente, y el historial de todos los otros shells (incluidos los shells en sesiones anteriores, incluso a través de los ciclos de energía) antes de eso. Todas las instancias de concha guarden su historial a .bash_historycuando la salida. Ninguna instancia lo guarda allí automáticamente, antes de ese punto.
Eliah Kagan
6

Por defecto, no hay un lugar donde todos los comandos se graben y se mantengan indefinidamente, aunque ~/.bash_historycontiene los últimos comandos (si los usa bash, que es el shell predeterminado en Ubuntu).

Si desea que todos los comandos escritos se bashgraben para siempre , debe configurarlos usted mismo. Por ejemplo, puede poner lo siguiente en su ~/.bashrcarchivo para registrar todos los comandos escritos en un bashshell en el archivo ~/.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

Lo anterior establece una trampa DEBUG, que se ejecuta justo antes de que se ejecute un comando ordinario. El callerincorporado se usa para probar si el comando se está escribiendo en un shell interactivo o se ejecuta a través de algo así ~/.bashrc. El valor ${BASH_COMMAND}contiene el comando que se está ejecutando actualmente.

Richard Hansen
fuente
Me gustaría señalar que en macOS, esta técnica también inicia sesión update_terminal_cwden el archivo de historial, que es un comando que el usuario no ejecuta, pero se ejecuta automáticamente.
Ashish Ahuja
5

Algo que también podría interesarle es cómo buscar en su historial de comandos anterior. Puede realizar una búsqueda inversa en su historial en la línea de comando presionando Ctrl+ry luego escribiendo las letras que desea hacer coincidir. Si tiene más de un comando coincidente, presione Ctrl+rnuevamente. Para salir de la búsqueda inversa, presione Ctrl+g.

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

Sepero
fuente
4

Solo puede retroceder hasta que se establezca su límite de historial; Una vez que haya llegado a ese punto, la historia comenzará a sobrescribirse. Sin embargo, es posible tener un tamaño de historia más grande para el futuro. Ponga esto en su .bashrc y especifique un valor (el mío está establecido en 1000):

export HISTSIZE=1000

fuente