一、軟件包管理
1、應用程序:
程序,Architecture
C語言:源代碼-->(編譯)二進制格式
腳本:解釋器(二進制程序)
源代碼--> 編譯-->鏈接-->運行
程序:
庫: 靜態 動態
靜態鏈接 動態鏈接
2、程序組成部分:
二進制程序
庫
配置文件
幫助文件
/boot :存放內核,initrd(initramfs)
/etc :存放配置文件
/usr
/var:是外圍的文件系統,存放日誌等文件,建議單獨分區
/dev :設備目錄,不能單獨分區;
/lib :存放庫文件
/tmp
/bin :存放二進制文件
/sbin:存放二進制文件
/proc
/sys
/mnt
/media
/home
/root ;不能單獨分區
/misc
/opt
/srv
/etc , /bin ,/sbin, /lib, /usr/share/man:存放幫助文件
系統啓動就需要用到以前的程序,這些目錄不能掛載額外的分區,必須在根文件系統的分區上。
/usr/ bin sbin lib 操作系統核心功能,可以單獨分區
系統啓動順序: POST-->BIOS(HD)-->(MBR)bootloader(文件系統結構)-->內核
3、程序: 指令+ 數據
指令:芯片
CPU:普通指令,特權指令
指令集
C語言:
Powerpc :二進制格式
4、軟件包管理器:
打包成一文件:二進制程序,庫文件,配置文件,幫助文件
生成數據庫,追蹤所安裝的每一個文件
軟件包管理器的核心功能:
(1)製作軟件包;(2)安裝、卸載、升級、查詢、校驗;
前段工具:yum ,apt-get
後端工具:RPM ,dpt
二、rpm命令:
rpm:管理命令
數據庫 /var/lib/rpm
rpmbuild:建立rpm
安裝、查詢、卸載、升級、校驗、數據庫的重建等工作:
1、rpm命名
包:組成部分
主包:
bind-version 例如:bind-9.7.1-1.i586.el5.rpm
子包:
例如:bind-libs-9.7.1-1.i586.el5.rpm 例如:bind-utils-9.7.1-1.i586.el5.rpm
包名格式:
name-version-release.arch.rpm
bind-major.minor.release-release.arch.rpm
主版本號:重大改進
此版本號:某個子功能發生重大變化
發行號:修正了部分bug,調整了一點功能
2、rpm包
二進制格式
rpm包作者下載源程序,編譯配置完成後,製作成rpm包
bind-9.7.1-1.x86_64
rpm:
rpm -i /PATH/TO/PACKAGE_FILE
-h : 以#顯示進度,每個#表示2%
-v:顯示詳細過程
-vv:更詳細的過程
rpm -ivh /PATH/TO/PACKAGE_FILE
--nodeps: 忽略依賴關係
--replacepkgs:重新安裝,替換原有安裝
--force:強制安裝,可以實現重裝或降級
3、rpm查詢
rpm -q PACKAGE_NAME:查詢指定的包是否已經安裝
rpm -qa :查詢已經安裝的所有包
rpm -qi PACKAGE_NAME:查詢指定包的說明信息;
rpm -ql PACKAGE_NAME: 查詢指定包安裝後生成的文件列表
rpm -qc PACKAGE_NAME:查詢指定包安裝的配置文件
rpm -qd PACKAGE_NAME:查詢指定包安裝的幫助文件;
rpm -q --scripts PACKAGE_NAME:查詢指定包中包含的腳本
rpm -qf /path/to/somefile:查詢指定的文件夾是由那個rpm包安裝生成的;
如果某rpm包尚未安裝,我們需查詢其說明信息,安裝以後會生成的文件:
rpm -qpi /PATH/TO/PACKAGE_FILE
rpm -qpl
4、rpm升級
rpm -Uvh /PATH/TO/NEW_PACKAGE_FILE:如果裝有老版本的,則升級;否則進行安裝
rpm -Fvh /PATH/TO/NEW_PACKAGE_FILE:如果裝有老版本的,則升級;否則就退出
--oldpackage:降級
5、卸載
rpm -e PACKAGE_NAME
--nodeps
6、校驗
rpm -V PACKAGE_NAME
7、檢驗來源合法性,及軟件完整性:
加密類型:
對稱:加密解密使用同一個密鑰
公鑰:一對密鑰,公鑰,私鑰;公鑰隱含於私鑰中,可以提取出來,並公開出去;
rpm -k /PATH/TO/PACKAGE_FILE
dsa,gpg:驗證來源合法性,也既驗證簽名;可以使用--nosignature,略過此項
sha1,md5:驗證軟件包完整性;可以使用 --nodigest,略過此項
8、重建數據庫
rpm
--rebuilddb: 重建數據庫,一定會重新建立;
--initdb:初始化數據庫,沒有才建立,有就不用建立;
三、yum
yum倉庫中的元數據文件:
primary.xml.gz
所有RPM包的列表:
依賴關係:
每個RPM安裝生成的文件列表:
filelists.xml.gz
當前倉庫中所有RPM包的所有文件列表:
other.xml.gz
額外信息,RPM
1、定義yum
如何爲yum定義repo文件
[Repo_ID]
name=Description
baseurl=
enabled={1|0}
gpgcheck={1|0}
gpgkey=
yum [options][command][package ...]
list:列表
all:
available:可用的,倉庫中有但尚未安裝的
installed:已經安裝的
updates:可用的升級
clean:清理緩存
[packages | headers | metadata | dbcache | all ]
repolist:顯示repo列表及其簡要信息
all ; enable:默認 ; disable ;
install :安裝
yum install PACKAGE_NAME
-y :自動回答爲yes
--nogpgcheck
update:升級
update_to :升級爲指定版本
remove | erase: 卸載
info:
provides | whatprovides:查看指定的文件或特性是有那個包安裝生成的;
2、編譯安裝的三步驟:
前提:準備開發環境(編譯環境)
安裝“Development Tools”和 “Development Libraries”
#tar
#cd
# ./configure
--help
--prefix=/path/to/somewhere
--sysconfdir=/PATH/TO/CONFFILE_PATH
功能:1.讓用戶選定編譯特性; 2、檢查編譯環境;
#make
#make install
(1)修改PATH環境變量,以能夠識別此程序的二進制文件路徑;
修改/etc/profile文件
在/etc/profile.d/目錄建立一個以.sh爲名稱後綴的文件,在裏面定義 export PATH=$PATH:/path/to/somewhere
(2)默認情況下,系統搜索庫文件的路徑/lib ,/usr/lib ; 需要增添額外搜尋路徑;
在/etc/ld.so.conf.d/ 中創建已.conf爲後綴名的文件,而後把要增添的路徑直接寫至此文件中國;
# ldconfig 通知系統重新搜尋庫文件
-v :顯示重新搜尋庫的過程
(3) 頭文件: 輸出給系統
默認: /usr/include
增添頭文件搜尋路徑,使用鏈接進行:
/usr/local/tengin/include/ /usr/include/
兩種方式:
ln -s /usr/local/tengine/include/* /usr/include/ 或
ln -s /usr/local/tengine/include /usr/include/tengine
(4) man文件路徑:安裝在 --prefix 指定的目錄下的man目錄: /usr/share/man
1.man -M /PATH/TO/MAN_DIR COMMAND
2. 在 /etc/man.config 中添加一條MANPATH
3、netstat命令:
-r:顯示路由表
-n:以數字方式顯示
-t:建立的tcp連接
-u:顯示udp連接
-l:顯示監聽狀態的連接
-p:顯示監聽指定套接字的進程的進程號與進程名
四、練習
寫一個腳本,完成以下功能:
說明:此腳本能於同一個repo文件中創建多個yum源的指向;
1、接受一個文件名做爲參數,此文件存放至/etc/yum.repos.d目錄中,且文件名以.repo爲後綴;要求,此文件不能事先存,否則,報錯;
2、在腳本中,提醒用戶輸入repo id;如果爲quit,則退出腳本;否則,繼續完成下面的步驟;
3、repo name 以及baseurl的路徑,而後以repo文件的格式將其保存至指定的文件中;
4、enabled 默認爲1 ,而gpgcheck默認設定爲0;
5、此腳本會循環執行多次,除非用戶爲repo id指定爲quit;
五、while
while ,until for
break :提前退出循環
continue:提前結束本輪循環,而進入下一輪循環;
六、練習題
寫一個腳本:
1、判斷一個指定的bash腳本是否有語法錯誤;如果有錯誤,則提醒用戶鍵入Q或者q無視錯誤並退出,其他任何鍵可以通過vim打開這個指定的腳本;
2、如果用戶通過vim打開編輯後保存退出時仍然有錯誤,則重複第1步中的內容;否則,就正常關閉退出