সুস্পষ্টভাবে ইনস্টল করা প্যাকেজগুলির তালিকা দিন


53

জেন্টুতে এমন ফাইল /var/lib/portage/worldরয়েছে যা প্যাকেজগুলি ধারণ করে যা আমি স্পষ্টভাবে ইনস্টল করেছি। সুস্পষ্টভাবে আমার অর্থ, প্যাকেজগুলি যা আমি বেছে নিই, ডিফল্টরূপে ইনস্টল হওয়া কোনও কিছুই অন্তর্ভুক্ত না করে বা নির্ভরতাগুলি দ্বারা টানা হয়।

উবুন্টুতে সেই তথ্যটি খুঁজে পাওয়ার জন্য অনুরূপ ফাইল বা আদেশ আছে কি?

উত্তর:


46

শুধু কোড

aptitude search '~i !~M' -F '%p' --disable-columns | sort -u > currentlyinstalled.txt
wget -qO - http://mirror.pnl.gov/releases/precise/ubuntu-12.04.3-desktop-amd64.manifest \
  | cut -f1 | sort -u > defaultinstalled.txt
comm -23 currentlyinstalled.txt defaultinstalled.txt

ব্যাখ্যা

এই সমস্যাটি সম্পর্কে ভাবার একটি উপায় হ'ল এটিকে তিন ভাগে বিভক্ত করা:

  • নির্ভরতা হিসাবে ইনস্টল করা প্যাকেজগুলির তালিকা কীভাবে পাব?
  • আমি কীভাবে ডিফল্টরূপে ইনস্টল হওয়া প্যাকেজগুলির একটি তালিকা পেতে পারি?
  • এই দুটি তালিকার মধ্যে আমি কীভাবে পার্থক্য পেতে পারি?

নির্ভরতা হিসাবে ইনস্টল করা প্যাকেজগুলির তালিকা কীভাবে পাব?

নিম্নলিখিত কমান্ডটি আমার সিস্টেমে কাজ করে বলে মনে হচ্ছে:

$ aptitude search '~i !~M' -F '%p' --disable-columns | sort -u > currentlyinstalled.txt

গিলস প্রশ্নের মন্তব্য হিসাবে পোস্ট করা লিঙ্কগুলিতে অনুরূপ পন্থাগুলি পাওয়া যাবে। কিছু সূত্র দাবি করে যে এটি কেবল তখনই কাজ করবে যদি আপনি প্যাকেজগুলি ইনস্টল করার জন্য প্রবণতা ব্যবহার করেন; যাইহোক, আমি প্যাকেজগুলি ইনস্টল করার জন্য প্রায়শই কখনও প্রবণতা ব্যবহার করি না এবং এটি এখনও কার্যকর হয়েছে found --disable-columnsপ্রতিরোধ ঐ খালি যে তুলনা নিচের রোধ করা যাবে সাথে প্যাকেজ নামের প্যাডিং লাইন থেকে অ্যাপটিচিউড। | sort -uপ্রকারের ফাইল এবং সদৃশ সরিয়ে ফেলা হয়। এটি চূড়ান্ত পদক্ষেপটি আরও সহজ করে তোলে।

আমি কীভাবে ডিফল্টরূপে ইনস্টল হওয়া প্যাকেজগুলির একটি তালিকা পেতে পারি?

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

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

$ apt-cache depends ubuntu-desktop ubuntu-minimal ubuntu-standard linux-* | awk '/Depends:/ {print $2}' | sort -u

এটি মনে করে এমন কিছু প্যাকেজ ছেড়ে গেছে যা আমি জানি ডিফল্টরূপে আসতে হয়েছিল। আমি এখনও বিশ্বাস করি যে কেউ যদি মেটাপ্যাকেজগুলির সঠিক তালিকা তৈরি করে তবে এই পদ্ধতিটি কাজ করা উচিত।

তবে, মনে হয় উবুন্টু মিররগুলিতে একটি "ম্যানিফেস্ট" ফাইল থাকে যা ডিফল্ট ইনস্টলের সমস্ত প্যাকেজ ধারণ করে। উবুন্টু 12.04.3 এর জন্য ম্যানিফেস্টটি এখানে রয়েছে:

http://mirror.pnl.gov/releases/precise/ubuntu-12.04.3-desktop-amd64.manifest

যদি আপনি এই পৃষ্ঠাটি (বা আপনার কাছাকাছি একটি আয়না পৃষ্ঠা) অনুসন্ধান করেন:

http://mirror.pnl.gov/releases/precise/

আপনার ব্যবহার করা সংস্করণ এবং আর্কিটেকচারের সাথে মিলে যায় এমন "। ম্যানিফেস্ট" ফাইলটি সন্ধান করা উচিত। কেবলমাত্র প্যাকেজের নামগুলি বের করতে আমি এটি করেছি:

wget -qO - http://mirror.pnl.gov/releases/precise/ubuntu-12.04.3-desktop-amd64.manifest | cut -f1 | sort -u > defaultinstalled.txt

তালিকাটি সম্ভবত ইতিমধ্যে বাছাই করা হয়েছে এবং অনন্য ছিল, তবে আমি নিশ্চিত হতে চেয়েছিলাম যে পরবর্তী পদক্ষেপটি আরও সহজ করার জন্য এটি সঠিকভাবে সাজানো হয়েছে। আমি তখন আউটপুটটি ভিতরে রাখি defaultinstalled.txt

এই দুটি তালিকার মধ্যে আমি কীভাবে পার্থক্য পেতে পারি?

এটি ইউনিক্সের মতো বেশিরভাগ সিস্টেমে এটি করার জন্য অনেক সরঞ্জাম রয়েছে বলে এটি সবচেয়ে সহজ অংশ। commটুল এই কাজ করতে অনেক উপায় এগুলির মধ্যে একটি:

comm -23 currentlyinstalled.txt defaultinstalled.txt

এটি প্রথম ফাইলের জন্য স্বতন্ত্র লাইনের তালিকা মুদ্রণ করা উচিত। সুতরাং, এটি ইনস্টল করা প্যাকেজগুলির একটি তালিকা মুদ্রণ করা উচিত ডিফল্ট ইনস্টল নয়।


আপনার প্রথম পাইপলাইনটি কী করে aptitude search '~i!~M' -F %pনা?
প্রাক্তন

@ ফেফিয়েন্ট: সম্ভবত কিছুই নয়। প্রবণতা সম্পর্কে আমি বেশি কিছু জানি না এবং এইভাবে ব্যবহৃত সরঞ্জামগুলি আমি কখনই ব্যবহার করি না এমন কোনও প্রোগ্রামের ম্যান ফাইলের আশেপাশে খনন করার চেয়ে আমি পরিচিত।
স্টিভেন ডি

1
আপনি আমার আশা বিনষ্ট করুন, আমি ভেবেছিলাম কিছু সহজ উপায় আছে :(
ফোনেহেহে

3
এটি প্রায় কাজ করে, তবে এখনও সঠিক নয়। এমন একাধিক প্যাকেজ এবং লাইব্রেরি রয়েছে যা আমি অবশ্যই ফলাফলের তালিকায় থাকা ম্যানুয়ালি ইনস্টল করি নি। আমি ব্যবহার করেছি http://releases.ubuntu.com/releases/trusty/ubuntu-14.04-desktop-amd64.manifestএবং অতিরিক্ত | sed "s/ *$//"কিন্তু এখনও কোন পাশা।
jmiserez

1
নির্ভরতা হিসাবে ইনস্টল করা হয়নি এমন প্যাকেজগুলির একটি তালিকা পায় এমন প্রথম পদক্ষেপটি apt-mark showmanual | sort -uঅন্যান্য উত্তরে যেমন দেখানো হয়েছে তেমন করে প্রতিস্থাপন করা যেতে পারে । সাধারণ, এবং নির্ভর করে না aptitudeযা ডিফল্টরূপে ইনস্টল করা হয় না।
স্কেজডাল

24

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

ব্যবহার 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)

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

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। আরও প্যাকেজগুলি ম্যানুয়ালি ইনস্টল করা না থাকলেও প্রদর্শিত হয় they
  • এর apt-mark showautoপরিবর্তে ব্যবহার করা হচ্ছে /var/log/installer/initial-status.gzapt-markউদাহরণস্বরূপ, xserver-xorg প্যাকেজটি অন্তর্ভুক্ত নয়, যখন অন্য ফাইলটি করে।

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


আপনার প্রাথমিক ইনস্টল হওয়ার পরে যদি আপনি আপনার সিস্টেমটিকে আপগ্রেড করেন (যা বেশিরভাগ লোকের ক্ষেত্রে আমি মনে করি) তবে আপনার বর্তমান উবুন্টু প্রকাশ সংস্করণে ম্যানিফেস্ট ফাইলটি ব্যবহার করা ভাল।
দিয়েগো ভি

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

আমি অভিভূত! আমি অবশ্য একটি অনুপস্থিত টুকরো পেয়েছি। প্রথমে ইনস্টল করা প্যাকেজগুলির সম্পর্কে কী তবে স্পষ্টভাবে ম্যানুয়ালি সরানো হয়েছে , তবে পরে স্পষ্টতই ম্যানুয়ালি পুনরায় ইনস্টল করা হয়েছে ? আমি এটি একটি ওয়ার্কিং সিস্টেমে পেয়েছি।
n611x007


1
এই গৃহীত সমাধান চেয়ে ভাল, যেহেতু mirror.pnl.gov/releases/precise/... গৃহীত সমাধান URL টি 404. একটি এখন
rmunn

9

মতে man apt-mark:

apt-mark showauto
apt-mark showmanual

2
showmanualএটি এমন জিনিস দেখায় xserver-xorg-video-vesaযা আমি কসম খায় যে আমি ম্যানুয়ালি ইনস্টল করি নি।
ফুনেহে

আপনার ডিস্ট্রো দ্বারা প্রথম ইনস্টলে সম্ভবত স্বয়ংক্রিয়ভাবে ইনস্টল।
ম্যাট

8

এখানে কিছু নমুনা আউটপুট cat /var/log/apt/history.log:

Start-Date: 2011-01-22  00:43:38
Commandline: apt-get --target-release experimental install libdbus-1-dev
Upgrade: libdbus-1-3:i386 (1.4.0-1, 1.4.1-1), libdbus-1-dev:i386 (1.4.0-1, 1.4.1-1)
End-Date: 2011-01-22  00:43:48

Start-Date: 2011-01-23  01:16:13
Commandline: apt-get --auto-remove purge webcheck
Purge: python-utidylib:i386 (0.2-6), python-beautifulsoup:i386 (3.1.0.1-2), libtidy-0.99-0:i386 (20091223cvs-1), webcheck:i386 (1.10.3)
End-Date: 2011-01-23  01:16:31

আপনার প্রশ্নের হিসাবে, গ্রেপ ( cat /var/log/apt/history.log | grep Commandline) দিয়ে স্টাফগুলি ফিল্টার করুন ।

নোট করুন যে এই ফাইলগুলি ঘোরানো হয়েছে, তাই অন্যদের জন্য পরীক্ষা করুন যাতে আপনি কোনও কিছুই মিস করেন না:

$ ls /var/log/apt/history.log*
-rw-r--r-- 1 root root 69120 2011-01-23 18:58 /var/log/apt/history.log
-rw-r--r-- 1 root root 19594 2011-01-01 02:48 /var/log/apt/history.log.1.gz

দ্রষ্টব্য :

  • আমি উভয় প্রবণতা এবং সিনাপটিক ( যথাক্রমে 0.70 এবং 0.6.3 সংস্করণ ) পরীক্ষা করে দেখেছি এবং তারা উভয়ই তাদের লগ ফাইলটিতে তাদের ক্রিয়াকলাপ লগ করেছে। তাদের সাথে একটি ধাক্কা হ'ল তাদের সাথে শুরু করা লাইন নেই Commandline, সুতরাং grepকৌশলটি তাদের সাথে কাজ করবে না।

2
আকর্ষণীয় সমাধান। আপনাকে কেবল প্যাকেজগুলির তালিকা পেতে aptitudeএবং অন্যান্য প্যাকেজ পরিচালকদের দ্বারা ইনস্টল হওয়া প্যাকেজগুলির জন্য অ্যাকাউন্ট করতে গ্রেপ কমান্ডটি কিছুটা সামঞ্জস্য করতে হবে । যদি আপনার লগগুলি ঘুরে যায় তবে ভাল তবে আপনি ভাগ্য থেকে দূরে।
স্টিভেন ডি

@ স্টিভেন আপডেট হয়েছে। আমার গ্রেপ-ফু একজন নবজাতকের, তাই আমি এটি পাঠকের কাছে রেখে দেব। এছাড়াও, জিনিসটি দূরে ঘুরে গেছে কিনা তা আমি জানি না। আমাকে কেবল সেখানে ফাইল করতে হবে।
tshepang

সেগুলি ঘুরে বেড়াচ্ছে কিনা তা আপনার লোগ্রোটেট সেটআপ এবং আপনার সিস্টেমটি কত দিন ধরে রয়েছে তার উপর নির্ভর করবে। আমি উবুন্টু ডিফল্ট সম্পর্কে নিশ্চিত নই যেহেতু আমি তাদের পরিবর্তন করেছি দীর্ঘ সময় হয়ে গেছে।
স্টিভেন ডি

7

আমি এই ক্যোয়ারীটি অনুসন্ধান করার সময় আমি এই সুন্দর অনেলাইনার জুড়ে এসেছি

এক লাইনার হয়

comm -13 \
  <(gzip -dc /var/log/installer/initial-status.gz | sed -n 's/^Package: //p' | sort) \
  <(comm -23 \
    <(dpkg-query -W -f='${Package}\n' | sed 1d | sort) \
    <(apt-mark showauto | sort) \
  )`

এই অনলাইনার লগগুলি ব্যবহার করে সিস্টেম দ্বারা ইনস্টল হওয়া প্যাকেজগুলি ফিল্টার করে /var/log/installer/initial-status.gz

আমি যখন খুঁজে পেয়েছি তখন মূল থ্রেডের লিঙ্কটি পোস্ট করব, কারণ এই অনেলাইনারটি আমার নয় এবং আমি এটি কোথায় দেখলাম মনে করতে পারছি না।


3

আপনি এই নিবন্ধটি একবার দেখতে চান ।

নিবন্ধের শেষে, একটি অজগর স্ক্রিপ্ট রয়েছে যা আপনার যা করা উচিত তা করা উচিত।

এটি (কে) উবুন্টুর জন্য লেখা হয়েছিল । তবে উবুন্টু পাশাপাশি কাজ করা উচিত ।


3
লিঙ্কটি আর কাজ করবে বলে মনে হচ্ছে না।
Rog

2
এগুলির মতো ভাঙা লিঙ্কগুলি কেন আপনার উত্তরে প্রাসঙ্গিক তথ্য অন্তর্ভুক্ত করা গুরুত্বপূর্ণ।
হোয়াইটহ্যাট 101

2

নীচে স্টিভেন ডি এর উত্তর যোগ করা হয়েছে

নিম্নলিখিত লাইনটি 32 টি অক্ষরে প্যাকেজের নামগুলি কাটাচ্ছে বলে মনে হচ্ছে:

aptitude search '~i !~M' | cut -d" " -f4 | sort -u > currentlyinstalled.txt

এটি কাজ করে বলে মনে হচ্ছে:

aptitude search '~i !~M' -F "%p" > sort -u > currentlyinstalled.txt

দেখতে এই উত্তর


1

চেক আউট /var/log/apt/term.log


2
জিনিসগুলি করার এটি একটি বেদনাদায়ক উপায়, এবং আমি নিজেরাই ইনস্টল করা প্যাকেজগুলির মধ্যে কোনও পার্থক্য নেই, এবং নির্ভরতা দ্বারা টানা যারা
phunehehe

আমি সম্মত, তবে আমি জানতাম না যে উপযুক্ত ব্যক্তিরা
সেগুলির খোঁজ

1

আপনি ফাইলটিও দেখতে পারেন /var/lib/apt/extended_states

cat /var/lib/apt/extended_states | grep -B2 'Auto-Installed: 0'

পুরানো পার্টিশনে কোনটি ইনস্টল করা হয়েছে তা জানতে চাইলে এটি দরকারী।


0

যারা একটি স্ক্রিপ্টের সেই মণি নিয়ে এসেছেন তাদের জন্য অনেক ধন্যবাদ এবং অভিনন্দন !!!
আমি আমার 2 add যোগ করতে চেয়েছিলাম এবং আমি ইনস্টলেশন তারিখটি তথ্য থেকে হ্রাস করেছি।
আমি কেন $ তথ্য ফাইল আপডেট করা হয় বা কখন এবং কখন হয় তা বিশদটি আয়ত্ত করতে পারি নি, তবে এটি বাস্তবে কার্যকর হয়।
আমার স্ক্রিপ্ট ইনস্টলেশনের পরে যুক্ত অ নির্ভরতা প্যাকেজগুলির সর্বশেষ আপডেটগুলি তালিকাভুক্ত করে।
এটি পর্যায়ক্রমিক চেক দিচ্ছি, আমি দেখছিলাম যে কোনও একক মিস ছাড়া আমি ম্যানুয়ালি কীভাবে লগ করব।
যে, প্যাকেট ব্যাচ একই কারণে ইনস্টল করা। দুর্ভাগ্যক্রমে, আপডেটগুলি সেই আদেশটি ভঙ্গ করে।
একটি সিস্টেম আপগ্রেড করার পরে, আমার আমার যুক্ত হওয়া প্যাকেজগুলির একটি তালিকা ছিল যা আপগ্রেড আপডেট হয় না এবং তারপরে এটিগুলি করে।
ঝরঝরে! উপভোগ করুন।

info='/var/lib/dpkg/info/'

comm -13 > /tmp/packages \
  <(gzip -dc /var/log/installer/initial-status.gz | sed -n 's/^Package: //p' | sort) \
  <(comm -23 \
    <(dpkg-query -W -f='${Package}\n' | sed 1d | sort) \
    <(apt-mark showauto | sort) \
  )

while read n; do
  echo $(ls -ltr --time-style=long-iso $info$n.* $info$n:i386.* $info$n:amd64.* 2>/dev/null \
    | tail -n 1 | perl -pe 's/.*([0-9]{4}?-.*:[0-9]{2}?).*/\1/') $n
done < /tmp/packages | sort
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.