बैश इतिहास में "इतिहास -d" छुपाएं


14

अगर मैं गलती से अपना पासवर्ड या किसी और चीज़ को संवेदनशील के रूप में टाइप कर दूं तो मैं आसानी से उस लाइन को हटा सकता हूं history -d ROW#, लेकिन मैं हमेशा history -d ROW#इतिहास में कमांड के साथ छोड़ता हूं, जिसमें सभी को यह दिखाया जाता है कि किसी ने गलती सुधार ली।

क्या मैं इसे बैश इतिहास में प्रदर्शित होने से रोकने के लिए कमांड में कुछ जोड़ सकता हूं?

जवाबों:


27

अपने इतिहास में एक भी कमांड को नहीं बचाने के लिए इसे एक स्थान के साथ पहले से चिह्नित करें ( यहाँ पर चिह्नित किया गया है):

$ echo test
test
$ history | tail -n2
 3431  echo test
 3432  history | tail -n2
$ echo test2
test2
$ history | tail -n2
 3431  echo test
 3432  history | tail -n2

यह व्यवहार आपकी ~/.bashrcफ़ाइल में, इस पंक्ति में सेट किया गया है :

HISTCONTROL=ignoreboth

man bash कहते हैं:

HISTCONTROL
इतिहास सूची में आदेशों को सहेजने के तरीके को नियंत्रित करने वाले मूल्यों की एक बृहदान्त्र-पृथक सूची। यदि मानों की सूची में अज्ञानता शामिल है , तो एक अंतरिक्ष चरित्र के साथ शुरू होने वाली लाइनें इतिहास सूची में सहेजी नहीं जाती हैंनजरअंदाज किए गए मान के कारण पिछली इतिहास प्रविष्टि से मेल खाते हुए लाइनों को बचाया नहीं जा सकता है। का मान ignoreboth के लिए आशुलिपि है ignorespace और ignoredups

ignoredupsवैसे, यही कारण है कि history | tail -n2उपरोक्त परीक्षण में इतिहास में केवल एक बार दिखाई देता है।


एक टर्मिनल का इतिहास रैम में सहेजा जाता है और ~/.bash_historyजैसे ही आप टर्मिनल को बंद करते हैं, आपके पास फ्लश हो जाता है। यदि आप किसी विशिष्ट प्रविष्टि को अपने से हटाना चाहते ~/.bash_historyहैं, तो आप ऐसा कर सकते हैं sed:

                                   # print every line…
sed '/^exit$/!d' .bash_history     # … which is just “exit”
sed '/^history/!d' .bash_history   # … beginning with “history”
sed '/>>log$/!d' .bash_history     # … ending with “>>log”
sed '\_/path/_!d' .bash_history    # … containing “/path/” anywhere

पिछले एक में मैंने डिफ़ॉल्ट सीमांकक /को बदल दिया _क्योंकि यह खोज शब्द के अंदर उपयोग किया जाता है, वास्तव में यह इसके बराबर है sed -i '/\/path\//d' .bash_history। यदि आदेश आउटपुट केवल लाइनों आप जोड़ना हटाना चाहते हैं -iविकल्प और परिवर्तन !dकरने के लिए dहटाए जाने के प्रदर्शन करने के लिए:

                                   # delete every line…
sed -i '/^exit$/d' .bash_history   # … which is just “exit”
sed -i '/^history/d' .bash_history # … beginning with “history”
sed -i '/>>log$/d' .bash_history   # … ending with “>>log”
sed -i '\_/path/_d' .bash_history  # … containing “/path/” anywhere

12

एक तरीका यह होगा कि HISTIGNOREपर्यावरण चर निर्धारित किया जाए । सेman bash

HISTIGNORE
      A colon-separated list of patterns used to decide which  command
      lines  should  be  saved  on  the history list.  Each pattern is
      anchored at the beginning of the line and must  match  the  com‐
      plete  line  (no  implicit  `*'  is  appended).  Each pattern is
      tested against the line after the checks specified  by  HISTCON‐
      TROL  are  applied. 

[एफडब्ल्यूआईडब्ल्यू, यह डिफ़ॉल्ट HISTCONTROLहै जो टाइप-ए-स्पेस-इन-फ्रंट वर्कअराउंड प्रदान करता है]।

इसलिए, उदाहरण के लिए

HISTIGNORE='history -d*'

यदि आप चाहते हैं कि यह लगातार बना रहे, तो इसे अपने से निर्यात करें ~/.bashrc

export HISTIGNORE='history -d*'

6

आप ऐसा कर सकते हैं

  • टर्मिनल विंडो बंद करें । यह टर्मिनल विंडो में सबसे वर्तमान इतिहास को फ्लश करेगा जिसे आप फ़ाइल में नवीनतम (अन्य विंडो बंद होने के बाद) बंद करते हैं/home/$USER/.bash_history

  • /home/$USER/.bash_historyशामिल किए बिना फ़ाइल को संपादित करेंbash , उदाहरण के लिए Alt+ के माध्यम से अपने पसंदीदा संपादक को शुरू करकेF2

    इस तरह आप पूरे इतिहास का निरीक्षण कर सकते हैं और जो कुछ भी आदेश निकाल सकते हैं, वह यह है कि अब आप वहां नहीं रहना चाहते।

    यहां छवि विवरण दर्ज करें

    यहां छवि विवरण दर्ज करें


1

मैं आमतौर पर उपयोग करता हूं:

history -w; history -c; $EDITOR $HISTFILE; history -r

इतिहास फ़ाइल को डिस्क पर लिखा गया है, जिसे मेमोरी में क्लीयर किया गया है, आप इसे संपादित करना चाहते हैं कि आप क्या चाहते हैं, और फिर आपके द्वारा संपादित इतिहास फ़ाइल को वापस पढ़ा जाता है।

ध्यान दें कि यदि आप संपादक बैकअप फ़ाइलों को सहेजते हैं, तो शरारती शब्द अभी भी डिस्क पर दिखाई दे सकता है।

एक अन्य विकल्प का -dउपयोग भविष्यवाणियों के इतिहास संख्याओं का उपयोग करना है:

startide sr> # good thing
startide sr> # bad thing
startide sr> history | tail -n 2
17239  # bad thing
17240  history | tail -n 2
startide sr> history -w; history -d 17239; history -d 17239; history -d 17239
startide sr> # other thing
startide sr> history | tail -n 3
17239  # good thing
17240  # other thing
17241  history | tail  -n 3

इस उदाहरण में, मैं बुरी चीज को हटाता हूं, मैं इतिहास संख्या प्राप्त करने के लिए कमांड हटाता हूं, और फिर मैं उस कमांड को हटा देता हूं जिसका उपयोग मैंने इतिहास को हटाने के लिए किया था। तब सब कुछ पवित्र हो जाता है।


0

यदि आप इसे इतिहास में सहेजे बिना एक कमांड चलाना चाहते हैं, तो इसे एक अतिरिक्त स्थान के साथ प्रस्तुत करें

prompt$ echo saved
prompt$  echo not saved \
> #     ^ extra space

इस काम के लिए आपको HISTCONTROL में इग्नोरस्पेस या इग्नेबॉथ की जरूरत है। उदाहरण के लिए, भागो

HISTCONTROL = ignorespace इस सेटिंग को लगातार बनाने के लिए, इसे अपने .bashrc में रखें।

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