Có hai biến kiểm soát kích thước lịch sử:
HISTFILESIZE Số lượng dòng tối đa có trong tệp lịch sử. Khi biến này được gán một giá trị, tệp lịch sử sẽ bị cắt ngắn, nếu cần, để chứa không quá số dòng đó bằng cách xóa các mục cũ nhất. Tệp lịch sử cũng bị cắt ngắn theo kích thước này sau khi ghi nó khi thoát khỏi trình bao. Nếu giá trị là 0, tệp lịch sử bị cắt ngắn về kích thước không. Các giá trị không phải là số và giá trị số nhỏ hơn 0 sẽ ngăn chặn việc cắt bớt. Shell đặt giá trị mặc định thành giá trị của HISTSIZE sau khi đọc bất kỳ tệp khởi động nào.
và
LỊCH SỬ Số lượng các lệnh cần nhớ trong lịch sử lệnh (xem LỊCH SỬ bên dưới). Nếu giá trị là 0, các lệnh không được lưu trong danh sách lịch sử. Giá trị số nhỏ hơn 0 kết quả trong mỗi lệnh được lưu trong danh sách lịch sử (không có giới hạn). Shell đặt giá trị mặc định là 500 sau khi đọc bất kỳ tệp khởi động nào.
Hai biến này cho phép bạn kiểm soát hành vi của lịch sử của bạn. Về cơ bản, HISTSIZE
là số lượng lệnh được lưu trong phiên hiện tại của bạn và HISTFILESIZE
là số lượng lệnh sẽ được ghi nhớ trong các phiên. Ví dụ:
$ echo $HISTSIZE
10
$ echo $HISTFILESIZE
5
$ history | wc
10 29 173
Trong ví dụ trên, vì HISTSIZE
được đặt thành 10, history
trả về danh sách 10 lệnh. Tuy nhiên, nếu bạn đăng xuất và sau đó đăng nhập lại, history
sẽ chỉ trả về 5 lệnh vì HISTFILESIZE
được đặt thành 5. Điều này là do, khi bạn thoát phiên, HISTFILESIZE
dòng lịch sử của bạn được lưu vào tệp lịch sử của bạn ( ~/.bash_history
theo mặc định nhưng được kiểm soát bởi HISTFILE
). Nói cách khác, các lệnh được thêm vào cho HISTFILE
đến khi đạt đến $HISTFILESIZE
các dòng tại điểm đó, mỗi dòng tiếp theo được thêm vào có nghĩa là lệnh đầu tiên của tệp sẽ bị xóa.
Bạn có thể đặt giá trị của các biến này trong ~/.profile
(hoặc ~/.bash_profile
nếu tệp đó tồn tại). Không đặt chúng ở vị trí ~/.bashrc
đầu tiên của bạn vì chúng không có doanh nghiệp nào được đặt ở đó và thứ hai vì điều đó sẽ khiến bạn có hành vi khác nhau trong đăng nhập so với vỏ không đăng nhập có thể dẫn đến các vấn đề khác .
Các biến hữu ích khác cho phép bạn tinh chỉnh hành vi của lịch sử của bạn là:
HISTIGNORE
: Điều này cho phép bạn bỏ qua một số lệnh phổ biến hiếm khi được quan tâm. Ví dụ: bạn có thể đặt:
export HISTIGNORE="pwd:df:du"
Điều đó sẽ gây ra bất kỳ lệnh bắt đầu với pwd
, df
hoặc du
sẽ bị loại bỏ và không được lưu trong lịch sử của bạn.
HISTCONTROL
: Cái này cho phép bạn chọn cách lịch sử hoạt động. Cá nhân, tôi đặt nó HISTCONTROL=ignoredups
làm cho nó lưu các lệnh trùng lặp chỉ một lần. Các tùy chọn khác là ignorespace
bỏ qua các lệnh bắt đầu bằng khoảng trắng và erasedups
điều này làm cho tất cả các dòng trước khớp với dòng hiện tại bị xóa khỏi danh sách lịch sử trước khi dòng đó được lưu. ignoreboth
là tốc ký cho không gian và bỏ qua.
HISTTIMEFORMAT
: Điều này cho phép bạn đặt định dạng thời gian của tệp lịch sử. Xem câu trả lời của Pandya hoặc đọc man bash
để biết chi tiết.
Để tinh chỉnh hơn nữa, bạn có:
Các histappend
tùy chọn bash. Điều này có thể được thiết lập bằng cách chạy shopt -s histappend
hoặc thêm lệnh đó vào của bạn ~/.bashrc
. Nếu tùy chọn này được đặt
danh sách lịch sử được gắn vào tệp được đặt tên theo giá trị của biến HISTFILE khi shell thoát, thay vì ghi đè lên tệp.
Điều này rất hữu ích vì nó cho phép bạn kết hợp lịch sử của các phiên khác nhau (ví dụ như các thiết bị đầu cuối khác nhau).
Các history
lệnh có hai tùy chọn hữu ích:
Ví dụ, bạn có thể thêm hai lệnh này vào lệnh PROMPT_COMMAND
(được thực thi mỗi khi trình bao của bạn hiển thị lời nhắc, vì vậy bất cứ khi nào bạn khởi động trình bao mới và sau mỗi lệnh bạn chạy trong đó):
export PROMPT_COMMAND='history -a;history -r;'
Kết hợp lại, họ đảm bảo rằng bất kỳ thiết bị đầu cuối mới nào bạn mở sẽ ngay lập tức nhập lịch sử của bất kỳ phiên shell nào khác. Kết quả là một lịch sử chung trên tất cả các thiết bị đầu cuối / phiên vỏ.