বাশ স্ক্রিপ্ট (টার্মিনাল) দিয়ে একটি হ্যাশ মান দ্বারা একটি ফাইল কীভাবে সন্ধান করবেন?


6

আমি ম্যাক ওএস এক্স লায়ন 10.7 এর জন্য একটি স্ক্রিপ্ট লিখছি এবং আমি জানতে চাই কীভাবে আমি তাদের এসএএএ 1 হ্যাশগুলির উপর ভিত্তি করে ফাইলগুলি অনুসন্ধান করতে পারি। আমি যে ফাইল (গুলি) সন্ধান করব তার পুরো ফাইল সিস্টেমটি অনুসন্ধান করতে চাই।

উদাহরণস্বরূপ SHA1 মানটি 0d882ff2d5edd7d045c1b57320d2e046793868f8ফাইলটির সাথে সম্পর্কিত, MacOSXUpdCombo10.7.2.dmgআমি কীভাবে ফাইলের তুলনা না করে ফাইলের SHA1 মান সহ হার্ড ড্রাইভ অনুসন্ধান করতে পারি?

উত্তর:


8

আপনি findকমান্ডটি ব্যবহার করতে পারেন :

find / -type f -exec md5 {} \; | grep 0d882ff2d5edd7d045c1b57320d2e046793868f8

তবে, যেহেতু আপনি সমস্ত ফাইলগুলিতে এটি চালাচ্ছেন, এটি অত্যন্ত ধীর হতে পারে - আপনি অনুসন্ধান করতে চান এমন একটি নির্দিষ্ট ডিরেক্টরিতে পাথটি প্রতিস্থাপন করে অনুসন্ধান ডিরেক্টরিটি সীমাবদ্ধ করার চেষ্টা করুন /


আপনার sudoযদি প্রিফিক্স করতে হবে তবে আপনি যদি ফাইল সিস্টেমের ক্ষেত্রে নিয়মিত ব্যবহারকারীর সীমাবদ্ধতার বাইরে সন্ধান করতে চান তবে এটির সাথে ।
আয়ান সি

1
@ ব্রায়ানলারসন যদি এই উত্তরটি আপনার প্রশ্নের সমাধান করে তবে আপনি এখনও বামদিকে ভোট গণনার নীচে চেক চিহ্নটি ক্লিক করতে পারেন।
আয়ান সি

md5একটি খেলায় ব্যর্থ হবে sha1হ্যাশ।
ড্যান

1

এখানে কয়েকটি লাইন কমান্ড রয়েছে যা এটির SHA1 ডাইজেস্ট থেকে কোনও ফাইল খুঁজে পেতে সহায়তা করতে পারে। ধরা যাক যে ফাইলটি আমরা শিকার করছি তা হ'ল MacOSXUpdCombo10.7.2.dmg

# store the size of the searched file
size=`/bin/ls -l MacOSXUpdCombo10.7.2.dmg | awk '{print $5}'`
# store the digest of the serached file
sha1=`/usr/bin/openssl sha1 MacOSXUpdCombo10.7.2.dmg | awk '{print $2}'`
/usr/bin/sudo find / -type f -size ${size} -exec /usr/bin/openssl sha1 {} \; |
    grep ${sha1}

এটি findডিরেক্টরি, সকেট বা বিশেষ ফাইল নয় বরং প্লেইন ফাইলগুলিতে চলবে। এটি কেবলমাত্র সঠিক আকারের ফাইলের উপর দিয়ে চালানো হবে যাতে কার্নেল বা আপনার আইটিউনস লাইব্রেরির ডাইজেস্ট করা এবং ছোট অস্থায়ী ফাইলগুলির ঝাঁকনি এড়ানো এড়ানো যায়।

আপনি যদি নিশ্চিত হন যে ফাইলটির নামটি সঠিক এক্সটেনশান সহ অন্তর্ভুক্ত রয়েছে তবে নিম্নলিখিত সন্ধানের জন্য নিম্নলিখিত যুক্তি তালিকার সাথে আরও সন্ধান করা যেতে পারে:

/usr/bin/sudo find / -type f -name "*.dmg" -size ${size} -exec /usr/bin/openssl sha1 {} \; |
    grep ${sha1}

0

আপনি কতগুলি ফাইল অনুসন্ধান করবেন তার উপর নির্ভর করে আপনি xargs ব্যবহার করার চেষ্টা করতেও পারেন।

find / -type f |
    xargs -I {} openssl sha1 {} | 
    grep 0d882ff2d5edd7d045c1b57320d2e046793868f8

openssl-Iঅপশনটির জন্য ধন্যবাদ প্রতি ফাইল প্রতি একবার কল করা xargsহবে, যাতে কোন লাভ হবে না।
nohillside

আমার ক্ষমা, আপনি ঠিক বলেছেন আমি আমার মূল বক্তব্য সম্পাদনা করেছি।
E1Suave
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.