程式組成部分:二進制程式;庫(自身庫、共享庫.so);配置檔案;幫助檔案。
程式=指令+資料;指令:晶片,CPU(普通指令,特權指令),指令集
/bin,/sbin,/lib,/etc(系統啟動需要用到的程式,這些目錄不能挂載到額外的分區,必須在根檔案系統的分區上);
/usr/bin,/usr/sbin,/usr/lib(作業系統的基本功能,或核心功能,應該單獨分區);
/usr/local/bin,/usr/local/sbin,/usr/local/lib,/usr/local/etc,/usr/local/man(第三方軟體安裝位置,建議獨立分區);
/opt(早期第三方軟體安裝位置)
/proc,/sys(不能單獨分區,預設為空)
/dev(不能單獨分區,2.6kernel用udev動态地建立裝置檔案,2.4kernel在此目錄下會事先建立所有裝置檔案,不能根據檔案識别裝置)
/home(建議單獨分區)
/root(沒有也可,不要單獨分區)
/var(作為系統的補充,沒有也可,有它更規範,應該單獨分區)
/boot(核心及initramfs放至處,一般/boot單獨分區,除此分區外其它均劃分為LVM)
軟體包管理器的核心功能:制作軟體包;安裝、解除安裝、更新、查詢、校驗
rpm(redhat packagemanager-->rpm is package manager,redhat/suse)
dpkg(debianpackager,DEBIAN)
yum(yellowdog updatemodifier)
/var/lib/rpm/*:rpm資料庫,安裝、解除安裝、更新、校驗、資料庫的重建、驗證資料包等工作
命名:
主包:bind-9.7.1-1.el5.i586.rpm
次包:bind-libs-9.7.1-1.el5.i586.rpm
name-version-release.arch.rpm
bind-major.minor.release-release.arch.rpm(major主版本号,重大改進;minor次版本号,某個子功能發生重大變化;前一個release發行号,修正了部分bug調整了一點功能;後一個release,rpm包作者)
rpm包:二進制格式(rpm作者将源程式編譯配置完成後制作成rpm);源碼格式
#uname -r(print system information.-a,--all;-r,--kernel-release;-s,--kernel-name;-n,--nodename)
安裝:
rpm包,二進制格式(源程式-->編譯-->二進制格式),有些特性是編譯標明的,如果編譯時未標明此特性,則無法使用;rpm包的版本會落後于源碼包,甚至落後很多
#rpm -ivh PACKAGE_NAME
-i(--install)
-v(Print verbose information,也可用-vv顯示更詳細的資訊)
--h(--hash,以#顯示進度,每個#表示2%,共50個)
--nodeps(忽略依賴關系)
--replacepkgs(重新安裝,替換原有安裝)
--force(強制安裝,可以實作重裝或降級)
查詢:
#rpm -q PKG_NAME(--query,查詢指定的包是否已安裝)
#rpm -qa(查詢已安裝的所有包)
#rpm -qa | grep “^z”
#rpm -ql zsh | less(--list查詢指定包安裝後生成的檔案清單)
#rpm -qi PKG_NAME(--info查詢指定包的說明資訊)
#rpm -qf /PATH/TO/FILE(--file查詢指定檔案由哪個包安裝的)
#rpm -q --scripts PKG_NAME(查詢指定包中包含的腳本)
#rpm -qc PKG_NAME(--configfiles查詢指定包安裝的配置檔案)
#rpm -qd PKG_NAME(--docfiles查詢指定包安裝的幫助檔案)
#rpm -qpl /PATH/TO/PKG_NAME(檢視尚未安裝的包安裝後會生成的檔案)
#rpm -qpi /PATH/TO/PKG_NAME(檢視尚未安裝的包的說明資訊)
更新:
#rpm -Uvh /PATH/TO/PKG_NAME(--upgrade若有老版本則更新,否則安裝)
#rpm -Fvh /PATH/TO/PKG_NAME(--freshen若有老版本則更新,否則退出)
#rpm -ivh --oldpackage /PATH/TO/PKG_NAME(降級)
解除安裝:
#rpm -e PKG_NAME(--erase;--nodeps)
校驗:
#rpm -V PKG_NAME(--verify;狀态有S,M,5,D,L,U,G,T,P)
重建資料庫(/var/lib/rpm/*):
#rpm --rebuild(重建資料庫,執行此條一定會重建立立)
#rpm --initdb(重建資料庫,沒有才建立,有則不建立)
校驗來源合法性及軟體包的完整性:
#rpm --import /etc/pki/rpm-gpg/RPM-GPG_KEY-redhat-release
#rpm -K PKG_FILE(--checksig)
yum:
yum倉庫中的中繼資料檔案:
primary.xml.gz(所有rpm包的清單;依賴關系;每個rpm安裝生成的檔案清單)
filelists.xml.gz(目前倉庫中所有rpm包的所有檔案清單)
other.xml.gz(額外資訊,rpm包的修改日志)
repomd.xml(上面三個檔案的timestamp和checksum)
comps*.xml(rpm包分組資訊)
/etc/yum.conf;
/etc/yum.repos.d/*.repo
定義repo檔案:
[REPO_ID]
name=DESCRIPTION
baseurl=ftp://(或http://或file://)
enabled=1(1表示啟用,0禁用)
gpgcheck=0
gpgkey=
#yum options COMMAND PKG_NAME
#yum list all
#yum list available(倉庫中有尚未安裝)
#yum list installed
#yum list updates(可用的更新)
#yum repolist [enabled|all|disabled](顯示repo清單及簡要資訊,預設顯示enabled)
#yum install PKG_NAME
#yum update|update-to PKG_NAME
#yum remove|erase PKG_NAME
#yum info PKG_NAME
#yum provides|whatprovides /PATH/TO/FILE(檢視指定的檔案或特性是由哪個包生成的)
#yum grouplist | grep “^z”
#yum groupinfo|groupinstall|groupremove|groupupdate GROUP_NAME
#yum localinstall *.rpm *.rpm(安裝rpm包自動解決依賴關系)
編譯安裝(定制):
手動編譯安裝;編譯環境(開發環境);開發庫;開發工具(gcc(gnu c compilier);g++(g plus plus));
make項目管理工具(make調用gcc或g++),makefile定義了gcc何種次序去編譯這些源程式檔案中的源程式(automake-->makefile.in-->makefile)
autoconf-->configure(給使用者提供接口讓使用者選擇哪些特性)
編譯安裝的三步驟:./configure;make;make install
安裝前要先準備開發環境(編譯環境)”Development Tools”,”Development Libraries”,”Compatibility Libraries”
#tar xf SAMPLE.tar.gz
#cd SAMPLE_DIR
#./configure --help
#./configure --prefix=/path/to/somewhere --sysconfdir=/path/to/confile_path
#make
#make install
編譯完成後需要調試如下資訊:
1、 修改PATH環境變量,以能夠識别此程式的二進制檔案路徑,再次登入生效(在/etc/profile檔案中添加,或/etc/profile.d/rename.sh)内容為export PATH=$PATH:/path/to/somewhere
2、 預設情況下,系統搜尋庫檔案的路徑是/lib,/usr/lib,要增添額外搜尋路徑,在/etc/ld.so.conf.d/中建立以.conf為字尾的檔案,而後把增添的路徑直接寫在此檔案中,#ldconfig -v通知系統重新搜尋庫檔案,-v顯示過程
3、 頭檔案,每一個輸出了庫檔案的軟體都一定會有頭檔案提供,頭檔案包含了每一個庫檔案的函數、函數的調用參數、參數類型等相關屬性,這些屬性是被其他人做二次開發時指定調用風格的檔案(規範式檔案),預設位置/usr/include,增添頭檔案搜尋路徑,使用連結進行:#ln -sv /usr/local/software_name/include /usr/include/software_name
4、 man檔案路徑:安裝時--prefix指定的目錄下有man目錄,将此路徑添加至man配置檔案/etc/man.config(MANPATH_MAP /PATH)或使用man指令時指定幫助文檔路徑(#man -M /PATH COMMAND)
以上是學習《馬哥網絡視訊》做的筆記。
1、分類:源碼包、二進制包
源碼包:優(開源,有能力可修改源代碼;可自由選擇所需功能;編譯安裝,更适合自己的系統,穩定且高效;解除安裝友善);缺(安裝步驟多,尤其較大軟體集合,如LAMP環境搭建,容易出現拼寫錯誤;編譯安裝時間長;安裝過程一旦報錯,新手很難解決)。
二進制包:優(包管理簡單,隻通過幾個指令就可實作安裝、更新、查詢、解除安裝;安裝進度比源碼包快的多);缺(經過編譯,不再可看到源代碼;功能選擇不如源碼包靈活;依賴性很繁瑣)。
2、rpm安裝
》httpd-2.2.15-15.el16.centos.1.i686.rpm
2.2.15軟體版本;-15軟體釋出的次數;el16軟體發行商,RHEL6.x
》預設安裝位置:
/etc;/usr/bin;/usr/lib;/usr/share/doc;/usr/share/man
》#rpm -ivh 包全名 (install\verbose\hash)
--nodeps 不檢測依賴性
--replacefiles 替換檔案安裝
--replacepkgs 替換軟體包安裝
--force 強制安裝,相當于以上兩項的結合
--test 測試安裝,不會實際安裝
--prefix 指定安裝目錄
》#rpm -Uvh 包全名 upgrade舊版升到新版,無舊版也安裝
#rpm -Fvh 包全名 freshen舊版才能更新,無舊版不安裝
#rpm -e 包名 解除安裝
#rpm -q 包名 query查詢(例:#rpm –qa|grep httpd)
#rpm -qi 包名 information查詢包的資訊
#rpm -qip 包全名 package查詢未安裝包資訊
#rpm -ql 包名 list查詢包中檔案的安裝位置
#rpm -qf 系統檔案名 file查詢系統檔案屬于哪個包
#rpm -qR 包名 recursion依賴性
#rpm -qRp 包全名 查詢未安裝包依賴性
》#yum -y install 包名
#yum -y remove 包名
#yum -y update 包名
#yum list 查詢伺服器中可以安裝的包
#yum list 包名 查詢伺服器是否有此包
#yum search 關鍵字 搜尋伺服器上和關鍵字相關的包
#yum info 包名 查詢指定軟體包的資訊
#yum grouplist 查詢可以安裝的軟體組
#yum groupinfo “軟體組名” 查詢軟體組内包含的軟體
#yum groupinstall “軟體組名” 安裝軟體組
#yum groupremove “軟體組名” 解除安裝軟體組
》搭建CD光牒 yum源
#mv CentOS-Base.repo CentOS-Base.repo.bak
#vi /etc/yum.repos.d/CentOS-Media.repo
baseurl=file:///mnt/cdrom/ 指定yum源位置
enabled=1 yum源檔案生效
gpgcheck=0 rpm驗證不生效
》#rpm -V 包名 verify校驗指定包中檔案
#rpm -Vf 系統檔案名 校驗系統檔案是否被修改
數字證書(對即将要安裝的包驗證)
特點:安裝原廠的公鑰檔案;安裝rpm包時,提取rpm包中的證書資訊與本機安裝的原廠證書進行比對;驗證通過,安裝,否則不允許安裝并警告。
位置:/mnt/cdrom/RPM-GPG-KEY-CentOS-6 CD光牒中
/etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6 系統中
#rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
3、》#cpio -ovcB > 檔案|裝置
備份模式o(out),v(verbose),c(portable format存儲方式),B(輸出塊為5120byte,而不是模式的512byte)
#cpio -ivcdu < 檔案|裝置
還原模式i(in),d(還原時自動建立目錄),u(使用較新的檔案覆寫較舊的檔案)
#cpio -p 目标目錄
例:#find . –print | cpio -ovcB > /root/etc.cpio
#cpio -ivcdu < /root/etc.cpio
注:CentOS6.x中,如果備份時寫絕對路徑,則恢複時直接到絕對路徑,最好使用相對路徑。
例:#find /boot -print | cpio -p /tmp/test/
提取rpm包中檔案:
#rpm -qf /bin/ls
#rpm2cpio /mnt/cdrom/Packages/core….. | cpio -idv ./bin/ls
#cp /root/bin/ls /bin/
注意:./bin/ls 提取ls到目前目錄下
4、》源碼包安裝:解壓;cd 解壓目錄;檢視安裝文檔(install和readme);編譯前準備(./configure --prefix=/usr/local/apache2/);編譯make;編譯安裝make install
啟動:#/usr/local/apache2/bin/apachect1 start
解除安裝:直接删除安裝目錄
》源碼包打入更新檔:
#patch -pn 要打更新檔的檔案 < 更新檔檔案
注:n為數字,按照更新檔檔案的路徑,指定更新位置
5、》腳本安裝程式:sebmin的安裝
# ./setup.sh (安裝位置、日志位置、perl安裝位置、端口、密碼、ssl不啟用、啟動)
6、》函數庫的管理,分類:靜态函數庫、動态函數庫
靜态函數庫:*.a,程式調用時被直接整合到程式中;優(程式執行時不需要調用外部資料,可直接執行);缺(檔案較大,更新困難,需把整個程式重新編譯)
動态函數庫:*.so,程式用到時再去調用函數庫。
#ldd /bin/ls (查詢ls調用的函數庫)
#ldd -v 可執行檔案名 (詳細顯示版本資訊)
注:軟體正常安裝不需調整函數庫,若未安裝正确手工安裝:1把函數庫放入指定位置/usr/lib或/lib;2把函數庫所在位置寫入/etc/ld.so.conf
#cp *.so /usr/lib
#vi /etc/ld.so.conf
include ld.so.conf.d/*.conf
/usr/lib
#ldconfig 把函數庫讀入緩存
#ldconfig -p 列出系統緩存中所有識别的函數庫
本文轉自 chaijowin 51CTO部落格,原文連結:http://blog.51cto.com/jowin/1641424,如需轉載請自行聯系原作者