উত্তর:
আপনাকে লগ আউট করতে হবে এবং ফিরে যেতে হবে বা চালাতে হবে 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
, প্রস্থানে ।" আসলে, এই ঠিক সত্য নয়। এটি কেবলমাত্র নতুন নতুন আইটেম সংযোজন করে যা মূল ইতিহাসের দৈর্ঘ্য থেকে 'আটকে যায়' out উদাহরণস্বরূপ, যদি আমি 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
এবং মুছতে আপনি যে পাঠ্যটি টাইপ করেছেন তা ব্যবহার করবে । দ্রষ্টব্য: যদি আপনার সংবেদনশীল তথ্য প্যাটার্নটিতে স্ল্যাশ (এস) থাকে তবে আপনাকে অবশ্যই তাদের ব্যাকস্ল্যাশ সহ এড়াতে হবে, 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
। Ialiatelly ফাংশনটি ব্যবহার করতে, আপনার চলমান শেল ( . $HOME/.bashrc
) দ্বারা ফাইলটি আবার পড়তে হবে । তারপরে ইতিহাস থেকে 200-210 উদাহরণস্বরূপ কমান্ড মুছতে:
$ histdel 200 210
(দ্রষ্টব্য: আপনি বাশ ইতিহাস থেকে বিভিন্ন কমান্ড মুছে ফেলার জন্য অনুসন্ধান করেন তবে এই প্রশ্নটি শীর্ষ অনুসন্ধানের ফলাফলগুলির মধ্যে So
for
বিবৃতিটির বিকল্প ফর্মগুলি : for n in $(seq "$2" "$1")
স্টাইলিস্টিকভাবে কিছু লোক পছন্দ করে এবং যদি seq
কাজ না করে তবে চেষ্টা করুন for ((n="$2"; n>="$1"; n--))
।
এই চেষ্টা করুন,
$ history
এটি ইতিহাস এবং কমান্ডের আইডি প্রদর্শন করবে, যেমন
।
।
211 ls
212 javac
স্বাগতম
। জাভা 213 জাভা স্বাগতম ।
।
ব্যবহার করেন,
$ history -d 211
এখানে 211 ইতিহাসের আইডি। এখন এটি ব্যবহার করে পরীক্ষা করুন
$ history
।
।
211 জাভাক
স্বাগতম
। জাভা 212 জাভা স্বাগতম ।
।
আমি জানি যে দীর্ঘদিন হয়েছে এই প্রশ্নটি জিজ্ঞাসা করা হয়েছে এবং উত্তর দেওয়া হয়েছে তবে আমি আপনাকে আমার ইতিহাস ফাইলটি পরিষ্কার করার এবং একই সাথে লগ আউট করার জন্য আমার পদ্ধতিটি দেখাব।
আমি দৌড়াই :
history -w && nano "${HISTFILE}" && history -c && exit
এটি যা সহজ তা:
history -w
: ভিতরে ক্যাশেড ইতিহাস লেখেন "${HISTFILE}"
nano "${HISTFILE}"
: আমাকে সম্পাদনা করার অনুমতি দিন আপনি "${HISTFILE}"
একটি সিড স্ক্রিপ্ট বা যা আপনার পরিষ্কার করতে চান তা ব্যবহার করতে পারেন"${HISTFILE}"
history -c
: ক্যাশেড ইতিহাস সাফ করুন যাতে এই শেষ আদেশটি যুক্ত করা হয় না।exit
: আমাকে ক্যাশেড ইতিহাস যুক্ত করার জন্য লগ আউট করুন ... তবে এটি খালি;)এই আদেশের পরে, আপনি একটি পরিষ্কার ইতিহাস ফাইল দিয়ে লগ আউট হবেন। আপনার ইতিহাস চেক করতে লগ ইন করুন;)
আমি আশা করি এটি কারও সাহায্য করবে।
আপনি সরাসরি ইতিহাসের ফাইলটি সম্পাদনা করতে পারবেন, যেমন nano .bash_history
আপনি যদি ব্যাশ শেলটিতে থাকেন?