ฉันต้องการรันคำสั่งบางอย่าง แต่ไม่ต้องการเก็บไว้ในประวัติคำสั่ง เพื่อให้ไม่มีใครสามารถค้นหาได้ใน.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>