在Windows系统下安装软件很简单,双击后缀为.exe的文件不停下一步即可,但在Linux系统下面并不是那么简单。
Linux系统有三种安装软件的方式:RPM工具、yum工具、安装源码包。
RPM是Red Hat Package Manager的缩写,由Red Hat公司开发。Linux系统中存在着一个关于RPM的数据库,记录着安装的包以及包与包之间的依赖关系,RPM包是预先在Linux机器上编译并打包的文件。
每个RPM包的名称都由 . 和 - 分成了若干部分,RPM包格式:包名、版本信息、发布版本号、运行平台。
常见的运行平台有:32位:i386、i586、i686;64位:x86_64。CentOS7不区分32位和64位,全部为64位。
安装RPM包的命令如下:
[root@localhost ~]# mount /dev/cdrom /mnt
mount: /dev/sr0 写保护,将以只读方式挂载
[root@localhost ~]# ls /mnt/
CentOS_BuildTag EULA images LiveOS repodata RPM-GPG-KEY-CentOS-Testing-7
EFI GPL isolinux Packages RPM-GPG-KEY-CentOS-7 TRANS.TBL
[root@localhost ~]# cd /mnt/Packages/
[root@localhost Packages]# rpm -ivh libjpeg-turbo-1.2.90-5.el7.x86_64.rpm
准备中… ################################# [100%]
正在升级/安装…
1:libjpeg-turbo-1.2.90-5.el7 ################################# [100%]
在安装RPM包之前,需要挂载光驱(光驱是以只读方式挂载的)到 /mnt。当挂载光驱后,会在 /mnt/Packages目录下看到很多后缀为 .rpm的文件,即RPM包
上面RPM命令各项的含义:
-i 表示安装
-v 表示可视化
-h 表示显示安装进度
–force 表示强制安装,即使覆盖属于其他包的文件也要安装
–nodeps 表示当要安装的RPM包依赖于其他包时,即使其他包没有安装,也要安装这个包
升级RPM包 : rpm -Uvh filename ,其中 -U选项表示升级
[root@localhost Packages]# rpm -Uvh vim*
准备中… ################################# [100%]
卸载RPM包 : rpm -e 包名 ,其中 -e选项表示卸载(这里的包名不需要带平台信息和后缀名)
[root@localhost Packages]# rpm -e libjpeg-turbo
[root@localhost Packages]# rpm -ivh libjpeg-turbo*
准备中… ################################# [100%]
正在升级/安装…1:libjpeg-turbo-1.2.90-5.el7 ################################# [100%]
查询一个RPM包 :rpm -q 包名
[root@localhost Packages]# rpm -q libjpeg-turbo
未安装软件包 libjpeg-turbo
[root@localhost Packages]# rpm -ivh libjpeg-turbo*
准备中… ################################# [100%]
正在升级/安装…
1:libjpeg-turbo-1.2.90-5.el7 ################################# [100%]
[root@localhost Packages]# rpm -q libjpeg-turbo
libjpeg-turbo-1.2.90-5.el7.x86_64
查询当前系统所有已安装的RPM包 :rpm -qa
[root@localhost Packages]# rpm -qa |tail
perl-Time-Local-1.2300-2.el7.noarch
fxload-2002_04_11-16.el7.x86_64
perl-PathTools-3.40-5.el7.x86_64
perl-threads-shared-1.43-6.el7.x86_64
dmidecode-3.0-5.el7.x86_64
perl-Getopt-Long-2.40-3.el7.noarch
kbd-legacy-1.15.5-13.el7.noarch
gpm-libs-1.20.7-5.el7.x86_64
unzip-6.0-19.el7.x86_64
cpp-4.8.5-28.el7_5.1.x86_64
查询一个已安装的RPM包的相关信息:rpm -qi 包名
[root@localhost Packages]# rpm -qi libjpeg-turbo
Name : libjpeg-turbo
Version : 1.2.90
Release : 5.el7
Architecture: x86_64
Install Date: 2018年05月27日 星期日 20时49分17秒
Group : System Environment/Libraries
Size : 350387
License : IJG
Signature : RSA/SHA256, 2014年07月04日 星期五 10时55分27秒, Key ID 24c6a8a7f4a80eb5
Source RPM : libjpeg-turbo-1.2.90-5.el7.src.rpm
Build Date : 2014年06月10日 星期二 11时48分52秒
Build Host : worker1.bsys.centos.org
Relocations : (not relocatable)
Packager : CentOS BuildSystem http://bugs.centos.org
Vendor : CentOS
URL : http://sourceforge.net/projects/libjpeg-turbo
Summary : A MMX/SSE2 accelerated library for manipulating JPEG image files
Description :
The libjpeg-turbo package contains a library of functions for manipulating
JPEG images.
查询一个RPM包的安装文件:rpm -ql 包名
[root@localhost Packages]# rpm -ql libjpeg-turbo
/usr/lib64/libjpeg.so.62
/usr/lib64/libjpeg.so.62.1.0
/usr/share/doc/libjpeg-turbo-1.2.90
/usr/share/doc/libjpeg-turbo-1.2.90/ChangeLog.txt
/usr/share/doc/libjpeg-turbo-1.2.90/README
/usr/share/doc/libjpeg-turbo-1.2.90/README-turbo.txt
/usr/share/doc/libjpeg-turbo-1.2.90/change.log
查询某个文件属于哪个RPM包:rpm -qf 文件的绝对路径
[root@localhost Packages]# rpm -qf /usr/lib64/libjpeg.so.62.1.0
libjpeg-turbo-1.2.90-5.el7.x86_64
[root@localhost Packages]# rpm -qfwhich cd
bash-4.2.46-30.el7.x86_64
上面which cd
使用了反引号,可以直接表示cd命令的绝对路径,反引号可以直接引用反引号里面命令的结果
yum工具比RPM工具使用方便,因为yum工具可以联网去下载所需要的RPM包,然后自动安装,即使要安装的RPM包有依赖关系也会自动依次安装所有相关的RPM包
列出所有可用的RPM包:yum list
[root@localhost Packages]# yum list |head -n 10
已加载插件:fastestmirror
Loading mirror speeds from cached hostfile
* base: mirrors.cn99.com
* epel: mirrors.ustc.edu.cn
* extras: mirrors.cn99.com
* updates: mirrors.cn99.com
已安装的软件包
GeoIP.x86_64 1.5.0-11.el7 @anaconda
NetworkManager.x86_64 1:1.10.2-13.el7 @base
NetworkManager-libnm.x86_64 1:1.10.2-13.el7 @base
由于管道被破坏而退出
[root@localhost Packages]#
[root@localhost Packages]# yum list |tail
zulucrypt-doc.noarch 5.0.1-1.el7 epel
zulucrypt-libs.x86_64 5.0.1-1.el7 epel
zvbi.x86_64 0.2.35-1.el7 epel
zvbi-devel.x86_64 0.2.35-1.el7 epel
zvbi-fonts.noarch 0.2.35-1.el7 epel
zziplib.i686 0.13.62-5.el7 base
zziplib.x86_64 0.13.62-5.el7 base
zziplib-devel.i686 0.13.62-5.el7 base
zziplib-devel.x86_64 0.13.62-5.el7 base
zziplib-utils.x86_64 0.13.62-5.el7 base
上面例子中可以看到,貌似yum list 管道和head组合有bug,而和tail组合则没有问题。同时,上面显示结果中最左侧为RPM包名,中间是版本信息,最右侧是安装信息。
如果已安装,最右侧则显示 @base、@updates、@anaconda,前面都有一个@符号;
如果未安装,则显示base、anaconda或epel;
如果已安装但需要升级,则显示updates。
搜索RPM包:yum search [相关关键词]
[root@localhost Packages]# yum search vim
已加载插件:fastestmirror
Loading mirror speeds from cached hostfile
* base: mirrors.cn99.com
* epel: mirrors.tuna.tsinghua.edu.cn
* extras: mirrors.cn99.com
* updates: mirrors.cn99.com
=========================================== N/S matched: vim ===========================================
beakerlib-vim-syntax.noarch : Files for syntax highlighting BeakerLib tests in VIM editor
fluxbox-vim-syntax.noarch : Fluxbox syntax scripts for vim
neovim.x86_64 : Vim-fork focused on extensibility and agility
protobuf-vim.x86_64 : Vim syntax highlighting for Google Protocol Buffers descriptions
python2-neovim.noarch : Python client to Neovim
python34-neovim.noarch : Python client to Neovim
vim-X11.x86_64 : The VIM version of the vi editor for the X Window System
vim-common.x86_64 : The common files needed by any version of the VIM editor
vim-enhanced.x86_64 : A version of the VIM editor which includes recent enhancements
名称和简介匹配 only,使用“search all”试试。
还可以这样搜索:yum list |grep ‘yum’
[root@localhost Packages]# yum list |grep ‘vim’
vim-common.x86_64 2:7.4.160-4.el7 @base
vim-enhanced.x86_64 2:7.4.160-4.el7 @base
vim-filesystem.x86_64 2:7.4.160-4.el7 @base
vim-minimal.x86_64 2:7.4.160-4.el7 @base
beakerlib-vim-syntax.noarch 1.17-13.el7 epel
fluxbox-vim-syntax.noarch 1.3.7-1.el7 epel
neovim.x86_64 0.2.0-2.el7 epel
protobuf-vim.x86_64 2.5.0-8.el7 base
python2-neovim.noarch 0.1.13-3.el7 epel
python34-neovim.noarch 0.1.13-3.el7 epel
vim-X11.x86_64 2:7.4.160-4.el7 base
vim-fugitive.noarch 2.2-8.el7 epel
vim-go.x86_64 1.8-3.el7 epel
vim-gtk-syntax.noarch 20130716-1.el7 epel
vim-halibut.noarch 1.2-1.el7 epel
vim-jellybeans.noarch 1.6-1.el7 epel
vim-toml.noarch 0-0.1.20180306git624f024.el7 epel
vim-vimoutliner.noarch 0.4.0-8.el7 epel
xtuple-csvimp.x86_64 0.5.4-8.el7 epel
xtuple-csvimp-devel.x86_64 0.5.4-8.el7 epel
这个显示结果比上面一条命令更加清晰,也会高亮显示相关关键词
安装RPM包:yun install [-y] [RPM包名] ,如果不加 -y选项,则会以与用户交互的方式安装
[root@localhost Packages]# yum install -y protobuf-vim
已加载插件:fastestmirror
Loading mirror speeds from cached hostfile
epel/x86_64/metalink | 6.4 kB 00:00:00
* base: mirrors.cn99.com
* epel: mirrors.ustc.edu.cn
* extras: mirrors.cn99.com
* updates: mirrors.cn99.com
base | 3.6 kB 00:00:00
extras | 3.4 kB 00:00:00
updates | 3.4 kB 00:00:00
正在解决依赖关系
–> 正在检查事务
—> 软件包 protobuf-vim.x86_64.0.2.5.0-8.el7 将被 安装
–> 解决依赖关系完成
依赖关系解决
Package 架构 版本 源 大小
正在安装:
protobuf-vim x86_64 2.5.0-8.el7 base 8.7 k
事务概要
安装 1 软件包
总下载量:8.7 k
安装大小:3.7 k
Downloading packages:
protobuf-vim-2.5.0-8.el7.x86_64.rpm | 8.7 kB 00:00:00
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
警告:RPM 数据库已被非 yum 程序修改。
正在安装 : protobuf-vim-2.5.0-8.el7.x86_64 1/1
验证中 : protobuf-vim-2.5.0-8.el7.x86_64 1/1
已安装:
protobuf-vim.x86_64 0:2.5.0-8.el7
完毕!
卸载RPM包:yum remove [-y] [RPM包名] ,如果不加 -y选项,则会以与用户交互的方式卸载
[root@localhost Packages]# yum remove protobuf-vim
已加载插件:fastestmirror
正在解决依赖关系
–> 正在检查事务
—> 软件包 protobuf-vim.x86_64.0.2.5.0-8.el7 将被 删除
–> 解决依赖关系完成
依赖关系解决
Package 架构 版本 源 大小
正在删除:
protobuf-vim x86_64 2.5.0-8.el7 @base 3.7 k
事务概要
移除 1 软件包
安装大小:3.7 k
是否继续?[y/N]:y
Downloading packages:
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
正在删除 : protobuf-vim-2.5.0-8.el7.x86_64 1/1
验证中 : protobuf-vim-2.5.0-8.el7.x86_64 1/1
删除:
protobuf-vim.x86_64 0:2.5.0-8.el7
完毕!
使用yum卸载时需要注意,不要连其他关联的重要的RPM包也一起卸载了,这样会影响正常业务
升级RPM包:yum update [-y] [RPM包名] ,如果不加 -y选项,则会以与用户交互的方式升级;如果不加RPM包名,则会更新所有需要更新的RPM包
[root@localhost Packages]# yum update python-perf
已加载插件:fastestmirror
Loading mirror speeds from cached hostfile
* base: mirrors.163.com
* epel: mirrors.ustc.edu.cn
* extras: mirrors.163.com
* updates: mirrors.163.com
正在解决依赖关系
–> 正在检查事务
—> 软件包 python-perf.x86_64.0.3.10.0-862.2.3.el7 将被 升级
—> 软件包 python-perf.x86_64.0.3.10.0-862.3.2.el7 将被 更新
–> 解决依赖关系完成
依赖关系解决
Package 架构 版本 源 大小
正在更新:
python-perf x86_64 3.10.0-862.3.2.el7 updates 6.2 M
事务概要
升级 1 软件包
总下载量:6.2 M
Is this ok [y/d/N]: y
Downloading packages:
Delta RPMs disabled because /usr/bin/applydeltarpm not installed.
python-perf-3.10.0-862.3.2.el7.x86_64.rpm | 6.2 MB 00:00:01
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
正在更新 : python-perf-3.10.0-862.3.2.el7.x86_64 1/2
清理 : python-perf-3.10.0-862.2.3.el7.x86_64 2/2
验证中 : python-perf-3.10.0-862.3.2.el7.x86_64 1/2
验证中 : python-perf-3.10.0-862.2.3.el7.x86_64 2/2
更新完毕:
python-perf.x86_64 0:3.10.0-862.3.2.el7
完毕!
交互选项y/d/N中d表示download only
另外:
yum grouplist 列出所有可用的组(环境分组、可用组)
yum groupinstall [-y] ‘可用组名’ 安装可用组
yum provides “/*/RPM包名” 通配搜索未安装的包名
[root@localhost ~]# mount /dev/cdrom /mnt
mount: /dev/sr0 写保护,将以只读方式挂载
- 删除 /etc/yum.repos.d目录下的所有的repo文件(删除之前,做一个备份)
cp -r /etc/yum.repos.d /etc/yum.repos.d.bak
rm -rf /rtc/yum.repos.d/*- 创建新文件dvd.repo
vim /etc/yum.repos.d/dvd.repo //加入以下内容
[dvd]
name=install dvd
baseurl=file:///mnt
enable=1
gpgcheck=0- 刷新repos生成缓存
yum cache 或者 yum clean all- 此时,可以查看是否为本地yum源
[root@localhost yum.repos.d]# yum list |tail
scap-security-guide.noarch 0.1.33-5.el7.centos dvd
screen.x86_64 4.1.0-0.23.20120314git3c2946.el7_2
dvd
sgpio.x86_64 1.2.0.10-13.el7 dvd
shim-x64.x86_64 12-1.el7.centos dvd
startup-notification.x86_64 0.12-8.el7 dvd
trousers.x86_64 0.3.14-2.el7 dvd
xcb-util.x86_64 0.4.0-2.el7 dvd
xml-common.noarch 0.6.3-39.el7 dvd
xulrunner.x86_64 31.6.0-2.el7.centos dvd- 可以看到,显示 RPM包的源均为 dvd,本地yum源制作完成
在此之前,我们需要先恢复之前的yum源:
[root@localhost etc]# rm -rf /etc/yum.repos.d
[root@localhost etc]# mv /etc/yum.repos.d_bak /etc/yum.repos.d
[root@localhost etc]# yum list
下载RPM包而不安装:
yum install [-y] 包名 –downloadonly
这里默认下载到 /var/cache/yum/x86_64/7/xxx/packages ,这里xxx指的是base、updatex或extras,它与yum list 最右侧的字符串是一致的
还可以这样下载,默认下载到当前目录:
yumdownloader 包名
如果需要下载的包已经安装,可以这样:
yum reinstall [-y] 包名 –downloadonly
在Linux下,安装源码包是比较常见的,安装源码包,需要我们把源代码编译成可执行的二进制文件。如果机器上没有安装C语言编译器gcc,就无法编译代码,可以使用命令yum install -y gcc来安装。
安装源码包通常需要3个步骤:
1. ./configure 这一步定制功能,加上相应选项即可
2. make 该命令会根据Makefile文件中预设的参数进行编译(gcc在工作)
3. make install 安装步骤,用于创建相关软件的存放目录和配置文件
下载源码包要到官方网站,且尽量下载到 /usr/local/src目录下
yum install -y wget \\ 安装wget
[root@localhost etc]# cd /usr/local/src
[root@localhost src]# wget http://mirrors.cnnic.cn/apache/httpd/httpd-2.4.33.tar.gz
–2018-05-29 19:39:12– http://mirrors.cnnic.cn/apache/httpd/httpd-2.4.33.tar.gz
正在解析主机 mirrors.cnnic.cn (mirrors.cnnic.cn)… 101.6.8.193, 2402:f000:1:408:8100::1
正在连接 mirrors.cnnic.cn (mirrors.cnnic.cn)|101.6.8.193|:80… 已连接。
已发出 HTTP 请求,正在等待回应… 200 OK
长度:9076901 (8.7M) [application/octet-stream]
正在保存至: “httpd-2.4.33.tar.gz”
100%[=========================================================================>] 9,076,901 5.24MB/s 用时 1.7s
2018-05-29 19:39:14 (5.24 MB/s) - 已保存 “httpd-2.4.33.tar.gz” [9076901/9076901])
解压 .tar.gz格式的压缩包
[root@localhost src]# tar -zxvf httpd-2.4.33.tar.gz
首先,进入解压后的源码目录:
[root@localhost src]# cd httpd-2.4.33
[root@localhost httpd-2.4.33]# ./configure –prefix=/usr/local/apache2 \\选择安装apache在/usr/local/apache2目录下
注意:这里除了下载 httpd-2.4.33.tar.gz ,还需要下载 apr-1.6.3.tar.gz 和 apr-util-1.6.1.tar.bz2 ,使用 yum install -y pcre-devel 来安装 pcre-devel,同时在 /usr/local/src/httpd-2.4.33/srclib 目录下编译、安装 apr 和 apr-util ,不断使用 echo $? 命令验证上条命令,这样才能正常编译安装 httpd-2.4.33 。
[root@localhost httpd-2.4.33]# ./configure –prefix=/usr/local/apache2 –with-apr=/usr/local/apr –with-apr-util=/usr/local/apr-1-config
生成Makefile后,需要进行编译:
[root@localhost httpd-2.4.33]# make
安装源码包的命令是make install
[root@localhost httpd-2.4.33]# make install
[root@localhost httpd-2.4.33]# ls /usr/local/apache2
bin build cgi-bin conf error htdocs icons include logs man manual modules
至此,可以看到,apache的源码安装完成了,在这个过程中,生成Makefile这一步很容易出错,这几步,每一步都应该验证一下是否正确执行命令