যদি আমি চালনা করি তবে আমি history
আমার সর্বশেষ নির্বাহিত আদেশগুলি দেখতে পাচ্ছি।
তবে আমি যদি tail -f $HISTFILE
বা করি তবে tail -f ~/.bash_history
সেগুলি তালিকাভুক্ত হবে না।
ফাইলটি কী লক হয়ে যায়, কোনও অস্থায়ী অবস্থান বা অনুরূপ কিছু রয়েছে?
যদি আমি চালনা করি তবে আমি history
আমার সর্বশেষ নির্বাহিত আদেশগুলি দেখতে পাচ্ছি।
তবে আমি যদি tail -f $HISTFILE
বা করি তবে tail -f ~/.bash_history
সেগুলি তালিকাভুক্ত হবে না।
ফাইলটি কী লক হয়ে যায়, কোনও অস্থায়ী অবস্থান বা অনুরূপ কিছু রয়েছে?
উত্তর:
বাশ চলমান অবস্থায় মেমরিতে অভ্যন্তরীণভাবে কমান্ডের তালিকা বজায় রাখে। এগুলি .bash_history
প্রস্থান করার সময় লেখা আছে :
যখন কোনও ইন্টারেক্টিভ শেলটি প্রস্থান করে, ইতিহাসের তালিকা থেকে শেষ $ HISTSIZ লাইনগুলি named HISTFILE নামক ফাইলটিতে অনুলিপি করা হয়
আপনি যদি কমান্ডের ইতিহাস লিখিতভাবে বাধ্য করতে চান, আপনি history -a
কমান্ডটি ব্যবহার করতে পারেন , যা:
ইতিহাসের ফাইলটিতে নতুন ইতিহাসের রেখাগুলি (বর্তমান বাশ সেশন শুরু হওয়ার পরে প্রবেশ করা ইতিহাসের রেখাগুলি) যুক্ত করুন।
একটি -w
বিকল্প আছে:
ইতিহাসের ফাইলটিতে বর্তমান ইতিহাসটি লিখুন।
আপনি কীভাবে আপনার ইতিহাসটি ব্যবহার করেন তার উপর নির্ভর করে যা আপনার পক্ষে আরও উপযুক্ত।
যদি আপনি তা নিশ্চিত করতে চান যে সেগুলি সর্বদা তাত্ক্ষণিকভাবে লিখিত রয়েছে, আপনি সেই আদেশটি আপনার PROMPT_COMMAND
পরিবর্তনশীলটিতে রাখতে পারেন:
export PROMPT_COMMAND='history -a'
(উত্তর নয় তবে আমি মন্তব্য যুক্ত করতে পারি না)
আপনি যদি .bash_history
সুনির্দিষ্ট একটি কমান্ড মুছতে চান বলে যদি আপনি যাচাই করে থাকেন (যেমন একটি পাসওয়ার্ড পরিষ্কার করে), আপনি সরাসরি মেমরির এন্ট্রি মুছতে পারেন history -d <entry_id>
।
উদাহরণস্বরূপ, একটি আউটপুট যেমন:
$ history
926 ll
927 cd ..
928 export --password=super_secret
929 ll
এবং আপনি export
লাইনটি শুদ্ধ করতে চান , আপনি কেবল এটি দ্বারা অর্জন করতে পারেন:
history -d 928
ব্যাশ এটিকে কার্যকারী স্মৃতিতে রাখে, বাশ এটি বন্ধ করার সময় বা প্রতিটি কমান্ডের পরে বাঁচার জন্য কনফিগার করা যায় এবং বাশ শুরু হওয়ার পরে বা অনুরোধে লোড করা যায়।
আপনি যদি প্রতিটি কমান্ডের পরে সংরক্ষণ করার জন্য কনফিগার করেন, তবে একই সাথে একাধিক ব্যাশ চলমানের প্রভাবগুলি বিবেচনা করুন। (কমান্ড লাইনগুলি ইন্টারলিভড করা হবে)
bash
শোনায় যেন ইতিহাস বাশ নামক কোনও ফাইলে বা এমনকি উপস্থাপিত জায়গায় সঞ্চিত থাকে। আমি লিখব "এটি bash
স্মৃতিতে সংরক্ষণ করা হয়, ..."
আপনার সেশনটি সক্রিয় থাকাকালীন কমান্ডগুলি মেমোরিতে (র্যাম) সংরক্ষণ করা হয়। শেলটি বন্ধ করার সাথে সাথে কমান্ডের তালিকাটি .bash_history
শাটডাউন করার আগে লিখিত হয়ে যায়।
সুতরাং, আপনি বর্তমান সেশনের ইতিহাস দেখতে পাবেন না .bash_history
।
bash
সমাপ্তির পরে আপডেট করা হয়েছে , যা পুনরায় বুট করা বোঝায় না (বিশেষত গ্রাফিক্যাল পরিবেশে যেখানে আপনি ইচ্ছা মতো টার্মিনালগুলি খুলতে এবং বন্ধ করতে পারেন)।
চলমান অবস্থায়, ইতিহাসটি কেবল মেমরিতে রাখা হয় (ডিফল্টরূপে) যদি:
H
ইন echo "$-"
) সেট করা আছে।0
এবং*
(অথবা অন্য কোনো খুব নিয়ন্ত্রণমূলক প্যাটার্ন)।উপরের কোনওটি যদি ব্যর্থ হয় তবে কোনও ইতিহাস মেমরিতে সংরক্ষণ করা হয় না এবং ফলস্বরূপ কোনও ইতিহাস ডিস্কে লেখা যায় না।
স্মৃতিতে ইতিহাস ডিস্কে লিখিত হয় যদি:
তবে যখন শেলটি প্রস্থান হয় বা কমান্ড history -a
(সংযোজন) বা history -w
(লিখন) সম্পাদিত হয় কেবল তখনই ।
ডিস্কে তাত্ক্ষণিক লেখার ট্রিগার করতে আপনি ভেরিয়েবলটি ব্যবহার করতে পারেন:
PROMPT_COMMAND='history -a'
যা হবে ইতিহাস ফাইলে ইতিহাস লাইন। এগুলি হ'ল বর্তমান রেখাগুলি অধিবেশন শুরুর পর থেকে প্রবেশ করা ইতিহাস রেখাগুলি, তবে ইতিমধ্যে ইতিহাসের ফাইলে সংযুক্ত হয়নি।append
new
বা:
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
.bash_history
ফাইলটি ঘটনাক্রমে রুটের মালিকানা লাভ করে তবে জিনিসগুলি কাজ করা বন্ধ করে দেয়। সেক্ষেত্রে মালিকানা পরীক্ষা করুন এবংsudo
প্রয়োজনে মালিকানা ঠিক করতে ব্যবহার করুন ।