软件的安装是一个非常重要的环节,因为人使用电脑的目的就是使用程序,如果一个系统你连软件都不会装,那你就根本不会用。
Linux 的软件安装包括以下三种:
首先来说编译安装,编译和安装是两个步骤,先编译再安装,但是并不是所有的人都是程序员,也就是说并不是所有的人都会编译,这让我想起一句名言:“人是懒惰的,懒惰促使科技进步。”很多人就不想学编程,但是又想得到软件,这时候就产生了 rpm 安装。
rpm安装,即别人帮你编译好,然后打包给你,你直接拿过来安装就可以了。例如我们在 windows 操作系统中下载的 .exe 安装文件,就是别人已经编译好的包,我们直接点击安装,按照向导指示就可以完成安装了。但是这里面又有了另外一个问题,我们都知道一个软件工程学——不关起门造轮子,即在开发软件的时候,程序员会用到别人的库。而我们下载的安装包只是一个编译好的包,而不会携带所需的库,因为别人可能认为我们的电脑中已经有了运行程序所需的库。这时候采用 rpm 安装就会存在缺失依赖的问题。我们就还需要先安装依赖的库,然后才能安装软件。
然而人找依赖会很烦,因为人是懒惰的,所以就促使了 yum 安装,我们在使用yum安装的时候,它会默人帮我们查找所需的依赖,帮我们全部安装好。
但是以上这三种安装方式并不是谁替代谁的一个关系,这三种安装方式是并存的。首先在我们的服务器端,服务器一般都是要求全年无休止的工作,尽量不要出现死机、异常关机等现象,这就要求软件的可靠性非常高,但是一般情况下,软件的代码功能越多,出现bug的概率就越大,所以现在软件更趋向于一种模块化开发,软件首先有一个主线,实现软件的主要功能,其他的功能一般都是使用插件形式开发。这样,当我们获得源码的时候,我们在编译期就可以把所需要的功能编译进去,剔除不需要的功能,得到一个个性化的软件,代码量也合适,没有其他的冗余功能,这样出现bug的概率就会大大减少。因此,编译安装也是需要掌握的,因为我们在公司可能会得到原码,根据公司的需求得到一个个性化软件。其次,rpm包安装的方式也必须会,因为并不是所有的仓库都包含了这个世界上所有的软件包,有些软件在仓库中是找不到的,比如说 jdk,jdk 是有两个版本的,Oracle JDK是在Open JDK,你能从仓库下载安装的是 Open JDK,我们如果想要安装 Oracle JDK 就必须从官网下载 rpm 的安装包才能进行安装。最后,yum 安装的方式是目前最简单最易于使用的安装方式,当然也是必须要会的啊。
配置文件:Makefile
编译,安装命令:make
案例:编译安装nginx
下载源码
tar xf 解压
README
./configure:创建Makefile
make:编译
make install 等
注意:
编译环境
软件依赖
配置项
步骤1、首先,我们通过 Xftp 将 几个文件传输到 Linux 虚拟机的根目录中:
步骤2、在编译安装中,我们演示所需的文件 为 tengine-2.1.0.tar.gz。我们解压它。
得到的 目录 tengine-2.1.0 就是源码目录。
步骤3、进到源码目录,试图找到 配置文件 Makefile。
然而我们并没有找到所需的 Makefile 文件,这时候我们应该看一下 README 文件的内容,看一下作者给我们写的安装步骤。
提示一下:如果我们以后打开一个源码文件,没有看到 Makefile 文件,那我们就看一下 README 文件,里面一般都会有一个前置过程,操作了这一步(这里是 ./configure)之后,就会得到 Makefile 文件,然后就可以执行后面的 make 命令了。
步骤4:
在执行 ./configure 之前,我们先看一下 help
标红的这一行是关于设置安装路径的。我们可以设置一下:(除此之外,还有一系列设置可以设置,配置什么功能(with ...)或者剔除什么功能 without ...),这就是我们前面提到的 编译安装可以个性化软件安装)
这里我们只设置一下安装路径,其它不做修改:
我们可以看到,编译安装首先是检查操作系统,操作系统没有问题之后,就是检查编译器,我们这里没有 C 编译器,我们先安装一下(为了简单起见,我们使用 yum 安装):
编译器安装完了之后,再次重复上述步骤,报错:需要 PCRE 库
yum 不仅可以安装,还可以查询,我们使用 yum 查询一下 PCRE:
很显然,我们是在编译环节,所系要安装的是 pcre-devel,有两个版本 i686和x86_64,其实我们不需要纠结安装哪个版本,直接运行 yum install pcre-devel, yum 会默认安装合适的版本:
接下来就是继续尝试 ./configure ,报错就安装缺失的库。
直到 ./configure 无错安装。
步骤5:
正如我们预期的那样,生成了 Makefile 文件:
执行 make
执行 make install
至此,安装结束。
检查是否安装成功:运行 nginx 。
虽然什么显示也没有,但是已经后台运行了。nginx 也是一个 web 服务器,端口为 80.
我们打开浏览器,输入 虚拟机(服务器)IP:80,就可以看到下面的页面:
表示安装、运行成功。
RPM 安装
Redhat提供了rpm管理体系
已经编译的软件包:针对不同的平台系统编译目标软件包
操作系统维护安装信息
软件包包含依赖检查,但,还需人为解决
rpm安装:
-ivh filename
--prefix
rpm升级:
-Uvh
-Fvh
rpm卸载:
-e PACKAGE_NAME
rpm查询
rpm -qa : 查询已经安装的所有包
rpm -q PACKAGE_NAME: 查询指定的包是否已经安装
rpm -qi PACKAGE_NAME: 查询指定包的说明信息
rpm -ql PACKAGE_NAME: 查询指定包安装后生成的文件列表
rpm -qc PACEAGE_NEME:查询指定包安装的配置文件
rpm -qd PACKAGE_NAME: 查询指定包安装的帮助文件
rpm -q --scripts PACKAGE_NAME: 查询指定包中包含的脚本
rpm -qf /path/to/somefile: 查询文件是由哪个rpm包安装生成的
如果某rpm包尚未安装,需查询其说明信息、安装以后会生成的文件
rpm -qpi /PATH/TO/PACKAGE_FILE
rpm -qpl
这个演示使用的 rpm 包为 jdk-7u67-linux-x64.rpm,该包可以从官网下载:https://www.oracle.com/technetwork/java/javase/downloads/java-archive-downloads-javase7-521261.html
安装:
就这么简单,安装完成。
并且 java 命令还可以使用。但其实并不是所有的命令都可以使用。另外,我们还想知道安装到哪里去了。
这时候可以使用 rpm 的 -q 选项:
rpm -qa # 查询安装的所有软件
这就是刚才安装的 jdk ,注意一下,这里的名称 jdk-1.7.0_67-fcs.x86_64 叫做 包的名称 。
通过查询 包的名称,可以找到 安装这个包给我们释放了哪些文件,即安装文件的位置,为 /usr/java/,(即 bin 目录所在的目录)。
安装目录:
至此,我们就知道 jdk 装在哪了,这完全依靠于 rpm 强大的 -q 查询机制。
第二个问题,为什么安装之后,没有配置 JAVA_HOME 环境变量,java 命令就可以使用了?
我们来找一下 java 命令是在哪里?
其实,在没有配置环境变量之前,有几个 java 相关的命令就已经被 软连接 到了 /usr/bin/ 目录下。(但不是所有的 java 相关命令)
(但不是所有的 java 相关命令),我们可以在 /usr/java/jdk1.7.0_67/bin 下看到 一个 jps 命令(查询 java 进程的命令),这个命令默认就是没有 软连接到 /usr/bin 下,因此,无法再其它地方运行:
接下来,我们就是配置环境变量了:
# vi /etc/profile
在末尾添加下面两行:
export JAVA_HOME=/usr/java/jdk1.7.0_67
export PATH=$PATH:$JAVA_HOME/bin
执行: source /etc/profile 刷新
# source /etc/profile
查询一下 PATH:
这时候,就可以在任意位置执行 jps 了:
基于rpm包管理
提供rpm仓库
其实 对于 yum 安装,我们能够做的就是更改 仓库 的地址:
我们进到 /etc/yum.repos.d 目录:
里面有3个文件:我们打开 CentOS-Base.repo 文件:
baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/ 就是默认的仓库地址,是一个国外的地址。
/ etc / yum.repos.d /[ repoID ]baseurl =http://file://ftp://gpgcheck=1 / 0enable=0 / 1
http://mirrors.aliyun.com
centos-->help
before:yum install wget
....
步骤一般为以下三步:(其实在国内的每个镜像网站上点击使用帮助就可以看到)
1、首先备份/etc/yum.repos.d/CentOS-Base.repo
2、下载对应版本repo文件, 放入/etc/yum.repos.d/(操作前请做好相应备份)
3、运行以下命令生成缓存
yum clean all
yum makecache
我们可以以 阿里云的镜像网站为例:https://opsx.alibaba.com/mirror
点击帮助:(就会显示使用步骤:)
注意:这里在第二步会使用一些命令下载 CentOS-Base.repo 文件,因此,在做第一步之前,我们就应该安装 wget 或者 curl,否则,在我们改名之后,就不能使用 yum 安装 wget 或者 curl 了,又要重新改回来,是不是很炸裂。
这也告诉我们,做事情应该先看完所有步骤,再来操作,这样会比较好。
至此,仓库的位置就更改结束。
更改为网易或者其他的镜像的 CentOS 也是一样的操作步骤。只是第二步下载的方式可能略有不同,比如网易的:
mount /dev/cdrom /mnt
vi /etc/yum.repos.d/local.repo
[local]
baseurl=file:///mnt
gpgcheck=0
enable=1
首先说,我们已经知道怎么改到国内的镜像源了,为什么还要学习使用本地的源。因为有的公司的集群的服务器是断网的,只能内部通讯,特别是我们大数据的集群,一般都是不与外网连接的。
这时候我们就要使用本机的目录作为仓库了,一般使用的是一张光盘。无论是 阿里还是网易的镜像网站,都可以下载这张光盘:
点击 centos ,打开的页面中选择对应的版本,进入:
这里面有很多张光盘,有我们之前安装CentOS的minimal版,也有可以直接使用的 Live 版,我们这里需要下载的是 bin-DVD1 和 bin-DVD2,其实DVD1 这一张光盘就够我们使用了,我们这里只用 DVD1。
然后我们在VMware 中 更改 CD/DVD
将光盘挂载到 /mnt 目录下:
其实只要你的本地文件目录下有 Packages 和 repodata 这两个文件了,这个目录就是仓库,也就是说,在这里 mnt 目录就是仓库。
接下来就是怎么把 yum 的仓库改为 /mnt 了。
和前面一样,还是进到 /etc/yum.repos.d/ 目录。
将文件下所有 文件 都备份出去,这里是备份到 backup 文件夹内,然后复制一个 Base 文件到该文件夹下做修改:
执行 yum clean all 和 yum makecache:
至此,仓库的源更改完成。
我们可以演示一下:
首先,我们执行 yum remove man 删除 man,
然后 执行 yum install man 安装一下试试,可以成功说明安装正确。
此外,我们还可以使用 yum repolist 显示使用的仓库,以及仓库的软件包个数。
其实这里的 6713 是两张光盘的软件包个数,DVD1只有3245个包,大家可以把 DVD1和DVD2合并之后,再挂载,就可以了。
注意:这里讲解的只是这种思路,但是实际操作的时候,服务器可能不在你身边,而光盘在你手上,这时候怎么办呢,另外,如果有多台服务器,一台一台的设置也太麻烦了吧。
等讲完 nginx 之后,你就知道怎么做了,你可以在你的服务器集群中,找一台搭建局域网作为webserver,然后把光盘放到这个服务器上,把其他所有服务器的yun仓库设为这台服务器就OK了。
yum命令:
yum repolist
yum clean all
yum makecache
yum update
查询:
yum list
yum search
yum info
安装&卸载:
yum install
remove|erase
yum命令:分组
其实就是通过组一起安装一套软件或者卸载一套软件
yum grouplist
yum groupinfo
yum groupinstall
yum groupremove
yum groupupdate
1、我们使用 yum grouplist 查询一下,在 Available Language Groups: 大分类下 发现有一个名为 Chinese Support [zh] 的组;
yum grouplist
2、 安装 Chinese Support 组:
yum install Chinese Support
3、修改 LANG
这时候就可以显示中文了。
但其实我们最想要的是查询命令的使用方法时显示中文,即 man 命令名 ,帮助文档为中文。
目前,还是不能够的,因为我们需要一个插件 man-pages-zh-CN,而这个插件在 epel 仓库下。因此我们需要增加epel的repo。
配置完了之后,
我们查询一下 man-pages,就会发现 man-pages-zh-CN 了。
安装:yum install man-pages-zh-CN,确实是来自 epel 仓库
安装完成之后,使用 man 得到的帮助文档就是中文了。
另外,友情提示:最好不要试图完全改为中文显示,大家还是要学着尽量看英文。
Linux rpm命令用于管理套件。
rmp(redhat package manager)原本是Red Hat Linux发行版专门用来管理Linux各项套件的程序,由于它遵循GPL规则且功能强大方便,因而广受欢迎。逐渐受到其他发行版的采用。RPM套件管理方式的出现,让Linux易于安装,升级,间接提升了Linux的适用度。
rpm [-acdhilqRsv][-b<完成阶段><套间档>+][-e<套件挡>][-f<文件>+][-i<套件档>][-p<套件档>+][-U<套件档>][-vv][--addsign<套件档>+][--allfiles][--allmatches][--badreloc][--buildroot<根目录>][--changelog][--checksig<套件档>+][--clean][--dbpath<数据库目录>][--dump][--excludedocs][--excludepath<排除目录>][--force][--ftpproxy<主机名称或IP地址>][--ftpport<通信端口>][--help][--httpproxy<主机名称或IP地址>][--httpport<通信端口>][--ignorearch][--ignoreos][--ignoresize][--includedocs][--initdb][justdb][--nobulid][--nodeps][--nofiles][--nogpg][--nomd5][--nopgp][--noorder][--noscripts][--notriggers][--oldpackage][--percent][--pipe<执行指令>][--prefix<目的目录>][--provides][--queryformat<档头格式>][--querytags][--rcfile<配置档>][--rebulid<套件档>][--rebuliddb][--recompile<套件档>][--relocate<原目录>=<新目录>][--replacefiles][--replacepkgs][--requires][--resign<套件档>+][--rmsource][--rmsource<文件>][--root<根目录>][--scripts][--setperms][--setugids][--short-circuit][--sign][--target=<安装平台>+][--test][--timecheck<检查秒数>][--triggeredby<套件档>][--triggers][--verify][--version][--whatprovides<功能特性>][--whatrequires<功能特性>]
参数说明:
安装软件
# rpm -hvi dejagnu-1.4.2-10.noarch.rpm 警告:dejagnu-1.4.2-10.noarch.rpm: V3 DSA 签名:NOKEY, key ID db42a60e 准备... ########################################### [100%]
显示软件安装信息
# rpm -qi dejagnu-1.4.2-10.noarch.rpm 【第1次更新 教程、类似命令关联】
yum( Yellow dog Updater, Modified)是一个在Fedora和RedHat以及SUSE中的Shell前端软件包管理器。
基於RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软体包,无须繁琐地一次次下载、安装。
yum提供了查找、安装、删除某一个、一组甚至全部软件包的命令,而且命令简洁而又好记。
yum [options] [command] [package ...]
安装 pam-devel
[root@www ~]# yum install pam-devel Setting up Install Process Parsing package install arguments Resolving Dependencies <==先检查软件的属性相依问题 --> Running transaction check ---> Package pam-devel.i386 0:0.99.6.2-4.el5 set to be updated --> Processing Dependency: pam = 0.99.6.2-4.el5 for package: pam-devel --> Running transaction check ---> Package pam.i386 0:0.99.6.2-4.el5 set to be updated filelists.xml.gz 100% |=========================| 1.6 MB 00:05 filelists.xml.gz 100% |=========================| 138 kB 00:00 -> Finished Dependency Resolution ……(省略)
移除 pam-devel
[root@www ~]# yum remove pam-devel Setting up Remove Process Resolving Dependencies <==同样的,先解决属性相依的问题 --> Running transaction check ---> Package pam-devel.i386 0:0.99.6.2-4.el5 set to be erased --> Finished Dependency Resolution Dependencies Resolved ============================================================================= Package Arch Version Repository Size ============================================================================= Removing: pam-devel i386 0.99.6.2-4.el5 installed 495 k Transaction Summary ============================================================================= Install 0 Package(s) Update 0 Package(s) Remove 1 Package(s) <==还好,并没有属性相依的问题,单纯移除一个软件 Is this ok [y/N]: y Downloading Packages: Running rpm_check_debug Running Transaction Test Finished Transaction Test Transaction Test Succeeded Running Transaction Erasing : pam-devel ######################### [1/1] Removed: pam-devel.i386 0:0.99.6.2-4.el5 Complete!
利用 yum 的功能,找出以 pam 为开头的软件名称有哪些?
[root@www ~]# yum list pam* Installed Packages pam.i386 0.99.6.2-3.27.el5 installed pam_ccreds.i386 3-5 installed pam_krb5.i386 2.2.14-1 installed pam_passwdqc.i386 1.0.2-1.2.2 installed pam_pkcs11.i386 0.5.3-23 installed pam_smb.i386 1.1.7-7.2.1 installed Available Packages <==底下则是『可升级』的或『未安装』的 pam.i386 0.99.6.2-4.el5 base pam-devel.i386 0.99.6.2-4.el5 base pam_krb5.i386 2.2.14-10 base
网易(163)yum源是国内最好的yum源之一 ,无论是速度还是软件版本,都非常的不错。
将yum源设置为163 yum,可以提升软件包安装和更新的速度,同时避免一些常见软件版本无法找到。
首先备份/etc/yum.repos.d/CentOS-Base.repo
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
下载对应版本repo文件, 放入/etc/yum.repos.d/(操作前请做好相应备份)
运行以下命令生成缓存
yum clean all yum makecache
除了网易之外,国内还有其他不错的yum源,比如中科大和搜狐。
中科大的yum源,安装方法查看:https://lug.ustc.edu.cn/wiki/mirrors/help/centos
sohu的yum源安装方法查看: http://mirrors.sohu.com/help/centos.