আমি যতটা ওলি পছন্দ করি (যা অনেকটা!) আমি তাঁর সাথে findকমান্ডের সাথে একমত নই । আমি এটা পছন্দ করি না।
find কমান্ডটি তিন মিনিটেরও বেশি সময় নেয়
উদাহরণস্বরূপ এই সাধারণ আদেশটি ধরুন:
$ time find / -type f -name "mail-transport-agent.target"
find: ‘/lost+found’: Permission denied
find: ‘/etc/ssmtp’: Permission denied
find: ‘/etc/ssl/private’: Permission denied
(... SNIP ...)
find: ‘/run/user/997’: Permission denied
find: ‘/run/sudo’: Permission denied
find: ‘/run/systemd/inaccessible’: Permission denied
real 3m40.589s
user 0m4.156s
sys 0m8.874s
এটা তোলে লাগে বেশী তিন মিনিট জন্য findথেকে সবকিছু শুরুর অনুসন্ধান করতে /। ডিফল্টরূপে ত্রুটি বার্তাগুলির রিমগুলি উপস্থিত হয় এবং আপনি যা খুঁজছেন তা খুঁজে পাওয়ার জন্য আপনাকে অবশ্যই তাদের মাধ্যমে অনুসন্ধান করতে হবে। তবুও grepস্ট্রিংয়ের জন্য পুরো ড্রাইভটি অনুসন্ধান করা আরও ভাল যা 53 ঘন্টা সময় নেয় : string স্ট্রিংয়ের জন্য সমস্ত ফাইল গ্রেপিং করতে দীর্ঘ সময় লাগে
আমি জানি যে আমি এটি আরও ভালভাবে কাজ করার জন্য ফাইন্ড কমান্ডের প্যারামিটারগুলির সাথে ঝাঁকুনি দিতে পারি তবে এখানে পয়েন্টটি এটি চালাতে যে পরিমাণ সময় লাগে তা।
locate কমান্ড এক সেকেন্ডেরও কম সময় নেয়
এখন ব্যবহার করুন locate:
$ time locate mail-transport-agent.target
/lib/systemd/system/mail-transport-agent.target
real 0m0.816s
user 0m0.792s
sys 0m0.024s
সনাক্ত কমান্ড একটি দ্বিতীয় কম লাগে!
updatedb কেবলমাত্র একবারে ডিফল্টভাবে চালান run
এটি সত্য যে updatedbকমান্ডটি ডিফল্ট ডেটাবেসটি কেবলমাত্র একবারে চালিত হয় তা আপডেট করে । সবেমাত্র যুক্ত করে ফাইলগুলি অনুসন্ধান করার আগে আপনি এটি ম্যানুয়ালি চালাতে পারেন:
$ time sudo updatedb
real 0m3.460s
user 0m0.503s
sys 0m1.167s
যদিও এটি 3 সেকেন্ড সময় নেবে, findকমান্ডের 3+ মিনিটের তুলনায় এটি ছোট ।
আমি sudo crontab -eনীচে লাইনটি অন্তর্ভুক্ত করার জন্য আমার আপডেট করেছি :
# m h dom mon dow command
0 0 1 * * /bin/journalctl --vacuum-size=200M
*/5 * * * * /usr/bin/updatedb
এখন প্রতি পাঁচ মিনিটে updatedbচালানো হয় এবং locateকমান্ড ডাটাবেস প্রায় সর্বদা আপ টু ডেট থাকে।
কিন্তু কোন বৈশিষ্ট্য আছে?
আপনি locateঅন্যান্য কমান্ডে আউটপুট পাইপ করতে পারেন । উদাহরণস্বরূপ যদি আপনি ফাইলের বৈশিষ্ট্যগুলি চান তবে আপনি এটি ব্যবহার করতে পারেন:
$ locate mail-transport-agent.target | xargs stat
File: '/lib/systemd/system/mail-transport-agent.target'
Size: 473 Blocks: 8 IO Block: 4096 regular file
Device: 10305h/66309d Inode: 667460 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2018-03-31 18:11:55.091173104 -0600
Modify: 2017-10-27 04:11:45.000000000 -0600
Change: 2017-10-28 07:18:24.860065653 -0600
Birth: -
সারাংশ
এর গতি এবং ব্যবহারের সহজতা দেখানোর জন্য আমি এই উত্তরটি পোস্ট করেছি locate। আমি অন্যদের দ্বারা নির্দেশিত কিছু কমান্ড শর্ট-কমিংগুলিকে সম্বোধন করার চেষ্টা করেছি।
findকমান্ড ফাইল খুঁজে পেতে সমগ্র ডিরেক্টরি গঠন তর্ক করা দরকার। locateকমান্ড এটা নিজস্ব ডাটাবেসের যা তুলনায় এটা বিদ্যুত গতিতে দেয় হয়েছে।