Bagaimana menemukan riwayat perintah shell sejak mesin dibuat?

23

Saya membuat mesin virtualbox Ubuntu beberapa minggu yang lalu dan telah mengerjakan proyek mati-matian sejak saat itu.

Sekarang saya ingin mencari sintaks dari beberapa perintah yang saya ketikkan di terminal seminggu yang lalu, tetapi saya telah membuka dan menutup jendela terminal dan menghidupkan ulang mesin beberapa kali.

Bagaimana saya bisa mendapatkan historyperintah untuk kembali ke perintah pertama yang saya ketik setelah saya membuat mesin?
Atau adakah tempat lain dimana semua perintah disimpan di Ubuntu?

Edward Tanguay
sumber
2
Sejauh yang saya tahu Anda tidak bisa. Anda hanya dapat kembali sejauh buffer sejarah disetel. Jika Anda bertanya tentang paket apa yang dapat Anda instal untuk menyimpan riwayat perintah tanpa batas di masa depan, mungkin Anda harus merevisi pertanyaan Anda.
RobotHumans

Jawaban:

26

Mungkin atau tidak mungkin untuk mendapatkan semua perintah. Itu tergantung berapa banyak perintah yang Anda jalankan dan bagaimana batas sejarah ditetapkan.

Namun Anda dapat melihat daftar riwayat disimpan di sini

/home/<YOUR_USERNAME>/.bash_history

Pertanyaan terkait (untuk menangani beberapa riwayat shell):

Mungkinkah segera membuat tulisan ke .bash_history?

Web-E
sumber
3
Tidak benar bahwa sejarah hanya disimpan dari satu terminal / shell. Ketika Anda menjalankan history, itu menunjukkan sejarah shell saat ini sebagai yang paling baru, dan sejarah dari semua shell lainnya (termasuk shell di sesi sebelumnya, termasuk di seluruh siklus daya) sebelum itu. Semua contoh shell menyimpan sejarah mereka untuk .bash_historysaat pintu keluar. Tidak ada contoh menyimpannya di sana secara otomatis, sebelum titik itu.
Eliah Kagan
6

Secara default, tidak ada tempat di mana semua perintah direkam dan disimpan tanpa batas, meskipun ~/.bash_historyberisi beberapa perintah terakhir (jika Anda menggunakan bash, yang merupakan shell default di Ubuntu).

Jika Anda ingin setiap perintah yang diketik bashdirekam selamanya , Anda harus mengaturnya sendiri. Misalnya, Anda bisa memasukkan yang berikut ini di ~/.bashrcfile Anda untuk mencatat semua perintah yang diketik dalam bashshell ke 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

Di atas membuat jebakan DEBUG, yang dieksekusi tepat sebelum perintah biasa dijalankan. The callerbuilt-in yang digunakan untuk menguji apakah perintah yang diketik pada shell interaktif atau dijalankan melalui sesuatu seperti ~/.bashrc. Nilai ${BASH_COMMAND}berisi perintah yang sedang dieksekusi.

Richard Hansen
sumber
Saya ingin mencatat bahwa pada macOS, teknik ini juga mencatat update_terminal_cwddalam file histori, yang merupakan perintah yang tidak dijalankan oleh pengguna, tetapi secara otomatis dijalankan.
Ashish Ahuja
5

Sesuatu yang mungkin juga menarik bagi Anda adalah bagaimana mencari melalui riwayat perintah Anda sebelumnya. Anda dapat membalikkan pencarian riwayat Anda pada baris perintah dengan menekan Ctrl+rdan kemudian mengetik huruf yang ingin Anda cocokkan. Jika Anda memiliki lebih dari satu perintah yang cocok, tekan Ctrl+rlagi. Untuk keluar dari pencarian terbalik, tekan Ctrl+g.

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

Sepero
sumber
4

Anda hanya dapat kembali sejauh batas sejarah Anda ditetapkan; setelah mencapai titik itu, sejarah akan mulai ditimpa. Namun, dimungkinkan untuk memiliki ukuran sejarah yang lebih besar untuk masa depan. Masukkan ini ke dalam .bashrc Anda dan tentukan nilainya (milik saya adalah 1000):

export HISTSIZE=1000

sumber