Linux中软件的安装主要有两种形式:一种是直接下载源代码包自行编译后安装,另一种直接获取rpm软件包进行安装。
程序的组成部分:
二进制程序:程序的主体文件,比如我们运行一个ls命令就是一个二进制程序。
库文件:程序的公用功能模块,比如A程序需要用一个打印机,B程序也需要一个打印机就可以公用这一个模块了。在window下库文件为.dll格式,linux下为/lib/*so格式的文件。
配置文件:通过设置配置文件来改变程序启动时的运行特征。
帮助手册:使用的帮助文档。
软件的默认安装路径:
除了自行下载源码编译安装的软件可以自定义安装路径之外,rpm包的安装都是按照自身预设的安装路径进行安装,主要有以下几类
1./:系统根目录,在此安装的文件通常是os在运行时需要调用到的程序2./usr:此目录下一般情况下是提供基本服务的软件3./usr/local:此目录下一般情况下是用户自行安装的第三方软件1、系统相关:
配置文件路径:/etc
二进制文件路径:/bin 、/sbin
库文件路径:/lib
2、系统提供功能服务相关
配置文件路径:/etc
二进制文件路径:/usr/bin /usr/sbin
库文件:/usr/lib
3、第三方软件:
配置文件路径/usr/local/etc
二进制文件路径:/usr/local/bin /usr/local/sbin
库文件:/usr/local/lib
4、帮助手册
主要都存放在/usr/share/man和/usr/local/share/man
在生产环境下: usr可以单独分区或者放到另一块硬盘上,软件和相关文件放在usr下重做系统或者换到另一台主机时可以直接运行。
注意:有些特殊的应用程序放置于libexec目录下
有些第三方程序安装在/opt目录中。
程序包管理器的功能:
在linux系统下安装程序时,需要将程序的不同文件放置在以上路径里面,或者更改相关系统配置文件指定到程序的目录下,如果有很多程序,配置文件有很多就大大降低了系统效率。手动安装到系统指定的目录下,就会很麻烦。所以程序包管理器的功能就是 将编译好的程序打包成一个文件或有限的几个文件,可用于实现便捷地安装、卸载、升级、查询、校验等程序管理功能;现在程序包管理器主要有2种: rpm和deb。程序包管理器也必须有以下功能:
1、程序的组成清单(每个程序包独有):例如windows下很多软件管理器里面的程序列表。
文件清单:例如程序的安装有哪些文件。
安装卸载时运行的脚本:例如在windows下的软件卸载程序。
2、数据库(公共)
程序名及版本
程序包之间依赖关系:程序间少了一个都运行不了。
功能说明:对应包基本功用是什么。例如windows下,QQ程序是聊天(功用)的,酷狗是听音乐的。
安装生产的各文件的文件路径及校验码信息:效验码信息是提示某某文件已经改变,防止文件给莫名篡改。程序包命名:程序包的版本命名:testapp-VERSION程序包-版本号VERSION:major.minor. releasemajor:主版本号:( 有重大更新,比如win xp ,win 7,win 8等等)minor:次版本号:(修复一些漏洞,功能等等)release:发行号,修订号 (修复小BUG,修订一些小小的东西)rpm包的命名:name-Major.Minor.Release-release.arch.rpm例:bash-4.3.2-1.X86_64.rpm-Release:rpm包自己的发行号,与源代码的发行号无关;仅用于标识对rpm自身的修订,有时候,此release可能还会包含适用的OS,例如bash-4.3.2-1.centos6.X86_64.rpmarch:使用的硬件平台x86:i386,i486,i586,i686等;x86_64:amd64:X86_64powerpc:ppcnoarch:跟硬件平台无关;
获取程序包的途径:
1、系统原发行光盘或者官方站点服务器;
2、程序项目官方站点;镜像:http://mirrours.sohu.com
如redhat官方网站
3、知名的有信誉的第三方组织或者搜索引擎;
搜索引擎:http://rpmfind.net,http://rpm.pbone.net,http://pkgs.org4、自己制作;建议:包安装之前要合法性验证
来源合法性包的完整性
程序包管理器RPM和Yum的关系:
RPM(全称为 RedhatPackage Manager)是由redhat公司提供的软件包管理器 ,可以实现软件包的安装、查询、卸载、升级以及校验等但是rpm不能很好的解决软件之间的依赖关系
Yum(全称为 Yellow dog Updater, Modified)是一个在Fedora和RedHat以及SUSE中的Shell前端软件包管理器。基於RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软体包,无须繁琐地一次次下载、安装。
系统程序包管理rpm的应用:
安装:-ivh,--nodeps,--replacepkgs卸载:-e,--nodeps升级:-Uvh,-Fvh,--nodeps,--oldpackage查询:-q,-qa,-ql,-qf,-qi,-qc,-qd,-q --changelogs,-q --provides,-q --requires校验:-v 来源合法性、完整性:--import,-K,--nodigest,--nosignature数据库重建:--initdb,--rebuilddb
安装: -ivh,--nodeps,--replacepkgs卸载: -e,--nodeps
123456rpm {-i|--install}[install-options] PACKAGE_FILE ...
{-i|--install} # -i或者长选项--install 安装
[install-options] # 安装选项,可省略的,需要用到就调用
PACKAGE_FILE: # rpm包文件
.... # 可以为多个
[install-options]: --replacepkgs: # 重新安装 <br> <br>--nodeps: # 忽略依赖关系 <br>--test: # 测试安装,而不执行真正的安装过程;dry run模式;
安装:-ivh,--nodeps,--replacepkgs
12345-ivh # 以进度条显示详细的安装信息
-v # 显示详细信息,可以用vv表示,多个v表示越多的详细信息
-h # 以进度条显示安装过程。
--nodeps # 忽略依赖关系。
--replacepsgs # 重新安装软件
12345rpm {-e|--erase}[--nodeps][--test] PACKAGE_NAME ...
rpm -e PACKAGE_NAME... # 直接卸载操作会卸载相应的依赖程序。
--nodeps # 忽略依赖关系
--test # 卸载测试可以先测试下会卸载哪些东西
注意:如果包的配置文件安装后曾被改动过,卸载时,此文件将不会删除,而是被重命名(源文件加.rpmsave后缀)并保留;
升级:-Uvh,-Fvh,--nodeps,--oldpackage
12345678rpm {-U|--upgrade}[install-options] PACKAGE_FILE ... # 直接升级安装,系统没有这软件也会安装
rpm {-F|--freshen}[install-options] PACKAGE_FILE ... # 升级安装,如果系统没有这软件就不会安装,只升级时一般用这个命令
[install-options]
--oldpackage # 降级安装
--force # 忽略冲突,强制执行过程;
注意:不要对内核包执行升级操作,可能重启导致不兼容而挂掉;linux支持多版本内核并存,因此,建议对新版本内核可直接安装;有些程序在升级时会有冲突。
注意:如果原程序包的配置文件安装后曾被改动,升级时,新版本的文件并不会直接覆盖老版本的文件,而是把新版本的文件重命(加后缀.rpmnew)名后保留;
查询:-q,-qa,-ql,-qf,-qi,-qc,-qd,-q --changelogs,-q --provides,-q --requires
12345678910111213141516rpm {-q|--query}[
select
-options][query-options]
[
select
-options]
1、rpm -q PACKAGE_NAME # 查询某包(程序)是否安装:
2、rpm -qa # 查询已安装的所有包
3、rpm -qf /path/to/somefile # 查询某文件是由哪个包安装生成
4、rmp -qpl PACKAGE_NAME # 查询尚未安装包的相关信息:
rmp -qpi PACKAGE_NAME # 查询尚未安装包的相关信息:
.....
[query-options]
1、rpm -qi PACKAGE_NAME # 查询某包的简要说明信息
2、rpm -ql PACKAGE_NAME # 查询某包安装后生成的所有文件的列表
3、rpm -qc PACKAGE_NAME # 查询某包安装后生成的所有配置文件的列表
4、rpm -qd PACKAGE_NAME # 查询某包安装后生成的所有帮助文件的列表
5、rpm -q --changelog PACKAGE_NAME # 查询某rpm包制作时随版本变化的changelog列表信息
6、rpm -q --provides PACKAGE_NAME # 查询某包提供的capabilities
7、rpm -q --requires PACKAGE_NAME # 查询某包所依赖的capabilities <br>8、rpm -q --scripts # 查询某包安装卸载时的脚本 <br> 安装卸载脚本有四种: <br> preinstall: 安装前执行的脚本 <br> postinstall: 安装后执行的脚本 <br> preuninstall: 卸载前执行的脚本 <br> postuninstall: 卸载后执行的脚本
校验:-v 来源合法性、完整性:--import,-K,--nodigest,--nosignature
1234567891011121314检查包安装之后生成的文件是否发生了改变
rpm {-V|--verify}[
select
-options][verify-options]
常用用法:rpm -V PACKAGE_NAME
显示信息:
S file Size differs # 文件大小发生改变
M Mode differs (includes permissions and file type) # 权限或文件类型发生改变
5 digest (formerly MD5 sum) differs # 内容发生改变
D Device major/minor number mismatch # 主设备号和次设备号不匹配
L readLink(2) path mismatch # 路径不匹配
U User ownership differs # 属主发生改变
G Group ownership differs # 属组发生改变
T mTime differs # 修改时间发生改变
P caPabilities differ # caPabilities发生改变
包来源合法性及完整性验证(安装或卸载时常用): <br> rpm --import PUBKEY ... # 导入公钥文件,必须先导入公钥文件才能完成校验 <br> rpm {-K|--checksig} [--nosignature] [--nodigest] PACKAGE_FILE ... <br> --nosignature:不检查来源合法性 <br> --nodigest:不检查完整性
数据库重建:--initdb,--rebuilddb
123rpm {--initdb|--rebuilddb}
--initdb # 初始化:如果事先不存在数据,则会更新,否则,不执行任何操作
--rebuilddb # 重建构建:无论当前是否已经存在的数据库,都会直接重建并覆盖现有数据库
系统程序包管理yum的应用:yum是YellowdogUpdater Modified的缩写,它是一种基于自身软件库的安装,它可以通过查询软件库的连接ftp:// http://file:///(本地,最后一斜线是本地根路径)在远程服务器或者指定的本地文件库中获取要安装的软件包,可见软件库的配置在yum的使用中是非常重要的一环。并且yum是基于rpm的一个管理工具,它能自动解决安装rpm包产生的依赖关系。yum repository :yum仓库存储了众多rpm包,以及包的相关元数据的文件(放在repodata目录中)服务器yum客户端:配置文件:指向仓库的位置以及各种配置信息,每个yum客户可以有多个可用的yum仓库:yum的公共配置文件 /etc/yum.confyum repository仓库的配置文件/etc/yum.repos.d/*.repoyum的公共配置文件 /etc/yum.conf 描述: 参考 http://www.cnblogs.com/mchina/archive/2013/01/04/2842275.html
12345678910111213141516171819202122232425vim /etc/yum.conf
[main]
#[]表示对哪一段生效,main表示对所有的生效
cachedir=/
var
/cache/yum/$basearch/$releasever
#cachedir:yum缓存的目录,yum在此存储下载的rpm包和数据库,一般是/var/cache/yum/$basearch/$releasever
keepcache=0
#保存缓存,为0不保存,为1就会保存
debuglevel=2
#debuglevel:除错级别,0──10,默认是2 貌似只记录安装和删除记录
logfile=/
var
/log/yum.log
#日志文件
exactarch=1
#exactarch,有两个选项1和0,代表是否只升级和你安装软件包cpu体系一致的包,如果设为1,则如你安装了一个i386的rpm,则yum不会用1686的包来升级。
obsoletes=1
#这是一个update 的参数,具体请参阅yum(8),简单的说就是相当于upgrade,允许更新陈旧的RPM包。
gpgcheck=1
#gpgchkeck= 有1和0两个选择,分别代表是否是否进行gpg校验,如果没有这一项,默认是检查的。
plugins=1
#是否启用插件,默认1为允许,0表示不允许。我们一般会用yum-fastestmirror这个插件。
installonly_limit=5
bugtracker_url=http:
//bugs.centos.org/set_project.php?project_id=19&ref=http://bugs.centos.org/bug_report_page.php?category=yum
distroverpkg=centos-release
# PUT YOUR REPOS HERE OR IN separate files named file.repo
#如果需要自定义仓库,可以添加在本配置文件中 <br># in /etc/yum.repos.d
#或者放在/etc/yum.repos.d/目录下后缀名为.repo的文件
yum repository仓库的配置文件/etc/yum.repos.d/*.repo描述:
123456[
base
-debuginfo] # 仓库名
name=CentOS-6-Debuginfo # 描述信息
baseurl=http:
//debuginfo.centos.org/6/$basearch/ # 访问路径,可以指向多个
gpgcheck=1 # 检查此仓库文件完整性和来源合法性
gpgkey=file:
///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-Debug-6 # 指向密钥路径
enabled=0 # 是否启用此仓库
yum仓库相关的命令:仓库查看:repolist(所有仓库),list(程序包),grouplist(所有包组)
1234567yum repolist # 列出所有可用仓库
yum list {all|installed|available} # 列出所有程序包:可以使用通配符globbing
yum grouplist # 列出所有包组
缓存管理:
缓存文件:
var
/cache/yum
yum clean {all|packages}
yum makecache 生成缓存
yum 命令yum [options] [command] [package(包) ...]安装:install,reinstall卸载:erase|remove(都可以使用)升级:update,downgrade(卸载),check-update(可用升级)查询:list,info,search(模糊匹配),provides(指定路径)包组:grouplist(所有包组),groupinfo "包组名称",groupinstall(安装)"GROUP_NAME",yum install @GROUP_NAME,remove@(卸载),groupremove(卸载)选项:--enablerepo=,--disablerepo=,-y:自动回答为yes,--nogpgcheck构建仓库:createrepo安装:install,reinstall
123yum install PACKAGE_NAME # 安装语法
yum install PUBKEY_VERSION # 如果要安装指定版本的程序
yum reinstall PACKAGE_NAME # 重装指定的程序包
卸载:erase|remove(都可以使用)
1
|
yum erase | remove PACKAGE_NAME #依赖于指定程序包的其他包,会被一并卸载;
|
1
2
3
4
|
yum update PACKAGE_NAME # 默认格式,直接升级
yum update PUBKEY_VERSION # 如果有多个版本的升级包可用,可以升级到指定版本
yum downgrade PACKAGE_NAME # 可以降级到指定版本
yum check-update # 检查可用升级
|
1
2
3
4
|
yum list # yum仓库内所有可安装程序包,可以使用通配符globbing
yum info PACKAGE_NAME # 显示指定程序包的摘要信息
yum search KEYWORD # 根据关键字模糊查询报名或包的sumary信息包含此KEYWORD的相关列表
yum provides|whatprovides /path/to/somefile # 查看文件是由哪个包生成的。
|
1
2
3
4
5
6
7
8
|
yum grouplist # 显示所有的包组
yum groupinfo
"GROUP_NAME"
# 显示某包组的相关信息:
安装包组:
yum groupinstall
"GROUP_NAME"
yum install @GROUP_NAME
卸载包组:
yum groupremove
"GROUP_NAME"
yum remove @GROUP_NAME
|
1
2
3
4
5
6
7
8
|
yum localinstall /path/to/rpm_package_file...
yum install /path/to/rpm_package_file...
选项:--enablerepo=,--disablerepo=,-y:自动回答为yes,--nogpgcheck
--enablerepo=# 启用指定的yum仓库
--disablerepo=# 禁用指定的yum仓库
注意:优先级高于/etc/yum.repos.d/*.repo配置文件中定义的属性;
-y # 自动回答为yes,
--nogpgcheck # 不要检查包来源性和合法性
|
1
2
3
|
createrepo [options]<directory>
-g:给创建的包分组
createrepo <directory>可以直接安装
|
1
2
3
4
5
|
yum -y install @DevelopmentTools
...
yum -y install @ServerPlatformDevelopment
...
注:本人在centos6.6测试,如这命令不行可以使用yum groupinstall
"GROUP_NAME"
|
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
|
[root@localhost ~]# tar -jxf httpd-2.2.25.tar.bz2 # 解压缩源码包文件到当前目录下
[root@localhost ~]# cd httpd-2.2.25# 进入到该目录下
[root@localhost httpd-2.2.25]# ll # 列出改文件目录
total 1152
-rw-r--r--150050014882Nov222004 ABOUT_APACHE
-rw-r--r--150050018613Jul62012 acinclude.m4
-rw-r--r--150050056952Oct62010Apache.dsw
drwxr-xr-x 65005004096Jun292013 build
-rw-r--r--15005002644Aug242007BuildAll.dsp
-rw-r--r--15005002692Jul302009BuildBin.dsp
-rwxr-xr-x 15005005786Sep192012 buildconf
-rw-r--r--1500500130367Jun282013 CHANGES
-rw-r--r--150050011701Feb282012 config.layout
-rwxr-xr-x 1500500572978Jun292013 configure # 检查编译环境的文件
-rw-r--r--150050024665Jun282013 configure.
in
drwxr-xr-x 95005004096Jun292013 docs
-rw-r--r--1500500403Nov222004 emacs-style
-rw-r--r--15005001248May72011 httpd.dep
-rw-r--r--15005004124Jun122008 httpd.dsp
-rw-r--r--15005008994May72011 httpd.mak
-rw-r--r--150050012053Jun292013 httpd.spec
drwxr-xr-x 25005004096Jun292013 include
-rw-r--r--15005004372Jan182012 INSTALL
-rw-r--r--15005002909Dec82006InstallBin.dsp
-rw-r--r--15005005145Nov292005 LAYOUT
-rw-r--r--150050030119May72011 libhttpd.dep
-rw-r--r--150050017039Jan122007 libhttpd.dsp
-rw-r--r--150050028503May72011 libhttpd.mak
-rw-r--r--150050028690Jan192008 LICENSE
-rw-r--r--15005008739Nov262008Makefile.
in
-rw-r--r--150050034725Oct62010Makefile.win
drwxr-xr-x 205005004096Jun292013 modules
-rw-r--r--1500500828Jan62013 NOTICE
-rw-r--r--150050012894Mar162012NWGNUmakefile
drwxr-xr-x 95005004096Jun292013 os
-rw-r--r--15005005954Jan102007 README
-rw-r--r--15005005332Oct142009 README.platforms
-rw-r--r--15005002553Dec212010 README-win32.txt
-rw-r--r--150050010183Mar142005 ROADMAP
drwxr-xr-x 35005004096Jun292013 server
drwxr-xr-x 55005004096Jun292013 srclib
drwxr-xr-x 45005004096Jun292013 support
drwxr-xr-x 25005004096Jun292013 test
-rw-r--r--15005008183Oct182005 VERSIONING
[root@localhost httpd-2.2.25]#./configure # 检查编译环境
|
1
2
3
4
|
./configure --help #脚本获取帮助
常用的选项:
--prefix=# 指定安装路径,多数程序都有默认安装路径;
--sysconfdir=# 指定配置文件安装路径;
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
[root@localhost httpd-2.2.25]#./configure --prefix=/opt/httpd --sysconfdir=/etc/httpd.conf
# 指定安装路径为/opt/httpd 配置文件路径为/etc/httpd.conf
checking
for
ANSI C header files... yes # 编译环境检测成功
checking
for
sys/types.h... yes
checking
for
sys/stat.h... yes
checking
for
stdlib.h... yes
checking
for
string
.h... yes
.....
config.status: creating build/pkg/pkginfo
config.status: creating build/config_vars.sh
config.status: creating include/ap_config_auto.h
config.status: executing
default
commands
[root@localhost httpd-2.2.25]#make # 在当前目录开始编译
.....
[root@localhost httpd-2.2.25]#make install # 编译成功后开始安装
.....
[root@localhost httpd-2.2.25]# cd /opt/httpd/bin # 进入到安装好了的目录下
[root@localhost ~]#./httpd # 运行该进程,因为没有将该路径导入到PATH环境中,所以是这样子运行。
|