1、 软件运行环境
1> 软件运行和编译
ABI:Application Binary Interface(应用程序的二进制接口)
Windows 与 Linux 不兼容
ELF 对应于UNIX 下的文件
PE 则是Windows 的可执行文件
库级别的虚拟化:不兼容解决
Linux:WINE(可以让 Windows 程序跑在 Linux 上)
Windows:Cygwin(可以让 Linux 程序跑在 Windows)
API:Application Programming Interface(应用程序开发接口)
POSIX 表示可移植操作系统接口(Portable Operating System Interface ,缩写为 POSIX )
程序源代码 → 预处理 → 编译 → 汇编 → 链接
静态编译:.a
动态编译:.so(动态库)
# ldd /bin/cat # 查看依赖的库
2> 静态和动态链接
链接主要作用是把各个模块之间相互引用的部分处理好,使得各个模块之间能够正确地衔接,分为静态链接和动态链接。
静态链接:
➢把程序对应的依赖库复制一份到包
➢libxxx.a
➢嵌入程序包
➢升级难,需重新编译
➢占用较多空间,迁移容易
动态链接:
➢只把依赖加做一个动态链接
➢libxxx.so
➢连接指向
➢占用较少空间,升级方便
C 语言运行:
Java 程序运行:
3> 开发语言
系统级开发:C、C++
应用级开发:java、python、go、php、Perl、delphi、ruby
2、 软件包基础
1> 包和包管理器
最初只有 .tar.gz 的打包的源码文件,用户必须编译每个他想在 GNU/Linux 上运行的软件。用户们急需系统提供一种方法来管理这些安装在机器上的软件,当 Debian 诞生时,这样一个管理工具也就应运而生,它被命名为 dpkg。从而著名的"package" 概念第一次出现在 GNU/Linux 系统中,稍后 Red Hat 才开发自己的"rpm" 包管理系统。
包的组成:
二进制文件、库文件、配置文件、帮助文件
程序包管理器:
debian:deb 文件,dpkg 包管理器
redhat:rpm 文件,rpm 包管理器
rpm:Redhat Package Manager
2> 包命名
源代码:[name]-[version].tar.[gz|bz2|xz]
version:major.minor.release(主要.次要.版本)
rpm 包命名方式:
[name]-[version]-release.arch.rpm
例:bash-4.2.46-19.e17.x86_64.rpm # 包名、版本号(开发)、版本信息(开发次数、基于什么发布、基于什么架构) version:major.minor.release(主要.次要.版本) release:erlease.OS
常见的 arch(开发版):
X86:i386,i486,i586,i686
X86_64:x64,x86_64,amd64
跟平台无关:noarch
[root@centos7 Packages]# ls | sed -r 's/.*.(.*..*$)/1/' | sort | uniq -c # 统计 i6886、noarch、x86_64rpm 包分别的个数 808 i686.rpm 937 noarch.rpm 1 TRANS.TBL 2250 x86_64.rpm
包:分类和拆包(包比较大就会拆包,拆成好几个小包)
Application-version-arch.rpm # 主包 Application-devel-version-arch.rpm # 开发子包 Application-utils-version-arch.rpm # 它子包 Application-libs-version-arch.rpm # 其它子包
包与包之间可能存在依赖关系,甚至循环依赖
解决依赖包管理工具:
yum : rpm 包管理器的前端工具
zypper : suse 上的 rpm 前端管理工具
dnf : Fedora 18+ rpm 包管理器前端管理工具 最新版
3> 库文件
查看二进制程序所依赖的库文件
# ldd /PATH/TO/BINARY FILE # 例: ldd /bin/cat
管理及查看本机装载的库文件
# ldconfig # 加载配置文件中指定的库文件 /sbin/ldconfig -p # 显示本机已经缓存的所有可用库文件名及文件路径映射关系 # 配置文件: /etc/ld.so.conf, /etc/ld.so.conf.d/*.conf # 缓存文件: /etc/ld.so.cache
3、 rpm 包管理
1> 包管理器:
程序包管理器:
功能:将编译好的应用程序的各组成文件打包一个或几个程序包文件,从而方便快捷地实现程序包的安装、卸载、查询、升级和校验等管理操作。
包文件组成(每个包独有):
RPM 包内的文件
RPM 的元数据,如名称,版本,依赖性,描述等
安装或卸载时运行的脚本(自动创建系统用户等)
数据库(公共):/var/lib/rpm # Windows 下载安装需要改注册表,Linux 是数据库。
程序包名称及版本
依赖关系
功能说明
包安装后生成的各文件路径及校验码信息
2> 程序包的来源
管理程序包的方式:
使用包管理器:rpm
使用前端工具:yum,dnf
获取程序包的途径:
(1)系统发版的光盘或官方的服务器
CentOS 镜像:
https://www.centos.org/download/
http://mirrors.aliyun.com
http://mirrors.sohu.com
http://mirrors.163.com
(2) 项目官方站点(官网)
(3) 第三方组织:
Fedora-EPEL:epel 源
Extra Packages for Enterprise Linux
Rpmforge:RHEL 推荐,包很全
搜索引擎:
http://pkgs.org
http://rpmfind.net
http://rpm.pbone.net
https://sourceforge.net/
(4) 自己制作
注意:第三方包建议要检查其合法性:来源合法性,程序包的完整性
3> CentOS 系统上使用 rpm 命令管理程序包:
安装、卸载、升级、查询、校验、数据库维护
安装:
rpm {-i|--install} [install-options] PACKAGE_FILE -v:verbose # 显示安装过程 -v v -h:以#显示程序包管理执行进度
rpm -q mariadb(例) # 查询是否安装 rpm -e * # 卸载 rpm -ql tree # -ql 显示 tree 软件包的文件列表 rpm -qi tree # 查看版本信息(描述信息) 注意:如果 tree 的文件列表中间有文件被删了,重新安装安装不了可以使用--replacepkgs 选项覆盖安装,也可以使用 cpio 把包解开 rpm2cpio /misc/cd/Packages/tree-1.6.0-10.el7.x86_64.rpm | cpio -tv rpm2cpio /misc/cd/Packages/tree-1.6.0-10.el7.x86_64.rpm | cpio - idv ./usr/bin/tree rpm -ivh PACKAGE_FILE…
[install-options] --test # 测试安装,但不真正执行安装,即 dry run 模式 --nodeps # 忽略依赖关系 --replacepkgs | replacefiles # 覆盖安装 | 覆盖有冲突的文件 --nosignature # 不检查来源合法性 --nodigest # 不检查包完整性 --noscripts # 不执行程序包脚本 %per:安装前脚本 --nopre %post:安装后脚本 --nopost %preun:卸载前脚本 --nopreun %postun:卸载后脚本 --nopostun rpm -q --scripts [包名] # 查询已经安装的程序的脚本,加-p 查询没安装的程序的脚本
rpm 包升级:
rpm {-U|upgrade} [install-options] PACKAGE_FILE… rpm {-F|--freshen} [install-options] PACKAGE_FILE… upgrade:安装有旧版本程序包,则"升级",如果不存在旧版本程序包,则"安装" freshen:安装有旧版本程序包,则"升级",如果不存在旧版本程序包,则不执行升级操作 rpm -Uvh PACKAGE_FILE… rpm -Fvh PACKAGE_FILE… --lodpackage:降级 --force:强制安装 同一包名不同版本共存:要放在不同文件夹里(rpm -ql * 查询文件列表)
包查询:
rpm {-q|--query} [select-options] [query-options] [select-options] -a:所有包 # -qa 查询已安装的所有包,支持通配符搜索包名(模糊查询),利用管道符使用正则查询。 -f:查看指定的文件由那个程序包安装完成 -p rpmfile:针对尚未安装的程序包文件做查询操作 --whatprovides CAPABILITY:查询指定的 CAPABILITY(能力)由那个包所提供 --whatrequires CAPABILITY:查询指定的 CAPABILITY(能力)被那个包所依赖
rpm2cpio 包文件|cpio -itv # 预览包内文件 rpm2cpio 包文件|cpio -id "*.conf" # 释放包内文件
[query-options] --changelog:查询 rpm 包的 changelog -c:查询程序的配置文件 -d:查询程序的文档 -i:information # 查询版本信息 -l:查看指定的查询包安装后生成的所有文件 --scripts:程序包自带的脚本 --provides:列出指定程序包所提供的 CAPABILITY(能力) -R:查询指定的程序包所依赖的 CAPABILITY(能力)
常用查询用法: -qi # 查看版本信息,描述信息
-qf # 查看指定的文件由那个程序包安装完成
-qc # 查询程序的配置文件
-ql # 查看指定的查询包安装后生成的所有文件
-qd # 查询程序的文档
-qpi # 查询尚未安装的程序包文件版本信息
-qpl # 查询尚未安装的程序包文件的所有文件
-qa # 查询已安装的所有包
包卸载:
rpm {-e|--erase} [--allmatches] [--nodeps] [--noscripts] [--notriggers] [--test] PACKAGE_NAME…
包校验:
rpm {-V|--verify} [select-options] [query-options] rpm -V [包名] # 校验属性、内容是否改变 S # file size differs M Mode differs(includes permissions and file type) 5 digest(formerly MD5 sum)differs # MD5 D Device major/minor number mismatch L readLink(2) path mismatch U User ownership differ # 所有者 G Group ownership differs T mTime differs # 时间 P capabilities differ
包来源的合法性验证及完整性验证 完整性验证: SHA256 来源合法性验证: RSA
公钥加密 对称加密:加密、解密使用同一密钥 非对称加密:密钥是成对儿的 public key:公钥,公开所有人 secret key:私钥,不能公开 导入所需要公钥 rpm -K|checksig rpmfile # 检查包的完整性和签名 rpm --import /misc/cd/RPM-GPG-KEY-CentOS-7 # 光盘 rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 # 硬盘 CentOS 7 发行版光盘提供: RPM-GPG-KEY-CentOS-7 rpm -qa "gpg-pubkey*"
4> rpm 数据库
数据库重建:
/var/lib/rpm
rpm {--initdb|--rebuilddb}
initdb:初始化,如果事先不存在数据库,则新建之;否则,不执行任何操作
rebuilddb:重建已经安装的包头的数据库索引目录
4、 yum 管理
1> centos:yum、dnf
yum:rpm 的前端程序,可解决软件包相关依赖性,可在多个库之间定位软件包,up2date 的替代工具
yum repository:yum repo(仓库),存储了众多 rpm 包,以及包的相关的元数据(meta data)文件(放置于特定目录 repodata 下)
文件服务器(共享):
http:// # 走网络 https:// # 走网络 ftp:// # 走网络 file:// # 走本地
基于 C/S 架构(client/Server)搭建 yum server(rpm 仓库(rpm 文件如:packages、元数据))共享服务器;yum client(设置配置文件:/etc/repos.d/*.repo 写清共享服务器路径)
yum 安装软件 → 配置文件 → 找到网络 yum repo 仓库,查找 rpm 仓库文件、元数据,看是否有要下载的软件包,查看是否依赖性 → 将元数据下载到缓冲区 → 连到服务器
下载包(下载的包安装后默认删除、元数据不删)
yum 客户端配置文件:
/etc/yum.conf # 为所有仓库提供公共配置 /etc/yum.repos.d/*.repo # 为仓库的指向提供配置
仓库指向的定义:
[repositoryID] name=Some name for this repository baseurl=url://path/to/repository/ enable={1|0} gpgcheck={1|0} gpgkey=URL enablegroups={1|0} # 一般默认启用不用写 failovermethod={roundrobin | priority} # 设置多个地址的优先级 roundrobin:意为随机挑选,默认值 priority:按顺序访问 cost=默认为 1000
# 例子: # vim /etc/yum.repo.d/CentOS-Base.repo [base] # 名字 name=CentOS-$releasever – Base # 描述信息 mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os&infra=$infra //仓库信息路径 #baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/ # CPU 架构/os/版本 gpgcheck=1 # 检查包 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 # 秘钥
yum 仓库:
yum 的 repo 配置文件中的用的变量:
$releasever:当前 OS 的发行版的主版本号
$arch:平台,i386 i486 i586 x86_64
$basearch:基础平台;i386 x86_64
$YUM0-$YUM9:自定义变量
示例:
http://server/centos/$releasever/$basearch/ http://server/centos/7/x86_64 http://server/centos/6/i386
yum 源:
阿里云 repo 文件: http://mirrors.aliyun.com/repo/ CentOS 系统的 yum 源: 阿里云: https://mirrors.aliyun.com/centos/$releasever/os/x86_64/ 清华:https://mirrors.tuna.tsinghua.edu.cn/centos/$releasever/os/x86_64/ EPEL 的 yum 源: 阿里云: https://mirrors.aliyun.com/epel/$releasever/x86_64
阿里巴巴开源软件: https://opsx.alibaba.com/
yum-config-manager:生成 repo 配置文件 生成 172.16.0.1_cobbler_ks_mirror_CentOS-X-x86_64_.repo yum-config-manager --add-repo=http://172.16.0.1/cobbler/ks_mirror/7/ yum-config-manager --disable "仓库名”禁用仓库 yum-config-manager --enable "仓库名”启用仓库
2> 配置本地 yum 源和网络 yum 源
本地 yum 源(光盘)
将 /etc/yum.repo.d/ 下的文件,移动到 /etc/yum.repo.d/repo.bak/ 文件夹;创建本地 yum 文件
# vim /etc/yum.repo.d/base.repo # 建立本地 yum 源 [base] # 配置本地光盘 yum 仓库 name=cdrom base baseurl=file:///misc/cd # 光盘挂载路径 https://mirrors.aliyun.com/centos/7/os/x86_64/ # 可以写多个路径 # 不检查软件包安全性(光盘里的安全) gpgcheck=0
配置 epel 源
[epel] name=aliyun epel baseurl=https://mirrors.aliyun.com/epel/$releasever/$basearch/ gpgcheck=0 enabled=1
yum repolist # 列出所有 repo 仓库信息
元数据下载路径:var/cache/yum/$basearch/$releasever
yum clean all # 清除 yum 源
yum 源配置容易出现的问题:配置文件格式问题、缓存问题
3> yum 命令
-y 自动回答“yes” -q 静默模式 --nogpgcheck 不检查 yum repolist [all] # 显示启用的仓库列表[显示全部] yum list [all | available | installed | updates] //列出程序包(管道)[全部 | 可用的 | 已经装好的 | ] createrepo 目录 # 创建 yum 仓库(网络上拉的包使用 yum 安装要创建仓库,元数据 repodada 所在的目录就是*.repo 中的 URL 路径) yum install # 安装软件包 yum reinstall # 重新安装 yum update # 升级软件包 yum downgrade # 降级 yum check-update # 检查可用升级 yum remove # 卸载(卸载默认不卸载依赖包) yum history # yum 安装的历史 yum history info ID # 查看 yum 安装历史中的 ID 看具体安装 yum history undo ID # 取消这条安装命令 yum history redo ID # 重新装一遍,卸载错了的情况下 yum info # 查看程序包 yum provides # 查看指定特性(可以是文件)是由哪个程序包所提供 yum clean all # 清除本地缓存 yum makecache # 构建缓存 yum search # 以指定的关键字搜索程序包名及 summary 信息 yum deplist # 查看指定包所依赖的文件 capabilities
# 包组的相关命令:yum 中将不同的包分到不同的组里 yum groupinstall group1… yum groupupdate group1… yum grouplist yum groupremove group1… yum groupinfo group1…
# 日志:/var/log/yum.log
5、 搭建企业内部的 yum 源
解决:安装的 yum 仓库里的必要文件(各种 rpm 包、yum 仓库)、共享:http 等
1> 关闭 selinux(/etc/selinux/config 配置文件)
2> 关闭防火墙并设置开机不启动:
# systemctl stop firewalld;systemctl disable firewalld # centos7
# service iptables stop;chkconfig iptables off # centos6
3> 安装 httpd 服务并启动
# yum install httpd -y # systemctl start httpd # systemctl enable httpd
4> 建立文件目录结构
# cd /var/www/html # mkdir -p centos/{6,7}/os/x86_64 tree . └── centos ├── 6 │ └── os │ └── x86_64 └── 7 └── os └── x86_64
5> 添加 centos6 光盘,本机有 centos7 的光盘(实现 centos6/7 的基于 http 协议的 yum 源)
# echo '- - -' > /sys/class/scsi_host/host2/scan # 列出所有可用块设备的信息
6> 分别将对应的光盘文件挂载到对应的目录下
# mount /dev/sr0 centos/7/os/x86_64/ # mount /dev/sr1 centos/6/os/x86_64/
工作中把 so 文件拷到光盘上,将 so 文件的路径挂载至目录
7> 客户端配置 yum 源路径
baseurl=http://192.168.100.101/centos/$releasever/os/$basearch/
也可设置 mirrorlist=http://192.168.100.101/yum.txt(建立/var/www/html/yum.txt 文件) cat yum.txt(可以写多个路径) http://192.168.1.7/centos/6/os/x86_64/ # 自己搭建的 yum 源 https://mirrors.aliyun.com/centos/6/os/x86_64/ # 阿里源
6、 dnf 管理
dnf 介绍:新一代的 rpm 软件包管理器。dnf 发行日期是 2015 年 5 月 11 日,dnf 包管理器采用 Python 编写,发行许可为 GPL v2,首先出现在 Fedora 18 发行版中。在 RHEL 8.0版本正式取代了 yum , dnf 包管理器克服了 yum 包管理器的一些瓶颈,提升了包括用户体验、内存占用、依赖分析、运行速度等。
安装所需软件包,依赖 epel 源:
# wget http://springdale.math.ias.edu/data/puias/unsupported/7/x86_64/dnf-conf-0.6.4-2.sdl7.noarch.rpm # wget http://springdale.math.ias.edu/data/puias/unsupported/7/x86_64//dnf-0.6.4-2.sdl7.noarch.rpm # wget http://springdale.math.ias.edu/data/puias/unsupported/7/x86_64/ python-dnf-0.6.4-2.sdl7.noarch.rpm # yum install python-dnf-0.6.4-2.sdl7.noarch.rpm dnf-0.6.4-2.sdl7.noarch.rpm dnf-conf-0.6.4-2.sdl7.noarch.rpm python2-libcomps-0.1.8-3.el7.x86_64.rpm libcomps-0.1.8-3.el7.x86_64.rpm
配置文件: /etc/dnf/dnf.conf
仓库文件: /etc/yum.repos.d/ *.repo
日志: /var/log/dnf.rpm.log
dnf 的用法跟 yum 一致
7、 编译安装
1> 程序包编译安装:
Application-version-release.src.rpm --> 安装后,使用 rpmbuild 命令制作成二进制格式的 rpm 包,而后再安装
源代码 --> 预处理 --> 编译 --> 汇编 --> 链接 --> 执行
源代码组织格式:
多文件:文件中的代码之间,很可能存在跨文件依赖关系
c、c++:make 项目管理器
configure 脚本 --> Makefile.in --> Makefile
java:maven
2> 编译安装:
(1)./configure
通过选项传递参数,指定启用特性、安装路径等;执行时会参考用户的指定以及 Makefile.in 文件生成的 Makefile;
检查依赖到的外部环境,如依赖的软件包
(2)make 根据 Makefile 文件,构建应用程序
# make -j [cpu 核数] # 并行编译
(3)make install 复制文件到相应路径
开发工具:
autoconf:生成 configure 脚本
automake:生成 Makefile.in
注意:安装前查看 INSTALL,README
3> 源代码:
官方自建站点:
apache.org(ASF:Apache Software Foundation)
mariadb.org
…
代码托管:
SourceForge.net
Github.com
code.google.com
c/c++编译器:gcc(GNU C Complier)
4> tree 的编译安装
1.下载 tree 的 tar 包后进行解压缩 2.有 Makefile 文件所以不用 ./configure 3.进入文件修改 prefix = /apps/tree(安装路径) 4.make 5.make install 6.在/etc/profile.d/env.sh → 定义 PATH=/apps/tree/bin:$PATH(定义到环境变量中)
5> httpd 的编译安装
1.解压缩 httpd-2.4.25.tar 包 # tar -xvf httpd-2.4.25.tar
2.进入 httpd-2.4.25 目录,ls 查看文件 README(软件介绍)、INSTALL(怎么安装) #首先安装依赖包(可以先./configure 根据提示信息先 yum search 搜索包名,再使用 yum install 安装) # yum install gcc apr-devel apr-util-devel pcre-devel openssl-devel -y
# ./configure --help # 查看选项信息 # 自定义:安装目录、配置文件目录、启用加密、启用共享库 ./configure --prefix=/apps/httpd24 --sysconfdir=/etc/httpd --enable-ssl --enable-so
3.make;make install
4.PREFIX/bin/apachectl start 启动服务 # /apps/httpd24/bin/apachectl start
# 加入环境变量:
vim /etc/profile.d/env.sh PATH=/apps/httpd24/bin:/apps/tree/bin:$PATH apachectl start # 启动
5.将 /apps/httpd24/bin/apachectl start 路径添加到/etc/rc.d/rc.local 中,给该文件加执行权限,实现开机自启动。
6.网页存放在/apps/httpd24/htdocs/index.html
6> 实 现 编 写 脚 本 /apps/httpd24/htdocs/test.sh , 在 任 意 一 台 机 器 上 通 过 curl http://192.168.1.9/test.sh | bash 一键安装服务
8、 Ubuntu 软件管理
Debian 软件包通常为预编译的二进制格式的扩展名 ".deb",类似 rpm 文件,因此安装快速,无需编译软件。包文件包括特定功能或软件所必需的文件、元数据和指令。
dpkg:package manager for Debian,类似于 rpm,dpkg 是基于 Debian 的系统的包管理器。可以安装,删除和构建软件包,但无法自动下载和安装软件包或其依赖项。
APT:Advanced Packaging Tool,功能强大的软件管理工具,甚至可升级整个 Ubuntu 的系统,基于客户/服务器架构。
APT 工作原理:在服务器上先复制所有 DEB 包,然后用 APT 的分析工具 genbasedir 根据每个 DEB 包的包头(Header)信息对所有的 DEB 包进行分析,并将该分析结果记录在文件夹base 内的一个 DEB 索引清单文件中,一旦 APT 服务器内的 DEB 有所变动,要使用genbasedir 产生新的 DEB 索引清单。客户端在进行安装或升级时先要查询 DEB 索引清单,从而获知所有具有依赖关系的软件包,并一同下载到客户端以便安装。当客户端需要安装、升级或删除某个软件包时,客户端计算机取得 DEB 索引清单压缩文件后,会将其解压置放于 /var/cache/apt/,而客户端使用 apt-get instal 或 apt-get upgrade 命令的时候,就会将这个文件夹内的数据和客户端计算机内的DEB数据库比对,知道哪些DEB已安装、未安装或是可以升级的。
dpkg 常见用法:man dpkg
dpkg -i package.deb # 安装包 dpkg -r package # 删除包,不建议,不自动卸载依赖于它的包 dpkg -P package # 删除包(包括配置文件) dpkg -l # 列出当前已安装的包,类似 rpm -qa dpkg -L package # 列出该包中所包含的文件,类似 rpm -ql dpkg -S <pattern> # 搜索包含 pattern 的包,类似 rpm -qf dpkg -S package # 列出该包的状态,包括详细信息,类似 rpm -qi dpkg --configure package # 配置包,-a 使用,配置所有没有配置的软件包 dpkg -C package.deb # 列出 deb 包的内容,类似 rpm -qpl dpkg --unpack package.deb # 解开 deb 包的内容
# dpkg 示例: # 列出系统上安装的所有软件包 dpkg -l
# 列出软件包安装的文件 dpkg -L bash
# 查看/bin/bash 来自于哪个软件包 dpkg -S /bin/bash
# 安装本地的.deb 文件 dpkg -i /mnt/cdrom/pool/main/z/zip/zip_ 3.0-11build1 _amd64.deb
# 卸载软件包 dpkg -r zip
注意:一般建议不要使用 dpkg 卸载软件包。 因为删除包时,其它依赖它的包不会卸载,并且可能无法再正常运行。
APT 常用方法:apt help
apt 与 apt-get 命令对比: apt命令 被取代的命令 命令的功能 apt install apt-get install 安装软件包 apt remove apt-get remove 移除软件包 apt purge apt-get purge 移除软件包及配置文件 apt update apt-get update 刷新存储库索引 apt upgrade apt-get upgrade 升级所有可升级的软件包 apt autoremove apt-get autoremove 自动删除不需要的包 apt full-upgrade apt-get dist-upgrade 在升级软件包时自动处理依赖关系 apt search apt-cache search 搜索应用程序 apt show apt-cache show 显示安装细节
apt 特有的命令:
apt list # 列出包含条件的包(已安装,可升级等)
apt edit-sources # 编辑源列表
apt 包索引来自 /etc/apt/sources.list 文件和 /etc/apt/sources.list.d 目录中定义的存储库的可用包的数据库。要使用存储库中所做的最新更改来更新本地程序包索引。
apt 命令操作(如安装和删除软件包)记录在 /var/log/dpkg.log 日志文件中。
apt 示例:
# 安装包: apt install tree zip
# 删除包: apt remove tree zip 说明:apt remove 中添加 --purge 选项会删除包的配置文件,谨慎使用
# 更新包索引: apt update
# 升级包:要升级系统,请首先更新软件包索引,再升级 apt upgrade