歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> yum源碼分析

yum源碼分析

日期:2017/2/28 15:45:34   编辑:Linux教程

(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 後的文件了

Copyright © Linux教程網 All Rights Reserved