जवाबों:
आपको लॉग आउट करने या वापस चलाने की आवश्यकता है history -a
ताकि वर्तमान इतिहास डिस्क के लिए प्रतिबद्ध हो।
तो बस फ़ाइल को संपादित करें ~/.bash_history
।
vim ~/.bash_history
एक स्थान के साथ अपनी कमांड (जैसे ) शुरू करें ; एक स्थान से शुरू होने वाली कमांड आमतौर पर लॉग इन नहीं होती है (देखें $HISTCONTROL
)।
आप दो चरणों में कमांडलाइन का उपयोग करके इतिहास फ़ाइल से निष्कासन प्राप्त कर सकते हैं:
history -d <line_number>
स्मृति में इतिहास से एक निर्दिष्ट रेखा हटाता है।history -w
में वर्तमान-मेमोरी इतिहास लिखता है ~/.bash_history
।दो चरण एक साथ इन-मेमोरी इतिहास और .bash_history फ़ाइल से स्थायी रूप से लाइन को हटाते हैं ।
history -w
इतिहास से अंतिम को कैसे हटाएं ?
<line_number>
सिर्फ history | grep [unwanted_content]
सभी लाइनों से युक्त एक सूची प्राप्त करने [unwanted_content]
(पासवर्ड)।
करने के लिए रोकने के लिए पहली जगह में इतिहास में शामिल होने से एक आदेश, सुनिश्चित करें कि वातावरण चर है कि HISTCONTROL
अपने पेट के अलग किए गए मान के बीच मान ignorespace
, उदाहरण के लिए (जोड़ने जैसे करने के लिए .bashrc
):
$ export HISTCONTROL=ignorespace
यह किसी भी कमांड को एक प्रमुख स्थान के साथ इतिहास में जोड़े जाने से रोकेगा। फिर आप चलकर इतिहास को पूरी तरह से साफ़ कर सकते हैं
$ history -c -w
^-- additional space character
सबसे पहले, यदि आप जिस कमांड को जारी करने वाले हैं वह संवेदनशील, असुरक्षित है, या आपको इसे अपने इतिहास को अव्यवस्थित करने की आवश्यकता नहीं है, तो यह सबसे अच्छा है / इसे सबसे पहले इतिहास में दर्ज करने से रोकने के लिए सबसे तेज़ है। सुनिश्चित करें कि $HISTCONTROL
इसमें शामिल हैं ignorespace
:
(bash)$ echo $HISTCONTROL
ignoredups:ignorespace
फिर अपने इतिहास में किसी भी कमांड को स्पेस के साथ न रखें।
(bash)$ sensitive-cmd-with --password 82cf7dfe
(bash)$ rm -r... # One-off recursive remove; mustn't be accidentally repeated!
यदि आपने गलती से इतिहास में अवांछित कमांड डाल दी है, तो यह प्रदान करते हुए कि आपका बैश सत्र अभी भी खुला है, कमांड ने अभी तक डिस्क को नहीं छुआ है। इतिहास में पिछली कमांड को हटाने के लिए, समस्या:
(bash)$ history -d $((HISTCMD-1))
अग्रणी स्थान पर ध्यान दें; इस आदेश की आवश्यकता है ignorespace
, अन्यथा यह केवल स्वयं को हटा देगा!
यदि आप पिछले कुछ आदेशों को हटाना चाहते हैं, तो अंतिम और पहला इतिहास संख्या खोजें:
(bash)$ history 5
598 ok
599 sensitive
600 unsafe
601 doesn\'t-work
602 otherwise-unwanted
इस मामले में 602 और 599। तब जारी करें:
(bash)$ for i in {602..599}; do history -d $i; done
(बिना ignorespace
, यह 603..599 होगा।)
यदि आप डिस्क को हिट करने के लिए अपने वर्तमान सत्र से कोई इतिहास नहीं चाहते हैं , तो बाहर निकलें:
(bash)$ kill -9 $$
अब तक का दृष्टिकोण संवेदनशील इतिहास की वस्तुओं को अतिरिक्त सुरक्षा के लिए डिस्क पर लिखने की अनुमति नहीं देना है, क्योंकि सिद्धांत में गैर-वाष्पशील मीडिया से हटाए गए डेटा को अभी भी पुनर्प्राप्त किया जा सकता है।
हालाँकि, यदि आप जिस कमांड को हटाना चाहते हैं, वे पिछले सत्र से हैं, तो उन्हें पहले ही $HISTFILE
बाहर निकलने के लिए जोड़ दिया गया होगा । ऊपर बताए गए आदेशों के साथ इतिहास से छेड़छाड़ अभी भी केवल जाएगा संलग्न शेष नया करने के लिए आइटम $HISTFILE
, बाहर निकलने पर । करने के लिए ऊपर लिख$HISTFILE
के चालू सत्र के दृश्य के साथ पूरे इतिहास, अभी , मुद्दा:
(bash)$ history -w
बेशक पहले से ही डिस्क पर इतिहास की वस्तुओं के लिए, history -d
फिर आदेश जारी करने के साथ इतिहास को संपादित करने का विकल्प history -w
, $HISTFILE
एक पाठ संपादक के साथ संपादित करना है ।
$HISTFILE
, बाहर निकलने पर ।" वास्तव में, यह वास्तव में सच नहीं है। यह केवल शेष नई वस्तुओं को जोड़ने के लिए लगता है जो मूल इतिहास की लंबाई से 'चिपके रहते हैं'। उदाहरण के लिए, यदि मैं 5 मूल आइटम निकालता हूं और 15 नए जोड़ देता हूं, तो केवल अंतिम 10 नए जोड़े जाते हैं, जबकि मुझे उम्मीद है कि सभी 15 नए जोड़े जाएंगे। मुझे लगता है कि यह एक बग है क्योंकि मैं नहीं देख सकता कि यह कैसे वांछनीय कार्यक्षमता है।
कई तकनीकें:
यदि आपने कमांड लाइन पर कुछ पासवर्ड डाला है, तो महसूस करें कि सभी कमांड लॉग इन हैं, आप या तो कर सकते हैं:
इतिहास को सहेजे बिना वर्तमान सत्र से बाहर निकलें:
kill -9 $$
यह सभी वर्तमान इतिहास को छोड़ देगा।
↑ (up arrow)ओपन बैश सत्र में टाइप करें जब तक संवेदनशील जानकारी नहीं दिखाई जाती है, तब संवेदनशील जानकारी को हटाने के लिए Ctrl+ की तरह लाइन एडिटिंग कीस्ट्रोक्स का उपयोग करें W, और तब ↓ (down arrow) तक टाइप करने से पहले एक नई खाली लाइन का संकेत दिया जाए Enter।
यदि आपको पता चलता है कि संवेदनशील जानकारी पहले से संग्रहीत है, और आप इसे हटाना चाहते हैं, लेकिन आपका पूरा इतिहास नहीं:
एक साधारण sed
आदेश काम कर सकता है:
sed -e '/SeNsItIvE InFo/d' -i .bash_history
लेकिन, जैसा कि आप इसे टाइप करते हैं, आप एक अन्य इतिहास लाइन बनाते हैं जिसमें खोज पैटर्न (संवेदनशील जानकारी) जिसे आप हटाने की कोशिश कर रहे हैं। तो आप कर सकते हैं:
sed -e "/$(head -n1)/d" -i .bash_history
यह head -n1
टर्मिनल से इनपुट के साथ चलेगा । यह दिखाई देगा कि आपका टर्मिनल लटका हुआ है (कोई संकेत नहीं होगा); बस वह जानकारी टाइप करें जिसे आप फ़ाइल से हटाना चाहते हैं। यह एक चाल है जो आपको वास्तव में कमांड लाइन में टाइप किए बिना एक कमांड दर्ज करने की अनुमति देता है (इस प्रकार) इसे रिकॉर्ड में शामिल करने के लिए अयोग्य बना दिया जाता है। फिर sed
उस पाठ का उपयोग करेंगे जिसे आपने .bash_history
संवेदनशील जानकारी वाली सभी पंक्तियों को खोजने और हटाने के लिए टाइप किया था । नोट: यदि आपके संवेदनशील सूचना पैटर्न में स्लैश (es) हैं, तो आपको उन्हें बैकस्लैश के साथ बचना चाहिए, अन्यथा sed
इस सिंटैक्स का उपयोग करने के लिए कमांड को बदलकर एक सीमांकक निर्दिष्ट करें जो पैटर्न में प्रकट नहीं होता है:
sed -e "\|$(head -n1)|d" -i .bash_history
एक और तरीका केवल संवेदनशील जानकारी को हटाने के लिए हो सकता है, लेकिन उन कमांड को रखें जिनमें जानकारी होती है। इसके लिए, आप संवेदनशील जानकारी को अपनी पसंद के स्थानापन्न पाठ से बदल सकते हैं:
sed -e "s/$(head -n1)/Santa Claus/g" -i .bash_history.
अंत में, यह सुनिश्चित करने के लिए कि यह दूसरी भूली हुई फ़ाइल में नहीं रहेगा :
SENSITIVEINFO="$(head -n1)"
find . -type f -print0 | xargs -0 grep -l "$SENSITIVEINFO"
सभी संबंधित फाइलों को सूचीबद्ध करेगा।
find . -type f -print0 |
xargs -0 grep -l "$SENSITIVEINFO" |
tr \\n \\0 |
xargs -0 sed -e "s/$SENSITIVEINFO/Santa Claus/g" -i
रूट किए गए निर्देशिका ट्री में सभी फ़ाइलों में संवेदनशील जानकारी की सभी घटनाओं को प्रतिस्थापित करेगा .
। नोट: भले ही यह कमांड का उपयोग करता है xargs -0
, यह अपने नाम में नई सुर्खियों वाली फाइलों को संभाल नहीं पाएगा।
↑ (up arrow)जब तक यह दिखाई न दे तब तक आप जिस लाइन को हटाना चाहते हैं, उसका पता लगाएँ , फिर Ctrl+ दबाएँ U। कि लाइन को हटा देना चाहिए।
यदि आप history
कमांड का उपयोग करते हैं , तो आप देख सकते हैं कि लाइन को तारांकन चिह्न के साथ प्रतिस्थापित किया गया है।
*
।
यदि आपको एक ही समय में कई पंक्तियों को हटाने की आवश्यकता है तो मैं सामान्य रूप से इसका उपयोग करता हूं:
history | grep <string> | cut -d ' ' -f 3 | awk '{print "history -d " $1}'
यदि आपको अंतिम कमांड को निकालने की आवश्यकता है, जिसका आप उपयोग कर सकते हैं:
history -d $((HISTCMD-2))
history | grep <string>
भी यह सभी लाइनों को दिखाता है जो इसे हटाने का दावा करता है ...
history | grep XYZ | grep -v grep | tac | awk '{print "history -d", $1}'
यदि आपको इतिहास से कई लाइनों को हटाने की आवश्यकता है, तो निम्नलिखित बैश फ़ंक्शन आपको कुछ समय बचा सकता है:
function histdel() {
[ $# -eq 1 ] && history -d "$1" && history -w
if [ $# -eq 2 -a "$1" -le "$2" ]; then
for n in `seq "$2" "$1"`; do
history -d "$n"
done
history -w
fi
}
फ़ंक्शन को आम तौर पर जोड़ा जाना चाहिए $HOME/.bashrc
। फ़ंक्शन imediatelly का उपयोग करने के लिए, आपको अपने रनिंग शेल ( . $HOME/.bashrc
) द्वारा फ़ाइल को फिर से पढ़ना होगा । फिर इतिहास से 200-210 आदेशों को हटाने के लिए:
$ histdel 200 210
(नोट: यह सवाल शीर्ष खोज परिणामों में से है यदि आप बैश इतिहास से कई कमांड को हटाने के लिए खोज करते हैं। इसलिए, जबकि ऊपर जो सवाल पूछता है उससे अधिक है, यह कुछ पाठकों के लिए उपयोगी हो सकता है।)
for
कथन के लिए वैकल्पिक रूप : for n in $(seq "$2" "$1")
कुछ के द्वारा शैलीगत रूप से पसंद किया जाता है, और, यदि seq
काम नहीं करता है , तो प्रयास करें for ((n="$2"; n>="$1"; n--))
।
बस इन्हें आज़माएं,
$ history
यह इतिहास और कमांड की आईडी प्रदर्शित करेगा, जैसे
।
।
211 ls
212 javac Welcome.java
213 जावा स्वागत है
।
।
उपयोग,
$ history -d 211
यहां 211 इतिहास की पहचान है। अब इस का उपयोग कर की जाँच करें
$ history
।
।
211 javac Welcome.java
212 जावा का स्वागत है
।
।
मुझे पता है कि यह प्रश्न पूछे जाने और जवाब दिए जाने में काफी समय हो गया है, लेकिन मैं आपको अपनी इतिहास फ़ाइल को साफ करने और उसी समय लॉग आउट करने के लिए अपना तरीका दिखाऊंगा।
मै भागा :
history -w && nano "${HISTFILE}" && history -c && exit
यह क्या सरल है:
history -w
: अंदर कैश्ड इतिहास लिखता है "${HISTFILE}"
nano "${HISTFILE}"
: मुझे संपादित करने की अनुमति दें "${HISTFILE}"
आप एक सीड स्क्रिप्ट का उपयोग कर सकते हैं या जो कुछ भी अपने को साफ करना चाहते हैं"${HISTFILE}"
history -c
: कैश्ड हिस्ट्री क्लियर हो इसलिए यह आखिरी कमांड नहीं है।exit
: मुझे लॉग इन कैश्ड हिस्ट्री ... लेकिन यह खाली है;)उस आदेश के बाद, आपको एक साफ इतिहास फ़ाइल के साथ लॉग आउट किया जाएगा। अपना इतिहास जांचने के लिए लॉग इन करें;)
मुझे उम्मीद है कि यह किसी की मदद करेगा।