উত্তর:
locate(1)
মাত্র একটি বড় সুবিধা আছে find(1)
: গতি।
find(1)
যদিও এর অনেক সুবিধা রয়েছে locate(1)
:
find(1)
এটি আধ্যাত্মিক, এটিটি অ্যান্ড টি ইউনিক্সের প্রথম সংস্করণে ফিরে যাচ্ছে । এমনকি এটি ব্যাসবক্সের মাধ্যমে কাটা-ডাউন এমবেডড লিনাক্সগুলিতে পাবেন । এটি সর্বজনীন তবে সর্বজনীন।
locate(1)
তুলনায় অনেক কম বয়সী find(1)
। প্রথম দিকের পূর্বপুরুষ locate(1)
1983 সাল পর্যন্ত উপস্থিত হন নি এবং এটি locate
1994 অবধি " " হিসাবে ব্যাপকভাবে উপলব্ধ ছিল না , যখন এটি জিএনইউ অনুসন্ধানকারী এবং 4.4BSD তে গৃহীত হয়েছিল ।
locate(1)
এছাড়াও মানহীন , সুতরাং এটি সর্বত্র ডিফল্টরূপে ইনস্টল করা হয় না। কিছু পজিক্স টাইপ ওএস অপশন হিসাবে এটি সরবরাহ করে না এবং যেখানে এটি উপলব্ধ রয়েছে বাস্তবায়নে আপনার পছন্দের বৈশিষ্ট্যগুলির অভাব থাকতে পারে কারণ ন্যূনতম বৈশিষ্ট্য সেট নির্দিষ্ট করে এমন কোনও স্বাধীন মান নেই যা অবশ্যই উপলব্ধ।
একটা হল কার্যত মান, হচ্ছে বাসদlocate(1)
, কিন্তু যে শুধুমাত্র কারণ অন্য দুই প্রধান স্বাদে locate
তার সমস্ত বিকল্পগুলির বাস্তবায়ন: -0
, -c
, -d
, -i
, -l
, -m
, -s
, এবং -S
। mlocate
বাসদ 6 অতিরিক্ত অপশন প্রয়োগ না locate
: -b
, -e
, -P
, -q
, --regex
এবং -w
। গনুহlocate
ঐ ছয়টি প্লাস অন্য প্রয়োগ চার : -A
, -D
, -E
, এবং -p
। (আমি alias লেখা মত ছোটখাট পার্থক্য উপেক্ষা করছি -?
বনাম -h
বনাম --help
।)
বিএসডি এবং ম্যাক ওএস এক্স জাহাজ বিএসডি করে locate
।
বেশিরভাগ লিনাক্স জিএনইউ পাঠায় locate
তবে রেড হ্যাট লিনাক্স এবং আর্চ শিপ mlocate
পরিবর্তে। দেবিয়ান তার বেস ইনস্টলটিতে কোনও ইনস্টল করে না, তবে এটির ডিফল্ট প্যাকেজ সংগ্রহস্থলগুলিতে উভয় সংস্করণ সরবরাহ করে; যদি উভয়ই একবারে ইনস্টল করা থাকে তবে " locate
" রান করে mlocate
।
ওরাকল ডিসেম্বর 2014 এ প্রকাশিত 11.2 সাল থেকেmlocate
সোলারিসে শিপিং করছে that এর আগে সোলারিসে ডিফল্টরূপে ইনস্টল করা হয়নি। (সম্ভবত, এটি সোলারিসের কমান্ডটি অরাকল লিনাক্সের সাথে অসম্পূর্ণতা হ্রাস করার জন্য করা হয়েছিল , যা রেড হ্যাট এন্টারপ্রাইজ লিনাক্সের উপর নির্ভরশীল , যা ব্যবহার করে ।)locate
mlocate
আইবিএম, AIX এখনো কোনো সংস্করণ পাঠাতে পারেনি locate
, অন্তত, AIX 7.2 হিসাবে , যদি না আপনি গনুহ ইনস্টল findutils
থেকে লিনাক্স ফর এপ্লিকেশনস, AIX টুলবক্স ।
এইচপি-ইউএক্স এছাড়াও উপস্থিত অভাব locate
বেস সিস্টেমের মধ্যে।
পুরানো "আসল" ইউনিক্সগুলিতে সাধারণত কোনও প্রয়োগের অন্তর্ভুক্ত থাকে না locate
।
find(1)
অনেকগুলি ফাংশন, বুলিয়ান অপারেটর ইত্যাদির সাথে একটি শক্তিশালী এক্সপ্রেশন সিনট্যাক্স রয়েছে
find(1)
শুধু নামের চেয়ে বেশি ফাইল নির্বাচন করতে পারে। এটি দ্বারা নির্বাচন করতে পারেন:
নাম অনুসারে ফাইলগুলি সন্ধান করার সময়, আপনি নিয়মিত এক্সপ্রেশন ব্যবহার করে সমস্ত সংস্করণে বা জিএনইউ বা বিএসডি সংস্করণে ফাইল গ্লোব্বিং সিনট্যাক্স ব্যবহার করে অনুসন্ধান করতে পারেন ।find(1)
বর্তমান সংস্করণগুলি locate(1)
যেমন গ্লোব নিদর্শনগুলি গ্রহণ find
করে তবে বিএসডি locate
মোটেও রেজিڪس করে না। আপনি যদি আমার মতো হন এবং বিভিন্ন ধরণের মেশিন ব্যবহার করতে grep
হয় তবে আপনি -r
বা এর উপর নির্ভরতা বিকাশের জন্য ফিল্টারিংকে বেশি প্রাধান্য পান --regex
।
locate
এর চেয়ে বেশি শক্তিশালী ফিল্টারিং find
দরকার কারণ ...
find(1)
অগত্যা পুরো ফাইল সিস্টেমটি অনুসন্ধান করে না। আপনি এটি সাধারণত একটি উপ-ডিরেক্টরিতে নির্দেশ করেন, আপনি যে ফাইলটি পরিচালনা করতে চান তাতে সমস্ত ফাইল যুক্ত একটি পিতামাতা। locate(1)
বাস্তবায়নের জন্য সাধারণ আচরণটি হ'ল আপনার প্যাটার্নের সাথে মেলে সমস্ত ফাইলের বানান, এটি grep
ফিল্টারিংয়ে রেখে যায় এবং এর ফাটলটিকে আকারে কমিয়ে দেয়।
(অশুভ টিপ: locate /
সম্ভবত আপনি সিস্টেমে সমস্ত ফাইলের একটি তালিকা পাবেন!)
এর locate(1)
মতো বিভিন্ন রূপ রয়েছে slocate(1)
যা ব্যবহারকারীর অনুমতিের ভিত্তিতে আউটপুটকে সীমাবদ্ধ করে, তবে এটি locate
কোনও বড় অপারেটিং সিস্টেমের ডিফল্ট সংস্করণ নয় ।
find(1)
করতে কিছু ফাইল এটা খুঁজে বের করে শুধু তাদের খোঁজার ছাড়াও। এই ধরনের অপারেটরটি সর্বাধিক শক্তিশালী এবং ব্যাপকভাবে সমর্থিত -exec
তবে অন্যরাও রয়েছেন। সাম্প্রতিক জিএনইউ এবং বিএসডি বাস্তবায়নগুলি আবিষ্কার করে, উদাহরণস্বরূপ, আপনার -delete
ও -execdir
অপারেটর রয়েছে।
find(1)
রিয়েল টাইমে চলে তাই এর আউটপুট সর্বদা আপ টু ডেট থাকে।
locate(1)
অতীতে অতীতে ঘন্টা বা দিন আপডেট হওয়া কোনও ডাটাবেসের উপর নির্ভর করে কারণ এর আউটপুট পুরানো হতে পারে। (এটি বাসি ক্যাশে সমস্যা )) এই মুদ্রার দুটি দিক রয়েছে:
locate
এমন ফাইলগুলির নাম রাখতে পারে যা আর নেই।
গনুহ locate
এবং mlocate
আছে -e
সেটির উপরে ফ্ল্যাগ লাগাতে ফাইল অস্তিত্ব জন্য চেক করতে নাম মুদ্রণ প্রতিটি ফাইল গত আবিষ্কৃত আগে, কিন্তু এই কিছু দূরে eats locate
গতি সুবিধা, এবং বাসদ পাওয়া যায় locate
ব্যতীত।
locate
সর্বশেষ ডাটাবেস আপডেটের পরে তৈরি করা ফাইলগুলির নাম দিতে ব্যর্থ হবে।
আপনি locate
আউটপুট সম্পর্কে কিছুটা অবিশ্বস্ত হতে শিখেন , এটি ভুল হতে পারে তা জেনে।
এই সমস্যা সমাধানের উপায় রয়েছে তবে আমি ব্যাপকভাবে ব্যবহারের ক্ষেত্রে কোনও প্রয়োগ সম্পর্কে অবগত নই। উদাহরণস্বরূপ, আছে rlocate
তবে এটি কোনও আধুনিক লিনাক্স কার্নেলের বিরুদ্ধে কাজ করে না বলে মনে হয়।
find(1)
ব্যবহারকারীর দ্বারা চালিত হওয়ার চেয়ে আর কোনও বিশেষ সুযোগ নেই।
যেহেতু locate
একটি সিস্টেমে সমস্ত ব্যবহারকারীর জন্য একটি বৈশ্বিক পরিষেবা সরবরাহ করে, এটি এর updatedb
প্রক্রিয়াটি চালিত করতে চায় root
যাতে এটি সম্পূর্ণ ফাইল সিস্টেমটি দেখতে পারে। এটি সুরক্ষা সমস্যার একটি পছন্দ বাড়ে:
updatedb
রুট হিসাবে চালান , তবে এর আউটপুট ফাইলটিকে বিশ্ব-পঠনযোগ্য করে তুলুন যাতে locate
বিশেষ সুবিধা ছাড়াই চলতে পারে। এটি কার্যকরভাবে সিস্টেমের সমস্ত ফাইলের নাম সকল ব্যবহারকারীর কাছে প্রকাশ করে। সত্যিকারের সমস্যার জন্য এটি যথেষ্ট পরিমাণে সুরক্ষা লঙ্ঘন হতে পারে।
বিএসডি locate
ম্যাক ওএস এক্স এবং ফ্রিবিএসডি-তে এইভাবে কনফিগার করা হয়েছে।
কেবলমাত্র দ্বারা পঠনযোগ্য হিসাবে ডাটাবেসটি লিখুন root
এবং locate
setuid
মূল তৈরি করুন যাতে এটি ডাটাবেসটি পড়তে পারে। এর অর্থ locate
কার্যকরভাবে ওএসের অনুমতি সিস্টেমটিকে পুনরায় প্রয়োগ করতে হবে যাতে এটি আপনাকে যে ফাইলগুলি সাধারণত দেখতে না পারে সেগুলি না দেখায়। এটি আপনার সিস্টেমে আক্রমণের পৃষ্ঠকে বাড়িয়ে তোলে, বিশেষত একটি রুট বাড়ানোর আক্রমণকে ঝুঁকিপূর্ণ করে তোলে ।
locate
ডাটাবেস ফাইলটির মালিকানার জন্য একটি বিশেষ ব্যবহারকারী বা গোষ্ঠী তৈরি করুন এবং সেই ব্যবহারকারী / গোষ্ঠী locate
হিসাবে বাইনারি চিহ্নিত করুন setuid/setgid
যাতে এটি ডাটাবেসটি পড়তে পারে। এটি নিজেই সুবিধাগুলি বৃদ্ধির আক্রমণ প্রতিরোধ করে না, তবে এটি যে ক্ষতি করতে পারে তা হ্রাস করে।
mlocate
Red Hat Enterprise Linux এ এই ভাবে কনফিগার করা আছে ।
আপনি এখনও, যদিও, একটি সমস্যা আছে কারণ যদি আপনি একটি ডিবাগার ব্যবহার করতে পারেন locate
অথবা এটি কারণ কোর ডাম্প আপনি ডাটাবেস এর সুবিধাপ্রাপ্ত অংশের পেতে পারেন।
আমি locate
সিস্টেমের প্রতিটি ব্যবহারকারীর জন্য পৃথকভাবে এটি চালানোর সংক্ষিপ্ততার সাথে সত্যিকারের "সুরক্ষিত" কমান্ড তৈরির কোনও উপায় দেখছি না , যা এর সুবিধার অনেকাংশে উপেক্ষা করে find(1)
।
নীচের লাইন, উভয়ই খুব দরকারী। locate(1)
আপনি যখন নাম দ্বারা কোনও নির্দিষ্ট ফাইল সন্ধানের চেষ্টা করছেন তখন এটি আরও ভাল হয়, যা আপনি জানেন যে এটি উপস্থিত রয়েছে, তবে এটি ঠিক কোথায় আছে তা আপনার মনে নেই। find(1)
আপনার যখন পরীক্ষা করার জন্য একটি কেন্দ্রীভূত অঞ্চল রয়েছে বা যখন এর অনেকগুলি সুবিধাগুলির মধ্যে আপনার কোনও প্রয়োজন হয় তখন ভাল is
find -- "$dir"
শক্তিশালী নয় ( $dir
একটি প্রাকটিকের জন্য নেওয়া যেতে পারে), কোনও সিমিলিংকের বৈশিষ্ট্যগুলির জন্য পরীক্ষা করার কোনও উপায় নয়, বর্ণের শর্ত সম্পর্কিত সমস্যাগুলি ... আমার জন্য find
এবং locate
দুটি ভিন্ন সমস্যার সমাধান করতে পারেন। অনেকগুলি জায়গা রয়েছে যেখানে সন্ধান ব্যবহার করা বাস্তববাদী নয় (যেমন লক্ষ লক্ষ ফাইল ধারণকারী ডিরেক্টরি)। অবস্থান ফাইলের নামের মধ্যে সীমাবদ্ধ একটি সূচক সিস্টেম।
locate
মোটামুটি কিছু মত ছিল find / -type f | gzip > locate.gz
, এবংzgrep "$1" <locate.gz
locate
হয় findutils
প্যাকেজ, এবং তার updatedb
প্রোগ্রাম পদ বাস্তবায়িত হয় find(1)
। সুতরাং যে অর্থে, locate(1)
আসলে প্রয়োজন find(1)
। :)
find
, locate
ইত্যাদি অন্যান্য বিভাগে, তাই এটি বিভিন্ন বিভাগে ব্যবহৃত একই নামের দুর্বোধ্য সেখানে হতে হবে তা নয় ম্যানুয়াল (যেমন unlink(1)
বনাম unlink(2)
), আমাদের মধ্যে যারা কনভেনশন করত তারা দেখতে পাবে যে ম্যান পেজ রেফারেন্স হিসাবে।
locate
একটি প্রাক-বিল্ট ডাটাবেস ব্যবহার করে, যা নিয়মিত আপডেট করা উচিত, যখন find
ফাইলগুলি সনাক্ত করতে কোনও ফাইল সিস্টেমের মাধ্যমে পুনরাবৃত্তি হয়।
সুতরাং, locate
তুলনায় অনেক দ্রুত find
, তবে ডাটাবেস-ক্যাশে হিসাবে দেখা যেতে পারে- আপডেট না হলে ( updatedb
কমান্ড দেখুন) ভুল হতে পারে ।
এছাড়াও, find
আরও গ্রানুলারিটি অফার করতে পারে, কারণ আপনি এর প্রতিটি বৈশিষ্ট্য দ্বারা ফাইলগুলি ফিল্টার করতে পারবেন, এবং locate
ফাইলের নামের সাথে মেলে এমন একটি প্যাটার্ন ব্যবহার করুন।
find
ইউনিক্সের একজন নবজাতক বা মাঝেমধ্যে ব্যবহারকারীর পক্ষে ম্যান পৃষ্ঠার সতর্কতা অবলম্বন না করে সফলভাবে ব্যবহার করা সম্ভব নয়। .তিহাসিকভাবে, এর কিছু সংস্করণ অপশনটিকে find
ডিফল্ট করে না -print
, ব্যবহারকারী-বৈরিতা জুড়ে দেয়।
locate
কম নমনীয়, তবে সাধারণ ক্ষেত্রে ব্যবহার করার চেয়ে অনেক বেশি স্বজ্ঞাত।
find . -name 'nametosearch'
, বা -iname
ক্ষেত্রে সংবেদনশীল জন্য। .
বর্তমান ডিরেক্টরি বাদে অন্য অনুসন্ধানের জন্য ডিরেক্টরি পথের সাথে প্রতিস্থাপন করুন । সেখানে, কোনও নবজাতকের ব্যবহারকারীর প্রয়োজনীয়তার 90% প্রয়োজনীয়তা এমনকি ফাইল গ্লোববিংয়ে না coveredাকা। (আমি সাধারণত ব্যবহার করেন find . -iname '*partialfilename*'
আর যদি আমি থেকে অনুসন্ধান করছি /
, আমি ব্যবহার find / -maxdepth 5 -iname '*partialname*'
যা নিচে সার্চ সময় মধ্যেও যখন সবকিছু আমি সময় 90% সেখানে, এর মধ্যবর্তী ব্যবহারকারীদের প্রয়োজনীয়তা 75% আগ্রহী খোঁজার।।) :)
সনাক্তকরণের সামান্য ব্যর্থতা হ'ল এটি আপনার আগ্রহী ফাইল সিস্টেমের ক্ষেত্রটি সূচীকরণ নাও করতে পারে De / tmp, / var / spool এবং / home/.ecryptfs সহ।
/Home/.ecryptfs উপেক্ষা করা এনক্রিপ্টড ডিরেক্টরিগুলিতে ফাইলের নামগুলি অননুমোদিত ব্যবহারকারীদের কাছে প্রকাশ করা থেকে বাধা দেয়। যাইহোক, যদি আপনার হোম ডিরেক্টরিটি ইক্য্রিপ্টফগুলি দিয়ে এনক্রিপ্ট করা থাকে তবে এর অর্থ হ'ল আপনার হোম ডিরেক্টরিটি সূচীভূত নয়, এবং এটির ফলে আপনার হোম ডিরেক্টরিতে কোনও কিছুই খুঁজে পাবে না। এটি আপনার পক্ষে এটি বেশিরভাগ ক্ষেত্রে অকেজো হতে পারে (এটি আমার পক্ষে হয়)। ফলাফলগুলি না খুঁজে পাওয়ার পাশাপাশি আপডেটেডব প্রক্রিয়াটি আপনার ডিস্কটি কোনও সুবিধা ছাড়াই পর্যায়ক্রমে লোড করবে এবং আপনি যদি সিস্টেমের প্রধান বা একমাত্র ব্যবহারকারী হন তবে তা অক্ষমও হতে পারে।