Windows 與Linux不兼容
ELF(Executable and Linkable Format)
PE(Portable Executable)
庫級別的虛擬化:
Linux:WINE
Windows:Cygwin
POSIX:Portable OS
程序源代碼>預處理>編譯>匯編>鏈接
靜態編譯: .a
動態編譯: .so
gcc編譯程序主要經過四個過程 :
預處理(Pre-Processing)
編譯(Compiling)
匯編(Assembling)
鏈接(Linking)
鏈接主要功能是把各個模塊之間相互引用的部分處理好,使得各個模塊之間能夠正確地鏈接,分爲靜態和動態鏈接.
+ 把程序對應的依賴庫複製一份到包
+ libxxx.a
+ 嵌入程序包
+ 升級難,需要重新編譯
+ 占用較多空間,遷移容易
+ 只把依賴加一個動態鏈接
+ libxxx.so
+ 連接指向
+ 占用較少空間,升級方便
最初只提供了.tar.gz的打包的源码文件,用户必须自已编译每个想在 GNU/Linux上运行的软件。用户急需系统能提供一种更加便利的方法来 管理这些软件,当Debian诞生时,这样一个管理工具也就应运而生,它 被命名为dpkg。从而著名的“package”概念第一次出现在GNU/Linux 系统中,稍后Red Hat才开发自己的“rpm”包管理系统 .
二进制文件、库文件、配置文件、帮助文件
debian: deb文件, dpkg包管理器
redhat: rpm文件, rpm包管理器
包之间:可能存在依赖关系,甚至循环依赖.
解决依赖包管理工具 :
将编译好的应用程序的各组成文件打包一个或几个程序包文件,从而 方便快捷地实现程序包的安装、卸载、查询、升级和校验等管理操作.
安裝,卸載,升級,查詢,校驗,數據庫維護
安裝 :
rpm {-i|–install} [install-options] PACKAGE_FILE…
-v:verbose
-vv :
-h:以#顯示程序包管理執行進度
rpm -ivh PACKAGE_FILE...
[install -options]
--test:測試安裝,但不真正執行安裝,即dry run(幹跑)模式
--nodeps:忽略依賴關係
--replacepkgs | replacefiles
--nosignature:不檢查來源合法性
nodigest:不檢查包完整性
--noscripts:不執行程序包脚本
%pre:安裝前脚本 --nopre
%post:安裝後脚本 --nopost
%preun:卸載前脚本 --nopreun
%postun:卸載后脚本 --nopostun
rpm {-U|–upgrade} [install-options] PACKAGE_FILE…
rpm {-F|–freshen} [install-options] PACKAGE_FILE…
upgrade:安裝有舊版程序包,則升級
如果不存在舊版程序包,則安裝
freshen:安裝有舊版程序包,則升級
如果不存在舊版程序包,則不執行升級操作
rpm -Uvh PACKAGE_FILE…
rpm -Fvh PACKAGE_FILE…
–oldpackage:降級
–force:强制安裝
rpm {-q|–query} [select-options] [query-options]
[select-options]
-a:所有包
-f:查看指定文件由哪個程序包安裝生成
-p:針對尚未安裝的程序包文件做查詢操作
--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 PACKAGE,-qf FILE,-qc PACKAGE,-ql PACKAGE,-qd PACKAGE
-qpi PACKAGE_FILE,-qpl PACKAGE_FILE…
-qa PACKAGE
rpm {-e|–erace} [–allmatches] [–nodeps] [–noscripts] [–notriggers] [–test] PACKAGE_NAME…
儅包卸載時,對應的配置文件不會刪除,以FILENAME.rpmsave形式保留
rpm {-V|–verify} [select-options]
S file Size differs
M Mode differs (includes permissions and file type)
5 digest (formerly MD5 sum) differs
D Device major/minor number mismatch
L readLink(2) path mismatch
U User ownership differs
G Group ownership differs
T mTime differs
P capabilities differ
包来源的合法性验证及完整性验证
公钥加密
导入所需要公钥
数据库重建 :
rpm {–initdb|–rebuilddb}
http://
https://
ftp://
file://
/etc/yum.conf:为所有仓库提供公共配置
/etc/yum.repos.d/*.repo:为仓库的指向提供配置
仓库指向的定义:
[repositoryID]
name=Some name for this repository
baseurl=url://path/to/repository/
enabled={1|0}
gpgcheck={1|0}
gpgkey=URL
enablegroups={1|0}
failovermethod={roundrobin|priority}
roundrobin:意为随机挑选,默认值
priority:按顺序访问
cost= 默认为1000
yum [options] [command] [package ...]
yum repolist [all|enabled|disabled]
--nogpgcheck:禁止进行gpg check
-y: 自动回答为“yes”
-q:静默模式
--disablerepo=repoidglob:临时禁用此处指定的repo
--enablerepo=repoidglob:临时启用此处指定的repo
--noplugins:禁用所有插件
挂載光盤至某目錄,例如/mnt/cdrom
創建配置文件:
介绍:新一代的RPM软件包管理器。DNF 发行日期是2015年5月11日,DNF 包管理器采 用Python 编写,发行许可为GPL v2,首先出现在Fedora 18 发行版中。在 RHEL 8.0 版本正式 取代了 YUM,DNF包管理器克服了YUM包管理器的一些瓶颈,提升了包括用户体验,内存占用, 依赖分析,运行速度等.
wget http://springdale.math.ias.edu/data/puias/unsupported/7/x86_64/dnf-conf-0.6.42.sdl7.noarch.rpm
wget http://springdale.math.ias.edu/data/puias/unsupported/7/x86_64/dnf-0.6.42.sdl7.noarch.rpm
wget http://springdale.math.ias.edu/data/puias/unsupported/7/x86_64/python-dnf0.6.4-2.sdl7.noarch.rpm
wget https://mirrors.aliyun.com/centos/7/extras/x86_64/Packages/python2-libcomps0.1.8-12.el7.x86_64.rpm
wget https://mirrors.aliyun.com/centos/7/extras/x86_64/Packages/libcomps-0.1.812.el7.x86_64.rpm
多文件:文件中的代码之间,很可能存在跨文件依赖关系
C、C++:make 项目管理器
configure脚本 --> Makefile.in --> Makefile
java: maven
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 install或apt-get upgrade命令的时 候,就会将这个文件夹内的数据和客户端计算机内的DEB数据库比对,知道哪些DEB已 安装、未安装或是可以升级的.
dpkg -i package.deb 安装包
dpkg -r package 删除包,不建议,不自动卸载依赖于它的包
dpkg -P package 删除包(包括配置文件)
dpkg -l 列出当前已安装的包,类似rpm -qa
dpkg -l package 显示该包的简要说明,类似rpm –qi
dpkg -L package 列出该包中所包含的文件,类似rpm –ql
dpkg -S 搜索包含pattern的包,类似rpm –qf
dpkg -s package 列出该包的状态,包括详细信息,类似rpm –qi
dpkg --configure package 配置包,-a 使用,配置所有没有配置的软件包
dpkg -c package.deb 列出 deb 包的内容,
类似rpm –qpl dpkg --unpack package.deb 解开 deb 包的内容
apt install 安装软件包
apt remove 移除软件包
apt purge 移除软件包及配置文件
apt update 刷新存储库索引
apt upgrade 升级所有可升级的软件包
apt autoremove 自动删除不需要的包
apt full-upgrade 在升级软件包时自动处理依赖关系
apt search 搜索应用程序
apt show 显示安装细节
apt list 列出包含条件的包(已安装,可升级等)
apt edit-sources 编辑源列表
APT包索引来自/etc/apt/sources.list文件和/etc/apt/sources.list.d目录中定义 的存储库的可用包的数据库。要使用存储库中所做的最新更改来更新本地程序 包索引
apt命令操作(如安装和删除软件包)记录在/var/log/dpkg.log日志文件中