มีวิธีใดที่จะป้องกันไม่ให้มีการเพิ่มคำสั่งในประวัติของคุณหรือไม่?


65

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

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


การเชื่อมโยงข้ามไปยังคำตอบ zsh: superuser.com/questions/352788/…
Michael Shigorin

คำตอบ:


52

ใน ZSH :

แทรกแรกที่คุณsetopt HIST_IGNORE_SPACE ~/.zshrcตอนนี้หลังจากที่คุณเข้าสู่ระบบอีกครั้งคุณสามารถคำนำหน้าคำสั่งใด ๆ spaceที่คุณไม่ต้องการเก็บไว้ในประวัติศาสตร์ด้วย

จากคู่มือผู้ใช้สามารถใช้ตัวเลือก 3 ตัวต่อไปนี้เพื่อบอกว่าบางบรรทัดไม่ควรเข้าไปในประวัติเลย:

  • HIST_IGNORE_SPACEไม่เก็บคำสั่งที่เติมด้วยช่องว่าง
  • HIST_NO_STOREไม่เก็บคำสั่งประวัติ ( fc -l )
  • HIST_NO_FUNCTIONSไม่เก็บคำจำกัดความของฟังก์ชัน

โอกาสใด @mmckinst คำตอบทำงานใน zsh? หรืออะไรอย่างนั้น หรืออาจเป็นคำสั่งใด ๆ ที่มีคำสั่ง| somecommand
xenoterracide

AFAIK ไม่มีค่าเทียบเท่ากับ HISTIGNORE ของ bash ใน zsh
dogbane

@xeno zsh มีฟังก์ชั่น hook preexecที่สามารถใช้สำหรับสิ่งนั้นได้ หากส่งคืนค่าที่ไม่ใช่ศูนย์คำสั่งจะไม่ถูกบันทึกในประวัติ
Keith

1
เพื่อให้ zsh ไม่สนใจกลุ่มคำสั่งพื้นฐานทั่วไปฉันใช้นามแฝงพวกเขาทั้งหมดเพื่อให้มีช่องว่างด้านหน้า ... สำหรับ c (ls fg bg งานออกจากการรีเซ็ตที่ชัดเจน); ทำนามแฝง $ c = "$ c"; เสร็จแล้ว
Will Norris

4
สำหรับผู้อ่านในอนาคตที่ขี้เกียจอย่างฉันที่ยังไม่รู้จะทำยังไง: setopt HIST_IGNORE_SPACEใน~/.zshrc
อัลจี

25

หากคุณใช้คำสั่งซ้ำไปซ้ำมาคุณอาจต้องการใช้คุณสมบัติการเพิกเฉยต่อประวัติเชลล์ ให้บอกว่าคุณมี secret.server.com ที่คุณ ssh ไปยัง, ไฟล์ FTP ไปยัง, ฯลฯ ที่คุณไม่ต้องการให้บรรทัดใด ๆ ที่กล่าวถึง secret.server.com บันทึกไว้:

ในแบบที่bashคุณต้องการ

HISTIGNORE="*secret.server.com*"

ในขณะที่ในzshพารามิเตอร์ที่เรียกว่า

HISTORY_IGNORE="*secret.server.com*"

คุณสามารถแสดงรายการหลายรูปแบบโดยใช้เครื่องหมายโคลอนเพื่อแยก โปรดทราบว่าแต่ละรูปแบบถูกจับคู่กับบรรทัดอินพุตแบบเต็มดังนั้นคุณอาจต้องรวม * ตัวอย่างเช่นสิ่งต่อไปนี้จะแยกfortuneออกจากประวัติ แต่จะเก็บไว้fortune -l:

HISTIGNORE="*secret.server.com*:ytalk*:fortune"
HISTORY_IGNORE="*secret.server.com*:ytalk*:fortune"

เมื่อตั้งค่า HISTIGNORE จะไม่มีการจับคู่รูปแบบที่คุณระบุไว้ในรายการและ.bash_history/ .zsh_historyหรือแม้แต่ปุ่มลูกศรขึ้นซึ่งโดยปกติจะเรียกคำสั่งก่อนหน้านี้ของคุณจะไม่ทำงานหากรูปแบบนั้นตรงกับรูปแบบของคุณ


3
มีโอกาสใดที่งานนี้ใน zsh?
xenoterracide

มีตัวเลือกให้ละเว้นบรรทัดที่ขึ้นต้นด้วยโชคหรือไม่ สิ่งที่ต้องการHISTIGNORE="^fortune*"ที่จะไม่สนใจfortune -lแต่เก็บไว้myfortune?
แบร์นฮาร์ด

@xenoterracide มันทำ แต่พารามิเตอร์มีชื่อแตกต่างกัน ฉันเพิ่งแก้ไขมันเป็นคำตอบ
n.st

23

ใน bash ให้ใช้HISTCONTROLตัวแปร

ตั้งค่าเป็นHISTCONTROL=ignorespace(หรือHISTCONTROL=ignoreboth) จากตอนนี้เมื่อคุณเริ่มต้นบรรทัดด้วยช่องว่างมันจะไม่ถูกบันทึกไว้ในประวัติ เพื่อหลีกเลี่ยงการรวมคำสั่งที่ไม่เปิดเผยในไฟล์คอนฟิกูเรชันบางไฟล์

แม้ว่าจะเป็นเช่นนั้นมันก็ลืมที่จะเพิ่มพื้นที่แล้วต้องการกลับไป หากต้องการลบรายการในประวัติใช้history -d <index>ด้วยindexหมายเลขที่พบกับhistoryคำสั่ง (คอลัมน์แรก)


1
มันใช้งานได้zshหรือไม่
เกอร์

11

วิธีที่ง่ายที่สุดสำหรับการออกครั้งเดียวคือ

$ $SHELL
$$ unset HISTFILE
$$ secret-command
$$ exit
$

โดยที่$แสดงถึงพรอมต์ของเชลล์เริ่มต้นและ$$แสดงถึงพรอมต์ของเชลล์ย่อย งานนี้ในทุบตีและ zsh; ใน ksh คุณต้องการHISTFILE=/notwritableแทน โปรดทราบว่าสิ่งสำคัญคือค่าHISTFILEเมื่อไฟล์ประวัติถูกเขียนไม่ใช่เมื่อรันคำสั่ง Bash, ksh และ zsh เขียนไปยังไฟล์ประวัติเมื่อพวกเขาออก (zsh สามารถทำได้บ่อยขึ้นอยู่กับการกำหนดค่า)

อีกวิธีหนึ่งคุณสามารถรับ bash หรือ zsh เพื่อข้ามบรรทัดที่ตรงกับรูปแบบบางอย่าง

ความเป็นไปได้อีกอย่างหนึ่งใน zsh คือ

% fc -p
% secret-command
% fc -P

fc -pพุชรายการประวัติปัจจุบันลงบนสแต็กและเริ่มรายการใหม่ที่ไม่เกี่ยวข้องกับไฟล์บันทึก fc -Pดึงรายการประวัติที่ไม่ได้บันทึกออกจากสแต็กและลืมไปโดยสิ้นเชิง

ในขณะที่กระบวนการกำลังทำงานอยู่คำสั่งและอาร์กิวเมนต์ (และในบางระบบจะมีสภาพแวดล้อมเช่นกัน) จะแสดงในตารางกระบวนการ ( psเอาต์พุต) รูทสามารถดูคำสั่งที่ผ่านมาในฐานข้อมูลการบัญชีระบบและสามารถทำการบันทึกเพิ่มเติมโดยไม่ต้องมีการควบคุมของคุณ และอาจมีหลักฐานทางนิติวิทยาศาสตร์ทุกชนิดที่สามารถแสดงคำสั่งที่คุณรันได้อย่างคร่าวๆ (เช่นเวลาแก้ไขไฟล์) ดังนั้นคุณจะไม่ได้รับความเป็นส่วนตัวจากผู้ดักฟังที่ตั้งใจไว้

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