目录
1 软件运行和编译
1.1 软件的相关概念
1.1.1 ABI
ABI 应用程序二进制接口
- windows与Linux的二进制文件格式不同
- Linux格式是ELF格式
- windows格式是PE格式
范例:
1.1.2 API
API 应用程序的开发接口
- 由于在Windows平台开发出来的软件在Linux上无法运行,同时在Linux上开发的软件在Windows上又无法运行,这就导致了软件移植困难,所以 POSIX 标准的出现就是为了解决这个问题:
- POSIX:Portable Operating System Interface 可移植操作系统接口,定义了操作系统应该为应用程序 提供的接口标准,是IEEE为要在各种UNIX操作系统上运行的软件而定义的一系列API标准的总称。
- Linux和windows都要实现基本的 POSIX 标准,程序就在源代码级别可移植了。
1.1.3 开发语言
常见的系统级开发语言:
- 汇编语言
- C
- C++
应用级开发语言:
- Java
- python
- go
- php
- perl
- basic
- ruby
- bash
1.2 C语言程序的实现过程
C语言的程序编译主要经过四个过程:
- C 程序源代码 --> 预处理 --> 编译 --> 汇编 --> 链接
预处理过程:
- 将所有的#define删除,并且展开所有的宏定义
- 处理所有的条件预编译指令,比如#if #ifdef #elif #else #endif等
- 处理#include 预编译指令,将被包含的文件插入到该预编译指令的位置。
- 删除所有注释 “//”和”/* */”.
- 添加行号和文件标识,以便编译时产生调试用的行号及编译错误警告行号。
- 保留所有的#pragma编译器指令,因为编译器需要使用它们
编译过程:
- 编译过程就是把预处理完的文件进行一系列的词法分析,语法分析,语义分析及优化后,最后生成相应的汇编代码
汇编过程:
- 汇编器是将汇编代码转变成机器可以执行的命令,每一个汇编语句几乎都对应一条机器指令。汇编 相对于编译过程比较简单,根据汇编指令和机器指令的对照表一一翻译即可。
链接过程:
- 通过调用链接器ld来链接程序运行需要的一大堆目标文件,以及所依赖的其它库文件,最后生成可 执行文件。
范例:gcc 编译过程
#分步骤编译运行
gcc -E hello.c -o hello.i 对hello.c文件进行预处理,生成了hello.i 文件
gcc -S hello.i -o hello.s 对预处理文件进行编译,生成了汇编文件
gcc -c hello.s -o hello.o 对汇编文件进行编译,生成了目标文件
gcc hello.o -o hello 对目标文件进行链接,生成可执行文件
#一步实现编译过程
gcc hello.c -o hello 直接编译链接成可执行目标文件
2 软件包和包管理器
2.1 软件包介绍
开源软件最初只提供了.tar.gz的打包的源码文件,用户必须自己编译每个想在GNU/Linux上运行的软件。用户急需系统能提供一种更加便利的方法来管理这些软件,当Debian诞生时,这样一个管理工具 dpkg也就应运而生,可用来管理deb后缀的"包"文件。从而著名的“package”概念第一次出现在 GNU/Linux系统中,稍后Red Hat才开发自己的rpm包管理系统。
2.1.1 软件包的文件分类
- 二进制文件
- 库文件
- 配置文件
- 帮助文件
范例:利用 cpio工具查看包文件列表
rpm2cpio 包文件|cpio –itv 预览包内文件
rpm2cpio 包文件|cpio –id “*.conf” 释放包内文件
2.1.2 程序包管理器
软件包管理器功能:
- 将编译好的应用程序的各组成文件打包一个或几个程序包文件,利用包管理器可以方便快捷地实现程序 包的安装、卸载、查询、升级和校验等管理操作。
主流的程序包管理器:
- redhat:rpm文件, rpm 包管理器
- debian:deb文件, dpkg 包管理器
2.1.3 分类和拆包
软件包为了管理和使用的便利,会将一个大的软件分类,放在不同的子包中。
包的分类:
- Application-VERSION-ARCH.rpm: 主包
- Application-devel-VERSION-ARCH.rpm 开发子包
- Application-utils-VERSION-ARHC.rpm 其它子包
- Application-libs-VERSION-ARHC.rpm 其它子包
2.1.4 包的依赖
软件包之间可能存在依赖关系,甚至循环依赖,即:A包依赖B包,B包依赖C包,C包依赖A包 安装软件包时,会因为缺少依赖的包,而导致安装包失败。
解决依赖包的管理工具:
- yum:rpm包管理器的前端工具
- dnf:Fedora 18+ rpm包管理器前端管理工具,CentOS 8 版代替 yum
- apt:deb包管理器前端工具
- zypper:suse上的rpm前端管理工具
2.1.5 程序包管理器相关文件
包文件组成 (每个包独有)
- 包内的文件
- 元数据,如:包的名称,版本,依赖性,描述等
- 可能会有包安装或卸载时运行的脚本
数据库(公共):/var/lib/rpm
- 程序包名称及版本
- 依赖关系
- 功能说明
- 包安装后生成的各文件路径及校验码信息
2.1.6 获取包的途径
软件包需要事先将源码进行编译后打包形成,获取包的途径如下:
1)系统发版的光盘或官方网站:
Centos镜像:
- https://www.centos.org/download/
- http://mirrors.aliyun.com
- http://mirrors.sohu.com
- http://mirrors.163.com
Ubuntu镜像:
2)第三方组织提供
Rpmforge:官网: http://repoforge.org/, RHEL推荐,包很全,即将关闭
Community Enterprise Linux Repository:https://elrepo.org/ 支持最新的内核和硬件相关包
3)软件项目官方站点
- http://yum.mariadb.org/10.4/centos8-amd64/rpms/
- http://repo.mysql.com/yum/mysql-8.0-community/el/8/x86_64/
4)搜索引擎
- http://pkgs.org
- http://rpmfind.net
- http://rpm.pbone.net
- https://sourceforge.net/
- 注意:第三方包建议要检查其合法性,来源合法性,程序包的完整性
5)自己制作
- 将源码文件,利用工具,如:rpmbuild,fpm等工具制作成rpm包文件
3 包管理器rpm
CentOS系统上使用rpm命令管理程序包
功能: 安装、卸载、升级、查询、校验、数据库维护
3.1 安装
选项:
- -i 安装软件包
- -v 输出更详细的信息,用于调试或了解软件包安装/卸载过程中发生了什么
- -h 显示安装进度
格式:
rpm -ivh PACKAGE_FILE ...
3.2.包查询
包查询常用语法:
- rpm -qa 列出所有已安装的rpm包
- rpm -q package_name 查询特定软件包是否已经安装
- rpm -qi package_name 查询软件包的详细信息
- rpm -ql package_name 查询软件包包含的文件列表
- rpm -qpR package_name 查询软件包依赖关系
- rpm -qf 查询文件来自哪个rpm包
3.3 包卸载
选项 -e 用于卸载rpm包
注意:当包卸载时,对应的配置文件不会删除, 以FILENAME.rpmsave形式保留
范例:强行删除rpm包,并恢复
[root@centos7 ~]#rpm -e rpm --nodeps
#重启进入rescue模式
#mkdir /mnt/cdrom
#mount /dev/sr0 /mnt/cdrom
#rpm -ivh /mnt/cdrom/Packages/rpm-4.11.3-40.el7.x86_64.rpm --root=/mnt/sysimage
#reboot
3.4 包校验
在安装包时,系统也会检查包的来源是否是合法的
检查包的完整性和签名:
rpm -K|--checksig rpmfile
在检查包的来源和完整性前,必须导入所需要公钥:
rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
rpm -qa “gpg-pubkey*”
3.5 数据库
rpm包安装时生成的信息,都放在rpm数据库中:/var/lib/rpm
可以重建数据库:
rpm {--initdb|--rebuilddb}
initdb: 初始化,如果事先不存在数据库,则新建之,否则,不执行任何操作
rebuilddb:重建已安装的包头的数据库索引目录
4 yum和dnf
4.1 yum/dnf的工作原理
yum/dnf 是基于C/S 模式
- yum 服务器存放rpm包和相关包的元数据库
- yum 客户端访问yum服务器进行安装或查询等
yum 实现过程:
- 先在yum服务器上创建 yum repository(仓库),在仓库中事先存储了众多rpm包,以及包的相关的 元数据文件(放置于特定目录repodata下),当yum客户端利用yum/dnf工具进行安装时包时,会自动 下载repodata中的元数据,查询远数据是否存在相关的包及依赖关系,自动从仓库中找到相关包下载并 安装。
yum服务器的仓库可以多种形式存在:
- file:// 本地路径
- http://
- https://
- ftp://
注意:yum仓库指向的路径一定必须是repodata目录所在目录
4.2 yum客户端配置
yum客户端配置文件:
- /etc/yum.conf:#为所有仓库提供公共配置
- /etc/yum.repos.d/*.repo:#为每个仓库的提供配置文件
yum源配置的相关变量:
$releasever: 当前OS的发行版的主版本号,如:8,7,6
$arch: CPU架构,如:aarch64, i586, i686,x86_64等
$basearch:系统基础平台;i386, x86_64
$contentdir:表示目录,比如:centos-8,centos-7
$YUM0-$YUM9:自定义变量
Centos推荐的国内yum源地址:
#腾讯源
https://mirrors.cloud.tencent.com/centos/$releasever/extras/$basearch/
#清华大学源
https://mirrors.tuna.tsinghua.edu.cn/centos/$releasever/extras/$basearch/
#阿里源
https://mirrors.aliyun.com/centos/$releasever/extras/$basearch/
#华为源
https://repo.huaweicloud.com/centos/$releasever/extras/$basearch/
yum源配置案例:
[base]
name=CentOS
baseurl=https://mirrors.cloud.tencent.com/centos/$releasever/os/$basearch/
https://mirrors.tuna.tsinghua.edu.cn/centos/$releasever/os/$basearch/
https://mirrors.aliyun.com/centos/$releasever/os/$basearch/
https://repo.huaweicloud.com/centos/$releasever/os/$basearch/
gpgcheck=0
[extras]
name=extras
baseurl=https://mirrors.cloud.tencent.com/centos/$releasever/extras/$basearch/
https://mirrors.tuna.tsinghua.edu.cn/centos/$releasever/extras/$basearch/
https://mirrors.aliyun.com/centos/$releasever/extras/$basearch/
https://repo.huaweicloud.com/centos/$releasever/extras/$basearch/
gpgcheck=0
enabled=1
[epel]
name=epel
baseurl=https://mirrors.cloud.tencent.com/epel/$releasever/$basearch/
https://mirrors.huaweicloud.com/epel/$releasever/$basearch/
gpgcheck=1
gpgkey=https://mirrors.cloud.tencent.com/epel/RPM-GPG-KEY-EPEL-7
注意:
- 与之前的版本不同,CentOS 8 系统有两个yum 源:BaseOS和AppStream ,需要分别设置两个仓库。
范例:用脚本实现创建yum仓库配置文件
#!/bin/bash
mkdir /etc/yum.repos.d/backup
mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/backup
cat > /etc/yum.repos.d/base.repo <<EOF
[base]
name=base
baseurl=https://mirrors.aliyun.com/centos/\$releasever/os/\$basearch
gpgcheck=0
EOF
4.3 yum命令
yum命令常用选项:
-y #自动回答为yes
-q #静默模式
--nogpgcheck #禁止gpg check校验
--enablerepo=仓库名 #启用指定的仓库
--disbalerepo=仓库名 #禁用指定的仓库
4.3.1 显示仓库列表
yum repolist [all|enabled|disabled]
范例:显示所有仓库列表
范例:列出除了epel的仓库列表
4.3.2 显示程序包
yum list
yum list [all | glob_exp1] [glob_exp2] [...]
yum list {available|installed|updates} [glob_exp1] [...]
范例:
4.3.3 安装程序包
yum install package1 [package2] [...]
yum reinstall package1 [package2] [...] #重新安装
4.3.4 卸载程序包
yum remove | erase package1 [package2] [...]
4.3.5 查询
#查看程序包information:
yum info [...]
#查看指定的特性(可以是某文件)是由哪个程序包所提供:
yum provides | whatprovides feature1 [feature2] [...]
#以指定的关键字搜索程序包名及summary信息
yum search string1 [string2] [...]
#查看指定包所依赖的capabilities:
yum deplist package1 [package2] [...]
注意:文件要写全路径,而不只是文件名,否则无法查询到
范例:
4.3.6 升级和降级
yum update [package1] [package2] [...]
yum downgrade package1 [package2] [...] (降级)
4.3.7 仓库缓存
清除仓库缓存:
yum clean [ packages | metadata | expire-cache | rpmdb | plugins | all ]
4.3.8 查看yum事务历史
日志文件:
#CentOS 7以前版本日志
/var/log/yum.log
#CentOS 8 版本日志
/var/log/dnf.rpm.log
/var/log/dnf.log
日志命令:
#查看通过yum进行的历史事务
yum history info
#回退历史事务
yum history undo #
#重做历史事务
yum history redo #
4.3.9 安装及升级本地程序包
yum localinstall|install rpmfile1 [rpmfile2] [...]
yum localupdate|update rpmfile1 [rpmfile2] [...]
4.3.10 包组管理的相关命令
yum grouplist [hidden] [groupwildcard] [...]
yum groupinstall group1 [group2] [...]
yum groupupdate group1 [group2] [...]
yum groupremove group1 [group2] [...]
yum groupinfo group1 [...]
4.3.11 实现私有yum源仓库
下载所有yum仓库的相关包和meta 数据:
#CentOS 8 dnf 工具集成
dnf reposync --help #查看帮助
#默认只下载rpm包,不下载meta数据,需要指定--download-metadata 才能下载meta
dnf reposync --repoid=REPOID --download-metadata -p /path
#CentOS 7 以前版本,reposync工具来自于yum-utils包
reposync --repoid=REPOID --download-metadata -p /path
范例1:Centos8创建局域网的基于Base的私有yum源
#仓库服务器配置
[root@repo-server ~]#yum -y install httpd
[root@repo-server ~]#systemctl enable --now httpd
[root@repo-server ~]#mkdir /var/www/html/centos/8 -pv
[root@repo-server ~]#mount /dev/sr0 /mnt/
[root@repo-server ~]#cp -a /mnt/* /var/www/html/centos/8
#yum客户端配置
[root@repo-client ~]#cat /etc/yum.repos.d/test.repo
[BaseOS]
name=BaseOS
baseurl=http://10.0.0.100/centos/8/BaseOS
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
[AppStream]
name=Appstream
baseurl=http://10.0.0.8/centos/8/AppStream/
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
范例2:Centos8下载阿里云的extras源,制作私有yum源
[root@repo-server ~]#dnf reposync --repoid=extras --download-metadata -p
/var/www/html/centos
[root@repo-client ~]#cat /etc/yum.repos.d/test.repo
[BaseOS]
name=BaseOS
baseurl=http://10.0.0.100/centos/8/BaseOS
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
[AppStream]
name=Appstream
baseurl=http://10.0.0.100/centos/8/AppStream/
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
[extras]
name=extras
baseurl=http://10.0.0.100/centos/extras/
范例3:
#下载相关仓库包和元数据 --download-metadata 加此选项可以下载元数据
[root@repo-server ~]#dnf reposync --repoid=epel --download-metadata -p /var/www/html
#下载相关的key文件
[root@repo-server ~]#wget -P /var/www/html/epel/ https://mirrors.aliyun.com/epel/RPM-GPG-KEY-EPEL-8
[root@repo-client ~]#cat /etc/yum.repos.d/test.repo
[epel]
name=epel
baseurl=http://10.0.0.100/epel/
gpgkey=http://10.0.0.100/epel/RPM-GPG-KEY-EPEL-8
5 程序包源码编译安装
5.1 源码编译介绍
程序包编译安装:
- 源代码-->预处理-->编译-->汇编-->链接-->执行
- 多文件:文件中的代码之间,很可能存在跨文件依赖关系
虽然有很多开源软件将软件打成包,供人们使用,但并不是所有源代码都打成包,如果想使用开源软件,可能需要自己下载源码,进行编译安装。另外即使提供了包,但是生产中需要用于软件的某些特性,仍然需要自行编译安装。但是利用源代码编译安装是比较繁琐的,庆幸的是有相关的项目管理工具 可以大大减少编译过程的复杂度。
5.2 开源程序源代码的获取
项目官方自建站点:
- apache.org (ASF:Apache Software Foundation)
- mariadb.org
代码托管:
- Github.com
- gitee.com
- SourceForge.net
- code.google.com
5.3 编译源码的项目工具
C、C++的源码编译:
- 使用 make 项目管理器
- configure脚本 --> Makefile.in --> Makefile
- 相关开发工具:
- autoconf: 生成configure脚本
- automake:生成Makefile.in
java的源码编译:
- 使用 maven
5.4 C语言源代码编译安装过程
利用编译工具,通常只需要三个大的步骤:
- ./configure
- 通过选项传递参数,指定安装路径、启用特性等;执行时会参考用户的指定以及Makefile.in文 件生成Makefile
- 检查依赖到的外部环境,如依赖的软件包
- make 根据Makefile文件,会检测依赖的环境,进行构建应用程序,
- make install 复制文件到相应路径
5.4.1 编译安装准备
准备:安装相关的依赖包
- 开发工具:make, gcc (c/c++编译器GNU C Complier)
- 开发环境:开发库(glibc:标准库),头文件,可安装开发包组 Development Tools
- 软件相关依赖包
5.4.2 编译安装
第一步:运行 configure 脚本,生成Makefile 文件
其选项主要功能:
- 可以指定安装位置
- 指定启用的特性
选项分类:
安装路径设定:
- --prefix=/PATH:指定默认安装位置,默认为/usr/local/
- --sysconfdir=/PATH:配置文件安装位置
- System types:支持交叉编译
软件特性和相关指定:
- Optional Features: 可选特性
- --disable-FEATURE
- --enable-FEATURE[=ARG]
- Optional Packages: 可选包
- --with-PACKAGE[=ARG] 依赖包
- --without-PACKAGE 禁用依赖关系
注意:通常被编译操作依赖的程序包,需要安装此程序包的“开发”组件,其包名一般类似于name devel-VERSION。
第二步:make
第三步:make install
5.4.3 安装后的配置
1) 二进制程序目录导入至PATH环境变量中
- 编辑文件/etc/profile.d/NAME.sh
export PATH=/PATH/TO/BIN:$PATH
2) 相关用户及文件
- 有些开源软件编译完成后,还需要创建相关的用户及文件
3) 导入帮助手册
- 编辑/etc/man.config|man_db.conf文件,添加一个MANPATH
5.4.4 源码编译安装范例
范例1:CentOS 7 编译安装 tree1.8
#1 安装相关的依赖包
yum install gcc make
#2 下载源码并解压
tar xvf tree-1.8.0.tgz
#3 进入解压缩的目录,README和INSTALL
cd tree-1.8.0/
cat README
cat INSTALL
#4 修改源码的版本号
sed -i 's#v1\.8\.0#v.8.8.8#' tree.c
#5 编译准备
vim Makefile
prefix = /apps/tree
#6 编译
make
#7 安装
make install
#8 修改PATH变量
#默认无法直接运行tree
echo 'PATH=/apps/tree/bin:$PATH' > /etc/profile.d/tree.sh
. /etc/profile.d/tree.sh
#或者利用软链接实现
ln -s /apps/tree/bin/tree /usr/local/bin
#9 验证结果
tree --version
#10 添加man帮助
#默认无法查看man
vim /etc/man_db.conf
MANDATORY_MANPATH /apps/tree/man
范例2:CentOS 8 编译安装 cmatrix
#1 安装相关包
[root@centos8 ~]#dnf install gcc make autoconf ncurses-devel
#2 下载并解压缩包
[root@centos8 ~]#cd /usr/local/src
[root@centos8 ~]#wget
https://github.com/abishekvashok/cmatrix/releases/download/v2.0/cmatrix-v2.0 Butterscotch.tar
[root@centos8 ~]#tar xvf cmatrix-v2.0-Butterscotch.tar
#3 配置
[root@centos8 ~]#cd cmatrix
[root@centos8 cmatrix]#./configure --prefix=/apps/cmatrix
#4 编译并安装
[root@centos8 cmatrix]#make && make install
#5 配置环境
[root@centos8 ~]#echo 'PATH=/apps/cmatrix/bin:$PATH' > /etc/profile.d/cmatrix.sh
[root@centos8 ~]#. /etc/profile.d/cmatrix.sh
#或者用软链接实现
[root@centos8 ~]#ln -sv /apps/cmatrix/bin/cmatrix /usr/local/bin/
#6运行
[root@centos8 ~]#cmatrix -a -b -C yellow
7#帮助
[root@centos8 ~]#vim /etc/man_db.conf
MANDATORY_MANPATH /apps/cmatrix/share/man
[root@centos8 ~]#man cmatrix
范例3:centos8 编译安装 httpd-2.4.43
#安装前准备:关闭防火墙和SELinux
#1 安装包
[root@centos8 ~]#dnf install gcc make apr-devel apr-util-devel pcre-devel
openssl-devel redhat-rpm-config
#2 下载并解压缩包
[root@centos8 ~]#tar xvf httpd-2.4.43.tar.bz2 -C /usr/local/src
#3 配置
[root@centos8 ~]#cd /usr/local/src/httpd-2.4.43/
[root@centos8 httpd-2.4.43]#./configure --prefix=/apps/httpd24 -
sysconfdir=/etc/httpd24 --enable-ssl
#4 编译并安装
[root@centos8 httpd-2.4.43]#make -j 4 && make install
#5 配置环境
[root@centos8 ~]#echo 'PATH=/apps/httpd24/bin:$PATH' > /etc/profile.d/httpd24.sh
[root@centos8 ~]#. /etc/profile.d/httpd24.sh
#6运行
[root@centos8 ~]#apachectl
#7 指定用apache用户运行
[root@centos8 ~]#useradd -r -s /sbin/nologin -d /var/www -c Apache -u 48 apache
[root@centos8 ~]#vim /etc/httpd24/httpd.conf
user apache
group apache
#7生效和验证
[root@centos8 ~]#apachectl restart
#查看
[root@centos8 ~]#ps aux
6 Ubuntu软件管理
Debian软件包通常为预编译的二进制格式的扩展名“.deb”,类似rpm文件,因此安装快速,无需编译软 件。包文件包括特定功能或软件所必需的文件、元数据和指令
- dpkg:package manager for Debian,类似于rpm, dpkg是基于Debian的系统的包管理器。可 以安装,删除和构建软件包,但无法自动下载和安装软件包或其依赖项
- apt:Advanced Packaging Tool,功能强大的软件管理工具,甚至可升级整个Ubuntu的系统,基 于客户/服务器架构,类似于yum
6.1 APT工作原理
在服务器上先复制所有DEB包,然后用APT的分析工具genbasedir根据每个DEB 包的包Header 信息对所有的DEB包进行分析,并将该分析结果记录在文件夹base内的一个DEB 索引清单文件中,一 旦APT 服务器内的DEB有所变动,要使用genbasedir产生新的DEB索引清单。客户端在进行安装或升级 时先要查询DEB索引清单,从而获知所有具有依赖关系的软件包,并一同下载到客户端以便安装。当客 户端需要安装、升级或删除某个软件包时,客户端计算机取得DEB索引清单压缩文件后,会将其解压置 放于 /var/cache/apt/,而客户端使用apt-get install或apt-get upgrade命令的时候,就会将这个文件夹 内的数据和客户端计算机内的DEB数据库比对,知道哪些DEB已安装、未安装或是可以升级的
6.2 dpkg 包管理器
dpkg 常见用法:
#安装包
dpkg -i package.deb
#删除包,不建议,不自动卸载依赖于它的包
dpkg -r package
#删除包(包括配置文件)
dpkg -P package
#列出当前已安装的包,类似rpm -qa
dpkg -l
#显示该包的简要说明,类似rpm –qi
dpkg -l package
#列出该包的状态,包括详细信息,类似rpm –qi
dpkg -s package
#列出该包中所包含的文件,类似rpm –ql
dpkg -L package
#搜索包含pattern的包,类似rpm –qf
dpkg -S <pattern>
#配置包,-a 使用,配置所有没有配置的软件包
dpkg --configure package
#列出 deb 包的内容,类似rpm –qpl
dpkg -c package.deb
#解开 deb 包的内容
dpkg --unpack package.deb
注意:一般建议不要使用dpkg卸载软件包。因为删除包时,其它依赖它的包不会卸载,并且可能无法再正常运行。
6.3 apt
apt 特有的命令:
#列出包含条件的包(已安装,可升级等)
apt list
编辑源列表
apt edit-sources
APT包索引配置文件:
/etc/apt/sources.list
/etc/apt/sources.list.d
可以修改上面文件为国内的安装源,提高速度:
参考链接:
apt命令操作(如安装和删除软件包)日志文件:
/var/log/dpkg.log
范例:
#安装包:
apt install tree zip
#安装图形桌面
apt install ubuntu-desktop
#删除包:
apt remove tree zip
#说明:apt remove中添加--purge选项会删除包配置文件,谨慎使用
#更新包索引,相当于yum clean all;yum makecache
apt update
#升级包:要升级系统,请首先更新软件包索引,再升级
apt upgrade
#apt列出仓库软件包,等于yum list
apt list
#搜索安装包
apt search nginx
#查看某个安装包的详细信息
apt show apache2
#在线安装软件包
apt install apache2
#卸载单个软件包但是保留配置⽂件
apt remove apache2
#删除安装包并解决依赖关系
apt autoremove apache2
#更新本地软件包列表索引,修改了apt仓库后必须执⾏
apt update
#卸载单个软件包删除配置⽂件
apt purge apache2
#升级所有已安装且可升级到新版本的软件包
apt upgrade
#升级整个系统,必要时可以移除旧软件包。
apt full-upgrade
#编辑source源⽂件
apt edit-sources
#查看仓库中软件包有哪些版本可以安装
apt-cache madison nginx
#安装软件包的时候指定安装具体的版本
apt install nginx=1.14.0-0ubuntu1.6