বনাম সনাক্ত


30

কমান্ড রয়েছে findএবং locateডিস্কে ফাইলগুলি অনুসন্ধান করার জন্য।

আমি জানি find পুনরাবৃত্তভাবে ফাইলগুলি অনুসন্ধানের জন্য প্রয়োজনীয় সমস্ত সাব-ডাইরেক্টরিগুলি প্রসেস করে এবং তাই ধীর কিন্তু আপ টু ডেট whereas যেখানে locateএকটি ডেটাবেস ব্যবহার করা হয় যা এখন থেকে এবং তারপরে আপডেট হওয়া (কখন ঠিক?) দ্রুত ফলাফল দেখাতে পারে যা পুরানো হতে পারে।

অন্য কোন পার্থক্য আছে? কোন পরিস্থিতিতে কেউ এক বা অন্যটিকে পছন্দ করবে? এবং কখন locateডাটাবেস আপডেট হয়?



1
manpages.ubuntu.com/manpages/trusty/man8/updatedb.8.html "defaultb সাধারণত ক্রোন (8) দ্বারা প্রতিদিন চালিত হয় ডিফল্ট ডাটাবেস আপডেট করার জন্য।"
রিঞ্জউইন্ড

@ রিনজউইন্ড লিঙ্কযুক্ত ইউএন্ডএল উত্তরটি দুর্দান্ত, আমরা ক্রস-সাইট সদৃশ তৈরি করতে পারি না এটি লজ্জার বিষয়। তবে আপনি কি ক্রোনজব সম্পর্কে আরও জানেন, কখন এটি চালানো হবে? স্টার্টআপের পরে? একটি নির্দিষ্ট সময়ে (আমি মনে করি আমি 1-2am বা এরকম কিছু পড়েছি) কেবল? এই সময়ে এটি বন্ধ হয়ে গেলে কী হবে? কম্পিউটার যখন অলস অবস্থায় থাকে তখন এটি শুরু হয়? আমি কীভাবে ডাটাবেসের বয়স দেখতে পারি?
বাইট কমান্ডার

2
@ বাইটকম্যান্ডার - এটিই যা anacron। ডেস্কটপ সিস্টেম / সার্ভারে এটি ডিফল্টরূপে ইনস্টল করা আছে কিনা তা আমি জানি না, তবে এটি নোটবুকগুলিতে রয়েছে। এটি বুট হয়ে চলেছে এবং দেখায় যে সিস্টেম বন্ধ থাকাকালীন কোনও ক্রোন জব চালানো উচিত ছিল এবং সেগুলি চালনা করে। এটি সত্যিই সহায়ক, তবে আপনার যদি মধ্যরাত থেকে অনেক দূরে কাজ নির্ধারিত থাকে তবে কিছু সমস্যা তৈরি করতে পারে। এর ফলে কাজটি বুটের সাথে চালিত হতে পারে এবং তারপরে আবার যখন সময় আসে - সম্ভবত 24 ঘন্টা পরে (একটি দৈনিক কাজের জন্য।)
জো

@ জো তাই এটি বুট চলাকালীন চলবে এবং এটি ধীর করবে, বা বুট হওয়ার পরে এটি কিছুটা সময় চলবে, বা সিস্টেমটি প্রায় অলস অবস্থায় থাকাকালীন এটি কি এত কম অগ্রাধিকার সহকারে চালিত হয়?
বাইট কমান্ডার

উত্তর:


27

locateফাইলগুলি সন্ধান করা এবং সেগুলি মানুষের কাছে প্রদর্শন করার জন্য কেবল সত্যই ভাল। আপনি এটি দিয়ে কয়েকটি জিনিস করতে পারেন তবে পার্স করার পক্ষে আমি এটির পক্ষে যথেষ্ট বিশ্বাস করতে পারি না এবং আপনি যেমন বলেছিলেন - অভ্যন্তরীণ ডাটাবেসের অবস্থার গ্যারান্টি দেওয়া অসম্ভব, কারণ এটি কেবলমাত্র চালানো হবে বলে ঠিক করা হয়েছে/etc/cron.daily/mlocate একবার , দিনে একবার!

findলাইভ এটি ফিল্টার করে, বাদ দেয়, কার্যকর করে। এটি পার্সিংয়ের জন্য উপযুক্ত। এটি আপেক্ষিক পাথ আউটপুট করতে পারে। এটি সম্পূর্ণ পাথ আউটপুট করতে পারে। এটি কেবল নাম নয়, গুণাবলীর উপর ভিত্তি করে জিনিসগুলি করতে পারে।

locateআমার টুলবক্সে অবশ্যই একটি জায়গা রয়েছে তবে এটি সাধারণত কিছুটা খুঁজে পাওয়ার শেষ চেষ্টা হিসাবে ডানদিকে ডানদিকে থাকে। এটা খুব সহজ find


2
আমি locateআমার সম্পূর্ণ ফাইল সিস্টেমটি অনুসন্ধান করতে চাইলে আমি আরও দ্রুত হতে পারি। এবং আপনি updatedbএটি ব্যবহার করার আগে ডাটাবেসটি ব্যবহার করে ম্যানুয়ালি আপডেট করতে পারেন ।
হাইট্রোমো

আপনি কি জানেন যে ক্রোনজব ঠিক কীভাবে কনফিগার করা হয়? এটি কি কোনও নির্দিষ্ট সময়ে বা সিস্টেমটি নিষ্ক্রিয় অবস্থায় থাকে বা প্রারম্ভের n মিনিটের পরে হয়? কারণ আমি মনে করি যে আমি কোথাও পড়েছি যে এটি 1-2-1 এ সময় নির্ধারিত হয়, যখন আমার যন্ত্রটি সাধারণত বন্ধ থাকে turned ম্যানুয়ালি ( sudo updatedb) ব্যতীত এটি কি আর আপডেট হবে না ? এবং ডাটাবেসটি কত পুরানো তা দেখার সুযোগ আছে?
বাইট কমান্ডার

grep run-parts /etc/crontabআপনি দেখতে পাবেন যে এগুলির মাধ্যমে পরিচালিত হচ্ছে anacron(যা আপনি দেখতে পাবেন man anacronএমন সিস্টেমগুলির কাছে আরও স্থিতিস্থাপক যা সর্বকালের নয়)। আমি যেটি দেখতে পাচ্ছি তার থেকে এটির পরিবর্তে এটি বুটে চালানো উচিত যদি আপনি মূল ক্রোন সময়টি মিস করেন।
অলি

2
আমি দেখতে পেয়েছি যে অবস্থানগুলি আমার অপসারণযোগ্য / আনমাউন্ট করা পার্টিশনগুলিকে সূচী করে না, তাই যদি আমি সেগুলিতে কিছু খুঁজে পেতে চাই তবে আমাকে অনুসন্ধানটি ব্যবহার করতে হবে। অবশ্যই, সনাক্ত -exec command {} \;করার মতো সমস্ত আশ্চর্যজনক বিকল্প নেই - যা পাওয়া প্রতিটি ফাইলের একটি কমান্ড চালাতে পছন্দ করে। locate -bবাকী পথ ছাড়াই - নামের চূড়ান্ত উপাদানটির সাথে মেলে এমন ফাইলগুলি সন্ধান করতে কোনটি সীমাবদ্ধ রাখে তা আমি ব্যবহার করতে চাই । আমি প্রায়শই প্রথম চেষ্টা করি কারণ এটি এত দ্রুত। এছাড়াও, আপনি sudo updatedbঅবস্থান ডাটাবেসটি রিফ্রেশ করতে চাইলে যে কোনও সময় চালাতে পারেন ।
জো

আপনার যদি রিয়েল টাইম অনুসন্ধানের দরকার হয় যা কিছুটা ls -R | grep 'file_name.txt'
সহজও হয় তবে

8

আমি যতটা ওলি পছন্দ করি (যা অনেকটা!) আমি তাঁর সাথে 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কমান্ড এটা নিজস্ব ডাটাবেসের যা তুলনায় এটা বিদ্যুত গতিতে দেয় হয়েছে।


@ এলিয়াহাকাগান তবে ফাইন্ড কমান্ডটি সমস্ত ড্রাইভের একটি ডিরেক্টরিতে সমস্ত ডিরেক্টরি এবং ফাইল তালিকাভুক্ত করে স্ক্রোল করছে। এটি কাজ করছে বলে মনে হয়েছিল এবং আমি শেষের দিকে একটি প্রিন্টআউট আশা করছিলাম ... কোনওভাবেই এটি ফাইন্ড কমান্ডের অনুসন্ধান "ফিক্সিং" করার সময় ছিল না যা সময় পাওয়ার বিষয়ে ছিল। দৌড়তে locate / display-auto-brightness17 সেকেন্ড সময় লাগে এবং সমস্ত ডিরেক্টরি এবং সমস্ত ডিস্কে ফাইল প্রদর্শন করে।
WinEunuuchs2 ইউনিক্স

@ এলিয়াকাগান আমি বুঝতে পারি। --regexপ্রয়োজনীয় ছিল কারণ আমার অনুসন্ধান স্ট্রিংয়ের সাথে প্রচুর ফলাফল ফিরে এসেছে। আমি আমার উত্তরটি সন্ধান এবং সনাক্ত করার জন্য কয়েক মিনিটের মধ্যে দু'টি নতুন উদাহরণ খুঁজে পাব।
WinEunuuchs2 ইউনিক্স

1
এলিয়াহর বক্তব্য পরিষ্কার করতে, সেই আদেশটির findঅর্থ "ডিরেক্টরিতে সমস্ত ফাইলের ফাইলের নাম মুদ্রণ করুন /এবং display-auto-brightness" " আমি মনে করি আপনি ব্যবহার করতে চেয়েছিলেন find / -name display-auto-brightness, তবে এটিরও প্রচুর আবর্জনা "অনুমতি অস্বীকার করা হয়েছে" ত্রুটিগুলি মুদ্রণ করে।
wjandrea

@ Wjandrea হ্যাঁ আমি যেমনটি বলেছিলাম যে ফাইলটি সন্ধান করতে পয়েন্টটি নয়, এটি সময় সন্ধানের আদেশ ছিল time আমি এখন ক্যাশে ফ্লাশ করার পরে বৈধ পরামিতিগুলির সাথে পরীক্ষাগুলি পুনরায় চালু করছি। তারপরে আমি উত্তরটি আপডেট করব।
WinEunuuchs2 ইউনিক্স

1
@ উইন না, আপনার উদাহরণটি এখনও বৈধ, এবং আমি মনে করি না যে প্রসেসিংয়ের সময়টি ফাইলটি পাওয়া গেছে এবং না পাওয়া যায়নি much
wjandrea
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.