軟件運行環境
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
linux 軟件的組成
二進制程序 共享庫--給別應用程序用的 共享庫,把程序的某些功能做成庫。 配置文件 幫助文件 /etc /bin /lib /usr/share/man /usr/local/ /usr/ 也有類似的層級結構
包管理器:
二進制應用程序的組成部分: 二進制文件、庫文件、配置文件、幫助文件 程序包管理器: debian:deb文件, dpkg包管理器 redhat: rpm文件, rpm包管理器 rpm: RedhatPackage 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, amd64powerpc: ppc 跟平臺無關:noarch
包命名和工具
包:分類和拆包 Application-VERSION-ARCH.rpm: 主包 Application-devel-VERSION-ARCH.rpm開發子包 Application-utils-VERSION-ARHC.rpm其它子包 Application-libs-VERSION-ARHC.rpm其它子包 包名+版本號+發行號+平臺 注安裝過程中不要裝錯rpm包。一般情況都是需要裝主包的,其他包看需要。 包之間:可能存在依賴關系,甚至循環依賴 安裝軟件的時候會有提示依賴關系,但是僅提示該軟件的依賴關系,可能所依賴的軟件包還有依賴關系。 解決依賴包管理工具: yum:rpm包管理器的前端工具 apt-get:deb包管理器前端工具 zypper: suse上的rpm前端管理工具 dnf: Fedora 18+ rpm包管理器前端管理工具,未來的包管理工具。
庫文件
查看二進制程序所依賴的庫文件: ldd /PATH/TO/BINARY_FILE [root@localhost ~]# ldd /bin/cat linux-vdso.so.1 => (0x00007ffc0f7e8000) libc.so.6 => /lib64/libc.so.6 (0x00007f2fbfc85000) /lib64/ld-linux-x86-64.so.2 (0x00007f2fc005b000) 管理及查看本機裝載的庫文件: ldconfig /sbin/ldconfig -p: 顯示本機已經緩存的所有可用庫文件名及文件路徑映射關系 配置文件:有時候需要編寫配置文件,使系統識別第三方軟件帶的庫文件。 /etc/ld.so.conf #主配置文件,不用管 /etc/ld.so.conf.d/*.conf #如果自己安裝的軟件,自己帶庫文件。需要用戶自定編寫庫配置文件。讓操作系統識別。 自己創建一個.conf結尾的文件。只需要把放庫文件的路徑(目錄)寫進去,再執行 ldconfig 使系統重新讀取配置文件。 ldconfig -p 查看系統識別到的庫文件。 緩存文件:/etc/ld.so.cache
程序包管理器:
功能:將編譯好的應用程序的各組成文件打包一個或幾個程序包文件,從而方便快捷地實現程序包的安裝、卸載、查詢、升級和校驗、數據庫的重建等管理操作 1、包文件組成(每個包獨有) RPM包內的文件 RPM的元數據,如名稱,版本,依賴性,描述等 安裝或卸載時運行的腳本 2、數據庫(公共)--系統生成的 /var/lib/rpm 程序包名稱及版本 依賴關系 功能說明 包安裝后生成的各文件路徑及校驗碼信息 rpm --intdb | --rebuiddb 初始化或重建數據庫 該數據庫非常重要需要備份,如損壞的話即使重建也是空的。
程序包的來源
管理程序包的方式: 使用包管理器:rpm 使用前端工具:yum, dnf 獲取程序包的途徑: (1) 系統發版的光盤或官方的服務器; CentOS鏡像: https://www.centos.org/download/ http://mirrors.aliyun.com http://mirrors.sohu.com http://mirrors.163.com (2) 項目官方站點 http://httpd.apache.org/ (3) 第三方組織: Fedora-EPEL: Extra Packages for Enterprise Linux 以上方式推薦使用。除非都找不到,而且非關鍵性業務的可以使用如下方式 Rpmforge:RHEL推薦,包很全 搜索引擎:rpm包搜索引擎,不是百度也不谷歌。 http://pkgs.org http://rpmfind.net http://rpm.pbone.net https://sourceforge.net/ (4) 自己制作 注意:檢查其合法性:來源合法性,程序包的完整性 軟件使用一定不要用盜版,包括管理軟件
CentOS系統上使用rpm命令管理程序包:
安裝、卸載、升級、查詢、校驗、數據庫維護 安裝: rpm {-i|--install} [install-options] PACKAGE_FILE… -v: verbose -vv: 更詳細的信息 -h: 以#顯示程序包管理執行進度 rpm -ivh PACKAGE_FILE ... [install-options] --test: 測試安裝,但不真正執行安裝;dry run模式 --nodeps:忽略依賴關系 --replacepkgs 覆蓋安裝(重新安裝包名,版本號都一樣的) 原來的配置文件 會改名。不會覆蓋。 --replacefiles 安裝程序生成的文件可能和的軟件的文件沖突,安裝的位置和名稱都一樣,rpm會有提示,不能進行安裝,這事需要使用replacefiles --nosignature: 不檢查來源合法性 --nodigest:不檢查包完整性 --noscipts:不執行程序包腳本片斷 %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:降級 與i配合使用。 rpm -ivh --oldpackgage PACKAGE-FILE --force: 可與 安裝 -i 或 升級 -U -F配合使用。 升級注意項 注意: (1) 不要對內核做升級操作;Linux支持多內核版本并存,因此,對直接安裝新版本內核 (2) 如果原程序包的配置文件安裝后曾被修改,升級時,新版本的提供的同一個配置文件并不會直接覆蓋老版本的配置文件,而把新版本的文件重命名(FILENAME.rpmnew)后保留
包查詢 -q
rpm {-q|--query} [select-options] [query-options] [select-options] -a: 所有包 -f: 查看指定的文件由哪個程序包安裝生成 系統上已經安裝生成的文件,是由那個軟件安裝包生成的 -p rpmfile:針對尚未安裝的程序包文件做查詢操作; --whatprovidesCAPABILITY:查詢指定的CAPABILITY由哪個包所提供 --whatrequiresCAPABILITY:查詢指定的CAPABILITY被哪個包所依賴 rpm2cpio 包文件|cpio –itv預覽包內文件 [root@localhost Packages]# rpm2cpio tree-1.6.0-10.el7.x86_64.rpm |cpio -itv -rwxr-xr-x 1 root root 62768 Jun 10 2014 ./usr/bin/tree drwxr-xr-x 2 root root 0 Jun 10 2014 ./usr/share/doc/tree-1.6.0 -rw-r--r-- 1 root root 18009 Aug 13 2004 ./usr/share/doc/tree-1.6.0/LICENSE -rw-r--r-- 1 root root 4628 Jun 24 2011 ./usr/share/doc/tree-1.6.0/README -rw-r--r-- 1 root root 4100 Jun 24 2011 ./usr/share/man/man1/tree.1.gz 177 blocks rpm2cpio 包文件 | cpio –id “*.conf”釋放包內文件 [root@localhost ~]# rpm2cpio tree-1.6.0-10.el7.x86_64.rpm |cpio -id ./usr/bin/tree 177 blocks [root@localhost ~]# tree /root /root ├── anaconda-ks.cfg ├── fenge.sh ├── old ├── tree-1.6.0-10.el7.x86_64.rpm └── usr └── bin └── tree 可能會出現的一個問題是權限屬主或屬組的問題??赡苄枰薷?。
3 directories, 4 files
[query-options] --changelog:查詢rpm包的changelog -c: 查詢程序的配置文件 -d: 查詢程序的文檔 -i: information -l: 查看指定的程序包安裝后生成的所有文件;列表 --scripts:程序包自帶的腳本片斷 -R: 查詢指定的程序包所依賴的CAPABILITY; ##查詢軟件都依賴那些文件或程序 --provides: 列出指定程序包所提供的CAPABILITY;##列出該軟件都能提供哪些能力。
查詢用法:
-qi PACKAGE, -qfFILE, -qc PACKAGE, -qlPACKAGE, -qdPACKAGE -qpi PACKAGE_FILE, -qpl PACKAGE_FILE, ... -qa
卸載:
rpm {-e|--erase} [--allmatches] [--nodeps] [--noscripts] [--notriggers] [--test] PACKAGE_NAME ... --allmatches 安裝了多個版本的同名軟件,全部卸載 --notriggers 觸發器,多是腳本 --test 測試不真實卸載 ##卸載時,如有該程序為其他程序所依賴,不能卸載,忽略依賴關系強行卸載,可以。但是會影響到其他軟件的運行。
安裝過的軟件–校驗
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 mTimediffers P capabilities differ rpm -V PACKAGEFILE ##安裝過的軟件的包名不帶版本號例如 tree rpm -Va 檢查系統所有軟件的完整性。比較耗時間和系統資源。
包來源合法性驗正及完整性驗正:
完整性驗正:SHA256 來源合法性驗正:RSA 公鑰加密: 對稱加密:加密、解密使用同一密鑰; 非對稱加密:密鑰是成對兒的 public key: 公鑰,公開所有人 secret key: 私鑰, 不能公開 導入所需要公鑰: rpm -K|checksigrpmfile檢查包的完整性和簽名 rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 CentOS 7發行版光盤提供:RPM-GPG-KEY-CentOS-7 rpm -qa gpg-pubkey* 查詢安裝的key
常用選項
rpm數據庫
數據庫重建: /var/lib/rpm rpm {--initdb|--rebuilddb} initdb: 初始化 如果事先不存在數據庫,則新建之 否則,不執行任何操作 rebuilddb:重建 無論當前存在與否,直接重新創建數據庫
rpm常用用法:
安裝 [root@yangyouwei ~]# rpm -ivh /media/CentOS6.8Final/Packages/tree-1.5.3-3.el6.x8664.rpm warning: /media/CentOS6.8Final/Packages/tree-1.5.3-3.el6.x8664.rpm: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY Preparing… ########################################### [100%] 1:tree ########################################### [100%] 升級
rpm -uvh FILEPACKAGE... rpm -fvh FILEPACKAGE...
卸載
[root@yangyouwei ~]# rpm -e tree
查詢 查詢已經安裝的軟件包。后面跟的是包名 [root@localhost ~]# rpm -q tree #必須是準確的包名 tree-1.6.0-10.el7.x86_64 #已經安裝的軟件的版本
使用正則表達式查詢已經安裝的軟件 [root@localhost ~]# rpm -qa | grep "^tr" #配合grep使用正則表達式查詢 trousers-0.3.13-1.el7.x86_64 traceroute-2.0.19-5.el7.x86_64 tree-1.6.0-10.el7.x86_64 查詢文件系統上的文件是由那個rpm包生成的 [root@yangyouwei ~]# rpm -qf /etc/ssh/ssh_config openssh-clients-5.3p1-117.el6.x86_64 查詢已經安裝的軟件包是由哪些文件構成的。一個列表。后面跟的是包名 [root@yangyouwei ~]# 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 查詢rpm包內都有哪些文件 [root@yangyouwei ~]# rpm -qpl /media/CentOS_6.8_Final/Packages/tree-1.5.3-3.el6.x86_64.rpm /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
校驗 導入公鑰 rpm –import /media/CentOS6.8Final/RPM-GPG-KEY-CentOS-6 查詢安裝的公鑰,用于來源和完整性校驗
rpm包校驗 [root@yangyouwei ~]# rpm -K /media/CentOS_6.8_Final/Packages/tree-1.5.3-3.el6.x86_64.rpm /media/CentOS_6.8_Final/Packages/tree-1.5.3-3.el6.x86_64.rpm: rsa sha1 (md5) pgp md5 OK 查詢已經安裝導入的key [root@yangyouwei ~]# rpm -qa gpg-pubkey* gpg-pubkey-c105b9de-4e0fd3a3
原創文章,作者:yyw,如若轉載,請注明出處:http://www.www58058.com/37893