เหตุใดการลบประวัติทุบตีจึงไม่เพียงพอ


15

ฉันเคยคิดว่าการลบประวัติทุบตีของฉันก็เพียงพอแล้วที่จะล้างประวัติทุบตีของฉัน แต่เมื่อวานแมวของฉันทำเลอะรอบด้านขวาของแป้นพิมพ์ของฉันและเมื่อฉันกลับไปที่คอมพิวเตอร์ของฉันฉันเห็นสิ่งที่ฉันพิมพ์เมื่อเดือนที่แล้ว กดปุ่มทั้งหมดอย่างบ้าคลั่งที่กำลังมองหาสิ่งที่อาจก่อให้เกิดมัน ปรากฎคีย์ UPARROW แสดงประวัติการทุบตีของฉันแม้หลังจากลบ. bash_history แล้ว

ฉันจะลบประวัติทุบตีของจริงได้อย่างไร


8
.bash_history ถูกเขียนทับทุกครั้งที่คุณปิด bash shell ดังนั้นหากคุณเริ่มทุบตีลบ. bash_history และออกจากระบบคุณจะไม่ประสบความสำเร็จอะไรเลย
Shadur

14
แมวของคุณสมควรได้รับรางวัลใหญ่ คุณใช้ bash นานเท่าไรโดยที่ไม่พบว่ามีการเรียกคืนบรรทัดคำสั่งและแก้ไข? คุณเพิ่งพิมพ์คำสั่งทุกบรรทัดใหม่ทุกครั้งหรือไม่? นั่นจะทำให้เปลือกไม่พึงประสงค์มากที่จะใช้
cas

@ อายุสิบปี ตอนนี้คุณพูดแล้วฉันกด Uparrow เพื่อทำซ้ำคำสั่ง แต่ฉันเข้าใจว่ามันเป็นหน่วยความจำระยะสั้นไม่เกินสองสามบรรทัด ฉันไม่ได้รับคำเตือนว่าการลบ. bash_history จะไม่ลบประวัติทุบตี
รวม

การลบ~/.bash_historyจริงๆไม่ลบ~/.bash_history.... แต่ (เว้นแต่คุณจะดำเนินการเพื่อป้องกันไม่ให้มันเหมือนการล้างประวัติในหน่วยความจำโดยการทำงานhistory -cก่อนที่คุณจะออกจากระบบหรือการตั้งค่าHISTFILE=/dev/nullหรือเพียงแค่unsetไอเอ็นจีได้) ทุบตีจะเพียงแค่บันทึกประวัติศาสตร์ในปัจจุบันอีกครั้งเมื่อออกจาก BTW, HISTSIZEenv var บอกทุบตีจำนวนบรรทัดประวัติศาสตร์ที่จะเก็บไว้ในหน่วยความจำและHISTFILESIZEบอกทุบตีจำนวนบรรทัดประวัติศาสตร์สูงสุดที่จะบันทึก ~/.bashrcทั้งสองแบบนี้สามารถตั้งค่าในเช่นคุณ PS: แมวของคุณสมควรได้รับรางวัลที่ 2 สำหรับการเรียนการสอนบทเรียนที่มีคุณค่า :)
CAS

@cas ฉันคิดว่าการลบ. bash_history ควรลบประวัติทุบตี ดูเหมือนง่ายสำหรับฉัน สิ่งที่ดูเหมือนจะไม่เป็นที่เข้าใจกันก็คือ history -c, history -w, unsetting variables .. ซึ่งเป็นมุมมองประสบการณ์ผู้ใช้
รวม

คำตอบ:


26

ในบางกรณี (บางรุ่นทุบตี) ทำ:

$ history -c; history -w

หรือเพียงแค่

$ history -cw

จะล้างประวัติในหน่วยความจำ (ลูกศรขึ้นและลงจะต้องไม่มีคำสั่งไปยังรายการ) แล้วเขียนว่าไป$HISTFILEไฟล์ (ถ้า$HISTFILEได้รับการตัดทอนโดยอินสแตนซ์ทุบตีทำงาน)

บางครั้งทุบตีเลือกที่จะไม่ตัดทอน$HISTFILEไฟล์แม้จะมีhistappendตัวเลือก unset และ$HISFILEZIZEตั้งค่าเป็น 0

ในกรณีเช่นนี้ตัวเลือก nuke จะทำงานเสมอ:

history -c; >$HISTFILE

ล้างรายการประวัติของคำสั่งที่บันทึกในหน่วยความจำและคำสั่งทั้งหมดที่บันทึกไว้ก่อนหน้าไปยังไฟล์ เพื่อให้แน่ใจว่าเชลล์ที่กำลังรันไม่มีประวัติที่บันทึกไว้ไม่ว่าในหน่วยความจำหรือดิสก์อย่างไรก็ตามอินสแตนซ์ที่กำลังรันอื่นของ bash (ที่มีการเปิดใช้งานประวัติ) อาจมีสำเนาคำสั่งทั้งหมดอ่าน$HISTFILEเมื่อเริ่ม bash (หรือเมื่อhistory -rถูกเรียกใช้) .

ถ้ามันเป็นยังจำเป็นต้องมีอะไรที่อื่น (ไม่มีคำสั่งใหม่) ของเซสชั่นปัจจุบันจะถูกเขียนไปยังแฟ้มประวัติแล้วunset HISTFILEจะป้องกันไม่ให้เข้าสู่ระบบใด ๆ ดังกล่าว


1
การแก้ไข HISTFILE และการทำhistory -c && history -rจะแทนที่ประวัติปัจจุบันของคุณด้วยประวัติการแก้ไขด้วยตนเอง ในบางกรณีนั่นอาจจะดีกว่าการทิ้งประวัติทั้งหมดทิ้งไป
Mikko Rantalainen

9

bashมีประวัติเซสชันในหน่วยความจำซึ่งเขียนลงไฟล์ถ้าตัวแปรเชลล์HISTFILEถูกตั้งค่าเป็นชื่อไฟล์เมื่อbashออก

หากคุณลบไฟล์ที่ชี้ไปให้HISTFILEยกเลิกการตั้งค่าตัวแปรนั้นและออกbashนั้นเซสชันของเชลล์นั้นจะไม่ทิ้งประวัติถาวรใด ๆ ไว้

ความล้มเหลวในการยกเลิกการตั้งค่าHISTFILEตัวแปร แต่การลบไฟล์จะเป็นการล้างประวัติถาวร แต่ประวัติของเซสชันปัจจุบันจะถูกบันทึกเมื่อเชลล์ออก


3
history -c; history -wจะล้างหน่วยความจำและประวัติไฟล์ การยกเลิกการตั้งค่า HISTFILE นั้นจำเป็นเฉพาะในกรณีที่ไม่มีคำสั่งเพิ่มเติมที่ควรบันทึกไว้ในประวัติ (ไม่ใช่สิ่งที่ถูกถามด้วย IMhO)
Isaac

-1

"ฉันจะลบประวัติทุบตีของจริงได้อย่างไร"

ออกจากทุบตีเริ่มเปลือกใหม่ลบไฟล์ประวัติทุบตี

หรือ

ออกจากระบบเข้าสู่ระบบบัญชีอื่นที่มีสิทธิ์ในการเขียนไฟล์ประวัติลบไฟล์ประวัติ


-2

ในขณะที่ออกจากเชลล์ให้ทำทั้งหมดในครั้งเดียวเช่น

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

@roaima คุณพูดถูกต้องขอขอบคุณ การแก้ไข
user853069
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.