ฉันต้องการรันคำสั่งบางอย่าง แต่ไม่ต้องการเก็บไว้ในประวัติคำสั่ง เพื่อให้ไม่มีใครสามารถค้นหาได้ใน.bash_historyไฟล์
มีวิธีการรันคำสั่ง bash ด้วยวิธีนี้หรือไม่?
ฉันต้องการรันคำสั่งบางอย่าง แต่ไม่ต้องการเก็บไว้ในประวัติคำสั่ง เพื่อให้ไม่มีใครสามารถค้นหาได้ใน.bash_historyไฟล์
มีวิธีการรันคำสั่ง bash ด้วยวิธีนี้หรือไม่?
คำตอบ:
เริ่มต้นคำสั่งของคุณด้วยช่องว่างและมันจะไม่รวมอยู่ในประวัติศาสตร์
โปรดระวังว่าสิ่งนี้จะต้อง$HISTCONTROLตั้งค่าตัวแปรสภาพแวดล้อม
ตรวจสอบว่าคำสั่งต่อไปนี้กลับมาignorespaceหรือ
ignoreboth
#> echo $HISTCONTROLหากต้องการเพิ่มตัวแปรสภาพแวดล้อมหากขาดหายไปสามารถเพิ่มบรรทัดต่อไปนี้ลงในโปรไฟล์ทุบตี เช่น%HOME/.bashrc
export HISTCONTROL=ignorespaceหลังจากหาโปรไฟล์คำสั่งที่ขึ้นต้นด้วยช่องว่างอีกครั้งจะไม่ถูกเขียนไป $HISTFILE
ในเซสชัน Bash ใด ๆ ให้ตั้งค่าไฟล์ประวัติเป็น / dev / null โดยพิมพ์:
export HISTFILE=/dev/null
โปรดทราบว่าตามที่ระบุไว้ในความคิดเห็นสิ่งนี้จะไม่เขียนคำสั่งใด ๆ ในเซสชันนั้นไปยังประวัติ!
โปรดอย่ายุ่งกับการทำงานหนักของผู้ดูแลระบบโปรด;)
โซลูชันของ Doodadนั้นสง่างามยิ่งกว่า เพียงแค่ยกเลิกการตั้งค่าตัวแปร: unset HISTFILE(ขอบคุณ!)
/dev/nullอนุญาตให้ตั้งค่าเป็น 0600 เมื่อล็อกเอาต์ unset HISTFILEแต่ผมใช้
ส่วนขยายของคำตอบของ @John Doe & @ user3270492 แต่นี่ดูเหมือนจะใช้ได้สำหรับฉัน
<your_secret_command>; history -d $((HISTCMD-1))
คุณไม่ควรเห็นรายการคำสั่งในประวัติของคุณ
นี่คือคำอธิบาย ..
'history -d' จะลบรายการที่กล่าวถึงจากประวัติ
HISTCMD เก็บ command_number ของอันที่จะดำเนินการต่อไป ดังนั้น (HISTCMD-1) หมายถึงคำสั่งที่ดำเนินการล่าสุด
คุณอาจพิจารณาใช้เชลล์ที่ไม่มีประวัติเช่นบางที
/bin/sh << END
your commands without history
END
(อาจจะ/bin/dashหรือ/bin/sashอาจจะเหมาะสมกว่า/bin/sh)
หรือใช้ยูทิลิตี้แบตช์ได้ดียิ่งขึ้นเช่น
batch << EOB
your commands
EOB
ประวัติศาสตร์จะมีshหรือbatchไม่มีความหมายมากนัก
คุณสามารถเริ่มเซสชันของคุณด้วย
export HISTFILE=/dev/null ;history -d $(history 1)
จากนั้นดำเนินการตามที่คุณแอบทำ การตั้งค่า histfile เป็น/dev/nullจะบันทึกลงในไฟล์ประวัติ แต่รายการนี้จะถูกลบออกอย่างง่ายดายและไม่มีร่องรอย (อย่างน้อยในไฟล์ประวัติ) จะปรากฏขึ้น
นอกจากนี้ยังไม่ถาวร
เป็นที่กล่าวถึงโดย doodad ในความคิดเห็น , unset HISTFILEไม่นี้เป็นอย่างดี แต่ในกรณีที่คุณยังต้องการที่จะลบประวัติศาสตร์บางคนทำecho $HISTFILEเพื่อรับตำแหน่งแฟ้มประวัติ (ปกติ~/.bash_history) unset HISTFILEและแก้ไข~/.bash_history(หรือสิ่งที่HISTFILEเป็น - แน่นอนมันในขณะนี้unsetเพื่อให้คุณสามารถ' ฉันไม่ได้อ่านมัน)
$ echo $HISTFILE # E.g. ~/.bash_history
$ unset HISTFILE
$ vi ~/.bash_history # Or your preferred editor
จากนั้นคุณได้แก้ไขประวัติของคุณและความจริงที่ว่าคุณแก้ไขมัน!
unset HISTFILE; echo TEST; historyจะให้คำสั่งแก่คุณecho TESTก่อนหน้านี้เป็นครั้งสุดท้าย แม้ว่าหลังจากสิ้นสุดเซสชันและเชื่อมต่ออีกครั้ง แต่ประวัติไม่มีรายการนี้ ดังนั้นฉันจะบอกว่ามันใช้งานได้ :)
unset HISTFILEดูเหมือนจะไม่หยุดคำสั่งที่ถูกบันทึกไว้ในประวัติในหน่วยความจำ แต่มันจะหยุดคำสั่งที่ถูกบันทึกไว้ในไฟล์ $ HISTFILE ใด ๆ ก็ได้ ดังนั้นฉันเดาว่าคุณยังมีประวัติในเครื่องของคุณอยู่ในหน่วยความจำ แต่มันไม่ได้ถูกบันทึกในไฟล์อีกต่อไปซึ่งเป็นสิ่งที่คุณอาจต้องการ! ;)
คุณยังสามารถใช้คำสั่งต่อไปนี้:
echo toto; history -d $(history | sed -n '$s/\s*\([0-9]*\)\s*.*$/\1/p')
ฉันคิดว่ามันเป็นคำสั่งแบบพกพามาก
alias forget="history -d $(history | sed -n '$s/\s*\([0-9]*\)\s*.*$/\1/p')"และตอนนี้คุณสามารถทำสิ่งนี้:mysql -uroot -pSecretPassword ; forget
$sและสิ่งอื่น ๆ ในใจ function forget() { // put code here // }
หากคุณใช้zshคุณสามารถเรียกใช้:
setopt histignorespace
หลังจากตั้งค่าแล้วคำสั่งแต่ละคำสั่งที่ขึ้นต้นด้วยช่องว่างจะถูกแยกออกจากประวัติ
คุณสามารถใช้นามแฝงใน.zshrcการเปิด/ ปิด :
# Toggle ignore-space. Useful when entering passwords.
alias history-ignore-space-on='\
setopt hist_ignore_space;\
echo "Commands starting with space are now EXCLUDED from history."'
alias history-ignore-space-off='\
unsetopt hist_ignore_space;\
echo "Commands starting with space are now ADDED to history."'
มีหลายวิธีที่คุณสามารถทำได้ สิ่งนี้ตั้งค่าขนาดของไฟล์ประวัติเป็น 0:
export HISTFILESIZE=0
สิ่งนี้ตั้งค่าไฟล์ประวัติเป็น/dev/nullปิดการใช้งานอย่างมีประสิทธิภาพ:
export HISTFILE=/dev/null
สำหรับแต่ละคำสั่งคุณสามารถนำหน้าคำสั่งด้วยช่องว่างและคำสั่งนั้นจะไม่ถูกบันทึกไว้ในไฟล์ประวัติ โปรดทราบว่าสิ่งนี้ต้องการให้คุณมีignorespaceค่าที่รวมอยู่ใน$HISTCONTROLตัวแปรสภาพแวดล้อม (man bash และค้นหาignorespaceรายละเอียดเพิ่มเติม)
สิ่งนี้มีประโยชน์ถ้าคุณต้องการลบประวัติทั้งหมดรวมถึงความจริงที่ว่าคุณลบประวัติทั้งหมด!
rm .bash_history;export HISTFILE=/dev/null;exit
คุณเพียงแค่ต้องเรียกใช้:
$ set +o history
หากต้องการดูเพิ่มเติมให้เรียกใช้:
$ man set
set -x historyหลังจากนั้นก็ใช้งานได้
คำสั่งนี้อาจมีประโยชน์ สิ่งนี้จะไม่บันทึกคำสั่งที่เรียกใช้งาน
history -d $((HISTCMD-1)) && <Your Command Here>