.Bash_history ফাইলের বিষয়বস্তু কত দিন স্থায়ী হয়?


11

আমি কীভাবে আমার bash_historyফাইলের বিষয়বস্তুগুলি সংশোধন করতে পারি ? ইতিহাস কত দিন স্থায়ী হয় কোন মান বা ভেরিয়েবল নিয়ন্ত্রণ করে? আমার বেস ইতিহাসের সূক্ষ্ম নিয়ন্ত্রণ প্রদানের জন্য কি অন্য কোনও জিনিস আমি পরিবর্তন করতে পারি ??



2
আমি বিশ্বাস করি না যে এই ফাইলটি দীর্ঘ সময় দ্বারা নিয়ন্ত্রিত হয়, বরং ফাইলটির চূড়ান্ত আকার দ্বারা। এখানে দেখুন: বাশে ইতিহাসের তালিকার আকারটি 5000 টিরও বেশি লাইনে সেট করার কোনও উপায় আছে কি? । সুতরাং vভী। পরিবর্তনশীল HISTSIZEএবং HISTFILESIZEএকমাত্র নিয়ন্ত্রণ পৃষ্ঠ যা আপনাকে কতটা ইতিহাস বজায় থাকে তা নিয়ন্ত্রণ করতে হবে।
slm

উত্তর:


12

ইতিহাসের আকার নিয়ন্ত্রণ করে এমন দুটি ভেরিয়েবল রয়েছে:

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

এবং

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

এই দুটি পরিবর্তনশীল আপনাকে আপনার ইতিহাসের আচরণ নিয়ন্ত্রণ করতে দেয়। মূলত, HISTSIZEআপনার বর্তমান অধিবেশন চলাকালীন কমান্ডের সংখ্যা এবং HISTFILESIZEএটি অধিবেশনগুলির মধ্যে স্মরণীয় আদেশগুলির সংখ্যা। সুতরাং, উদাহরণস্বরূপ:

$ echo $HISTSIZE 
10
$ echo $HISTFILESIZE 
5
$ history | wc
     10      29     173

উপরের উদাহরণে, কারণ HISTSIZE10 এ সেট করা হয়েছে, history10 কমান্ডের একটি তালিকা প্রদান করে। যাইহোক, যদি আপনি লগ আউট এবং তারপর পুনরায় লগ-ইন, historyমাত্র 5 কমান্ড ফিরে আসবে কারণ HISTFILESIZE5. সেট এর কারণ, একবার আপনি আপনার সেশন থেকে প্রস্থান করুন, আপনার হয় HISTFILESIZEআপনার ইতিহাস লাইনের আপনার ইতিহাস ফাইল (এ সঞ্চিত হয় ~/.bash_historyডিফল্টরূপে কিন্তু নিয়ন্ত্রিত HISTFILE)। অন্য কথায়, কমান্ডগুলি যোগ করা হয় HISTFILEযতক্ষণ না এটি $HISTFILESIZEলাইন পৌঁছে যায় , প্রতিটি পরবর্তী লাইন যুক্ত হওয়া মানে ফাইলের প্রথম কমান্ড অপসারণ করা হবে।

আপনি এইগুলিতে ভেরিয়েবলের মান সেট করতে পারেন ~/.profile(বা ~/.bash_profileযদি সেই ফাইলটি বিদ্যমান থাকে)। এগুলিকে আপনার ~/.bashrcপ্রথমে সেট করবেন না কারণ তাদের কোনও ব্যবসা সেট করা হচ্ছে না এবং দ্বিতীয়ত কারণ এটি আপনাকে লগইন বনাম নন-লগইন শেলগুলির কারণে অন্যরকম আচরণ করতে পারে যা অন্যান্য সমস্যার কারণ হতে পারে

অন্যান্য দরকারী পরিবর্তনশীল যা আপনাকে আপনার ইতিহাসের আচরণের সূক্ষ্ম সুরক্ষিত করতে দেয়:

  • HISTIGNORE: এটি আপনাকে কিছু সাধারণ কমান্ড উপেক্ষা করতে দেয় যা খুব কম আগ্রহী। উদাহরণস্বরূপ, আপনি সেট করতে পারেন:

    export HISTIGNORE="pwd:df:du"

    যে কোনো কমান্ড দিয়ে শুরু কারণ হবে pwd, dfঅথবা duউপেক্ষা করা প্রয়োজন এবং আপনার ইতিহাসে সংরক্ষিত হয়নি।

  • HISTCONTROL: এটি ইতিহাস আপনাকে কীভাবে কাজ করে তা চয়ন করতে দেয়। ব্যক্তিগতভাবে, আমি এটি সেট করেছিলাম HISTCONTROL=ignoredupsযার ফলে এটি কেবল একবারে সদৃশ কমান্ডগুলি সংরক্ষণ করে। অন্যান্য বিকল্পগুলি ignorespaceহ'ল স্পেস থেকে শুরু হওয়া কমান্ডগুলি উপেক্ষা করা হবে এবং erasedupsযার ফলে বর্তমান লাইনটির সাথে মিল থাকা সমস্ত পূর্ববর্তী রেখাগুলি সেই তালিকাটি সংরক্ষণ করার আগে ইতিহাসের তালিকা থেকে মুছে ফেলা হবে। ignorebothঅবহেলা এবং উপেক্ষা করার জন্য শর্টহ্যান্ড।

  • HISTTIMEFORMAT: এটি আপনাকে ইতিহাসের ফাইলের সময় বিন্যাসটি সেট করতে দেয়। পান্ড্যের উত্তর দেখুন বা man bashবিশদে পড়ুন।


আরও সূক্ষ্ম সুরের জন্য আপনার কাছে রয়েছে:

  • histappendব্যাশ বিকল্প। এটি আপনার চালানো shopt -s histappendবা আদেশটি যোগ করে সেট করা যেতে পারে ~/.bashrc। যদি এই বিকল্পটি সেট করা থাকে

    ইতিহাসের তালিকাটি ফাইলটি ওভার রাইটিংয়ের পরিবর্তে শেলটি প্রস্থান করার সময় শিরোনাম থেকে বেরিয়ে আসার পরে এইচআইএসটিফায়াল ভেরিয়েবলের মান দ্বারা যুক্ত ফাইলটিতে সংযুক্ত করা হয়।

    এটি খুব কার্যকর কারণ এটি আপনাকে বিভিন্ন সেশনের ইতিহাস একত্রিত করতে দেয় (উদাহরণস্বরূপ বিভিন্ন টার্মিনালগুলি ভাবেন)।

  • historyকমান্ড দুই দরকারী অপশন রয়েছে:

    • history -a : ইতিহাসের ফাইলটিতে স্বয়ংক্রিয়ভাবে শেষ কমান্ডটি লিখিত হয়

    • history -r : বর্তমান সেশনে ইতিহাস ফাইলটি আমদানি করে।

    উদাহরণস্বরূপ, আপনি এই দুটি কমান্ড যুক্ত করতে পারেন PROMPT_COMMAND(যা প্রতিটি সময় আপনার শেল প্রম্পট দেখায় তখনই কার্যকর করা হয়, সুতরাং যখনই আপনি একটি নতুন শেল শুরু করবেন এবং প্রতিটি কমান্ডের পরে আপনি এটি চালাবেন):

    export PROMPT_COMMAND='history -a;history -r;'

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


2

ইতিহাস ফাইলের ডিফল্ট আকার 500 লাইন। .Bash_history ফাইলটি 500 লাইনে পৌঁছে গেলে, ফিফোর মতো নতুন রেখাগুলির জন্য জায়গা তৈরি করার জন্য প্রাথমিক এন্ট্রিগুলি মুছে ফেলা হবে। আপনি ভেরিয়েবলের মান পরিবর্তন করে এটি পরিবর্তন করতে পারেন HISTFILESIZEযা ডিফল্টরূপে 500 এর মান রয়েছে।

HISTFILESIZE=10000আপনার .bashrc এ একটি রাখলে ইতিহাস ফাইলটি ধরে রাখতে পারে এমন লাইন সংখ্যা 10000 বাড়িয়ে দেবে, যার ফলে এর বিষয়বস্তুর জীবন বাড়বে।


2
দ্রষ্টব্য: আপনি যদি HISTSIZEসীমা বাড়িয়ে থাকেন তবে HISTFILEখুব পরিবর্তন বিবেচনা করুন । আপনি যদি চালান bash --norc HISTSIZEতবে ডিফল্ট মানটিতে ফিরে যেতে হবে, HISTFILEপ্রস্থান করার সময় আপনার কেটে নেওয়া ।
llua

ধন্যবাদ, @ লুলুয়া। একইভাবে, যদি আপনার সিস্টেমের একটি /etc/bash.bashrcসেট করে HISTFILESIZE(বা সম্ভবত HISTSIZE; আমি কোনটি যাচাই করি না) তবে বাশ .bash_historyএটি পড়ার বিন্দুতে ছাঁটাই হবে বলে মনে হয় /etc/bash.bashrc(বা কমপক্ষে কিছুটা হলেও আপনার নিজস্ব সীমাটি নিজের বাশ ইন ফাইলগুলিতে সেট করার আগে)। এটি এড়াতে, আবার আপনার নিজের সেট করুন HISTFILEযাতে আপনার আসল ইতিহাস সেখানে চলে যায় এবং সেই .bash_historyফাইলের মধ্যে না যা বাশ কাটছে।
ক্রিস পোভির্ক

(তবে exportএটি করবেন না, এটি করার ফলে এটি কোনও শিশু শেলগুলির কাছে দৃশ্যমান হবে, যা এর পরিবর্তে এটি কেটে ফেলা হতে পারে .bash_history!)
ক্রিস পোভির্ক

0

বাশ ইতিহাসman bash সম্পর্কে কভার আরও বিশদের জন্য পড়ুন :

HISTCONTROL
       ইতিহাস তালিকায় কমান্ডগুলি কীভাবে সংরক্ষণ করা হয় তা নিয়ন্ত্রণ করে মানগুলির একটি কোলন-বিভক্ত তালিকা।
       মানগুলির তালিকায় যদি উপেক্ষা স্থান অন্তর্ভুক্ত থাকে তবে স্পেস অক্ষর দিয়ে শুরু হওয়া লাইনগুলি
       ইতিহাসের তালিকায় সংরক্ষণ করা হয়নি। উপেক্ষিতগুলির একটি মান পূর্ববর্তীটির সাথে মিলিত লাইনের কারণ ঘটায়
       ইতিহাস এন্ট্রি সংরক্ষণ করা হবে না। অগ্রাহ্য স্থানের একটি মূল্য হ'ল উপেক্ষিত স্থানের জন্য শর্টহ্যান্ড
       ignoredups। মুছে যাওয়া মানগুলির ফলে পূর্ববর্তী সমস্ত রেখাগুলি বর্তমান লাইনের সাথে মিলে যায়
       সেই লাইনটি সংরক্ষণের আগে ইতিহাসের তালিকা থেকে সরানো হবে। কোন মান উপরের না
       তালিকা উপেক্ষা করা হয়। যদি এইচআইএসটি কনট্রোলটি সেট না করা থাকে বা সমস্ত লাইন একটি বৈধ মান অন্তর্ভুক্ত না করে
       শেল পার্সার দ্বারা পড়া ইতিহাসের তালিকায় সংরক্ষণ করা হয়, হিস্টিগের মান সাপেক্ষে
       NORE। একটি বহু-লাইন যৌগিক কমান্ডের দ্বিতীয় এবং পরবর্তী লাইনগুলি পরীক্ষা করা হয় না,
       এবং HISTCONTROL এর মান নির্বিশেষে ইতিহাসে যুক্ত করা হয়।
HISTFILE
       কমান্ডের ইতিহাস সংরক্ষণ করা হয় সেই ফাইলটির নাম (নীচে ইতিহাস দেখুন)। ডিফল্ট
       মান হ'ল b / .bash_history। যদি সেট না করা থাকে, শেলটি প্রস্থান করা হলে কমান্ডের ইতিহাসটি সংরক্ষণ করা হয় না।
HISTFILESIZE
       ইতিহাসের ফাইলে থাকা সর্বাধিক সংখ্যক লাইন। যখন এই পরিবর্তনশীল বরাদ্দ করা হয়
       একটি মান, ইতিহাস ফাইলটি যদি সংখ্যায় বেশি থাকে না তবে প্রয়োজন হয়,
       প্রাচীনতম এন্ট্রিগুলি সরিয়ে লাইনগুলির। ইতিহাস ফাইলটিও এই আকারে ছাঁটা হয়েছে
       এটি লেখার পরে যখন একটি শেল প্রস্থান হয়। মান 0 হলে, ইতিহাসের ফাইলটি কেটে ফেলা হয়
       শূন্য আকার। অ-সংখ্যাসূচক মান এবং সংখ্যাসূচক মানগুলি শূন্যের চেয়ে কম বাধা দেয়। দ্য
       শেল কোনও স্টার্টআপ ফাইল পড়ার পরে HISSIZE এর মানতে ডিফল্ট মান সেট করে।
HISTIGNORE
       কোন কমান্ড লাইনগুলি সংরক্ষণ করা উচিত তা নির্ধারণ করতে ব্যবহৃত কোলন-বিচ্ছিন্ন নিদর্শনগুলির তালিকা
       ইতিহাসের তালিকা। প্রতিটি প্যাটার্নটি লাইনের শুরুতে নোঙ্গর করা থাকে এবং এটি অবশ্যই মিলবে
       সম্পূর্ণ লাইন (কোনও অন্তর্নিহিত `* 'সংযুক্ত করা হয়নি)। প্রতিটি প্যাটার্ন লাইনের বিপরীতে পরীক্ষা করা হয়
       HISTCONTROL দ্বারা নির্দিষ্ট করা চেকগুলি প্রয়োগ করার পরে। সাধারণ শেল ছাড়াও
       প্যাটার্ন মিলছে অক্ষর, history & 'পূর্ববর্তী ইতিহাস লাইনের সাথে মেলে। `& 'পালাতে পারে
       একটি ব্যাকস্ল্যাশ ব্যবহার করে; ম্যাচ চেষ্টা করার আগে ব্যাকস্ল্যাশ সরিয়ে ফেলা হয়েছে। দ্বিতীয় এবং
       মাল্টি-লাইন যৌগিক কমান্ডের পরবর্তী লাইনগুলি পরীক্ষা করা হয় না এবং এতে যুক্ত করা হয়
       ইতিহাস হিস্টিগনোর নির্বিশেষে।
HISTSIZE
       কমান্ডের ইতিহাসে কমান্ডের সংখ্যা মনে রাখার জন্য (নীচে ইতিহাস দেখুন)। যদি
       মান 0 হয়, কমান্ডগুলি ইতিহাসের তালিকায় সংরক্ষিত হয় না। শূন্যের চেয়ে সংখ্যার মান কম values
       ইতিহাসের তালিকায় প্রতিটি কমান্ড সংরক্ষণের ফলাফল রয়েছে (কোনও সীমা নেই)। স্তরটি
       যে কোনও স্টার্টআপ ফাইলগুলি পড়ার পরে 500 এ ডিফল্ট মান সেট করে।
HISTTIMEFORMAT
       যদি এই ভেরিয়েবলটি সেট করা থাকে এবং শূন্য না হয় তবে এর মান স্ট্রফটাইমের (3) বিন্যাসের স্ট্রিং হিসাবে ব্যবহৃত হবে
       ইতিহাস প্রদর্শিত প্রতিটি ইতিহাস এন্ট্রি সম্পর্কিত টাইম স্ট্যাম্প মুদ্রণ করতে
       builtin। যদি এই ভেরিয়েবলটি সেট করা থাকে, সময় স্ট্যাম্পগুলি ইতিহাসের ফাইলে লেখা থাকে যাতে তারা পারে
       শেল সেশন জুড়ে সংরক্ষণ করা। এটি ইতিহাস মন্তব্য চরিত্রটি আলাদা করতে ব্যবহার করে
       অন্যান্য ইতিহাসের লাইন থেকে টাইমস্ট্যাম্পগুলি শিখুন।

বিশেষত HISTFILESIZEএবং HISTSIZEআপনি সন্ধান করছেন এবং আপনাকে সহায়তা করতে পারেন।

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