मेरा उत्तर पिछले उत्तरों पर आधारित है, लेकिन अनुक्रम को उलटने के अलावा ताकि इतिहास की वस्तुओं को हाल के सबसे कम से कम हाल ही में हटा दिया जाए।
अपना वर्तमान इतिहास प्राप्त करें (उन पंक्तियों की संख्या को समायोजित करें जिन्हें आप देखना चाहते हैं):
history | tail -n 10
यह मुझे कुछ ऐसा देता है
1003 25-04-2016 17:54:52 echo "Command 1"
1004 25-04-2016 17:54:54 echo "Command 2"
1005 25-04-2016 17:54:57 echo "Command 3"
1006 25-04-2016 17:54:59 echo "Command 4"
1007 25-04-2016 17:55:01 echo "Command 5"
1008 25-04-2016 17:55:03 echo "Command 6"
1009 25-04-2016 17:55:07 echo "Command 7"
1010 25-04-2016 17:55:09 echo "Command 8"
1011 25-04-2016 17:55:11 echo "Command 9"
1012 25-04-2016 17:55:14 echo "Command 10"
जिन आइटम को आप हटाना चाहते हैं, उनके लिए शुरुआत और अंत की स्थिति चुनें। मैं एंट्री 1006 से 1008 डिलीट करने जा रहा हूं।
for h in $(seq 1006 1008); do history -d 1006; done
यह history -d
1006 के लिए कमांड उत्पन्न करेगा , फिर 1007 1006 हो जाता है और 1006 हटा दिया जाता है, फिर 1008 (1007 बन गया) अब 1006 हो जाता है और हटा दिया जाता है।
अगर मैं भी हिस्ट्री डिलीट कमांड डिलीट करना चाहता हूं तो यह थोड़ा अधिक जटिल है क्योंकि आपको वर्तमान अधिकतम इतिहास प्रविष्टि जानने की आवश्यकता है।
आप इसे प्राप्त कर सकते हैं (बेहतर तरीका हो सकता है):
history 1 | awk '{print $1}'
इसे एक साथ रखकर आप एक सीमा को हटाने के लिए इसका उपयोग कर सकते हैं, और इतिहास हटाएं कमांड को हटा सकते हैं:
for h in $(seq 1006 1008); do history -d 1006; done; history -d $(history 1 | awk '{print $1}')
अपने को जोड़ने के लिए फ़ंक्शन में यह सब लपेटें ~/.bashrc
:
histdel(){
for h in $(seq $1 $2); do
history -d $1
done
history -d $(history 1 | awk '{print $1}')
}
उदाहरण 4, 5 और 6 (1049-1051) को हटाना और साक्ष्य छिपाना:
[18:21:02 jonathag@gb-slo-svb-0221 ~]$ history 11
1046 25-04-2016 18:20:47 echo "Command 1"
1047 25-04-2016 18:20:48 echo "Command 2"
1048 25-04-2016 18:20:50 echo "Command 3"
1049 25-04-2016 18:20:51 echo "Command 4"
1050 25-04-2016 18:20:53 echo "Command 5"
1051 25-04-2016 18:20:54 echo "Command 6"
1052 25-04-2016 18:20:56 echo "Command 7"
1053 25-04-2016 18:20:57 echo "Command 8"
1054 25-04-2016 18:21:00 echo "Command 9"
1055 25-04-2016 18:21:02 echo "Command 10"
1056 25-04-2016 18:21:07 history 11
[18:21:07 jonathag@gb-slo-svb-0221 ~]$ histdel 1049 1051
[18:21:23 jonathag@gb-slo-svb-0221 ~]$ history 8
1046 25-04-2016 18:20:47 echo "Command 1"
1047 25-04-2016 18:20:48 echo "Command 2"
1048 25-04-2016 18:20:50 echo "Command 3"
1049 25-04-2016 18:20:56 echo "Command 7"
1050 25-04-2016 18:20:57 echo "Command 8"
1051 25-04-2016 18:21:00 echo "Command 9"
1052 25-04-2016 18:21:02 echo "Command 10"
1053 25-04-2016 18:21:07 history 11
प्रश्न वास्तव में इतिहास से अंतिम 10 आदेशों को हटाने के लिए था, इसलिए यदि आप थोड़ा प्रयास करना चाहते हैं तो आप फ़ंक्शन को कॉल करने के लिए एक और फ़ंक्शन का उपयोग कर सकते हैं histdel
जो आपके लिए गणना करता है।
histdeln(){
# Get the current history number
n=$(history 1 | awk '{print $1}')
# Call histdel with the appropriate range
histdel $(( $n - $1 )) $(( $n - 1 ))
}
यह फ़ंक्शन 1 तर्क लेता है, हटाने के लिए पिछले इतिहास आइटमों की संख्या। तो पिछले 10 कमांड को इतिहास से हटाने के लिए उपयोग करें histdeln 10
।
vi $HISTFILE
और जो आप चाहते हैं उसे हटा दें।head -n -10
यदि आपको इसे स्वचालित करना है तो उपयोग करें ।