Welcome 微信登录

首页 / 操作系统 / Linux / yum源码分析

(1):yum clean的源码,在/usr/share/yum-cli/cli.py 中 882行 
def cleanCli(self, userlist):
函数中.
支持的参数有:
yum clean:
header
packages
metadata
dbcache
expire-cache
plugins
针对不同的输入,会调用
self.cleanPackages()
self.cleanHeaders()
self.cleanMetadata()
self.cleanSqlite()
这几个函数,删除不同的项
然后我们在文件
/usr/lib/python2.4/site-packages/yum/__init__.py
中能够看到上面几个函数的实现:
ef cleanHeaders(self):
        exts = ["hdr"]
        return self._cleanFiles(exts, "hdrdir", "header")
    def cleanPackages(self):
        exts = ["rpm"]
        return self._cleanFiles(exts, "pkgdir", "package")
等等。
这几个clean函数都是通过封装 __cleanFiles来实现的,看看这个函数:
def _cleanFiles(self, exts, pathattr, filetype):
        filelist = []
        removed = 0
        for ext in exts:
            for repo in self.repos.listEnabled():
                repo.dirSetup()
                path = getattr(repo, pathattr)
                if os.path.exists(path) and os.path.isdir(path):
                    filelist = misc.getFileList(path, ext, filelist)
        for item in filelist:
            try:
                os.unlink(item)
            except OSError, e:
                self.logger.critical(_("Cannot remove %s file %s"), filetype, item)
                continue
            else:
                self.verbose_logger.log(logginglevels.DEBUG_4,
                    _("%s file %s removed"), filetype, item)
                removed+=1
        msg = _("%d %s files removed") % (removed, filetype)
        return 0, [msg]
其实就是去对应的目录下删除文件而已。
可以如下测试:
修改代码段:
for item in filelist:
            try:
                print "====:", item
                os.unlink(item)
添加打印,保存
然后先 yum list 生成cache
可以 yum list 看下生成的文件
tree
.
|-- ops.5.i386
|   |-- cachecookie
|   |-- packages
|   |-- primary.sqlite
|   `-- repomd.xml
|-- ops.5.noarch
|   |-- cachecookie
|   |-- packages
|   |-- primary.sqlite
|   `-- repomd.xml
`-- rhel.5.i386
    |-- cachecookie
    |-- packages
    |-- primary.sqlite
    `-- repomd.xml
然后 sudo yum clean all
输出如下:
====: //var/cache/yum/ops.5.noarch/repomd.xml
====: //var/cache/yum/ops.5.i386/repomd.xml
====: //var/cache/yum/rhel.5.i386/repomd.xml
====: //var/cache/yum/ops.5.noarch/cachecookie
====: //var/cache/yum/ops.5.i386/cachecookie
====: //var/cache/yum/rhel.5.i386/cachecookie
====: //var/cache/yum/ops.5.noarch/primary.sqlite
====: //var/cache/yum/ops.5.i386/primary.sqlite
====: //var/cache/yum/rhel.5.i386/primary.sqlite
再去/va/cache/yum下tree下,看不到yum list 后的文件了RHEL5下VNC Server简单配置Ubuntu终端彻底删除软件相关资讯      yum 
  • yum安装与卸载软件常见命令  (05月24日)
  • 升级Python导致yum报错  (12/21/2015 15:14:23)
  • RHEL7.0配置CD-ROM为本地YUM  (12/10/2015 09:24:47)
  • CentOS 6.5下YUM仓库的部署  (03月11日)
  • 从CentOS安装R中看yum、rpm、repo  (12/18/2015 14:48:10)
  • Linux Study之--CentOS 创建本地  (12/03/2015 19:47:40)
本文评论 查看全部评论 (0)
表情: 姓名: 字数