วิธีการล้างประวัติทุบตีอย่างสมบูรณ์?


254

ฉันต้องการล้างคำสั่งก่อนหน้าทั้งหมดจากประวัติของเซิร์ฟเวอร์ของฉัน ฉันใช้history -cและดูเหมือนว่าทุกสิ่งจะถูกล้าง แต่เมื่อฉันไปที่เซิร์ฟเวอร์คำสั่งทั้งหมดยังคงอยู่ที่นั่น

ฉันจะล้างพวกมันอย่างถาวรได้อย่างไร

คำตอบ:


332

ไฟล์~/.bash_historyเก็บประวัติ

หากต้องการล้างประวัติทุบตีทั้งหมดบนเซิร์ฟเวอร์ให้เปิดเทอร์มินัลแล้วพิมพ์

cat /dev/null > ~/.bash_history

วิธีอื่นอื่น ๆ คือการเชื่อมโยง~/.bash_historyไปยัง/dev/null

อย่างไรก็ตาม

หนึ่งผลข้างเคียงที่น่ารำคาญคือรายการประวัติมีสำเนาในหน่วยความจำและมันจะล้างกลับไปยังแฟ้มเมื่อคุณออกจากระบบ

หากต้องการแก้ไขปัญหานี้ให้ใช้คำสั่งต่อไปนี้ (ใช้งานได้สำหรับฉัน):

cat /dev/null > ~/.bash_history && history -c && exit

17
คุณยังสามารถใส่คำสั่งด้านบนใน. bashrc & .bash_logout หมายความว่าอย่างไรเมื่อคุณลงชื่อเข้าใช้คุณจะมีประวัติที่ชัดเจน & เมื่อคุณออกจากระบบประวัติของคุณจะถูกล้าง
Qasim

26
ทำไมคุณต้องการ / dev / null ที่นั่น? จะไม่> ~/.bash_hstoryเพียงพอหรือ
กำหนดค่า

4
ใช่มันจะเพียงพอ!
ตั้งแต่

3
ฉันพยายามที่จะทำมันในกล่องราสเบอร์รี่ในขณะที่เชื่อมต่อผ่าน SSH ฉันเพิ่มคำสั่งข้างต้น (cat / dev / null> ~ / .bash_history && history -c && exit) ให้กับทั้ง. bashrc & .bash_logout ตามที่แนะนำโดย @Qasim ทันทีที่ฉันเชื่อมต่อผ่าน SSH รีโมตโฮสต์จะปิดการเชื่อมต่อ (หลังจากพิมพ์ motd) ช่วย: /
ขั้นสูง

14
ไปเพื่อแสดงว่าเกิดอะไรขึ้นเมื่อคุณทำสิ่งต่าง ๆ โดยไม่อ่านอย่างถูกต้องและไม่เข้าใจการประมวลผลและการไหลของข้อมูล นอกจากนี้ยังแสดงถึงข้อผิดพลาดของการสื่อสารที่ไม่ดี สิ่งที่ devav2 ทำนั้นถูกเรียกใช้ครั้งเดียวและสิ่งที่ Qasim ควรเขียนไว้คือการลบคำสั่ง exit ก่อนเพิ่มในสคริปต์การเข้าสู่ระบบ
ศรี

141

สิ่งที่ต้องทำ:

ในทุก ๆ bash shell ที่เปิดอยู่ (คุณอาจเปิดเทอร์มินัลหลายเครื่อง):

history -c
history -w

เหตุผล: ตามที่ระบุไว้ข้างต้นเปล่าไฟล์history -c ~/.bash_historyเป็นสิ่งสำคัญที่ต้องทราบว่า bash shell ไม่ได้ล้างประวัติไปยังไฟล์ bash_history ทันที ดังนั้นจึงเป็นสิ่งสำคัญที่จะ (1) ล้างประวัติไปยังแฟ้มและ (2) ล้างประวัติความเป็นมาในอาคารทั้งหมด นั่นคือสิ่งที่คำสั่งข้างต้นทำ

ข้อมูลอ้างอิง: http://www.giannistsakiris.com/index.php/2007/09/13/how-to-clear-bash-history-and-what-to-watch-out-for/


3
ที่จริงแล้ววิธีอื่น ๆ ก็ใช้ได้สำหรับฉัน
kristianp

24
ในหลายกรณีคุณสามารถรวมคำสั่งสองคำนี้เข้าด้วยกัน:history -cw
เอลเลียต

2
ด้วยเหตุผลบางอย่างสิ่งนี้ไม่ทำงานบน Ubuntu 14.04 หรืออาจเป็นอย่างอื่น มันควร แต่มันก็ไม่ได้ หากคุณออกคำสั่ง "history -cw" คุณสามารถยืนยันด้วยลูกศรขึ้นที่ประวัติไม่ได้อยู่ที่นั่นอีกต่อไป แต่ถ้าคุณเริ่มต้นหน้าต่างเทอร์มินัลอื่น (ใน Unity เดสก์ท็อป) ด้วย shift + คลิกที่ไอคอนเทอร์มินัล ตรึงไว้ในตัวเรียกใช้) ประวัติคำสั่งจะกลับมาไม่ว่าคุณจะทำ "history -cw" กี่ครั้งก็ตาม "cat / dev / null> ~ / .bash_history" เป็นวิธีเดียวที่เหมาะกับฉัน
Hatoru Hansou

ในขณะที่ฉันไม่ใช่ Ubantu ทำงานได้ดีสำหรับ bash shell ใน OSX
Scott Biggs

3
มันเป็นประวัติศาสตร์ -c แล้วตามด้วยประวัติ -w คุณต้องล้างประวัติก่อนแล้วจึงเขียนการเปลี่ยนแปลง นี่เป็นการยืนยันได้อย่างง่ายดายโดยการปิดเทอร์มินัลและเปิดอีกครั้งโดยมี -w คำสั่งแรกจะมีอีกครั้งด้วย -w ประวัติที่ผ่านมาจะถูกล้างอย่างมีประสิทธิภาพ
Hatoru Hansou

56

ดำเนินการคำสั่งต่อไปนี้เพื่อล้างประวัติตลอดไป

history -c && history -w

โชคดี!


3
ดีกว่าคำตอบที่ได้รับการยอมรับ ;)
Chiramisu

คำตอบนี้จะเป็นประโยชน์มากยิ่งขึ้นถ้ามันอธิบายว่าแฟล็กเหล่านี้ทำอะไร (และเพราะเหตุใด / เมื่อใดจึงเป็นคำสั่งที่ถูกต้องในการใช้)
LarsH

20

มีอีกวิธีหนึ่งที่ง่ายกว่ามาก: การเรียกใช้งานhistory -cพรอมต์เทอร์มินัลและไปเป็นรายการทั้งหมดในbash_historyไฟล์


ไม่มันไม่ใช่. ออกจากระบบเข้าสู่ระบบลูกศรขึ้นให้ฉันทุกอย่าง คุณต้องการ "history -w" ด้วย
stolsvik

1
หากคุณอ่านคำถามของ OP คุณจะรู้ว่าการใช้history -cเป็นวิธีที่แน่นอนที่นำไปสู่คำถามนี้
J.Money

10

อีกวิธีในการทำเช่นนี้คือการลบ~/.bash_historyไฟล์โดยใช้rm ~/.bash_historyคำสั่ง เมื่อคุณลงชื่อเข้าใช้อีกครั้ง.bash_historyไฟล์จะถูกสร้างขึ้นโดยอัตโนมัติ


4
อย่างน้อยในบาง OSes ~ / .bash_history จะถูกเขียนไปยังดิสก์เมื่อคุณออกจากระบบ - ไม่แน่ใจเกี่ยวกับ * buntus
d -_- b

7

ล้างประวัติของเชลล์ปัจจุบัน:

history -c

เมื่อคุณออกจากระบบประวัติเชลล์ปัจจุบันของคุณจะถูกผนวกเข้ากับ ~ / .bash_history ซึ่งเป็นแคชของประวัติเชลล์ของเชลล์ก่อนหน้าเป็นจำนวนสูงสุด (ดู HISTFILESIZE ใน "man bash")

หากคุณต้องการลบประวัติทั้งหมดคุณต้องลบข้อมูล ~ / .bash_history ซึ่งรายการข้างต้นจำนวนมากได้แนะนำ เช่น:

history -c && history -w

สิ่งนี้จะล้างประวัติของเชลล์ปัจจุบันและจากนั้นบังคับให้ประวัติของเชลล์ปัจจุบัน (ว่าง) เพื่อเขียนทับ ~ / .bash_history .... หรือให้แม่นยำยิ่งขึ้นมันบังคับให้เขียนทับ HISTFILE (ซึ่งเป็นค่าเริ่มต้นที่

หวังว่านี่จะช่วยได้


4
คำตอบของคุณนั้นถูกต้อง แต่คำถามนั้นมีอายุสองปียอมรับคำตอบและรวมคำตอบเดียวกับที่คุณให้ไว้
ชาร์ลส์กรีน

6
rm ~/.bash_history; history -c; logout

ตอนนี้กลับเข้าสู่ระบบและเป็นพยานว่าลูกศรของคุณไม่ให้อะไรเลย


1
@KasiyA เกี่ยวกับเซิร์ฟเวอร์และเซสชัน ssh ดังนั้นไม่จำเป็นต้องแก้ไข ...
Radu Rădeanu

0

ลองอันนี้

แก้ไขของคุณ.profileและเพิ่มบรรทัดด้านล่างในตอนท้ายของไฟล์

rm -f .bash_history

ด้วยวิธีนี้ทุกครั้งที่คุณลงชื่อเข้าใช้มันจะลบไฟล์. bash_history ของคุณโดยอัตโนมัติ การเพิ่มตัวเลือกการลบ -r ซ้ำเกิดอันตรายและไม่จำเป็น

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