जितना मुझे ओली पसंद है (जो बहुत है!) मैं उसके साथ 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 घंटे लगते हैं : `grep` एक स्ट्रिंग के लिए सभी फ़ाइलों को लंबे समय तक
मुझे पता है कि मैं इसे बेहतर तरीके से काम करने के लिए खोज कमांड के मापदंडों के साथ फील कर सकता हूं, लेकिन यहां बात यह है कि इसे चलाने में कितना समय लगता है।
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
केवल डिफ़ॉल्ट रूप से दिन में एक बार चलाएं
यह सही है कि 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
आदेश अपने आप डेटाबेस जो तुलना में यह बिजली की गति देता है।