一、程式設計語言與作業系統:
應用程式
____________________
|lib call | |
|-------------------|
|system call |
|———————————----————|
|各種硬體 |
————————————————————|
API:application program interface
ABI:application binary interface
Api應用層級相容,未必abi層次也相容,有些程式對二進制的識别格式是不相同的
UNix-like:ELF格式的程式
windows:exe,msi
linux:wine模拟windows庫
windows:Cywin虛拟出linux運作環境
系統級開發:C/C++:httpd,vsftpd,nginx
go程式設計語言:新貴
C/C++程式設計依賴于系統上的标準庫
應用級開發:java/Python/perl/ruby/php
java:hadoop,hbase,(jvm)運作環境
Python:openstack 雲管理平台,(pvm)
perl:(perl)perl的解釋器
ruby:(ruby)解釋器/虛拟機{運作環境}
php:(php)
//一般解釋器或者虛拟機{jvm,pvm} 使用C/C++編寫
php:世界上最好的語言
c/C++程式格式:
源代碼:文本格式的程式代碼
編譯開發環境:編譯器、頭檔案、開發庫
二進制格式:文本格式的代碼-->編譯器-->二進制格式(二進制程式、庫檔案、配置檔案)
java/python
源代碼:編譯成能夠在其虛拟機(jvm/pvm)上運作的格式
開發環境:編譯器、開發庫
二進制:
項目建構工具://不再需要考慮程式編譯主次關系,由項目建構關系負責,項目建構工具借助于配置檔案實作
c/c++:make
java:maven
程式包管理器:
源代碼 --> 目标二進制格式 -->組織成為一個或有限幾個“包”檔案;
安裝、更新、解除安裝、查詢、校驗等操作
程式包管理器:
debian:kali,ubuntu //dpt,dpkg , ".deb"
redhat:rhel,centos,fedora //redhat package manager,rpm , ".rpm" //perl-C現在使用的是C語言寫的
//rpm:rpm is package manager;成為标準
slckware:S.u.S.E: //rpm,suse的rpm和rhel的是不相容的,suse為rpm開發了一個重要的庫,後期被rhel收納
//rpm:".rpm" 指令rpm
Gentoo: //采用了freebsd的機制,ports的包機制
Archlinux //輕量級,
源代碼:name-VERSION.tar.[xz,gz,bz2]
VERSION:major-minor-release
major:重大改變
minor:局部改變
release:修複bug,小串代碼改變
rpm包指令格式:
vsftpd-3.0.2-10.el7.x86_64.rpm
name-VERSION-release.arch.rpm
release:是制作rpm包的次數
VERSION.release是源代碼的release
arch:architecture:i386,x64(amd64),ppc(powerpc),noarch(通用平台)
i386:支援較老版本的32bit cpu
i686:支援較新版本的32bit cpu
拆包:
redis-3.0.2.tar.gz--> redis.3.0.2-1.el7.x86_64
//把一個包的多種功能,拆成多個部分,按需組織rpm包
//主包和分支包
主包:name-VERSION-release.arch.rpm
支包:name-function-VERSION-release.arch.rpm
function:devel,utils(工具程式),libs,plugins(插件)
依賴關系:每個程式包的功能都很簡單,包之間存在很複雜的依賴關系
x,y,z
x-->y,z
y-->a,c,b
c-->Y
前端工具:自動解決依賴關系
yum:rpm包管理器的前端工具
apt-get(apt-cache):deb包
zypper:suse上的rpm包管理器
dnf:Fedora 22+ 系統上的rpm包管理器的前端工具
程式包管理:
功能:将編譯好的應用程式的各組成檔案打包成一個或幾個程式封包件,進而更友善地實作程式包的安裝、更新、解除安裝和查詢等操作
1.程式包的組成清單(每個程式包單獨實作)
檔案清單
安裝或解除安裝時運作的腳本
2.資料庫(公共)
程式包的名稱和版本
依賴關系
功能說明
安裝生成的各檔案路徑及校驗碼資訊
/var/lib/rpm/ rpm資料庫所在
二、擷取程式包的途徑:
1.系統發行版的CD光牒或者官方的檔案伺服器
http://mirrors.aliyun.com
http://mirrors.sohu.com
http://mirrors.163.com
2.項目官方站點
apache官網:www.apache.org
zabbix:www.zabbix.com
3.第三方組織
(a)EPEL:
mirrors.aliyun.com/epel/7/x86_64
(b)搜尋引擎
pkgs.org
rpmfind.net
rpm.pbone.net
4.自己動手,豐衣足食
建議:校驗,檢查其合法性
來源合法性:
程式包的完整性:
三、Centos上rpm指令管理程式包
(1)安裝
安裝,更新,解除安裝,查詢和校驗,資料庫維護
rpm {-i|--install} [install-options] PACKAGE_FILE ...
-i :install
-v verbose通用選項,顯示過程
-vv 更詳細
-h 以hash輸出進度條
--test 僅僅是檢查一下,測試不安裝
--nodeps //忽略依賴關系,no dependce
--replacepkgs //替代安裝
--noscripts //有些程式包安裝過程中,可能需要運作一段自帶腳本,
rpm可以自帶腳本:
四類:
preinstall:安裝之前,%pre
postinstall:安裝完成之後,%post
preuninstall:解除安裝開始前,%preun
postuninstall :解除安裝完成之後,%postun
--noscripts
--nopre
--nopost
--nopreun
--nopostun
--nosignature //來源合法性,不檢查包簽名資訊
--nodigest //不檢查包完整幸資訊,頭檔案摘要
-U :update,-F --freshen//使更新
-e :--erase
-q:--query
-l :list生成檔案
-V:--verify校驗
資料庫維護:
--builddb,--initdb
(2)更新
-U update
Uvh /Fvh
rpm {-U|--upgrade} [install-options] PACKAGE_FILE ... //和安裝一樣
-U 更新或者安裝,有沒有老版本,都會安裝
-F 更新,有老版本才會安裝
--oldpackage :降級安裝老的程式包,不相容
--force:強制更新
其他和rpm -ivh 一樣
注意:
(1)不要對核心做更新操作,更新核心需要重新開機系統
//linux支援多核心版本并存,是以,直接安裝新版本核心即可
(2)如果某源程式包的配置檔案,安裝後曾被修改過,更新時,新版本的程式提供的同一個配置那檔案不會覆寫原有的
配置檔案,而是把新版本的配置檔案,重命名後(filename.rpmnew)後,提供
(3)解除安裝
-e
--allmatches //假如存在多版本的話,多版本一并删除
--nodeps //忽略依賴關系
--test //dry run 僅僅測試
--noscripts //不執行腳本
rpm -e zsh //pack_name zsh即可,資料庫中有檔案儲存
rpm -ivh 檔案名
(4)查詢
rpm {-q|--query} [select-options] [query-options]
-q zsh //查詢指定包zsh是否安裝
select-options:
-a,--all 不加選項,查詢所有已經安裝的包
rpm -qa |grep zsh
-f /etc/fstab 查詢檔案的安裝包
-g,--group 組名//查詢指定包組中包含的包
-p,--packaeg package_file:實作檢視未安裝包的,結合query-optionss實作
rpm -qpl zsh-5.0.2-14.el7.x86_64.rpm //查詢未安裝程式包的安裝能夠生成檔案
--wahtprovice CAPABILITY//查詢提供某種能力的包
rpm -q --whatprovide 'config(bash)'
--whatrequires CAPABLITY //查詢指定的CAPABILITY被哪個程式包所依賴
query-options
--changelog //查詢rpm包的changelog,不是源碼的
rpm -q --changelog zsh //檢視zsh的改進日志
-l,--list //程式包安裝生成的所有檔案清單
rpm -ql zsh
-i info,查詢程式包相關資訊,版本号,大小,所屬的包組,等
rpm —qi bash
-c ,--configfiles:查詢指定的程式包的配置檔案
rpm -qc bash
-d,--docfile :查詢指定的程式包的幫助文檔
rpm -qd bash
--provides:列出指定的程式包提供的CAPABILITY
rpm -q --provides bash //bash提供的
rpm -q --whatprovides 'config(bash)'
-R requires//查詢指定程式包的所依賴的程式包
rpm -qR bash
--scripts //查詢腳本
rpm -q --scripts bash
rpm -qp --scripts zsh-5.0.2-14.el7.x86_64.rpm
ql,qf,qc,qi,qd //qf文檔的産生源
(5)校驗
rpm {-V|--verify} [select-options] [verify-options]
-V //rpm -V zsh //安裝完成後,校驗
<code> </code><code>S file Size differs</code>
<code> </code><code>M Mode differs (includes permissions and file type)</code>
<code> </code><code>5 digest (formerly MD5 sum) differs</code>
<code> </code><code>D Device major/minor number mismatch</code>
<code> </code><code>L readLink(2) path mismatch</code>
<code> </code><code>U User ownership differs</code>
<code> </code><code>G Group ownership differs</code>
<code> </code><code>T mTime differs</code>
<code> </code><code>P caPabilities differ</code>
rpm -ql zsh //随意修改其中一個檔案
rpm -V zsh //就能看到效果
select-options:和查詢的select-options一樣
-a,-f,-g,-p
verify-options:
--nodeps 不校驗依賴
--nodigest 不校驗標頭,
--noscripts 不檢查腳本
--nofiles 不檢查
--nosignature 不檢查標頭簽名資訊
//預設檢查所有屬性
rpm -V --nofiles zsh
(6)包來源合法性驗證和完整性驗證
來源合法性驗證:
數字簽名:非對稱加密:一個公鑰,一個私鑰
包的制作者,
1.首先使用單項加密,計算出包的特征碼,定長輸出
2.然後再用自己的私鑰加密特征碼,這叫數字簽名 ,
3.把加密後的特征碼附加到包後
//隻要拿到公鑰,就能解密
中間者:能夠解密特征碼,因為能拿到對方公鑰,但是不能再次加密,因為沒有作者的私鑰
//使用者拿到作者的公鑰,進行解密特征碼,解密成功,則認為來源合法
//我用同樣的方法,進行單項加密計算特征碼,一樣則證明包内容沒有修改過//完整性
如何拿到對方的公鑰:
1.從網上下載下傳,不可靠
2.網際網路上是使用CA來實作,可靠手段拿到對方公鑰
rpm --import /mnt/RPM-GPG-KEY-CentOS7 //導入公鑰
/etc/pki/rpm-gpg/ 導入到此地
對于CentOS發行版:rpm --import
rpm -ivh zsh-***** //自動進行校驗操作
rpm -K zsh-5.03..... //手動驗證
驗證:
安裝此組織簽名的程式時,會自動執行驗證
手動驗證:rpm -K PACKAGE_FILE
1
數字簽名:保證來源合法性和資料完整性
(7)資料庫重建
rpm管理資料庫路徑:/var/lib/rpm/
查詢操作:就是基于該資料庫查詢
Centos6:man rpm //rpm --initdb|--rebuilddb
Centos7:man rpmdb
rpmdb
--initdb 初始化db,目前無任何資料庫時建立一個新的,目前有,不執行任何操作
--rebuildb 重建db,重新建構,通過讀取目前系統上所有已經安裝過的程式包進行重新建立
--dbpath 指定db路徑
rpmdb --initdb --dbpath=/tmp/rpm
四、rpm指令小結
linux程式包管理器,rpm包管理器
<code> </code><code>安裝:rpm -ivh ,--nodeps,--replacepkgs</code>
<code> </code><code>解除安裝:-e,--nodeps</code>
<code> </code><code>更新:-U|-F vh </code><code>//F隻用于更新,--nodeps,--oldpackage</code>
<code> </code><code>查詢:-q,-a,f,i,qd,qc,--script,changelog,provides/whatprovides,requires/whatrequires</code>
<code> </code><code>校驗:-V,</code>
<code> </code><code>驗證合法性:--import,-K手動驗證,--nodigest,--nosignature</code>
<code> </code><code>資料庫重建:rpmdb --initdb --rebuilddb</code>
本文轉自MT_IT51CTO部落格,原文連結:http://blog.51cto.com/hmtk520/1950170,如需轉載請自行聯系原作者