ใช้ Launchd เพื่อล้างประวัติทุบตี?

Oct 23 2020

คำชี้แจง: ฉันไม่ต้องการทำลายhistoryฉันกำลังมองหาวิธีที่จะกำจัดมันเป็นระยะ ๆlaunchdเพื่อความปลอดภัย

ใช้cat /dev/null > ~/.bash_historyเพื่อล้างประวัติทุบตีตามที่เห็นในการสนทนา * nix หลายรายการเป็นวิธีที่มีประสิทธิภาพมากที่สุด

ดังนั้นฉันจึงใส่มันลงในเชลล์สคริปต์ที่ทำงานในlaunchdแต่หลังจากนั้นไม่นานฉันก็ตระหนักได้ว่ามันทำงานอยู่มันไม่ได้ล้างประวัติ

เป็นไปได้ไหมที่จะล้างประวัติ bash ด้วยวิธีนี้ผ่าน bash script หรือสามารถทำได้ด้วยตนเองในฐานะผู้ใช้เท่านั้น? บางทีฉันอาจต้องเรียกใช้คำสั่งโดยตรงใน. plist ไม่ใช่ผ่าน bash script?

หมายเหตุ: ฉันมีสคริปต์อื่นที่ทำงานอย่างถูกต้องผ่าน launchd ดังนั้นคำถามจึงเกี่ยวกับความสามารถในการล้างประวัติผ่านตัวแทนอย่างเคร่งครัด

ขอขอบคุณ

อัปเดต: พบไซต์ที่ยอดเยี่ยมที่ช่วยสร้างlaunchdสคริปต์หากสิ่งนี้ช่วยทุกคน ไม่สามารถรับรองได้ แต่ง่ายกว่าการแฮ็ก XML มาก ดูเหมือนว่าจะใช้sh -cสำหรับคำสั่งทั้งหมดดังนั้นไม่แน่ใจว่าทำไมถึงเป็นเช่นนั้น

เครื่องกำเนิดไฟฟ้า Launchd plist http://launched.zerowidth.com/

คำตอบ

5 Seamus Oct 23 2020 at 16:25

bashประวัติของคุณประกอบด้วย "ประวัติ" สองรายการไม่ใช่เรื่องเดียว หนึ่งในประวัติศาสตร์เหล่านี้จะถูกเก็บไว้ในแฟ้ม - ขนาด / HISTFILESIZEลึกถูกควบคุมโดยพารามิเตอร์ ประวัติศาสตร์อื่น ๆ ที่เก็บไว้ชั่วคราวในหน่วยความจำ - HISTSIZEขนาดของมันถูกควบคุมโดยพารามิเตอร์

คุณสามารถตรวจสอบขนาด / ความลึกของประวัติของคุณ:

$ echo $HISTFILESIZE 
$ echo $HISTSIZE

เหตุผลของสองประวัติคือหนึ่งเชื่อมโยงกับแต่ละเซสชันเชลล์ ( HISTSIZE) ในขณะที่ประวัติอื่น ๆ เป็นไฟล์~/.bash_historyที่ "ถาวร" และในที่สุดจะได้รับประวัติเซสชันเมื่อมีการใช้งานเกินความลึกสูงสุดหรือเมื่อเซสชันสิ้นสุดลง มันซับซ้อนเล็กน้อยในการอธิบายและรูปภาพด้านล่างอาจช่วยให้ความสัมพันธ์ระหว่างประวัติศาสตร์ทั้งสองนี้ชัดเจน

แต่กลับไปที่วัตถุประสงค์ของคุณ:

แทนที่จะทำตามขั้นตอนเพื่อลบประวัติของคุณคุณสามารถตั้งค่าHISTSIZEและHISTFILESIZEเป็นศูนย์ใน~/.bashrc:

HISTSIZE=0
HISTFILESIZE=0

หากนั่นไม่ใช่สิ่งที่คุณต้องการคุณสามารถลบไฟล์ประวัติเป็นระยะ ๆ ได้ แต่อย่าลืมลบประวัติเซสชัน .plistไม่จำเป็นต้องลบไฟล์ประวัติของคุณโดยการสร้างไฟล์ historyคำสั่งเป็นเครื่องมือที่จะใช้สำหรับงานนี้ (ดูhistory --helpรายละเอียด) คำสั่งต่อไปนี้จะลบประวัติเซสชันหนึ่งรายการ :

$ history -cw

การลบเนื้อหาออกจากไฟล์ประวัติ ( ~/.bash_history) ทำได้ตามอัตภาพ:

$ > ~/.bash_history

คุณสามารถใส่คำสั่งหนึ่งหรือทั้งสองคำสั่งเหล่านี้ใน a crontabได้ แต่คุณจะต้องแน่ใจว่าเชลล์เริ่มต้นเป็นไปbashตามที่historyมีอยู่ในตัว

สำหรับพื้นหลังที่เกี่ยวข้องในบางเรื่องของประวัติศาสตร์เปลือกคุณสามารถอ่าน Q & A ที่เกี่ยวข้อง มันเกี่ยวข้องกับzsh- ไม่ใช่bashแต่หลักการเหมือนกัน

5 jksoegaard Oct 23 2020 at 14:41

ดูเหมือนว่าคุณได้หาวิธีแก้ปัญหาที่ซับซ้อนมากสำหรับปัญหาที่ไม่ต้องการ bash_history

ฉันขอแนะนำว่าแทนที่จะล้างประวัติเป็นระยะจาก launchd คุณควรปิดการบันทึกประวัติ:

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

ปิดแท็บเทอร์มินัลแล้วเปิดแท็บใหม่ - ประวัติของคุณจะไม่ถูกบันทึกอีกต่อไป