"অ্যাপটি-গেট রিমুভ" ব্যবহার করার সময় বর্তমানে ইনস্টল হওয়া প্যাকেজগুলি উপেক্ষা করুন


15

আমার একটি দৃশ্যাবলী রয়েছে যেখানে আমি ইনস্টল করা বা নাও থাকতে পারে এমন প্যাকেজগুলির একটি সেট মুছে ফেলতে চাই এবং আমি চাই যে এগুলি রয়েছে তা মুছে ফেলতে এবং ননত নিঃশব্দে তা উপেক্ষা করতে pt কিছুটা এইরকম:

apt-get remove foo bar baz

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

কাপস-ডিবিজি সহ আমি আমার বলির ছাগলটি আসলে ইনস্টল করা প্যাকেজটি অপসারণ করতে পেরেছি worked

jcp@a-boyd:~$ sudo apt-get remove -y cups-dbg bogus-package
Reading package lists... Done
Building dependency tree       
Reading state information... Done
E: Unable to locate package bogus-package

jcp@a-boyd:~$ sudo apt-get remove --ignore-missing cups-dbg bogus-package
Reading package lists... Done
Building dependency tree       
Reading state information... Done
E: Unable to locate package bogus-package

jcp@a-boyd:~$ sudo apt-get remove --fix-broken cups-dbg bogus-package
Reading package lists... Done
Building dependency tree       
Reading state information... Done
E: Unable to locate package bogus-package

আমি জানি আমি এটি শেল স্ক্রিপ্ট এবং কিছু dpkg --listজাদু দিয়ে করতে পারি , তবে আমি এমন কোনও জটিলতা এড়াতে চাই যা একেবারেই প্রয়োজনীয় নয়।


এই উত্তরটি শেষ পর্যন্ত আমার পক্ষে কাজ করেছিল। বোবা সমস্যার জন্য বোবা ফিক্স। নোট করুন যে এটি সম্পর্কে লঞ্চপ্যাডে আসলে একটি ত্রুটি রয়েছে তাই অবদান রাখতে নির্দ্বিধায়।
জেফ

উত্তর:


8

নিম্ন-স্তরের সরঞ্জামে ফিরে আসা কি ডিপিকেগির মতো কোনও বিকল্প?

dpkg --remove foo bar libperl-dev
dpkg: warning: ignoring request to remove foo which isn't installed
dpkg: warning: ignoring request to remove bar which isn't installed
(Reading database ... 169132 files and directories currently installed.)
Removing libperl-dev ...

প্যাকেজ কনফিগার করতে অপসারণ ফাইল নীচের মত purge ব্যবহার করুন

dpkg --purge foo bar libperl-dev

1
আমার উল্লেখ করা উচিত ছিল যে প্যাকেজগুলি সরানো হবে তার বিপরীত নির্ভরতা থাকতে পারে এবং আমি সেগুলিও অপসারণ করা চাই। অ্যাপিট-গেটটি ডিপিকেজির চেয়ে অনেক ভাল, তবে আমি আপনার উত্তরটি গ্রহণ করব কারণ মনে হচ্ছে এটি করার কোনও ভাল উপায় আর নেই।
jawawizard

7

আমি প্যাকেজগুলির একটি তালিকা অনুসরণ করে নির্ভরতার জন্য apt-get remove --purge(ওরফে apt-get purge) ব্যবহার করি । অস্তিত্ব নেই এমন প্যাকেজগুলি পরিচালনা করতে আমি নীচের স্ক্রিপ্টটি ইনস্টল না করা প্যাকেজগুলি ফিল্টার করে ফেলেছি।

pkgToRemoveListFull="cups-dbg bogus-package"
pkgToRemoveList=""
for pkgToRemove in $(echo $pkgToRemoveListFull); do
  $(dpkg --status $pkgToRemove &> /dev/null)
  if [[ $? -eq 0 ]]; then
    pkgToRemoveList="$pkgToRemoveList $pkgToRemove"
  fi
done
apt-get --yes --purge remove $pkgToRemoveList

3

ডেবিয়ান ≤ 9 এর জন্য কেবল এর aptitudeপরিবর্তে কেবল ব্যবহার করা সম্ভব apt-get:

sudo aptitude remove -y cups-dbg bogus-package

প্রবণতা সতর্কতাগুলি মুদ্রণ করে, তবে তবুও আপনার প্যাকেজগুলি সরিয়ে দেয়:

Couldn't find any package whose name or description matched "bogus-package"
...
Removing cups-dbg ...
...

যদি আপনি মুছে ফেলার পরিবর্তে (প্যাকেজ কনফিগার ফাইলগুলি মুছুন) চান (কনফিগার ফাইল রাখুন), নোট করুন যে aptitudeকেবলমাত্র প্রদত্ত প্যাকেজগুলিকেই শুদ্ধ করে, যখন অব্যবহৃত নির্ভরতা কেবল অপসারণ করা হয়। তবে, আপনি দ্বিতীয় পদক্ষেপে সমস্ত মুছে ফেলা প্যাকেজগুলি মুছে ফেলতে পারেন:

apt-get -y purge $(dpkg -l | grep ^rc | awk '{print $2}')

ঠিক আছে. কখনও কখনও, খালিটির bogus-packageভুল নাম ছিল। সুতরাং, যদি আমাদের 500 টি প্যাকেজ পছন্দ হয় তবে বোগাস প্যাকেজগুলিও বিশ্লেষণ করা এবং কিছু কৌশল করা ভাল (উদাহরণস্বরূপ, সংখ্যার অভাবের নাম ইত্যাদি, ইত্যাদি .. সুতরাং, আপনি কীভাবে এটি করবেন সে সম্পর্কে কিছু ইঙ্গিত দিতে পারেন? ..
nyxee

@nyxee আমি আপনাকে একটি নতুন প্রশ্ন হিসাবে জিজ্ঞাসা করার প্রস্তাব দিচ্ছি, আপনি কী অর্জন করতে চান তা নির্দেশ করে।
vog

1
এটি 1) ব্যতীত একটি দুর্দান্ত কাজ হবে) প্রবণতা উবুন্টু 18.04 এবং 2 এ ডিফল্টরূপে আর ইনস্টল করা নেই) প্রবণতাটির সাথে ওয়াইল্ডকার্ডগুলি পরিচালনা করার উপায়টি বেশ আলাদা (এক বিচিত্র বলতে পারে) রয়েছে।
জেফ

এটি আমার জন্য ডেবিয়ান ১০-তে কাজ করছে না আমি দেখছি,Couldn't find any package whose name or description matched 'QUX' Unable to apply some actions, aborting
pdoherty926

@ pdoherty926 ইঙ্গিতটির জন্য ধন্যবাদ। আমি এটি যাচাই করেছি এবং সে অনুযায়ী আমার উত্তরটি সামঞ্জস্য করেছি।
vog

0

অন্য ছোট্ট 2-লাইনার যদি কারও এ্যাপ ব্যবহারের প্রয়োজন হয়:

purge_packages () {
  matchedPackages="$(echo "$(apt list --installed $* 2>/dev/null)" | grep -v '^Listing\.\.\.' | sed -s 's|[/ ].*||' | tr '\n' ' ' | sed 's/ *$//;s/^ *//')"
  [[ -n "$matchedPackages" ]] && apt purge -yq $matchedPackages
}

Explination:

apt list --installed $*         # Lists packages matched from function args, the --installed flag limits results to installed packages

2>/dev/null                     # Disregard the warning about using this command in a script

grep -v '^Listing\.\.\.'        # Remove the first line of output that says "Listing..." or "Listing... Done"

sed -s 's|[/ ].*||'             # Remove the rest of the line after the package name (I'm checking for / or space though it looks like just the slash is needed but package names will never have a space)

tr '\n' ' '                     # Put it all on one line separated by spaces

sed 's/ *$//;s/^ *//'           # Remove trailing and leading spaces from the line so it will be blank during the test next line if nothing was matched

[[ -n "$matchedPackages" ]]     # Check if any packages were matched

apt purge -yq $matchedPackages  # Purge them!

সুপার ইউজারে আপনাকে স্বাগতম! আপনার স্ক্রিপ্টটি কী করে এবং কীভাবে এটি হয় সে সম্পর্কে আপনি কি নিজের উত্তরে আরও বিবরণ যুক্ত করবেন?
এল

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