1.程序源代碼 --> 預處理 --> 編譯 --> 彙編 --> 連接--> 可執行程序php
2.二進制程序的組成部分:二進制文件、庫文件、配置文件、幫助文件
查看二進制程序所依賴的庫文件:
ldd /PATH/TO/BINARY_FILE
html
3.包命名規則:前端
源代碼: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
通常,源碼都是打包壓縮過的文件,其一般以「.gz」、「.bz2」、「.xz」結尾,源碼包中包含了源碼,還包含了一些有助於製做二進制rpm的文件;rpm包通常以「rpm」結尾,都是已經編譯完成的,安裝rpm包的過程實際上就是將包中的文件複製到Linux上,有可能還會在複製文件的先後執行一些命令,如建立一個必要的用戶,刪除非必要文件等。node
4.包管理器:shell
5.包的分類與拆包
Application-VERSION-ARCH.rpm: 主包
Application-devel-VERSION-ARCH.rpm 開發子包
Application-utils-VERSION-ARHC.rpm 其它子包
Application-libs-VERSION-ARHC.rpm 其它子包數據庫
注意:包之間可能存在依賴關係,甚至循環關係;vim
解決依賴包管理工具:
yum:rpm包管理器的前端工具
apt-get:deb包管理器前端工具
zypper: suse上的rpm前端管理工具
dnf: Fedora 18+ rpm包管理器前端管理工具centos
6.獲取程序包的途徑:瀏覽器
(1) 系統發版的光盤或官方的服務器;
CentOS鏡像:
https://www.centos.org/download/
http://mirrors.aliyun.com
http://mirrors.sohu.com
http://mirrors.163.com緩存
(2) 項目官方站點
(3) 第三方組織:
Fedora-EPEL:
Extra Packages for Enterprise Linux
Rpmforge:RHEL推薦,包很全
搜索引擎:
http://pkgs.org
http://rpmfind.net
http://rpm.pbone.net
https://sourceforge.net/
注意:第三方包要檢查其合法性、完整性!!
7.庫文件
一些查看命令:
ldd /PATH/TO/BINARY_FILE # 查看二進制程序所依賴的庫文件 ldconfig -p # 顯示本機已經緩存的全部可用庫文件名及文件路徑映射關係
8.程序的配置文件和緩存文件:
配置文件:
/etc/ld.so.conf 所有放到一個文件中,或
/etc/ld.so.conf.d/*.conf 此文件目錄下.cong結尾的文件,方便一個程序寫一個配置文件
緩存文件:
/etc/ld.so.cache
功能:將編譯好的應用程序的各組成文件打包一個或幾個程序包文件,從而方便快捷地實現程序包的安裝、卸載、查詢、升級和校驗等管理操做
包文件組成 (每一個包獨有)
RPM包內的文件
RPM的元數據,如名稱,版本,依賴性,描述等
安裝或卸載時運行的腳本
數據庫(公共):/var/lib/rpm
程序包名稱及版本
依賴關係
功能說明
包安裝後生成的各文件路徑及校驗碼信息
ll /var/lib/rpm/ total 75612 -rw-r--r--. 1 root root 5521408 Oct 23 18:48 Basenames -rw-r--r--. 1 root root 12288 Oct 23 18:47 Conflictname -rw-r--r--. 1 root root 73728 Dec 4 11:57 __db.001 -rw-r--r--. 1 root root 229376 Dec 4 11:57 __db.002 -rw-r--r--. 1 root root 1318912 Dec 4 11:57 __db.003 -rw-r--r--. 1 root root 753664 Dec 4 11:57 __db.004 # 這個rpm包數據庫文件夾中包含着現有已經安裝的包的各類信息,包括安裝版本,安裝時間、升級時間、卸載時間等等很是重要,最好備份
CentOS系統上使用rpm命令管理程序包:
安裝、卸載、升級、查詢、校驗、數據庫維護。
rpm {-i|--install} [install-options] PACKAGE_FILE… # option -v: verbose -vv: -h: 以#顯示程序包管理執行進度 rpm -ivh PACKAGE_FILE ... # 安裝某程序包 [install-options] --test: 測試安裝,但不真正執行安裝,即dry run模式 --nodeps:忽略依賴關係 --replacepkgs | replacefiles # 對於已經安裝過的包,若是不通過卸載,只是刪除其一些文件,就會致使這個程序沒法使用,咱們再從新安裝這個程序包時,會顯示此包已經安裝,是由於在/var/lib/rpm這個文件中有該程序的安裝記錄。因此這種狀況下要想從新安裝這個程序包就須要rpm -ivh --replacepkgs 這個選項! --nosignature: 不檢查來源合法性 --nodigest:不檢查包完整性 --noscripts:不執行程序包腳本 %pre: 安裝前腳本; --nopre %post: 安裝後腳本; --nopost %preun: 卸載前腳本; --nopreun %postun: 卸載後腳本; --nopostun
注意:
咱們在rpm安裝時截圖中紅框位置顯示nokey是由於咱們沒有導入RPM-GPG-KEY-CentOS-7這個檢查工具來檢查其合法性,導入後便可顯示
rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
(rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6 (centos6)
)導入公鑰便可檢查,這樣在安裝來源合法的程序包時就不在顯示nokey。
rpm {-U|--upgrade} [install-options] PACKAGE_FILE... upgrade # 安裝有舊版程序包,則「升級」;若是不存在舊版程序包,則「安裝」 rpm {-F|--freshen} [install-options] PACKAGE_FILE... freshen # 安裝有舊版程序包,則「升級」;若是不存在舊版程序包,則不執行升級操做 rpm -Uvh PACKAGE_FILE ... rpm -Fvh PACKAGE_FILE ... --oldpackage:降級 --force: 強制安裝
注意:
(1) 不要對內核作升級操做;Linux支持多內核版本並存,所以,對直接安裝新版本內核;
(2) 若是原程序包的配置文件安裝後曾被修改,升級時,新版本的提供的同一個配置文件並不會直接覆蓋老版本的配置文件,而把新版本的文件重命名(FILENAME.rpmnew)後保留。
rpm {-q|--query} [select-options] [query-options] [select-options] -a: 全部包 -f: 查看指定的文件由哪一個程序包安裝生成 -p rpmfile:針對還沒有安裝的程序包文件作查詢操做 --whatprovides CAPABILITY:查詢指定的CAPABILITY由哪一個包所提供 --whatrequires CAPABILITY:查詢指定的CAPABILITY被哪一個包所依賴 [query-options] --changelog:查詢rpm包的changelog -c: 查詢程序的配置文件 -d: 查詢程序的文檔 -i: information -l: 查看指定的程序包安裝後生成的全部文件 --scripts:程序包自帶的腳本 --provides: 列出指定程序包所提供的CAPABILITY -R: 查詢指定的程序包所依賴的CAPABILITY rpm2cpio 包文件|cpio –itv 預覽包內文件 rpm2cpio 包文件|cpio –id 「*.conf」 釋放包內文件
rpm {-e|--erase} [--allmatches] [--nodeps] [--noscripts] [--notriggers] [--test] PACKAGE_NAME ...
注意:因爲咱們在安裝程序包是會同時安裝許多依賴文件,而這種卸載方法只是卸載程序自己,並不一樣時將依賴文件卸載,因此要想完整卸載的話須要用yum
yum history # 查看歷史記錄,找到是第幾部的操做 yum history undo # # 表示對歷史操做中的第#想進行反操做
rpm {-V|--verify} [select-options] [verify-options] # option 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 -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*」
yum工具經過倉庫的方式簡化rpm包的管理。它從倉庫中搜索相關的軟件包,並自動下載和解決軟件包的依賴性,很是方便。yum底層依賴rpm,若是把rpm卸載,那麼yum也不能用了。
老王說:
利用yum的主要問題:
(1)配置文件格式語法錯誤;
(2)緩存問題
yum客戶端配置文件:
/etc/yum.conf # 爲全部倉庫提供公共配置 /etc/yum.repos.d/*.repo # 爲倉庫的指向提供配置 [root@CentOS7 ~]#cat /etc/yum.conf [main] cachedir=/var/cache/yum/$basearch/$releasever # 緩存文件夾路徑 $$basearch # cpu架構,X86_64等 $releasever # 系統版本 keepcache=0 # 0表明不緩存rpm包,下載安裝後默認刪除;1爲緩存rpm安裝包 debuglevel=2 # logfile=/var/log/yum.log # yum安裝的日誌文件 exactarch=1 # obsoletes=1 gpgcheck=1 # 默認1表明安裝包的完整性合法性爲nokey是直接拒絕安裝 plugins=1 installonly_limit=5 bugtracker_url=http://bugs.centos.org/set_project.php?project_id=23&ref=http://bugs.centos.org/bug_report_page.php?category=yum distroverpkg=centos-release # PUT YOUR REPOS HERE OR IN separate files named file.repo # in /etc/yum.repos.d
本身搭建一個yum配置文件
vim /etc/yum.repo.d/base.repo # 兩個必須:1必須在/etc/yum.repo.d/這個文件夾下;2.文件名必須以.repo結尾;通常習慣將光盤建的yum庫命名爲base [base] # 不容許有空格 name=cdrom baseurl=file:///mnt/cdrom/ # 通常是repodata的父目錄,文件路徑不容許有空格,支持http:// https:// ftp:// file:// # 此地址能夠添加多個地址,在多個地址的狀況下,能夠將所有地址保存在一個文本文件中,而此處的baseuer換成 mirrorlist=file:// 文件路徑 gpgcheck=0 # 0默認爲不進行gpgcheck檢查完整性 以上這些是必須項, ----------------------------------------------------- 還能夠添加: gpgkey=file:///mnt/cdrom/RPM-GPG-KEY-CentOS-7 # 直接將光盤中的公鑰導入,也能夠換成 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 # 直接導入配置文件中的公鑰;此項不加的話,gpgcheck=0; enabled=0 # 默認爲1,0爲臨時禁用該倉庫 failovermethod={roundrobin|priority} # 這個是在baseurl包含多個地址的狀況下使用 roundrobin # 意爲隨機挑選,默認值 priority # 按順序訪問 cost=1000 # 存在多個倉庫的狀況下,越少優先值越高
也能夠經過命令直接生成該配置文件:
yum-config-manager --add-repo=BASEURL # 即自動生成該網址的repo配置文件 yum-config-manager --disable 「倉庫名" # 禁用倉庫 yum-config-manager --enable 「倉庫名」 # 啓用倉庫
搭建完yum配置文件便可使用yum安裝了。
[aliyunepel] name=aliyun-epel baseurl=https://mirrors.aliyun.com/epel/7/x86_64/ gpgcheck=0 # 這樣就又搭建了一個阿里雲的epel的yum庫
yum的其餘一些命令
yum install PACKAGES # yum安裝程序包 yum reinstall package1 [package2] [...] # 從新安裝 yum remove PACKAGES # yum卸載程序包 yum remove | erase package1 [package2] [...] yum repolist # 可查看搭建的yum庫有多少個安裝包。 yum repolist all # 顯示全部的倉庫狀況 yum clean # 清除yum緩存 cat /var/log/yum.log # 查看yum安裝報的日誌文件,包括安裝、卸載、更新等 yum list # 顯示全部庫中全部的包,前帶@說明已經安裝 yum list *ftp* # 支持文件名通配符,列出包含ftp的程序包 yum list [all | glob_exp1] [glob_exp2] [...] # 列出包,支持文件名通配符 yum list {available|installed|updates} [glob_exp1] # 列出可用的、可安裝的、能升級的 yum update [package1] [package2] [...] # 升級,通常不建議升級 yum downgrade package1 [package2] [...] # 降級 yum check-update # 檢查可用升級 yum info [...] # 查詢包信息 yum provides | whatprovides feature1 [feature2] # 查看指定的特性(能夠是某文件)是由哪一個程序包所提供 yum clean [ packages | metadata | expire-cache | rpmdb | plugins | all ] # 清除/var/cache/yum/$basearch/$releasever緩存,清楚類型指定,all爲全部 yum makecache # 構建緩存 yum search string1 [string2] [...] # 以指定的關鍵字搜索程序包名及summary信息 yum deplist package1 [package2] [...] # 查看指定包所依賴的capabilities
如圖所示,兩個yum庫分別有多少個包均有顯示
注意:yum不容許同時在多個終端同時安裝
yum的repo配置文件中可用的變量:
$releasever: 當前OS的發行版的主版本號
$arch: 平臺,i386,i486,i586,x86_64等
$basearch:基礎平臺;i386, x86_64
$YUM0-$YUM9:自定義變量
好比:
實例:(針對不一樣版本的系統)
http://server/centos/$releasever/$basearch/
http://server/centos/7/x86_64
http://server/centos/6/i384
對於repo文件咱們也能夠參考阿里雲,
http://mirrors.aliyun.com/repo/
將其的配置格式直接做爲咱們本身的配置。
可經過:
wget url....下載配置文件至當前目錄
查看yum歷史事務:
yum history [info|list| packages-list| packages-info| summary | addon-info | redo | undo | rollback | new|sync| stats] yum history # 查看歷史記錄 yum history info 6 # 查看yum歷史記錄第六條的詳細信息 yum history undo 6 # 反向操做yum歷史記錄第六條的操做
利用yum安裝rpg包:
yum install rpmfile1 [rpmfile2] [...] # yum update rpmfile1 [rpmfile2] [...]
利用yum安裝包組
yum groupinstall group1 [group2] [...] yum groupupdate group1 [group2] [...] yum grouplist [hidden] [groupwildcard] [...] yum groupremove group1 [group2] [...] yum groupinfo group1 [...] yum grouplist # 查看包組列表
yum的一些命令選項:
yum的命令行選項: --nogpgcheck:禁止進行gpg check -y: 自動回答爲「yes」 -q:靜默模式 yum -y -q :須要分開寫 --disablerepo=repoidglob:臨時禁用此處指定的repo,repo配置文件中[]中的名字 --enablerepo=repoidglob:臨時啓用此處指定的repo --noplugins:禁用全部插件
補充:
systemctl stop firewalld # 關閉防火牆 systemctl disable firewalld # 關閉開機自動啓動防火牆
當知道是哪一個庫文件被刪除(以刪除/lib64/libc.so.6這個庫文件爲例),致使沒法使用命令或系統不能使用時,這麼修復:(以CentOS 7爲例)
第一步:重啓,從光盤開機,有的系統是開機f2修改,有的是f12,還有的是Esc鍵;
第二步:進入此界面,選擇第三項Troubleshooting進入
再選擇第二項rescure centos system ,進入救援模式;
再選擇第一項continue進入bash shell界面。
經過df命令能夠看到,根目錄已經變成/mnt/sysimage;因此,咱們在cp丟失的文件時要使用相對路徑。
!!注意:libc.so.6 這個文件是個軟連接,也就是說咱們實驗時cp到data目錄下的庫文件是個軟連接,並非真正的庫文件,因此這樣的話咱們再從新建立個軟連接便可。
ln -s libc-2.17.so libc.so.6
(注意,此處要切換至/mnt/sysimage/lib64下,使用相對路徑進行建立軟連接)
重啓,正常!(注意,將從光盤啓動改回從硬盤啓動)
像centos6那樣,能夠直接依靠/misc/cd 打開光盤文件
第一步:yum install autufs
這個包
第二步:systemctl start autofs
打開autofs服務
(注意:centos特有的,能夠經過rpm -ql autofs 查看到其有個服務文件,因此須要命令打開它)
第三步:再經過systemctl enable autofs
命令讓其開機自動啓動服務
此時,centos7 也能夠經過 cd /misc/cd 切換至光盤
用centos7的安裝光盤爲centos6的客戶機搭建一個yum庫
第一步:安裝並開啓httpd
yum install httpd # 安裝httpd systemctl stop firewalld # 關閉防火牆 systemctl disable filewalld # 關閉自動啓動防火牆
打開瀏覽器,在地址欄輸入ip地址,看是否能夠鏈接,如圖所示已經鏈接成功
第二步:
cd /var/www/html/ # 切換至該文件夾 mkdir -p epel/{6,7}/x86_64/ # 模仿阿里雲的epel網址格式分別建立6和7兩個文件夾
第三步:掛載光盤
mount /dev/sr0 /var/www/html/epel/7/x86_64/ # 掛載硬盤至指定目錄,若是是想在centos7上使用這個庫就用7的文件夾 mount /dev/sr0 /var/www/html/epel/6/x86_64/ # 若是是想在centos6上使用這個庫就用6的文件夾
如圖所示,已經能夠在瀏覽器中查看到咱們掛載的光盤的內容
第四步:後面的就修改 /etc/yum.con.d/ 下的配置文件按正常操做便可。