কখনও কখনও ইতিহাসের আদেশগুলি .bash_history এ সংরক্ষণ করা হয় না


20

আমি গতকাল আমার সেন্টোস in এ অনেক কমান্ড জারি করেছি তবে আজ যখন আমি এই আদেশগুলি পুনরুদ্ধার করতে চেয়েছিলাম তখন খুঁজে পেয়েছি যে কোনও রেকর্ড নেই। আমি যখন ফাইলটি খুললাম .bash_history, তখনও আমি গতকাল জারি করা আদেশগুলি সন্ধান করতে পারি নি তবে কয়েক দিন আগে আমি বহু পুরানো আদেশ পেয়েছি। সাম্প্রতিক কমান্ডগুলি কেন সংরক্ষণ করা হয়নি? আমি কীভাবে ইতিহাসের সক্ষমতা বাড়াতে পারি?


কখনও কখনও যখন টার্মিনালটি অস্বাভাবিকভাবে বন্ধ হয়ে যায়, ইতিহাস সংরক্ষণ করা হয় না, এটি আমার সাথেও ঘটেছিল তবে আমি জানি না যে এই আচরণটি কী কারণে
ঘটছে

উত্তর:


11

ইতিহাসের আইটেমগুলি প্রদর্শিত না হওয়ার সর্বাধিক কারণ হ'ল কিছু না সেট HISTFILEকরা বা HISTSIZEশূন্য নয়, এটি একই মেশিনে দু'বার লগইন করা এবং দ্বিতীয় বাশ উদাহরণটি (যেখানে আপনি সামান্য বা কিছুই করেননি) দিয়ে বেরিয়ে এসেছেন যেখানে তুমি অনেক কিছু করেছ ডিফল্টরূপে বাশ ইতিহাসগুলিকে মার্জ করে না এবং দ্বিতীয় বাশ-প্রস্থানটি ওভাররাইট করে .bash_historyযা প্রথম বাশ-প্রস্থান দ্বারা এত সুন্দরভাবে আপডেট হয়েছিল।

এটি থেকে রোধ করার জন্য আপনি ওভাররাইটের পরিবর্তে ইতিহাসের ফাইলে সংযোজন করতে পারেন, আপনি histappendশেল বিকল্পটি ব্যবহার করতে পারেন :

যদি হিস্টপেন্ড শেল বিকল্পটি সক্ষম করা থাকে (নীচে শেল বিল্টিন কম্যান্ডের অধীনে শপটের বর্ণনা দেখুন), লাইনগুলি ইতিহাসের ফাইলে সংযুক্ত করা হয়, অন্যথায় ইতিহাস ফাইলটি ওভাররাইট করা হয়।

আরো বিস্তারিত জানার এই উত্তরটি কীভাবে ব্যবহার করবেন তা সহ HISTSIZE, HISTFILESIZEএবং HISTCONTROLআকার নিয়ন্ত্রণ করতে সদৃশ ইত্যাদি


3

দুই BASH ভেরিয়েবল পরিবর্তন করতে ইতিহাস আকার ব্যবহার HISTSIZE, HISTFILESIZE(সাধারণত সেট .bashrc)।

BASH ম্যান পৃষ্ঠা থেকে বর্ণনা:

হিস্টিজ করুন কমান্ডের ইতিহাসে কমান্ডের সংখ্যা মনে রাখার জন্য (নীচে ইতিহাস দেখুন)। মান 0 হলে কমান্ডগুলি ইতিহাসের তালিকায় সংরক্ষণ করা হয় না। ইতিহাসের তালিকায় প্রতিটি কমান্ড সংরক্ষণের ফলে শূন্যের চেয়ে কম সংখ্যার মানগুলি (কোনও সীমা থাকে না)। শেলটি কোনও স্টার্টআপ ফাইলগুলি পড়ার পরে 500 এ ডিফল্ট মান সেট করে।

ইতিহাস ফাইলটিতে সর্বাধিক সংখ্যক রেখাগুলি হিস্টফিলিজ করুন। যখন এই ভেরিয়েবলটিকে একটি মান নির্ধারিত করা হয়, তখন ইতিহাসের ফাইলটি প্রাচীনতম এন্ট্রিগুলি সরিয়ে ওই সংখ্যাটির চেয়ে বেশি সংখ্যক লাইনের সাথে সংযুক্ত না হওয়ার জন্য, প্রয়োজনে ট্রুনকেটেড করা হয়। ইতিহাসের ফাইলটি শেল থেকে বেরিয়ে যাওয়ার পরে এটি লেখার পরে এই আকারে ছাঁটা হয়। মান 0 হলে, ইতিহাসের ফাইলটি শূন্য আকারে কেটে যায়। অ-সংখ্যাসূচক মান এবং সংখ্যাসূচক মানগুলি শূন্যের চেয়ে কম বাধা দেয়। শেলটি কোনও স্টার্টআপ ফাইল পড়ার পরে HISSIZE এর মানতে ডিফল্ট মান সেট করে।

উদাহরণ হিসাবে আমার .bashrcফাইলে নিম্নলিখিত সেটআপ রয়েছে :

# for setting history length see HISTSIZE and HISTFILESIZE in bash(1)
HISTSIZE=1000
HISTFILESIZE=2000

1

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

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

উপরের চিত্রটি আমার ক্লিপবোর্ড ফর্ম গুগল ডক্সে কমান্ড ছিল। এই আদেশটি দৌড়েছিল তবে তা আমার ইতিহাস অনুসারে বাদ দেওয়া হয়েছিল। আমি সবে ফিরে গিয়ে কমান্ডটি কোনও সাদা জায়গা ছাড়াই বেছে নিয়েছি এবং তারপরে এটি বাশ ইতিহাসে উপস্থিত হয়েছে।


5
ইতিহাসের বিকল্পগুলির মধ্যে একটি হ'ল স্থানটি দিয়ে শুরু হওয়া লাইনগুলিকে উপেক্ষা (সংরক্ষণ করবেন না)। এটি সাধারণত চালু থাকে। এটি আপনার .bashrc এ পরিবর্তন করা যেতে পারে।
স্টাডোগ

1

আপনার HISTCONTROLপরিবেশ পরিবর্তনশীল ignorespaceবা তে সেট করা হয়নি তা যাচাই করুন ignoreboth

$ echo $HISTCONTROL
ignoredups  #this is ok

আপনার ~/.bash_profileবা আপনার ~/.profileফাইলে মান সেট করে আপনি এটি সংশোধন করতে পারেন :

HISTCONTROL=ignoredups

bashম্যান পৃষ্ঠা থেকে :

HISTCONTROL

ইতিহাস তালিকায় কমান্ডগুলি কীভাবে সংরক্ষণ করা হয় তা নিয়ন্ত্রণ করে মানগুলির একটি কোলন-বিভক্ত তালিকা।

মানগুলির তালিকায় যদি অন্তর্ভুক্ত থাকে তবে ignorespaceস্পেস অক্ষর দিয়ে শুরু হওয়া রেখাগুলি ইতিহাসের তালিকায় সংরক্ষণ করা হয় না।

ignoredupsপূর্ববর্তী ইতিহাসের এন্ট্রিটির সাথে মিলিত কারণগুলির একটি মান সংরক্ষণ করা যায় না।

এর মান ignorebothশর্টহ্যান্ড ignorespaceএবং এর জন্য ignoredups

erasedupsপূর্ববর্তী সমস্ত রেখার সাথে মিলিত হওয়ার কারণগুলির একটি মান সেই লাইনটি সংরক্ষণের আগে ইতিহাসের তালিকা থেকে সরানো হবে।

উপরের তালিকায় নেই এমন কোনও মান উপেক্ষা করা হবে।

যদি HISTCONTROL সেট না করা থাকে, বা কোনও বৈধ মান অন্তর্ভুক্ত না করে, শেল পার্সার দ্বারা পঠিত সমস্ত লাইন মান তালিকা সাপেক্ষে ইতিহাসের তালিকায় সংরক্ষণ করা হয় HISTIGNORE। মাল্টি-লাইন যৌগিক কমান্ডের দ্বিতীয় এবং পরবর্তী লাইনগুলি পরীক্ষা করা হয় না, এবং মান নির্বিশেষে ইতিহাসে যুক্ত করা হয় HISTCONTROL

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