Windows软件安装流程
- 安装检查: 检查系统是否满足软件的安装要求,包括操作系统版本、硬盘空间、内存要求等。
- 释放文件: 解压安装包中的文件到临时目录。
- 复制可执行文件: 将主要的可执行文件复制到指定的安装路径。
- 安装DLL动态链接库/安装服务: 根据需要安装动态链接库文件(DLL)和注册系统服务。
- 注册表配置: 将软件的配置信息写入Windows注册表,以便系统和其他软件能够正确识别和使用。
- 开始菜单和快捷方式: 创建开始菜单项和桌面快捷方式,方便用户启动软件。
Windows安装文件
- Windows可执行程序: 可执行文件通常是以“.exe”或“.msi”结尾的文件。
Linux可执行程序
- /bin: 包含基本用户命令的可执行文件。
- /sbin: 包含系统管理员使用的系统命令。
- /usr/bin: 包含大多数用户命令的可执行文件。
- /usr/sbin: 包含系统管理员使用的一些系统命令。
脚本和程序的区别
-
不需要编译的语言:
- JavaScript: 解释型语言,通过浏览器或Node.js环境执行。
- Python: 解释型语言,通过Python解释器执行。
- Ruby: 解释型语言,通过Ruby解释器执行。
-
需要编译的语言:
- C: 编译型语言,通过C编译器(如GCC)生成可执行文件。
- C++: 编译型语言,通过C++编译器(如G++)生成可执行文件。
- Swift: 编译型语言,通过Swift编译器生成可执行文件。
- Kotlin: 编译型语言,通过Kotlin编译器生成可执行文件。
- Go: 编译型语言,通过Go编译器生成可执行文件。
-
解释型: 代码在执行时逐行解释运行,不需要事先编译成机器码。
-
编译型: 代码在执行前需要通过编译器编译成机器码,然后由计算机直接执行。
-
注: Java介于两者之间,采用“编译+解释”的混合模式,先通过编译生成字节码,再由JVM(Java虚拟机)解释执行。
Linux软件常见安装方式
- 源码编译: 使用
make
命令编译源码安装软件。 - RPM: Red Hat Package Manager,用于Red Hat系发行版的软件包管理工具。
- DEB: Debian Package,用于Debian系发行版的软件包管理工具。
- YUM: Yellowdog Updater Modified,CentOS和Fedora等发行版的软件包管理工具。
- APT: Advanced Package Tool,用于Debian和Ubuntu等发行版的软件包管理工具。
- Docker: 使用容器技术部署和运行应用程序,避免依赖和环境问题。
Linux主要流派
Red Hat派系
- 主要发行版: Red Hat, CentOS, Fedora
- 主要安装方式:
dnf
: Fedora的包管理工具。yum
: CentOS和旧版Red Hat的包管理工具。rpm
: 使用RPM包格式的软件包管理工具。make
: 用于源码编译安装。
Debian派系
- 主要发行版: Kali, Ubuntu
- 主要安装方式:
apt
: Advanced Package Tool,用于软件包的管理和安装。dpkg
: Debian软件包管理器,底层工具。deb
: Debian软件包格式。
FreeBSD系
- 主要发行版: FreeBSD
- 主要安装方式:
pkg
: FreeBSD的包管理工具。ports
: FreeBSD的源码包管理系统,用于源码编译安装。make
: 用于源码编译安装。
源码安装
- 适用范围: 所有Linux发行版
- 使用工具:
make
,gcc
(GNU Compiler Collection,用于编译C和C++代码),configure
(用于生成Makefile的配置脚本)。
RPM安装
RPM选项(不能解决RPM软件包之间的依赖关系的问题)
操作命令说明
-
查询
rpm -qa
: 查询已安装的所有RPM包。rpm -q 包名
: 查询特定包的安装状态。-q
表示query
参数。
-
安装
rpm -ivh 包名
: 安装RPM包。-i
: 表示安装(install)。-v
: 显示详细信息(verbose)。-h
: 显示安装进度条(hash)。
- 可以同时安装多个RPM包,每个包名之间用空格分隔:
rpm -ivh 包名1 包名2 包名3
-
升级
rpm -Uvh 包名
: 升级RPM包。-U
: 如果包已经安装,则升级到最新版(install or upgrade)。-v
: 显示详细信息(verbose)。-h
: 显示升级进度条(hash)。
- 可以同时升级多个RPM包,每个包名之间用空格分隔:
rpm -Uvh 包名1 包名2 包名3
-
卸载
rpm -e 包名
: 卸载RPM包。需要先卸载依赖其的软件。-e
: 表示卸载(erase)。
- 可以同时卸载多个RPM包,每个包名之间用空格分隔:
rpm -e 包名1 包名2 包名3
示例命令
-
查询已安装的所有RPM包:
rpm -qa
-
查询特定包的安装状态:
rpm -q 包名
-
安装单个RPM包:
rpm -ivh 包名
-
同时安装多个RPM包:
rpm -ivh 包名1 包名2 包名3
-
升级单个RPM包:
rpm -Uvh 包名
-
同时升级多个RPM包:
rpm -Uvh 包名1 包名2 包名3
-
卸载单个RPM包:
rpm -e 包名
-
同时卸载多个RPM包:
rpm -e 包名1 包名2 包名3
YUM (Yellow dog Updater, Modified)
YUM是一个基于RPM的软件包管理工具,主要用于Red Hat系列的Linux发行版,如CentOS和Fedora。它能够自动处理软件包的依赖关系,并简化安装和更新过程。
YUM操作和选项
-
列表
yum list
: 列出可用的软件包。
-
搜索
yum search 包名
: 搜索指定的软件包。
-
安装
yum install 包名
: 安装指定的软件包。
-
升级
yum update 包名
: 升级指定的软件包。
-
卸载
yum remove 包名
: 卸载指定的软件包。
-
更新所有软件包
yum update
: 更新所有已安装的软件包。
-
清除缓存
yum clean all
: 清除所有缓存。
-
更新YUM缓存
yum makecache
: 更新YUM的缓存。
选项含义
-h
: 显示帮助信息。-y
: 对所有的提问都回答 "yes"。-c
: 指定配置文件。-q
: 安静模式。-v
: 详细模式。
示例命令
-
列出所有可用的软件包:
yum list
-
搜索指定的软件包:
yum search 包名
-
安装指定的软件包:
yum install 包名
-
升级指定的软件包:
yum update 包名
-
卸载指定的软件包:
yum remove 包名
-
更新所有已安装的软件包:
yum update
-
清除所有缓存:
yum clean all
-
更新YUM的缓存:
yum makecache
常用选项
-
显示帮助信息:
yum -h
-
对所有的提问都回答 "yes":
yum install 包名 -y
-
使用指定的配置文件:
yum -c /path/to/configfile install 包名
-
安静模式:
yum -q install 包名
-
详细模式:
yum -v install 包名
DNF和YUM的区别
DNF(Dandified YUM)
DNF是YUM的下一个版本,旨在解决YUM中的一些性能和可扩展性问题。以下是DNF和YUM的一些主要区别:
特性 | DNF | YUM |
---|---|---|
依赖关系解析 | 使用Libsolv | 使用公开的API |
API | 有完整的API文档,易于创建新功能 | 没有完整文档,创建新功能困难 |
开发语言 | C, C++, Python编写 | 只用Python编写 |
使用范围 | Fedora、RHEL 8、CentOS 8、OEL 8、Mageia 6/7 | RHEL 6/7、CentOS 6/7、OEL 6/7 |
扩展支持 | 支持各种扩展 | 只支持基于Python的扩展 |
内存占用 | 占用内存少 | 占用较多内存 |
软件包更新 | 包中包含不相关的依赖,则不会更新 | 在没有验证的情况下更新软件包 |
存储库不可用处理 | DNF将跳过它,并继续使用可用的存储库处理事务 | YUM会立即停止 |
内核包的保护 | DNF不提供,可以删除内核包 | 不允许删除运行中的内核 |
详细对比
-
依赖关系解析
- DNF: 使用Libsolv库进行依赖关系解析。Libsolv是一个高效的库,用于解决软件包的依赖关系和冲突。
- YUM: 使用公开的API进行依赖关系解析。
-
API
- DNF: 提供完整的API文档,易于创建新的功能和扩展。
- YUM: 没有完整的API文档,创建新功能和扩展较为困难。
-
开发语言
- DNF: 使用C、C++和Python编写。
- YUM: 主要使用Python编写。
-
使用范围
- DNF: 适用于Fedora、RHEL 8、CentOS 8、OEL 8、Mageia 6/7等新的Linux发行版。
- YUM: 适用于RHEL 6/7、CentOS 6/7、OEL 6/7等较旧的Linux发行版。
-
扩展支持
- DNF: 支持各种类型的扩展,使其更具灵活性。
- YUM: 仅支持基于Python的扩展。
-
内存占用
- DNF: 内存占用较少,性能更优。
- YUM: 内存占用较多。
-
软件包更新
- DNF: 如果软件包中包含不相关的依赖,则不会更新这些依赖。
- YUM: 在没有验证的情况下更新软件包。
-
存储库不可用处理
- DNF: 如果某个存储库不可用,DNF会跳过它,并继续使用其他可用的存储库处理事务。
- YUM: 如果某个存储库不可用,YUM会立即停止操作。
-
内核包的保护
- DNF: 不提供内核包的保护,可以删除内核包。
- YUM: 不允许删除正在运行的内核,以防止系统崩溃。
Debian系
Deb包安装
Deb包是Debian及其衍生发行版(如Ubuntu)使用的软件包格式。可以使用dpkg
命令手动安装Deb包,但更常见的是使用apt
工具来管理软件包。
APT(Advanced Package Tool)
APT是Debian系Linux发行版的包管理工具,负责自动化安装、升级、配置和删除软件包。
操作命令
-
搜索
apt search 包名
: 搜索指定的软件包。
-
安装
apt install 包名
: 安装指定的软件包。
-
升级
apt upgrade
: 升级所有已安装的软件包。
-
卸载
apt remove 包名
: 卸载指定的软件包。
FreeBSD系
package
FreeBSD的package
系统用于安装预编译的软件包,类似于Linux的apt
或yum
。
ports
FreeBSD的ports
系统用于从源代码编译和安装软件包。它提供了更大的灵活性,但需要更多的时间和资源。
操作命令
-
搜索
pkg search 包名
: 搜索指定的软件包。
-
安装
pkg install 包名
: 安装指定的软件包。
-
升级
pkg upgrade 包名
: 升级指定的软件包。
-
卸载
pkg delete 包名
: 卸载指定的软件包。
update-alternatives
update-alternatives
是一个用于管理系统中不同版本的软件的工具。它可以创建、删除和查询符号链接,以便在多个可用版本之间切换。
查看当前设置
update-alternatives --display java
: 查看当前java
服务的设置。
添加新选项
-
update-alternatives --install /usr/bin/java java /usr/local/jdk-11.0.2/bin/java 3
:/usr/bin/java
: 注册地址,软链接的位置。java
: 服务名。/usr/local/jdk-11.0.2/bin/java
: 实际可执行文件路径。3
: 优先级。
切换选项
update-alternatives --config java
: 手动选择java
服务的版本。
示例命令
Debian系APT命令示例
-
搜索软件包:
apt search 包名
-
安装软件包:
apt install 包名
-
升级所有已安装的软件包:
apt upgrade
-
卸载软件包:
apt remove 包名
FreeBSD系PKG命令示例
-
搜索软件包:
pkg search 包名
-
安装软件包:
pkg install 包名
-
升级软件包:
pkg upgrade 包名
-
卸载软件包:
pkg delete 包名
update-alternatives命令示例
-
查看当前
java
设置:update-alternatives --display java
-
添加新
java
选项:update-alternatives --install /usr/bin/java java /usr/local/jdk-11.0.2/bin/java 3
-
切换
java
版本:update-alternatives --config java