linux之软件安装

时间:2024-05-22 19:04:38

一、软件包管理简介

1)软件包分类

1、源码包

优点:

  • 开源, 如果有足够的能力, 可以修改源代码
  • 可以*选择所需的功能
  • 软件是编译安装, 所以更加适合自己的系统, 更加稳定也效率更高
  • 卸载方便

缺点:

  • 安装过程步骤较多, 尤其安装较大的软件集合时( 如LAMP环境搭建Linux Apache MySql Php ), 容易出现拼写错误
  • 编译过程时间较长, 安装比二进制安装时间长
  • 因为是编译安装, 安装过程中一旦报错新手很难解决

注:

①编译, 是将字符编码遵循 ASCII 转变为机器语言(0101)的过程。

反编译, 编译, 在理论上是不可逆转, 在编译过程中遵循一定规则, 而在反编译时难免造成代码损失, 而无法完全破解。

③windows 中的程序都是经过编译的, 看不到源代码, linux 中源码包是可以看到源代码, 安装时现编译安装。

2、二级制包( RPM包, 系统默认包 )

优点:

  • 包管理系统简单,只通过几个命令就可以实现包的安装,升级,查询和卸载
  • 安装速度比源码包快

缺点:

  • 经过编译,不再可以看到源代码
  • 功能选择不如源代码包灵活
  • 依赖性(就是装A的时候依赖B,得先装B才行)

3、脚本安装包

所谓的脚本安装包,就是把复杂的软件包安装过程写成了程序脚本,初学者可以执行程序脚本实现一键安装。但实际安装的还是源码包和二进制包。例如LAMP一键安装包。

优点:安装简单、快捷

缺点:完全丧失自定义性

注:在redhat中二进制包后缀是rpm,在ubuntu二进制包的后缀是deb。但是它们都是二进制包。

二、rpm命令管理

1) RPM包命名规则

1、来源

挂载光盘

[root@localhost ~]# mkdir /mnt/cdrom

[root@localhost ~]# mount /dev/sr0  /mnt/cdrom/

[root@localhost ~]# cd /mnt/cdrom

[root@localhost cdrom]# ls

[root@localhost cdrom]# cd Package

# RPM 包在系统光盘的Packages目录中

2、命名规则

例如:httpd-2.2.15-15.el6.centos.1.i686.rpm

     ①httpd           //软件包名;

     ②2.2.15          //软件版本;

     ③15               //软件发布的次数;

     ④el6.centos    //适合的linux平台;

     ⑤i686            //适合的硬件平台;

     ⑥rpm             //rpm包扩展名;

3、RPM包依赖性:

    ①树形依赖:a→b→c

    ②环形依赖:a→b→c→a

    ③模块依赖:模块依赖,查询网站:www.rpmfind.net(安装rpm包出现报错,需要依赖libodbcinst.so.2。如果是以“.so.数字”结尾的,则表示是一个库文件,该库文件是存放在其它某一个安装包中,或者查询该库文件存放在哪个安装包中可通过网址“www.rpmfind.net”查询。因为依赖复杂所以推出yum在线安装。

2)安装命令

1、包全名和包名

包全名 : 操作的包是未安装过该软件包时使用包全名,而且要使用绝对路径

# 安装或升级时

包名 : 操作已经安装的软件包时使用包名,是搜索 /var/lib/rpm 中的数据库

# 卸载或查询时

2、RPM 安装

rpm -ivh 包全名

选项:

-i (install) : 安装

-v (verbose) : 显示详细信息

-h (hash) : 显示进度

--nodeps 不检测依赖性(实际的工作中是绝不允许用的,必须解决依赖性)

注意事项:

安装时会提示两行:Preparing...100% : 表示准备完毕;第二行...100% : 表示安装成功。

由于rpm 安装的依赖性过于繁琐, 所以大部分安装时使用yum进行安装。

yum只能实现安装和卸载,是不能查询和校验已经安装好的rpm包, 只有rpm命令可以查询和校验。

yum 安装同样也是对rpm 包进行安装, 不存在yum包。

3)升级与卸载

1、升级命令

rpm -Uvh 包全名(要升级到的软件版本),如果没有安装这个软件的任何版本,这个命令可以代替rpm -ivh。

选项:-U(upgrade)升级

2、卸载命令

rpm -e 包名(比如Httpd,不需要包全名),这个命令不同于安装和升级,它可以在任何目录运行,原理是去/var/lib/rpm目录中的数据库(如__db0)中查找对应的软件包(已经安装过的rpm包都在这些数据库中),然后卸载。

选项:

           -e(erase)卸载

           --nodeps不检查依赖性

3、--nodeps这个选项不管是在安装和卸载的时候,最好都不要使用。

4、rpm安装包安装的位置是由软件包开发者决定的,安装后的位置会非常凌乱,

所以最好是使用rpm -e命令卸载。

相对于二进制安装,源码安装是指定安装目录了,卸载的时候只需要删除对应的目录就可以完全的卸载,不留一点残余。

4)RPM包查询

1、查询是否安装

rpm -q 包名

# 查询包是否安装

-q:查询(query)

rpm -qa

# 查询所有已经安装的RPM包

# rpm -qa | grep httpd(grep后跟正则表达式,find后跟通配符)

-a (all) : 所有

2、查询软件包详细信息

rpm -qi 包名

-i:查询软件信息(information)

-p:查询未安装包信息(package)

rpm -qip 包全名

# 有时遇到问题, 可根据未安装包信息中所提供的官方网站进行查询资料。

3、查询包中文件安装位置

rpm -ql 包名

-l (list) : 列表

-p (package) : 查询未安装包信息

例如:[root@localhost ~]# rpm -qlp 包全名

# 可查看包作者欲将包安装的位置

4、RPM 包默认安装位置

RPM 包默认安装路径

/etc/

配置文件安装目录

/usr/bin/

可执行的命令安装目录

/usr/lib/

程序所使用的函数库保存位置

/usr/share/doc/

基本的软件使用手册保存位置

/usr/share/man/

帮助文件保存位置

 

5、查询系统文件属于哪个 RPM 包

rpm -qf 系统文件名

选项:

-f:查询系统文件属于哪个软件包(file)

         # 该文件必须是通过RPM包安装的。

 

6、查询软件包的依赖性

rpm -qR 包名

-R (requires) : 查询软件包的依赖性

-p (package) : 查询未安装包的信息

5)RPM包校验

1、rpm -V 已安装的包名

选项:

-V (verify) : 校验指定RPM包中的文件

执行 rpm -V httpd 后, 无任何提示, 代表该文件没有被做任何修改

# 判断本地的apache 与官方给出的是否一致, 从而判断是否被人修改

修改文件 /etc/httpd/conf/httpd.conf,在注释行添加任意内容后, 再次执行

提示 : S.5.....T.   c  /etc/httpd/conf/httpd.conf

2、验证内容中的8个信息的具体内容如下:

S : 文件大小是否改变

M : 文件的类型或文件的权限( rwx )是否被改变

5 : 文件MD5 校验和是否改变(可以看成文件内容是否改变 )

D : 设备的主从代码是否改变

L : 文件路径是否改变

U : 文件的属主( 所有者 ) 是否改变

G : 文件的属组是否改变

T : 文件的修改时间是否改变

3、验证内容中的文件类型

c (config file) : 配置文件

d (documentation) : 普通文档

g (ghost file) : "鬼"文件, 很少见, 就是该文件不应该被这个RPM包包含

L (license file) : 授权文件

r (read me) : 描述文件

4、MD5校验

# 用来校验文件的完整性(文件内容是否被改变)

# 例如, 在官网下载的游戏, 官方会给出MD5校验码, 将下载的游戏通过专用

的MD5校验工具校验后生成另一份MD5校验码, 对比两份校验码是否一致, 不一致则说明,下载的文件可能丢包, 可能文件损坏, 可能被其他人动过手脚一直木马等。

5、RPM 包中文件提取

rpm2cpio 包全名 | cpio -idv .文件绝对路径

-rpm2cpio(将rpm包转换为cpio格式的命令)

-cpio(是一个标准工具,它用于创建软件档案文件和从档案文件中提取文件)

# 由于 cpio 命令自身不知道从何处来提取文件, 所以需要用管道符来告知提取的位置

[root@localhost ~]# cpoi 选项 < [文件|设备]

选项:

-i : copy-in模式, 还原

-d : 还原时自动新建目录

-v : 显示还原过程

例如:

rpm -qf /bin/ls

# 查询ls 命令属于哪个软件包

mv /bin/ls /tmp/

# 造成ls命令误删除假象

rpm2cpio /mnt/cdrom/Packages/coreutils-8.4-19.el6.i686.rpm | cpio -idv ./bin/ls

# 切换至家目录后, 提取RPM包中ls命令到当前目录的 /bin/ls 下

cp /root/bin/ls /bin/

# 把ls 命令复制到/bin/目录, 修复文件丢失

三、yum在线安装

1)yum源文件

1、好处 : 将所有软件包放在官方服务器上, 当进行yum在线安装时, 可以自动解

决依赖性问题.

2、redhat 的yum 在线安装需要付费。

3、源文件

# vi /etc/yum.repos.d/CentOS-Base.repo

[base] : 容器名称, 一定要放在[]中

name : 容器说明, 可以自己随便写

mirrorlist : 镜像站点, 这个可以注释掉

baseurl : 我们的yum源服务器的地址,默认是CentOS官方的yum源服务器,

是可以使用的,如果你觉得慢可以改成国内的yum源地址。

enabled : 此容器是否生效, 如果不写或写成enable=1都是生效,写成

enable=0就是不生效

gpgcheck : 如果是1, 是指 RPM的数字证书生效, 如果是0, 则是不生效

gpgkey : 数字证书的公钥文件保存位置. 不用修改

2)光盘搭建yum源

1、挂载光盘

mkdir -p /mnt/cdrom

# 建立挂载点

mount -t iso9660 /dev/sr0 /mnt/cdrom

# 挂载光盘

2、使网络yum源失效

cd /etc/yum.repos.d/

# 进入 yum源目录

mv CentOS-Base.repo CentOS-Base-repo.bak

# 修改yum源文件后缀名, 使其失效

3、使光盘 yum源生效

vim CentOS-Media.repo

[c6-media]

name=CentOS-$releasever - Media

baseurl=file:///mnt/cdrom           #地址为你自己的光盘挂载地址

#      =file:///media/cdrom/

#      =file:///media/cdrecorder/    #注释这两个不存在的地址需顶格注释

gpgcheck=1

enabled=1    #把enabled=0 改为enabled=1, 让这个yum源配置文件生效

gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6

3)yum命令

1、查询

yum list

# 查询所有可用软件包列表

yum search 关键字

# 搜索服务器上所有和关键字相关的包

2、安装

yum -y install 包名

选项:

install : 安装

-y : 自动回答yes

例如:yum -y install gcc

# yum 安装只写包名即可

# 由于所有软件包被搭建在yum服务器中,此时只需要告知包名, yum服务器即可找到

# gcc 为c 语言编译器

3、升级

# 常规升级能省则省,因为其需要付出相当的代价(重启服务器而踢掉已连接用

户,更新软件包非稳定、致命等问题)

yum -y update 包名

选项:

update : 升级

-y : 自动回答yes

yum -y update(慎用)

该命令将更新系统内所有包, 包括内核, 而有的版本内核更新后需要手动配置才

能正常启动, 否则将导致系统崩溃。CnetOS 6.3 之前该命令最好不要使用

 

4、卸载

yum -y remove 包名

remove : 卸载

-y : 自动回答yes

 

5、服务器使用最小化安装, 用什么软件安装什么,尽量不要卸载 -- 《来自多年做

服务器管理人员的忠告》

6、由于软件包卸载时需要同时卸载其依赖包, 而该依赖包有可能也同样被系统所依

赖, 卸载将导致系统崩溃

# rpm卸载有依赖提醒, yum 卸载没有依赖提醒 - 慎用

7、yum 软件组管理命令

yum grouplist

# 列出所有可用的软件组列表

yum groupinstall 软件组名

# 安装指定软件组, 组名可以由grouplist查询出来

# 注 : 软件组名必须是英文

查看英文组名方式一 : 不使用远程工具, 而使用真机执行命令即可查看英文

查看英文组名方式二 : LANG=en_US 将语言系从中文转为英文,

LANG=zh_CN.utf8 该方法为临时修改

# 永久修改语言, 需要修改配置文件 /etc/sysconfig/i18n

yum groupremove 软件组名

# 卸载指定软件组

四、源码包安装

1) 源码包和RPM包的区别

1、 区别

安装之前的区别:概念上的区别(前面第一大点所讲的)

安装之后的区别:安装位置不同

2、 RPM包安装位置

是安装在默认位置中

RPM 包默认安装路径

/etc/

配置文件安装目录

/usr/bin/

可执行的命令安装目录

/usr/lib/

程序所使用的函数库保存位置

/usr/share/doc/

基本的软件使用手册保存位置

/usr/share/man/

帮助文件保存位置

#以上安装路径是示例,并不是所有RPM包都安装在此路径下,建议按以上路

径安装。同时以上安装路径是由写RPM包作者决定,并不是安装者所决定。

#RPM支持指定安装位置

  [root@localhost ~]# rpm --help | grep prefix

 --prefix=<dir>       relocate the package to <dir>,if

3、 源码包安装位置

安装在指定位置当中,一般是/usr/local/软件名/

#因源码包没有卸载命令,建议安装在指定目录下,方便卸载,卸载时直接删除目录即可。

 

4、 安装位置不同带来的影响

RPM包安装的服务可以使用系统服务管理命令(service)来管理,例如RPM包安装的apache的启动方法是:

/etc/rc.d/init.d/httpd start(绝对路径启动)

service httpd start(服务命令启动)

#linux标准启动方法就是用绝对路径启动,服务命令启动方法是redhat系列专有命令。

#如果RPM包指定安装位置,就无法进行以上两种的启动方式,不会安装在etc目录下。

#所有的RPM包程序是可以通过service命令来启动,而源码包程序不可以。原因是service命令搜索的就是/etc/rc.d/init.d这个目录,而源码包是不会把启动程序装在此目录下的。所以只能用绝对路径进行服务的管理,如:

/usr/local/apache2/bin/apachectl start

2) 源码包安装过程

1、 安装准备

①    由于源码都是c语言写的,所以要先安装c语言编译器:gcc

[root@localhost ~]# rpm -qa | grep gcc

②    从官方网站下载源码包,若是下载到了windows上面,可以使用winSCP传到linux上。

注:若已安装了二进制包(RPM包),则源码包也是可以继续安装的,因为两者安装目录不一样。但是,并不建议这样做,因为端口会冲突。

③    如果软件是给成千上万客户端访问的,装源码包效率更高,如apache;如果是底层支持软件,如:gcc这样的软件,用rpm包更简单,不会有过多用户访问,效率问题不明显。

 

2、 安装注意事项

①    源代码保存位置:/usr/local/src/

②    软件安装位置:/usr/local/

③    如何确定安装过程报错:

#安装过程停止

#并出现error、warning或no的提示

3、 源码包安装过程

①    下载源码包

②    解压缩下载的源码包

③    进入解压缩目录

  • ./configure 软件配置与检查

-定义需要的功能选项

-监测系统环境是否符合安装要求

-把定义好的功能选项和检测系统环境的信息都写入Makefile文件,

用于后续的编辑

例如:[root@localhost ~]# ./configure --prefix=/usr/local/apache2

#指定安装在/usr/local/apache2目录下,apache2无需手工建立,安装完后自动建立。

  • make编译(还是在当前目录)

             make clean

#安装出错时执行这条命令,清除缓存重新编译。

  • make install 编译安装(真正的安装成文件)。

#这步出错不仅要执行make clean命令,还要删除/usr/local/apache2目录。

  • 编译完成之后进入/usr/local/apache2/bin/apachectl start启动服务

如何确定启动命令在/usr/local/apache2/bin/apachectl此目录下?

#在源码包目录下有一个INSTALL文件,打开此文件可以看到安装步骤。

五、脚本安装包

1) 定义

通过写一个脚本来安装源码包和RPM包。

2) Nginx服务器

1、 Nginx是一款轻量级的Web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,由俄国公司在2004年发布。

2、 准备工作

① 关闭RPM包安装的httpd和MySQL

本节以安装LNMP1.0(http://lnmp.org/download.html)为例,所以需要先停止之前安装的apache和mysql服务(最好也将源码包安装的apache目录/usr/local/apache2删除),因为Nginx也要占用80端口。

保证yum源正常使用:可以使用【yum list】命令测试。(若是光盘yum源,记得挂载光盘)

关闭SELinux和防火墙:

a、 永久关闭SELinux的方法:[root@localhost ~]# vi /etc/selinux/config

将【SELINUX=enforcing】改为【SELINUX=disabled】,然后重启系统即可。

④    下载

http://lnmp.org/download.html(下载完整版之后拷贝到linux中)

⑤    脚本一键安装包

[root@localhost ~]# wget -c http://soft.vpser.net/lnmp1.0-full.tar.gz

&& tar zxvf lnmp1.0-full.tar.gz && cd lnmp1.0-full && ./centos.sh

 

注:安装后,如果安装卡在了【php-fpm】那里,通常表示已安装成功,只是【php-fpm】那里卡住了(真实机少见,但虚拟机比较常见),解决的方法就是:使用命令【pkill -9 php-fpm】杀掉【php-fpm】进程,然后重新启动该进程【/etc/rc.d/init.d/php-fpm start】即可

3、 centos.sh脚本分析

所谓的一键安装包,实际上还是安装源码包与RPM包,只是把安装过程写成了脚本,便于初学者安装。

优点:简单、快速、方便

缺点:不能定义安装软件的版本;不能定义所需要的软件功能;源码包的优势

丧失。

#如今已经把centos.sh更新为install.sh。