ইতিহাস ~ / .বাশ_ইস্তুরি থেকে মুছে ফেলা হচ্ছে


8

টার্মিনাল বা কমান্ড লাইনের ইতিহাস যা সঞ্চিত আছে সে সম্পর্কে আমার কয়েকটি প্রশ্ন আছে ~/.bash_history

  1. historyকমান্ডটি দিয়ে টার্মিনালে ফাইলটি দেখতে পাচ্ছি তবে আমি যদি gedit bash_historyফাইলটি এটি দিয়ে খোলার চেষ্টা করি তবে এটি সম্পূর্ণ খালি আছে। কেন?

  2. এই কোড লাইনের সাহায্যে টার্মিনাল থেকে ফাইলের কয়েকটি নির্দিষ্ট লাইন মুছে ফেলতে হবে তা আমি খুঁজে পেয়েছি:

    for i in {1..N}; do history -d N; done

    যেখানে এন মুছে ফেলতে চান তার সংখ্যা (বা কমান্ড), তবে এখন ইতিহাস ফাইলটি এই শেষ কমান্ডটি দেখায় এবং আপনি যদি আপনার জিনিসগুলি coverাকতে চেষ্টা করছেন তবে খুব স্মার্ট নয়। সুতরাং প্রশ্নটি হল: আমি শেষ কোড লাইনটি কীভাবে দেব এবং নিশ্চিত করা যায় যে এটি রেকর্ড করা হয়নি?



ভবিষ্যতের নোটের জন্য, আপনি যদি কোনও স্থান দিয়ে কোনও কমান্ড শুরু করেন তবে সেই আদেশটি আপনার ইতিহাসে সংরক্ষণ করা হবে না।
ধানের ল্যান্ডাউ

উত্তর:


18
  1. আপনি কেবল পূর্ববর্তী ডটটি ভুলে গেছেন, আপনার (বাশ) টার্মিনাল ইতিহাস ফাইলটি খোলার আদেশটি

    gedit ~/.bash_history

    আপনি যখন কোনও টার্মিনাল বন্ধ করেন কেবল তখনই এই ফাইলটি আপডেট হয় ।

  2. এই ফাইলটি থেকে শেষ 10 লাইনগুলি সরাতে এবং এই কমান্ডটি নিজেই রেকর্ড না করা, একটি নতুন টার্মিনাল খুলুন এবং নিম্নলিখিত কমান্ডগুলির শৃঙ্খলা সম্পাদন করুন:

    sed -n -e :a -e '1,10!{P;N;D;};N;ba' ~/.bash_history && history -c && exit

    অথবা

    for i in {1..10}; do sed -i '$d' ~/.bash_history; done && history -c && exit

    অথবা

    head -n -10 ~/.bash_history > ~/.b_h_2 && mv ~/.b_h_2 ~/.bash_history && history -c && exit

    sedবা headযথাক্রমে নির্বাচিত লাইনগুলি মুছে ফেলা হয় ~/.bash_history, history -cটার্মিনালের ইতিহাস সাফ করে এবং exitএটি বন্ধ করে দেয়।


একটি সংক্ষিপ্ত এবং আশাকরি আরও দ্রুত বিকল্প for+ sed: head -n -Nযেখানে বড় হাতের অক্ষরটি Nসরানোর জন্য সংখ্যাগুলি। stackoverflow.com/a/13380679/711006
Melebius

2
@ মেলিবিয়াস প্রতিশ্রুতিবদ্ধ দেখায়, তবে আপনি কীভাবে আউটপুটটিকে ওভাররাইট করে ইনপুট ফাইলটিতে পুনর্নির্দেশ করবেন? head -n -N testfile > testfileশুধু ফাইল সাফ! আমি একটি workaround যোগ, তবে এটি অবশ্যই কম নয়।
মিষ্টি

আপনি ঠিক বলেছেন, আমি ভুলে গেছি যে headজায়গায় জায়গায় কাজ করতে পারে না sed। আমি প্রাথমিকভাবে sedআপনার forলুপটি প্রতিস্থাপন করে একটি একক কমান্ড খুঁজছিলাম । আমি লিঙ্ক করা পৃষ্ঠায় কিছু বিকল্প রয়েছে তবে সেগুলি আপনার কোডের মতো বোধগম্য মনে হয় না।
মেলিবিয়াস

@ মেলিবিয়াস সে জন্য sed1line.txt দেখুন - আমি উপরে এটি যুক্ত করেছি, এটি আসলে খাটো নয় তবে দ্রুত হওয়া উচিত।
মিষ্টান্ন

4

Bash_history ফাইলটি একটি গোপন ফাইল যা একটি বিন্দু দিয়ে শুরু হয়। আপনার করা দরকার

gedit ~/.bash_history

এটি জিডিতে ফাইলটি খুলবে।


1

আপনি যদি আপনার কমান্ড লগের কেবলমাত্র কিছু অংশ মুছতে চান তবে উপরের পদ্ধতিগুলি ঠিক আছে। আপনি যদি কোনও নির্দিষ্ট বাশ সেশনের জন্য কমান্ড লগিং বন্ধ করতে চান তবে কমান্ডটি জারি করুন

unset HISTFILE

আরও কঠোর হওয়ার জন্য, আপনি যদি কোনও কমান্ড লগইন করতে না চান তবে আপনি এটি করতে পারেন

rm ~/.bash_history
ln -s /dev/null ~/.bash_history

মনে রাখবেন যে প্রথম পদ্ধতিটি কেবলমাত্র একক সেশনের জন্য কার্যকর হবে, অন্যদিকে দ্বিতীয় পদ্ধতিটি ভবিষ্যতের সমস্ত সেশনের জন্য কমান্ড লগিং বন্ধ করবে।


1

আমি বুঝতে পারি এটির ইতিমধ্যে একটি গ্রহণযোগ্য উত্তর রয়েছে, তবে আমি 80 এর দশক থেকে এটি এটি করে চলেছি। এটি আপনার ট্র্যাকগুলি আড়াল করার একটি দুর্দান্ত উপায় এবং এটি একটি মাল্টি ফেজ পদ্ধতির। বেশিরভাগ অংশের জন্য এটিটি লক্ষ্য করা যায় না যদি না কেউ সত্যই মনোযোগ না দেয়। এটি কিভাবে সম্পন্ন হয়েছে তা এখানে।

একটি টার্মিনাল / শেল / সেশন খুলুন এবং করুন:

 chmod 444 ~/.bash_history

শেল থেকে প্রস্থান করুন একটি টার্মিনাল / শেল / সেশন খুলুন এবং করুন: স্থায়ীভাবে ইতিহাসটি মুছে ফেলার কয়েকটি সৃজনশীল উপায় এখানে রয়েছে

1:

 vi ~/.bash_history
 9999999 dd
 <esc>wq!

2 (একটি জাল ইতিহাস তৈরি করুন)

 sudo echo "which ls" > ~/.bash_history
 sudo echo "cd ~/;ls" >> ~/.bash_history

তারপরে ভাল পরিমাপের জন্য:

 chmod 444 ~/.bash_history

শেল থেকে প্রস্থান করুন

একটি নতুন শেল খুলুন এবং টাইপ করুন

 history

এটি কীটিকে কম লক্ষণীয় করে তোলে তা হ'ল যদি কেউ একটি ls -ratl করে, eventually / .bash_history অবশেষে ডিরেক্টরি তালিকা তালিকার দাগে অদৃশ্য হয়ে যাবে। এটি কোনও লিঙ্ক হিসাবে প্রদর্শিত হবে না যা অপ্রয়োজনীয় মনোযোগ আকর্ষণ করবে। বেশিরভাগ লোকেরা তাদের মূলের উপর একটি -a করেন না, যা অনুকরণটি পছন্দসই হলে কার্যকর।

এই পদ্ধতির খারাপ দিকটি হ'ল আপনি ফিরে যেতে এবং আপনার ইতিহাস পুনরুদ্ধার করার ক্ষমতা হারাবেন। প্রকৃত ~ / .bash_history ফাইলটি ডিরেক্টরি তালিকার শীর্ষেও শেষ হতে পারে, যেহেতু এটি সময়ের সাথে সত্যিকারের পুরানো পরিবর্তনের তারিখের সাথে শেষ হতে পারে, যা নিজেই আবিষ্কার আবিষ্কার করতে পারে যে কিছু ভুল আছে।


আপনি ব্যবহার করে 9999999 ddতারপর ফাইলের সব লাইন মুছে ফেলতে :%d, :1,$dবা dGকাজ অনেক ভালো
phuclv

0

1) চালান sh; এটি ছাইয়ের একটি সাবসেল তৈরি করে, যা ইতিহাস রেকর্ড করে না। সেখান থেকে সম্পাদনা করুন

2) লাইন যোগ করুন HISTCONTROL=ignorebothথেকে .bashrc, আর exec bashস্থায়ীভাবে বর্তমান শেল সঙ্গে একটি এক reinitialized, তারপর সব কমান্ডগুলি আপনাকে একটি নেতৃস্থানীয় স্থান সঙ্গে লগ চাই না প্রতিস্থাপন করতে।


0

যেহেতু আমি এখনও মন্তব্য করতে পারছি না, আমার মন্তব্যগুলি উত্তর হিসাবে যুক্ত করবে:

man history সব উত্তর দেবে।

# 1 এর উত্তর হ'ল ইতিহাস স্মৃতিতে রয়েছে। history -aঅবিলম্বে ফাইল সংরক্ষণ করুন। history -wএছাড়াও সংরক্ষণ করতে পারে তবে অন্যান্য সেশনগুলিতে গোলমাল হতে পারে।

উত্তর # 2 history -a:, জিডিট, আপনার পছন্দসই লাইনগুলি মুছুন,history -r


0

আপনি শেল থেকে লগ আউট না করা অবধি ইতিহাস সংরক্ষণ করা হয়নি। শেলটি থেকে লগ আউট করার চেষ্টা করুন এবং তারপরে আবার .Bash_History দেখুন। কমান্ডের ইতিহাস সেখানে থাকা উচিত।


প্রস্তাবিত হিসাবে সম্পাদিত এখন যথেষ্ট ভাল?
বজ্রপাতের স্ট্যাকার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.