เทอร์มินัล 'โหมดไม่ระบุตัวตน'?


230

ฉันใช้ Terminal มากและบางครั้งฉันกำลังใช้คำสั่งซึ่งไม่ใช่สิ่งที่ฉันไม่ต้องการให้คนอื่นเห็น แต่คำสั่งเพิ่มเติมที่ถ้าฉันตั้งใจลูกศรขึ้นไปโดยไม่ตั้งใจและดำเนินการโดยไม่ตั้งใจจะทำให้เกิดปัญหามากมาย

ดังนั้นฉันจึงสงสัยว่าจะมีหรือไม่ฉันสามารถสร้างโหมด 'โหมดไม่ระบุตัวตน' ซึ่งเป็นเทอร์มินัลบางประเภทซึ่งจะอนุญาตให้ฉันดำเนินการตามคำสั่งบางอย่างหยุดบันทึกประวัติของฉันแล้วเริ่มบันทึกหลังจากฉันดำเนินการ เริ่มบันทึกประวัติอีกครั้งคำสั่งและออกจาก 'โหมดไม่ระบุตัวตน' หรือฉันเพียงแค่รีสตาร์ท Terminal?

เพราะฉันพบว่าตัวเองกำลังจะไปและนำสิ่งต่าง ๆ ออกจากของฉัน.bash_historyเมื่อมันจะง่ายกว่านี้มากถ้าฉันสามารถหยุดมันไว้ที่นั่นได้ตั้งแต่แรกหรืออย่างน้อยก็ให้พยายามบันทึกมันที่ไหนสักแห่งที่มันจะไม่ ได้รับอนุญาตและจะจบลงด้วยการไม่บันทึก


6
สมมุติว่าคุณหวาดระแวงว่าคนอื่นจะอ่านประวัติของคุณบ้างไหม?
Sparhawk

6
@Sparhawk: ส่วนหนึ่งก็เป็นอย่างนั้นและปาร์ตี้ที่ฉันไม่ต้องการใช้คำสั่งการบำรุงรักษาที่อาจเป็นอันตรายถึงชีวิตโดยบังเอิญเมื่อฉันเพิ่งเข้ามาในอนาคต! : D

19
เพียงเพื่อเพิ่มคุณจะได้ไม่ต้องปรับตัวเอง"ซึ่งไม่ใช่สิ่งที่ฉันไม่ต้องการให้คนอื่นเห็น" นั่นก็เป็นเหตุผลที่สมบูรณ์แบบสำหรับฉันเช่นกัน (โดยเฉพาะอย่างยิ่งในเวลานี้และอายุที่ทุกคนพยายามที่จะทำให้คุณดูมีความผิดสำหรับการมี "สิ่งที่จะซ่อน")
ereOn

2
.bash_historyถ้าคุณเปิดแท็บทั้งสองทำในสิ่งที่คนแรกที่ทำในสิ่งที่หนึ่งที่สองแล้วปิดที่สองก่อนที่จะเป็นคนแรกเพียงประวัติศาสตร์ของคนแรกที่ดูเหมือนว่าจะถูกเขียนไป (Ubuntu 15.04 เทอร์มินัลเจ๊งโชคดีนี่คือ USB สด)
Hitechcomputergeek

1
ดูคำถามนี้ในความผิดพลาดของเซิร์ฟเวอร์
Luc M

คำตอบ:


265

เรียกใช้คำสั่งโดยไม่ใส่ไว้ในประวัติ:

เพียงแค่ใส่ช่องว่างหน้าคำสั่ง Bash จะเพิกเฉยคำสั่งที่มีช่องว่างไว้ล่วงหน้า:

ตัวอย่าง: Spaceecho "Some secret text"

หมายเหตุ: เฉพาะงานนี้ถ้าHISTCONTROLตัวแปรมีการตั้งค่าหรือignorespaceignoreboth


ปิดการใช้งานประวัติชั่วคราว:

  • เรียกใช้Spaceset +o historyหรือSpaceshopt -uo historyปิดใช้งานประวัติ
  • เรียกใช้set -o historyหรือshopt -so historyเปิดใช้งานอีกครั้ง

ปิดใช้งานประวัติสำหรับเซสชันปัจจุบัน (จะไม่จดจำคำสั่งใด ๆ จากเซสชัน):

unset HISTFILE

หมายเหตุ: คุณจะเห็นคำสั่งที่กดUpจนกว่าคุณจะปิดเครื่อง


ลบคำสั่งออกจากประวัติ:

วิ่ง Spacehistory | grep "part of your secret command"

มันจะแสดงรายการคำสั่งที่รันก่อนหน้านี้ในรูปแบบนี้:

casa@portátil:~$  history | grep pkill
  302  pkill $$
  467  pkill gone-cal
  468  pkill actionaz
  500  pkill chrome
  550  pkill super

เลือกหมายเลขรายการทางด้านซ้ายของคำสั่ง คุณสามารถคัดลอกด้วยCtrl+ Shift+C

รันSpacehistory -d <number>ที่<number>เป็นหมายเลขรายการเพื่อลบรายการ
คุณสามารถวางหมายเลขนั้นด้วยCtrl+ Shift+V


คำตอบที่น่าสนใจอื่น ๆ :


7
หากคุณใช้history -dเพื่อลบบรรทัดการดำเนินการนี้จะลบเนื้อหาของบรรทัด แต่คุณไม่สามารถลบข้อเท็จจริงที่คุณรันhistory -d(เว้นแต่คุณset +o historyจะใช้ก่อนใช้งานครั้งแรกhistory -d)
AJFaraday

1
มันทำให้ฉันนึกถึงตรรกะการสั่งห้ามแบบพิเศษนั่นคือทั้งหมด;)
AJFaraday

4
(OT) การบาดเจ็บเป็นเอกสารทางกฎหมายที่ทำให้ผู้คนไม่สามารถเผยแพร่บางสิ่งได้ คำสั่งห้ามพิเศษนี้ทำให้พวกเขาไม่สามารถเผยแพร่ข้อเท็จจริงที่ว่าพวกเขาถูกปฏิเสธความสามารถในการเผยแพร่ ข้อโต้แย้งเชิงตรรกะบางอย่างถามว่าพวกเขาสามารถเผยแพร่ว่าพวกเขาถูกปฏิเสธความสามารถในการเผยแพร่ข้อมูลบางอย่าง จากนั้นมันจะกลายเป็นข้อโต้แย้งตามวัฏจักร
AJFaraday

1
@Helio ฉันคิดว่ามันจะดีกว่าสำหรับผู้ใช้ที่จะรู้วิธีการ "คัดลอก" ที่เหมาะสม - โดยเฉพาะอย่างยิ่งถ้าพวกเขาไปโดยไม่ตั้งใจและเลือกข้อความ ฉันไม่แน่ใจว่าจะทำอย่างไรในพื้นที่อาจมีความชัดเจนมากขึ้นว่ามีพื้นที่? [space] ดูเหมือนจะงุ่มง่ามกับฉันเล็กน้อย ...
ทิม

2
unset HISTFILEวิธีการยังทำงานย้อนหลังสำหรับคำสั่งทั้งหมดที่ยังไม่ได้รับการเขียนเพื่อ.bash_historyเลย
kasperd

40

คุณสามารถลบประวัติของเทอร์มินัลเซสชันหนึ่งโดยการเพิ่มคำสั่งhistory -cwหลังจากทำงาน

อย่าปิดเครื่องก่อนที่จะให้คำสั่งนี้


จะไม่ลบประวัติทั้งหมดหรือไม่
Helio

6
นี่จะเป็นการลบประวัติของเทอร์มินัลเซสชันนั้นโดยเฉพาะ
Moithil Biswas

28

shopt -uo history ควรทำมันให้ดีที่สุด

Nuking ตัวแปรHISTFILE(et al) จะไม่หยุดUpประวัติของคุณถูกบันทึกมันจะไม่ผลักมันไปยังดิสก์ นี่อาจเป็นหรือไม่ใช่สิ่งที่ดีสำหรับคุณ แต่เมื่อคุณพูดถึงมันฉันคิดว่าคุณต้องการสิ่งที่ดีกว่า การเปลี่ยนการshoptตั้งค่าประวัติหยุดกลไกประวัติทั้งหมดไม่ให้มีการกระตุ้น

คุณสามารถเปิดการบันทึกอีกครั้งด้วยshopt -so history( -sและ-uถูกตั้งค่าและยกเลิกการตั้งค่าตามลำดับ)

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


17

อีกวิธีในการฆ่าเชลล์ปัจจุบันโดยไม่ทำการบันทึกลงในไฟล์ประวัติคือ:

kill -9 $$

สิ่งนี้ทำให้ bash (และอาจเป็น shell อื่น ๆ ด้วย) เพื่อส่งสัญญาณ SIGKILL ไปยังตัวมันเองฆ่ามันในจุดที่กำหนดและป้องกันไม่ให้มันเขียนอะไรลงดิสก์


7
aka 'ยิงตัวเองในหัว' :) นี่เป็นข้อดีที่คุณไม่จำเป็นต้องทำอะไรก่อนที่จะเขียนคำสั่ง
Guido

3
ฉันใช้ zsh กับการเขียนประวัติที่เพิ่มขึ้นดังนั้นฉันสงสัยว่าสิ่งนี้จะใช้ได้ในกรณีของฉัน
Wayne Werner

13

หากต้องการปิดใช้งานประวัติคำสั่งชั่วคราวสำหรับเซสชันปัจจุบันคุณสามารถยกเลิกการตั้งค่าตัวแปรสภาพแวดล้อม HISTFILE ได้ชั่วคราว

unset HISTFILE

ในขณะที่เซสชันใช้งานอยู่คุณสามารถเข้าถึงประวัติได้ตามปกติ แต่จะไม่ถูกบันทึกลงในดิสก์

หากต้องการย้อนกลับในเซสชันเดียวกัน (การเปลี่ยนแปลงทั้งหมดจะถูกบันทึกไว้)

HISTFILE=$HOME/.bash_history

1
และมีวิธีที่ง่ายในเซสชันปัจจุบันเพื่อย้อนกลับและทำต่อไปหรือไม่

@ParanoidPanda ฉันได้เพิ่มคำสั่งสำหรับการคืนค่าในเซสชันปัจจุบัน
Bruni

1
@ParanoidPanda: ทำไมคุณต้องมีคำสั่งให้ตั้งค่าHISTFILEอีกครั้งในเซสชันปัจจุบัน หากคุณเลิกทำการเปลี่ยนแปลง (แม้หลังจากเรียกใช้คำสั่งลับ) พวกเขาจะถูกเก็บไว้ในประวัติเมื่อคุณออก
Helio

@Helio: โอ้ไม่ฉันหมายถึงคำสั่งที่จะเริ่มบันทึกอีกครั้ง แต่ไม่ได้บันทึกคำสั่งที่ฉันไม่ต้องการให้บันทึก

1
@ParanoidPanda, Helio ดูเหมือนว่าจะถูกต้องในขณะนี้เนื่องจากบันทึกประวัติเมื่อออก ฉันไม่ได้พิจารณาสิ่งนั้น
Bruni

10

คุณสามารถแก้ไขบรรทัดประวัติในเซสชันเชลล์ปัจจุบัน หากคุณย้อนกลับไปในประวัติศาสตร์ (เช่นด้วยUpหรือCtrl+ P) และเปลี่ยนบรรทัดโดยไม่ต้องดำเนินการมันจะมีการบันทึกเฉพาะเวอร์ชันที่แก้ไขของบรรทัด คุณสามารถปรับเปลี่ยนได้ตามที่คุณต้องการ ตัวเลือกที่ดีจะรวมถึงการใช้Ctrl+ Uเพื่อเว้นบรรทัดทั้งหมดหรือใช้Esc#เพื่อใส่#อักขระความคิดเห็นในตอนเริ่มต้น

หากต้องการทิ้งบรรทัดไว้โดยไม่ดำเนินการใด ๆ อย่าลืมกดReturn( Enter) Esc>สิ่งที่ผมทำคือการกลับไปที่สายใหม่ล่าสุดในประวัติศาสตร์ผ่าน

(แทนที่จะEscตามมาด้วย>ในเทอร์มินัลส่วนใหญ่คุณสามารถAltกดค้างไว้และกด>; เช่นเดียวกันกับEsc#คำแนะนำข้างต้น)

หมายเหตุ:คุณไม่สามารถแก้ไขรายการจากเซสชันก่อนหน้าอย่างถาวรด้วยวิธีนี้ การเปลี่ยนแปลงเหล่านั้นจะไม่ถูกนำไปใช้กับHISTFILEตอนท้ายของเซสชัน


6

คุณสามารถสร้าง. bash_history เป็นแบบอ่านอย่างเดียวได้ ฉันจะล้างไฟล์ก่อนแล้วทำ:

 chattr +i .bash_history

5

คุณสามารถรันคำสั่งที่ละเอียดอ่อนในเซสชันหน้าจอจากนั้นทำลายเซสชันเมื่อคุณทำเสร็จแล้ว

อีกทางหนึ่งคุณสามารถทำให้เซสชันหน้าจอนั้นยังคงอยู่ แต่ถูกถอดออกและเข้าถึงได้เฉพาะเมื่อคุณต้องการลูกศรขึ้นไปยังคำสั่งที่อันตราย


1

ส่วนตัวฉันใช้mkshและเปลือกนี้โดยค่าเริ่มต้นไม่มีไฟล์ประวัติ นั่นหมายความว่าคุณสามารถเปิดเปลือกทางเลือกเช่นmkshหรือdash(ซึ่งมาโดยวิธีการตามค่าเริ่มต้น) เพื่อเรียกใช้คำสั่งที่คุณไม่ต้องการให้ผู้ใช้เห็นและออกจากเมื่อทำเสร็จแล้ว bashประวัติจะบันทึกว่าคุณเปิดตัวเชลล์สำรองแล้วเท่านั้น


1

คุณสามารถใช้เทอร์มินัลมัลติเพล็กเซอร์เช่นtmux, screen. ดังนั้นภายใต้tmuxหรือscreenประวัติศาสตร์จะไม่ถูกบันทึกไว้

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