কোনও প্যাকেজের মালিকানাধীন ফাইলগুলি কীভাবে সন্ধান করবেন?


12

আমার সিস্টেমে আমার কাছে ফাইল রয়েছে যা কোনও প্যাকেজের অন্তর্ভুক্ত নয়, সেগুলি আমার বা সংকলিত প্রোগ্রামগুলির সাথে ইনস্টল make install। কোনও প্যাকেজভুক্ত নয় এমন সমস্ত ফাইল আমি কীভাবে খুঁজে পাব?

উত্তর:


10

ইন /var/lib/dpkg/infoহয় .listটেক্সট ফাইল তালিকা সমস্ত ফাইল প্রতিটি package¹ ডেবিয়ান প্যাকেজ ম্যানেজারের মাধ্যমে ইনস্টল অন্তর্ভুক্ত।

ফাইল সিস্টেমে সমস্ত ফাইল সন্ধান করা কোনও প্রবেশের সাথে মেলে না এই জাতীয় কিছু দিয়ে অর্জন করা যেতে পারে:

find / -xdev -type f \( -exec grep -xq "{}" /var/lib/dpkg/info/*.list \; -or -print \)

পুরো ফাইল সিস্টেমটি স্ক্যান হয়ে যাওয়ায় স্পষ্টতই এটি অনেক দিন সময় নেয়। আপনি যদি সিস্টেম ডিরেক্টরিগুলির জন্য বিভিন্ন পার্টিশন ব্যবহার করেন (যেমন /usrবা /var) তবে প্রাথমিকের পরে সেগুলি নির্দিষ্ট করুন /।

সতর্কতা: এতে প্যাকেজ স্ক্রিপ্টগুলির দ্বারা নির্মিত ফাইলগুলি অন্তর্ভুক্ত নয় । এই ক্ষেত্রে:

  • /etc/hosts.allowকোথাও তালিকাভুক্ত নয় libwrap0তবে প্যাকেজ ইনস্টলেশন করার সময় সেই ফাইলটি উপস্থিত না থাকলে সম্ভবত এটি তৈরি করা হতে পারে।
  • অনেকগুলি ফাইল ইনস্টলেশনের সময় সংকলিত হয়, উদাহরণস্বরূপ .pycফাইল (সংকলিত পাইথন লাইব্রেরি), .elcফাইল (সংকলিত ইমাস লিস্প গ্রন্থাগারসমূহ), ইত্যাদি etc.
  • ...

ত্রুটিfind: argument list too long
— নট 101

@ naught101 এর থেকে বোঝা যায় যে গাজিলিয়ন ফাইলের মিল রয়েছে /var/lib/dpkg/info/*.list- উপরের ক্যোয়ারিকে অন্য কোনও নীতির অধীনে আবার লিখতে হবে।
— প্যাট্রিস লেভেস্ক

6

প্রক্রিয়া প্রতিস্থাপনের জন্য সমর্থন সহ শেল ব্যবহার করে @ প্যাট্রিসের সমাধানের আরও কার্যকর সংস্করণ ( bash, এটিএন্ডটি ksh, zsh):

(
  export LC_ALL=C
  comm -23 <(find / -xdev -type f | sort) \
           <(sort -u /var/lib/dpkg/info/*.list)
)

প্যাট্রিসের সমাধানের মতো এটিও ধরে নেওয়া হয় যে কোনও ফাইল পাথে নতুন লাইনের অক্ষর নেই।


1
locateডাটাবেস ব্যবহার চালানোর চেয়ে দ্রুত হবে find? locate \* | grep -v "^/home/"- এছাড়াও /boot/সিস্টেমের অন্যান্য পার্টিশনগুলি সন্ধান করার সুবিধা রয়েছে ।
— naught101

3

যেহেতু আপনি আপনার প্রশ্নটি debianউল্লেখ করেছেন না এমন স্পষ্ট পছন্দ দিয়ে প্রশ্ন করেছেন যা cruft-ngআপনার কোনও নমনীয়তার প্রয়োজন হয় না বা cruftআপনি যদি পুরো সিস্টেম / অবস্থিত্বে অনুসন্ধান করতে চান না তবে তা ব্যবহার করা।


0

আপনি প্রক্রিয়া বিকল্প এবং grep& ব্যবহার করতে পারেন find। মনে রাখবেন যে আপনি যদি কোনও নির্দিষ্ট ডিরেক্টরিতে ফাইল সন্ধান করেন তবে কয়েক সেকেন্ডের সংরক্ষণ grepথেকে কেবলমাত্র প্রাসঙ্গিক পাথগুলি ফিল্টার করার জন্য এটি দুটিবার ব্যবহৃত হয় /var/lib/dpkg/info।

dir="/lib/x86_64-linux-gnu"
find "$dir" -type f \
| grep -v -x -F -f \
    <(find '/var/lib/dpkg/info' -name '*.list' -print0 \
       | xargs -0 grep -h -F "^$dir" \
       | sort -u)
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.