บทนำ
เทอร์มินัล Linux ที่รัน Bash มี history ในตัวที่คุณสามารถใช้ติดตามสิ่งที่คุณทำล่าสุด ในการดูประวัติ Bash session ใช้คำสั่ง built-in history:
$ echo "foo" foo $ echo "bar" bar $ history 1 echo "foo" 2 echo "bar" 3 history
คำสั่ง history ไม่ใช่ไฟล์ executable บน filesystem เหมือนคำสั่งส่วนใหญ่ แต่มันเป็นฟังก์ชันของ Bash คุณตรวจสอบได้ด้วยคำสั่ง type:
$ type history history is a shell builtin
การควบคุม History
ขีดจำกัดบนสุดของบรรทัดใน shell history ถูกกำหนดโดยตัวแปร HISTSIZE คุณตั้งค่าตัวแปรนี้ในไฟล์ .bashrc ต่อไปนี้ตั้ง history ไว้ 3,000 บรรทัด หลังจากนั้นบรรทัดเก่าสุดจะถูกลบเพื่อให้ที่ว่างสำหรับคำสั่งใหม่ล่าสุดที่ด้านล่างของรายการ:
export HISTSIZE=3000
มีตัวแปรที่เกี่ยวกับ history อื่นๆ อีก ตัวแปร HISTCONTROL ควบคุมว่า history อะไรจะถูกเก็บ คุณสามารถบังคับให้ Bash ไม่รวมคำสั่งที่ขึ้นต้นด้วย space ว่าง โดยวางนี้ใน .bashrc:
export HISTCONTROL=$HISTCONTROL:ignorespace
ตอนนี้ หากคุณพิมพ์คำสั่งขึ้นต้นด้วย space คำสั่งนั้นจะไม่ถูกบันทึกใน history:
$ echo "hello" $ mysql -u bogus -h badpassword123 mydatabase $ echo "world" $ history 1 echo "hello" 2 echo "world" 3 history
คุณสามารถหลีกเลี่ยงรายการซ้ำได้อีก:
export HISTCONTROL=$HISTCONTROL:ignoredups
ตอนนี้ หากคุณพิมพ์คำสั่งสองคำติดกัน จะมีแค่หนึ่งปรากฏใน history:
$ ls $ ls $ ls $ history 1 ls 2 history
หากคุณชอบทั้งสองการละเว้นนี้ คุณสามารถใช้ ignoreboth ได้เลย:
export HISTCONTROL=$HISTCONTROL:ignoreboth
ลบคำสั่งออกจาก history
บางครั้งคุณทำผิดและพิมพ์ข้อมูลสำคัญลงใน shell หรืออาจแค่อยากทำความสะอาด history ให้แสดงขั้นตอนที่แท้จริงที่คุณทำเพื่อให้สิ่งต่างๆ ทำงานได้ถูกต้อง หากคุณต้องการลบคำสั่งจาก history ใน Bash ใช้ตัวเลือก -d พร้อมหมายเลขบรรทัดของไอเท็มที่ต้องการลบ:
$ echo "foo" foo $ echo "bar" bar $ history | tail 535 echo "foo" 536 echo "bar" 537 history | tail $ history -d 536 $ history | tail 535 echo "foo" 536 history | tail 537 history -d 536 538 history | tail
เพื่อหยุดการเพิ่มรายการ history คุณสามารถวาง space ก่อนคำสั่ง ได้ตราบใดที่คุณมี ignorespace ในตัวแปรสภาพแวดล้อม HISTCONTROL:
$ history | tail 535 echo "foo" 536 echo "bar" $ history -d 536 $ history | tail 535 echo "foo"
คุณสามารถล้างประวัติทั้ง session ด้วยตัวเลือก -c:
$ history -c $ history $
บทเรียนจาก History
การจัดการ history มักน่ากลัวน้อยกว่าที่ได้ยินมา โดยเฉพาะเมื่อคุณดูแลมันด้วยเจตนาที่ชัดเจน ตัวอย่างเช่น หากคุณกำลังจัดทำเอกสารปัญหาที่ซับซ้อน มักเป็นที่ดีที่สุดที่จะใช้ session history บันทึกคำสั่งของคุณ เพราะเมื่อคุณวางพวกมันใน history คุณก็กำลังรันพวกมันและทดสอบกระบวนการด้วย มักเกิดขึ้นว่าการจัดทำเอกสารโดยไม่ได้ทำจริงนำไปสู่การมองข้ามขั้นตอนเล็กๆ หรือเขียนรายละเอียดเล็กๆ ผิด
ใช้ history sessions ตามต้องการ และใช้ quyềnของคุณเหนือ history อย่างมีสติ ขอให้สนุกกับการแฮ็ก history!