ব্যাশে, touch
এটি একটি বাহ্যিক বাইনারি, তবে echo
এটি শেল অন্তর্নির্মিত :
$ type echo
echo is a shell builtin
$ type touch
touch is /usr/bin/touch
যেহেতু touch
একটি বাহ্যিক বাইনারি, এবং আপনি touch
প্রতি ফাইল প্রতি একবার অনুরোধ করছেন, শেলটি অবশ্যই 300,000 দৃষ্টান্ত তৈরি করতে হবে touch
, এতে দীর্ঘ সময় লাগে।
echo
তবে, এটি একটি শেল বিল্টিন এবং শেল বিল্টিনগুলি কার্যকর করার জন্য একেবারে কাঁটাচামচ লাগবে না। পরিবর্তে, বর্তমান শেলটি সমস্ত অপারেশন করে এবং কোনও বাহ্যিক প্রক্রিয়া তৈরি হয় না; এটি এত দ্রুত হওয়ার কারণ is
শেলের ক্রিয়াকলাপের এখানে দুটি প্রোফাইল। আপনি দেখতে পাচ্ছেন যে নতুন প্রসেসগুলি ক্লোনিং করার সময় প্রচুর সময় ব্যয় হয় touch
। /bin/echo
শেল বিল্টিনের পরিবর্তে ব্যবহার করলে আরও অনেক তুলনামূলক ফলাফল দেখা উচিত।
স্পর্শ ব্যবহার
$ strace -c -- bash -c 'for file in a{1..10000}; do touch "$file"; done'
% time seconds usecs/call calls errors syscall
------ ----------- ----------- --------- --------- ----------------
56.20 0.030925 2 20000 10000 wait4
38.12 0.020972 2 10000 clone
4.67 0.002569 0 80006 rt_sigprocmask
0.71 0.000388 0 20008 rt_sigaction
0.27 0.000150 0 10000 rt_sigreturn
[...]
প্রতিধ্বনি ব্যবহার
$ strace -c -- bash -c 'for file in b{1..10000}; do echo >> "$file"; done'
% time seconds usecs/call calls errors syscall
------ ----------- ----------- --------- --------- ----------------
34.32 0.000685 0 50000 fcntl
22.14 0.000442 0 10000 write
19.59 0.000391 0 10011 open
14.58 0.000291 0 20000 dup2
8.37 0.000167 0 20013 close
[...]
echo >> $file
একটি নতুন লাইন যুক্ত হবে$file
এবং এটি এটিকে সংশোধন করবে। আমি ধরে নিয়েছি এটি ওএস / এক্স এর সমান হবে। আপনি যদি এটি না চান তবে ব্যবহার করুনecho -n >> $file
।