Câu trả lời:
HISTSIZE
là số lượng dòng hoặc lệnh được lưu trữ trong bộ nhớ trong danh sách lịch sử trong khi phiên bash của bạn đang diễn ra.
HISTFILESIZE
là số dòng hoặc lệnh mà (a) được phép trong tệp lịch sử tại thời điểm khởi động của phiên và (b) được lưu trữ trong tệp lịch sử vào cuối phiên bash của bạn để sử dụng trong các phiên trong tương lai.
Lưu ý phân biệt giữa file
: trên đĩa - và list
: trong bộ nhớ.
Tất cả các thông tin trên + một số ví dụ:
Ví dụ 1 :
HISTFILESIZE=10
vàHISTSIZE=10
histappend
không được bật, các lệnh từ 41 đến 50 được lưu vào HISTFILE của bạn, hiện có 10 lệnh được giữ ở đầu cộng với 10 lệnh mới được viết.Ví dụ 2 :
HISTFILESIZE=10
vàHISTSIZE=5
histappend
không được bật, các lệnh 46 đến 50 được lưu vào HISTFILE của bạn, hiện có 10 lệnh được giữ ở đầu cộng với 5 lệnh mới được viết.Ví dụ 3 :
HISTFILESIZE=5
vàHISTSIZE=10
histappend
không được bật, các lệnh từ 41 đến 50 được lưu vào HISTFILE của bạn, hiện có 5 lệnh được giữ ở đầu cộng với 10 lệnh mới được viết.Thông tin từ elixir_sinari :
"Tệp" lịch sử không được cập nhật khi bạn nhập lệnh. Các lệnh được lưu trữ trong một "danh sách" riêng biệt (được truy cập bởi lệnh history). Số lượng các lệnh được lưu trữ này được kiểm soát bởi giá trị HISTSIZE. Khi hệ vỏ (tương tác) thoát ra, các dòng $ HISTSIZE cuối cùng được sao chép / gắn vào $ HISTFILE từ "danh sách" đó. Nếu HISTFILESIZE được đặt, thì sau thao tác này, đảm bảo rằng chỉ có các dòng $ HISTFILESIZE (mới nhất) tồn tại trong $ HISTFILE. Và khi shell bắt đầu, "danh sách" được khởi tạo từ $ HISTFILE cho đến tối đa các lệnh $ HISTSIZE.
Và từ man bash
trang:
Giá trị của biến HISTSIZE được sử dụng làm số lượng lệnh cần lưu trong danh sách lịch sử. Văn bản của các lệnh HISTSIZE cuối cùng (mặc định 500) được lưu. (...)
Khi khởi động, lịch sử được khởi tạo từ tệp được đặt tên bởi biến HISTFILE (mặc định ~ / .bash_history). Tệp được đặt tên theo giá trị của HISTFILE bị cắt ngắn, nếu cần, để chứa không quá số lượng dòng được chỉ định bởi giá trị của HISTFILESIZE. (...) Khi một vỏ tương tác thoát ra, các dòng $ HISTSIZE cuối cùng được sao chép từ danh sách lịch sử sang $ HISTFILE. Nếu tùy chọn shell histappend được bật (xem mô tả về shopt trong SHELL BUILTIN THÔNG TIN bên dưới), các dòng được gắn vào tệp lịch sử, nếu không, tệp lịch sử sẽ bị ghi đè. Nếu HISTFILE không được đặt hoặc nếu tệp lịch sử không thể ghi được, lịch sử sẽ không được lưu. (...) Sau khi lưu lịch sử, tệp lịch sử bị cắt ngắn để chứa không quá dòng HISTFILESIZE. Nếu HISTFILESIZE không được đặt,
Xây dựng trên những gì arturomp đã nói và trong một nỗ lực để làm cho nó rõ ràng hơn một chút.
Giả sử bạn có 2000 lịch sử lâu dài ..
~$ history
1 sdf
2 fghdfgjf
3 fghfghdf
.. ..
2027 78
2028 57
2029 yu45u
Bạn có thể cắt giảm những gì bạn được hiển thị với HISTSIZE
~$ HISTSIZE=5
~$ history
2026 546
2027 78
2028 56
2029 yu45u
2030 HISTSIZE=5
Bây giờ, cho dù bạn nhập bao nhiêu lệnh, chỉ 5 lệnh cuối cùng sẽ được ghi lại.
~$ ABC
~$ GGH
~$ GSDHFG
~$ JFDR
~$ ABSDDS
~$ AHFGHFD
<close terminal>
<open new terminal>
~$ history
1 sdf
2 fghdfgjf
3 fghfghdf
.. ..
2028 56
2029 yu45u
2030 HISTSIZE=5
2031 GGH
2032 GSDHFG
2033 JFDR
2034 ABSDDS
2035 AHFGHFD
Chúng ta có thể thấy rõ rằng lệnh đầu tiên của chúng tôi ("ABC") không có trong lịch sử vì chỉ có 5 lệnh cuối cùng được ghi lại.
Bây giờ, tổng lịch sử được lưu trữ trong một tệp ( .bash_history
) và bạn có thể thay đổi thời gian tệp này có trong HISTFILESIZE
. Ví dụ với a 2033
HISTFILESIZE
, trong trường hợp của tôi, tôi sẽ có điều này:
~$ history
1 fghfghdf
2 gegege
3 gege
.. ..
2028 HISTSIZE=5
2029 GGH
2030 GSDHFG
2031 JFDR
2032 ABSDDS
2033 AHFGHFD
HISTSIZE=-1
và HISTFILESIZE=-1
.
bash
Trang người đàn ông nói: Non-numeric values and numeric values less than zero inhibit truncation
nhưng sau đó tôi không đủ can đảm để kiểm tra xem điều này có đúng không vì tôi không muốn làm mất lịch sử của mình :-)
HISTSIZE='INFINITY'
và HISTFILESIZE='ANDBEYOND'
. Vì chúng không phải là số nên chúng lưu mọi thứ. Cảm ơn vì tiền hỗ trợ!