উপলব্ধ আপডেটগুলি তালিকাবদ্ধ করুন তবে সেগুলি ইনস্টল করবেন না


208

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

উত্তর:


231

কার্যক্ষম

আধুনিক সংস্করণগুলির aptজন্য এটির জন্য একটি নির্দিষ্ট সুইচ রয়েছে:

apt list --upgradable

apt-get

পুরানো apt-getকমান্ডের জন্য -uস্যুইচ প্যাকেজগুলির তালিকা প্রদর্শন করে যা আপগ্রেডের জন্য উপলব্ধ:

# apt-get -u upgrade --assume-no

থেকে apt-getman পৃষ্ঠা :

-u
-
 শো -আপগ্রেড করা আপগ্রেড প্যাকেজগুলি প্রদর্শন করুন; আপগ্রেড করা সমস্ত প্যাকেজগুলির একটি তালিকা মুদ্রণ করুন। কনফিগারেশন আইটেম: এপিটি :: পান :: শো আপগ্রেড করা।
--assume-no  স্বয়ংক্রিয়ভাবে সমস্ত প্রম্পটে "না" <== এটিকে ইনস্টল করা শুরু করা থেকে বিরত রাখতে

2
আমি আশা করছিলাম যে শিকড় ছাড়াই এটি করা যায়
থারস্মমনার

19
আপনি যদি "Y" টাইপ করেন এবং এন্টার টিপেন, এই আদেশটি আপডেটগুলি ইনস্টল করবে । আমি অবশ্যই "-s" যুক্ত করার পরামর্শ দেব, অন্যথায় এই উত্তরটি বিভ্রান্তিকর
মুরমেল

5
এটি একটি খুব ভুল উত্তর কারণ (অতিরিক্ত বিকল্প ছাড়াই) কমান্ডটি ইনপুটটির জন্য অপেক্ষা করে এবং ব্যবহারকারী যদি ভুল ইনপুট প্রবেশ করে, প্যাকেজটি ইনস্টল করা হবে, যা সিস্টেমটি পরিবর্তন করে যা ওপি চায় না (কেবল আমার সিস্টেমে ঘটেছিল)
ড্যানিয়েল অ্যাল্ডার

এবং বিটিডব্লিউ: -uএকটি ডিফল্ট বিকল্পapt-get
ড্যানিয়েল অল্ডার

1
@ থারস্মমনার '-s' আপনি যা চাইবেন এবং মূল ছাড়াই কাজ করবেন
নেভালিস

67
apt-get --just-print upgrade

সহজেই পড়া হয় না, নীচে অ্যাপল-গেটের আউটপুট পার্স করার জন্য পার্ল ওয়ান লাইনার দেওয়া আছে:

apt-get --just-print upgrade 2>&1 | perl -ne 'if (/Inst\s([\w,\-,\d,\.,~,:,\+]+)\s\[([\w,\-,\d,\.,~,:,\+]+)\]\s\(([\w,\-,\d,\.,~,:,\+]+)\)? /i) {print "PROGRAM: $1 INSTALLED: $2 AVAILABLE: $3\n"}'

এটির মতো কিছু আউটপুট করা উচিত:

PROGRAM: grub-pc INSTALLED: 1.99-21ubuntu3.1 AVAILABLE: 1.99-21ubuntu3.9

আশা করি এটি অন্য কাউকে সহায়তা করবে,


1
শুধু হাসির জন্য: অ্যাপট-গেট-এস আপগ্রেড | awk -F '[] [()] +' '/ ^ Inst / {printf "প্রোগ্রাম:% s \ tcur:% s \ টাওয়াইল:% s \ n", $ 2, $ 3, $ 4}'
টিঙ্ক

8
এটি আরও বেশি সুন্দর লাগতে পারে, যদি columnapt-get --just-print upgrade 2>&1 | perl -ne 'if (/Inst\s([\w,\-,\d,\.,~,:,\+]+)\s\[([\w,\-,\d,\.,~,:,\+]+)\]\s\(([\w,\-,\d,\.,~,:,\+]+)\)? /i) {print "PROGRAM: $1 INSTALLED: $2 AVAILABLE: $3\n"}' | column -s " " -t
এটির

1
অ্যান্টোনিওকে দুর্দান্ত দেখাচ্ছে!
নিক

1
আমি আশঙ্কা করছি এই পার্ল-কোডটি আমার মেশিনটি হ্যাক করবে ...;)
ক্রিস

33

এনজোটিব দ্বারা অনুপ্রাণিত আরেকটি বিকল্প:

aptitude search '~U' | wc -l

এই কমান্ডটি নতুন প্যাকেজগুলি আউটপুট দেওয়ার জন্য প্রবণতা ব্যবহার করবে এবং তারপরে কেবল লাইনগুলি গণনা করবে c

একপাশে, আমি দেখতে পেলাম যে এনজোটিবের সমাধানটি around ইউ এর আশেপাশের একক উদ্ধৃতি ছাড়া আমার পক্ষে কাজ করে না। (হুইজি, জেডএসএইচ, প্রবণতা 0.6.8.2)

হালনাগাদ :

নতুন অ্যাপের সাহায্যে আপনি এখন এটি করতে পারেন:

apt list --upgradable

এই জন্য ধন্যবাদ, apt তালিকা কমান্ড ঠিক আমি চেয়েছিলেন কি ছিল।
ডিভোরাক

এই সমাধানটির সাথে দুর্দান্ত এটি হ'ল আপনার sudo / রুটের দরকার নেই।
গুনি

25

সবচেয়ে সহজ:

apt list --upgradable

পুদিনা উপর কাজ করে না।
ychaouche

1
এটি লজ্জাজনক যে এটি আপগ্রেড উপলব্ধ কিনা তা নির্ভর করে বিভিন্ন প্রস্থান কোড ফেরত দেয় না। এটি কোনও স্ক্রিপ্টে ব্যবহার করতে সক্ষম হলে ভাল হত।
ডেল অ্যান্ডারসন

18

আপনি চালাতে পারেন

aptitude -F%p --disable-columns search ~U

বা অনিবন্ধিত

/usr/lib/update-notifier/apt-check -p; echo

apt-getসিমুলেশন ব্যবহার করে অন্য একটি পদ্ধতি :

apt-get -s dist-upgrade | awk '/^Inst/ { print $2 }'

1
এই প্রবণতা কমান্ডটি আমার পক্ষে দুর্দান্ত কাজ করেছে এবং রুটের প্রয়োজন
পড়েনি

অ্যাপ
গেট-

ধন্যবাদ! এটি বেশ কিছুটা নির্ভরশীলতা থেকে বেরিয়ে এসেছে hell dist-upgradeব্যবহার করার জন্য প্রয়োজনীয় কিছু প্যাকেজ হারাতে চেষ্টা করছিল না aptitudeaptitude install $(apt-get -s dist-upgrade | awk '/^Inst/ { print $2 }')কৌতুকটি করেছে!
জেইন

11

"অ্যাপটিক্রন" প্যাকেজটি একবার দেখুন:

apticron - মুলতুবি প্যাকেজ আপডেটগুলি সম্পর্কে মেল করার সহজ সরঞ্জাম

অ্যাপটিক্রন হ'ল একটি সহজ স্ক্রিপ্ট যা মুলতুবি প্যাকেজ আপডেট যেমন দৈনিক ইমেলগুলি যেমন সুরক্ষা আপডেটগুলি, সঠিকভাবে প্যাকেজগুলি হ'ল বিচ্ছিন্ন এবং প্রবণতা দ্বারা হ্যান্ডেলগুলি প্রেরণ করে।

https://packages.debian.org/buster/apticron


আপনার লিঙ্কটি নষ্ট হয়েছে ...
অ্যালেক্সিস উইলক

10
apt-get update && apt-get -s upgrade

আসলে ইনস্টল না করে উপলভ্য আপডেটগুলি তালিকাভুক্ত করবে।

সিমুলেটেড (এভাবে -s) আপগ্রেড হওয়ার আগে প্রথম কমান্ড প্যাকেজ সূচক ফাইল আপডেট করে। "-s" প্যাকেটগুলি ইনস্টল করা হবে যা প্রকৃতপক্ষে কিছু ইনস্টল করবে না এমন একটি অনুকরণীয় আপগ্রেড করবে।

বিপরীতে "-u" পরিবর্তে "-s" নিশ্চিত হওয়ার পরে ইনস্টল হবে।


2
সিমুলেট বিকল্পটি যে কোনওটির সাথে ট্রিগার করা যায় -s, --simulate, --just-print, --dry-run, --recon, --no-act, পুনরায় এবং ড্রাই-ড্রাই আমার ব্যক্তিগত পছন্দ favorites
থারস্মমনার

9

আমার সম্ভাব্য আপগ্রেডগুলির পুরো সংস্করণ তথ্য দরকার ছিল, তাই আমি জেসনওয়ারিয়ান এর উত্তরের একটি পরিবর্তন ব্যবহার করেছি:

apt-get -V -u upgrade

এটি সহজ এবং আইএমও যুক্তিসঙ্গত ফর্ম্যাট করা আউটপুট।


3

শুধু এর আউটপুট ফিল্টার

apt-get update && apt-get -s -V -u upgrade

আপনার লগ শুধুমাত্র পছন্দসই তথ্য আছে।

সম্ভবত, লাইনের পরে আপনার সুন্দর অংশটি প্রয়োজন হবে

...

নিম্নলিখিত প্যাকেজগুলি আপগ্রেড করা হবে:

...

যার শুরুতে খুব কম জায়গা আছে।


হাই এবং সাইটে আপনাকে স্বাগতম। যেমনটি দাঁড়িয়েছে, আপনার উত্তরটি মূলত বিদ্যমান বিদ্যমানগুলির পুনঃস্থাপন এবং তাই নতুন কিছু যুক্ত করে না। আপনি এটা দ্বারা উন্নতি করতে পারে, উদাহরণস্বরূপ, আউটপুট কিভাবে ফিল্টার করবেন ব্যাখ্যা, কি বিভিন্ন সুইচ ইত্যাদি না একটি ব্যাখ্যা যোগ
terdon

2

এই উত্তর দ্বারা অনুপ্রাণিত, অন্য অন-লাইনার জেট করুন :

function a { read input;dpkg -l ${input} | grep " ${input} " | awk '{$1=$2=$3=$4="";print $0}' | sed 's/^ *//';unset input;};{ apt-get --just-print upgrade 2>&1 | perl -ne 'if (/Inst\s([\w,\-,\d,\.,~,:,\+]+)\s\[([\w,\-,\d,\.,~,:,\+]+)\]\s\(([\w,\-,\d,\.,~,:,\+]+)\)? /i) {print "$1 (\e[1;34m$2\e[0m -> \e[1;32m$3\e[0m)\n"}';} | while read -r line; do echo -en "$line $(echo $line | awk '{print $1}' | a )\n"; done;

আউটপুটটি (রঙিন) এর মতো দেখাচ্ছে:

locales (2.13-38+deb7u7 -> 2.13-38+deb7u8) Embedded GNU C Library: National Language (locale) data [support]
linux-headers-3.2.0-4-amd64 (3.2.65-1+deb7u1 -> 3.2.65-1+deb7u2) Header files for Linux 3.2.0-4-amd64
linux-headers-3.2.0-4-common (3.2.65-1+deb7u1 -> 3.2.65-1+deb7u2) Common header files for Linux 3.2.0-4
sudo (1.8.5p2-1+nmu1 -> 1.8.5p2-1+nmu2) Provide limited super user privileges to specific users

আপনি যদি না চান তবে সংক্ষিপ্ত বিবরণটি এটি ব্যবহার করুন:

{ apt-get --just-print upgrade 2>&1 | perl -ne 'if (/Inst\s([\w,\-,\d,\.,~,:,\+]+)\s\[([\w,\-,\d,\.,~,:,\+]+)\]\s\(([\w,\-,\d,\.,~,:,\+]+)\)? /i) {print "$1 (\e[1;34m$2\e[0m -> \e[1;32m$3\e[0m)\n"}';} | while read -r line; do echo -en "$line\n"; done;

আউটপুট:

locales (2.13-38+deb7u7 -> 2.13-38+deb7u8)
linux-headers-3.2.0-4-amd64 (3.2.65-1+deb7u1 -> 3.2.65-1+deb7u2)
linux-headers-3.2.0-4-common (3.2.65-1+deb7u1 -> 3.2.65-1+deb7u2)
sudo (1.8.5p2-1+nmu1 -> 1.8.5p2-1+nmu2)

একটি লাইনার চমত্কার, এটি কিছু প্যাকেজের বিবরণ আউটপুট দেয় না।
ychaouche

2
apt-get update > /dev/null && apt-get --just-print upgrade | grep "Inst "

ক্রোন ইমেলগুলির জন্য সবচেয়ে সহজ; কোনও ব্যবহারকারীর পুনরাবৃত্তি নেই, এবং আপডেট না হলে কোনও আউটপুট পাওয়া যায় না।


1

@ জেসনওয়ারিয়ান এর উত্তরে সতর্কতা লেখার পরে, আমি আমার নিজস্ব সমাধান দিতে চাই:

apt-get dist-upgrade --assume-no

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

apt-get dist-upgrade </dev/null

অবশেষে, আমি আউটপুট পুনরায় ফর্ম্যাট করতে চেয়েছিলাম। আমি আবার কলটি পরিবর্তন করা বেছে নিয়েছি ( --dry-runসমস্ত অতিরিক্ত আউটপুট ব্যবহার করে তবে তা উপেক্ষা করছি) কারণ এটি আরও সুরক্ষিত বোধ করে:

apt-get --dry-run dist-upgrade | awk '
BEGIN{p=0}
/^The/{p=1;t=$0}
/no longer required/{p=0}
#optional: /been kept back/{p=0}
p && t{print t;t=""}
/^  / && p{print $0}
'

রিটার্নস:

The following packages have been kept back:
  iproute
The following packages will be upgraded:
  unzip

1

apt-check সম্ভবত সবচেয়ে দক্ষ স্ক্রিপ্টিং পদ্ধতি।

/usr/lib/update-notifier/apt-check 2>&1 | cut -d ';' -f 1

খুব ছোট একটি পরিবর্তন আপনাকে কেবলমাত্র সুরক্ষা আপডেট দেখায়।

/usr/lib/update-notifier/apt-check 2>&1 | cut -d ';' -f 2

0

প্রকরণ হিসাবে আমি নিম্নলিখিতটি ব্যবহার করি:

apt-get -V -s dist-upgrade \
    |grep -E "^   .*=>.*" \
    |awk 'BEGIN {
        ul=sprintf("%*s",40,""); gsub(/ /,"-",ul);
        printf "%-30s %-30s %-30s\n", "Package", "Installed", "Available";
        printf "%-30.30s %-30.30s %-30.30s\n", ul, ul, ul;
     }
     {
        printf "%-30s %-30s %-30s\n",
               $1,
               substr($2,2),
               substr($4,1,length($4)-1)
     }'

এটিকে নামের স্ক্রিপ্টে আটকে দিন এবং apt-updatesতারপরে apt-updatesব্যবহারকারী নির্বিশেষে সমস্ত আপডেটের তালিকা পেতে কল করতে পারেন।

আপনার এখনও apt-get updateসুবিধাযুক্ত অ্যাক্সেস সহ কল করার দরকার নেই ।


আউটপুট কেবল প্যাকেজের নাম (প্রথম কলাম) দেখায়, দ্বিতীয় কলাম সর্বদা "=" প্রিন্ট করে এবং তৃতীয় কলামটি সর্বদা খালি থাকে। আমি পুদিনায় আছি
ychaouche

0

আছে apt-show-versionsহাতিয়ার। চালিত উপলভ্য আপডেটগুলি দেখানোর জন্য:

apt-show-versions -u

0

আমি এটি ব্যবহার করতে চাই:

apt-get -qq update && apt-get -qq -s upgrade

আপনি এটির মতো একটি আউটপুট পাবেন:

Inst linux-base [3.5] (4.5~deb8u1 Debian-Security:8/oldstable [all])
Conf linux-base (4.5~deb8u1 Debian-Security:8/oldstable [all])

যদি উপলভ্য আপডেট থাকে এবং না থাকে তবে কিছুই নেই। আপনি সহজেই এটি পর্যবেক্ষণ সমাধানের সাথে জুড়ে দিতে পারেন।

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