为了简单起见, 我们以 tree 为例做个实验. 如果已经安装了, 就先卸载它(放心卸载, 它仅依赖于 glibc).
- [haifeng@arch sync]$ sudo pacman -R tree
- 正在检查依赖关系...
- 目标 (1): tree-1.6.0-2
- 全部删除大小:0.07 MiB
- 打算删除这些软件包吗? [Y/n] y
- (1/1) 正在删除 tree [######################] 100%
此时, 打开 /var/lib/pacman/local, 则已经找不到 tree-1.6.0-2/ 这个文件夹了.
好了, 我们来还原整个过程.
Try 1. 更新软件包数据库.
每次 pacman -Sy , 都会下载 $repo.db.tar.gz 放在 /var/lib/pacman/sync 中.
实验一. 删除或更名 /var/lib/pacman/sync/core.db, 然后运行 pacman -Sy
- [haifeng@arch sync]$ sudo mv core.db core.db.bak
- [sudo] password for haifeng:
- [haifeng@arch sync]$ ls
- archlinuxfr.db community.db core.db.bak extra.db
- [haifeng@arch sync]$ sudo pacman -Sy
- 警告:database file for 'core' does not exist
- :: 正在同步软件包数据库...
- core 106.4 KiB 310K/s 00:00 [######################] 100%
- extra 1427.9 KiB 452K/s 00:03 [######################] 100%
- community 1770.0 KiB 477K/s 00:04 [######################] 100%
- archlinuxfr 32.9 KiB 72.3K/s 00:00 [######################] 100%
- [haifeng@arch sync]$ ls
- archlinuxfr.db community.db core.db core.db.bak extra.db
core.db, extra.db, community.db中存放了各个软件包的信息, 详见
archlinux 中的 core.db 如何打开?
Try 2. 查看解压缩后的 core.db, extra.db, community.db 中是否有 tree 文件夹.
事实上, tree-1.6.0-2 位于 extra 中. 它有两个文件 depends 和 desc, 可以查看其中的内容.
depends
desc
- %FILENAME%
- tree-1.6.0-2-x86_64.pkg.tar.xz
- %NAME%
- tree
- %VERSION%
- 1.6.0-2
- %DESC%
- A directory listing program displaying a depth indented list of files
- %CSIZE%
- 27860
- %ISIZE%
- 69632
- %MD5SUM%
- 5434307608ddeedb9efe6653ed1381ee
- %SHA256SUM%
- b845363c12421213aa220f2faac98f9ab682ac34237d7399793ba7cdd9c42324
- %PGPSIG%
- iQEcBAABAgAGBQJO15vaAAoJELcxCuXwRWmuZ2wH/R9mt2iNZnbzSxxivNC4MrOCfIk9n+vtxuWVZdfWWzkilPEcuvhIFzIkugNdZDqwW3AfaJoPAmQueutkxDRhvTjToNIixNvWsrhtW8hHCYHyWcfW2MeiDEc04afgRhbR1WeZ7OoyP3zFuEJK3bt+hg+sEOS5cUVn4DV6mqSshg5DolzWR4QHLIpxZHYEDabklIF49hFgHlD8pfvayQYe5vcTR4HQwrMR1nqF6TrfMyUAY62nC2HV5QF/ccXAiWpMYM36HnQqEMDyQCNOwqYHhtUKkCL+hR7Pye/LEBFfIBrGvRvikV/0L/nIqDmSe6nay1QfppN45BVMDJj4a1+qN90=
- %URL%
- %LICENSE%
- GPL
- %ARCH%
- x86_64
- %BUILDDATE%
- 1322752955
- %PACKAGER%
- Giovanni Scafora
Try 3. 安装 tree- [haifeng@arch local]$ sudo pacman -S tree
[sudo] password for haifeng:
正在解决依赖关系...
正在查找内部冲突...
目标 (1): tree-1.6.0-2
全部安装大小:0.07 MiB
进行安装吗? [Y/n] y
(1/1) 正在检查软件包完整性 [######################] 100%
(1/1) 正在加载软件包文件 [######################] 100%
(1/1) 正在检查文件冲突 [######################] 100%
(1/1) 正在检查可用硬盘空间 [######################] 100%
(1/1) 正在安装 tree [######################] 100%
注意这里并没有下载该软件包的过程, 而是直接检查该软件包的完整性. 原因是我之前安装过. pacman 就把它放在 /var/cache/pacman/pkg 中.
试一下如果删除 /var/cache/pacman/pkg/tree-1.6.0-2-x86_64.pkg.tar.xz, 然后再执行 sudo pacman -S tree, 看看它是怎么工作的.
现在 /var/lib/pacman/local 中有 tree-1.6.0-2 这个文件夹了. 它包含两个文件 desc, files.
desc
- %NAME%
- tree
- %VERSION%
- 1.6.0-2
- %DESC%
- A directory listing program displaying a depth indented list of files
- %URL%
- %LICENSE%
- GPL
- %ARCH%
- x86_64
- %BUILDDATE%
- 1322752955
- %INSTALLDATE%
- 1352164730
- %PACKAGER%
- Giovanni Scafora
- %SIZE%
- 69632
- %DEPENDS%
- glibc
files
- %FILES%
- usr/
- usr/bin/
- usr/bin/tree
- usr/share/
- usr/share/man/
- usr/share/man/man1/
- usr/share/man/man1/tree.1.gz
上面 files 的内容可以使用 pacman -Ql 命令查看, 注意是小写的 L
- [haifeng@arch haifeng]$ pacman -Ql tree
- tree /usr/
- tree /usr/bin/
- tree /usr/bin/tree
- tree /usr/share/
- tree /usr/share/man/
- tree /usr/share/man/man1/
- tree /usr/share/man/man1/tree.1.gz
To be continued.
阅读(3882) | 评论(0) | 转发(0) |