軟件運行環境:
API:Application Programming Interface
POSIX :Portable OS
程序源代碼 –> 預處理 –> 編譯 –> 匯編 –> 鏈接
靜態編譯:
共享編譯:.so
ABI:Application Binary Interface
Windows 與Linux 不兼容
ELF(Executable and Linkable Format)
PE(Portable Executable)
庫級別的虛擬化:
Linux: WINE
Windows: Cywin
包管理器:
二進制應用程序的組成部分:
二進制文件、庫文件、配置文件、幫助文件
程序包管理器:
debian :deb 文件, dpkg 包管理器
redhat: rpm 文件, rpm 包管理器
rpm: Redhat Package Manager
RPM Package Manager
包命名:
源代碼:name-VERSION.tar.gz|bz2|xz
VERSION: major.minor.release
rpm包命名方式:
name-VERSION-release.arch.rpm
例:bash-4.2.46-19.el7.x86_64.rpm
VERSION: major.minor.release
release:release.OS
常見的arch:
x86: i386, i486, i586, i686
x86_64: x64, x86_64, amd64
powerpc: ppc
跟平臺無關:noarch
拆包:主包和支包
主包:Application-VERSION-ARCH.rpm:
支包:
開發子包:Application-devel-VERSION-ARCH.rpm
庫文件子包:Application-libs-VERSION-ARHC.rpm
其它子包:Application-utils-VERSION-ARHC.rpm
依賴關系:包之間可能存在依賴關系,甚至循環依賴
X,Y,Z :3個包
安裝X————>依賴與Y,Z
安裝Y————>依賴與A,B,C
安裝C————>依賴與Y
解決依賴關系包管理工具:
yum:rpm包管理器的前端工具
apt-get:deb包管理器前端工具
zypper: suse上的rpm前端管理工具
dnf: Fedora 18+ rpm包管理器前端管理工具
庫文件:
查看二進制程序所依賴的庫文件:
ldd /PATH/TO/BINARY_FILE
管理及查看本機裝載的庫文件:
ldconfig
/sbin/ldconfig -p:顯示本機已經緩存的所有可用庫文件名及文件路徑映射關系
配置文件:/etc/ld.so.conf, /etc/ld.so.conf.d/*.conf
緩存文件:/etc/ld.so.cache
程序包管理器:
功能:將編譯好的應用程序的各組成文件打包一個或幾個程序包文件,從而方便快捷地實現程序包的安裝、卸載、查詢、升級和校驗等管理操作
1、包文件組成 (每個程序包都單獨實現)
RPM包內的文件
RPM的元數據,如名稱,版本,依賴性,描述等
安裝或卸載時運行的腳本
2、數據庫(公共)
程序包名稱及版本
依賴關系
功能說明
包安裝后生成的各文件路徑及校驗碼信息
管理程序包的方式:
使用包管理器:rpm
使用前端工具:yum, dnf
獲取程序包的途徑:
(1)系統發版的光盤或官方的服務器;
CentOS鏡像:
https://www.centos.org/download/
http://mirrors.aliyun.com
http://mirrors.sohu.com
http://mirrors.163.com
(2)項目官方站點
www.apache.com
www.zabbix.com
(3)第三方組織:
(a)Fedora-EPEL
Extra Packages for Enterprise Linux
(b)Rpmforge:RHEL 推薦,包很全
(c)搜索引擎:
http://pkgs.org
http://rpmfind.net
http://rpm.pbone.net
https://sourceforge.net
(4)自己制作
注意:網絡上獲取的包檢查其合法性:來源合法性,完整性
CentOS系統上使用rpm 命令管理程序包:
安裝、卸載、升級、查詢、校驗、數據庫維護
安裝:
rpm {-i|–install} [install-options] PACKAGE_FILE…
rpm -ivh PACKAGE_FILE …
GENERAL OPTINONS:
-v:verbose
-vv:
[install-options]:
-h:以#顯示程序包管理執行進度
– -test:測試安裝,但不真正執行安裝;dry run 模式
– -nodeps:忽略依賴關系
– -replacepkgs | replacefiles:重新安裝,前1個選擇是有重復直接覆蓋包,后1個選項是有重復的文件才覆蓋
– -nosignature:不檢查來源合法性
– -nodigest:不檢查包完整性
注意rpm包可以自帶腳本:共4類:
– -noscipts:不執行程序包腳本片斷
preinstall:安裝過程前運行的腳本;%pre,- – nopre
postinstall:安裝過程完成后運行的腳本;%post,- – nopost
preuninstall:安裝卸載前運行的腳本;%preun,- – nopreun
postuninstarll:安裝卸載完成后運行的腳本:%postun,- – nopostun
[root@CentOS6 bin]# rpm -ivh /media/cdrom/Packages/zsh-4.3.11-4.el6.centos.2.x86_64.rpm Preparing... ########################################### [100%] 1:zsh ########################################### [100%]
升級:
rpm {-U|–upgrade} [install-options] PACKAGE_FILE …
rpm {-F|–freshen} [install-options] PACKAGE_FILE …
-U:安裝有舊版程序包,則“升級”,如果不存在舊版程序包,則“安裝”
-F:安裝有舊版程序包,則“升級”,如果不存在舊版程序包,則什么都不做
rpm -Uvh PACKAGE_FILE …
rpm -Fvh PACKAGE_FILE …
[install-options]:
選項信息同-i(安裝)
新選項:
–oldpackage:降級
–force:強行升級
注意:
(1)不要對內核做升級操作;Linux 支持多內核版本并存,因此,可以直接安裝新版本內核
(2)如果原程序包的配置文件安裝后曾被修改,升級時,新版本的提供的同一個配置文件并不會直接覆蓋老版本的配置文件,而把新版本的文件重命名(FILENAME.rpmnew)
查詢:
rpm {-q|–query} [select-options] [query-options] [select-options]
[select-options]:
PACKAGE_NAME:查詢指定的程序包是否已經安裝,及其版本
-a:所有包
-f:查看指定的文件由哪個程序包安裝生成
-p rpmfile:針對尚未安裝的程序包文件做查詢操作;
– -whatprovides CAPABILITY :查詢指定的CAPABILITY由哪個包所提供
– -whatrequires CAPABILITY :查詢指定的CAPABILITY被哪個包所依賴
如何恢復數據包中某個文件(不是使用重新安裝的方式):
rpm2cpio 包文件 | cpio –itv
預覽包內文件
rpm2cpio 包文件 | cpio –id “*.conf”
把包內某個或多個文件單獨拷貝到當前目錄下
[root@CentOS6 bin]# rpm -ql tree //查詢tree包的文件 /usr/bin/tree /usr/share/doc/tree-1.5.3 /usr/share/doc/tree-1.5.3/LICENSE /usr/share/doc/tree-1.5.3/README /usr/share/man/man1/tree.1.gz [root@CentOS6 bin]# rm /usr/bin/tree //刪除tree包的一個配置文件 rm: remove regular file `/usr/bin/tree'? y [root@CentOS6 bin]# rpm -ql tree /usr/bin/tree /usr/share/doc/tree-1.5.3 /usr/share/doc/tree-1.5.3/LICENSE /usr/share/doc/tree-1.5.3/README /usr/share/man/man1/tree.1.gz [root@CentOS6 bin]# tree //命令已經無法使用了,但這個時候我又不想安裝這個包,只想安裝這個文件怎么辦? -bash: tree: command not found [root@CentOS6 bin]# rpm2cpio /media/cdrom/Packages/tree-1.5.3-3.el6.x86_64.rpm | cpio -itv //查詢包內文件 -rwxr-xr-x 1 root root 41136 Jan 14 2015 ./usr/bin/tree drwxr-xr-x 2 root root 0 Jan 14 2015 ./usr/share/doc/tree-1.5.3 -rw-r--r-- 1 root root 18009 Aug 13 2004 ./usr/share/doc/tree-1.5.3/LICENSE -rw-r--r-- 1 root root 4167 Oct 20 2009 ./usr/share/doc/tree-1.5.3/README -rw-r--r-- 1 root root 3375 Jan 14 2015 ./usr/share/man/man1/tree.1.gz 132 blocks [root@CentOS6 bin]# rpm2cpio /media/cdrom/Packages/tree-1.5.3-3.el6.x86_64.rpm | cpio -id ./usr/bin/tree //把包內的tree文件提出到當前目錄 132 blocks [root@CentOS6 bin]# ls usr [root@CentOS6 bin]# ll ./usr/bin/tree -rwxr-xr-x. 1 root root 41136 Aug 19 16:47 ./usr/bin/tree [root@CentOS6 bin]# cp ./usr/bin/tree /usr/bin/ //拷貝二進制文件到/usr/bin/目錄下去 [root@CentOS6 bin]# tree //tree命令可以使用了 . └── usr └── bin └── tree 2 directories, 1 file
[query-options]:
–changelog:查詢rpm包的changelog
-c,-configfiles:查詢程序的配置文件
-d,-docfiles:查詢程序的文檔
-i,information:程序包相關信息,版本號,大小,所屬的包組等
-l,- -list:查看指定的程序包安裝后生成的所有文件
– -scripts:程序包自帶的腳本片斷
-R:查詢指定的程序包所依賴的CAPABILITY
– -provides:列出指定程序包所提供的CAPABILITY
查詢用法:
-qa,-qi PACKAGE, -qf FILE, -qc PACKAGE, -ql PACKAGE, -qd PACKAGE,-qpi PACKAGE_FILE, -qpl PACKAGE_FILE, …
[root@CentOS6 bin]# rpm -qa | less usermode-1.102-3.el6.x86_64 gstreamer-tools-0.10.29-1.el6.x86_64 printer-filters-1.1-4.1.el6.noarch python-markupsafe-0.9.2-4.el6.x86_64 yajl-1.0.7-3.el6.x86_64 xml-common-0.6.3-33.el6.noarch kdepimlibs-4.3.4-4.el6.x86_64 portreserve-0.0.4-11.el6.x86_64 control-center-extra-2.28.1-40.el6.x86_64 python-krbV-1.0.90-3.el6.x86_64 xen-licenses-4.4.2-4.el6.x86_64 tzdata-2016c-1.el6.noarch kpartx-0.4.9-93.el6.x86_64 m17n-db-punjabi-1.5.5-1.1.el6.noarch ......[root@CentOS6 bin]# rpm -qi tree Name : tree Relocations: (not relocatable) Version : 1.5.3 Vendor: CentOS Release : 3.el6 Build Date: Wed 14 Jan 2015 08:21:02 PM CST Install Date: Mon 25 Jul 2016 05:29:20 PM CST Build Host: c6b9.bsys.dev.centos.org Group : Applications/File Source RPM: tree-1.5.3-3.el6.src.rpm Size : 66687 License: GPLv2+ Signature : RSA/SHA1, Wed 14 Jan 2015 10:12:21 PM CST, Key ID 0946fca2c105b9de Packager : CentOS BuildSystem <http://bugs.centos.org> URL : http://mama.indstate.edu/users/ice/tree/ Summary : File system tree viewer Description : The tree utility recursively displays the contents of directories in a tree-like format. Tree is basically a UNIX port of the DOS tree utility.[root@CentOS6 bin]# rpm -qf /etc/passwd setup-2.8.14-20.el6_4.1.noarch[root@CentOS6 bin]# rpm -qc bash /etc/skel/.bash_logout /etc/skel/.bash_profile /etc/skel/.bashrc[root@CentOS6 bin]# rpm -ql tree /usr/bin/tree /usr/share/doc/tree-1.5.3 /usr/share/doc/tree-1.5.3/LICENSE /usr/share/doc/tree-1.5.3/README /usr/share/man/man1/tree.1.gz[root@CentOS6 bin]# rpm -qd tree /usr/share/doc/tree-1.5.3/LICENSE /usr/share/doc/tree-1.5.3/README /usr/share/man/man1/tree.1.gz[root@CentOS6 bin]# rpm -qpc /media/cdrom/Packages/zsh-4.3.11-4.el6.centos.2.x86_64.rpm /etc/skel/.zshrc /etc/zlogin /etc/zlogout /etc/zprofile /etc/zshenv /etc/zshrc
卸載:
rpm {-e|–erase} [–allmatches] [–nodeps] [–noscripts] [–notriggers] [–test] PACKAGE_NAME …
– -allmatches:卸載所有匹配指定名稱的程序包的各版本
– -nodeps:忽略依賴性卸載
– -test;測試卸載,是否有依賴性,不是真的卸載
[root@CentOS6 bin]# rpm -e zsh [root@CentOS6 bin]# rpm -qa | grep zsh //已經查詢不到包了,說明被卸載了
校驗:
rpm {-V|–verify} [select-options] [verify-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
[root@CentOS6 bin]# rpm -ql tree /usr/bin/tree /usr/share/doc/tree-1.5.3 /usr/share/doc/tree-1.5.3/LICENSE /usr/share/doc/tree-1.5.3/README /usr/share/man/man1/tree.1.gz [root@CentOS6 bin]# echo xx >> /usr/share/man/man1/tree.1.gz [root@CentOS6 bin]# rpm -V tree //請對照理解 S 5 T 的信息 .......T. /usr/bin/tree S.5....T. d /usr/share/man/man1/tree.1.gz
包來源合法性驗正及完整性驗正:
完整性驗正:SHA256
來源合法性驗正:RSA
公鑰加密:
對稱加密:加密、解密使用同一密鑰;
非對稱加密:密鑰是成對兒的
public key:公鑰,公開所有人
secret key:私鑰,不能公開
不導入公鑰如何檢查包簽名和完整性:
rpm -K|checksig rpmfile 檢查包的完整性和簽名
如何導入所需要公鑰:
rpm –import / etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
CentOS 7 發行版光盤提供: RPM-GPG-KEY-CentOS-7
rpm -qa gpg-pubkey*
[root@CentOS6 ~]# rpm -K /media/cdrom/Packages/zsh-4.3.11-4.el6.centos.2.x86_64.rpm /media/cdrom/Packages/zsh-4.3.11-4.el6.centos.2.x86_64.rpm: rsa sha1 (md5) pgp md5 OK
數據庫重建:
rpm管理器數據庫路徑:/var/lib/rpm
查詢操作通過此處的數據庫進行
獲取幫助:(重建數據庫)
centos6:man rpm
centos7:man rpmdb
rpm {–initdb|–rebuilddb}
–initdb初始化:如果事先不存在數據庫,則新建之,否則,不執行任何操作
–rebuilddb :重建,無論當前存在與否,直接重新創建數據庫
[root@CentOS6 bin]# cd /var/lib/rpm [root@CentOS6 rpm]# pwd /var/lib/rpm [root@CentOS6 rpm]# ls //rpm的數據庫 Basenames __db.002 Dirnames Installtid Packages Pubkeys Sha1header Conflictname __db.003 Filedigests Name Providename Requirename Sigmd5 __db.001 __db.004 Group Obsoletename Provideversion Requireversion Triggername [root@CentOS6 rpm]# rpm -q bash //可以查詢包信息 bash-4.1.2-40.el6.x86_64 [root@CentOS6 rpm]# rm -f * //刪除數據庫內所有文件 [root@CentOS6 rpm]# ls [root@CentOS6 rpm]# rpm -q bash //無法查詢包信息 package bash is not installed [root@CentOS6 rpm]# rpm --initdb //新間數據庫 [root@CentOS6 rpm]# ls __db.001 __db.002 __db.003 __db.004 Name Packages [root@CentOS6 rpm]# rpm -q bash //重新建立了數據庫依舊無法查詢,上述操作請慎重 package bash is not installed
·
原創文章,作者:megedugao,如若轉載,請注明出處:http://www.www58058.com/37671