การลบประวัติจาก ~ / .bash_history


8

~/.bash_historyฉันมีคำถามที่สองเกี่ยวกับประวัติศาสตร์สายขั้วหรือคำสั่งที่ถูกเก็บไว้ใน

  1. ฉันสามารถดูไฟล์ในเทอร์มินัลด้วยhistoryคำสั่ง แต่ถ้าฉันพยายามที่จะเปิดมันด้วยgedit bash_historyไฟล์นั้นว่างเปล่าอย่างสมบูรณ์ ทำไม?

  2. ฉันพบวิธีลบจำนวนบรรทัดในไฟล์จากเทอร์มินัลด้วยบรรทัดรหัสนี้:

    for i in {1..N}; do history -d N; done

    โดยที่ N คือจำนวนบรรทัด (หรือคำสั่ง) ที่คุณต้องการลบ แต่ตอนนี้ไฟล์ประวัติแสดงคำสั่งสุดท้ายนี้และนั่นไม่ฉลาดมากหากคุณกำลังพยายามปกปิดเนื้อหาของคุณ ดังนั้นคำถามคือ: ฉันจะให้รหัสบรรทัดสุดท้ายและให้แน่ใจว่าสิ่งนี้ไม่ได้รับการบันทึก?



สำหรับบันทึกย่อในอนาคตหากคุณเริ่มต้นคำสั่งใด ๆ ด้วยการเว้นวรรคคำสั่งนั้นจะไม่ถูกบันทึกไว้ในประวัติของคุณ
Paddy Landau

คำตอบ:


18
  1. คุณลืมจุดก่อนหน้านี้คำสั่งเพื่อเปิดไฟล์ประวัติเทอร์มินัล (ทุบตี) ของคุณคือ

    gedit ~/.bash_history

    ไฟล์นี้ได้รับการอัพเดตเมื่อคุณปิดเทอร์มินัลเท่านั้น

  2. หากต้องการลบ10บรรทัดสุดท้ายจากไฟล์นี้และไม่ได้รับการบันทึกคำสั่งนี้ให้เปิดเทอร์มินัลใหม่และดำเนินการคำสั่งต่อไปนี้:

    sed -n -e :a -e '1,10!{P;N;D;};N;ba' ~/.bash_history && history -c && exit

    หรือ

    for i in {1..10}; do sed -i '$d' ~/.bash_history; done && history -c && exit

    หรือ

    head -n -10 ~/.bash_history > ~/.b_h_2 && mv ~/.b_h_2 ~/.bash_history && history -c && exit

    sedหรือheadตามลำดับลบเส้นที่เลือกจาก~/.bash_history, history -cล้างประวัติศาสตร์ของสถานีและexitปิดมัน


ทางเลือกที่สั้นกว่าและหวังว่าจะเร็วกว่าสำหรับfor+ sed: head -n -Nโดยที่ตัวพิมพ์ใหญ่Nคือจำนวนบรรทัดที่จะลบออก stackoverflow.com/a/13380679/711006
Melebius

2
@Melebius ดูมีแนวโน้ม แต่คุณจะเปลี่ยนทิศทางการส่งออกไปยังไฟล์อินพุตเขียนทับมันได้อย่างไร head -n -N testfile > testfileเพียงล้างไฟล์! ฉันเพิ่มวิธีแก้ไขปัญหา แต่ก็ไม่สั้นอย่างแน่นอน
ของหวาน

คุณพูดถูกฉันลืมไปแล้วว่าheadไม่สามารถทำงานในที่sedได้ ฉันมักจะมองหาsedคำสั่งเดียวแทนที่forลูปของคุณ มีตัวเลือกบางอย่างในหน้าเว็บที่ฉันเชื่อมโยง แต่ดูไม่เข้าใจเท่ารหัสของคุณ
Melebius

@Melebius ดูsed1line.txtสำหรับเรื่องนั้น - ฉันเพิ่มไปด้านบนแล้วมันไม่ได้สั้นกว่านี้จริง แต่ควรจะเร็วกว่านี้
ของหวาน

4

ไฟล์ bash_history เป็นไฟล์ที่ซ่อนเริ่มต้นด้วยจุด คุณต้องทำ

gedit ~/.bash_history

นี่จะเป็นการเปิดไฟล์ใน gedit


1

หากคุณต้องการที่จะลบเฉพาะบางส่วนของบันทึกคำสั่งของคุณแล้ววิธีการดังกล่าวข้างต้นได้ดี หากคุณต้องการหยุดการบันทึกคำสั่งสำหรับเซสชัน bash เฉพาะให้ออกคำสั่ง

unset HISTFILE

ถ้าหากคุณไม่ต้องการให้คำสั่งใด ๆ ของคุณเข้าสู่ระบบคุณสามารถทำได้

rm ~/.bash_history
ln -s /dev/null ~/.bash_history

โปรดทราบว่าวิธีแรกจะมีผลเฉพาะกับเซสชันเดียวเท่านั้นในขณะที่วิธีที่สองจะหยุดการบันทึกคำสั่งสำหรับเซสชันในอนาคตทั้งหมด


1

ฉันรู้ว่านี่มีคำตอบที่ยอมรับแล้ว แต่นี่เป็นวิธีที่ฉันทำมาตั้งแต่ยุค 80 มันเป็นวิธีที่ยอดเยี่ยมในการซ่อนแทร็กของคุณและเป็นแนวทางแบบมัลติเฟส ส่วนใหญ่เป็นส่วนที่ไม่ได้สังเกตเห็นถ้าไม่มีใครสนใจจริงๆ นี่คือวิธีที่มันทำ

เปิดเทอร์มินัล / เชลล์ / เซสชันและทำ:

 chmod 444 ~/.bash_history

ออกจากเชลล์เปิดเทอร์มินัล / เชลล์ / เซสชันและทำ: ต่อไปนี้เป็นวิธีที่สร้างสรรค์ในการลบประวัติอย่างถาวร

1:

 vi ~/.bash_history
 9999999 dd
 <esc>wq!

2 (สร้างประวัติปลอม)

 sudo echo "which ls" > ~/.bash_history
 sudo echo "cd ~/;ls" >> ~/.bash_history

ถ้าอย่างนั้นก็ให้วัดดี

 chmod 444 ~/.bash_history

ออกจากเปลือก

เปิดเชลล์และประเภทใหม่

 history

สิ่งที่ทำให้เห็นได้ชัดน้อยลงคือถ้ามี ls -ratl ~ / .bash_history ในที่สุดก็จะหายไปในรายชื่อไดเรกทอรี มันจะไม่ปรากฏเป็นลิงค์ซึ่งจะดึงดูดความสนใจที่ไม่จำเป็น คนส่วนใหญ่ไม่ได้ทำ -a บนรากของพวกเขาซึ่งมีประโยชน์เมื่อต้องการการจำลอง

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


ถ้าคุณใช้9999999 ddในการลบทุกบรรทัดในไฟล์แล้ว:%d, :1,$dหรือdGการทำงานที่ดีมาก
phuclv

0

1) เรียกใช้sh; สิ่งนี้จะทำให้เกิดการย่อยของเถ้าซึ่งไม่ได้บันทึกประวัติเลย แก้ไขจากตรงนั้น

2) เพิ่มบรรทัดHISTCONTROL=ignorebothไปที่.bashrcและทำexec bashเพื่อแทนที่เชลล์ปัจจุบันด้วยเชลล์ที่เริ่มต้นใหม่อย่างถาวรจากนั้นทำคำสั่งทั้งหมดที่คุณไม่ต้องการให้บันทึกด้วยช่องว่างนำหน้า


0

เนื่องจากฉันไม่สามารถแสดงความคิดเห็นได้จะเพิ่มความคิดเห็นของฉันเป็นคำตอบ:

man history จะตอบมันทั้งหมด

คำตอบของ # 1 คือประวัตินั้นอยู่ในหน่วยความจำ history -aเพื่อบันทึกเป็นไฟล์ทันที history -wจะบันทึกด้วยเช่นกัน แต่อาจทำให้เซสชันอื่นสับสน

คำตอบ # 2 history -a:, gedit, ลบบรรทัดที่คุณต้องการ,history -r


0

ประวัติจะไม่ถูกบันทึกจนกว่าคุณจะออกจากเชลล์ ลองล็อกออกจากเชลล์แล้วดู. bash_history อีกครั้ง ประวัติคำสั่งควรอยู่ที่นั่น


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