उपलब्ध अपडेट की सूची बनाएं लेकिन उन्हें इंस्टॉल न करें


208

मैं चाहता हूं कि मेरी क्रोन-रन रिपोर्टिंग स्क्रिप्ट मुझे सूचित करें कि मेरे पैकेज के लिए अपडेट हैं। क्या apt-getमुझे उपलब्ध अपडेट की सूची देने का एक तरीका है, लेकिन कुछ और नहीं करना है?

जवाबों:


231

उपयुक्त

आधुनिक संस्करणों के लिए aptइसके लिए एक विशिष्ट स्विच है:

apt list --upgradable

apt-get

पुराने apt-getकमांड के लिए -uस्विच उन पैकेजों की सूची दिखाता है जो अपग्रेड के लिए उपलब्ध हैं:

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

से apt-getआदमी पेज :

-u
--show- उन्नत
 शो उन्नत संकुल; उन सभी पैकेजों की सूची प्रिंट करें, जिन्हें अपग्रेड किया जाना है। कॉन्फ़िगरेशन आइटम: APT :: Get :: Show-Upgraded।
-  सभी संकेतों के लिए कोई स्वत: "नहीं" पुलाव । <== इसे स्थापित करने से शुरू करने से रोकने के लिए

2
मैं उम्मीद कर रहा था कि यह जड़ के बिना किया जा सकता है
थोरसुमोनर

19
यदि आप "Y" टाइप करते हैं और Enter दबाते हैं, तो यह कमांड अपडेट इंस्टॉल करेगा । मैं निश्चित रूप से "-s" जोड़ने की सिफारिश करूंगा, अन्यथा यह उत्तर भ्रामक है
मुरमेल

5
यह एक बहुत ही गलत उत्तर है क्योंकि (अतिरिक्त विकल्पों के बिना) कमांड इनपुट के लिए प्रतीक्षा करता है और यदि उपयोगकर्ता गलत इनपुट में प्रवेश करता है, तो पैकेज स्थापित किया जाता है, जो उस सिस्टम को संशोधित करता है जो ओपी चाहता है (बस मेरे सिस्टम पर हुआ)
डैनियल एल्डर

और btw: -uएक डिफ़ॉल्ट विकल्प हैapt-get
डैनियल एल्डर

1
@ThorSummoner '-s' वही करेगा जो आप चाहते हैं और बिना जड़ के काम करता है
nevelis

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
बस हंसी के लिए: apt-get -s उन्नयन | awk -F '[] [(]] +' / ^ Inst / {Printf "प्रोग:% s \ tcur:% s \ tavail:% s \ n", $ 2, $ 3, $ 4} ''
tink

8
यह और भी अच्छा लग सकता है, अगर columnइस तरह का उपयोग करें: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"}' | column -s " " -t
एंटोनियोके

1
@AntonioK बहुत अच्छा लग रहा है!
निक

1
मुझे डर है कि यह पर्ल-कोड मेरी मशीन को हैक कर लेगा ...;)
क्रिस

33

एक अन्य विकल्प, इंज़ोटिब से प्रेरित:

aptitude search '~U' | wc -l

यह कमांड नए पैकेजों को आउटपुट करने के लिए एप्टीट्यूड का उपयोग करेगा और फिर लाइनों को गिनने के लिए wc करेगा।

एक विचारधारा पर, मैंने पाया कि ~ यू के आसपास के एकल उद्धरणों के बिना एनज़ोटिब का समाधान मेरे लिए काम नहीं करता। (व्हीज़ी, ज़ैस, एप्टीट्यूड 0.6.8.2)

अपडेट करें :

नए एप के साथ आप अभी कर सकते हैं:

apt list --upgradable

इसके लिए धन्यवाद, उपयुक्त सूची कमांड वही था जो मैं चाहता था।
DVorak

इस समाधान के साथ अच्छा है कि आपको sudo / root की आवश्यकता नहीं है।
Gunni

25

सबसे आसान है:

apt list --upgradable

टकसाल पर काम नहीं करता है।
रात 9:17 बजे 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
इस एप्टीट्यूड कमांड ने मेरे लिए बहुत काम किया और रूट की आवश्यकता नहीं थी
जेम्सकेडब्ल्यू

apt-get -s dist-उन्नयन भी अच्छा काम करता है और एक ही आउटपुट होता है जब आप इसे उस awker के माध्यम से पाइप करते हैं
ychaouche

धन्यवाद! यह काफी हद तक निर्भरता नरक से बाहर निकल गया। कोशिश कर रहा था, dist-upgradeलेकिन उपयोग करने के लिए आवश्यक कुछ पैकेजों को नहीं खोना था aptitudeaptitude install $(apt-get -s dist-upgrade | awk '/^Inst/ { print $2 }')चाल चली!
Jayen

11

पैकेज पर एक नज़र डालें "एन्टीट्रॉन":

apticron - लंबित पैकेज अपडेट के बारे में मेल करने के लिए सरल उपकरण

Apticron एक सरल स्क्रिप्ट है जो दैनिक अपडेट ईमेल को लंबित पैकेज अपडेट के बारे में भेजता है जैसे सुरक्षा अपडेट, ठीक से dselect और aptitude दोनों को पकड़कर पैकेज को हैंडल करना।

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


आपका लिंक टूट गया है ...
एलेक्सिस विलके

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

वास्तव में स्थापित किए बिना उपलब्ध अपडेट को सूचीबद्ध करेगा।

पहले कमांड अपडेट पैकेज इंडेक्स फाइलों को सिम्युलेटेड (इस तरह -s) अपग्रेड करने से पहले किया जाता है। "-s" एक सिम्युलेटेड अपग्रेड दिखाएगा जो दिखाएगा पैकेट जो स्थापित किया जाएगा लेकिन वास्तव में कुछ भी स्थापित नहीं करेगा।

इसके विपरीत "-s" के बजाय "-u" वास्तव में पुष्टि के बाद स्थापित होगा।


2
अनुकरण विकल्प को किसी भी के साथ चालू किया जा सकता है -s, --simulate, --just-print, --dry-run, --recon, --no-act, फिर से जोड़ना और ड्राई-रन मेरा व्यक्तिगत पसंदीदा है।
थोरसुमोनर

9

मुझे संभावित अपग्रेड पर पूर्ण संस्करण की जानकारी की आवश्यकता थी, इसलिए मैंने जसोनव्रीयन के उत्तर के संशोधन का उपयोग किया:

apt-get -V -u upgrade

यह सरल और IMO यथोचित स्वरूपित आउटपुट है।


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

@ Jasonwryan के उत्तर के लिए चेतावनी लिखने के बाद, मैं अपना स्वयं का समाधान प्रदान करना चाहता हूं:

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-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])

अगर उपलब्ध अद्यतन हैं, और कोई नहीं है अगर वहाँ नहीं है। इस तरह आप बस इसे एक निगरानी समाधान के साथ जोड़ सकते हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.