CentOS   发布时间:2022-04-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了在CentOS / Fedora上查找(未)使用的软件包?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

概述

简而言之:从安装的所有(rpm)软件包中,我想确定未使用的软件包(例如,自过去6个月以来). 总之:我有许多具有可观服务记录的机器.每次我从一个版本升级到另一个版本时,我都对升级过程的进展感到惊讶. 然而,多年来安装了许多包(通过yum),我知道其中一些不再使用.我想摆脱这些因为它们对资源使用和系统的整体安全性产生负面影响. 我正在寻找找到未使用的包的最佳方法. 一种方法是手动筛选已安装的软件包?
简而言之:从安装的所有(rpm)软件包中,我想确定未使用的软件包(例如,自过去6个月以来).

总之:我有许多具有可观服务记录的机器.每次我从一个版本升级到另一个版本时,我都对升级过程的进展感到惊讶.

然而,多年来安装了许多包(通过yum),我知道其中一些不再使用.我想摆脱这些因为它们对资源使用和系统的整体安全性产生负面影响.

我正在寻找找到未使用的包的最佳方法.

一种方法是手动筛选已安装的软件包?该方法有效,我学到了很多,但它非常耗时.

所以我正在寻找一种自动识别未使用包的方法,以便我可以手动清理它们.

我想前进的方法是监视服务器上所有使用过的文件,将它们链接到包,看看剩下的是什么.有什么可用于此目的吗?

有更多创造性的方法来实现这一目标吗?

鉴于RPM和多个包共有的共享库的性质,我将采用构建实际使用的包列表的方法,并针对已安装的包列表进行区分.删除未使用的软件包有很多好处,例如释放磁盘空间,减少可以促进权限提升的软件包,减少校验和数据库的大小,即OSSEC,助手,tripwire.

假设:

> atime已启用.如果您使用noatime的挂载选项,则文件的访问时间将不会更新,也不能用于确定访问哪些文件.通常在文件系统上设置noatime以避免写入惩罚.

免责声明:此方法存在一些您需要考虑的风险.例如,如果您的服务器已经运行了几年,那么运行的守护程序可能会使用自服务器/守护程序启动时间以来您未访问过的旧文件.还有很多其他风险要考虑,但你问这里有一种我可能会开始的方法.这仍然需要人来确定可以安全移除的东西.您不应该使用此方法自动删除包.这仅供教育使用.

构建所有已安装RPM的列表.

rpm -qa | sort -n > /dev/shm/all.txt

构建最近访问的文件列表并保存计数.我们即将迎来新的一年,所以你可能想看看去年.

YEAR=`date -d "one year ago" '+%Y'`
# YEAR=2014
OFS="$IFS";IFS=$'\n';stat --printf="%y %n\n" $(ls -tr $(find /bin /boot /etc /lib /lib64 /sbin /usr /var -type f ! -name "*~" ! -name "*.gz" ! -name "*.tar")) | grep ^${YEAR} | awk {'print $NF'} > /dev/shm/recent.txt;IFS="$OFS";
FILECOUNT=`egrep -c ^.+ /dev/shm/recent.txt`

将我们的RPM数据库复制到ram磁盘,这样我们就不会滥用服务器.确保您至少有100 MB左右.例如df -Ph / dev / shm

mkdir --mode=0700 /dev/shm/rpmdb
rsync -a /var/lib/rpm/. /dev/shm/rpmdb/.

找到与我们的recent.txt列表相关联的RPM.这需要一段时间.我敢打赌,有人可以找到更有效,更快捷,更聪明的方法来完成这一步.我会在屏幕会话中这样做.

renice 19 -p $$> /dev/null 2>&1
printf "${FILECOUNT} files to iterate through."
> /dev/shm/recent_packages.txt
for file in `cat /dev/shm/recent.txt`
do
rpm --dbpath /dev/shm/rpmdb -q --whatprovides ${file} >> /dev/shm/recent_packages.txt 2>/dev/null
# optional status indicator.
printf "."
done

从我们的列表中删除调查结果中不属于RPM软件包的文件.

grep -v "not owned by" /dev/shm/recent_packages.txt | sort -n | uniq > /dev/shm/recent_sorted.txt

差异输出.同样,这本身并不完全有用.您需要确定未访问这些包中的文件的原因.

diff -u /dev/shm/recent_sorted.txt /dev/shm/all.txt | grep '^+'

您可以使用rpm -ql包列出RPM的内容.这是我的一个VM上的输出.如您所见,这在我的案例中并不完全有用.

+++ /dev/shm/all.txt    2014-12-31 20:50:06.521227281 +0000
+basesystem-10.0-4.el6.noarch
+dhcp-common-4.1.1-43.P1.el6.centos.x86_64
+filesystem-2.4.30-3.el6.x86_64
+rootfiles-8.1-6.1.el6.noarch

我需要保留文件系统和基本系统,尽管事实上这些文件还没有被访问过.注意:在某些时候我启用了noatime

删除了dhcp-common及其相关的dhclient包,因为在我的特定用例中我永远不需要DHCP.我意识到这种方法并不完全有效,但它应该为您提供服务器每个独特角色的起点.新年快乐!

大佬总结

以上是大佬教程为你收集整理的在CentOS / Fedora上查找(未)使用的软件包?全部内容,希望文章能够帮你解决在CentOS / Fedora上查找(未)使用的软件包?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: