Sử dụng Launcd để xóa lịch sử bash?

Oct 23 2020

Làm rõ: Tôi không tìm cách phá hủy history, tôi đang tìm kiếm các biện pháp để thanh lọc định kỳ thông qua launchdvì mục đích bảo mật

Đã sử dụng cat /dev/null > ~/.bash_historyđể xóa lịch sử bash như đã thấy trong nhiều cuộc trò chuyện * nix là cách hiệu quả nhất để làm như vậy.

Vì vậy, tôi đặt nó vào một tập lệnh shell để chạy trong đó launchd, nhưng sau một thời gian, tôi nhận ra rằng mặc dù nó chạy nhưng nó không xóa lịch sử.

Có thể xóa lịch sử bash theo cách này thông qua tập lệnh bash không hay chỉ có thể thực hiện thủ công với tư cách người dùng? Có lẽ tôi cần chạy lệnh trực tiếp trong .plist và không phải thông qua tập lệnh bash?

Lưu ý: Tôi có các tập lệnh khác đang chạy chính xác thông qua Launcd, vì vậy câu hỏi đặt ra là có thể xóa lịch sử thông qua một tác nhân

Cảm ơn bạn

Cập nhật: Tìm thấy trang web thú vị này giúp tạo launchdtập lệnh nếu điều này giúp ích cho bất kỳ ai. Không thể đảm bảo điều đó nhưng nó dễ hơn nhiều so với hack XML. Nó dường như sử dụng sh -ccho tất cả các lệnh, vì vậy không chắc tại sao lại như vậy.

máy phát điện plist launcd http://launched.zerowidth.com/

Trả lời

5 Seamus Oct 23 2020 at 16:25

bashLịch sử của bạn bao gồm hai "lịch sử", không phải một. Một trong những lịch sử này được lưu trữ trong một tệp - kích thước / độ sâu của nó được điều chỉnh bởi tham số HISTFILESIZE. Lịch sử khác được lưu trong bộ nhớ - kích thước của nó được điều chỉnh bởi tham số HISTSIZE.

Bạn có thể kiểm tra kích thước / độ sâu lịch sử của mình:

$ echo $HISTFILESIZE 
$ echo $HISTSIZE

Lý do cho hai lịch sử là một lịch sử được liên kết với mỗi phiên shell ( HISTSIZE), trong khi lịch sử kia là tệp ~/.bash_history"vĩnh viễn" và cuối cùng nhận được lịch sử phiên khi chúng chạy quá độ sâu tối đa của chúng hoặc khi phiên kết thúc. Điều đó hơi phức tạp để giải thích, và hình ảnh dưới đây có thể giúp làm rõ mối quan hệ giữa hai lịch sử này.

Nhưng quay lại mục tiêu của bạn:

Thay vì thực hiện các bước để xóa lịch sử của mình, bạn có thể chỉ cần đặt HISTSIZEHISTFILESIZEvề 0 trong ~/.bashrc:

HISTSIZE=0
HISTFILESIZE=0

Nếu đó không phải là những gì bạn muốn, bạn chắc chắn có thể xóa tệp lịch sử theo định kỳ, nhưng hãy biết rằng điều đó không xóa lịch sử phiên . Xóa tệp lịch sử của bạn bằng cách tạo .plisttệp là không cần thiết. Các historylệnh là công cụ để sử dụng cho công việc này (xem history --helpđể biết chi tiết). Lệnh sau sẽ xóa lịch sử một phiên :

$ history -cw

Việc xóa nội dung khỏi tệp lịch sử ( ~/.bash_history) được thực hiện theo quy ước:

$ > ~/.bash_history

Bạn có thể đặt một hoặc cả hai lệnh này trong một crontab, nhưng bạn sẽ cần đảm bảo trình bao mặc định bashgiống như historymột trình cài sẵn .

Để biết một số thông tin cơ bản liên quan về chủ đề lịch sử shell, bạn có thể đọc phần Hỏi và Đáp liên quan này . Nó liên quan đến zsh- không bash, nhưng các nguyên tắc đều giống nhau.

5 jksoegaard Oct 23 2020 at 14:41

Có vẻ như bạn đã nghĩ ra một giải pháp rất phức tạp cho vấn đề không muốn có bash_history.

Tôi khuyên rằng thay vì xóa lịch sử theo định kỳ khỏi khởi chạy, bạn chỉ nên tắt ghi lịch sử:

echo 'set +o history' >> ~/.bashrc

Đóng tab đầu cuối và mở tab mới - và lịch sử của bạn sẽ không còn được ghi lại.