এপিটিতে ইনস্টল করা প্যাকেজগুলির নির্ভরতা তালিকা (পুনরাবৃত্ত)


17

আমি ইনস্টল করা প্রতিটি প্যাকেজের জন্য আমি জানতে চাই যদি আমি আনইনস্টল না করি তবে কোন প্যাকেজ ইনস্টল করা হবে। আমার যে আউটপুটটির প্রয়োজন তা উদাহরণ ( package: list of deps):

abc: foo bar
bcd: baz abc
bdd: baz fuubar

পরিশেষে

আমি যদি প্যাকেজটি pppব্যবহার করে অপসারণ করি তবে সত্যিকার অর্থে কী সরানো হবে তা যদি আমি পরীক্ষা করি apt-get:

$ echo $(apt-get --dry-run remove ppp | grep '^Remv ' | cut -d' ' -f2)
gnome-ppp mint-meta-xfce network-manager-pptp-gnome network-manager-pptp wvdial pppoeconf pppoe pptp-linux pppconfig ppp

আমি দেখতে পাচ্ছি যে apt-cacheশো আমাকে যা দেয় তার থেকে এটি আলাদা (যা আমি মনে করি না যে পুনরাবৃত্তি নির্ভরতা অন্তর্ভুক্ত করে):

$ apt-cache show ppp | grep '^Breaks: '
Breaks: network-manager (<= 0.8.0.999-1), network-manager-pptp (<= 0.8.0.999-1), pppdcapiplugin (<= 1:3.9.20060704+dfsg.1-1)

সংযোজন 2

কি dpkg --get-selections | cut -f1পুনরুক্তি উপর ইনস্টল করা প্যাকেজের তালিকা পেতে একটি নির্ভরযোগ্য উপায়?


1
পার্সিংটি apt-get --dry-run removeমূলত সঠিক দেখাচ্ছে। এটি কিছু স্বয়ংক্রিয়ভাবে ইনস্টল হওয়া প্যাকেজগুলি মিস করতে পারে যা কেবলমাত্র স্বয়ংক্রিয়ভাবে ইনস্টল হওয়া প্যাকেজগুলির জন্য প্রয়োজন যা কেবল আপনার অপসারণ প্যাকেজটির প্রয়োজন। আপনি কি এটিকে উপযুক্ত উত্তর হিসাবে বিবেচনা করেন না?
গিলস 'দুষ্ট হওয়া বন্ধ করুন'

উত্তর:


11

আপনি এখানে কয়েকটি আলাদা প্রশ্ন জিজ্ঞাসা করেছেন, আমি আশা করি আমি কমপক্ষে একজন বা দু'জনের জন্য সহায়তা করতে পারি।

সমস্ত ইনস্টল করা প্যাকেজ তালিকা করতে dpkgক্ষেত্রের দ্বারা পৃথক তালিকার আউটপুট ব্যবহার করুন

dpkg -l 

অতিরিক্ত ক্ষেত্র ছাড়াই কেবল প্যাকেজ তালিকা পেতে, যাতে আপনি এটি অন্য কোথাও পাইপ করতে পারেন।

dpkg -l | awk '{print $2 }' # Pipe to grep after the awk, or glob from dpkg

উদাহরণস্বরূপ, আমি যদি কোনও পুরানো কার্নেল সরিয়ে নিতে চাই,

apt-get purge `dpkg -l linux* | awk '{print $2}' | grep 3.0.0-12`

সমস্ত অনিবদ্ধ নির্ভরতার মধ্য দিয়ে যাওয়ার সহজতম উপায়টি রয়েছে debfoster। এটি ইন্টারেক্টিভভাবে চলে এবং আপনি যা চান তার উপর নির্ভর করে, তাদের নির্ভরতা এবং যা পুনরাবৃত্তি নির্ভরতা নয় তা সরিয়ে বা তালিকাভুক্ত করতে পারে।

নির্দিষ্ট প্যাকেজের সমস্ত পুনরাবৃত্ত নির্ভরতা তালিকাভুক্ত করতে,

debfoster -d $PACKAGE ## PACKAGE is the specific package.

মৃত্যুদন্ড কার্যকর করার পরে আপনি debfosterকোনও প্যাকেজটির যে কোনও নির্ভরশীলকেও পরীক্ষা করতে পারেন,

debfoster -e $PACKAGE ## PACKAGE is the specific package.

তালিকায় একটি সত্যিই মহান পথ 'এতিম' প্যাকেজ, সাথে আছেন deborphandeborphanবিকল্প ছাড়াই চালান , এবং এটি সমস্ত 'অনাথ' প্যাকেজ তালিকাভুক্ত করবে। একটি 'অনাথ' এমন একটি প্যাকেজ যা কোনও কিছুই নির্ভর করে না এবং আপনি স্পষ্টভাবে ইনস্টল করেন নি installed

আমি কোনও 'অনাথ' প্যাকেজ পরিষ্কার করতে চাই, নতুন ইনস্টল করার পরে। আমি নির্দিষ্ট প্যাকেজগুলি মুছে ফেলার পরে, এর মাধ্যমে আপনি যে কোনও কিছু মিস apt-get autoremove --purgeকরেছেন,

apt-get purge `deborphan`

অবশেষে কখনও কখনও আপনি না করেন --purgeএবং প্যাকেজ 'বাম ওভার' দিয়ে শেষ করেন, এর নতুন সংস্করণগুলি apt-getসেগুলি স্বয়ংক্রিয়ভাবে মুছে ফেলতে পারে। আনইনস্টল করা প্যাকেজ চালানো থেকে সমস্ত 'বাম ওভার' অপসারণ করতে,

apt-get autoclean

আপনার যদি নতুন সংস্করণ না থাকে তবে apt-getআপনি সর্বদা তাদের এই আদেশগুলি দিয়ে মুছে ফেলতে পারেন। কোনও ত্রুটিযুক্ত ফাইল উপস্থিত না থাকলে তারা ত্রুটি করে, মনে হয় অটোক্লিয়ান মাঝে মাঝে নির্বিশেষে কিছু মিস করতে পারে।

dpkg --list |grep "^rc" | cut -d " " -f 3 | xargs dpkg --purge

ডেফোস্টার এখনও বিদ্যমান, তবে যথাযথ বৈশিষ্ট্যগুলি দ্বারা এটি বিবেচিত হিসাবে বিবেচিত
জোশুয়া ক্লেটন

4
apt-cache show pkgname1 pkgname2...

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


দুঃখিত, আমি আমার প্রশ্নটি ভুলভাবে প্রণয়ন করেছি। আমি ইনস্টল করা প্রতিটি প্যাকেজের জন্য কোন প্যাকেজগুলি আনইনস্টল করা হবে তা জানতে আগ্রহী। এবং আমার ইনস্টল করা সমস্ত প্যাকেজগুলির তালিকাও থাকা দরকার।
মুছে ফেলা হয়েছে

2
@ মুছে ফেলা: দুঃখিত, আমি এই মন্তব্যটি এখন পর্যন্ত দেখিনি। "যা প্যাকেজ প্রতিটি প্যাকেজ আমি ইনস্টল করা আছে জন্য আনইনস্টল করা হবে" জবাবে চেষ্টা (আমি আপনি যদি এই প্রশ্নের প্রতি প্যাকেজ ভিত্তিতে বললেন চান অনুমান) apt-get remove -s packagename। আপনার ইনস্টল করা সমস্ত প্যাকেজ তালিকাভুক্ত করা ঠিক dpkg -l
ফাহিম মিঠা

@ ফাহিমমিঠা: পুরাতন পোস্ট, তবে এখনও দুর্দান্ত টিপ apt-get remove -s packagename!
twan163

@ twan163 খুশী এটি আপনার জন্য দরকারী ছিল।
ফাহিম মিঠা

1

আমি মনে করি আপনাকে একই জিনিসটির জন্য চালিয়ে যেতে হবে এবং একটি লুপ তৈরি করতে হবে:

apt-cache depends libtext-wrapi18n-perl |xargs apt-cache depends

অবশ্যই হেডারগুলি সরিয়ে ফেলুন।


2
অপ্ট-ক্যাশে নির্ভর করে একটি পুনরুদ্ধার বিকল্প আছেapt-cache depends --recurse libtext
জোশুয়া ক্লেটন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.