安装及管理程序
开发语言
系统级开发
汇编语言
C
C++
应用级开发
java
Python
go
php
perl
delphi
Linux源码包
实际上,源码包就是一大堆源代码程序,是由程序员按照特定的格式和语法编写出来的
Linux二进制包
二进制包,也就是源码包经过成功编译之后产生的包。由于二进制包在发布之前就已经完成了编译的工作,因此用户安装软件的速度较快(同 Windows下安装软件速度相当),且安装过程报错几率大大减小。
源码包 VS RPM二进制包
源码包一般包含多个文件,为了方便发布,通常会将源码包做打包压缩处理,Linux 中最常用的打包压缩格式为“tar.gz”,因此源码包又被称为 Tarball。
总的来说,使用源码包安装软件具有以下几点好处:
-
开源。如果你有足够的能力,则可以修改源代码。
-
可以自由选择所需的功能。
-
因为软件是编译安装的,所以更加适合自己的系统,更加稳定,效率也更高。
-
卸载方便。
但同时,使用源码包安装软件也有几点不足:
-
安装过程步骤较多,尤其是在安装较大的软件集合时(如 LAMP 环境搭建),容易出现拼写错误。
-
编译时间较长,所以安装时间比二进制安装要长。
-
因为软件是编译安装的,所以在安装过程中一旦报错,新手很难解决
-
考虑到用户安装软件的难度
-
厂商直接 将包做成二进制方便使用
预处理(Pre-Processing)
所有的#define删除,并且展开所有的宏定义
2)处理所有的条件预编译指令,比如#if #ifdef #elif #else #endif等
3)处理#include 预编译指令,将被包含的文件插入到该预编译指令的位置。
4)删除所有注释 "//"和"/* */".
5)添加行号和文件标识,以便编译时产生调试用的行号及编译错误警告行号。
6)保留所有的#pragma编译器指令,因为编译器需要使用它们
-
编译 (Compiling)
编译过程就是把预处理完的文件进行一系列的词法分析,语法分析,语义分析及优化后,最后生成相应的汇编代码
-
汇编 (Assembling)
汇编器是将汇编代码转变成机器可以执行的命令,每一个汇编语句几乎都对应一条机器指令。汇编相对于编译过程比较简单,根据汇编指令和机器指令的对照表一一翻译即可
-
链接 (Linking)
通过调用链接器ld来链接程序运行需要的一大堆目标文件,以及所依赖的其它库文件,最后生成可执行文件
#分步骤编译运行
gcc -E hello.c -o hello.i 对hello.c文件进行预处理,生成了hello.i 文件
gcc -S hello.i -o hello.s 对预处理文件进行编译,生成了汇编文件
gcc -c hello.s -o hello.o 对汇编文件进行编译,生成了目标文件
gcc hello.o -o hello 对目标文件进行链接,生成可执行文件
#一步实现编译过程
gcc hello.c -o hello 直接编译链接成可执行目标文件
#include<stdio.h>
int main()
{
printf("Hello World!\n");
}
[root@localhost nginx-1.18.0]#find -name "*.c" -exec cat {} \;|wc -l
#查看 nginx 包里有多少行
179605
ldd
1.应用程序与系统命令的关系
1.对比系统命令和应用程序的不同
-
位置: Linux中一切皆为文件 演示内部命令和外部命令 位置 应用程序位置
-
用途: 命令主要处理系统的基本操作(复制,配置) 应用程序可以完成独立的任务浏览器访问网页
-
使用环境 字符界面 字符和桌面
-
格式 命令的格式 命令参数对象 无固定格式
2.典型应用程序的目录结构
文件类型 | 保存目录 |
---|---|
普通执行程序文件 | /usr/bin |
服务器执行程序文件和管理程序文件 | /usr/sbin |
应用程序配置文件 | /etc |
日志文件 | /var/log |
应用程序参考文档文件 | /usr/share/doc |
3.常见的软件包封装类型
文件类型 | 保存目录 |
---|---|
RPM软件包 | 扩展名为“.rpm” |
DEB软件包 | 扩展名为“.deb” |
源代码软件包 | 一般为“.tar.gz”、“.tar.bz2”等格式的压缩包 包含程序的原始代码 |
绿色免安装的软件包 | 软件包的扩展名不一,以TarBall格式的居多 在压缩包内提供已编译好的执行程序文件 解开压缩包后的文件即可直接使用 |
-
RPM包 : RPM Package Manager的缩写 是红帽公司自主研发的一款工具,实用性强。RPM包是预先在linux机器上编译好并打包好的文件,安装起来非常快捷。但是也有一些缺点,比如安装的环境必须与编译时的环境一致或者相当;包与包之间存在相互依赖的情况。
-
DEB包:在Linux系统中类似于windows中的软件包(exe),几乎不需要什么复杂的编译即可通过鼠标点击安装使用。此外,deb广泛应用于越狱后iOS软件及MeeGo(含Maemo软件)中。Debian包是将包的文件信息以及包内容,经过gzip和tar打包而成。
-
源代码软件包 :是需要我们自己把源代码编译成二进制的可执行文件。如果你读得懂这些源代码,那么你就可以去修改这些源代码自定义功能,然后再去编译成你想要的。使用源码包的好处除了可以自定义修改源代码外还可以定制相关的功能,因为源码包在编译的时候是可以附加额外的选项的。
-
绿色免安装的软件包 :顾名思义自行理解比如Windows的截图软件
查看rpm包里面的内容及安全性
[root@localhost Packages]# rpm2cpio tree-1.6.0-10.el7.x86_64.rpm |cpio -tv
[root@localhost data]#rpm -qa 'gpg-pubkey*'
gpg-pubkey-f4a80eb5-53a7ff4b
[root@localhost data]#rpm -e gpg-pubkey-f4a80eb5-53a7ff4b
[root@localhost data]#rpm -K tree-1.6.0-10.el7.x86_64.rpm
[root@localhost data]#echo xx>> tree-1.6.0-10.el7.x86_64.rpm
[root@localhost data]#rpm -K tree-1.6.0-10.el7.x86_64.rpm
tree-1.6.0-10.el7.x86_64.rpm: RSA sha1 (MD5) PGP MD5 不正确
软件包中的文件分类
4.RPM包管理工具
Red-Hat Package Manager
由Red Hat公司提出,被众多Linux发行版所采用
建立统一的数据库文件(一张对应表将信息写入)
详细记录软件包安装、卸载等变化信息
自动分析软件包依赖关系
RPM软件包 软件素材参考:http://www.rpm.org
4.1一般命名格式
bash-4.1.2-15.el6_4.x86_64.rpm
bash shell环境 版本信息 4.1.2 15发布次数 x86_64硬件(为“i386”或“i686”等)
4.2拆包后的分类
[root@localhost Packages]# ll httpd*
-rw-rw-r--. 2 root root 2835196 8月 11 2017 httpd-2.4.6-67.el7.centos.x86_64.rpm
-rw-rw-r--. 2 root root 197360 8月 11 2017 httpd-devel-2.4.6-67.el7.centos.x86_64.rpm
-rw-rw-r--. 2 root root 1402824 8月 11 2017 httpd-manual-2.4.6-67.el7.centos.noarch.rpm
-rw-rw-r--. 2 root root 89284 8月 11 2017 httpd-tools-2.4.6-67.el7.centos.x86_64.rpm
#主包 开发包 手册包 工具包
4.3程序包管理器相关文件
-
包文件组成 (每个包独有)
-
包内的文件
-
元数据,如:包的名称,版本,依赖性,描述等
-
可能会有包安装或卸载时运行的脚本
-
数据库(公共):/var/lib/rpm (安装好后会将一些公共的数据放入数据库中)
-
程序包名称及版本
-
依赖关系
-
功能说明
-
包安装后生成的各文件路径及校验码信息
[root@localhost Packages]# ll /var/lib/rpm
#很关键安装卸载包都需要
总用量 96744
-rw-r--r--. 1 root root 4157440 8月 27 09:30 Basenames
-rw-r--r--. 1 root root 16384 8月 27 09:30 Conflictname
-rw-r--r--. 1 root root 311296 8月 27 10:07 __db.001
-rw-r--r--. 1 root root 90112 8月 27 10:07
软件包之间可能存在依赖关系,甚至循环依赖,即:A包依赖B包,B包依赖C包,C包依赖A包
安装软件包时,会因为缺少依赖的包,而导致安装包失败。
5.rpm命令的格式
RPM软件可以实现几乎所有的功能,新增,删除,更新等
5.1查询
选项 | 功能效果 |
---|---|
rpm -qa(all) | 显示当前系统中以 RPM 方式安装的所有软件列表 |
rpm -q 软件名 | 查询指定软件是否已安装 |
rpm -qi 软件名 | 查看指定软件包的名称、版本、许可协议、用途描述等详细信息 |
rpm -ql(list) 软件名 | 显示指定的软件包在当前系统中安装的所有目录、文件列表 |
rpm -qc (configfiles ) 软件名 | 列出已安装的指定软件的配置文件 |
rpm -qd(docfiles) 软件名 | 列出已安装的指定软件的软件包文档所在位置 |
rpm -qR (requires) 软件名 | 列出已安装的指定软件的依赖的软件包及文件 |
rpm -qf(file) 软件名 | 查看指定的文件或目录是由哪个软件包所安装的 |
rpm-qpd | 查询未安装指定软件包的文档位置 |
rpm -qpi | 查询未安装指定软件包的完整名称详细信息 |
rpm -qpl | 查询未安装指定软件包的文件列表 |
rpm -qpc | 查询未安装指定软件包的配置文件位置 |
5.2挂载:
mount 设备 加文件夹路径 (已存在且是空的文件夹,原来的数据将被隐藏)
挂载规则
-
一个挂载点同一时间只能挂载一个设备
-
一个挂载点同一时间挂载了多个设备,只能看到最后一个挂载设备的数据,其它设备上的数据将被隐藏
-
一个设备可以同时挂载到多个挂载点
-
通常挂载点一般是已存在空的目录
5.3 安装卸载升级
基本格式
rpm [选项] rpm软件包
选项 | 效果 |
---|---|
-i | 安装一个新的RPM软件包 |
-U | 升级某个软件包,若未安装过则进行安装 |
-F | 升级某个软件包,若未安装过则直接结束 |
-h | 在安装或升级过程中已#号显示读条 |
-v | 显示安装过程的详细信息 |
--force | 强制安装某个软件包 |
-e 软件名 | 卸载指定的软件 |
--nodeps | 在安装或升级、卸载一个软件包时,不检查与其他包的依赖关系 |
[root@localhost Packages]#rpm -e tree
[root@localhost Packages]#rpm -ive tree
[root@localhost Packages]# rpm -ivh httpd-2.4.6-67.el7.centos.x86_64.rpm
#进入
错误:依赖检测失败:
httpd-tools = 2.4.6-67.el7.centos 被 httpd-2.4.6-67.el7.centos.x86_64 需要
安装路径 | 含 义 |
---|---|
/etc/ | 配置文件安装目录 |
/usr/bin/ | 可执行的命令安装目录 |
/usr/lib/ | 程序所使用的函数库保存位置 |
/usr/share/doc/ | 基本的软件使用手册保存位置 |
/usr/share/man/ | 帮助文件保存位置 |
5.4维护RPM 数据库
1.重建RPM数据库
当RPM 数据库发生损坏,可通过 重建RPM 数据库 修复
rpm --rebuild 或者 rpm --initdb
2.导入验证公钥
在没有导入用于数字签名验证的公钥之前,安装光盘中的一部分RPM 包时会报错。需要向RPM数据库中导入位于光盘根目录下的公钥文件。
/var/lib/rpm
#安装文件的信息都在这个里面
[root@localhost Packages]# mount /dev/sr0
[root@localhost Packages]# rpm --import /mnt/RPM-GPG-KEY-CentOS-7
例子安装tree
[root@localhost Packages]# mount /dev/sr0 /mnt/
[root@localhost Packages]# df
文件系统 1K-块 已用 可用 已用% 挂载点
/dev/mapper/centos-root 10475520 4733364 5742156 46% /
devtmpfs 917600 0 917600 0% /dev
tmpfs 933524 5400 928124 1% /dev/shm
tmpfs 933524 9188 924336 1% /run
tmpfs 933524 0 933524 0% /sys/fs/cgroup
/dev/sda1 5223424 182388 5041036 4% /boot
/dev/sr0 4414592 4414592 0 100% /mnt
tmpfs 186708 36 186672 1% /run/user/0
[root@localhost ~]# cd /mnt/Packages/
[root@localhost Packages]# ls
[root@localhost Packages]# ls |grep tree
texlive-pst-tree-svn24142.1.12-38.el7.noarch.rpm
tree-1.6.0-10.el7.x86_64.rpm
[root@localhost Packages]# rpm -ivh tree-1.6.0-10.el7.x86_64.rpm
准备中... ################################# [100%]
正在升级/安装...
1:tree-1.6.0-10.el7 ################################# [100%]
[root@localhost Packages]# rpm -e tree
#卸载tree软件包
[root@localhost Packages]# rpm -qa |grep tree
rpm2cpio tree-1.6.0-10.el7.x86_64.rpm |cpio -tv
#查看rpm包里的信息
6.编译安装
大部分是c语言开发的,更方便的使用
-
软件版本比较新,新功能,修复bug
-
可以自行定义配置文件的路径
-
源码可能有100个功能,红帽认为你可能不需要会自行处理砍掉,自行定制50
程序包编译安装:
源代码-->预处理-->编译-->汇编-->链接-->执行
多文件:文件中的代码之间,很可能存在跨文件依赖关系
虽然有很多开源软件将软件打成包,供人们使用,但并不是所有源代码都打成包,如果想使用开源软
件,可能需要自已下载源码,进行编译安装。另外即使提供了包,但是生产中需要用于软件的某些特
性,仍然需要自行编译安装。但是利用源代码编译安装是比较繁琐的,庆幸的是有相关的项目管理工具
可以大大减少编译过程的复杂度
#预先安装以下软件<实验见下一章> yum -y install gcc gcc-c++ make pcre-devel expat-devel perl pcre apr*
[root@localhost ~]# mkdir /bianyi
[root@localhost ~]# cd /bianyi/
[root@localhost bianyi]# wget https://mirrors.bfsu.edu.cn/apache//httpd/httpd-2.4.48.tar.bz2
--2021-07-01 22:39:47-- https://mirrors.bfsu.edu.cn/apache//httpd/httpd-2.4.48.tar.bz2
正在解析主机 mirrors.bfsu.edu.cn (mirrors.bfsu.edu.cn)... 39.155.141.16, 2001:da8:20f:4435:4adf:37ff:fe55:2840
正在连接 mirrors.bfsu.edu.cn (mirrors.bfsu.edu.cn)|39.155.141.16|:443... 已连接。
已发出 HTTP 请求,正在等待回应... 200 OK
长度:7194385 (6.9M) [application/octet-stream]
正在保存至: “httpd-2.4.48.tar.bz2”
100%[=========================================================>] 7,194,385 4.45MB/s 用时 1.5s
2021-07-01 22:39:49 (4.45 MB/s) - 已保存 “httpd-2.4.48.tar.bz2” [7194385/7194385])
[root@localhost bianyi]tar xvf httpd-2.4.48.tar.bz2
[root@localhost bianyi]# ls
httpd-2.4.48 httpd-2.4.48.tar.bz2
[root@localhost bianyi]# cd httpd-2.4.48/
[root@localhost httpd-2.4.48]# ./configure \
--prefix=/usr/local/apache \
./configure --prefix=/usr/local/apache
中间省略
configure: Configuring Apache Portable Runtime library...
configure:
checking for APR... no
configure: error: APR not found. Please read the documentation.
无apr包安装即可
[root@localhost httpd-2.4.48]# yum install apr* -y
中间省略
作为依赖被升级:
cyrus-sasl.x86_64 0:2.1.26-23.el7 cyrus-sasl-gssapi.x86_64 0:2.1.26-23.el7
cyrus-sasl-lib.x86_64 0:2.1.26-23.el7 cyrus-sasl-md5.x86_64 0:2.1.26-23.el7
cyrus-sasl-plain.x86_64 0:2.1.26-23.el7 cyrus-sasl-scram.x86_64 0:2.1.26-23.el7
expat.x86_64 0:2.1.0-12.el7 libdb.x86_64 0:5.3.21-25.el7
libdb-utils.x86_64 0:5.3.21-25.el7 openldap.x86_64 0:2.4.44-23.el7_9
完毕!
[root@localhost httpd-2.4.48]# ./configure \
> --prefix=/usr/local/apache \
checking for APR-util... yes
checking for gcc... gcc
checking whether the C compiler works... no
configure: error: in `/bianyi/httpd-2.4.48':
configure: error: C compiler cannot create executables
See `config.log' for more details
提示gcc 没有安装,安装即可
[root@localhost httpd-2.4.48]# yum install gcc* -y
中间省略
作为依赖被升级:
glibc.x86_64 0:2.17-324.el7_9 glibc-common.x86_64 0:2.17-324.el7_9 libgcc.x86_64 0:4.8.5-44.el7
libgomp.x86_64 0:4.8.5-44.el7 libstdc++.x86_64 0:4.8.5-44.el7
[root@localhost httpd-2.4.48]# ./configure \
> --prefix=/usr/local/apache \
checking for gcc option to accept ISO C99... -std=gnu99
checking for pcre-config... false
configure: error: pcre-config for libpcre not found. PCRE is required and available from http://pcre.org/
pcre没装安装即可
[root@localhost httpd-2.4.48]# yum install pcre* -y
中间省略
已安装:
pcre-devel.x86_64 0:8.32-17.el7 pcre-static.x86_64 0:8.32-17.el7
pcre-tools.x86_64 0:8.32-17.el7 pcre2-devel.x86_64 0:10.23-2.el7
pcre2-static.x86_64 0:10.23-2.el7 pcre2-tools.x86_64 0:10.23-2.el7
pcre2-utf16.x86_64 0:10.23-2.el7 pcre2-utf32.x86_64 0:10.23-2.el7
完毕!
[root@localhost httpd-2.4.48]# ./configure \
> --prefix=/usr/local/apache \
中间省略
Server Version: 2.4.48
Install prefix: /usr/local/apache
C compiler: gcc -std=gnu99
CFLAGS: -pthread
CPPFLAGS: -DLINUX -D_REENTRANT -D_GNU_SOURCE
LDFLAGS:
LIBS:
C preprocessor: gcc -E
[root@localhost httpd-2.4.48]# make
等待编译完成
/modules/lua -I/bianyi/httpd-2.4.48/modules/proxy -I/bianyi/httpd-2.4.48/modules/http2 -I/bianyi/httpd-2.4.48/modules/session -I/bianyi/httpd-2.4.48/modules/ssl -I/bianyi/httpd-2.4.48/modules/test -I/bianyi/httpd-2.4.48/server -I/bianyi/httpd-2.4.48/modules/md -I/bianyi/httpd-2.4.48/modules/arch/unix -I/bianyi/httpd-2.4.48/modules/dav/main -I/bianyi/httpd-2.4.48/modules/generators -I/bianyi/httpd-2.4.48/modules/mappers -prefer-pic -c mod_rewrite.c && touch mod_rewrite.slo
/usr/lib64/apr-1/build/libtool --silent --mode=link gcc -std=gnu99 -pthread -o mod_rewrite.la -rpath /usr/local/apache/modules -module -avoid-version mod_rewrite.lo
make[4]: 离开目录“/bianyi/httpd-2.4.48/modules/mappers”
make[3]: 离开目录“/bianyi/httpd-2.4.48/modules/mappers”
make[2]: 离开目录“/bianyi/httpd-2.4.48/modules”
make[2]: 进入目录“/bianyi/httpd-2.4.48/support”
make[2]: 离开目录“/bianyi/httpd-2.4.48/support”
make[1]: 离开目录“/bianyi/httpd-2.4.48”
[root@localhost httpd-2.4.48]# make install
等待编译完成
Installing man pages and online manual
mkdir /usr/local/apache/man
mkdir /usr/local/apache/man/man1
mkdir /usr/local/apache/man/man8
mkdir /usr/local/apache/manual
make[1]: 离开目录“/bianyi/httpd-2.4.48”
[root@localhost bin]# /usr/local/apache/bin/apachectl
#启动服务
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
[root@localhost bin]# netstat -ntap |grep 80
tcp6 0 0 :::80 :::* LISTEN 56463/httpd
[root@localhost bin]# systemctl stop firewalld.service
[root@localhost bin]# setenforce 0
[root@localhost bin]# netstat -ntap |grep 80
tcp6 0 0 :::80 :::* LISTEN 56463/httpd
使用真机浏览器打开测试
7.编译安装小脚本
[root@test1 /]# vim httpdinstall.sh mkdir /bianyi cd /bianyi/ wget https://mirrors.bfsu.edu.cn/apache//httpd/httpd-2.4.48.tar.bz2 tar xvf httpd-2.4.48.tar.bz2 cd httpd-2.4.48/ yum install apr* gcc* pcre* -y ./configure --prefix=/usr/local/apache --enable-so --enable-rewrite --enable-mods-shared=most --with-mpm=worker --disable-cgid --disable-cgi make make install systemctl stop firewalld.service /usr/local/apache/bin/apachectl start [root@test1 /]#chmod 755 httpdinstall.sh [root@test1 /]#./ httpdinstall.sh
yum install samba -y --downloadonly --downloaddir=/opt/samba/ 下载全部依赖包
8 yum 安装
YUM(Yellow dog Updater,Modified)
yum是一个基于RPM包(是Red-Hat Package Manager红帽软件包管理器的缩写)构建的软件更新机制,能够自动解决软件包之间的依赖关系。解决了日常工作中的大量查找安装依赖包的时间
标签:httpd,48,管理程序,安装,rpm,root,localhost,2.4 From: https://www.cnblogs.com/sl08/p/17575138.html