ซ่อน“ history -d” ในประวัติทุบตี


14

หากฉันพิมพ์รหัสผ่านของฉันโดยไม่ตั้งใจหรือสิ่งอื่นใดที่มีความละเอียดอ่อนในการทุบตีฉันสามารถลบบรรทัดนั้นได้โดยhistory -d ROW#ง่าย แต่ฉันมักจะทิ้งhistory -d ROW#คำสั่งไว้ในประวัติศาสตร์เพื่อแสดงให้ทุกคนเห็นว่ามีคนแก้ไขข้อผิดพลาด

ฉันสามารถต่อท้ายคำสั่งเพื่อป้องกันไม่ให้ปรากฏในประวัติทุบตีได้หรือไม่?

คำตอบ:


27

หากไม่บันทึกคำสั่งเดียวในประวัติของคุณให้นำหน้าด้วยช่องว่าง (ทำเครื่องหมายที่นี่):

$ echo test
test
$ history | tail -n2
 3431  echo test
 3432  history | tail -n2
$ echo test2
test2
$ history | tail -n2
 3431  echo test
 3432  history | tail -n2

พฤติกรรมนี้ตั้งอยู่ใน~/.bashrcไฟล์ของคุณซึ่งก็คือในบรรทัดนี้:

HISTCONTROL=ignoreboth

man bash พูดว่า:

HISTCONTROL
รายการค่าคั่นด้วยโคลอนที่ควบคุมวิธีบันทึกคำสั่งในรายการประวัติ ถ้ารายการของค่ารวมถึง ignorespace , สายซึ่งเริ่มต้นด้วยอักขระช่องว่างจะไม่ถูกบันทึกในรายการประวัติ ค่าของการเพิกเฉย ทำให้เกิดบรรทัดที่ตรงกับรายการประวัติก่อนหน้านี้ที่จะไม่ถูกบันทึก ค่าของ ignorebothคือชวเลขignorespaceและignoredups

ignoredupsโดยวิธีคือเหตุผลที่history | tail -n2ปรากฏเพียงครั้งเดียวในประวัติศาสตร์ในการทดสอบข้างต้น


ประวัติของเทอร์มินัลจะถูกบันทึกไว้ใน RAM และถูกฟลัชชิงไปยังคุณ~/.bash_historyทันทีที่คุณปิดเทอร์มินัล หากคุณต้องการลบรายการเฉพาะจากคุณ~/.bash_historyคุณสามารถทำได้ด้วยsed:

                                   # print every line…
sed '/^exit$/!d' .bash_history     # … which is just “exit”
sed '/^history/!d' .bash_history   # … beginning with “history”
sed '/>>log$/!d' .bash_history     # … ending with “>>log”
sed '\_/path/_!d' .bash_history    # … containing “/path/” anywhere

ในช่วงหนึ่งผมเปลี่ยนคั่นเริ่มต้น/ที่จะเป็นก็ใช้ในการค้นหาคำในความเป็นจริงนี้จะมีค่าเท่ากับ_ sed -i '/\/path\//d' .bash_historyหากผลคำสั่งเพียงเส้นที่คุณต้องการลบเพิ่ม-iตัวเลือกและการเปลี่ยนแปลง!dในการdที่จะดำเนินการลบ:

                                   # delete every line…
sed -i '/^exit$/d' .bash_history   # … which is just “exit”
sed -i '/^history/d' .bash_history # … beginning with “history”
sed -i '/>>log$/d' .bash_history   # … ending with “>>log”
sed -i '\_/path/_d' .bash_history  # … containing “/path/” anywhere

12

วิธีหนึ่งคือการตั้งค่าHISTIGNOREตัวแปรสภาพแวดล้อม จากman bash

HISTIGNORE
      A colon-separated list of patterns used to decide which  command
      lines  should  be  saved  on  the history list.  Each pattern is
      anchored at the beginning of the line and must  match  the  com‐
      plete  line  (no  implicit  `*'  is  appended).  Each pattern is
      tested against the line after the checks specified  by  HISTCON‐
      TROL  are  applied. 

[FWIW เป็นค่าเริ่มต้นHISTCONTROLที่ให้วิธีแก้ปัญหาแบบพื้นที่ว่างด้านหน้า]

ตัวอย่างเช่น

HISTIGNORE='history -d*'

หากคุณต้องการให้มันคงอยู่ให้ส่งออกจากคุณ ~/.bashrc

export HISTIGNORE='history -d*'

6

คุณสามารถ

  • ปิดหน้าต่าง terminal (s) การดำเนินการนี้จะล้างประวัติล่าสุดในหน้าต่างเทอร์มินัลที่คุณปิดล่าสุด (หลังจากปิดหน้าต่างอื่น) ลงในไฟล์/home/$USER/.bash_history

  • แก้ไขไฟล์/home/$USER/.bash_historyโดยไม่เกี่ยวข้องbashเช่นเริ่มโปรแกรมแก้ไขรายการโปรดผ่านAlt+F2

    วิธีนี้คุณสามารถตรวจสอบประวัติทั้งหมดและลบคำสั่งใด ๆ ที่คุณไม่ต้องการให้มี

    ป้อนคำอธิบายรูปภาพที่นี่

    ป้อนคำอธิบายรูปภาพที่นี่


1

ฉันมักจะใช้:

history -w; history -c; $EDITOR $HISTFILE; history -r

ไฟล์ประวัติถูกเขียนลงดิสก์ล้างหน่วยความจำคุณแก้ไขไฟล์เพื่อทำสิ่งที่คุณต้องการจากนั้นไฟล์ประวัติที่คุณแก้ไขจะถูกอ่านอีกครั้ง

โปรดทราบว่าหากคุณแก้ไขบันทึกไฟล์สำรองข้อมูลคำหยาบคายอาจยังปรากฏบนดิสก์

ตัวเลือกอื่นที่ใช้-dคือการใช้หมายเลขประวัติทำนาย:

startide sr> # good thing
startide sr> # bad thing
startide sr> history | tail -n 2
17239  # bad thing
17240  history | tail -n 2
startide sr> history -w; history -d 17239; history -d 17239; history -d 17239
startide sr> # other thing
startide sr> history | tail -n 3
17239  # good thing
17240  # other thing
17241  history | tail  -n 3

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


0

หากคุณต้องการรันคำสั่งโดยไม่บันทึกลงในประวัติให้เติมคำสั่งด้วยช่องว่างเพิ่มเติม

prompt$ echo saved
prompt$  echo not saved \
> #     ^ extra space

เพื่อให้สิ่งนี้ทำงานได้คุณต้องไม่สนใจหรือไม่สนใจทั้ง HISTCONTROL ตัวอย่างเช่นเรียกใช้

HISTCONTROL = ignorespace ในการทำให้การตั้งค่านี้คงอยู่ให้วางไว้ใน. bashrc ของคุณ

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