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


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

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

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


225
2018-05-18 14:53


मूल


@Sparhawk: क्या?
खैर, संभवतः आप हैं पागल कि आपका इतिहास दूसरों द्वारा पढ़ा जाएगा? - Sparhawk
@Sparhawk: ठीक है, यह आंशिक रूप से है कि, और पार्टी मैं भविष्य में केवल तीरंदाजी कर रहा हूं जब मैं संभवतः घातक रखरखाव आदेश निष्पादित करना नहीं चाहता! : डी
बस जोड़ने के लिए, आपको खुद को औचित्य देने की आवश्यकता नहीं है: "जो चीजें नहीं हैं मैं नहीं चाहता कि दूसरों को देखना पड़े"। यह भी मेरे लिए एक बिल्कुल वैध कारण होगा। (विशेष रूप से इस समय और उम्र में जहां हर कोई आपको "चीजों को छिपाने" के लिए दोषी दिखने की कोशिश करता है) - ereOn
यदि आप दो टैब खोलते हैं, तो पहले में सामान करें, दूसरे में सामान करें, फिर पहले व्यक्ति से पहले दूसरा बंद करें, केवल पहले के इतिहास को ही लिखा जा सकता है .bash_history। (उबंटू 15.04 बर्बाद टर्मिनल, भाग्यशाली यह एक लाइव यूएसबी है।) - Hitechcomputergeek


जवाब:


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

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

उदाहरण: अंतरिक्षecho "Some secret text"

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


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

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

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

unset HISTFILE

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


इतिहास से एक आदेश निकालें:

रन अंतरिक्षhistory | 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+खिसक जाना+सी

रन अंतरिक्षhistory -d <number> कहा पे <number> प्रविष्टि को हटाने के लिए प्रवेश संख्या है।
आप उस नंबर को पेस्ट कर सकते हैं Ctrl+खिसक जाना+वी


अन्य दिलचस्प उत्तर:


260
2018-05-19 15:01



यदि तुम प्रयोग करते हो history -d एक रेखा को हटाने के लिए, यह लाइन की सामग्री को हटा देगा, लेकिन आप इस तथ्य को कभी भी नहीं हटा सकते कि आपने भाग लिया था history -d(जब तक आप पहले उपयोग नहीं करते हैं set +o history दौड़ने से पहले history -d) - AJFaraday
यह सिर्फ मुझे सुपर-इंजेक्शन तर्क की याद दिलाता है, यह सब कुछ है;) - AJFaraday
(ओटी) संयोजन एक कानूनी दस्तावेज है जो लोगों को कुछ प्रकाशित करने से रोकता है। एक सुपर इंजेक्शन उन्हें इस तथ्य को प्रकाशित करने से भी रोकता है कि उन्हें प्रकाशित करने की क्षमता से इंकार कर दिया गया था। कुछ तार्किक तर्क पूछते हैं कि क्या वे प्रकाशित कर सकते हैं कि उन्हें कुछ जानकारी प्रकाशित करने की क्षमता से इंकार कर दिया गया था। फिर यह एक चक्रीय तर्क बन जाता है। - AJFaraday
@ हेलीओ मुझे लगता है कि उपयोगकर्ताओं के प्रति प्रतिलिपि बनाने के लिए "उचित" तरीका जानना बेहतर है - खासकर यदि वे गलती से जाते हैं और कुछ टेक्स्ट चुनते हैं। मुझे यकीन नहीं है कि अंतरिक्ष कैसे करें, शायद यह स्पष्ट करें कि अंतरिक्ष वहां है? [अंतरिक्ष] मेरे लिए थोड़ा बेकार लग रहा है ... - Tim
unset HISTFILE दृष्टिकोण उन सभी आदेशों के लिए पीछे से काम करता है जिन्हें लिखा नहीं गया है .bash_history अभी तक। - kasperd


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


39
2018-05-18 15:04



यह सभी इतिहास को नहीं हटाएगा? - Helio
यह केवल उस विशेष टर्मिनल सत्र का इतिहास हटा देगा। - Moithil Biswas


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

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

आप लॉगिंग को वापस चालू कर सकते हैं shopt -so history ( -s तथा -u क्रमशः सेट और अनसेट हैं)।

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


28
2018-05-19 22:00





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

kill -9 $$

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


17
2018-05-18 15:02



ए.के.ए. 'अपने आप को सिर में गोली मारो' :)। इसका लाभ यह है कि आपको आदेश लिखने से पहले कुछ भी करने की याद रखने की आवश्यकता नहीं है। - Guido
मैं वृद्धिशील इतिहास लिखने के साथ zsh का उपयोग करता हूं, इसलिए मुझे संदेह है कि यह मेरे मामले में काम करेगा - Wayne Werner


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

unset HISTFILE

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

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

HISTFILE=$HOME/.bash_history

13
2018-05-21 00:12



और क्या मौजूदा सत्र में इसे उलट करने के लिए एक आसान तरीका है, और इसे आगे बढ़ाना है?
@ पारानोइड पांडा मैंने वर्तमान सत्र में वापस आने के लिए एक कमांड जोड़ा। - Bruni
@ पारानोइड पांडा: आपको सेट करने के लिए कमांड की आवश्यकता क्यों है HISTFILE फिर मौजूदा सत्र पर? यदि आप परिवर्तन को पूर्ववत करते हैं (गुप्त आदेश चलाने के बाद भी) जब आप बाहर निकलते हैं तो उन्हें इतिहास में संग्रहीत किया जाएगा। - Helio
@ हेलीओ: ओह, नहीं, मेरा मतलब एक कमांड था जो फिर से रिकॉर्डिंग शुरू कर देगा, लेकिन उन आदेशों को सहेज नहीं पाएगा जिन्हें मैं सहेजना नहीं चाहता था।
@ पारानोइड पांडा, हेलीओ इस पर सही प्रतीत होता है क्योंकि इतिहास बाहर निकलने पर बचाया जाता है। मैंने उसे नहीं माना था। - Bruni


आप वर्तमान शेल सत्र में इतिहास लाइनों को संशोधित कर सकते हैं। यदि आप इतिहास के माध्यम से वापस चलते हैं (उदाहरण के साथ ऊपर या Ctrl+पी) और एक लाइन बदलें इसे निष्पादित किए बिना, लाइन का केवल संशोधित संस्करण सहेजा जाएगा। आप इसे किसी भी तरह से संशोधित कर सकते हैं; अच्छे विकल्पों में उपयोग शामिल होगा Ctrl+यू लाइन या पूरी तरह से खाली करने के लिए Esc# एक डालने के लिए # शुरुआत में टिप्पणी चरित्र।

इसे निष्पादित किए बिना एक रेखा को पीछे छोड़ने के लिए, हिट न करें याद रखें वापसी (दर्ज)। मैं जो करता हूं वह इतिहास में नवीनतम लाइन पर वापस आ जाता है Esc>

(के बजाय Esc के बाद >, अधिकांश टर्मिनलों में आप पकड़ सकते हैं ऑल्ट और दबाएं >; वही के लिए चला जाता है Esc# ऊपर सुझाव।)

ध्यान दें: आप इस तरह के पिछले सत्रों से प्रविष्टियों को स्थायी रूप से संशोधित नहीं कर सकते हैं। उन परिवर्तनों पर लागू नहीं किया जाएगा HISTFILE सत्र के अंत में।


10
2018-05-20 03:24





आप केवल .bash_history को केवल पढ़ने के लिए बना सकते हैं। मैं पहले फाइल को खाली कर दूंगा और फिर करूंगा:

 chattr +i .bash_history

6
2018-05-21 20:46





आप स्क्रीन सत्र में संवेदनशील कमांड निष्पादित कर सकते हैं, फिर जब आप पूरा कर लें तो सत्र को नष्ट कर दें।

वैकल्पिक रूप से, आप उस स्क्रीन सत्र को जीवित लेकिन अलग कर सकते हैं, और केवल तब तक पहुंच सकते हैं जब आप वास्तव में अन्यथा खतरनाक आदेशों के लिए तीर तक पहुंचने में सक्षम होना चाहते हैं।


5
2017-11-12 19:31





व्यक्तिगत रूप से मैं उपयोग करता हूं mksh, और डिफ़ॉल्ट रूप से इस खोल में कोई इतिहास फ़ाइल नहीं है। इसका मतलब है कि आप वैकल्पिक खोल जैसे लॉन्च कर सकते हैं mksh या dash (जिस तरह से डिफ़ॉल्ट रूप से आता है) उस आदेश को चलाने के लिए जिसे आप नहीं चाहते हैं कि उपयोगकर्ता देखना चाहते हैं, और एक बार बाहर निकलें। bash इतिहास केवल रिकॉर्ड करेगा कि आपने वैकल्पिक खोल लॉन्च किया था और यही वह है।


1
2018-04-06 10:50