5.12 学习记录 三种安装方式,iptables的标记模块,两种架构,linux32位64位,二进制可执行文件

5.12 学习记录 三种安装方式,iptables的标记模块,两种架构,linux32位64位,二进制可执行文件,第1张

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

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/928553.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-17
下一篇 2022-05-17

发表评论

登录后才能评论

评论列表(0条)

保存