Tại sao xóa lịch sử bash là không đủ?


14

Tôi đã từng nghĩ xóa lịch sử bash của mình là đủ để xóa lịch sử bash của tôi, nhưng hôm qua con mèo của tôi đã làm rối tung bên phải bàn phím của tôi và khi tôi quay lại máy tính, tôi thấy một cái gì đó tôi đã gõ một tháng trước, sau đó tôi bắt đầu nhấn tất cả các phím như điên tìm kiếm những gì có thể kích hoạt nó. Hóa ra khóa UPARWAY hiển thị lịch sử bash của tôi ngay cả sau khi xóa .bash_history.

Làm thế nào tôi có thể xóa lịch sử bash của tôi cho thật?


8
.bash_history bị ghi đè mỗi khi bạn đóng vỏ bash. Vì vậy, nếu bạn bắt đầu bash, xóa .bash_history và đăng xuất, bạn sẽ hoàn thành chính xác mọi thứ.
Shadur

14
Con mèo của bạn xứng đáng nhận được một phần thưởng lớn. Bạn đã sử dụng bash trong bao lâu mà không phát hiện ra nó có lệnh thu hồi và chỉnh sửa dòng lệnh? Bạn chỉ cần gõ lại mỗi dòng lệnh từ đầu mỗi lần hoặc một cái gì đó? Điều đó sẽ làm cho vỏ rất khó sử dụng.
cas

@cas mười năm. Bây giờ bạn nói điều đó, tôi nhấn Uparrow để lặp lại các lệnh, nhưng tôi hiểu nó là một loại bộ nhớ 'ngắn hạn' không quá vài dòng. Tôi đã không cảnh báo rằng việc xóa .bash_history sẽ không xóa lịch sử bash.

Xóa ~/.bash_historythực sự xóa ~/.bash_history.... nhưng (trừ khi bạn thực hiện các bước để ngăn chặn nó, như xóa lịch sử trong bộ nhớ bằng cách chạy history -cngay trước khi bạn đăng xuất hoặc cài đặt HISTFILE=/dev/nullhoặc chỉ sử dụng unsetnó) bash sẽ chỉ lưu lại lịch sử hiện tại của nó khi nó thoát . BTW, HISTSIZEenv var cho bash biết có bao nhiêu dòng lịch sử sẽ lưu trong bộ nhớ và HISTFILESIZEcho bash biết số lượng tối đa của dòng lịch sử sẽ lưu. cả hai trong số này có thể được thiết lập, ví dụ, của bạn ~/.bashrc. Tái bút: con mèo của bạn xứng đáng nhận phần thưởng thứ 2 vì đã dạy cho bạn một bài học quý giá :)
cas

@cas Tôi nghĩ xóa .bash_history nên xóa lịch sử bash. Nó có vẻ trực quan với tôi. Những gì nó dường như không có ý nghĩa là lịch sử -c, lịch sử -w, bỏ đặt các biến .. đó là các khía cạnh từ quan điểm trải nghiệm người dùng.

Câu trả lời:


24

Trong một số trường hợp (một số phiên bản bash), thực hiện:

$ history -c; history -w

Hoặc đơn giản

$ history -cw

Sẽ xóa lịch sử trong bộ nhớ (mũi tên lên và xuống sẽ không có lệnh nào để liệt kê) và sau đó ghi vào $HISTFILEtệp (nếu $HISTFILEbị cắt bởi cá thể bash đang chạy).

Đôi khi bash chọn không cắt bớt $HISTFILEtệp ngay cả khi histappendkhông đặt tùy chọn và $HISFILEZIZEđặt thành 0.

Trong những trường hợp như vậy, tùy chọn nuke luôn hoạt động:

history -c; >$HISTFILE

Điều đó xóa danh sách lịch sử của các lệnh được ghi trong bộ nhớ và tất cả các lệnh trước đó được ghi vào tệp. Điều đó sẽ đảm bảo rằng shell đang chạy không có lịch sử được ghi trong bộ nhớ hoặc đĩa, tuy nhiên, các trường hợp chạy bash khác (nơi lịch sử đang hoạt động) có thể có một bản sao đầy đủ các lệnh được đọc từ $HISTFILEkhi bash được khởi động (hoặc khi a history -rđược thực thi) .

Nếu nó cũng được yêu cầu rằng không có gì khác (không có lệnh mới) của phiên hiện tại sẽ được ghi vào tệp lịch sử, thì, unset HISTFILEsẽ ngăn chặn mọi hoạt động đăng nhập như vậy.


1
Chỉnh sửa HISTFILE và thực hiện history -c && history -rsẽ thay thế lịch sử hiện tại của bạn bằng lịch sử được sửa đổi thủ công. Trong một số trường hợp, điều đó có thể tốt hơn là ném tất cả lịch sử đi.
Mikko Rantalainen

9

bashcó một lịch sử phiên trong bộ nhớ được ghi vào tệp nếu biến shell HISTFILEđược đặt thành tên tệp khi bashthoát.

Nếu bạn xóa tệp được chỉ đến bởi HISTFILE, bỏ đặt biến đó và thoát bash, thì phiên shell đó sẽ không để lại bất kỳ lịch sử liên tục nào.

Không hủy đặt HISTFILEbiến nhưng xóa tệp sẽ chỉ làm trống lịch sử liên tục, nhưng lịch sử của phiên hiện tại sẽ được lưu khi thoát khỏi trình bao.


3
A history -c; history -wsẽ xóa cả bộ nhớ và lịch sử tập tin. Bỏ cài đặt HISTFILE chỉ được yêu cầu nếu không có lệnh nào nữa được ghi vào lịch sử (không chính xác những gì đã được hỏi IMhO).
Isaac

-1

"Làm thế nào tôi có thể xóa lịch sử bash của tôi thực sự?"

Thoát bash, bắt đầu một shell khác, xóa tệp lịch sử bash.

hoặc là

đăng xuất, đăng nhập vào một tài khoản khác có quyền ghi vào tệp lịch sử, xóa tệp lịch sử.


-2

Trong khi rời khỏi vỏ, làm tất cả trong một lần, như

echo "" > ~/.bash_history && history -c && exit

@roaima, bạn hoàn toàn đúng, cảm ơn bạn. Đã sửa.
dùng853069
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.