বাশের ইতিহাস কোথায় জমা আছে?


95

যদি আমি চালনা করি তবে আমি historyআমার সর্বশেষ নির্বাহিত আদেশগুলি দেখতে পাচ্ছি।

তবে আমি যদি tail -f $HISTFILEবা করি তবে tail -f ~/.bash_historyসেগুলি তালিকাভুক্ত হবে না।

ফাইলটি কী লক হয়ে যায়, কোনও অস্থায়ী অবস্থান বা অনুরূপ কিছু রয়েছে?

উত্তর:


117

বাশ চলমান অবস্থায় মেমরিতে অভ্যন্তরীণভাবে কমান্ডের তালিকা বজায় রাখে। এগুলি .bash_historyপ্রস্থান করার সময় লেখা আছে :

যখন কোনও ইন্টারেক্টিভ শেলটি প্রস্থান করে, ইতিহাসের তালিকা থেকে শেষ $ HISTSIZ লাইনগুলি named HISTFILE নামক ফাইলটিতে অনুলিপি করা হয়

আপনি যদি কমান্ডের ইতিহাস লিখিতভাবে বাধ্য করতে চান, আপনি history -aকমান্ডটি ব্যবহার করতে পারেন , যা:

ইতিহাসের ফাইলটিতে নতুন ইতিহাসের রেখাগুলি (বর্তমান বাশ সেশন শুরু হওয়ার পরে প্রবেশ করা ইতিহাসের রেখাগুলি) যুক্ত করুন।

একটি -wবিকল্প আছে:

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

আপনি কীভাবে আপনার ইতিহাসটি ব্যবহার করেন তার উপর নির্ভর করে যা আপনার পক্ষে আরও উপযুক্ত।

যদি আপনি তা নিশ্চিত করতে চান যে সেগুলি সর্বদা তাত্ক্ষণিকভাবে লিখিত রয়েছে, আপনি সেই আদেশটি আপনার PROMPT_COMMANDপরিবর্তনশীলটিতে রাখতে পারেন:

export PROMPT_COMMAND='history -a'

পার্শ্ব দ্রষ্টব্য: যদি আপনার .bash_historyফাইলটি ঘটনাক্রমে রুটের মালিকানা লাভ করে তবে জিনিসগুলি কাজ করা বন্ধ করে দেয়। সেক্ষেত্রে মালিকানা পরীক্ষা করুন এবং sudoপ্রয়োজনে মালিকানা ঠিক করতে ব্যবহার করুন ।
4:53

13

(উত্তর নয় তবে আমি মন্তব্য যুক্ত করতে পারি না)

আপনি যদি .bash_historyসুনির্দিষ্ট একটি কমান্ড মুছতে চান বলে যদি আপনি যাচাই করে থাকেন (যেমন একটি পাসওয়ার্ড পরিষ্কার করে), আপনি সরাসরি মেমরির এন্ট্রি মুছতে পারেন history -d <entry_id>

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

$ history
926  ll
927  cd ..
928  export --password=super_secret
929  ll

এবং আপনি exportলাইনটি শুদ্ধ করতে চান , আপনি কেবল এটি দ্বারা অর্জন করতে পারেন:

history -d 928

11

ব্যাশ এটিকে কার্যকারী স্মৃতিতে রাখে, বাশ এটি বন্ধ করার সময় বা প্রতিটি কমান্ডের পরে বাঁচার জন্য কনফিগার করা যায় এবং বাশ শুরু হওয়ার পরে বা অনুরোধে লোড করা যায়।

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


2
আপনার উত্তরের উত্তরটি এটিকে bashশোনায় যেন ইতিহাস বাশ নামক কোনও ফাইলে বা এমনকি উপস্থাপিত জায়গায় সঞ্চিত থাকে। আমি লিখব "এটি bashস্মৃতিতে সংরক্ষণ করা হয়, ..."
অ্যান্থন

আসলেই এটি আরও ভাল
অ্যান্থন

5

আপনার সেশনটি সক্রিয় থাকাকালীন কমান্ডগুলি মেমোরিতে (র‌্যাম) সংরক্ষণ করা হয়। শেলটি বন্ধ করার সাথে সাথে কমান্ডের তালিকাটি .bash_historyশাটডাউন করার আগে লিখিত হয়ে যায়।

সুতরাং, আপনি বর্তমান সেশনের ইতিহাস দেখতে পাবেন না .bash_history


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

4

চলমান অবস্থায়, ইতিহাসটি কেবল মেমরিতে রাখা হয় (ডিফল্টরূপে) যদি:

  • সেট-ও ইতিহাস (একটি Hইন echo "$-") সেট করা আছে।
  • HISSIZE নয় 0 এবং
  • HISTIGNORE নয় *(অথবা অন্য কোনো খুব নিয়ন্ত্রণমূলক প্যাটার্ন)।

উপরের কোনওটি যদি ব্যর্থ হয় তবে কোনও ইতিহাস মেমরিতে সংরক্ষণ করা হয় না এবং ফলস্বরূপ কোনও ইতিহাস ডিস্কে লেখা যায় না।

স্মৃতিতে ইতিহাস ডিস্কে লিখিত হয় যদি:

  • HISTFILESIZE 0 এবং নয়
  • হিস্টফায়ালটি সেট করা নেই।

তবে যখন শেলটি প্রস্থান হয় বা কমান্ড history -a(সংযোজন) বা history -w(লিখন) সম্পাদিত হয় কেবল তখনই ।

ডিস্কে তাত্ক্ষণিক লেখার ট্রিগার করতে আপনি ভেরিয়েবলটি ব্যবহার করতে পারেন:

 PROMPT_COMMAND='history -a'

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

বা:

 PROMPT_COMMAND='history -w'

মেমরি থেকে তালিকা সহ ইতিহাসের ইতিহাসকে ওভাররাইট করতে ।

সুতরাং, আপনি স্মৃতিতে ইতিহাস থেকে একটি আদেশ সরাতে পারেন:

 $ history 5
  6359  ls
  6360  cd ..
  6361  comand --private-password='^%^&$@#)!@*'
  6362  top
  6363  set +o | less
 $ history -d 6361
 $ history 5
  6359  ls
  6360  cd ..
  6361  top
  6362  set +o | less
 $ history -w

এবং শেষ কমান্ড দিয়ে ডিস্কে এটি লিখুন:

 history -w    # with `shopt -u histappend` unset

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