टर्मिनल 'गुप्त मोड'?


230

मैं टर्मिनल का बहुत उपयोग करता हूं, और कभी-कभी मैं कमांड चला रहा हूं, जो ऐसी चीजें नहीं हैं जो मैं दूसरों को नहीं देखना चाहता हूं, लेकिन अधिक कमांड जो कि अगर मैं गलती से चला गया और गलती से निष्पादित हो गया तो बहुत परेशानी होगी।

इसलिए मैं सोच रहा हूं कि क्या है, या मैं बना सकता हूं, कुछ प्रकार के टर्मिनल 'गुप्त मोड' जो मुझे एक निश्चित कमांड के निष्पादन पर, मेरे इतिहास को रिकॉर्ड करना बंद कर देंगे, और उसके बाद ही रिकॉर्डिंग शुरू करेंगे जब मैं या तो एक निष्पादित कर दूंगा इतिहास को फिर से रिकॉर्ड करना शुरू करें और 'गुप्त मोड' से बाहर निकलें, या मैं बस टर्मिनल को पुनः आरंभ कर दूं?

क्योंकि मैं अपने आप को बाद में जा रहा हूं और अपने सामान को हटा रहा हूं .bash_history, जब यह बहुत आसान होगा अगर मैं इसे पहले स्थान पर रिकॉर्ड करना बंद कर सकता हूं, या कम से कम इसे कहीं रिकॉर्ड करने की कोशिश करने के लिए मिला, जहां यह बस नहीं होगा करने की अनुमति दी, और बस इसे रिकॉर्ड नहीं करेंगे।


6
ठीक है, संभवतः आप पागल हैं कि आपका इतिहास दूसरों द्वारा पढ़ा जाएगा?
स्पार्कहॉक

6
@ श्रावक: ठीक है, यह आंशिक रूप से है, और पार्टी मैं गलती से संभवत: घातक रखरखाव कमांड को निष्पादित नहीं करना चाहता जब मैं भविष्य में सिर्फ तीर चला रहा हूं! : D

19
बस जोड़ने के लिए, आपको अपने आप को सही ठहराने की जरूरत नहीं है: "जो चीजें मैं दूसरों को नहीं देखना चाहता हूं" । यह मेरे लिए भी एक सर्वथा मान्य कारण होगा। (विशेष रूप से इस समय और उम्र जहां हर कोई कोशिश करता है में "चीजों को छिपाने के लिए" होने के लिए आप दोषी बनाने के लिए)
ereOn

2
यदि आप दो टैब खोलते हैं, पहले एक में सामान करते हैं, दूसरे में सामान करते हैं, तो पहले एक से दूसरे को बंद करें, केवल पहले के इतिहास को लिखा जाना प्रतीत होता है .bash_history। (उबंटू 15.04 बर्बाद हुआ टर्मिनल, भाग्यशाली है कि यह एक लाइव यूएसबी है।)
हाईटेककंप्यूटरजेक

जवाबों:


265

इसे इतिहास में डाले बिना एक कमांड चलाएँ:

बस कमांड से पहले एक जगह रखो। बैश एक अविकसित स्थान के साथ आदेशों की उपेक्षा करेगा:

उदाहरण: Spaceecho "Some secret text"

नोट: यह केवल तभी काम करता है जब HISTCONTROLचर सेट किया जाता है ignorespaceया ignoreboth


अस्थायी रूप से इतिहास अक्षम करें:

  • इतिहास को चलाना Spaceset +o historyया Spaceshopt -uo historyअक्षम करना।
  • फिर से चलाना set -o historyया shopt -so historyसक्षम करना।

वर्तमान सत्र के लिए इतिहास अक्षम करें (सत्र से कोई आदेश याद नहीं होगा):

unset HISTFILE

नोट: Upजब तक आप टर्मिनल को बंद नहीं करेंगे तब तक आप कमांड को दबाकर देख पाएंगे ।


इतिहास से एक कमांड निकालें:

Daud 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
इसने मुझे केवल सुपर-निषेध तर्क की याद
दिलाई

4
(ओटी) इंजेक्शन एक कानूनी दस्तावेज है जो लोगों को कुछ प्रकाशित करने से रोकता है। एक सुपर निषेधाज्ञा उन्हें इस तथ्य को प्रकाशित करने से भी रोकती है कि उन्हें प्रकाशित करने की क्षमता से वंचित किया गया था। कुछ तार्किक तर्क पूछते हैं कि क्या वे प्रकाशित कर सकते हैं कि उन्हें कुछ जानकारी प्रकाशित करने की क्षमता से वंचित किया गया था। फिर यह एक चक्रीय तर्क बन जाता है।
AJFaraday

1
@ हेलियो मुझे लगता है कि उपयोगकर्ताओं के लिए कॉपी करने के "उचित" तरीके को जानना बेहतर है - खासकर अगर वे गलती से जाते हैं और कुछ पाठ का चयन करते हैं। मुझे यकीन नहीं है कि अंतरिक्ष कैसे करें, शायद अधिक स्पष्ट करें कि अंतरिक्ष है? [स्पेस] मुझे थोड़ा अनाड़ी लगता है ...
टिम

2
यह unset HISTFILEदृष्टिकोण उन सभी आदेशों के लिए भी कार्य करता है जो .bash_historyअभी तक नहीं लिखे गए हैं ।
कैस्परड

40

आप बस काम करने के बाद कमांड जोड़कर एक विशेष टर्मिनल सत्र के इतिहास को हटा सकते हैं history -cw

इस आदेश को देने से पहले टर्मिनल को बंद न करें।


इससे सारा इतिहास नहीं हट जाएगा?
हेलियो

6
यह केवल उस विशेष टर्मिनल सत्र के इतिहास को हटा देगा।
मोइथिल बिस्वास

28

shopt -uo history इसे सबसे अच्छा करना चाहिए।

HISTFILE(एट अल) वेरिएबल्स को Nuking करने से आपका Upइतिहास लॉग इन नहीं होगा, यह सिर्फ डिस्क पर नहीं जाएगा। यह आपके लिए एक सकारात्मक बात हो सकती है या नहीं, लेकिन आपने इसका उल्लेख किया है, मुझे लगता है कि आप कुछ बेहतर चाहते हैं। shoptइतिहास की सेटिंग को बदलने से पूरे इतिहास तंत्र को ट्रिगर होने से रोकता है।

आप के साथ वापस प्रवेश बंद कर सकते हैं shopt -so history( -sऔर -uक्रमशः सेट और सेट नहीं कर रहे हैं)।

ध्यान दें कि कमांड को स्वयं लॉग किया जाएगा, इसलिए इसे वेरिएबल को क्लियर करने से पहले इसे इतिहास में जोड़े जाने से रोकने के लिए स्पेस के साथ प्रिपेंड करें।


17

इतिहास फ़ाइल में प्रवेश किए बिना वर्तमान शेल को मारने का एक और तरीका है:

kill -9 $$

यह स्वयं को SIGKILL सिग्नल भेजने के लिए बैश (और शायद अन्य गोले भी) का कारण बनता है, इसे मौके पर मारना और डिस्क पर कुछ भी लिखने से रोकना।


7
उर्फ 'सिर में अपने आप को गोली मार' :)। इसका यह लाभ है कि आपको कमांड लिखने से पहले कुछ भी करने के लिए याद रखने की आवश्यकता नहीं है।
गुइडो

3
मैं वृद्धिशील इतिहास लिखने के साथ zsh का उपयोग करता हूं, इसलिए मुझे संदेह है कि यह मेरे मामले में काम करेगा
वेन वर्नर

13

वर्तमान सत्र के लिए कमांड इतिहास को अस्थायी रूप से अक्षम करने के लिए, आप अस्थायी रूप से HISTFILE पर्यावरण चर को परेशान कर सकते हैं।

unset HISTFILE

सत्र सक्रिय होने पर आप हमेशा की तरह इतिहास एक्सेस कर सकते हैं, लेकिन यह डिस्क पर सहेजा नहीं जाएगा।

एक ही सत्र में रिवर्स करने के लिए (सभी परिवर्तन दर्ज किए जाएंगे)

HISTFILE=$HOME/.bash_history

1
और क्या मौजूदा सत्र में इसे उलटने और इसे आगे बढ़ाने का एक आसान तरीका है?

@PranoidPanda मैंने वर्तमान सत्र में पुन: प्रस्तुत करने के लिए एक आदेश जोड़ा।
ब्रूनी

1
@PranoidPanda: आपको HISTFILEवर्तमान सत्र पर फिर से सेट करने के लिए कमांड की आवश्यकता क्यों है ? यदि आप परिवर्तन को पूर्ववत करते हैं (गुप्त आदेशों को चलाने के बाद भी) वे आपके बाहर निकलने पर इतिहास में संग्रहीत किए जाएंगे।
हेलियो

@ हेलियो: ओह, नहीं, मेरा मतलब था कि एक कमांड जो फिर से रिकॉर्डिंग शुरू करेगी, लेकिन उन कमांड को नहीं बचाएगी जिन्हें मैं नहीं चाहता था कि वे इसे बचाएं।

1
@PranoidPanda, Helio इस पर सही लगता है क्योंकि इतिहास से बाहर निकलने पर बचाया जाता है। मैंने उस पर विचार नहीं किया था।
ब्रूनी

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इतिहास को सहेजा नहीं जाएगा।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.