欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  科技

LIUNX中程序包管理

程序员文章站 2022-08-07 12:46:49
LIUNX中程序包管理 此内容仅为笔记,这一两天给会重新整理补充上操作示例。 一、基础 1、程序描述: 第一种描述: 程序+数据 第二种描述: 算法+数据结构 2、程序的组成部分: ​ 1、二进制程序 ​ 2、配置文件,可以被查看其内容的文件 ​ 3、库文件,库文件不能独立执行,只能被调用执行 ​ ......

liunx中程序包管理

此内容仅为笔记,这一两天给会重新整理补充上操作示例。

 

一、基础

1、程序描述:

    第一种描述: 程序+数据

    第二种描述: 算法+数据结构

 

2、程序的组成部分:

​     1、二进制程序

​     2、配置文件,可以被查看其内容的文件

​     3、库文件,库文件不能独立执行,只能被调用执行

​     4、帮助文件,可以被查看其内容的文件。

 

  解压rpm软件包

    rpm2cpio 包文件 | cpio -id

 

3、程序包管理器描述:

  最早的包管理器应用于debian上,dpkg为第一个包管理工具。

​   程序的组成文件打包 成一个或者有限几个文件

​       安装

​       卸载

​       查询

       升级

       校验

 

    1> 包组成(每个包都有)

      包内的文件

      元数据,如:包的名称 版本 依赖性 描述等

      可能会有包安装或卸载时运行的脚本

 

    2> 数据库(公共) /var/lib/rpm  自动更新

      程序包名称及版本

      依赖关系

      功能说明

      包安装后生成的各文件路径及校验码信息

 

 

4、各个发行版本的程序包管理器和前端管理工具

    发行版     包管理器   包前端管理工具

​     debian:   deb     apt-get/apt

​     ubuntu:      deb     apt-get/apt

 

​     redhat:    rpm     yum/dnf

​     centos:    rpm      yum/dnf

 

 

5、程序编译方式:

​   动态编译:编译时不会把库文件编译进程序,编译好的程序不能独立运行,需要调运库文件,体积小。

​   静态编译:编译时会把需要用到的库文件都编译进程序,编译后程序没有库也可以独立运行,体积大。

 

6、命令存放路径:

    普通命令:/bin     /usr/bin   /usr/local/bin

    管理命令:/sbin      /usr/sbin      /usr/local/sbin

    库文件:   /lib       /lib64      /usr/lib   /usr/lib64   /usr/local/lib   /usr/local/lib64

 

7、命令行展开

    命令行展开优先级

    1、把命令行分成单个命令词

    2、展开别名

    3、展开大括号的声明{}

    4、展开波浪线声明~

    5、命令替换$()或··

    6、再次把命令行分成命令词

    7、展开文件通配符

    8、准备i/o重定向

    9、运行命令

 

8、abi 二进制编程接口

    windows:   pe

    linux:   elf

 

    虚拟化技术

      linux:    wine

      windows:      cygwin

 

 

9、linux中源文件生成执行文件的过程

    预处理:gcc -e hello.c -o hello.i 对hello.c文件进行预处理,生成hello.i文件

    编译:gcc -s hello.i  -o hello.s 对预处理文件hello.i进行编译,生成汇编文件hello.s

    汇编:gcc -c hello.s -o hello.o 对汇编文件hello.s进行编译,生成目标文件hello.o

    链接:hello.o -o hello 对目标文件hello.o文件进行链接,生成可执行文件

      gcc hello.c -o hello2 一步到位,直接生成执行文件

        选项:

          -c 源文件 把源文件编译成目标文件

          -o 新名称 目标文件1  目标文件2 把多个目标文件链接成可执行文件,并以新名称命名

          -o 此选项主要用于优化编译

          -l 库文件名 指定编译时需要的库文件,此库文件名不用写开头字母lib和结尾字母so

          -l 库文件路径 路径为目录,指定库文件在什么位置搜索。省略的话默认在/lib  /lib64 /usr/lib /usrlib64等位置搜索

          -i 头文件 指定编译时需要用到的头文件

 

10、软件包名

    软件名-软件版本号-编译版本号-适用平台-后缀

          适用平台

            noarch 无论任何机型都行

            i386 只要是x86平台的架构都支持

            i686 32位平台

            x86_64 64位平台

 

    示例: 查看目录内各个平台架构的数量

      ls *.rpm | rev | cut -d . -f2 |rev | sort | uniq -c

练习题:在出现进度条出现的时候按esc键,进入光盘,然后进入救援模式 进行恢复 被删除的基础库文件/lib64/libc.so.6

 

11、杂项

ldconfig命令

  此命令会更具/etc/ldconfig配置文件中记载目录中的库文件加载入缓存中,以提高调用程序的执行速度

  -p 显示已经加载到内存中的库文件

 

autofs工具可以自动挂在/misc/cd目录下

    yum -y install autofs

    systemctl enable --now autofs

 

 

 

二、软件包和包管理器

rpm命

  此命令主要是通过数据库记录的方式来管理软件的安装、卸载、升级、查询、校验等等。

  rpm软件的数据包保存在/var/lib/rpm目录中,如果此目录中的数据损坏可以通过rpm --rebuilddb重建数据库

   

  选项:

    -i --install 安装

    -v 显示详细进度

    -h 显示百分比,一个#表示2%

    -q 查询

-qa 列出所有已安装的包的,依赖于/var/lib/rpm内的数据库

rpm -qa "*http*" 最好加上双引号,怕出问题。可以直接模糊搜索

 

-qi 查询某个已安装过的安装包的信息

-qpi 查询指定未安装的安装包的信息

 

-ql 查询指定已安装的安装包的安装文件列表

-qpl 查询指定未安装的安装包的要安装文件列表

 

-qf 查询某个命令或文件来自于哪个安装包。很有用

-q --whatprovides /path/to/command 查询某个命令由哪个安装包所提供

-q --whatrequires 查询指定的安装包被哪个包所依赖

 

-qc 查询指定安装包的配置文件

-qd 查询指定安装包的帮助文档

-q --changelog 查询指定安装包的变更历史

-q --scripts 查询指定安装包的脚本

-q --provides 查询指定安装包的提供了哪些依赖性

安装脚本分为:

安装前 preinstall

安装后 postinstall

卸载前 preuninstalll

卸载后 postuninstalll

 

-u 或 --update 升级或安装软件包

-f 或 --freshen 只升级,如果没有不安装

 

-e --erase 卸载,如果卸载的时候别的包,依赖于要下载的包,就卸载不了

 

--root= 指定根目录

--nodeps 忽略依赖性,强行安装卸载

--force 强制安装

--replacepkgs 重装 和 force差不多,多用于重新安装老版本软件

 

 

包校验

--import 导入密钥

-k  或 --checksig 检查签名

 

-v 查询文件是否有修改

-va 检查所有安装包,看看哪些包被修改过

s file size differs 文件大小是否被改变

m modediffers 文件的类型或文件属性是否被改变

5 md5

d device major/minor number设备的主次代码号是否被修改

l readlink path 软连接指向路径是否被修改

u user ownership 属主是否被修改

g group ownership 属组是否被修改

t mtime differ 文件的mtime是否被修改

p

 

c 配置文件  config file

d 文件   documentation

g 鬼文件,通常时该文件不被某个软件所包含,较少发生  ghost file

l 授权文件  license file

r 自述文件  read me

 

 

 

yum命令

同一台电脑上,只能运行一个yum。yum的日志文件是/var/log/yum.log   centos8:/var/log/dnf.log

命令的选项优先级高于配置文件

-y 不询问,自动安装

-q 或--quiet 静默安装

 

install 安装

reinsatll 重新安装

remove 卸载

update 升级

history 安装历史

history info # 具体查看安装的几个文件

history undo # 卸载指定第几次操作

history redo # 重新安装指定的第几次操作

list 列表

repolist 仓库列表

search 搜索

deplist 查询依赖关系

info 查看软件信息

repolist [all] 显示yum源列表

 

--enablerepo=* 临时启用指定某个源

--disablerepo=* 临时禁用指定某个源

 

--showduplicates 显示重复的源

--noplugins 禁用所有插件

clean all 清理缓存

provides /path/to/command 查询某个命令是由哪个安装包提供

 

 

--nogpgcheck 禁止检查gpgcheck,即使配置文件中指定了需要检查,命令行的优先级高于配置文件

 

包组

安装卸载包组在引用包组名的时候需要加上引号

groupinstall 安装包组

groupupdate 包组升级

grouplist 查询包组列表

groupremove 包组卸载

groupinfo 查询包组的信息

 

 

yum的repo配置文件中的变量

    $releasever 当前os的发行版的主版本号  如 6 7 8

    $arch 平台 如:i386  x86_64

    $basearch 基础平台 如:1386 ppc arm

 

 

 

createrepo命令

    createrepo [options] <directory>

        --basedir path 用户一定输出repodata的位置。常用于指向软件包的父目录

 

dpkg包管理器

-i 安装

dpkg -i package.deb

-r 不完全卸载

dpkg -r  package.deb

-l 已安装包的列表

dpkg -l

-l package 列出软件包所包含的文件,相当于rpm -ql

-s file 查询某个文件属于哪个包,相当于rpm -qf

-a 配置所偶没有配置的软件包

-c

 apt命令

  包前端管理工具,类似yum命令。debian系统的软件包前端管理工具。之前的叫apt-get

apt install

apt remove

apt purge

apt update

apt upgrade

apt search

apt show

三、仓库

 

仓库一般由包文件、包文件元数据组成。客户端会先下载元数据下载到本地缓存中。

然后校验元数据,看看元数据是否下载有无问题。

根据元数据内信息再到仓库中下载对应的各种包文件和依赖包文件。

最后安装。

 

企业中可以单独新建一个软件仓库服务器。通过网络服务(http https ftp)共享给局域网内计算机远程安装。

 

本地计算机需要配置仓库客户端

centos 8中由两个软件仓库 base仓库和appstream仓库

 

repodata 元数据存放目录

packages 软件包存放目录

 

关于仓库路径就是repodata所在的父目录的绝对路径就是仓库路径

仓库配置文件必须放在yum.repo.d目录下。后缀必须是.repo

 

  仓库元数据存放路径/var/cache/yum

 

yum.conf(centos7)配置文件{

cachedir=/var/cache/yum/$basearch/$releasever

keepcache=0

debuglevel=2

logfile=/var/log/yum.log

exactarch=1

obsoletes=1

gpgcheck=1

plugins=1

installonly_limit=5

bugtracker_url=http://bugs.centos.org/set_project.php?project_id=23&ref=http://bugs.centos.org/bug_report_page.php?category=yum

distroverpkg=centos-release

    }

 

dnf.conf(centso8)配置文件{

gpgcheck=1 是否安装前检测签名

installonly_limit=3 并发安装

clean_requirements_on_remove=true 安装后清空软件

best=true 如果多个仓库中某个软件由多个版本,默认指定安装最新版本

     }

 

 

repo配置仓库{}

[] 中括号内的是仓库id,必须项

name=base 仓库名

mirrorlist= 仓库路径,

baseurl= 仓库路径,建议使用国内

 

gpgcheck=1 校验包签名

enabled=1 是否启用仓库,如果不写,默认是启用的

gpgkey= 签名保存路径

 

 

 

 

创建私有仓库

yum -y install httpd

systemctl enable --now httpd

mkdir /var/www/html/centos/8

mount /dev/sr0 /var/www/html/centos/8

 

用于同步仓库中的软件和元数据

  dnf reposync --repoid=repoid --download-metadata -p /path centos8

  reposync --repoid=repoid --download-metadata -p /path centos7

 

  creatrepo /var/www/heml/epel/ 手工创建元数据

    --basedir 指定repodata存放位置

 

 

 

四、源码编译安装

./configure 最终目的是生成makefile文件

  1、通过选型传递参数,指定安装路径、启用特性等,执行时会参考用户的指定的选项以及模板文件makefile.in 生成makefile

  2、检查依赖到的外部环境,如依赖的软件包

选项:

  --prefix=path/to/somedir 指定总安装目录

  --sysconfdir=dir 指定配置文件安装目录

 

备注:

  autoconf命令,用来生成configure脚本。部分软件没有configure脚本,需要事先自己手工生成,然后再去执行./configure等后续编译安装步骤,也可能已经实现提供号了makefile文件

  automake命令,用于生成makfiel.in模板文件

 make

根据上一步生成的makefile文件,检测依赖环境,进行构建应用程序

执行make命令之前一定要进入到解压目录,只有在解压目录才能执行成功make

make命令

选项:

-j # 如果软件较大,可以指定多个cpu同时工作

备注:

make命令这一步也会检查环境依赖配置,一般情况下是很顺利,如果这一步检测依赖环境报错,

可能说明上一步configure配置处的makefile文件有问题,需要删掉整个文件夹,重新来。要不会出现莫名其妙的问题。

 

make install

复制文件到相应路径

make install 命令会自动创建目录。不用手工创建

 

可以通过readme  install文件获取安装帮助

 

开法工具:make gcc

开发环境:开发库(gblic:标准库) 头文件

 

系统通过修改/etc/man_db.conf文件指定新软件帮助文件的路径。以后就能直接使用man帮助了

 

 

五、备注

生产环境一般是最小安装,推荐安装软件明细。

gcc

make

gcc-c++

glibc  glibc-devel

pcre pcre-devel 与正则表达式相关的包

openssl openssl-devel 与openssl加密相关的包

systemd-devel

zlib-devel 与压缩相关的包

vim

lrzsz 传输文件工具,xshell给主机传送文件需要依赖此包,它提供了rz命令

tree

tmux screen 窗口工具。在断开链接后不会终止

lsof

tcpdump 抓包工具

wget 下载工具

net-tools 网络工具

iotop io的检测工具

bc bzip2 zip unzip

nfs-utils

man-pages