众所周知,Linux 下管理软件对新手而言很不友好,因此本文将详细讲解基于 redhat 的yum
、rpm
和基于 debian 的apt
、dpkg
的用法。在学 Linux 的路上,这应该是最先需要掌握的内容
本文以基于 redhat 的 CentOS 和 基于 debian 的 Ubuntu 为例
基本原理
开源镜像站
中国开源镜像站点
- 阿里云开源镜像站: http://mirrors.aliyun.com/
- 网易开源镜像站: http://mirrors.163.com/
- 搜狐开源镜像站: http://mirrors.sohu.com/
- 北京交通大学: http://mirror.bjtu.edu.cn/cn/ (教育网荐)
- 兰州大学: http://mirror.lzu.edu.cn/ (西北高校FTP搜索引擎)
- 厦门大学: http://mirrors.xmu.edu.cn/
- 上海交通大学: http://ftp.sjtu.edu.cn/
- 清华大学:
- 天津大学: http://mirror.tju.edu.cn/
- 中国科学技术大学:
- 西南大学: http://linux.swu.edu.cn/swudownload/
- 泰安移动: http://mirrors.ta139.com/
- 东北大学: http://mirror.neu.edu.cn/
- 浙江大学: http://mirrors.zju.edu.cn/
- 东软信息学院: http://mirrors.neusoft.edu.cn/
——引用自handbook/CentOS7更换yum软件镜像源.md at master · jaywcjlove/handbook
CentOS
镜像源
国内常用镜像源:
软件库
可供 CentOS 使用的软件库可参见 zh/AdditionalResources/Repositories - CentOS Wiki
由于使用其它软件库可能导致系统不稳定(比如atomic
),因此官方建议正常情况下不要使用其它库:
1
2
sed -i 's/enabled *= *1/enabled=0/' /etc/yum.repos.d/epel.repo
sed -i 's/enabled *= *1/enabled=0/' /etc/yum.repos.d/atomic.repo
epel
安装方法;
1
yum install epel-release
atomic
安装方法;
1
wget -O - http://updates.atomicorp.com/installers/atomic |sh
yum
yum provides
In general, you can search for what package provides a command using the yum provides command:
1
sudo yum provides '*bin/nslookup'
事实上,只要知道该包的某个文件的路径即可:
1
yum provides */X11/extensions/Xrandr.h
详情参见Nslookup: command not found error on RHEL/CentOS 7
yum history
使用回滚彻底删除安装的依赖包:
1
2
yum history list <package>
yum history undo <ID>
使用代理
rpm
List the installed RPMs by date of installation/update?
To list all packages and their install dates, latest first:
1 rpm -qa --lastThis should work on any RPM based machine:
1 rpm -qa --qf '%{INSTALLTIME} (%{INSTALLTIME:date}): %{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' | sort -n(To get a list of all possible tags, use
rpm --querytags
.)——引用自CentOS: List the installed RPMs by date of installation/update? - Unix & Linux Stack Exchange
关于 RPM 文件的使用方法
事实上,对于 RPM 文件,除了可以直接使用rpm -i
命令进行安装,还可以使用yum install
命令安装。使用 yum 的好处是能自动处理依赖关系。例如:
1
2
3
4
root@wsxq21:~/shadowsocks-libev/rpm/RPMS/x86_64# rpm -i *.rpm
错误:依赖检测失败:
zsh 被 shadowsocks-libev-zsh-completion-3.3.0-1.21.gite3c6c80.el7.x86_64 需要
root@wsxq21:~/shadowsocks-libev/rpm/RPMS/x86_64#
而使用 yum 则不然:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
root@wsxq21:~/shadowsocks-libev/rpm/RPMS/x86_64# yum install *.rpm
已加载插件:fastestmirror
正在检查 libshadowsocks-libev-3.3.0-1.21.gite3c6c80.el7.x86_64.rpm: libshadowsocks-libev-3.3.0-1.21.gite3c6c80.el7.x86_64
libshadowsocks-libev-3.3.0-1.21.gite3c6c80.el7.x86_64.rpm 将被安装
正在检查 libshadowsocks-libev-devel-3.3.0-1.21.gite3c6c80.el7.x86_64.rpm: libshadowsocks-libev-devel-3.3.0-1.21.gite3c6c80.el7.x86_64
libshadowsocks-libev-devel-3.3.0-1.21.gite3c6c80.el7.x86_64.rpm 将被安装
正在检查 shadowsocks-libev-3.3.0-1.21.gite3c6c80.el7.x86_64.rpm: shadowsocks-libev-3.3.0-1.21.gite3c6c80.el7.x86_64
shadowsocks-libev-3.3.0-1.21.gite3c6c80.el7.x86_64.rpm 将被安装
正在检查 shadowsocks-libev-debuginfo-3.3.0-1.21.gite3c6c80.el7.x86_64.rpm: shadowsocks-libev-debuginfo-3.3.0-1.21.gite3c6c80.el7.x86_64
shadowsocks-libev-debuginfo-3.3.0-1.21.gite3c6c80.el7.x86_64.rpm 将被安装
正在检查 shadowsocks-libev-zsh-completion-3.3.0-1.21.gite3c6c80.el7.x86_64.rpm: shadowsocks-libev-zsh-completion-3.3.0-1.21.gite3c6c80.el7.x86_64
shadowsocks-libev-zsh-completion-3.3.0-1.21.gite3c6c80.el7.x86_64.rpm 将被安装
正在解决依赖关系
--> 正在检查事务
---> 软件包 libshadowsocks-libev.x86_64.0.3.3.0-1.21.gite3c6c80.el7 将被 安装
---> 软件包 libshadowsocks-libev-devel.x86_64.0.3.3.0-1.21.gite3c6c80.el7 将被 安装
---> 软件包 shadowsocks-libev.x86_64.0.3.3.0-1.21.gite3c6c80.el7 将被 安装
---> 软件包 shadowsocks-libev-debuginfo.x86_64.0.3.3.0-1.21.gite3c6c80.el7 将被 安装
---> 软件包 shadowsocks-libev-zsh-completion.x86_64.0.3.3.0-1.21.gite3c6c80.el7 将被 安装
--> 正在处理依赖关系 zsh,它被软件包 shadowsocks-libev-zsh-completion-3.3.0-1.21.gite3c6c80.el7.x86_64 需要
Loading mirror speeds from cached hostfile
* base: repos.lax.quadranet.com
* elrepo-kernel: repos.lax-noc.com
* epel: d2lzkl7pfhq30w.cloudfront.net
* extras: repos.lax.quadranet.com
* updates: repos.lax.quadranet.com
--> 正在检查事务
---> 软件包 zsh.x86_64.0.5.0.2-31.el7 将被 安装
--> 解决依赖关系完成
依赖关系解决
==============================================================================================================================================================================================
Package 架构 版本 源 大小
==============================================================================================================================================================================================
正在安装:
libshadowsocks-libev x86_64 3.3.0-1.21.gite3c6c80.el7 /libshadowsocks-libev-3.3.0-1.21.gite3c6c80.el7.x86_64 212 k
libshadowsocks-libev-devel x86_64 3.3.0-1.21.gite3c6c80.el7 /libshadowsocks-libev-devel-3.3.0-1.21.gite3c6c80.el7.x86_64 4.4 k
shadowsocks-libev x86_64 3.3.0-1.21.gite3c6c80.el7 /shadowsocks-libev-3.3.0-1.21.gite3c6c80.el7.x86_64 846 k
shadowsocks-libev-debuginfo x86_64 3.3.0-1.21.gite3c6c80.el7 /shadowsocks-libev-debuginfo-3.3.0-1.21.gite3c6c80.el7.x86_64 4.0 M
shadowsocks-libev-zsh-completion x86_64 3.3.0-1.21.gite3c6c80.el7 /shadowsocks-libev-zsh-completion-3.3.0-1.21.gite3c6c80.el7.x86_64 5.7 k
为依赖而安装:
zsh x86_64 5.0.2-31.el7 base 2.4 M
事务概要
==============================================================================================================================================================================================
安装 5 软件包 (+1 依赖软件包)
总计:7.4 M
总下载量:2.4 M
安装大小:11 M
Is this ok [y/d/N]:
重建 SRPM
本部分内容主要参考自 zh/HowTos/RebuildSRPM - CentOS Wiki
SRPM 简介
RPM 文件大家都非常熟悉,是基于 RedHat 的 Linux 发行版(如 CentOS )的软件包文件。然而,你可能到目前为止从未听过 SRPM 文件。所谓的 SRPM(Source RPM),顾名思义,即只带有打包的源文件和 SPEC 文件的 RPM。使用file
命令查看的结果如下:
1
2
3
4
5
root@wsxq21:~/shadowsocks-libev/rpm/SRPMS# ls
shadowsocks-libev-3.3.0-1.21.gite3c6c80.src.rpm
root@wsxq21:~/shadowsocks-libev/rpm/SRPMS# file shadowsocks-libev-3.3.0-1.21.gite3c6c80.src.rpm
shadowsocks-libev-3.3.0-1.21.gite3c6c80.src.rpm: RPM v3.0 src
root@wsxq21:~/shadowsocks-libev/rpm/SRPMS#
使用rpm
的-qpl
参数可得结果如下:
1
2
3
4
root@wsxq21:~/shadowsocks-libev/rpm/SRPMS# rpm -qpl shadowsocks-libev-3.3.0-1.21.gite3c6c80.src.rpm
shadowsocks-libev-3.3.0-1.21.gite3c6c80.tar.gz
shadowsocks-libev.spec
root@wsxq21:~/shadowsocks-libev/rpm/SRPMS#
温馨提示:-qpl
也能对 RPM 文件使用
那么,它有什么用呢?不像 RPM 文件,SRPM 文件不能直接使用rpm
命令的-i
参数安装,它必需配置参数以编译成 RPM 文件。由此可见,其好处自然是可以在编译前自定义参数,修改默认编译配置,提高编译灵活性。即类似于./configure && make && make install
系列命令的功能
从 SRPM 得到 RPM
方法一:单一步重建 SRPM
该方法使用默认的编译参数,无需手动修改,直接使用如下命令即可:
1
rpmbuild --rebuild /tmp/mypackage-1.0.0-1.src.rpm
一切顺利的话,你便会在~/rpmbuild/RPMS/i386
目录里产生一个mypackage-1.0.0-1.i386.rpm
文件(如果你的架构不是 i386,则相应的文件名称及目录都会发生改变)。
方法二:安装 SRPM 然后以 spec 文件重建
另一个做法就是先安装来自 SRPM 的文件,然后利用rpmbuild
按照 spec 文件重建。Fedora >= 11 的 RPM 必须这样处理。
要安装一个 SRPM,请执行rpm -i
指令并提供 SRPM 文件的名称作为参数。请留意用没有特殊权限的户口执行 rpm -i,而不是 root。你亦可以利用rpm -qpl
来列出 SRPM 文件内的文件。当你安装一个 SRPM 文件时,spec 文件(也就是有.spec
扩展名的那个)会被放进你的~/rpmbuild/SPECS
目录内,而其它来自 SRPM 的文件(多数是 tar 压缩档及修正档)会被放进你的~/rpmbuild/SOURCES
目录内。举个例说,要解压/tmp/mypackage-1.0.0-1.src.rpm
这个文件的内容,这执行这个指令:
1
[user@host ~]$ rpm -i /tmp/mypackage-1.0.0-1.src.rpm
假如是後期 Fedora 的 RPMS,或者出現的錯誤類似 “error: unpacking of archive failed on file /builddir/build/SOURCES/mypackage-1.0.0.tar.gz;4dc983a7: cpio: MD5 sum mismatch”,则可使用如下命令:
1
[user@host ~]$ rpm --nomd5 -i /tmp/mypackage-1.0.0-1.src.rpm
当你将 SRPM 解压后,你便会留意到在~/rpmbuild/SPECS
目录内多了一个 spec 文件(在这个例子里它多数会称为mypackage.spec
)。你就是利用这个文件来创建 RPM。要这样做,请使用下列指令:
1
2
[user@host ~]$ cd ~/rpmbuild/SPECS
[user@host SPECS]$ rpmbuild -ba mypackage.spec
rpmbuild -ba
这个指令会执行 RPM 创建过程里的所有步骤,然后在完成时创建一个 RPM 文件(它会被存储在~/rpmbuild/RPMS/i386
内,或者对应你结构的目录内),与及一个新的 SRPM 文件(它会被存储在~/rpmbuild/SRPMS
内)。
进一步阅读
遇到过的问题
- Getting Information About Packages
- yum - Remove unused packages - Unix & Linux Stack Exchange
- linux - CentOS yum – pre-existing rpmdb issues - Super User
- yum - CentOS epel repository listed more than once - Unix & Linux Stack Exchange
Ubuntu
镜像源(source.list)
该部分对于所有基于Debian
的Linux
均适用,因为它们都使用apt
作为包管理器。kali
基于Debian
,所以下面以kali
为例进行说明
镜像源是获取软件包(通常为开源软件)的 Web 网站, Linux 中不需要像 Windows 一样手动下载.exe
文件安装,只需要配置好镜像源,然后在终端(Terminal)中使用apt
命令(apt install
)即可
kali 常用镜像源(文件位置:/etc/apt/source.list
):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#官方(每个Linux通常都有自己官方的镜像源,但是大多在国外,比较慢)
#deb https://http.kali.org/kali kali-rolling main non-free contrib
#deb-src https://http.kali.org/kali kali-rolling main non-free contrib
#deb https://security.kali.org/kali-security kali/updates main contrib non-free
#中国科学技术大学开源镜像(每个大学几乎都有一个开源镜像站,使用本校的镜像通常最快)
deb http://mirrors.ustc.edu.cn/kali kali main non-free contrib
deb-src http://mirrors.ustc.edu.cn/kali kali main non-free contrib
deb http://mirrors.ustc.edu.cn/kali-security kali/updates main contrib non-free
#阿里云镜像(一个很出名的国内开源镜像源)
#deb http://mirrors.aliyun.com/kali kali main non-free contrib
#deb-src http://mirrors.aliyun.com/kali kali main non-free contrib
#deb http://mirrors.aliyun.com/kali-security kali/updates main contrib non-free
可以通过官方获取最佳镜像源获取最佳镜像,然而亲测并不好用,强烈推荐你所在大学的镜像站,如果没有的话建议使用中国科学技术大学开源镜像
获得Https
支持:apt install apt-transport-https
可以使用apt edit-source
快速编辑/etc/apt/source.list
apt
dpkg
yum provides
的替代?
首先,Ubuntu 中输入命令如果未找到则会提示你安装相应的包,如使用lex
命令未找到会提示你安装flex
,所以如果只是为了使用相应的命令(程序)而查找软件包的话,直接输入命令根据提示即可找到。这得益于软件包command-not-found
。如果是需要查找某个文件所属的软件包的话,则可以继续往后阅读
在已安装的软件包中查询可使用dpkg
命令中的-S
参数,如:
1
dpkg -S `which flex`
在所有软件包中查询请前往 Ubuntu – Ubuntu Packages Search,注意输入正确的 Ubuntu 版本代码(使用lsb_release -a
查询你当前的版本代码)。
此外,还可以使用apt-file
详情参见: apt-get or aptitude equivalent to yum whatprovides - Ask Ubuntu
链接
下面总结了本文中使用的所有链接: