Làm thế nào để tìm lịch sử của các lệnh shell kể từ khi máy được tạo?


23

Tôi đã tạo ra một máy ảo Ubuntu vài tuần trước và đã làm việc trên các dự án và kể từ đó.

Bây giờ tôi muốn tìm cú pháp của một số lệnh tôi đã nhập vào thiết bị đầu cuối một tuần trước, nhưng tôi đã mở và đóng cửa sổ thiết bị đầu cuối và khởi động lại máy nhiều lần.

Làm cách nào tôi có thể nhận historylệnh để quay lại lệnh đầu tiên tôi đã nhập sau khi tôi tạo máy?
Hoặc có nơi nào khác mà tất cả các lệnh được lưu trữ trong Ubuntu không?


2
Theo tôi biết bạn không thể. Bạn chỉ có thể quay lại chừng nào bộ đệm lịch sử đã được đặt. Nếu bạn đang hỏi về gói nào bạn có thể cài đặt để lưu vô hạn lịch sử lệnh trong tương lai, có lẽ bạn nên xem lại câu hỏi của mình.
RobotHumans

Câu trả lời:


26

Nó có thể hoặc không thể có được tất cả các lệnh. Nó phụ thuộc vào số lượng lệnh bạn đã thực hiện và cách đặt giới hạn lịch sử.

Tuy nhiên, bạn có thể thấy danh sách lịch sử được lưu trữ ở đây

/home/<YOUR_USERNAME>/.bash_history

Câu hỏi liên quan (để xử lý nhiều lịch sử shell):

Có thể thực hiện viết vào .bash_history ngay lập tức không?


3
Không đúng khi lịch sử chỉ được lưu từ một thiết bị đầu cuối / vỏ. Khi bạn chạy history, nó hiển thị lịch sử của shell hiện tại là gần đây nhất và lịch sử từ tất cả các shell khác (bao gồm cả shell trong các phiên trước đó, bao gồm cả các chu kỳ công suất) trước đó. Tất cả các trường hợp vỏ tiết kiệm lịch sử của họ để .bash_historykhi thoát khỏi. Không có trường hợp lưu nó ở đó tự động, trước thời điểm đó.
Eliah Kagan

6

Theo mặc định, không có nơi nào mà tất cả các lệnh được ghi lại và lưu giữ vô thời hạn, mặc dù ~/.bash_historycó chứa một vài lệnh trong quá khứ (nếu bạn sử dụng bash, đó là vỏ mặc định trong Ubuntu).

Nếu bạn muốn mọi lệnh được nhập vào bashđược ghi lại mãi mãi , bạn phải tự thiết lập nó. Ví dụ: bạn có thể đặt các mục sau trong ~/.bashrctệp của mình để ghi nhật ký tất cả các lệnh được nhập trong trình bashbao vào tệp ~/.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

Ở trên đặt bẫy trên DEBUG, được thực thi ngay trước khi một lệnh thông thường được thực thi. Các callerbuilt-in được sử dụng để kiểm tra xem các lệnh đã được gõ vào một vỏ tương tác hoặc chạy qua một cái gì đó giống như ~/.bashrc. Giá trị ${BASH_COMMAND}chứa lệnh hiện đang được thực thi.


Tôi muốn lưu ý rằng trên macOS, kỹ thuật này cũng đăng nhập update_terminal_cwdvào tệp lịch sử, đây là lệnh mà người dùng không chạy, nhưng sẽ tự động chạy.
Ashish Ahuja

5

Một điều cũng có thể khiến bạn quan tâm là làm thế nào để tìm kiếm trong lịch sử lệnh trước đó của bạn. Bạn có thể đảo ngược tìm kiếm lịch sử của bạn trên dòng lệnh bằng cách nhấn Ctrl+rvà sau đó nhập các chữ cái bạn muốn khớp. Nếu bạn có nhiều lệnh khớp, bấm Ctrl+rlại. Để thoát khỏi tìm kiếm ngược, nhấn Ctrl+g.

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


4

Bạn chỉ có thể quay lại cho đến khi giới hạn lịch sử của bạn được đặt; Một khi nó đã đạt đến điểm đó, lịch sử sẽ bắt đầu bị ghi đè. Tuy nhiên, có thể có một kích thước lịch sử lớn hơn cho tương lai. Đặt cái này vào .bashrc của bạn và chỉ định một giá trị (giá trị của tôi được đặt ở 1000):

export HISTSIZE=1000
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.