一、软件包管理简介

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。

linux之软件安装的更多相关文章

  1. Linux下软件安装方法即路径设置

    Linux下软件安装方法即路径设置 http://www.cnblogs.com/edward259/archive/2010/07/02/1770066.html

  2. (大数据工程师学习路径)第一步 Linux 基础入门----Linux 下软件安装

    介绍 介绍 Ubuntu 下软件安装的几种方式,及 apt,dpkg 工具的使用. 一.Linux 上的软件安装 通常 Linux 上的软件安装主要有三种方式: 在线安装 从磁盘安装deb软件包 从二 ...

  3. linux下软件安装的几种方式

    linux下软件安装的几种方式(主要有源码安装, rpm安装, yum安装). 一:源码安装 几乎所有的开源软件都支持在Linux下运行,而这些软件一般都以源码形式发放,只需要Linux安装了gcc. ...

  4. Linux入门基础教程之Linux下软件安装

    Linux入门基础教程之Linux下软件安装 一.在线安装: sudo apt-get install 即可安装 如果在安装完后无法用Tab键补全命令,可以执行: source ~/.zshrc AP ...

  5. Linux 下软件安装

    Linux 下软件安装 一.Linux 上的软件安装 通常 Linux 上的软件安装主要有三种方式: 在线安装 从磁盘安装deb软件包 从二进制软件包安装 从源代码编译安装 这几种安装方式各有优劣,而 ...

  6. Linux 的软件安装目录

    Linux 的软件安装目录是也是有讲究的,理解这一点,在对系统管理是有益的 /usr:系统级的目录,可以理解为C:/Windows/,/usr/lib理解为C:/Windows/System32. / ...

  7. Linux课程---11、Linux中软件安装和调试

    Linux课程---11.Linux中软件安装和调试 一.总结 一句话总结: 启动过程:1.安装软件,2.修改配置文件,3.启动服务 查看过程:4.查看进程,5.查看端口 关闭过程:6.关闭软件,7. ...

  8. linux中软件安装方式

    通常Linux应用软件的安装包有三种: tar包,如software-1.2.3-1.tar.gz.它是使用UNIX系统的打包工具tar打包的. rpm包,如software-1.2.3-1.i386 ...

  9. linux初学者-软件安装与管理篇

    linux初学者-软件安装与管理篇 在linux的学习和工作中需要安装许多的软件.在redhat的linux操作系统下,软件一般都是rpm格式的.以下将介绍一些软件安装和管理的内容. 1.软件名称 在 ...

  10. 2019-9-16:渗透测试,基础学习,Linux下软件安装,环境搭建,笔记

    Centos linux下软件安装yum 通过分析rpm包头数据后,自动解决依赖关系,直接云端下载软件,根据不同版本系统获取不同软件信息,按顺序下载rpm包,安装软件yum search 软件名:搜索 ...

随机推荐

  1. POJ 3348 Cows [凸包 面积]

    Cows Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 9022   Accepted: 3992 Description ...

  2. [代码]JS原生Ajax,GET和POST

    javascript/js的ajax的GET请求: <script type="text/javascript"> /* 创建 XMLHttpRequest 对象 */ ...

  3. WPF Effect 造成的字体模糊

    WPF 里面有个Effect ,暂且可以理解为 "特效" 分类. 但是有时候使用不恰当,容易出现各种毛病. 例如: 代码如下: <StackPanel HorizontalA ...

  4. 游戏2048源代码 - C语言控制台界面版

    一.游戏介绍 <2048>是最近比较流行的一款数字游戏.原版2048首先在github上发布,原作者是Gabriele Cirulli.它是基于<1024>和<小3传奇& ...

  5. Ubuntu的Java环境变量

    新架构要上线了,这两天开始准备分析一下了,今天是直接进到JAVA_HOME的lib目录执行的java -cp sa-jdi.jar sun.jvm.hotspot.HSDB,然后报了个错: 这是哪来的 ...

  6. 第三方页面嵌入到web项目的方案 之 使用iframe嵌入

    有些项目中可能会遇到这样的需求, 需要在一个项目中嵌入其他的项目的页面或者功能.并且需要这两个页面之间能够进行交互. 本文主要介绍如何实现这种第三方应用的嵌入, 主要有以下几个方向: 1.iframe ...

  7. Linux用于嵌入式

    步骤1:Linux工具和项目布局 每个嵌入式软件设计都从选择合适的工具开始. 工具链是一组连接(或链接)在一起的软件开发工具,它包含诸如GNU编译器集合(GCC).binutils(一组包括连接器.汇 ...

  8. [Python Study Notes]字典操作

    字典操作 a.增加 >>> info["stu1104"] = "abc" >>> info {'stu1102': 'x5 ...

  9. 金融&业务常识积累

    前言 在项目中遇到很多名词,不太明白其含义.这些名词都是和金融领域紧密相关并且与项目的业务有着直接的联系.因此,决定通过搜集资料和归纳总结,对经后的工作产生一定的帮助. 常见的金融知识 PDL: Pa ...

  10. ★Linux桌面系统技巧(作为客户端)

    [安装chrome浏览器]* 下载(已下载完成):32位:wget https://dl.google.com/linux/direct/google-chrome-stable_current_i3 ...