rpm全称是redhat package manager,后来改成rpm package manager,这是根据源码包编译出来的包。先从光盘中拷贝一个包,并看他是如何命名的。
先挂载光盘,然后拷贝vsftpd这个包,命令如下。
[root@server ~]# mount /dev/cdrom /mnt
mount: /mnt: WARNING: device write-protected, mounted read-only.
[root@server ~]# cp /mnt/AppStream/Packages/vsftpd-3.0.3-49.el9.x86_64.rpm .
[root@server ~]#
[root@server ~]# ls vsftpd-3.0.3-49.el9.x86_64.rpm
vsftpd-3.0.3-49.el9.x86_64.rpm
[root@server ~]#
从上面来看
(1)vsftpd:包的名称。
(2)3.0.3:版本version。
(3)49.el9:小版本号,即release,其中el8指的是此包用于安装rhel9系统上。
(4)x86_64:指的是架构,到底是32位的还是64位的包,x86_64表示是64位的。
rpm的安装的命令是 rpm -ivh 安装包,安装的rpm的命令如下。
[root@server ~]# rpm -ivh vsftpd-3.0.3-49.el9.x86_64.rpm
警告:vsftpd-3.0.3-49.el9.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID fd431d51: NOKEY
Verifying... ################################# [100%]
准备中... ################################# [100%]
正在升级/安装...
1:vsftpd-3.0.3-49.el9 ################################# [100%]
[root@server ~]#
这样就把vsftpd-3.0.3-49.el9.x86_64.rpm安装好了。如果是第一次接触Linux会感觉到奇怪,怎么不像Windows一样让我们通过浏览来指定路径,那么这个包安装到哪里了呢?
其实相信大家在Windows下都安装过chrome浏览器,基本上是秒安装也没有指定路径,因为这个安装包中已经定义好了安装路径了。同理rpm安装时也已经指定了安装路径了,把这个rpm打开看下,先复制到/opt目录中,命令如下。
[root@server ~]# cp vsftpd-3.0.3-49.el9.x86_64.rpm /opt/
[root@server ~]# cd /opt/
[root@server opt]# ls
vsftpd-3.0.3-49.el9.x86_64.rpm
[root@server opt]#
解开此包,命令如下。
[root@server opt]# rpm2cpio vsftpd-3.0.3-49.el9.x86_64.rpm | cpio -id
706 块
[root@server opt]# ls
etc usr var vsftpd-3.0.3-49.el9.x86_64.rpm
[root@server opt]#
可以看到,这里生成了3个目录etc、usr、var,看一下它们的结构,如下所示。
[root@server opt]# tree
.
├── etc
│ ├── logrotate.d
│ │ └── vsftpd
│ ├── pam.d
│ │ └── vsftpd
│ └── vsftpd
│ ├── ftpusers
│ ├── user_list
│ ├── vsftpd.conf
│ └── vsftpd_conf_migrate.sh
├── usr
│ ├── lib
...输出...
├── var
│ └── ftp
│ └── pub
└── vsftpd-3.0.3-49.el9.x86_64.rpm
27 directories, 48 files
[root@server opt]# cd
[root@server ~]#
这里可以看到,当我们安装rpm包时,他就会把包中的东西按照这个结构拷贝到我们系统,所以安装的路径都是安排好了的。
22.1 rpm查询
如果要查询已经安装过软件包的信息,rpm的第一个选项需要使用q,表示查询的意思。
查询系统安装的所有软件包rpm -qa,命令如下。
[root@server ~]# rpm -qa
....
[root@server ~]#
查询系统是否安装了某个软件包 rpm -qa 包名,例如,要查询是否安装了vsftpd,命令如下。
[root@server ~]# rpm -qa vsftpd
vsftpd-3.0.3-49.el9.x86_64
[root@server ~]#
但是这种用法,在写包名时多一个或少一个字符都查询不出来,如下所示。
[root@server ~]# rpm -qa vsftp
[root@server ~]#
所以,更建议用管道和grep进行过滤,如下所示。
[root@server ~]# rpm -qa | grep vsftp
vsftpd-3.0.3-49.el9.x86_64
[root@server ~]#
查询安装某软件包之后所生成的文件,则用"rpm -ql 包名"查询,这里q后面是字母l。比如要查询vsftpd所生成的文件,命令如下。
[root@server ~]# rpm -ql vsftpd
/etc/logrotate.d/vsftpd
/etc/pam.d/vsftpd
/etc/vsftpd
/etc/vsftpd/ftpusers
...输出...
/var/ftp
/var/ftp/pub
[root@server ~]#
这样就可以看到安装vsftpd时都安装到哪里去了。
查看软件包生成的配置文件 用rpm -qc 包名,命令如下。
[root@server ~]# rpm -qc vsftpd
/etc/logrotate.d/vsftpd
/etc/pam.d/vsftpd
/etc/vsftpd/ftpusers
/etc/vsftpd/user_list
/etc/vsftpd/vsftpd.conf
[root@server ~]#
查看包的信息,用rpm -qi 包名,命令如下。
[root@server ~]# rpm -qi vsftpd
Name : vsftpd
Version : 3.0.3
Release : 49.el9
Architecture: x86_64
...输出...
Summary : Very Secure Ftp Daemon
Description :
vsftpd is a Very Secure FTP daemon. It was written completely from
scratch.
[root@server ~]#
当我们安装软件包时会产生许多文件,反过来想查询某个文件是由哪个软件包安装出来的用rpm -qf /path/file,命令如下。
[root@server ~]# rpm -qf /etc/vsftpd/vsftpd.conf
vsftpd-3.0.3-49.el9.x86_64
[root@server ~]#
可以看到,/etc/vsftpd/vsftpd.conf是由vsftpd这个包产生的。
[root@server ~]# rpm -qf /etc/passwd
setup-2.13.7-6.el9.noarch
[root@server ~]#
/etc/passwd这个文件是由安装setup这个包生成的。
以上这些都是针对已经安装了软件包进行查询,如果对安装包,则需要加p选项,命令如下。
[root@server ~]# rpm -qcp vsftpd-3.0.3-49.el9.x86_64.rpm
警告:vsftpd-3.0.3-49.el9.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID fd431d51: NOKEY
/etc/logrotate.d/vsftpd
/etc/pam.d/vsftpd
/etc/vsftpd/ftpusers
/etc/vsftpd/user_list
/etc/vsftpd/vsftpd.conf
[root@server ~]#
当然在RHEL9/centos9中不加p也可以,之前的系统是不行的。
22.2 rpm安装及卸载
前面已经介绍了用rpm -ivh安装包安装软件,且vsftpd已经安装完成,如下所示。
[root@server ~]# rpm -qa | grep vsftpd
vsftpd-3.0.3-49.el9.x86_64
[root@server ~]#
卸载软件包用的命令是rpm -e 软件包,现在要把vsftpd卸载掉,命令如下。
[root@server ~]# rpm -e vsftpd
[root@server ~]# rpm -qa | grep vsftpd
[root@server ~]#
可以看到,现在已经不存在了,再次把这个包安装上去。
[root@server ~]# rpm -ivh vsftpd-3.0.3-49.el9.x86_64.rpm
警告:vsftpd-3.0.3-49.el9.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID fd431d51: NOKEY
Verifying... ################################# [100%]
准备中... ################################# [100%]
正在升级/安装...
1:vsftpd-3.0.3-49.el9 ################################# [100%]
[root@server ~]#
有时需要强制安装软件,例如,某个包已经安装过了现在想重新安装,命令如下。
[root@server ~]# rpm -ivh vsftpd-3.0.3-49.el9.x86_64.rpm
警告:vsftpd-3.0.3-49.el9.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID fd431d51: NOKEY
Verifying... ################################# [100%]
准备中... ################################# [100%]
软件包 vsftpd-3.0.3-49.el9.x86_64 已经安装
[root@server ~]#
这里提示包已经安装过了,没法再次安装。如果加上–force选项强制安装即可。
一般情况下,用于某个文件丢失了,想通过强制重新安装来找回此文件,命令如下。
[root@server ~]# rm -rf /etc/vsftpd/vsftpd.conf
[root@server ~]# ls /etc/vsftpd/
ftpusers user_list vsftpd_conf_migrate.sh
[root@server ~]#
这里把/etc/vsftpd/vsftpd.conf删除,然后开始强制安装,命令如下。
[root@server ~]# rpm -ivh vsftpd-3.0.3-49.el9.x86_64.rpm --force
警告:vsftpd-3.0.3-49.el9.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID fd431d51: NOKEY
Verifying... ################################# [100%]
准备中... ################################# [100%]
正在升级/安装...
1:vsftpd-3.0.3-49.el9 ################################# [100%]
[root@server ~]#
然后再次查看文件。
[root@server ~]# ls /etc/vsftpd/
ftpusers user_list vsftpd.conf vsftpd_conf_migrate.sh
[root@server ~]#
这里又重新生成了被删除的文件,其他文件原来即使做了修改这里也不会被覆盖替换。
23.3 软件包的更新
所谓的更新就是卸载旧版本的软件包,然后安装新版本的软件包。假设原来系统已经安装了1.0版本的软件包,现在要安装2.0版本的软件包,如果两个版本的包安装路径不一样,则可以两个共存,如果两个版本的包安装路径一样,则就会产生冲突。
先卸载已经安装了的vsftpd,命令如下。
[root@server ~]# rpm -e vsftpd
[root@server ~]#
然后从centos官网下载一个版本更高的vsftpd的安装包,下载地址如下:
https://mirror.stream.centos.org/9-stream/AppStream/x86_64/os/Packages/vsftpd-3.0.5-5.el9.x86_64.rpm
然后查看当前目录下vsftpd的安装包,命令如下。
[root@server ~]# ls -1 vsftpd*
vsftpd-3.0.5-5.el9.x86_64.rpm
vsftpd-3.0.3-49.el9.x86_64.rpm
[root@server ~]#
上面ls 后面的选项是数字1,不是字母l,这里一个版本稍低,一个版本稍高。先把低版本的包安装上去,命令如下。
[root@server ~]# rpm -ivh vsftpd-3.0.3-49.el9.x86_64.rpm
警告:vsftpd-3.0.3-49.el9.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID fd431d51: NOKEY
Verifying... ################################# [100%]
准备中... ################################# [100%]
正在升级/安装...
1:vsftpd-3.0.3-49.el9 ################################# [100%]
[root@server ~]#
这里已经安装了一个3.0.3-49的包,然后还有一个更高版本的3.0.5-5包,命令如下。
[root@server ~]# rpm -ivh vsftpd-3.0.5-5.el9.x86_64.rpm
警告:vsftpd-3.0.5-5.el9.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID fd431d51: NOKEY
Verifying... ################################# [100%]
准备中... ################################# [100%]
file /etc/vsftpd/vsftpd.conf from install of vsftpd-3.0.5-5..el9.x86_64 conflicts with file from package vsftpd-3.0.3-49.el9.x86_64
...输出...
file /usr/sbin/vsftpd from install of vsftpd-3.0.5-5.el9.x86_64 conflicts with file from package vsftpd-3.0.3-49.el9.x86_64
[root@server ~]#
因为安装路径一样,所以这里提醒产生了冲突导致没安装成功,如果们用更新的方法来安装就是可以的,更新的用法是rpm -Uvh 安装包,下面更新vsftpd,命令如下。
[root@server ~]# rpm -Uvh vsftpd-3.0.5-5.el9.x86_64.rpm
警告:vsftpd-3.0.5-5.el9.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID fd431d51: NOKEY
Verifying... ################################# [100%]
准备中... ################################# [100%]
正在升级/安装...
1:vsftpd-3.0.5-5.el9 ################################# [ 50%]
正在清理/删除...
2:vsftpd-3.0.3-49.el9 ################################# [100%]
[root@server ~]#
现在已经更新成功,查看命令如下。
[root@server ~]# rpm -qa | grep vsftpd
vsftpd-vsftpd-3.0.5-5.el9.x86_64
[root@server ~]#
可以看到,这里安装的是3.0.5-5版本的包。
对于内核来说,不同版本的安装路径是不一样的,所以是可以同时安装多个版本的不会产生冲突。所以,更新内核时建议使用 rpm -ivh 命令而不是rpm -Uvh。因为rpm -Uvh会卸载老版本的内核,如果新版本的内核有问题就没法正常进入系统了,如果使用rpm -ivh,包括版本的内核同时存在,先用新版本的内核引导系统,如果没问题再卸载旧版本的内核也不迟,如果有问题还可以使用旧版本内核引导系统。
22.4 rpm验证
当我们安装了一个软件包之后会产生许多文件,我们要是想判断这些文件是否被做过修改,我们可以用rpm -V(大写字母V),例如,我们刚刚安装了vsftpd,并没有修改任何的配置文件。
[root@server ~]# rpm -V vsftpd
[root@server ~]#
没任何结果显示,说明此vsftpd所生成的文件没有被修改。现在用vim 编辑器修改下/etc/vsftpd/vsftpd.conf,随便增添删减一些内容(最好是修改注释后面的东西,否则影响vsftpd启动),然后再次来判断,命令如下。
[root@server ~]# rpm -V vsftpd
S.5....T. c /etc/vsftpd/vsftpd.conf
[root@server ~]#
再次检查可以看到/etc/vsftpd/vsftpd.conf被修改过。
S:指的是大小。
5:指的是md5值。
T:指的是时间。
c:指的是此文件是vsftpd的配置文件。
这样就可以看到哪些文件被修改过了,只修改时间的命令如下。
[root@server ~]# touch /etc/vsftpd/ftpusers
[root@server ~]# rpm -V vsftpd
.......T. c /etc/vsftpd/ftpusers
S.5....T. c /etc/vsftpd/vsftpd.conf
[root@server ~]#
可以看到,/etc/vsftpd/ftpusers的时间发生了改变。
红帽发行的每一个数据包都对它做了数据签名,以证明这个包是红帽官方的。需要在本机用红帽的公钥来进行验证。首先验证机器上是否安装了红帽的公钥,命令如下。
[root@server ~]# rpm -qa | grep pubkey
[root@server ~]#
没结果显示,说明没有导入红帽的公钥。使用如下命令导入公钥,命令如下。
[root@server ~]# rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release
[root@server ~]#
或者导入存储在光盘中的公钥。
[root@server ~]# rpm --import /mnt/RPM-GPG-KEY-redhat-release
[root@server ~]#
再次检查公钥的信息,命令如下。
[root@server ~]# rpm -qa | grep pubkey
gpg-pubkey-fd431d51-4ae0493b
gpg-pubkey-d4082792-5b32db75
[root@server ~]#
可以看到,已经成功导入了,下面验证下面的两个vsftpd包,命令如下。
[root@server ~]# rpm -K vsftpd-3.0.3-49.el9.x86_64.rpm
vsftpd-3.0.3-49.el9.x86_64.rpm: digests signatures 确定
[root@server ~]#
这个包是一开始从光盘中拷贝过来的,可以看到验证通过。
[root@server ~]# rpm -K vsftpd-3.0.5-5.el9.x86_64.rpm
vsftpd-3.0.5-5.el9.x86_64.rpm: digests SIGNATURES 不正确
[root@server ~]#
这个包是从centos网站下载下来的,用红帽的的公钥进行验证,所以可以看到是没有验证通过的。
作业
作业题在server2上完成。
**作业1:**判断server2上是否安装了软件包net-tools。
**作业2:**请判断/etc/hosts是安装了哪个数据包产生出来的。
**作业3:**sshpass的作用是可以无密码登录到远端机器,用法是:
sshpass -p 密码 ssh IP/主机名
这样就可以无需输入密码即可ssh到远端主机上了。
通过如下命令下载软件包sshpass:
1-先挂载光盘到/mnt
mount /dev/cdrom /mnt
2-安装软件包
rpm -ivh /mnt/AppStream/Packages/sshpass-<按tab键补齐>
并安装此软件包,最后测试用sshpass命令ssh到192.168.26.103上。