apt-get
向我提供可用更新列表但又什么都不做的方法吗?#1 楼
apt对于现代版本的
apt
,有一个特定的开关:apt list --upgradable
对于旧的
apt-get
命令,-u
开关显示可用软件包的列表。升级:# apt-get -u upgrade --assume-no
从
apt-get
手册页:-u
--show-upgradeed显示升级的软件包;打印出所有要升级的软件包的列表。配置项:APT :: Get :: Show-Upgraded。-假定否所有提示均自动“否”。 &lt ==为防止其开始安装
#2 楼
apt-get --just-print upgrade
读起来不太容易,下面是一个Perl一种衬里,用于解析apt-get的输出: :
apt-get --just-print upgrade 2>&1 | perl -ne 'if (/Inst\s([\w,\-,\d,\.,~,:,\+]+)\s\[([\w,\-,\d,\.,~,:,\+]+)\]\s\(([\w,\-,\d,\.,~,:,\+]+)\)? /i) {print "PROGRAM: INSTALLED: AVAILABLE: \n"}'
希望对其他人有帮助,
评论
只是为了笑:apt-get -s upgrade | awk -F'[] [()] +''/ ^ Inst / {printf“ Prog:%s \ tcur:%s \ tavail:%s \ n”,$ 2,$ 3,$ 4}'
– tink
13年5月17日在3:19
如果使用这样的列,它的外观也可能会好得多:apt-get --just-print upgrade 2>&1 | perl -ne'if(/ Inst \ s([\ w,\-,\ d,\。,〜,:,\ +] +)\ s \ [([[ww,\-,\ d,\。 ,〜,:,\ +] +)\] \ s \(([[w,\-,\ d,\。,〜,:,\ +] +)\)?/ i){print“ PROGRAM:已安装$ 1:可用的$ 2:$ 3 \ n“}'|列-s“” -t
– AntonioK
15年7月14日在11:35
@AntonioK看起来很棒!
–尼克
16年11月10日在5:47
恐怕这个Perl代码会入侵我的机器...;)
–克里斯
18年6月26日在15:14
@AntonioK您如何按字母顺序对程序名称进行排序?
– Richie
20年1月29日在12:51
#3 楼
另一个受enzotib启发的选项:aptitude search '~U' | wc -l
此命令将使用aptitude输出新软件包,然后wc仅计算行数。
在旁注中,我发现enzotib的解决方案在
~U
周围没有单引号不适合我。 (Wheezy,ZSH,性能0.6.8.2)更新:
使用新的apt可以做到:
apt list --upgradeable
评论
为此,apt list命令正是我想要的。
– dvorak
17年6月22日在16:19
这个解决方案的好处是您不需要sudo / root。
– Gunni
17-10-10在15:17
#4 楼
最简单的是:apt list --upgradeable
评论
在薄荷糖上不起作用。
–ychaouche
17年2月9日在9:31
遗憾的是,根据是否有可用的升级,它不会返回不同的退出代码。能够在脚本中使用它会很好。
–戴尔·安德森(Dale Anderson)
17年5月5日在19:32
#5 楼
您可以运行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 }'
评论
这个智能命令对我来说非常有效,不需要root
–JamesCW
16年5月5日在18:22
apt-get -s dist-upgrade也可以很好地工作,并且在通过该awker进行管道传输时具有相同的输出
–ychaouche
17年2月9日在9:28
谢谢!这摆脱了很多依赖地狱。试图进行dist-upgrade,但不丢失某些软件包,因此需要使用aptitude。 aptitude install $(apt-get -s dist-upgrade | awk'/ ^ Inst / {print $ 2}')达到了目的!
–贾恩
17年12月3日在10:18
#6 楼
看一下“ apticron”软件包:apticron-用于发送有关待处理软件包更新的简单工具
Apticron是一个简单的脚本,每天发送有关待处理软件包的电子邮件软件包更新(例如安全更新),可以通过dselect和aptitude正确处理保留的软件包。
https://packages.debian.org/buster/apticron
评论
您的链接已损坏...
– Alexis Wilke
18年9月1日23:51
#7 楼
apt-get update && apt-get -s upgrade
将列出可用更新,而无需实际安装。
第一个命令在完成模拟(因此-s)升级之前会更新软件包索引文件。 “ -s”将进行模拟升级,显示将安装但实际上不会安装任何包的数据包。
相反,在确认后实际上将安装“ -u”而不是“ -s”。
评论
我个人最喜欢使用-s,-simulate,-just-print,-dry-run,-recon,-no-act,recon和dry-run中的任何一个来触发模拟选项。
–雷神召唤师
15年12月17日在17:24
#8 楼
我需要有关可能升级的完整版本信息,因此我对jasonwryan的答案进行了修改:#9 楼
只需过滤apt-get update && apt-get -s -V -u upgrade
的输出即可在日志中仅包含首选信息。
很可能,您需要漂亮的部分行之后
...
以下软件包将被升级:
...
开头没有空格。
评论
嗨,欢迎来到该网站。就目前而言,您的答案基本上是对现有答案的重新提炼,因此不会添加任何新内容。您可以通过例如解释如何过滤输出,添加各种开关的功能说明等来改进它。
– terdon♦
2014年11月19日在17:29
#10 楼
apt-get update > /dev/null && apt-get --just-print upgrade | grep "Inst "
对cron电子邮件最简单;没有用户迭代,如果没有更新,则没有输出。
#11 楼
喷射另一架飞机,受到这个答案的启发:
function a { read input;dpkg -l ${input} | grep " ${input} " | awk '{===="";print { apt-get --just-print upgrade 2>&1 | perl -ne 'if (/Inst\s([\w,\-,\d,\.,~,:,\+]+)\s\[([\w,\-,\d,\.,~,:,\+]+)\]\s\(([\w,\-,\d,\.,~,:,\+]+)\)? /i) {print " (\e[1;34m\e[0m -> \e[1;32m\e[0m)\n"}';} | while read -r line; do echo -en "$line\n"; done;
}' | 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 " (\e[1;34m\e[0m -> \e[1;32m\e[0m)\n"}';} | while read -r line; do echo -en "$line $(echo $line | awk '{print }' | 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
如果您不希望简短描述,请使用以下内容:
q4312079q
输出:
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
17年2月9日在10:12
#12 楼
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
#13 楼
在为@jasonwryan的答案写警告之后,我想提供自己的解决方案:apt-get dist-upgrade --assume-no
不幸的是,这与debian wheezy不兼容,我不得不检查一下尚未升级的lxc容器。这种形式将始终有效:
apt-get dist-upgrade </dev/null
最后,我还想重新格式化输出。我选择再次更改呼叫(使用
--dry-run
,但忽略了所有其他输出),因为它感觉更安全:apt-get --dry-run dist-upgrade | awk '
BEGIN{p=0}
/^The/{p=1;t=The following packages have been kept back:
iproute
The following packages will be upgraded:
unzip
}
/no longer required/{p=0}
#optional: /been kept back/{p=0}
p && t{print t;t=""}
/^ / && p{print q4312078q}
'
返回值:
q4312078q
#14 楼
我喜欢这样使用:apt-get -qq update && apt-get -qq -s upgrade
你会得到这样的输出:是可用的更新,如果没有,则没有更新。这样,您可以简单地将其与监视解决方案相结合。
#15 楼
作为变体,我使用以下命令: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",
,
substr(,2),
substr(,1,length()-1)
}'
将其粘贴到名为
apt-updates
的脚本中,然后您可以调用apt-updates
以获得所有更新的列表,而与用户无关。 br /> 您仍然需要通过特权访问来调用
apt-get update
。评论
输出仅显示软件包名称(第一列),第二列始终显示“ =”,第三列始终为空。我在造币厂。
–ychaouche
17-2-9在10:15
#16 楼
有apt-show-versions
工具。要显示可用更新,请运行:apt-show-versions -u
评论
我希望没有root就可以做到
–雷神召唤师
2015年2月6日,17:33
如果键入“ Y”并按Enter,此命令将安装更新。我绝对建议添加“ -s”,否则此答案会产生误导
–默默尔
15年6月17日在7:26
这是一个非常错误的答案,因为(没有其他选项)该命令等待输入,并且如果用户输入错误的输入,则会安装该软件包,这将修改系统,而这并不是OP想要的(这恰好发生在我的系统上)
–丹尼尔·奥尔德(Daniel Alder)
2015年11月1日下午13:11
顺便说一句:-u是apt-get的默认选项
–丹尼尔·奥尔德(Daniel Alder)
2015年11月1日下午13:17
@ThorSummoner'-s'将做您想做的事而无需root
–nevelis
2015年12月16日23:47