目录
前言
这篇文章详细介绍了Linux应用程序的基础知识,总结了rpm软件包和源代码包安装升级等操作。花了比较长的时间完成,创作不易,如果对你有帮助还请点个赞,感谢🌹🌹🌹
Linux 应用程序基础
应用程序与系统命令的关系
之所以把它们放在一起讨论,是因为应用程序的执行有它自己命令的格式,例如vim其实就是第三方的程序,属于shell外部命令。我们也可以认为系统命令就是shell内部命令。
两者的区别
- 文件位置
- 系统命令:一般在/bin和/sbin目录中,或为Shell内部指令
- 应用程序:通常在/usr/bin和/usr/sbin目录中
- 主要用途
- 系统命令:完成对系统的基本管理工作,例如IP配置工具
- 应用程序:完成相对独立的其他辅助任务,例如网页浏览器
- 适用环境
- 系统命令:一般只在字符操作界面中运行
- 应用程序:根据实际需要,有些程序可在图形界面中运行
- 运行格式
- 系统命令:一般包括命令字、命令选项和命令参数
- 应用程序:通常没有固定的执行格式、
经典应用程序的目录结构
通过这张表,我们可以大概了解各个类型的程序文件所在的目录。
软件包封装类型
这里我们主要学习的是rpm软件包和源代码软件包的安装使用。
源代码软件包里面包含的就是开发者编写的源代码,我们把这些开发者放到网上的开源代码下载下来,编译并配置系统环境和功能,这个程序就存在了。这个也是程序安装里面最复杂的安装过程。
rpm软件包安装也比较麻烦,不过它的麻烦体现在rpm包有许多依赖包。在安装时,它可能需要依赖某个依赖包,类似于wndows我们下载程序还需要下载另外某个程序,没有依赖包的话,下载rpm包也会不成功。后面我们会依靠yum来找到并安装这些依赖包。
使用RPM包管理工具
RPM概述
RPM Package Manager:
- 由 Red Hat 公司提出,被众多 Linux 发行版所采用
- 建立统一的数据库文件
- 详细记录软件包安装、卸载等变化信息
- 自动分析软件包依赖关系
RPM软件包: - 软件素材参考:http://www.rpm.org
- 一般命名格式:
RPM包管理 rpm 命令
接下来我们学习基于rpm命令管理RPM包
下图是rpm命令的主要功能
查询RPM 软件包信息
查询已安装的 RPM 软件信息:
rpm -q[子选项] [软件名]
-qa:查看系统中已安装的所有RPM软件包列表
-qi:查看指定软件的详细信息
-ql:查询指定软件包所安装的目录、文件列表
-qf:查询文件或目录属于哪个RPM软件
-qc:仅显示指定软件包安装的配置文件
-qd:仅显示指定软件包安装的文档文件
如果你想查看包含指定名字的软件也可以借助|
符号和grep
指令来抓取
[root@localhost ~]# rpm -qa |grep dhc
dhcp-common-4.2.5-68.el7.centos.x86_64
dhcp-libs-4.2.5-68.el7.centos.x86_64
dhclient-4.2.5-68.el7.centos.x86_64
查询未安装的 RPM 软件包文件中信息:
rpm - qp[子选项] RPM包文件
-qpi:通过.rpm包文件查看该软件的详细信息
-qpl:查看.rpm安装包内所包含的目录、文件列表
-qpc:查看.rpm安装包内包含的配置文件列表
-qpd:查看.rpm安装包内包含的文档文件列表
这个查询需要你有未安装的软件包,如果没有下载软件包是查询不到的。
[root@localhost Packages]# rpm -qpi httpd
错误:打开 httpd 失败: 没有那个文件或目录
安装、升级、卸载 RPM 软件包:
rpm [选项] RPM包文件 ...
-i:安装一个新的 rpm 软件包
-h:以“#”号显示安装的进度
-v:显示安装过程中的详细信息
-e:卸载软件包
-U:升级某个 rpm 软件,若原本未装,则进行安装
-F:升级某个 rpm 软件,若原本未装,则放弃安装
–force:强制安装所指定的rpm软件包
–nodeps:安装、升级或卸载软件时,忽略依赖关系 (一般不用这个,会导致异常)
如果安装的软件需要依赖包的话,就会安装失败
[root@localhost Packages]# cd /root
[root@localhost ~]# ls //检查是否有下载软件包
aa anaconda-ks.cfg a.txt bbc b.txt c.txt httpd-2.4.6-80.el7.centos.x86_64.rpm
[root@localhost ~]# rpm -ivh httpd-2.4.6-80.el7.centos.x86_64.rpm //开始安装软件
警告:httpd-2.4.6-80.el7.centos.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID f4a80eb5: NOKEY
错误:依赖检测失败:
/etc/mime.types 被 httpd-2.4.6-80.el7.centos.x86_64 需要
httpd-tools = 2.4.6-80.el7.centos 被 httpd-2.4.6-80.el7.centos.x86_64 需要
libapr-1.so.0()(64bit) 被 httpd-2.4.6-80.el7.centos.x86_64 需要
libaprutil-1.so.0()(64bit) 被 httpd-2.4.6-80.el7.centos.x86_64 需要
//有四个依赖包需要被安装
你需要先安装这几个依赖包以及很有可能这几个依赖包又会有其它依赖包需要提前安装,所以一般不用rpm而是yum指令下载软件。
维护RPM数据库
//重建RPM数据库
[root@localhost ~]# rpm --rebuilddb
或
[root@localhost ~]# rpm --initdb
//导入验证公钥,验证是否为官方软件包
[root@localhost ~]# rpm --import /media/cdrom/RPM-GPG-KEY-redhat-release
从源代码编译安装程序
使用源代码安装软件的优点:
- 获得最新的软件版本,及时修复bug
- 根据用户需要,灵活定制软件功能
编译安装源代码包
- Tarball 封包
- .tar.gz 和 .tar.bz2 格式居多
- 软件素材参考:http://sourceforge.net
- 完整性校验
- md5sum校验工具
[root@localhost ~]# md5sum axel-1.0a.tar.gz
2d94c0b36b374834567f1fcec5f89119 axel-1.0a.tar.gz
//2d94c0b36b374834567f1fcec5f89119是官方发布的MD5校验和,如果不一致,那么说明该软件包在网络传输过程中可能被非法改动过
//对于校验和不一致的软件包,应尽量不要使用,以免带来病毒、木马等不安全因素
- 确认源代码编译环境
- 需要安装支持 C/C++程序语言的编译器,如:gcc-4.4.7-4.el6、gcc-c+±4.4.7-4.el6 等
编译安装过程
第一步,下载源代码安装包文件
如果是图形化操作系统,可以直接把真实机上的软件包拖拽到虚拟机里,如果是命令行界面,可以用rz
命令,通过SecureCRT这样的终端上传文件或软件包。具体操作如下:
[root@localhost ~]# rz
-bash: rz: 未找到命令 //不能使用rz命令,需要安装相关软件包
[root@localhost ~]# yum install -y lrzsz
[root@localhost ~]# rz
rz waiting to receive.
Starting zmodem transfer. Press Ctrl+C to cancel.
Transferring httpd-2.4.25.tar.gz...
100% 8262 KB 8262 KB/sec 00:00:01 0 Errors
然后就会打开这个窗口,在自己的文件夹里找到软件包直接点击add然后确定就OK了
第二步,tar解压
然后查看是否安装以及解压成功
[root@localhost ~]# ls
aa anaconda-ks.cfg a.txt bbc b.txt c.txt httpd-2.4.25.tar.gz
[root@localhost ~]# tar zxf httpd-2.4.25.tar.gz //也可以-C后面接解压在哪个目录
[root@localhost ~]# ls
aa anaconda-ks.cfg a.txt bbc b.txt c.txt httpd-2.4.25 httpd-2.4.25.tar.gz
第三步,./configure配置
第三步,然后切到httpd-2.4.25目录下面,配置configure,如图,绿色的文件就是可执行文件
configure配置
[root@localhost httpd-2.4.25]# ./configure --prefix=/usr/local/httpd //后面的路径如果没有,系统会自己创建
然后如果出现这种情况
表明有个arp依赖包需要安装,就继续安装arp
继续安装httpd
说明arp还有附属包没被装上,就在arp后面加个*
[root@localhost httpd-2.4.25]# yum install -y apr*
继续./configure --prefix=/usr/local/httpd
这里需要C和C++环境以及make编译
[root@localhost httpd-2.4.25]# yum install -y gcc gcc-c++ make
继续./configure --prefix=/usr/local/httpd
这些提示有pcre的包没有安装
//pcre的包提示已安装就在后面加*
[root@localhost httpd-2.4.25]# yum install -y pcre
[root@localhost httpd-2.4.25]# yum install -y pcre*
到后面显示这个说明就安装好了
第四步,make编译
[root@localhost httpd-2.4.25]# make
编译成功
第五步 make install 安装
[root@localhost httpd-2.4.25]# make install
安装成功
第六步,启动
值得注意的是,在默认情况下,用编译安装的方式安装程序是不能用systemctl
进行启动,其它用yum方式和rpm安装的方式可以。
编译安装的软件,我们只能用编译安装所生成的工具或命令来控制它。
[root@localhost httpd-2.4.25]# cd /usr/local/httpd/bin/
[root@localhost httpd-2.4.25]# ls
这里面绿色的是可执行文件,其中httpd
是主程序,apachectl
是程序启动脚本,我们执行一下它
[root@localhost bin]# ./apachectl start
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using localhost.localdomain. Set the 'ServerName' directive globally to suppress this message
//这个报错是'ServerName'域名的一个错误,不影响
检测httpd服务能不能用最直接的办法就是用真实机的浏览器访问虚拟机
这里访问成功!