วันนี้ฉันสังเกตเห็นว่าประวัติทุบตีของฉันถูกล้างออกอย่างสมบูรณ์ ฉันไม่ได้ดำเนินการhistory -c
หรือลบ.bash_history
ไฟล์ นอกเหนือจากการลบ.bash_history
ไฟล์history -c
แล้วจะล้างประวัติทุบตีได้อย่างไร?
วันนี้ฉันสังเกตเห็นว่าประวัติทุบตีของฉันถูกล้างออกอย่างสมบูรณ์ ฉันไม่ได้ดำเนินการhistory -c
หรือลบ.bash_history
ไฟล์ นอกเหนือจากการลบ.bash_history
ไฟล์history -c
แล้วจะล้างประวัติทุบตีได้อย่างไร?
คำตอบ:
เมื่อปิดอินสแตนซ์ bash หลายรายการในเวลาเดียวกันมีเงื่อนไขการแข่งขันที่เป็นที่รู้จักซึ่งอาจทำให้ประวัติถูกล้าง สิ่งนี้เกิดขึ้นเนื่องจากไม่มีการล็อคเมื่อใช้ไฟล์ประวัติทุบตี
Chet Ramey (ผู้ดูแลการทุบตีในปัจจุบัน) ได้สรุปเงื่อนไขที่ดีสำหรับปัญหานี้:
โค้ดปัจจุบัน (bash-4.3-devel) ทำงานคล้ายนี้โดยไม่มีข้อผิดพลาด (lib / readline / histfile.c: history_do_write ()):
- เปลี่ยนชื่อ (histfile, histfile ~)
- เปิดไฟล์ด้วย O_CREAT | O_TRUNC
- บัฟเฟอร์ malloc มีขนาดใหญ่พอที่จะเก็บข้อมูลประวัติทั้งหมด
- เขียนรายการประวัติทั้งหมดด้วยการเรียก write (2) ครั้งเดียว
- ปิดไฟล์
- ยกเลิกการเชื่อมโยง (histfile ~)
รหัส bash-4.2 ทำงานในลักษณะเดียวกันยกเว้นว่าจะไม่สำรองไฟล์ประวัติ แต่ละเชลล์ทำสิ่งเดียวกันเมื่อออกจากระบบโดยไม่ได้ตั้งค่า histappend เช่นเดียวกับในการกำหนดค่าของคุณ
มีสองวิธีที่ไฟล์ประวัติสามารถจบด้วยความยาวเป็นศูนย์: malloc สามารถล้มเหลวหรือการเขียนอาจล้มเหลว ใน bash-4.2 มันสายเกินไปที่จะทำทุกอย่างเกี่ยวกับไฟล์ประวัติที่ถูกตัดทอนในตอนนั้น ใน bash-4.3 ไฟล์ประวัติก่อนหน้านี้จะถูกกู้คืน
เธรดรายการจดหมายนี้จากข้อผิดพลาดทุบตีมีการอภิปรายที่ดีของปัญหาการแก้ปัญหาที่เป็นไปได้และความกังวลรอบนี้
นอกจากนี้ยังมีความเป็นไปได้อื่น ๆ :
HISTSIZE
หรือHISTFILESIZE
ถูกตั้งค่าเป็น 0history-size
ถูกตั้งค่าเป็น 0> "$HISTFILE"
หรือคล้ายกัน)ในกรณีหลังคุณอาจต้องการตรวจสอบว่ามีบางคนที่ไม่ได้เข้าถึงบัญชีของคุณและพยายามซ่อนเส้นทางของพวกเขาอย่างไม่เหมาะสม ลองดูที่last
, /var/log/auth
(หรือ/var/log/secure
บน CentOS / RHEL) และถ้าคุณมีมันกระบวนการใด ๆ บัญชีและ / หรือซอฟแวร์การตรวจสอบคุณอาจติดตั้ง
ฉันจะลบประวัติทุบตีของฉันโดยไม่ตั้งใจได้อย่างไร:
ฉันเปิดใช้สคริปต์ readline ของเทอร์มินัลทางเลือกของตัวเองจากหลักการแรก: https://tiswww.cwru.edu/php/chet/readline/rluserman.html
แล้วทำการทดสอบในเทอร์มินัล GNU Readline นั้นมีขนาดประวัติและคำแนะนำในการเก็บรักษาประวัติเพื่อให้ขนาดฮีสสามารถเป็นค่าเริ่มต้นได้และประวัติทั้งหมดของคุณจะถูกพัดหายไป
การกู้คืนประวัติถ้าทิ้งไว้ในหน่วยความจำ:
หากคุณจับมันก่อนที่จะรีบูตเครื่องหรือถ้าเทอร์มินัลถูกเปิดทิ้งไว้ก่อนหน้าเคลียร์คุณอาจสามารถค้นหาประวัติของคุณในหน่วยความจำ เรียกใช้history | cut -c 8- > histback_user1.txt
ในทุกขั้วเปิดทิ้งไว้และสำหรับผู้ใช้ทุกคน หากที่ผลิตไฟล์ที่มีประวัติของการขยายของคุณแล้วคุณสามารถแทนที่ด้วย~/.bash_history
histback_user1.txt
ตรวจสอบประวัติของผู้ใช้ทั้งหมดที่เข้าสู่ระบบเมื่อเร็ว ๆ นี้เช่นเดียวกับประวัติของรูท เป็นเรื่องง่ายที่จะล้างประวัติ bash โดยไม่ตั้งใจในหลาย ๆ สถานการณ์ดังนั้นหากคุณต้องการแน่ใจว่าไม่มีการสูญเสียประวัติคุณต้องมีสคริปต์สำรองรายวัน
>.bash_history
มันอาจจะเกิดขึ้นโดยการเช่น อาจมีบางคนอยู่ในบัญชีของคุณและพยายามซ่อนเส้นทางของเขา ตรวจสอบเวลาเข้าสู่ระบบที่ผิดปกติด้วยlast
ค้นหาผ่าน/var/log/auth.log
(ขึ้นอยู่กับระบบของคุณ)