一、源码包编译安装

由于计算机无法直接执行用高级语言编写的源程序,因此想要运行程序,就需要一种机制来让计算机识别,这样程序才可能运行起来。一般来说,计算机中存在解释型和编译型两种语言。

所谓解释型语言,就是计算机逐条取出源码文件的指令,将其转化成机器指令,并执行这个指令的过程。而编译型语言是指在程序运行前就将所有的源代码一次性转化为机器·代码(一般为二进制程序),再运行这个程序的过程。

源码安装通常使用wget命令,然后解压,在配置,在编译安装等。

二、RPM安装软件
RPM,翻译过来的意思是红帽软件包管理器的意思。RPM通过一套本地数据库提供了一种更简单的软件安装管理方式,从而使得不管是安装、升级还是卸载都较源码包更智能。比如说在初次安装某软件的时候会提醒我们需要预先安装其他什么软件,升级的时候也会智能地保存原先配置文件,而在卸载的时候则能视情况保留重要的数据文件等。由于Linux上一切皆文件,所以说白了,RPM其实是一种集成了文件管理和软件版本控制的工具。

RPM分为两类,一类是二进制安装包(也就是预编译包)。事实上,如果将编译好的软件复制到相同的软件环境(内核版本一致、软硬件运行环境一致)的服务器中,只要软件在原编译机中能运行,那么在新主机中也同样可以运行。而RPM采用的就是类似的方式,在特定的kenel版本下预先编译好软件(编译时使用了大多数常见的编译参数),并将所需要的文件(二进制程序、模块、配置文件等)整体打包,在新主机中安装该RPM包时,再将文件解压并复制到特定的目录中去。第二类是RPM源码包,当希望自定义编译参数,自行制作二进制安装包的时候使用。

RPM包管理命令:rpm

-i, --install 安装软件

-v,--verbose 打印详细信息

-h, --hash 使用"#"号打印安装进度(需要和v同时用)

-e,--erase 删除软件

--replacepkge 如果软件已经安装某,则强行安装

--test 安装测试,并不实际安装

--nodeps 忽略软件包的依赖关系强行安装

--force 忽略软件包及文件的冲突

查询参数(需要使用-q或--query参数)

-a,--all 查询所有安装软件

-p,--package 查询某个安装的软件

-l,--list 列出某个软件包所包含的所有软件
-f,--file 查询某个文件所属包

安装软件:rpm -ivh 包名.rpm

测试安装软件包:rpm -ivh --test 包名.rpm

安装软件:rpm -ivh --relocate /=/usr/local/包名.rpm

强行安装软件包:rpm -ivh 包名 --force --nodeps

升级软件包:rpm -Uvh 包名.rpm

强行升级软件包:rpm -Uvh 包名 --force --nodeps

删除软件包:rpm -e 包名.rpm

导入签名:rpm --import RPM-GPG-KEY

查询某个包是否已经安装:rpm -q 包名.rpm

查询系统中所有已经安装的包:rpm -qa

查询某个文件属于哪个包:rpm -qf 包名.rpm

查询某个包的依赖关系:rpm -qpR 包名.rpm

查询某个包的信息:rpm -qpi 包名.rpm

删除软件包:rpm -e 包名.rpm

三、包依赖关系

所谓包依赖,就是说在安装A包之前需要已经安装了B包,起实质是A软件运行时需要依赖B软件提供的功能。

比如说openssh这个工具用于远程连接服务器,而ssh客户端和服务器之间的通信必须是加密的,但是openssh本身没必要再实现一次加密算法,只需要借助openssl提供的加密功能就可以了,这样安装openssh之前就需要已经安装openssl。那么,在这种情况下安装包怎样才能知道需要提前安装哪些必要的包呢?事实上,如果依赖关系不满足,RPM会自动提示,而且也会拒绝安装为满足的依赖包。但是,大多数时候这些提示都会比较模糊,有时候你不得不根据RPM给出的一些信息,借助了一些搜索工具来判断具体的包名,而这对很多新手来说确实有一定难度。

四、yum安装软件

yum是一个基于RPM的前端管理器,能够从指定的服务器上(一个或者多个)自动下载或更新软件、删除软件。其最大的好处是可以自动解决依赖关系。RedHat和Centos的版本为5以上的都会默认安装yum,所以该命令可以直接使用。

yum install 包名 安装某个包

yum groupinstall GROUP 安装某个软件组

yum update 包名 更新某个包

yum check-update 更新系统中所有需要更新的包

yum list 显示软件源中所有可用的包,一般不用

yum list installed 显示系统已经安装过的包

yum info 包名 显示某个包的信息

yum groupinfo GROUP 显示某个软件组的信息

yum remove 包名 删除某个包

yum groupremove GROUP 删除某个软件组

yum clean 清除使用yum所生成的缓存文件

五、三种安装方法的比较

编译安装的好处是可以根据具体的应用场景、特定的需求,甚至是个人的喜好来量身定制软件的功能模块吗,而使用预编译(RPM就是预编译的软件,所以RPM管理和yum管理都只是对这些预编译的包进行管理)的方式相对来说会显得臃肿。而且由于编译过程中,编译器会根据服务器硬件和软件环境来自动做一些优化处理,因此,相对预编译软件来说,后期在软件运行时编译安装的方式更能提升部分系统使用效率(根据不同的软件,提升率各有不同)。但是其缺点也是显而易见的,首先编译安装耗时久,不适合大量部署;其次在生产服务器上编译软件本身也是极不安全的做法,必须杜绝。

从大规模运维的角度来说,安全性、高效、易管理是排在第一位的,所以必须采取更方便的包管理方式。如果想要同时享有编译软件和包管理器的优点(高效运行,集中管理),那就必须自己预编译RPM包。

Linux系统学习之软件安装的更多相关文章

  1. Linux系统学习07-Centos软件安装几种方法

    配置好Centos一些基础设置后,接下来就是学习平时使用最多的软件安装. windwos下软件安装非常简单,就是下载好安装包,然后双击就会自动安装. 而Centos里面安装软件的方式方法有区别,熟悉几 ...

  2. linux基础学习之软件安装以及常用命令

    linux基础学习之软件安装以及常用命令 调用中央仓库: yum install wget 然后下载nodejs: wget https://nodejs.org/dist/v10.14.2/node ...

  3. Linux系统 centOS 更换软件安装源

    阿里云Linux安装软件镜像源阿里云是最近新出的一个镜像源.得益与阿里云的高速发展,这么大的需求,肯定会推出自己的镜像源.阿里云Linux安装镜像源地址:http://mirrors.aliyun.c ...

  4. Linux系统学习 一、安装,调试

    环境 主机: Windows 10 虚拟机: VMware 15 Pro 镜像: 一.安装过程: 然后开启虚拟机 设置主机名 时区 密码 最小安装 等着 重启 登录 二.配置静态IP地址 输入ifco ...

  5. linux系统下各类软件安装笔记

    安装环境: linux版本:ubuntu 16.04 安装python3.6 sudo add-apt-repository ppa:jonathonf/python-3.6              ...

  6. linux基础学习之软件安装以及常用命令(三)

    添加和查看用户: [root@localhost ~]# useradd anderson [root@localhost ~]# cat /etc/passwd 显示如下: [root@localh ...

  7. 在Linux系统(centos7)中,安装VScode,并在VScode上编写HTML网页

    [实验目的] 在Linux系统中,搭建编写HTML网页的环境.在VS code官网上,下载VS code安装程序,进行安装.在VS code软件中编写HTML页面,并正确运行. [实验步骤] 1)   ...

  8. Linux系统上查找已安装软件的路径

    在Linux系统上查找已安装软件路径的命令,以查找pcre的安装路径为例: [root@localhost doc]# rpm -ql pcre /lib64/libpcre.so. /lib64/l ...

  9. Linux 系统 pptpd+radius+mysql 安装攻略

    分类: 原文地址:Linux 系统 pptpd+radius+mysql 安装攻略 作者:wfeng .你所需要的软件 内核最好能升级到2.6 如果你是centos的用户,可以通过yum update ...

随机推荐

  1. Ajax提交用FormData()上传文件

    1.form声明如下 2.ajax设置如下 var formData = new FormData(document.getElementById("form")); $.ajax ...

  2. 【Spring】10、Spring中用@Component、@Repository、@Service和 @Controller等标注的默认Bean名称会是小写开头的非限定类名

    @Service用于标注业务层组件(我们通常定义的service层就用这个) @Controller用于标注控制层组件(如struts中的action) @Repository用于标注数据访问组件,即 ...

  3. Spring基于纯注解方式的使用

    经过上篇xml与注解混合方式,对注解有了简单额了解,上篇的配置方式极大地简化了xml中配置,但仍有部分配置在xml中进行,接下来我们就通过注解的方式将xml中的配置用注解的方式实现,并最终去掉xml配 ...

  4. response slider

    <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <t ...

  5. ES6学习之变量的解构赋值

    前言:什么是ES6?ECMAScript 6(简称ES6)是JavaScript语言的下一代标准,已经在2015年6月正式发布了.其中相比较于ES5新增了诸多的特性,并且ES6可转换为ES5的语法.- ...

  6. UED与UCD

    UED User Experience Design(用户体验设计),简称UED.UED是以用户为中心的一种设计手段,以用户需求为目标而进行的设计.设计过程注重以用户为中心,用户体验的概念从开发的最早 ...

  7. BZOJ1278: 向量vector(计算几何 随机化乱搞)

    题意 题目链接 Sol 讲一下我的乱搞做法.... 首先我们可以按极角排序.然后对\(y\)轴上方/下方的加起来分别求模长取个最大值.. 这样一次是\(O(n)\)的. 我们可以对所有向量每次随机化旋 ...

  8. OSGI企业应用开发(十四)整合Spring、Mybatis、Spring MVC

    作为一个企业级的Web应用,MVC框架是必不可少的.Spring MVC目前使用也比较广泛,本文就来介绍一下如何在OSGI应用中实现Spring.Mybatis.Spring MVC框架的整合,其中S ...

  9. docker常用命令整理-在容器中使用service命令

    在docker中使用centos镜像启动了容器并安装了相关软件,之后想用service命令启动相关服务却收到如下错误: Failed to get D-Bus connection: Operatio ...

  10. 洗礼灵魂,修炼python(46)--巩固篇—如虎添翼的property

    @property 在前面装饰器一章中,提过一句话,装饰器也可以用于类中,确实可以的,并且python的类也内置了一部分装饰器.并且在前两章的hasattr等四个内置方法中,也说过其用法很类似装饰器, ...