Linux中两种软件安装包:
1、源码包:
软件的源代码是软件的原始数据,但是源代码不能在计算机中直接运行安装。需要通过编译将源代码转换为计算机可以识别的机器语言,之后才可以进行安装。源码包安装的方式可以在安装过程中根据自己的需求定制自己所需要的功能。
Linux上大部分软件也是开源软件。
例如:apache、tomcat、PHP、MySQL等。开源软件大多都提供源码下载、源码安装等方式。
装等方式。
1)源码包安装优点
- 开放源代码,可以自行修改源代码。
- 可以自由选择安装所需功能。
- 软件是编译安装,更加稳定高效。
- 卸载方便,直接删除安装目录即可。
2)源码包安装缺点:
- 安装过程中过程较为复杂。
- 编译过程时间较长(与RPM包相比)。
3)源码包安装步骤:
官方网站下载源码包。
解压并进入源码包目录。
解压后进入解压生成的文件夹。
通常会有名为REDAME的文件。此文件记录了:这个软件所能完成的功能,授权许可,安装需求,安装注意事项,安装方式等。
目录中会有一个名为configure的文件。
执行./configure,就会开始检测当前系统是否拥有安装软件所需的所有文件和工具。
检测成功后会生成makefile文件。
而有些软件没有提供configure脚本,直接提供了makefile文件,可以直接执行make编译步骤。
make:一般在输入make命令时,make命令默认会查找当前目录下的Makefile文件。
如果用其他文件作为Makefile文件那么需要在make之后加-f子选项来指定Makefile文件。
由于需要相应的编译软件才能将源代码转换为机器识别的语言,所以在执行configure的时候如果没有编译,工具就会有error报错。
make install:进行安装。
2、RPM安装:
RedHat Package Manager的缩写,是红帽软件包工具。RPM的提供可升级,具有强大查询功能,支持安全验证的通用型Linux软件包管理工具。由于这种软件管理方式非常方便,所以逐渐被其他Linux发行版所借用。现在已经称为Linux平台下通用的软件包管理方式。
1)RPM包优点:
- 安装简单方便。
- 安装时不用指定安装位置。
- 方便升级、卸载。
2)RPM包缺点:
大多数RPM安装需要解决依赖关系。
3)RPM包命名规则:
httpd-2.2.15-53.el6.centos.x86_64.rpm
httpd 软件包名
2.2.15 软件版本
53 软件发布次数
el6.centos 适合的Linux平台
x86_64 适合的硬件平台
rpm rpm包扩展名
4)RPM安装命令:
格式:rpm -ivh 软件包名(全名)
-i install的意思,就是安装软件
-v 显示安装过程中的详细信息。
-h 以#号显示安装的进度
5)卸载命令:
格式:rpm -e 软件名(不用指定包全名)
6)升级命令:
格式:rpm -Uvh 软件包全名
-U 升级安装,若没安装则直接安装,若安装有旧版本,则升级安装。
-F 升级安装,若没安装,则不安装,必须有旧版本才进行升级安装。
7)查询已安装的软件信息:
格式:rpm -q 包名 查询包是否安装
rpm -qa 查看系统中已安装的所有RPM软件包列表
rpm -qi 包名 查看指定软件所安装的信息
rpm -ql 包名 查询指定软件所安装目录,文件列表
8)查询未安装的RPM包文件:
格式:rpm -qpl 包全名 查询指定未安装软件所安装的目录、文件列表
rpm -qpR 包全名 查询指定未安装软件的依赖文件
9)查询文件或者目录属于哪个RPM软件
格式:rpm -qf 文件或目录名
3、yum安装
因为在RPM安装过程中经常要解决依赖关系,而有些依赖关系并不会有准确的依赖安装包提示信息。
YUM是yellow dog update modified的简写。YUM是一个RPM包管理工具,可以很好的解决RPM包安装过程中会遇到的依赖关系问题。YUM可以从多个源当中搜索软件以及软件安装所依赖的安装包,并自动安装相应的依赖软件。使用YUM安装软件时至少需要一个YUM源,可以把YUM源理解为一个存放一些RPM包的文件夹。用户可以使用ftp、http等方式访问YUM源。
安装源分别是本地yum源和网络yum源(网络仓库),在默认配置文件生效的情况下,网络yum源优先级别高于本地yum源。网络源分为默认网络源和扩展网络源。
如果没有连网,如果有其他网络源在,会报错(即使配置了本地源),根据报错去处理,对应的网络源进行改名(不止是Base.repo)Base.repo 默认网络源
/repodata 里面存放RPM包的依赖关系
1)前提条件:yum安装命令的前提是需要知道依赖关系,需要知道YUM源的位置
2)网络源配置文件
[root@localhost Packages]# cat /etc/yum.repos.d/CentOS-Base.repo 默认网络源
[base] #YUM源唯一ID号,可任意填写。
name=CentOS-$releasever - Base #YUM源描述,可任意填写。
mirrorlist=http://mirrorlist.centos.org/release=$releasever&arch=$basearch&repo=os&infra=$infra #指定镜像站点目录。
#baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/ #指定YUM源URL(统一资源定位)地址,FTP或HTTP地址。
gpgcheck=1 #是否开启gpg验证,0关闭,1开启。
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 #检查软件包gpg验证信息位置。
设置本地YUM源:
- 将光盘挂载至/mnt目录
- vim /etc/yum.repos.d/CentOS-Media.repo(模板) 进入本地yum源配置文件
- 修改baseurl=file:///rpm包挂载点 7版本只需要一个
- gpgcheck=1 不动
- 修改enabled=1 0表示不开yum源
- 修改网络源配置文件后缀名(因为网络源优先级别高于本地源,网络源配置文件所在位置/etc/yum.repos.d/CentOS-Base.repo)后缀+.bak
3)yum管理命令:
yum install 软件名
yum groupinstall 软件组名
yum remove 软件名
yum groupremove 软件组名
yum -y update
yum groupdate
yum list 查询所有可安装的软件包
yum list 包名 查询yum源中是否有所查询包
yum info 软件名 查询指定软件包的信息
yum grouplist 软件组名 查询所有可以安装的软件组
yum groupinfo 软件组名 列出软件组中包含的软件
yum provides 查询文件在什么包中
yum search 命令 查询文件在什么包中
补充:
- 频繁的用yum安装后可能会出现安装错误的现象;
- 需要执行yum clean all 命令来清空一下yum缓存信息;
- 之后使用yum makecache根据配置文件建立新的缓存数据;
- 再执行yum list 读取yum可安装的软件包。
例1:软件安装—字符界面安装图形化:
yum -y groupinstall "X Window System"
yum -ygroupinstall "GNOME Desktop"
#安装图形化以及工具。
systemctl get-default #查看系统默认运行级别。 multi-user.target(字符)
systemctl set-default graphical.target #设置默认级别为graphical.target
(图形)
centos7图形化中yum安装PackageKit进程锁定问题:
PackageKit是一款以方便Linux软件安装与升级为目的的系统,其设计初衷是在不同的Linux发行版中统一软件图形工具。PackageKit会离线检测更新永久禁用即可:
/etc/yum/pluginconf.d/langpacks.conf
将第一行:enable=1改为enable=0
kill 进程号
4)概念补充:
缓冲:正在被修改或编辑的文件数据处于内存中的缓冲区。
缓存:内存从硬盘中读取的数据,存在于内存的缓存区。
安装网络扩展源命令
yum install -y http://li.nux.ro/download/nux/dextop/el7/x86_64/nux-dextop-release-0-5.el7.nux.noarch.rpm #安装扩展源 yum -y install exfat-utils yum -y install exfat-utils 安装依赖和它本身 yum -y install fuse-exfat |
查询rz、sz 安装包名称
[root@localhost ~]# yum provides rz #也可以 yum search rz lrzsz-0.12.20-36.el7.x86_64 #包名 |
5)命令补充:
下载源centos7(阿里)
[root@localhost ~]# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo |
iptables -F 暂时清空防火墙规则
iptables -L 查看防火墙规则
echo $? 查询上一条命令是否执行成功
CMD1 && CMD2 命令1执行成功,执行命令2
CMD1 ; CMD2 命令1成不成功不影响命令2
6) yum使用网络源安装并保存软件
修改yum配置文件: vim /etc/yum.conf文件中的keepcache=1
[root@localhost ~]# vim /etc/yum.conf [main] cachedir=/var/cache/yum/$basearch/$releasever #保存路径 keepcache=1 #是否保存安装包 debuglevel=2 logfile=/var/log/yum.log exactarch=1 obsoletes=1 gpgcheck=1 plugins=1 installonly_limit=5 bugtracker_url=http://bugs.centos.org/set_project.php?project_id=23&ref=http://bugs.centos.org/bug_report_page.php?category=yum distroverpkg=centos-release |
举例:安装ntfs-3g软件包
yum -y install epel-release #安装扩展网络源
yum -y install ntfs-3g #安装ntfs-3g
ls /var/cache/yum/x86_64/7/epel/packages #保存位置
[root@localhost ~]# ls /var/cache/yum/x86_64/7/base/packages apr-1.4.8-7.el7.x86_64.rpm mailcap-2.1.41-2.el7.noarch.rpm [root@localhost ~]# [root@localhost ~]# sz /var/cache/yum/x86_64/7/base/packages/apr-1.4.8-7.el7.x86_64.rpm #在xshell远程端用rz命令将Linux的rpm包保存到Windows |
实验
1>局域网内服务器作为网络源
服务器端:
1、挂载光盘 [root@localhost ~]#mount /dev/sr0 /mnt/ 2、修改本地源配置文件,给网络源改名 [root@localhost ~]# vim /etc/yum.repos.d/CentOS-Media.repo baseurl=file:///mnt enabled=1 [root@localhost ~]# mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak 3、执行yum list 查看 [root@localhost ~]# yum list #如果执行失败,用kill 进程号 结束进程 kill -9 强制结束 4、安装httpd软件包和createrepo [root@localhost ~]# yum -y install httpd [root@localhost ~]# yum -y install createrepo 服务器端: 1、挂载光盘 [root@localhost ~]#mount /dev/sr0 /mnt/ 2、修改本地源配置文件,给网络源改名 [root@localhost ~]# vim /etc/yum.repos.d/CentOS-Media.repo baseurl=file:///mnt enabled=1 [root@localhost ~]# mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak 3、执行yum list 查看 [root@localhost ~]# yum list #如果执行失败,用kill 进程号 结束进程 kill -9 强制结束 4、安装httpd软件包和createrepo [root@localhost ~]# yum -y install httpd [root@localhost ~]# yum -y install createrepo 5、创建/var/www/html/package目录 [root@localhost ~]# mkdir /var/www/html/package 6、将源码包复制到package下 [root@localhost ~]# cp -a /mnt/Packages/* /var/www/html/package/ 7、生成依赖关系文件 [root@localhost ~]# createrepo /var/www/html/ #也可以将原有的repodata依赖文件复制过来 如果想通过局域网yum源或通过服务器端进行软件组的安装,没有软件组安装不用执行此命令 createrepo /var/www/html/ -g /mnt/repodata/*comps.xml --update 8、清空防火墙规则,启动httpd,可以查询端口对应的进程 [root@localhost ~]# iptables -F [root@localhost ~]# systemctl start httpd [root@localhost ~]# netstat -anpt tcp6 0 0 :::80 :::* LISTEN 65779/httpd 9、浏览器输入本机IP,192.168.26.128,无法看到package包 ,在IP后面输入package 5、创建/var/www/html/package目录 [root@localhost ~]# mkdir /var/www/html/package 6、将源码包复制到package下 [root@localhost ~]# cp -a /mnt/Packages/* /var/www/html/package/ 7、生成依赖关系文件 [root@localhost ~]# createrepo /var/www/html/ #也可以将原有的repodata依赖文件复制过来 如果想通过局域网yum源或通过服务器端进行软件组的安装,没有软件组安装不用执行此命令 createrepo /var/www/html/ -g /mnt/repodata/*comps.xml --update 8、清空防火墙规则,启动httpd,可以查询端口对应的进程 [root@localhost ~]# iptables -F [root@localhost ~]# systemctl start httpd [root@localhost ~]# netstat -anpt tcp6 0 0 :::80 :::* LISTEN 65779/httpd 9、浏览器输入本机IP,192.168.26.128,无法看到package包 ,在IP后面输入package |
客户端:
1、不在本地登录,用xshell远程登录(或卸载/dev/sr0) [root@localhost ~]# mount |grep sr0 [root@localhost ~]# #没有返回结果,说明没有挂载光盘 2、不使用本地源,修改/etc/yum.repos.d/CentOS-Media.repo ,将enabled修改为0 3、修改网络源配置文件(可以给原有代码加注释,在末尾编写;也可以之间新建.repo结尾的文件写代码) [root@localhost ~]# vi /etc/yum.repos.d/CentOS-Base.repo [testC7.6] # [自定义名] name=xxhf_test_Centos7.6 #自定义 baseurl=http://192.168.26.128 #服务器IP gpgcheck=0 enabled=1 4、清空防火墙规则,清空缓存数据,yum list可看到列出的软件列表都来源于testC7.6(自定义) [root@localhost ~]# iptables -F [root@localhost ~]# yum clean all #yum makecache 建立源数据缓存 已加载插件:fastestmirror 正在清理软件源: testC7.6 #yum repolist 查看当前使用yum源 [root@localhost ~]# [root@localhost ~]# yum list 已加载插件:fastestmirror Loading mirror speeds from cached hostfile testC7.6 | 2.9 kB 00:00 testC7.6/primary_db | 3.2 MB 00:00 已安装的软件包 GeoIP.x86_64 1.5.0-13.el7 @anacond …. 5、安装tree命令 [root@localhost ~]# yum -y install tree ================================================================= Package 架构 版本 源 大小 ================================================================= 正在安装: tree x86_64 1.6.0-10.el7 testC7.6 46 k #可以看到源 是testC7.6,证明是从服务器端下载的 安装有依赖关系的包 [root@localhost ~]# yum -y install vim 已安装: vim-enhanced.x86_64 2:7.4.160-5.el7 作为依赖被安装: gpm-libs.x86_64 0:1.20.7-5.el7 perl.x86_64 4:5.16.3-293.el7 perl-Carp.noarch 0:1.26-244.el7 perl-Encode.x86_64 0:2.51-7.el7 perl-Exporter.noarch 0:5.68-3.el7 perl-File-Path.noarch 0:2.09-2.el7 perl-File-Temp.noarch 0:0.23.01-3.el7 perl-Filter.x86_64 0:1.49-3.el7 perl-Getopt-Long.noarch 0:2.40-3.el7 perl-HTTP-Tiny.noarch 0:0.033-3.el7 perl-PathTools.x86_64 0:3.40-5.el7 perl-Pod-Escapes.noarch 1:1.04-293.el7 perl-Pod-Perldoc.noarch 0:3.20-4.el7 perl-Pod-Simple.noarch 1:3.28-4.el7 perl-Pod-Usage.noarch 0:1.63-3.el7 perl-Scalar-List-Utils.x86_64 0:1.27-248.el7 perl-Socket.x86_64 0:2.010-4.el7 perl-Storable.x86_64 0:2.45-3.el7 perl-Text-ParseWords.noarch 0:3.29-4.el7 perl-Time-HiRes.x86_64 4:1.9725-3.el7 perl-Time-Local.noarch 0:1.2300-2.el7 perl-constant.noarch 0:1.27-2.el7 perl-libs.x86_64 4:5.16.3-293.el7 perl-macros.x86_64 4:5.16.3-293.el7 perl-parent.noarch 1:0.225-244.el7 perl-podlators.noarch 0:2.5.1-3.el7 perl-threads.x86_64 0:1.87-4.el7 perl-threads-shared.x86_64 0:1.43-6.el7 vim-common.x86_64 2:7.4.160-5.el7 vim-filesystem.x86_64 2:7.4.160-5.el7 #可以看到把所需要的依赖也安装了 |
注:无法下载安装软件组
2>源码包安装nginx举例:
1、配置yum源 [root@localhost ~]# mount /dev/sr0 /mnt/ #挂载光盘 mount: /dev/sr0 写保护,将以只读方式挂载 [root@localhost ~]# vi /etc/yum.repos.d/CentOS-Media.repo #修改本地yum源 [c7-media] name=CentOS-$releasever - Media baseurl=file:///mnt/ #挂载点 gpgcheck=1 # enabled=1 #0改为1 [root@localhost ~]# mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum .repos.d/CentOS-Base.repo.bak #给Base网络源改名,使它失效 [root@localhost ~]# yum -y install vim #安装vim [root@localhost ~]# yum -y install lrzsz #安装rz和sz [root@localhost ~]# rz #将nginx传输到linux [root@localhost ~]# ls anaconda-ks.cfg nginx-1.18.0.tar.gz [root@localhost ~]#tar -xvf ./nginx-1.18.0.tar.gz #对nginx包进行解压缩 [root@localhost ~]# cd ./nginx-1.18.0 #切换到nginx目录 [root@localhost nginx-1.18.0]# ls #查看目录下的文件和目录 auto CHANGES.ru configure html man src CHANGES conf contrib LICENSE README [root@localhost nginx-1.18.0]# cat ./README #查看当下目录文件 Documentation is available at nginx news #帮助信息,提示了nginx的官网 不能同时启动两种web服务器,如果安装了两个,要修改他们的端口和配置文件 configure在当前目录,检测系统当中有无对应需要的编译工具,还能检测有无安装所需要的函数库文件 #可以加参数,指定安装位置和开启的功能模块 [root@localhost nginx-1.18.0]# ./configure --prefix=/usr/local/nginx #检测环境,指定安装目录 checking for OS + Linux 3.10.0-957.el7.x86_64 x86_64 checking for C compiler ... not found ./configure: error: C compiler cc is not found #没有c语言编译工具 [root@localhost nginx-1.18.0]# yum -y install gcc gcc-c++ #安装c语言编译工具 再次检测 ./configure --prefix=/usr/local/nginx [root@localhost nginx-1.18.0]# ./configure --prefix=/usr/local/nginx ./configure: error: the HTTP rewrite module requires the PCRE library. #检测到没有PCRE库文件 [root@localhost nginx-1.18.0]# yum -y install pcre pcre-devel #安装库文件pcre-devel(依赖) [root@localhost nginx-1.18.0]# yum -y install zlib zlib-devel #安装zlib-devel文件(依赖) 再次检测,没有报错,执行成功 [root@localhost nginx-1.18.0]# ./configure --prefix=/usr/local/nginx nginx error log file: "/usr/local/nginx/logs/error.log" #不是报错,存放错误日志的文件的位置 #如果 --prefix=/usr/local/nginx位置写错,将文件删除,重新生成Makefile; 如果没有指定直接输入 ./configure,可以将 ./nginx-1.18.0删掉,重新解压 [root@localhost nginx-1.18.0]# echo $? #确认上条命令执行是否正确,0表示正确 0 ls当前目录查看,检测成功后出现Makefile文件(存放安装位置) [root@localhost nginx-1.18.0]# ls auto CHANGES.ru configure html Makefile objs src CHANGES conf contrib LICENSE man README 编译安装 如果用其他makefile文件,make -f 可以指定makefile文件的位置(绝对路径) [root@localhost nginx-1.18.0]# make && make install # && 前一条命令执行正确,后面再执行 [root@localhost nginx-1.18.0]# ls /usr/local/ #查看nginx安装是否成功 bin games lib libexec sbin src etc include lib64 nginx share 启动nginx [root@localhost ~]# systemctl start nginx Failed to start nginx.service: Unit not found. #systemctl没办法管理源码包安装的服务 [root@localhost ~]# /usr/local/nginx/sbin/nginx #源码包服务启动方式 [root@localhost tmp]# /usr/local/nginx/sbin/nginx -s stop #停止方式 (切换到/tmp下) 想要删除nginx,先关闭服务,再删除 rm -rf /usr/local/nginx/ [root@localhost ~]# ll /usr/local/nginx/sbin/nginx -rwxr-xr-x. 1 root root 3851224 10月 21 11:18 /usr/local/nginx/sbin/nginx [root@localhost ~]# yum -y install net-tools #安装netstat命令 和ifconfig命令 [root@localhost ~]# netstat -anpt #查看端口状态 Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 21768/nginx: master #80端口开启,http服务(nginx)启动 |
执行./configure命令必须在当前目录中,执行完毕后查看是否有报错信息,是否需要安装其他的依赖软件包。
有的安装包解压缩后,切换到目录下查看没有绿色的可执行的文件configure,但是有Makefile文件,可移执行make,再查看可以看到可执行的命令,可以在当前目录使用,
举例:tree
rz将rpm包传到Linux中,解压缩
[root@localhost ~]# rz [root@localhost ~]# ls anaconda-ks.cfg nginx-1.18.0 nginx-1.18.0.tar.gz tree-1.7.0.tgz [root@localhost ~]# file ./tree-1.7.0.tgz #查看压缩包类型 ./tree-1.7.0.tgz: gzip compressed data, from Unix, last modified: Thu Apr 24 05:39:26 2014 [root@localhost ~]# tar -xvf ./tree-1.7.0.tgz #解压缩 [root@localhost ~]# ls #查看,出现tree-1.7.0目录 anaconda-ks.cfg nginx-1.18.0 tree-1.7.0 exfat.zip nginx-1.18.0.tar.gz tree-1.7.0.tgz [root@localhost ~]# cd ./tree-1.7.0 #切换到目录下 [root@localhost tree-1.7.0]# ls #查看目录下文件,没有可执行文件,但是有Makefile文件 CHANGES hash.c json.c README tree.c xml.c color.c html.c LICENSE strverscmp.c tree.h doc INSTALL Makefile TODO unix.c [root@localhost tree-1.7.0]# make # [root@localhost tree-1.7.0]# ls #查看,有绿色可执行文件的tree CHANGES hash.c INSTALL Makefile tree unix.c color.c hash.o json.c README tree.c unix.o color.o html.c json.o strverscmp.c tree.h xml.c doc html.o LICENSE TODO tree.o xml.o [root@localhost tree-1.7.0]# ./tree /boot #在目录下可以执行./tree命令 /boot ├── config-3.10.0-957.el7.x86_64 ├── efi │ └── EFI │ └── centos ├── grub │ └── splash.xpm.gz ├── grub2 [root@localhost tree-1.7.0]# make install #复制到/usr/bin 和/usr/man/man1 install -d /usr/bin install -d /usr/man/man1 if [ -e tree ]; then \ install tree /usr/bin/tree; \ fi install doc/tree.1 /usr/man/man1/tree.1 #只能在当前看到tree可执行文件,这些可执行文件需要到特定的路径下,才能不加路径的直接执行 把可执行文件放到/usr/bin /usr/sbin目录下,root用户可以执行 |