একটি bash
স্ক্রিপ্ট আমি থেকে বিভিন্ন মান প্রয়োজন /proc/
ফাইল। এখন অবধি আমার কাছে কয়েক ডজন লাইন ফাইলের মতো সরাসরি গ্রেপ করছে:
grep -oP '^MemFree: *\K[0-9]+' /proc/meminfo
আরও কার্যকর করার প্রয়াসে আমি ফাইলের সামগ্রীটি একটি ভেরিয়েবলে সংরক্ষণ করেছি এবং গ্রেপ করেছিলাম:
a=$(</proc/meminfo)
echo "$a" | grep -oP '^MemFree: *\K[0-9]+'
একাধিকবার ফাইলটি খোলার পরিবর্তে এটি একবার খোলার উচিত এবং পরিবর্তনশীল সামগ্রীটি গ্রেপ করা উচিত, যা আমি ধরে নিয়েছিলাম দ্রুততর হবে - তবে বাস্তবে এটি ধীর:
bash 4.4.19 $ time for i in {1..1000};do grep ^MemFree /proc/meminfo;done >/dev/null
real 0m0.803s
user 0m0.619s
sys 0m0.232s
bash 4.4.19 $ a=$(</proc/meminfo)
bash 4.4.19 $ time for i in {1..1000};do echo "$a"|grep ^MemFree; done >/dev/null
real 0m1.182s
user 0m1.425s
sys 0m0.506s
একই জন্য dash
এবং zsh
। আমি /proc/
কারণ হিসাবে ফাইলগুলির বিশেষ অবস্থা সম্পর্কে সন্দেহ করেছি তবে আমি যখন /proc/meminfo
একটি নিয়মিত ফাইলে বিষয়বস্তু অনুলিপি করি এবং ফলাফলগুলি একই হয় তা ব্যবহার করি:
bash 4.4.19 $ cat </proc/meminfo >meminfo
bash 4.4.19 $ time for i in $(seq 1 1000);do grep ^MemFree meminfo; done >/dev/null
real 0m0.790s
user 0m0.608s
sys 0m0.227s
পাইপ সংরক্ষণের জন্য এখানে স্ট্রিং ব্যবহার করা এটি কিছুটা দ্রুততর করে তোলে তবে ফাইলগুলির সাথে তত দ্রুত নয়:
bash 4.4.19 $ time for i in $(seq 1 1000);do <<<"$a" grep ^MemFree; done >/dev/null
real 0m0.977s
user 0m0.758s
sys 0m0.268s
একটি ভেরিয়েবল থেকে একই বিষয়বস্তু পড়ার চেয়ে একটি ফাইল কেন দ্রুত খুলছে?
/proc/
কারণ হিসাবে ফাইলগুলির বিশেষ অবস্থার বিষয়ে সন্দেহ করেছি , কিন্তু যখন আমি /proc/meminfo
একটি নিয়মিত ফাইলের বিষয়বস্তু অনুলিপি করি এবং ফলাফলগুলি একই হয়:" তবে এটি বিশেষ নয়/proc/
ফাইল, নিয়মিত ফাইল পড়া দ্রুত হয়!