ম্যানুয়ালি ইনস্টল করা প্যাকেজগুলির তালিকা তৈরি করা এবং পৃথক প্যাকেজ অনুসন্ধান করা


183

আমি ম্যানুয়ালি ইনস্টল করা প্যাকেজগুলির একটি তালিকা পেতে চাই এবং aptঅথবা প্যাকেজটি ম্যানুয়ালি বা স্বয়ংক্রিয়ভাবে ইনস্টল হয়েছিল aptitudeকিনা তা জানতে সক্ষম হয়েছি foobar। কমান্ড লাইন থেকে এটি করার কোন ঝরঝরে উপায় আছে?


স্টক প্যাকেজগুলি ফিল্টার করে এমন কোনও সমাধানের জন্য unix.stackexchange.com এ এই উত্তরটি দেখুন ।
ডির্ক বার্গস্ট্রোম

সম্ভাব্য সদৃশ? - askubuntu.com/questions/365
jrg


সত্যিই ভাল সমাধান যা ডিফল্টরূপে ইনস্টল হওয়া প্যাকেজগুলিকে বাদ দেয়: উবুন্টু তালিকা পরিষ্কারভাবে ইনস্টল করা প্যাকেজগুলি
pcworld

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

উত্তর:


206

আপনি এই দুটি ওয়ান-লাইনারের কোনওটিই ব্যবহার করতে পারেন। উভয়ই আমার মেশিনে ঠিক একই আউটপুট দেয় এবং এই প্রশ্নের এখন পর্যন্ত (6 জুলাই, 2014) প্রস্তাবিত সমস্ত সমাধানের চেয়ে আরও সুনির্দিষ্ট।

ব্যবহার apt-mark:

comm -23 <(apt-mark showmanual | sort -u) <(gzip -dc /var/log/installer/initial-status.gz | sed -n 's/^Package: //p' | sort -u)

ব্যবহার aptitude:

comm -23 <(aptitude search '~i !~M' -F '%p' | sed "s/ *$//" | sort -u) <(gzip -dc /var/log/installer/initial-status.gz | sed -n 's/^Package: //p' | sort -u)

খুব কম প্যাকেজগুলি এখনও ফাটলগুলির মধ্যে পড়ে, যদিও আমি সন্দেহ করি যে এটি প্রকৃতপক্ষে ভাষা দ্বারা স্থানীয়করণ সেটআপের মাধ্যমে বা উদাহরণস্বরূপ টোটেম কোডেক ইনস্টলারটির মাধ্যমে ব্যবহারকারী দ্বারা ইনস্টল করা আছে suspect এছাড়াও, লিনাক্স-শিরোনামের সংস্করণগুলিও একত্রিত বলে মনে হচ্ছে, যদিও আমি কেবল অ সংস্করণ-নির্দিষ্ট মেটাপ্যাকেজ ইনস্টল করেছি। উদাহরণ:

libreoffice-help-en-gb
openoffice.org-hyphenation
gstreamer0.10-fluendo-mp3
linux-headers-3.13.0-29    

এটা কিভাবে কাজ করে:

  1. ম্যানুয়ালি ইনস্টল করা প্যাকেজগুলির তালিকা পান। যোগ্যতার জন্য, অতিরিক্ত sedস্ট্রিপগুলি রেখার শেষে বাকী সাদা স্থান ছেড়ে দেয়।
  2. নতুন ইনস্টল করার পরে প্যাকেজগুলির তালিকা ইনস্টল করুন।
  3. ফাইলগুলির সাথে তুলনা করুন, কেবল ফাইল 1-এ লাইনগুলি আউটপুট করুন যা ফাইল 2 তে উপস্থিত নেই।

অন্যান্য সম্ভাবনাও তেমন কাজ করে না:

  • এর পরিবর্তে ubuntu-14.04-desktop-amd64.manifestফাইলটি ( এখানে উবুন্টু 14.04 এর জন্য) ব্যবহার করা হচ্ছে /var/log/installer/initial-status.gz। আরও প্যাকেজগুলি ম্যানুয়ালি ইনস্টল হিসাবে না দেখানো হয়েছে যদিও তা না থাকলেও।
  • এর apt-mark showautoপরিবর্তে ব্যবহার করা হচ্ছে /var/log/installer/initial-status.gzapt-markউদাহরণস্বরূপ, xserver-xorg প্যাকেজটি অন্তর্ভুক্ত নয়, যখন অন্য ফাইলটি করে।

আমি রেফারেন্স হিসাবে অন্যান্য স্ট্যাক এক্সচেঞ্জ পোস্টগুলি ব্যবহার করেছি, তবে উপরের সমাধানের মতো কোনওটিই কাজ করে না:

উভয়ই উপরের সমাধানের চেয়ে বেশি প্যাকেজ তালিকাভুক্ত করে।

সম্পাদনা: আপনি যদি আগের প্রকাশ থেকে আপগ্রেড করেন তবে কী করবেন:

আপনি যদি উবুন্টুকে একটি মুক্তি থেকে পরের দিকে আপগ্রেড করেন তবে আপনার সম্ভবত এই প্রক্রিয়াটি সামঞ্জস্য করতে হবে। সেক্ষেত্রে আমি বর্তমান প্রকাশের প্রাথমিক-স্ট্যাটাস.gz ফাইল ছাড়াও নতুন প্রকাশের ম্যানিফেস্ট ফাইলটি (উপরে দেখুন) পরীক্ষা করবো। আপনি কেবল অন্য তুলনা যুক্ত করে সহজেই এটি করতে পারেন। মেনিফেস্ট ফাইলটি ব্যবহার করা কার্যকর হবে না, কারণ দুর্ভাগ্যক্রমে ম্যানিফেস্ট ফাইলটিতে প্রাথমিক_status.gz ফাইল যা করে না (আমি পরীক্ষা করেছিলাম)।


7
এটি আমার পক্ষে কাজ করে নি কারণ /var/log/installer/initial-status.gzঅনুপস্থিত। এছাড়াও আমি জানতে চাই যে এটি অ্যাপস চিহ্নিতকরণের উপর নির্ভর করে কিনা manual?
আনোয়ার

1
হায়রে সার্ভার সংস্করণগুলির জন্য কোনও প্রকাশ নেই।
আন্তি হাপালা

আমি showmanualকমান্ডটি চালিয়েছি (নীচে)। এবং commদুটি (সাজানো) তালিকার তুলনা করতে ব্যবহার করুন। showmanualফলাফলের আমাকে 1,840 দিলেন আরো থেকে অনন্য প্যাকেজ apt-mark showmanualনা এই পদ্ধতি দ্বারা দেখানো হয়েছে। কোনও প্যাকেজই এই- commকম্যান্ডের আউটপুটে অনন্য ছিল না । আমি মনে করি এটি রেকর্ড করা আরও আকর্ষণীয় যে আমার পিসির জন্য 894 প্যাকেজগুলি উভয় ফলাফলের তালিকাভুক্ত। কেন এইরকম বিশাল তাত্পর্য আছে তা নিশ্চিত নয়। কিছু (অনেক?) প্যাকেজ রিলিজ নির্দিষ্ট বলে মনে হচ্ছে। এক্সওআরজি, জিটিকে উপাদান এবং lib*জিনিসগুলির মতো অন্যান্য আপডেট হতে পারে। যাইহোক এই উত্তরটি খুব ভাল শুরু।
ইচ্ছা

আমি আপনার সমাধানগুলির সাথে কেবল তুলনা করেছি apt-mark showmanual। এটি কতটা পার্থক্য দৃশ্যমান তা আকর্ষণীয়। আপনার তালিকায় 238 টি প্যাকেজ রয়েছে যখন শোম্যানুয়াল 1717 প্যাকেজ দেয়। 2179 ইনস্টল হওয়া প্যাকেজগুলির মধ্যে উভয় তালিকায় কেবল 223 টি রয়েছে, 15 টি কেবলমাত্র আপনার (উদাহরণ: নোডেজ, লাইটডিএম) এবং 223 টি কেবল শোম্যানুতে রয়েছে (উদাহরণস্বরূপ: xserver-xorg, উবুন্টু-ডেস্কটপ)। আপনার তালিকাটি আরও সহায়ক বলে মনে হচ্ছে তবে এই পার্থক্যগুলি কোথা থেকে এসেছে তা না জেনে সিদ্ধান্ত নেওয়া সহজ নয় ... (তবে আমি নিশ্চিত যে আমি নিজেই এনজিনেক্স এবং লাইটডিএম ইনস্টল করেছি ...) [দুঃখিত যে আমি শুধু লিখেছি একই;)]
ড্যানিয়েল অল্ডার

64

প্যাকেজ অ্যাপের নতুন সংস্করণগুলিতে এপ-মার্ক কমান্ডও রয়েছে

apt-mark showmanual

35
এটি আমি ম্যানুয়ালি ইনস্টল করেছি তার চেয়ে বেশি প্যাকেজ দেখায়।
উমং

1
@ উমং আপনি ঠিক বলেছেন আমি বলব যখন আমি এই উত্তরটি লিখি তখন এটি এমন ছিল না। আমার সিস্টেমে linux-image-3.11.0-*-generic
ড্যানিয়েল অ্যাল্ডার

1
@ উমং সম্ভবত এটি আপনাকে জিজ্ঞাসা করতে সহায়তা করবে জিজ্ঞাসা / জিজ্ঞাসা / ৪৪৩7474৪৩/২ , তবে উত্তর গৃহীত হয়নি। ঘটনাটি হ'ল, একটি নতুন ইনস্টলেশনের অনেক প্যাকেজ ইতিমধ্যে ম্যানুয়াল হিসাবে চিহ্নিত। তবে এখনও কিছু অদ্ভুত জিনিস আছে। আমার উদাহরণের সাথে থাকতে: linux-image-3.13.0-24-genericম্যানুয়াল তবে বর্তমান linux-image-3.13.0-27-genericস্বয়ংক্রিয়। দেখে মনে হচ্ছে একটি রেফারেন্সিং প্যাকেজের একটি আপগ্রেড (এই ক্ষেত্রে linux-image-generic, যা নির্ভরতা পরিবর্তন করেছে), ম্যানুয়াল চিহ্নটি স্বয়ংক্রিয়ভাবে সেট হয়ে গেছে
ড্যানিয়েল অ্যাল্ডার

5
@ ড্যানিয়েলএল্ডার নতুন ইনস্টলেশনের কিছু প্যাকেজ ম্যানুয়াল হিসাবে চিহ্নিত করা উচিত। কোনও প্যাকেজ ম্যানুয়াল হিসাবে চিহ্নিত না হলে পুরো সিস্টেমটি মুছে ফেলা হতে পারে apt-get autoremove। এটি অবশ্যই আপনি চান তা নয়।
আন্তন কে

2
যদি "ম্যানুয়ালি ইনস্টলড" এর অর্থ "প্রাথমিক ওএস ইনস্টলেশনের পরে ব্যবহারকারীর দ্বারা ইনস্টল করা" হয় তবে এটি সঠিক উত্তর নয়।
সিমাস

21

উবুন্টু 16.04 এর জন্য, লগ ফাইলটি দেখুন /var/log/apt/history.log

উদাহরণ স্বরূপ:

zgrep 'Commandline: apt' /var/log/apt/history.log /var/log/apt/history.log.*.gz

এটি নিখুঁত নয়, তবে আমি নিজে হাতে কী ইনস্টল করেছি তা পরিষ্কার করে দেওয়া বেশ ভাল। একটি রাখুন -B 1দেখতে যখন এটি ইনস্টল করা ছিল, grep উপর।

উদাহরণ আউটপুট

Commandline: apt install postgresql-9.5-plv8
Commandline: aptdaemon role='role-install-file' sender=':1.85'
Commandline: apt install task
Commandline: apt autoremove
Commandline: apt install atom
Commandline: apt upgrade
Commandline: apt-get install asciinema
Commandline: apt install iperf3
Commandline: apt upgrade
Commandline: apt-get install chromium-browser
Commandline: apt install joe cpanminus build-essential postgresql libdbd-pg-perl libcrypt-openssl-bignum-perl libcrypt-openssl-rsa-perl libio-socket-ssl-perl libnet-ssleay-perl libssl-dev
Commandline: aptdaemon role='role-commit-packages' sender=':1.2314'
Commandline: apt install git
Commandline: apt install sqlite
Commandline: apt install whois
Commandline: apt install libdbd-pg-perl
Commandline: apt install perl-doc
Commandline: apt upgrade

নিশ্চিত না যে এটি উঠেছে aptitudeকি না। উবুন্টু সফটওয়্যার ডেস্কটপ অ্যাপ্লিকেশন থেকে ইনস্টলগুলি নেওয়া হবে বলে মনে হয় না।


1
বছরের পর বছর ধরে সমস্ত উত্তরগুলির মধ্যে, এটি কেবলমাত্র 18.04 সার্ভারের মধ্যেই আসে।
কোয়ান্টিন স্কাউসেন

20

apt-mark showauto | grep -iE '^foobar$' যদি প্যাকেজটি স্বয়ংক্রিয়ভাবে ইনস্টল করা থাকে তবে "ফুবার" আউটপুট দেবে, অন্যথায় কিছুই নয়।

aptitude search '!~M ~i'যে প্যাকেজগুলি স্বয়ংক্রিয়ভাবে ইনস্টল করা হয়নি তাদের তালিকা তৈরি করবে। এটি একটি দুঃখের বিষয় প্রবণতা 10.10 থেকে শুরু করে উবুন্টু ডেস্কটপে ডিফল্ট ইনস্টলের অংশ হবে না।


aptitude searchসমস্ত প্যাকেজগুলি কেবল ম্যানুয়ালি ইনস্টল করা আছে তা দেখায় না (ওপি যা চেয়েছিল তা আমি ধরে নিয়েছি)
অলি

1
@ অলি: প্রবণতা অনুসন্ধানের নিদর্শনগুলি দেখুন; আমি সেখানে যে প্যাটার্নটি ব্যবহার করছি সেটি ওপি যা চায় ঠিক তা করা উচিত।
লি লো

আমি দৌড়েছি । এটি ইনস্টল করা হয়নি এমন প্যাকেজগুলির পুরো লোড দেখায়।
অলি

7
এর সাথে কিছু ঠিক নেই, আমি ব্যবহার করছি aptitude search '!~M ~i'এবং এটি 1043 প্যাকেজ তালিকাভুক্ত করে। আমি বহু প্যাকেজ ম্যানুয়ালি ইনস্টল করার কোনও উপায় নেই।
ThatGraemeGuy

এটি অবশ্যই অনুরোধ হিসাবে কাজ করে না, পাশাপাশি প্রাক-ইনস্টল করা প্যাকেজগুলি মুদ্রণ করে।
ইরফাই করুন

9

নিম্নলিখিত স্ক্রিপ্টটি এমন সমস্ত প্যাকেজ মুদ্রণ করবে যা স্বয়ংক্রিয়ভাবে ইনস্টল করা হয়নি এবং সুতরাং ম্যানুয়ালি ইনস্টল করা হয়েছিল:

#!/usr/bin/python

try:
    import apt_pkg
except ImportError:
    print "Error importing apt_pkg, is python-apt installed?"
    sys.exit(1)

apt_pkg.init()
STATE_FILE = apt_pkg.config.find_dir("Dir::State") + "extended_states"
auto = set()
tagfile = apt_pkg.TagFile(open(STATE_FILE))
while tagfile.step():
    pkgname = tagfile.section.get("Package")
    autoInst = tagfile.section.get("Auto-Installed")
    if not int(autoInst):
        auto.add(pkgname)
print "\n".join(sorted(auto))

এটি স্বয়ংক্রিয়ভাবে ইনস্টল হওয়া প্যাকেজগুলি কীভাবে এপ-চিহ্ন প্রিন্ট করে তা নির্ভর করে।


আপনি ভাল কাজ স্যার। এটি আসলে স্বীকৃত উত্তরের বিপরীতে কাজ করে।
ইরফাই করুন

আমার জন্য কেবল কয়েকটি প্যাকেজ দেখান --- অবশ্যই সেগুলির অনেকগুলি অনুপস্থিত।
রোমানো

এখানেও, আমি ইনস্টল করার ঠিক পরে ম্যানুয়ালি ইনস্টল করা প্যাকেজগুলি অনুপস্থিত।
ডেভিড লজং ম্যাডিসন

ব্যবহার sys.exit(1)ছাড়াই import sysঅজগরটির নতুন সংস্করণগুলিতে ত্রুটি হতে পারে। হয় হয় import sysবা ব্যবহার exit(1)
ভিডিওনাথ

7

সমস্ত প্যাকেজগুলির তালিকা পেতে (ইনস্টল করা হয়নি, ব্যবহারকারী দ্বারা ইনস্টল করা আছে বা ডিফল্টরূপে ইনস্টল করা হয়েছে, সমস্ত পিপিএতে জুড়ে), aptনিম্নলিখিত পদ্ধতিটি নিয়োগ করে:

apt list [option]

এর জন্য কার্যকর সম্ভাব্য বিকল্পগুলি হ'ল:

--installed সিস্টেমে ইনস্টল করা কেবলমাত্র প্যাকেজগুলি প্রদর্শন করতে (প্রায় ৫০,০০০+ এর মধ্যে)

--manual-installedসরাসরি কমান্ড দ্বারা স্পষ্টভাবে ইনস্টল করা প্যাকেজগুলির তালিকা করতে হয় সরাসরি হয় বা নির্ভরতা হিসাবে।

বিকল্পভাবে, আপনি করতে পারেন:

apt list --manual-installed | grep -F \[installed\] প্যাকেজগুলির তালিকা পেতে যা কেবলমাত্র ব্যবহারকারী কমান্ড এবং কেবলমাত্র তাদের নির্ভরতাগুলির ফলে তৈরি হয়েছিল এবং সংস্করণ এবং আর্কিটেকচার সমর্থিত (x86, x86_64, amd64, সমস্ত, ইত্যাদি) এর মতো অতিরিক্ত তথ্য পেতে


5

যেমনটি বেশ কয়েকটি লোক মন্তব্য করেছেন, অ্যাপ্ট-চিহ্নের শোম্যানুয়ালটি কিছুটা বগি বলে মনে হচ্ছে (এবং আমি এটি বাগ 72২7777৯৯ হিসাবে রিপোর্ট করেছি )। আমি যখন এটি ব্যবহার করছি, এটি আসলে অনেকগুলি স্টাফের প্রতিবেদন করে যা এমনকি / var / lib / apt / विस्तारিত_স্টেটে লগড হয় না (যেখানে এটি সঞ্চিত বলে মনে করা হয়) এবং অ্যাপট-গেট ইনস্টল করা অবস্থায় লগইন করে না / var / lib / এপিটি / এক্সটেন্ডেড_স্টেটস (কেবলমাত্র / var / lib / dpkg / স্থিতিতে)। উপরের txwikinger দ্বারা অজগর স্ক্রিপ্টটি সরাসরি / var / lib / apt / વિસ્તૃત_স্টেটগুলি থেকে আঁকে তবে আপনি যদি আজ এটি ব্যবহার করেন তবে বাক্য গঠনটি কাজ করতে পারে না (আমার সবেমাত্র কুবুন্টু 13.10 দিয়ে ত্রুটি উত্পন্ন করা শুরু করেছে)। আপডেট করা বাক্য গঠনটি হ'ল:

#!/usr/bin/python
import sys

try:
    import apt_pkg
except ImportError:
    print "Error importing apt_pkg, is python-apt installed?"
    sys.exit(1)

apt_pkg.init()
STATE_FILE = apt_pkg.config.find_dir("Dir::State") + "extended_states"
auto = set()
tagfile = apt_pkg.TagFile(open(STATE_FILE))
while tagfile.step():
    pkgname = tagfile.section.get("Package")
    autoInst = tagfile.section.get("Auto-Installed")
    if not int(autoInst):
        auto.add(pkgname)
print "\n".join(sorted(auto))

আমার জন্য এটি 5 টি আইটেমের খুব সংক্ষিপ্ত তালিকা ছিল যা সঠিক বলে মনে হয় না।


1
ব্যবহার sys.exit(1)ছাড়াই import sysঅজগরটির নতুন সংস্করণগুলিতে ত্রুটি হতে পারে। হয় হয় import sysবা ব্যবহার exit(1)
ভিডিওনাথ

4

আমি একটি জিইউআই সমাধান দিতে চাই।

এখানে চিত্র বর্ণনা লিখুন

  1. খোলা Synaptic Package Manager

  2. যাও Status

  3. ক্লিক Installed (manual)

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

দুর্ভাগ্যক্রমে আমি কোনও প্যাকেজ ম্যানুয়ালি বা স্বয়ংক্রিয়ভাবে ইনস্টল হয়েছিল Custom Filtersকিনা তা অনুসন্ধান করার জন্য কোনও বিকল্প খুঁজে পাইনি foobar

যদি প্যাকেজটি অধীন হয় Installedতবে এর অধীনে না থাকে Installed (manual)তবে এটি স্বয়ংক্রিয়ভাবে ইনস্টল হয়ে গেছে। যদি প্যাকেজটি এর অধীনে থাকে Installed (manual)তবে এটি ম্যানুয়ালি ইনস্টল করা হয়েছিল।


2

যদি এপ্রি-কিছু আদেশ ব্যবহার করে কেউ আপনাকে সুন্দর উত্তর না দেয় তবে আপনি এটি হার্ড পদ্ধতিতে করতে পারেন । অ্যাপটি-গেট তার তথ্যগুলিকে / var / lib / অ্যাপ্ট / এক্সটেন্ডেড_স্টেটে সঞ্চয় করে। স্বয়ংক্রিয়ভাবে ইনস্টল হওয়া যে কোনও ফাইল এই ফাইলটিতে যুক্ত করা হবে। আপনি যদি এই ফাইলটিতে ইতিমধ্যে প্যাকেজটি ম্যানুয়ালি ইনস্টল করেন তবে প্যাকেজটি এই ফাইলে থেকে যাবে তবে স্বতঃ ইনস্টলড: দ্বিতীয় লাইনে 0 থাকবে 0 এটি মোছা হয়নি।

দ্রষ্টব্য: প্রত্যাশিত আরও ভাল উত্তরগুলি যা ফাইল প্লেসমেন্টে পরিবর্তনগুলি উপস্থিত হলে সম্ভবত কাজ করবে। ফাইলের অবস্থান সম্পর্কিত তথ্য কার্যকর হলে আমি আমার রাখি।


1
না। আমি লাইফ্রেরিয়াটিকে স্বয়ংক্রিয়ভাবে ইনস্টলড হিসাবে চিহ্নিত করা হয়েছে তা খুঁজে পাওয়ার জন্য সেই ফাইলটি তাত্ক্ষণিকভাবে দেখেছিলাম। আমি একটি করেছি apt-get install lifereaএবং এটি ইনস্টল হয়নি তবে আমি আউটপুট পেয়েছি যা "ম্যানুয়ালি ইনস্টল হিসাবে চিহ্নিত" এর প্রভাব ছিল। এখন লাইফরিয়া ফাইলটিতে রয়েছে, পরের লাইনে একটি এর 0পরিবর্তে একটি রয়েছে 1। এছাড়াও, আপনার নিজের রেজেক্স প্যাটার্নটি " foobar$"কেবলমাত্র পরিবর্তে পরিবর্তন করা উচিত foobar
উমং

সেটা সত্য. আমার দোষ, আমার সিস্টেমে 0 এর সাথে কোনও রেখা নেই তবে এটি বিরল ঘটনা হওয়া উচিত। আমি ঠিক উত্তর ক্ষেত্রে আপডেট।
জাভিয়ের রিভেরা

2

অনেকগুলি গুগল করার পরে, আমি এই স্ক্রিপ্টটি একত্রিত করতে পরিচালিত করেছি। এটি আমার পক্ষে ঠিক কাজ করে:

# List of all packages currently installed
current=$(dpkg -l | awk '{print $2}' | sort | uniq)

# List of all packages that were installed with the system
pre=$(gzip -dc /var/log/installer/initial-status.gz | sed -n 's/^Package: //p' | sort | uniq)

# List of packages that don't depend on any other package
manual=$(apt-mark showmanual | sort | uniq)

# (Current - Pre) ∩ (Manual)
packages=$(comm -12 <(comm -23 <(echo "$current") <(echo "$pre")) <(echo "$manual") )

for pack in $packages; do
    packname=$(echo $pack | cut -f 1 -d ":")
    desc=$(apt-cache search "^$packname$" | sed -E 's/.* - (.*)/\1/')
    date=$(date -r /var/lib/dpkg/info/$pack.list)

    echo "# $desc"
    echo "# $date"
    echo "sudo apt-get install $pack"
    echo -e ""
done

আপনি sort -uপরিবর্তে ব্যবহার করতে পারে sort | unique। যেমন apt-markআর্কিটেকচার প্রদর্শন করে না, সেট অপারেশনগুলির (বা ব্যবহারের dpkg-query -W -f='${Package}\n') আগে আপনার dpkg এর আউটপুট থেকে এটি ছাঁটাই করা উচিত । এছাড়াও, dpkg কিছু প্যাকেজ তালিকাভুক্ত করতে পারে যা বর্তমানে ইনস্টল করা নেই। "ডেস্ক" হিসাবে, আপনি inary dpkg-query -W -f = '# $ {বাইনারি: সংক্ষিপ্তসার} \ n' $ প্যাকটি ব্যবহার করতে পারেন যা দ্রুত।
জার্নো

ওহ, apt-markকিছু প্যাকেজগুলির জন্য আর্কিটেকচার প্রদর্শন করতে পারে তবে এতগুলি জন্য নয় dpkg -l
জার্নো

apt-cache searchধীর. Help.ubuntu.com/commune/ListInstalledPackagesByDate এর মতো আরও কিছু ব্যবহার করে ইনস্টলড তারিখগুলির একটি তালিকা আগে থেকে পাওয়া আরও কার্যকর হতে পারে
অপ্টিসাইক্লিক

1

লি লো যেমন বলেছেন, apt-mark showautoআপনার নিজেরাই স্বয়ংক্রিয়ভাবে ইনস্টল হওয়া জিনিসের একটি চর্বিযুক্ত তালিকা পাওয়া উচিত।

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

দ্রষ্টব্য: আপনি আপনার সমস্ত বন্ধুকে বিশাল ব্যাশ কমান্ড খুঁজে বের করতে কতটা শীতল দেখবেন তা এটি আরও চিত্রণ।

comm -3  <(dpkg-query --show -f '${Package} ${Status}\n' | \n
grep "install ok installed" | cut --delimiter=' ' -f 1) <(apt-mark showauto)

পাঠযোগ্যতার জন্য আমি দুটি লাইনে এটি ভেঙে দিয়েছি। এটি কি করে?

  • প্রথমে ইনস্টল করা প্যাকেজগুলির তালিকার জন্য আমরা dpkg অনুসন্ধান করি।
  • প্রকৃতপক্ষে ইনস্টল হওয়াগুলির জন্য আমরা ফিল্টার করি (কেবল অবশিষ্টাংশগুলিই নয়)
  • আমরা স্থিতি কেটে ফেলি
  • আমরা সেই তালিকাটি স্বয়ংক্রিয় তালিকা থেকে তুলনা করি apt-mark
  • আমরা পারব কারণ আমরা পারব।

আমি এটি সঠিক বলে সন্দেহ করি, যেহেতু dpkg প্রায়শই ইনস্টল করা হয়নি এমন প্যাকেজগুলি দেখায়
txwikinger

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

comm -3 <(dpkg -l | grep '^ii' | cut -d \ -f 3|sort) <(apt-mark showauto|sort)যথাযথভাবে উন্নত;)
লাসেপলসেন

-1

এটি ম্যানুয়ালি ইনস্টল করা সমস্ত প্যাকেজ তালিকাভুক্ত করবে: নির্ভরতা, আনইনস্টল প্যাকেজগুলি, সিস্টেম ইনস্টলেশনের সময় ইনস্টল হওয়া প্যাকেজগুলি।

unopts() {
  in=`cat`
  echo "$in" | sed -r 's/ --[^ ]+//g;s/ -[^ ]+//g'
}

list() {
  cat '/var/log/apt/history.log' |
  grep --color=never -v '\-o APT::Status-Fd=4 \-o APT::Keep-Fds::=5 \-o APT::Keep-Fds::=6' |
  egrep --color=never "Commandline: apt-get.* $1" |
  sed -r "s/Commandline: apt-get//;s/ $1//" |
  unopts |
  tr ' ' '\n' |
  sed '/^$/d'
}

hapt() {
  tmp=`mktemp -d`
  installed=$tmp/installed
  deleted=$tmp/deleted
  dpkg=$tmp/dpkg
  list 'install' > $installed
  list '(remove|purge|autoremove)' > $deleted
  dpkg --get-selections |
  grep -v 'deinstall' |
  cut -f 1 > $dpkg
  while read package
  do
    sed -i "0,/$package/{//d;}" $installed
  done < $deleted
  while read package
  do
    if [ -z "`grep --color=never "^$package$" $dpkg`" ]
    then
      sed -i "0,/$package/{//d;}" $installed
    fi
  done < $installed
  cat $installed
  rm -r $tmp
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.