软件相关概念

ABI

ABI : Application Binary Interface

Windows与Linux不兼容

ELF(Executable and Linkable Format) Linux

PE(Portable Executable)Windows

API

API即Application Programming Interface,API可以在各种不同的操作系统上实现给应用程序提供完全 相同的接口,而它们本身在这些系统上的实现却可能迥异,主流的操作系统有两种,一种是Windows系 统,另一种是Linux系统。由于操作系统的不同,API又分为Windows API和Linux API。在Windows平 台开发出来的软件在Linux上无法运行,在Linux上开发的软件在Windows上又无法运行,这就导致了软 件移植困难,

POSIX

POSIX 标准的出现就是为了解决上面2个的问题。

POSIX:Portable Operating System Interface 可移植操作系统接口,定义了操作系统应该为应用程序提供的接口标准,是IEEE为要在各种UNIX操作系统上运行的软件而定义的一系列API标准的总称。

Linux和windows都要实现基本的posix标准,程序就在源代码级别可移植了。

posix(可移植操作系统接口)

  • API 兼容,意味着开发库兼容,因此,源代码可跨平台
  • ABI 兼容,编译后的程序可以跨平台

GPL

GPL(GNU通用公共许可证)

如果你发布这样一个程序的副本,不管是收费的还是免费的,你必须将你具有的一切权利给予你的接受者;你必须保证他们能收到或得到源程序;

编译好的二进制格式

可执行程序,本身不能作为程序执行入口,但可以被调用

1# 查看二进制程序所依赖的库文件
2ldd /path/xxxfile
3
4#加载配置文件中指定的库文件 (一些编译程序后,可能要执行的命令)
5ldconfig
6
7# 显示本机已经缓存的所有可用库文件名及文件路径映射关系
8ldconfig -p 

配置文件

1/etc/ld.so.conf
2/etc/ld.so.conf.d/*.conf

缓存文件

1/etc/ld.so.cache

程序

预编译,编译 汇编 链接

静态链接

动态链接:dll(windows),so(shared object,linux)

os,cpu

注意: os 平台,应用程序必须为特定平台所支持的版本

硬件平台,应用程序必须为特定的cpu 所支持

x86 = 32

软件包

  • 二进制文件
  • 库文件
  • 配置文件
  • 帮助文件

二进制程序: /bin,/sbin,/usr/bin,/usr/sbin,/usr/local/bin,/usr/local/sbin

如 nginx /usr/local/nginx

配置文件:/etc

库 :/lib,/usr/lib,/lib64,/usr/local/lib,/usr/local/lib64

帮助文件: man文件,info 文件, README,INSTALL,ChangLog

man COMMAND 

    到某路径下找与命令同名的通常以.gz结尾的压缩文件的名字 ; /usr/share/man

利用 cpio工具查看包文件列表

1rpm2cpio xxx.rpm |cpio -itv 预览包内文件
2rpm2cpio xxx.rpm |cpio -id "*.conf" 释放包内文件

程序包管理器

软件包管理器功能:

将编译好的应用程序的各组成文件打包一个或几个程序包文件,利用包管理器可以方便快捷地实现程序

包的安装、卸载、查询、升级和校验等管理操作

包管理器应该具有的基本功能

打包、安装、查询、升级、卸载、校验、数据库管理

主流的程序包管理器

  1. redhat:rpm文件, rpm 包管理器,rpm:Redhat Package Manager,RPM Package Manager

  2. debian:deb文件, dpkg 包管理器

包命名

  1. 源代码打包文件命名
  • name-VERSION.tar.gz|bz2|xz
  • VERSION: major.minor.release

linux 内核源码示例

1 linux-5.7.2.tar.xz  
  1. rpm包命名方式
  • name-VERSION-release.arch.rpm
  • VERSION: major.minor.release
  • release:release.OS
  • arch
    • x86: i386, i486, i586, i686
    • x86_64: x64, x86_64, amd64
    • powerpc: ppc
    • 跟平台无关:noarch

示例

1bash-3.2-32.el5_9.1.i386.rpm
2bash-4.2.46-19.el7.x86_64.rpm
3bash-4.4.19-7.el8.x86_64.rpm
4bash-4.4.19-7.el8.aarch64.rpm
5bash-4.4.19-7.el8.ppc64le.rpm
6bc_1.07.1-2_amd64.deb
7bc_1.07.1-2_s390x.deb

分类和拆包

软件包为了管理和使用的便利,会将一个大的软件分类,放在不同的子包中。

包的分类:

Application-VERSION-ARCH.rpm: 主包

Application-devel-VERSION-ARCH.rpm 开发子包

Application-utils-VERSION-ARHC.rpm 其它子包

Application-libs-VERSION-ARHC.rpm 其它子包

包的依赖

软件包之间可能存在依赖关系,甚至循环依赖,即:A包依赖B包,B包依赖C包,C包依赖A包

安装软件包时,会因为缺少依赖的包,而导致安装包失败。

解决依赖包管理工具:

  • yum:rpm包管理器的前端工具
  • dnf:Fedora 18+ rpm包管理器前端管理工具,CentOS 8 版代替 yum
  • apt:deb包管理器前端工具
  • zypper:suse上的rpm前端管理工具

获取程序包的途径

系统发版的光盘或官方网站

1https://www.centos.org/download/
2http://mirrors.aliyun.com
3https://mirrors.huaweicloud.com/
4https://mirror.tuna.tsinghua.edu.cn/
5http://mirrors.sohu.com
6http://mirrors.163.com
7http://cdimage.ubuntu.com/releases/
8http://releases.ubuntu.com

第三方组织提供

  • Fedora-EPEL:Extra Packages for Enterprise Linux
1https://fedoraproject.org/wiki/EPEL
2https://mirrors.aliyun.com/epel/
3https://mirrors.cloud.tencent.com/epel/
  • SCL: Software Collections,提供较高版本的第三方软件包

    https://wiki.centos.org/SpecialInterestGroup/SCLo

  • Community Enterprise Linux Repository:http://www.elrepo.org,支持最新的内核和硬件相关包

  • Rpmforge:官网:http://repoforge.org/, RHEL推荐,包很全,即将关闭

软件项目官方站点

http://yum.mariadb.org/10.4/centos8-amd64/rpms/

http://repo.mysql.com/yum/mysql-8.0-community/el/8/x86_64/

搜索引擎

http://pkgs.org

http://rpmfind.net

http://rpm.pbone.net

https://sourceforge.net/

注意:第三方包建议要检查其合法性,来源合法性,程序包的完整性

自己制作

将源码文件,利用工具,如:rpmbuild,fpm 等工具制作成rpm包文件

rpm包管理器

安装

rpm -i  ,--install
	-v:	
	-vv   详细信息
	-vvv
	-h :hash 以#的个数显示安装进度 -个#代表%2点进度
rmp -ivh xxxxx.rpm    --test     //仅测试,不真正执行安装过程
如果存在依赖:
	解决依赖关系
	忽律依赖关系: --nodeps    

已经有了重新安装:
	-ivh --replacepkgs
	原来的配置文件不会被覆盖,新安装的配置文件将会重命名为以.rpmnew为后缀的文件	 

升级

rpm 包之升级

rpm -U :升级或安装

rpm -F 升级,不存在就不执行安装

rpm -Uvh package_name

rpm -Fvh package_name

升级注意项:

(1) 不要对内核做升级操作;Linux支持多内核版本并存,因此直接安装新版本内核

(2) 如果原程序包的配置文件安装后曾被修改,升级时,新版本提供的同一个配置文件不会直接覆盖老版本的配置文件,而把新版本文件重命名(FILENAME.rpmnew)后保留

查询

 1rpm -q package       #查询某单个包是否安装
 2rpm -qa 			 #查询所有已经安装的包 
 3rpm -qi  package_name #查询包的描述信息
 4rpm -ql  package_name #查询包安装之后在当前系统生成文件列表
 5rpm -qf  /path/to/somefile #查询某文件是哪个包安装生成的
 6rpm -qd package_name #查询安装后生成的帮助文档
 7rpm -qc package_name #查询安装后生成的配置文件
 8rpm  -q --scripts package_name #查询包相关的脚本
 9
10查询尚未安装的rpm包文件的相关信息:
11			查询安装后会生成的文件列表:rpm -qpl  /path/to/pack_file
12			查询其描述信息:rpm -qpi /path/to/package_file

包卸载

rpm -e , –erase

rpm -e package_name

-–test : 卸载测试

rpc {-e|–erase} [–allmatches] [–nodeps] [–noscripts] [–notriggers] [–test] PACKAGE_NAME …

如果卸载被其他程序所依赖的包: 1.把依赖者一同卸载 2.忽律依赖关系 –nodeps (不建议) 3.不再卸载

包校验

检查包的完整性和签名

rpm -K|–checksig rpmfile

在检查包的来源和完整性前,必须导入所需要公钥

rpm –import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

软件在安装时,会将包里的每个文件的元数据,如:大小,权限,所有者,时间等记录至rpm相关的数据库中,可以用来检查包中的文件是否和当初安装时有所变化

 1[vagrant@maozhongyu yum]$cd /etc/pki/
 2[vagrant@maozhongyu pki]$ls
 3CA  ca-trust  java  nssdb  rpm-gpg  rsyslog  tls
 4[vagrant@maozhongyu pki]$cd rpm-gpg/
 5[vagrant@maozhongyu rpm-gpg]$ls
 6RPM-GPG-KEY-CentOS-7          RPM-GPG-KEY-EPEL-7
 7RPM-GPG-KEY-CentOS-Debug-7    RPM-GPG-KEY-puppetlabs-PC1
 8RPM-GPG-KEY-CentOS-Testing-7
 9[vagrant@maozhongyu rpm-gpg]$rpm -V centos-release
10S.5....T.  c /etc/issue
11.......T.  c /etc/issue.net
12[vagrant@maozhongyu rpm-gpg]$rpm -qf /etc/issue
13centos-release-7-2.1511.el7.centos.2.10.x86_64
 1检查包安装后生成的文件是否被修改过
 2    rpm -V package_name
 3      S file_size
 4      M  权限
 5      5 文件内容md5不一样
 6      D 主设备号,
 7      L  路径改变
 8      U
 9      G
10      T
11      P		
12  
13  rpm包管理:检验来源合法性和软件包完整性
14	包完整性:通过单向加密机制(md5|sha1)
15	来源合法性:通过公钥加密机制(RSA) 
16	倒入制作者的公钥:centos 发行版的公钥在iso文件中
17  倒入命令 rpm  --import  /path/to/gpg-key-file
18  检查  rpm -K /path/to/package_file 或者	rpm --checksig /path/to/package_file
19					--nosignature : 不检查来源合法性
20					--nodigest  :不检查完整性

数据库重建

rpm包安装时生成的信息,都放在rpm数据库中

1/var/lib/rpm

可以重建数据库

rpm --initdb;   初始化
		如果事先不存在一个数据库,则新建之
rpm --rebuilddb    重建
		直接重建数据库,会覆盖原有的库;

yum和dnf

CentOS 使用 yum, dnf 解决rpm的包依赖关系

YUM: Yellowdog Update Modifier,rpm的前端程序,可解决软件包相关依赖性,可在多个库之间定位软件包,up2date的替代工具,CentOS 8 用dnf 代替了yum ,不过保留了和yum的兼容性,配置也是通用的

yum/dnf 工作原理

yum/dnf 是基于C/S 模式

yum 服务器存放rpm包和相关包的元数据库

yum 客户端访问yum服务器进行安装或查询等

yum 实现过程

先在yum服务器上创建 yum repository(仓库),在仓库中事先存储了众多rpm包,以及包的相关的元数据文件(放置于特定目录repodata下),当yum客户端利用yum/dnf工具进行安装时包时,会自动下载repodata中的元数据,查询远数据是否存在相关的包及依赖关系,自动从仓库中找到相关包下载并安装。

yum客户端配置

yum客户端配置文件

1/etc/yum.conf #为所有仓库提供公共配置
2/etc/yum.repos.d/*.repo: #为每个仓库的提供配置文件

帮助参考: man 5 yum.conf

repo仓库配置文件指向的定义:

配置文件有2段组成

 1[main] 
 2主配置段
 3
 4[repositoryID]
 5name=Some name for this repository
 6baseurl=url://path/to/repository/  (仓库的访问路径)
 7enabled={1|0}
 8gpgcheck={1|0}
 9gpgkey=URL  # 公钥文件(可以在本地,也可是服务器路径) 	  
10enablegroups={1|0}
11failovermethod={roundrobin|priority}
12 roundrobin:意为随机挑选,默认值
13 priority:按顺序访问
14cost= 默认为1000

baseurl:

1ftp   ftp://server/path/to/repo
2http  http://server/path/to/repo
3nfs   nfs://server/nfs_path
4file  file://path/to/repository

注意:yum仓库指向的路径一定必须是repodata目录所在目录

yum的repo配置文件中可用的变量:

$releasever: 当前OS的发行版的主版本号,如:8,7,6

$arch: CPU架构,如:aarch64, i586, i686,x86_64等

$basearch:系统基础平台;i386, x86_64

$contentdir:表示目录,比如:centos-8,centos-7

$YUM0-$YUM9:自定义变量

http://server/centos/$releasever/$basearch/

http://server/centos/7/x86_64

http://server/centos/6/i386

yum源

Rocky 系统的yum源

1#南京大学
2https://mirror.nju.edu.cn/rocky/$releasever/ #上海交大
3https://mirrors.sjtug.sjtu.edu.cn/rocky/$releasever/ #山东大学
4https://mirrors.sdu.edu.cn/rocky/$releasever/

CentOS系统的yum源

1#阿里云
2https://mirrors.aliyun.com/centos/$releasever/ #腾讯云
3https://mirrors.cloud.tencent.com/centos/$releasever/ #华为云
4https://repo.huaweicloud.com/centos/$releasever/ #清华大学
5https://mirrors.tuna.tsinghua.edu.cn/centos/$releasever/

EPEL的yum源

1#阿里云
2https://mirrors.aliyun.com/epel/$releasever/x86_64
3#腾讯云
4https://mirrors.cloud.tencent.com/epel/$releasever/x86_64
5#华为云
6https://mirrors.huaweicloud.com/epel/$releasever/x86_64
7#清华大学
8https://mirrors.tuna.tsinghua.edu.cn/epel/$releasever/x86_64

用脚本实现创建yum仓库配置文件

 1[root@centos7 ~]# cat yum.sh 
 2#!/bin/bash
 3mkdir /etc/yum.repos.d/backup
 4mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/backup
 5cat > /etc/yum.repos.d/base.repo <<EOF
 6[base]
 7name=base 
 8baseurl=https://mirrors.aliyun.com/centos/\$releasever/os/\$basearch
 9gpgcheck=0
10EOF

为CentOS 8 配置 yum 的系统和EPEL源仓库

 1[root@centos8 ~]#cat /etc/yum.repos.d/base.repo
 2[BaseOS]
 3name=BaseOS
 4baseurl=file:///misc/cd/BaseOS
 5gpgcheck=1
 6gpgkey=/etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial 
 7[AppStream]
 8name=AppStream
 9baseurl=file:///misc/cd/AppStream
10gpgcheck=0
11[epel]
12name=EPEL
13baseurl=http://mirrors.aliyun.com/epel/$releasever/Everything/$basearch
14gpgcheck=0
15enabled=1
16[extras]
17name=extras
18baseurl=https://mirrors.aliyun.com/centos/$releasever/extras/$basearch/os
19gpgcheck=0

注意:与之前的版本不同,CentOS 8 系统有两个yum 源:BaseOS和AppStream ,需要分别设置两个仓库

yum-config-manager命令

可以生成yum仓库的配置文件及启用或禁用仓库,来自于yum-utils包

增加仓库 yum-config-manager –add-repo URL或file

1[root@centos8 ~]#rpm -qf `which yum-config-manager `
2dnf-utils-4.0.2.2-3.el8.noarch
3[root@centos8 ~]#yum-config-manager --add-repo https://mirrors.aliyun.com/dockerce/linux/centos/docker-ce.repo
4Adding repo from: https://mirrors.aliyun.com/docker-ce/linux/centos/dockerce.repo
5[root@centos8 ~]#ls /etc/yum.repos.d/
6backup base.repo docker-ce.repo

禁用仓库 yum-config-manager –disable “仓库名” #启用仓库

yum-config-manager –enable “仓库名”

自己创建yum仓库

下载所有yum仓库的相关包和meta 数据

1#CentOS 8 dnf 工具集成
2dnf reposync --help #查看帮助
3#默认只下载rpm包,不下载 meta数据,需要指定--download-metadata 才能下载 meta
4dnf reposync  --repoid=REPOID --download-metadata -p /path 
5#CentOS 7 以前版本,reposync工具来自于yum-utils包
6reposync --repoid=REPOID --download-metadata -p /path

创建私有yum仓库

createrepo [options]

 11.搞个目录里面有很多rpm 包 
 22.create repo directory_name  
 33.cd  /etc/yum.repos.d/
 44.vim   directory_name.repo
 5   	[openstack]
 6   	name=Openstack Repository
 7   	baseurl= http://ip/openstack    ##目录在www的openstack 这个是基于http的。 还有其他协议支持
 8   	enabled=1
 9   	gpgcheck=0 #不监测
105. yum  repolist   
11   yum list all | grep  openstack   其实就是多了这个仓库了
12
13测试实现 yum  repository 的配置
14	1.准备文件服务器,使用httpd为列,请事先确保已经安装httpd程序包
15	2.在/var/www/html目录,使用一个目录来保存准备制作成yum仓库的所有rpm包
16	3.并安装上里面的包

下载阿里云的extras源,制作私有yum源

 1[root@repo-server ~]#yum repolist
 2[root@repo-server ~]#dnf reposync --repoid=extras --download-metadata -p 
 3/var/www/html/centos
 4[root@repo-server ~]#ls /var/www/html/centos/
 58 extras
 6[root@repo-server ~]#ls /var/www/html/centos/extras/
 7Packages repodata
 8
 9[root@repo-client ~]#cat /etc/yum.repos.d/test.repo
10[BaseOS]
11name=BaseOS
12baseurl=http://10.0.0.8/centos/8/BaseOS
13gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
14[AppStream]
15name=Appstream
16baseurl=http://10.0.0.8/centos/8/AppStream/
17gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
18[extras]
19name=extras
20baseurl=http://10.0.0.8/centos/extras/

yum常用命令

 1yum list | wc -l  #看看多少个包  
 2yum list  [all| installed| available]  #installed 已经安装的。 available可用的尚未安装的  //列出包
 3
 4yum info  package_name;
 5yum clean  all   #  /var/cache/yum/x86_64/7/base  会被清空
 6yum clean [all|packages|metadata|expire-cache|rpmdb|plugins]:  #清理缓存
 7#查询组信息
 8yum grouplist
 9#看包组信息
10yum groupinfo  "package_group_name"
11yum install  package_name ...; #安装指定程序包
12yum reinstall  package_name;#重新安装
13yum  check-update  #检查升级
14yum  update package_name  #升级指定的程序包
15	#现在的版本x-1.2.1 x-1.2.2  x-1.2.3
16    #要升级到指定版本   yum update  x-1.2.2
17yum remove|erase  package_name #删除包
18
19yum  provides|whatprovides   /path/to/somefile #查询某文件是哪个包安装生成的
20yum provides ifconfig (centos7 默认没装)
21#例如  yum  provides /etc/passwd
22yum groupinstall "group_name";#安装指定的包组
23yum groupremove "group_name"  #卸载指定的包组
24
25#安装本地包
26yum  install   /path/to/package_file
27#手动禁止检查来源及完整性   --nogpgcheck
28yum install  /tmp/zsh-2.3.1.2-el6.x86_64.rpm --nogpgcheck

只下载相关的依赖包,而不安装

 1#/data/目录如果不存在,会自动创建
 2[root@centos8 ~]#yum -y install --downloadonly --downloaddir=/data/httpd httpd
 3[root@centos8 ~]#ls /data/httpd/
 4apr-1.6.3-9.el8.x86_64.rpm               httpd-2.4.37-
 516.module_el8.1.0+256+ae790463.x86_64.rpm
 6apr-util-1.6.1-6.el8.x86_64.rpm           httpd-filesystem-2.4.37-
 716.module_el8.1.0+256+ae790463.noarch.rpm
 8apr-util-bdb-1.6.1-6.el8.x86_64.rpm       httpd-tools-2.4.37-
 916.module_el8.1.0+256+ae790463.x86_64.rpm
10apr-util-openssl-1.6.1-6.el8.x86_64.rpm   mailcap-2.1.48-3.el8.noarch.rpm
11centos-logos-httpd-80.5-2.el8.noarch.rpm mod_http2-1.11.3-
123.module_el8.1.0+213+acce2796.x86_64.rp

注意: 下载包也可以通过启用配置文件实现

1[root@centos7 ~]# cat /etc/yum.conf 
2[main]
3cachedir=/var/cache/yum/$basearch/$releasever  #缓存路径
4keepcache=1  #如果为1,则下载rpm并缓存下来,不删除,默认安装rpm后会删除rpm包

查看yum事务历史

CentOS 7以前版本日志 : /var/log/yum.log

CentOS 8 版本日志 : /var/log/dnf.rpm.log 、 /var/log/dnf.log

Ubuntu 软件管理

Debian软件包通常为预编译的二进制格式的扩展名".deb",类似rpm文件,因此安装快速,无需编译软 件。包文件包括特定功能或软件所必需的文件、元数据和指令

  • dpkg:package manager for Debian,类似于rpm, dpkg是基于Debian的系统的包管理器。可以安装,删除和构建软件包,但无法自动下载和安装软件包或其依赖项
  • apt:Advanced Packaging Tool,功能强大的软件管理工具,甚至可升级整个Ubuntu的系统,基于客户/服务器架构,类似于yum

dpkg 常见用法

 1#删除包,不建议,不自动卸载依赖于它的包
 2dpkg -r package 
 3#删除包(包括配置文件)
 4dpkg -P package 
 5#列出当前已安装的包,类似rpm -qa
 6dpkg -l
 7#显示该包的简要说明
 8dpkg -l package 
 9#列出该包的状态,包括详细信息,类似rpm –qi
10dpkg -s package 
11#列出该包中所包含的文件,类似rpm –ql 
12dpkg -L package 
13#搜索包含pattern的包,类似rpm –qf 
14dpkg -S <pattern> 
15#配置包,-a 使用,配置所有没有配置的软件包
16dpkg --configure package 
17#列出 deb 包的内容,类似rpm –qpl 
18dpkg -c package.deb 
19#解开 deb 包的内容
20dpkg --unpack package.deb

注意:一般建议不要使用dpkg卸载软件包。因为删除包时,其它依赖它的包不会卸载,并且可能无法再正常运行

apt

apt 相当于 apt-get、apt-cache 和 apt-config 中最常用命令选项的集合。 ubuntu16.04引入。

APT包索引配置文件

1/etc/apt/sources.list
2/etc/apt/sources.list.d

修改阿里云的APT源为清华源

1root@ubuntu2004:~# sed -i 's/mirrors.aliyun.com/mirrors.tuna.tsinghua.edu.cn/' 
2/etc/apt/sources.list

常用命令

 1#安装包:
 2apt install tree zip
 3#安装deb包,注意:包文件前必须加路径
 4apt install ./mongodb-database-tools-ubuntu1804-x86_64-100.5.1.deb
 5#安装图形桌面
 6apt install ubuntu-desktop
 7#删除包:
 8apt remove tree zip
 9
10#说明:apt remove中添加--purge选项会删除包配置文件,谨慎使用
11#更新包索引,相当于yum clean all;yum makecache
12apt update 
13#升级包:要升级系统,请首先更新软件包索引,再升级
14apt upgrade
15#apt列出仓库软件包,等于yum list
16apt list
17#搜索安装包
18apt search nginx
19#查看某个安装包的详细信息
20apt show apache2 
21#在线安装软件包
22apt install apache2 
23#卸载单个软件包但是保留配置⽂件
24apt remove apache2 
25#删除安装包并解决依赖关系
26apt autoremove apache2 
27#更新本地软件包列表索引,修改了apt仓库后必须执⾏
28apt update
29
30#卸载单个软件包删除配置⽂件
31apt purge apache2 
32#升级所有已安装且可升级到新版本的软件包
33apt upgrade
34#升级整个系统,必要时可以移除旧软件包。
35apt full-upgrade 
36#编辑source源⽂件
37apt edit-sources 
38#查看仓库中软件包有哪些版本可以安装
39apt-cache madison nginx 
40#安装软件包的时候指定安装具体的版本
41apt install nginx=1.14.0-0ubuntu1.6 
42#查看文件来自于哪个包,类似redhat中的yum provides <filename>
43apt-file search 'string' #默认是包含此字符串的文件
44apt-file search -x '正则表达式'
45apt-file search -F /path/file
46
47# 查看文件的依赖
48apt depends keepalived

ubuntu建议安装的常用包

1[root@ubuntu1804 ~]#apt purge ufw lxd lxd-client lxcfs liblxc-common
2[root@ubuntu1804 ~]#apt install iproute2 ntpdate tcpdump telnet traceroute nfs-kernel-server nfs-common lrzsz tree openssl libssl-dev libpcre3 libpcre3-dev 
3zlib1g-dev gcc openssh-server iotop unzip zip