ข้อแตกต่างในการHISTSIZEเปรียบเทียบHISTFILESIZEคืออะไร?
พวกเขาจะใช้ในการขยายประวัติทุบตีเกินกว่า 500 บรรทัดเริ่มต้น
ดูเหมือนว่าจะไม่มีความชัดเจนที่นี่และในฟอรัมอื่น ๆ เกี่ยวกับสาเหตุที่ทั้งคู่ต้องการ ( ตัวอย่างที่ 1 , 2 ตัวอย่าง , ตัวอย่างที่ 3 )
ข้อแตกต่างในการHISTSIZEเปรียบเทียบHISTFILESIZEคืออะไร?
พวกเขาจะใช้ในการขยายประวัติทุบตีเกินกว่า 500 บรรทัดเริ่มต้น
ดูเหมือนว่าจะไม่มีความชัดเจนที่นี่และในฟอรัมอื่น ๆ เกี่ยวกับสาเหตุที่ทั้งคู่ต้องการ ( ตัวอย่างที่ 1 , 2 ตัวอย่าง , ตัวอย่างที่ 3 )
คำตอบ:
HISTSIZE คือจำนวนบรรทัดหรือคำสั่งที่เก็บไว้ในหน่วยความจำในรายการประวัติขณะที่เซสชัน bash ของคุณดำเนินการอยู่
HISTFILESIZE คือจำนวนบรรทัดหรือคำสั่งที่ (a) ได้รับอนุญาตในไฟล์ประวัติเมื่อเวลาเริ่มต้นของเซสชันและ (b) ถูกเก็บไว้ในไฟล์ประวัติเมื่อสิ้นสุดเซสชัน bash ของคุณเพื่อใช้ในเซสชันในอนาคต
สังเกตเห็นความแตกต่างระหว่างfile: บนดิสก์ - และlist: ในหน่วยความจำ
ข้อมูลทั้งหมดข้างต้น + ตัวอย่างบางส่วน:
ตัวอย่างที่ 1 :
HISTFILESIZE=10และHISTSIZE=10
histappendว่าไม่ได้เปิดใช้งานคำสั่ง 41 ถึง 50 จะถูกบันทึกลงใน HISTFILE ของคุณซึ่งตอนนี้มี 10 คำสั่งที่จัดขึ้นที่จุดเริ่มต้นรวมทั้ง 10 คำสั่งที่เขียนใหม่ตัวอย่างที่ 2 :
HISTFILESIZE=10และHISTSIZE=5
histappendว่าไม่ได้เปิดใช้งานคำสั่ง 46 ถึง 50 จะถูกบันทึกลงใน HISTFILE ของคุณซึ่งตอนนี้มี 10 คำสั่งที่จัดขึ้นที่จุดเริ่มต้นรวมทั้ง 5 คำสั่งที่เขียนใหม่ตัวอย่างที่ 3 :
HISTFILESIZE=5และHISTSIZE=10
histappendว่าไม่ได้เปิดใช้งานคำสั่ง 41 ถึง 50 จะถูกบันทึกลงใน HISTFILE ของคุณซึ่งตอนนี้มีคำสั่ง 5 คำสั่งที่เริ่มต้นรวมกับคำสั่งที่เขียนใหม่ 10 คำสั่งข้อมูลจากelixir_sinari :
ประวัติ "ไฟล์" ไม่ได้รับการอัพเดตเมื่อคุณพิมพ์คำสั่ง คำสั่งถูกเก็บไว้ใน "รายการ" แยกต่างหาก (เข้าถึงได้โดยคำสั่งประวัติ) จำนวนคำสั่งที่เก็บไว้เหล่านี้ถูกควบคุมโดยค่า HISTSIZE เมื่อเชลล์ (แบบโต้ตอบ) ออกจากบรรทัด $ HISTSIZE บรรทัดสุดท้ายจะถูกคัดลอก / ผนวกเข้ากับ $ HISTFILE จาก "รายการ" หาก HISTFILESIZE ถูกตั้งค่าหลังจากการดำเนินการนี้จะทำให้มั่นใจได้ว่ามีเพียง $ HISTFILESIZE บรรทัด (ล่าสุด) มีอยู่ใน $ HISTFILE และเมื่อเชลล์เริ่มต้น "list" จะเริ่มต้นจาก $ HISTFILE สูงสุดถึงคำสั่ง $ HISTSIZE
และจากman bashหน้า:
ค่าของตัวแปร HISTSIZE ถูกใช้เป็นจำนวนคำสั่งเพื่อบันทึกในรายการประวัติ ข้อความของคำสั่ง HISTSIZE ล่าสุด (ค่าเริ่มต้น 500) ถูกบันทึกไว้ ( ... )
เมื่อเริ่มต้นประวัติจะเริ่มต้นจากไฟล์ที่มีชื่อโดยตัวแปร HISTFILE (ค่าเริ่มต้น ~ / .bash_history) ไฟล์ที่ตั้งชื่อโดยค่าของ HISTFILE จะถูกปัดเศษหากจำเป็นเพื่อให้มีจำนวนบรรทัดไม่เกินจำนวนที่ระบุโดยค่าของ HISTFILESIZE (... ) เมื่อเชลล์การโต้ตอบออกจากบรรทัด $ HISTSIZE สุดท้ายจะถูกคัดลอกจากรายการประวัติไปยัง $ HISTFILE หากมีการเปิดใช้งานตัวเลือกเชลล์ histappend (ดูคำอธิบายของ shopt ภายใต้คำสั่ง SHELL BUILTIN คำสั่งด้านล่าง) บรรทัดจะผนวกเข้ากับไฟล์ประวัติมิฉะนั้นไฟล์ประวัติจะถูกเขียนทับ หาก HISTFILE ไม่ได้ถูกตั้งค่าไว้หรือหากไฟล์ประวัตินั้นไม่สามารถเขียนได้ประวัติจะไม่ถูกบันทึก (... ) หลังจากบันทึกประวัติไฟล์ประวัติจะถูกตัดให้มีบรรทัด HISTFILESIZE ไม่เกินบรรทัด หาก HISTFILESIZE ไม่ได้ถูกตั้งค่าไว้
การสร้างสิ่งที่ arturomp ได้พูดไว้และพยายามทำให้ชัดเจนขึ้น
สมมติว่าคุณมีประวัติศาสตร์อันยาวนานถึง 2000 เรื่อง ..
~$ history
1 sdf
2 fghdfgjf
3 fghfghdf
.. ..
2027 78
2028 57
2029 yu45u
คุณสามารถลดสิ่งที่คุณแสดงด้วย HISTSIZE
~$ HISTSIZE=5
~$ history
2026 546
2027 78
2028 56
2029 yu45u
2030 HISTSIZE=5
ทีนี้ไม่ว่าคุณจะพิมพ์คำสั่งกี่คำ แต่จะบันทึกได้เพียง 5 ครั้งล่าสุดเท่านั้น
~$ ABC
~$ GGH
~$ GSDHFG
~$ JFDR
~$ ABSDDS
~$ AHFGHFD
<close terminal>
<open new terminal>
~$ history
1 sdf
2 fghdfgjf
3 fghfghdf
.. ..
2028 56
2029 yu45u
2030 HISTSIZE=5
2031 GGH
2032 GSDHFG
2033 JFDR
2034 ABSDDS
2035 AHFGHFD
เราสามารถเห็นได้อย่างชัดเจนว่าคำสั่งแรกของเรา ("ABC") ไม่ได้อยู่ในประวัติตั้งแต่บันทึกคำสั่งเพียง 5 ครั้งล่าสุด
ตอนนี้ประวัติศาสตร์ทั้งหมดจะถูกเก็บไว้ในไฟล์ ( .bash_history) HISTFILESIZEและคุณสามารถปรับเปลี่ยนวิธียาวไฟล์นี้ได้รับด้วย เช่น2033 HISTFILESIZEในกรณีของฉันฉันจะได้สิ่งนี้:
~$ history
1 fghfghdf
2 gegege
3 gege
.. ..
2028 HISTSIZE=5
2029 GGH
2030 GSDHFG
2031 JFDR
2032 ABSDDS
2033 AHFGHFD
HISTSIZE=-1 HISTFILESIZE=-1
bashหน้าคนพูดว่า: Non-numeric values and numeric values less than zero inhibit truncationแต่แล้วฉันไม่ได้มีความกล้าที่จะตรวจสอบว่านี้เป็นความจริงเพราะฉันไม่ต้องการที่จะสูญเสียประวัติของฉัน :-)
HISTSIZE='INFINITY' HISTFILESIZE='ANDBEYOND'เนื่องจากไม่ใช่ตัวเลขจึงบันทึกทุกอย่าง ขอบคุณสำหรับทิป!