বাশ ইতিহাস থেকে নির্বাচিত ফলাফলগুলি কীভাবে মুছবেন?


66

historyকমান্ড সমস্ত ফলাফল দেখায় তবে আমরা নির্দিষ্ট কমান্ড ব্যবহার করে ফিল্টার করতে পারি history | grep searchingCommand। এটা সত্যিই সহায়ক।

তবে সমস্যাটি হ'ল এটি সেই নির্দেশগুলিও দেখায় যা টাইপ ত্রুটির সাথে প্রবেশ করেছিল বা যা ব্যর্থ হয়েছিল। তারপরে সঠিকটি সনাক্ত করা আসলেই একটি ব্যথা। আমি এই লিঙ্কটি চেক করেছি: টার্মিনালে নির্বাচনী কমান্ড-ইতিহাস? কিন্তু এটি আমার সমাধান ছিল না।

সুতরাং ইতিহাস থেকে সেই আদেশগুলি মুছে ফেলার কোনও উপায় আছে যা প্রবেশের সময় বা পরে ভুল ছিল?


5
দয়া করে গৃহীত উত্তরটি পরিবর্তন করুন, আরও 100 টি বেশি ভোট সহ আরও রয়েছে are
গ্রেজ

1
@ গ্রেউজে: সেরা উত্তরে পরিবর্তিত হয়েছে। ভোট গণনার অর্থ এই নয় যে এটি সেরা!
সৌরভ কুমার

উত্তর:


20

আমি ইতিহাসের এন্ট্রিগুলিকে সংশোধন করার (বা মুছে ফেলার) আরও একটি পদ্ধতি যুক্ত করতে চাই, যা বাশের সাথে কাজ করার সময় আমি ঘটনাক্রমে খুঁজে পেয়েছিলাম:

এটি প্রদর্শনের জন্য, নিম্নলিখিত তিনটি কমান্ড বাশে প্রয়োগ করে শুরু করুন:

$ echo 1
1
$ echo 2
2
$ echo 3
3

আপনি এখন তীরচিহ্নগুলি বা Ctrl+ pএবং Ctrl+ ব্যবহার করে আবার এই আদেশগুলি নির্বাচন করতে পারেন n

বলুন আপনি প্রথম দুটি কমান্ড পরিবর্তন করতে চান। ইতিহাস echo 1প্রদর্শিত না হওয়া পর্যন্ত সরান এবং এতে পরিবর্তন করুন echo 1 - changed, তবে প্রবেশ করুন P আপনি যদি এখন আপনার ইতিহাসের মধ্য দিয়ে এগিয়ে যান তবে এই লাইনটি তার পরিবর্তিত অবস্থায় থেকে যায় এবং আপনি এখান থেকে পিছনে ফিরে যেতে পারেন। এখন লাইনে চলে যান echo 2এবং এটিকে পরিবর্তন করুন echo 2 - changed, আবার এন্টার টিপুন না। এই লাইনে পরিবর্তনগুলি সংরক্ষণ করতে, ইতিহাসে এই দুটি বাদ দিয়ে কোনও আদেশ নির্বাচন করুন এবং Ctrl+ টিপুন c

অবশ্যই, ইতিহাসের এন্ট্রিটি পরিবর্তনের পরিবর্তে আপনি এটিকে সরিয়ে ফেলতে পারেন যার ফলস্বরূপ সেই এন্ট্রিটিতে খালি লাইন দেখা দেবে। প্রম্পটে প্রদর্শিত লাইনটি মুছতে, Ctrl+ টিপুন e(যা রেখার শেষের দিকে লাফ দেয়) Ctrl+ এর পরে + u(যা লাইনটির শুরু থেকে কার্সারে পাঠ্য মুছবে)

আরও দেখুন https://unix.stackexchange.com/questions/195668/what-can-cause-an-item-to-be-deleted-from-my-bash-history/195726#195726 আরো বিস্তারিত ব্যাখ্যার জন্য প্রযুক্তিগত পটভূমি.

সরলতম উপায়:

  1. ctrl+ + rকমান্ড আপনি মুছে ফেলতে চান অনুসন্ধান করতে / পরিবর্তন করুন।
  2. end মুছে ফেলতে / পরিবর্তন করতে অনুসন্ধান কমান্ডটি নির্বাচন করতে
  3. নির্বাচিত কমান্ড মুছুন বা সংশোধন করুন (টিপুন enterবা ctrl+ চাপুন না c)
  4. অন্য কোনও কমান্ড নির্বাচন করতে উপরে তীর (বা ctrl+ p) বা ডাউন তীর (বা ctrl+ n) টিপুন।
  5. ctrl+ c এটাই!

দ্রষ্টব্য :

এটি কেবলমাত্র বর্তমান সেশন কমান্ডকে পরিবর্তন করে। যদি আমরা পুরানো কমান্ডগুলি পরিবর্তন করতে এবং পরিবর্তনগুলি সংরক্ষণ করতে চাই তবে টার্মিনালটি বন্ধ করার আগে আমাদের নিম্নলিখিত কমান্ডটি চালাতে হবে:

history -w

অনেক ধন্যবাদ স্টিফান! আমার অবশ্যই বলতে হবে যে আপনি একটি দুর্দান্ত জিনিস নিয়ে এসেছেন। এটি ব্যবহার করে আমি ইতিহাসটি পরিবর্তন / মুছে ফেলার সর্বাধিক সহজ উপায়টি খুঁজে পেয়েছি: ১.ctrl+r আপনি যে আদেশটি মুছতে / পরিবর্তন করতে চান তা সন্ধান করতে। ২.end কমান্ডটি সরাতে এবং কমান্ড মুছতে / পরিবর্তন করতে। 3.ctrl+n পরবর্তী লাইনে যান এবং তারপরে 4.ctrl+c
সৌরভ কুমার

144

ব্যবহার করুন:

history -d OFFSET

OFFSETআপনার বাশ ইতিহাস ফাইলে এটি যুক্ত হওয়ার আগে অফসেটে ইতিহাস এন্ট্রি মুছতে to ডানটি সন্ধান করতে আপনার OFFSETকেবল historyকমান্ড চালানো দরকার । লাইনটির শুরু থেকে এটি এমন ইতিহাস যা আপনি এটি মুছতে চান এমন ইতিহাসের এন্ট্রি ধারণ করে।

এবং ইতিহাস ব্যবহারের পরিবর্তনগুলি সংরক্ষণ করতে:

history -w

এই গাইড আরও বিশদ দেখুন ।


খারাপ নয় :) একটি নতুন উপায় পেতে ভাল ..
সৌরভ কুমার

10
@ সৌরভকুমার খারাপ না?!? সম্ভবত সবচেয়ে ভাল উপায় ...
রাদু রেডানু

5
প্রথম পড়ুন: history -wপরিবর্তনগুলি সংরক্ষণ করার জন্য আপনাকে অবশ্যই স্পষ্টরূপে করা উচিত । এছাড়াও অফসেট মানে কোন সংখ্যাটি historyপ্রদর্শিত হয়। আপনি যে রেখাটি মোছার চেষ্টা করছেন তা যদি 873 হয় তবে ব্যবহার করুন history -d 873
ক্যামি_এই_ব্লোক

2
@ RaduRădeanu পরিবর্তনগুলি সংরক্ষণ করার history -wপরে ব্যবহার করুন history -d
কেমি_এই_ব্লোক

20
এটি সঠিক উত্তর হওয়া উচিত।
শীর্ষে

19

ফাইলটি সম্পাদনা করুন ~/.bash_historyএবং টাইপস দিয়ে একবার মুছুন

উদাহরণস্বরূপ, এই আদেশটি প্রবেশ করান:

gedit ~/.bash_history

ফাইল সংরক্ষণ এবং টার্মিনাল পুনরায় আরম্ভ করার চেয়ে আপনার পছন্দ মতো কিছু সম্পাদনা করুন। মূল কমান্ডটি হ'ল:

sudo -i 
inser your password
gedit ~/.bash_history

আপনি যদি মুছে ফেলতে চান তবে সমস্ত history -cকৌশলটি করা উচিত


বাক্য গঠন

history
history [n]
history -c
history -d offset
history [-anrw] [filename]
history -ps arg

মূল

-সি ইতিহাসের তালিকা সাফ করুন। ইতিহাসের তালিকাটি পুরোপুরি প্রতিস্থাপনের জন্য এটি অন্যান্য বিকল্পের সাথে একত্রিত হতে পারে।

-d অফসেট অফসেটে ইতিহাসের এন্ট্রি মুছুন। ইতিহাস প্রদর্শিত হবে হিসাবে এটি অফসেট হিসাবে নির্দিষ্ট করা উচিত।

- একটি নতুন ইতিহাসের রেখাগুলি (বর্তমান বাশ অধিবেশন শুরুর পর থেকে ইতিহাসের রেখাগুলি) ইতিহাস ফাইলটিতে যুক্ত করুন।

ইতিমধ্যে ইতিহাসের ফাইল থেকে বর্তমান ইতিহাস তালিকায় ইতিমধ্যে পঠিত ইতিহাস লাইনগুলি যুক্ত করুন। এগুলি বর্তমান বাশ অধিবেশন শুরুর পর থেকে ইতিহাসের ফাইলে যুক্ত লাইনগুলি।

-r বর্তমান ইতিহাস ফাইলটি পড়ুন এবং এর সামগ্রীগুলি ইতিহাস তালিকায় যুক্ত করুন।

-আমাদের ইতিহাসের ফাইলে বর্তমান ইতিহাসটি লিখুন।

-p টিপে ইতিহাসের প্রতিস্থাপন সম্পাদন করুন এবং ইতিহাসের তালিকায় ফলাফল সংরক্ষণ না করে স্ট্যান্ডার্ড আউটপুটে ফলাফল প্রদর্শন করুন।

-s আরগগুলি ইতিহাসের তালিকার শেষে একক প্রবেশ হিসাবে যুক্ত করা হয়।

উত্স :


ধন্যবাদ এটি সহায়ক! কমান্ড লাইন থেকে প্রবেশ করার সময় আপনি কীভাবে এন্ট্রি মুছবেন জানেন? বা এন্ট্রিটি না খুলে মুছে ফেলার কোনও আদেশ আছে .bash_history?
সৌরভ কুমার

1
@ ব্লেড ১৯৮৯৯ history -cকাজ করে না যখন আমি টার্মিনালটি বন্ধ করি এবং এটি আবার খোলাম ইতিহাস মুছে ফেলা হয় না। -1 আপনার উত্তর
нιηসнιη

1
@ কাসিয়া, -c Clear the history list. This may be combined with the other options to replace the history list completely. উত্স
ব্লেড 19899

2
@ ক্যাসিয়াএ পরিবর্তনগুলি লেখার history -wপরে history -cব্যবহার করুন।
কেমি_এই_ব্লক

16

আপনি যদি তাৎক্ষণিকভাবে এটি মুছতে চান তবে প্রথমে আপনার একই terminal / .bashrc ফাইলটিতে নিম্নলিখিতটি যুক্ত করতে হবে।

PROMPT_COMMAND='history -a' 

এবং আপনার টার্মিনালটি পুনরায় চালু করুন।

আপনি এটিকে .bashrc ফাইলে যে কোনও জায়গায় যুক্ত করতে পারেন I আমি ইতিহাস সম্পর্কিত অন্যান্য স্টাফগুলির সাথে নীচে হিসাবে যোগ করেছি।

এখানে চিত্র বর্ণনা লিখুন

সাধারণত বাশ সেশনের সময় নির্বাহী কমান্ডগুলি .bash_history এ লেখা হয় না যতক্ষণ না সেশনটি শেষ PROMPT_COMMAND='history -a'হয় ততক্ষণে কমান্ডটি প্রবেশ করে সেখানে .Bash_history ist

এখন যখনই আপনি কোনও আদেশে ভুল বা ত্রুটি করেন এবং এটি মুছতে চান এবং সেখানে কেবল নিম্নলিখিতটি কার্যকর করুন

sed -i '$d' ~/.bash_history

এবং তদা এটি মুছে ফেলা হবে।

এটিকে আরও সহজ করার জন্য আপনি এটিকে আরও সাধারণ কিছুতে এটির করতে পারেন এবং এটি ব্যবহার করতে পারেন

alias rh ='sed -i '\''$d'\'' ~/.bash_history'

সুতরাং কার্যকর rhকরা ইতিহাস থেকে শেষ সম্পাদিত আদেশটি সরিয়ে ফেলবে।

উপরেরটি অস্থায়ী আলিয়াজিং যা কেবল একটি সেশনের জন্য স্থায়ী হয় permanent এটি স্থায়ী বা অবিচ্ছিন্ন যুক্ত করতে

alias rh = 'sed -i '\''$d'\'' ~/.bash_history' 

to .bashrc

বিঃদ্রঃ

উভয় পক্ষের কোনও স্থান থাকা উচিত নয় =

আপনি যদি উপনাম না চান তবে আপনি নিম্নলিখিতগুলিও করতে পারেন

একটি কমড নাম তৈরি করুন rhএবং এটি /binডিরেক্টরিতে রাখুন:

  • একটি ফাইল খুলুন rhএবং নিম্নলিখিত কোডটি পেস্ট করুন, সংরক্ষণ করুন এবং বন্ধ করুন:

    sed -i '$d' ~/.bash_history

  • rhএক্সিকিউটেবল করুন এবং এটিকে /binডিরেক্টরিতে রাখুন:

     chmod + x rh
     sudo সিপি আরএইচ / বিন 
  • rhইতিহাস থেকে সাম্প্রতিক কমান্ড মুছতে এখন কমান্ডটি ব্যবহার করুন ।


কোথায় যোগ করার জন্য PROMPT_COMMAND='history -a'.bashrcফাইল? এবং এটি ঠিক কি করবে? আমি চেষ্টা sed -i '$d' ~/.bash_historyকরেছি এটি সম্পাদনা না করেই কাজ করছে .bashrc!! তবে ওরফে জিনিসটি কাজ করছে না .. আপনি যদি আমার প্রশ্নটি বিস্তারিতভাবে বর্ণনা করেন এবং ওরফে কাজ করে থাকেন তবে আমি আপনার উত্তরটি গ্রহণ করব .. :)
সৌরভ কুমার

@ সৌরভকুমার উত্তরটি সম্পাদনা করেছেন। এলিয়াসিং কমান্ডে একক এবং ডাবল
উক্তিগুলি

বিশ্বাস করুন বা না রাখুন .. ওরফে জিনিসটি এখনও কাজ করছে না .. এটি কোনও ত্রুটি ছাড়াই কার্যকর করে তবে .bash_historyফাইল থেকে এন্ট্রি মুছে দেয় না ..: পি কোনওভাবেই .. কোনও সমস্যা নয় .. আমি নিজের কমান্ড তৈরি করে এটিকে স্থাপন করেছি /binডিরেক্টরি। যেহেতু আপনার আদেশের কারণে: sed -i "$d" ~/.bash_historyএটি ঠিকঠাক কাজ করছে। আমি আপনার উত্তরটি গ্রহণ করি .. :)
সৌরভ কুমার

যদি আপনি কিছু মনে করেন না, আমি আপনার উত্তরটি সম্পাদনা করতে চাই যাতে এটি অন্যের পক্ষে সহায়ক হয় ..
সৌরভ কুমার

আসলে আমি এটি সম্পাদনা করেছি। আপনাকে এটি অনুমোদন করতে হবে ..
সৌরভ কুমার

2

একাধিক লাইন মুছে ফেলতে (যেমন 1974 থেকে 1990 পর্যন্ত, historyকমান্ড দিয়ে চেক করুন ):

  for i in `seq 1974 1990` ; do history -d 1974 ; done

নোট করুন যে সরানোর জন্য লাইন নম্বরটি সর্বদা একই থাকে, আপনি যেমনটি ক্রমাগত অপসারণ করছেন এবং পরবর্তীটিতে যান।


নোটটি খুব গুরুত্বপূর্ণ।
ওয়েইজুন চিউ

1

আপনি যদি বাশে "সেট-ও-ভিআই" বিকল্পটি ব্যবহার করছেন (এস্কেপ কী দিয়ে ফিরে অনুসন্ধান করার জন্য খুব দরকারী), তবে আপনি "vi" তে একইভাবে লাইনটি অনুসন্ধান করতে এবং "ডিডি" দিয়ে লাইনটি মুছতে পারেন।


আমি দেখতে পাচ্ছি যে আমাকে টাইপ করতে হবে jবা তার kপরে ddইতিহাস থেকে কমান্ডটি পরিষ্কার করতে হবে। আমি যদি অন্য কোনও কমান্ড টাইপ করি, বা কেবল টিপুন Enter, বাশ মনে হয় এটি কেবল একটি নতুন কমান্ড এবং এটি ইতিহাসে পুরানো কমান্ডটি বজায় রাখা উচিত। এটি লক্ষণীয়ও রয়েছে যে এটি সঠিকভাবে করা হয়ে গেলে, এটি আদেশটি সাফ করে, তবে এটি মুছে দেয় না — ফলাফলটি খালি ইতিহাসের এন্ট্রি। তবে পাসওয়ার্ডগুলি মুছে ফেলার জন্য এটি যথেষ্ট ভাল যা আমাকে কমান্ড লাইনে টাইপ করতে বাধ্য হয়েছিল এবং অন্যান্য উত্তরগুলির চেয়ে অনেক সহজ, তাই এটি পোস্ট করার জন্য আপনাকে অনেক ধন্যবাদ!
মাইকেল শ্যাপার

0

আমার এমন পরিস্থিতি হয়েছিল যেখানে আমার বাশ ইতিহাসে একজন ইউবাইকের কাছ থেকে আমার অতিমাত্রায় এন্ট্রি ছিল maybe সম্ভবত 50 বা তার বেশি, 'সিসিসিসি .....' এর সাথে মিলে যায়। আদর্শভাবে, আমি একটি প্যাটার্নের সাথে মেলে এমন এন্ট্রিগুলি মুছে ফেলার একটি উপায় চেয়েছিলাম, যা আমি মনে করি আপনার ইতিহাস ফাঁকা উপেক্ষা করে ধরে নিবেন যে আপনি সেড বা কোনও কিছু করতে পারেন।

যাইহোক, আমি অলস হয়ে গিয়েছিলাম এবং ভিআইএম ব্যবহার করে, 'সিসিসিসি' অনুসন্ধান করে এবং প্রতিটি ম্যাচ সাইকেল চালানোর সময় 'ডিডি' ব্যবহার করে শেষ করেছি। এক মিনিটেরও বেশি সময় নেয়নি।


1
আপনি যদি ভিমে এই কাজটি করে থাকেন তবে আপনি এটি করতেও পারেন: g / cccc / d বা: g / ^ cccc / d: অথবা ম্যাক্রো কিউকিএনডিকিএইচ ব্যবহার করুন তারপর @@ (ধরে নিন যে আপনার শেষ অনুসন্ধান সিসিসিসিটির জন্য ছিল))
এইচটিসেস

@htaccess এটি অবশ্যই সহজতর হত তবে আমি একরকম একই সাথে বাকি ফাইলটি দৃশ্যত পরিদর্শন করতে চেয়েছিলাম।
ডিলান_লার্কিন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.