yum,rpm,源码编译
前言
redhat安装一个软件一般有三种方式:yum 安装、rpm安装、源码编译安装。
区别与联系
yum安装软件联网的话可以自动解决依赖问题,非常方便,但是yum、rpm安装的软件无法自定义安装路径。
而rpm是红帽的包管理工具,其一般是安装以后缀.rpm结尾的二进制包,yum其实可以安装rpm包,而不管是通过yum安装还是通过rpm安装,其安装路径是无法自定义的,
yum安装与rpm安装两者的区别就是,yum能自动解决依赖问题,而rpm安装需要我们自己手动解决依赖问题。源码包,顾名思义就是程序的原始代码,下载源码包后,需要你解压,然后./configure --prefix=xxxx 预编译,即检测环境并指定软件安装目录,生成Makefile,再make 编译生成可执行的二进制文件,最后make install 真正安装。
./configure:预编译,它是用来检测你的安装平台的目标特征的,比如它会检测是否有CC或GCC,是否有安装所需要的依赖包,然后生成Makefile文件,你也可以指定很多参数,如–prefix=安装目录等;
make :是用来编译的,它从Makefile中读取指令,然后编译,加 -j 4参数的话表示开启4个内核进行并行编译;
make install:是正真用来安装的,它也从Makefile中读取指令,安装到指定的位置。注意:对于make出错的情况,需要先解决错误,然后最好使用 make clean 命令先清除make失败的内容然后再重新make编译。
源码包安装的软件卸载
进入到之前解压的源码包位置、make uninstall(卸载安装)、make distclean(卸载编译和配置过程) 、删除软件安装目录; 以上是标准的卸载源码编译安装的软件的步骤,如果觉得麻烦,可以直接删除软件的安装目录及相关命令文件都可以。
判断方法
如果我们需要判断目标可执行二进制文件的安装方式 我们可以通过使用rpm -qf 来判断使用源码还是yum/rpm来安装的。
[root@server1 ~]# rpm -qf /usr/local/nginx/sbin/nginx
file /usr/local/nginx/sbin/nginx is not owned by any package #这是通过源码编译的nginx可以发现rpm找不到这个包
[root@server2 ~]$ rpm -qf /usr/sbin/nginx
nginx-1.20.1-9.el7.x86_64 #返回了相应的包
iptables mark标记
iptable的mark功能可以用于标记网络数据包,用于标记数据包。在一些不同的table或者chain之间需要协同处理某一个数据包时尤其有用。
mark简单的用法
iptables -t mangle -A PREROUTING -j MARK --set-mark 33
-j MARK # -j代表动作这里代表要执行mark操作
iptables -t nat -A PREROUTING -m mark --mark 33 -j ACCEPT
-m mark # -m代表匹配mark
iptables -t nat -A PREROUTING -m mark --mark 0x400/0x400 -j ACCEPT
–mark xxx/yyy # xxx代表要匹配的mark的值,yyy代表掩码,如果要完全匹配可以省略掉掩码
x86和arm架构
X86架构与ARM架构的区别
(1)本质区别:X86使用CISC(Complex Instruction Set Computer,复杂指令集计算机),ARM使用RISC(Reduced Instruction Set Computer,精简指令集计算机),ARM英文全称Advanced RISC Machine。
(2)各自追求:X86追求性能最优,缺点是功耗大,不节能(和ARM对比);ARM追求低功耗(节能),缺点是采用精简指令集,导致编译器处理复杂,因此性能相对X86差。
(3)应用领域:X86主要是PC机(Intel、AMD),X86服务器;ARM主要是应用于移动设备(手机、平板电脑等嵌入式领域)。
(4)典型代表:X86结构主要是Intel、AMD等PC电脑;ARM主要是移动终端,IBM的Power PC。
2、CISC 和 RISC
(1)CISC:复杂指令集CPU,指令众多,通常有300+条的指令。每条指令的操作都有对应的电路设计,因此CPU的电路设计较复杂,功耗较大。但是相对的,对应编译器的设计比较简便,因为各种编程操作都有对应的指令。
(2)RISC:精简指令集CPU,指令相对较少,通常只有几十条指令。CPU设计相对简便,功耗较小。但是,编译器的设计比较复杂,许多编程操作都需要一些指令的灵活组合。它的关键技术在于流水线操作(Pipelining):在一个时钟周期里完成多条指令。
(3)两者区别
RISC的设计重点在于降低由硬件执行指令的复杂度,因为软件比硬件容易提供更大的灵活性和更高的智能,因此RISC设计对编译器有更高的要求;CISC的设计则更侧重于硬件执行指令的功能,使CISC的指令变得很复杂。总之RISC对编译器的要求高,CISC强调硬件的复杂性,CPU的实现更复杂。
32位64位
32位和64位操作系统是指:CPU一次处理数据的能力是32位还是64位。
linux中32位和64位区别
1、设计初衷不同
64位是为视频、绘画、高性能应用程序所设计开发的,32位是为普通用户开发的。
2、配置要求不同
64位操作系统只能安装在64位电脑上(CPU是64位)。32位操作系统可以安装在64位电脑上,但其硬件性能也会大打折扣。
3、运算速度不同
64位cpu的数据宽度为64位,64位指令集可以运行64位数据指令,也就是说处理器一次可提取64位数据,比32位提高了一倍,理论上性能会相应提升1倍。
4、寻址能力不同
32位系统最大只能支持3.2G左右内存。而64位系统支持高达128G的物理内存和多达16TB的虚拟内存。
5、软件普及不同
64位软件相较32位软件少。
二进制可执行文件分析方法
.so文件是Linux下的程序函数库,即编译好的可以供其他程序使用的代码和数据。
ldd动态链接库信息
动态链接库,即没有在编译链接的时候直接打入到程序中的,而是运行时候动态加载了,从而节省内存,通过动态链接库,我们可以知道这个可执行文件用了哪些动态库,方法也比较简单。
[root@server1 ~]# ldd /usr/local/nginx/sbin/nginx
linux-vdso.so.1 => (0x00007fff543f3000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007f3e286c9000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f3e284ad000)
libcrypt.so.1 => /lib64/libcrypt.so.1 (0x00007f3e28276000)
libpcre.so.1 => /lib64/libpcre.so.1 (0x00007f3e28014000)
libssl.so.10 => /lib64/libssl.so.10 (0x00007f3e27da2000)
libcrypto.so.10 => /lib64/libcrypto.so.10 (0x00007f3e27941000)
libz.so.1 => /lib64/libz.so.1 (0x00007f3e2772b000)
libc.so.6 => /lib64/libc.so.6 (0x00007f3e2735e000)
/lib64/ld-linux-x86-64.so.2 (0x00007f3e288cd000)
libfreebl3.so => /lib64/libfreebl3.so (0x00007f3e2715b000)
libgssapi_krb5.so.2 => /lib64/libgssapi_krb5.so.2 (0x00007f3e26f0e000)
libkrb5.so.3 => /lib64/libkrb5.so.3 (0x00007f3e26c25000)
libcom_err.so.2 => /lib64/libcom_err.so.2 (0x00007f3e26a21000)
libk5crypto.so.3 => /lib64/libk5crypto.so.3 (0x00007f3e26806000)
libkrb5support.so.0 => /lib64/libkrb5support.so.0 (0x00007f3e265f7000)
libkeyutils.so.1 => /lib64/libkeyutils.so.1 (0x00007f3e263f3000)
libresolv.so.2 => /lib64/libresolv.so.2 (0x00007f3e261da000)
libselinux.so.1 => /lib64/libselinux.so.1 (0x00007f3e25fb3000)
objdump 将二进制代码转汇编指令
1、查看依赖库
[root@server1 ~]# objdump -x /usr/local/nginx/sbin/nginx | grep NEEDED
NEEDED libdl.so.2
NEEDED libpthread.so.0
NEEDED libcrypt.so.1
NEEDED libpcre.so.1
NEEDED libssl.so.10
NEEDED libcrypto.so.10
NEEDED libz.so.1
NEEDED libc.so.6
1.2、查看动态库,依赖的库有哪些
[root@server1 ~]# objdump -x /usr/lib64/libdl.so.2 | grep NEEDED
NEEDED libc.so.6
NEEDED ld-linux-x86-64.so.2
通常可以通过yum provides来查看某些函数库可以通过安装包下载
[root@server1 ~]# yum provides libz.so.1
Loaded plugins: langpacks, product-id, search-disabled-repos, subscription-manager
This system is not registered with an entitlement server. You can use subscription-manager to register.
zlib-1.2.7-18.el7.i686 : The compression and decompression library
Repo : lcf
Matched from:
Provides : libz.so.1