Linux的软件包管理
? ? ? ? ? ? 此博客的环境任意。 ? ? ? 主题Linux的软件包管理? ? ? 一软件管理工具? ? 1编译安装 ? ? ?2rpm包管理 ? ? ? ? ?3yum管理 ? ? ? 二软件运行和编译?
? ABI:Application Binary Interface ? 应用程序的二进制接口。 一个二进制程序编好了,要在操作系统上跑,就要符合接口标准。 Windows与Linux不兼容。因为二进制程序的格式不同。 ELF(Executable and Linkable Format)是linux的。PE(Portable Executable)是windows的。 ? ? 注意我现在使用图形化界面的虚拟机 [[email?protected] ~]# ll total 8 -rw-------. 1 root root 1922 Jan 10 12:15 anaconda-ks.cfg drwxr-xr-x. 2 root root 6 Jan 10 14:19 Desktop drwxr-xr-x. 2 root root 6 Jan 10 14:19 Documents drwxr-xr-x. 2 root root 6 Jan 10 14:19 Downloads -rw-r--r--. 1 root root 1953 Jan 10 12:45 initial-setup-ks.cfg drwxr-xr-x. 2 root root 6 Jan 10 14:19 Music drwxr-xr-x. 2 root root 6 Jan 10 14:19 Pictures drwxr-xr-x. 2 root root 6 Jan 10 14:19 Public drwxr-xr-x. 2 root root 6 Jan 10 14:19 Templates drwxr-xr-x. 2 root root 6 Jan 10 14:19 Videos [[email?protected] ~]# ls anaconda-ks.cfg Desktop Documents Downloads initial-setup-ks.cfg Music Pictures Public Templates Videos ? ? ? ? Linux的应用程序的二进制接口? ELF(Executable and Linkable Format)是Linux的格式 [[email?protected] ~]# file /bin/cat /bin/cat: ELF 64-bit LSB executable,x86-64,version 1 (SYSV), ? ? ? ? windows的应用程序的二进制接口? ?拷贝windows里面的ocam软件到虚拟机上 如果要想在windows里面运行Linux程序或者在linux里面运行windows程序就要使用到虚拟化了。 [[email?protected] ~]# rz [[email?protected] ~]# ls anaconda-ks.cfg Desktop Documents Downloads initial-setup-ks.cfg Music oCam.exe Pictures Public Templates Videos [[email?protected] ~]# file *.exe oCam.exe: PE32 executable (GUI) Intel 80386,for MS Windows ? ? ? ? ?
? 在Linux里面写操作系统程序都是用C语言。写的文本要解析成二进制才能在操作系统上运行。
? 静态编译:.a
? 像经常使用到的命令实际上是二进制的程序。都是按照上面的处理过程生成的。 [[email?protected] ~]# file /bin/ls /bin/ls: ELF 64-bit LSB executable,dynamically linked (uses shared libs), ? ? ? ? ? 三二进制应用程序
? ? 二进制应用程序的组成部分:二进制文件、库文件、配置文件、帮助文件 ? 注意库不能用程序也就不能运行了。大型的软件就有专门的配置文件。配置文件相当于命令的选项功能。 ? 比如bash就有配置文件,家目录里面的都是。 [[email?protected] ~]# ls -a . anaconda-ks.cfg .bash_logout .bashrc .config .dbus Documents .esd_auth ? ? ? 帮助文件一般都有的,即使是ls都有。 ? 除此之外还有其他的文件,比如数据文件。比如安装web服务器软件,对外提供web服务就要提供网页这样的文件。日志文件,记录事件的发生。 ? ? 在Linux上安装软件最开始的时候是源码编译。c语言的脚本要使用gcc工具编译成二进制才能运行。 ? 为了降低普通用户使用软件的难度,各个发行版就发行了软件包的管理器,对软件管理起来,不需要进行编译就可以运行软件。 ? 就像在windows上打开安装软件一直安装下去就可以了。在Linux里面都是以统一的文件后缀来组织这些软件的。 ? ? ? ? ?
? 二进制程序运行的时候是要依赖一些库的 ? 在系统正常使用的库文件时,会自动的把库文件加载到内存中。 ? ldd ? ?/PATH/TO/BINARY_FILE [[email?protected] ~]# ldd /bin/cat linux-vdso.so.1 => (0x00007ffc7b2b6000) libc.so.6 => /lib64/libc.so.6 (0x00007f0a60de1000) /lib64/ld-linux-x86-64.so.2 (0x00007f0a611ae000) [[email?protected] ~]# ll /lib64/libc.so.6 lrwxrwxrwx. 1 root root 12 Jan 10 11:45 /lib64/libc.so.6 -> libc-2.17.so ? ? ?
? 注意这个子目录来说下个博客,接到这里了。
? ? ldconfig ? -v 查看所有正在使用的加载到内存的库文件。 [[email?protected] ~]# ldconfig -v | wc ldconfig: Can‘t stat /libx32: No such file or directory ldconfig: Path `/usr/lib‘ given more than once ldconfig: Path `/usr/lib64‘ given more than once ldconfig: Can‘t stat /usr/libx32: No such file or directory 959 2867 41578 [[email?protected] ~]# ldconfig -v | head ldconfig: Can‘t stat /libx32: No such file or directory ldconfig: Path `/usr/lib‘ given more than once ldconfig: Path `/usr/lib64‘ given more than once ldconfig: Can‘t stat /usr/libx32: No such file or directory /usr/lib64/dyninst: libsymtabAPI.so.9.3 -> libsymtabAPI.so.9.3.1 libsymLite.so.9.3 -> libsymLite.so.9.3.1 libstackwalk.so.9.3 -> libstackwalk.so.9.3.1 libpcontrol.so.9.3 -> libpcontrol.so.9.3.1 libpatchAPI.so.9.3 -> libpatchAPI.so.9.3.1 libparseAPI.so.9.3 -> libparseAPI.so.9.3.1 libinstructionAPI.so.9.3 -> libinstructionAPI.so.9.3.1 libdyninstAPI_RT.so.9.3 -> libdyninstAPI_RT.so.9.3.1 libdyninstAPI.so.9.3 -> libdyninstAPI.so.9.3.1 ? ? ? ? 配置文件:/etc/ld.so.conf,/etc/ld.so.conf.d/*.conf
? ? 如果做了第三方的模块文件,就是后缀是so的文件。要让其他人使用就要加载到内存里面让别人调用。 可以写到配置文件/etc/ld.so.conf.d下面建立一个以conf结尾的文件。 可以查参考里面已经就有的文件。 自己做了软件,放在了规定的文件路径下,那么就在/etc/ld.so.conf.d建一个conf结尾的文件,在这个文件里面写上路径,系统就可以找到了。 这些库文件可以找到就是生成了独立的配置文件。 [[email?protected] app]# cd /etc/ld.so.conf.d/ [[email?protected] ld.so.conf.d]# ls dyninst-x86_64.conf kernel-3.10.0-862.el7.x86_64.conf libiscsi-x86_64.conf mariadb-x86_64.conf [[email?protected] ld.so.conf.d]# cat mariadb-x86_64.conf 写的是路径。 /usr/lib64/mysql [[email?protected] ld.so.conf.d]# ls /usr/lib64/mysql显示路径实际上显示的就是文件 libmysqlclient.so.18 libmysqlclient.so.18.0.0 plugin [[email?protected] ld.so.conf.d]# ll /usr/lib64/mysql total 3064 lrwxrwxrwx. 1 root root 24 Jan 10 11:48 libmysqlclient.so.18 -> libmysqlclient.so.18.0.0 -rwxr-xr-x. 1 root root 3135672 Aug 5 2017 libmysqlclient.so.18.0.0 drwxr-xr-x. 2 root root 54 Jan 10 11:48 plugin ? ? ? 打开主配置文件,也就是包含了他下面的配置文件。 [[email?protected] ld.so.conf.d]# cat /etc/ld.so.conf include ld.so.conf.d/*.conf [[email?protected] ld.so.conf.d]# cat /etc/ld.so.conf.d/* /usr/lib64/dyninst # Placeholder file,no vDSO hwcap entries used in this kernel. /usr/lib64/iscsi /usr/lib64/mysql ? ? ? ? ? 四程序包管理器? ?
? ? ? 功能:将编译好的应用程序的各组成文件打包一个或几个程序包文件,从而方便快捷地实现程序包的安装、卸载、查询、升级和校验等管理操作? ? debian:deb文件,dpkg包管理器。redhat: rpm文件,rpm包管理器
? 里面包含了很多的文件,我们只要记住命令rpm就可以安装软件了。 ? 除了红帽,其他的很多发行版都支持rpm后缀的软件。
? ? ?
? ? ? ? 源代码:name-VERSION.tar.gz|bz2|xz
? ? 使用rpm对软件包进行管理 ? rpm包命名方式: ? ? ? ?
? ? 在包很多的情况下可能会进行拆包,也就是对包进行拆分。这样以后只要把要用的包安装上就可以了,不会占用那么多的空间。 包之间可能存在依赖关系,甚至循环依赖。比如要安装A包就会提示把B包安装上。 ?
? ? ?
?
dnf: Fedora 18+ rpm包管理器前端管理工具。这个未来可能会使用。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |