軟件包管理
應用程序:
程序,Architecture
C語言:源代碼-->(編譯)二進制格式
腳本:解釋器(二進制程序)
源代碼-->編譯-->鏈接-->運行
程序:
庫
靜態
動態
靜態鏈接
動態鏈接
共享庫
配置文件:
dir=/path/to/somewhere
程序組成部分:
二進制程序
庫
配置文件
幫助文件
/boot
/etc
/usr
/var
/dev
/lib
/tmp
/bin
/sbin
/proc
/sys
/mnt
/media
/home
/root
/misc
/opt
/srv
/usr/share/man
/etc, /bin, /sbin, /lib
系統啓動就需要用到的程序,這些目錄不能掛載額外的分區,必須在根文件系統的分區上
/usr/
bin
sbin
lib
操作系統核心功能,可以單獨分區
/usr/local
bin
sbin
lib
etc
man
/opt
/proc
/sys
不能單獨分區,默認爲空;
/dev: 設備,不能單獨分區;
udev
/root: 不能單獨分區
/var:建議單獨分區
/boot:內核,initrd(initramfs)
內核:
POST-->BIOS(HD)-->(MBR)bootloader(文件系統結構,ext2, ext3, xfs)-->內核
程序:指令+數據
指令:芯片
CPU: 普通指令,特權指令
指令集
C語言:
Powerpc: 二進制格式
x86:
x86: 彙編
powerpc: 彙編
高級語言:
C:
軟件包管理器的核心功能:
1、製作軟件包;
2、安裝、卸載、升級、查詢、校驗;
Redhat, SUSE, Debian
Redhat, SUSE: RPM
Redhat Package Manager
PRM is Package Manager
Debian: dpt
依賴關係:
X-->Y-->Z
X-->Y-->Z
前端工具:yum, apt-get
後端工具:RPM, dpt
yum: Yellowdog Update Modifier
yum
rpm命令:
rpm:
數據庫:/var/lib/rpm
rpmbuild:
安裝、查詢、卸載、升級、校驗、數據庫的重建、驗正數據包等工作;
rpm命名:
包:組成部分
主包:
bind-9.7.1-1.el5.i586.rpm
子包:
bind-libs-9.7.1-1.el5.i586.rpm
bind-utils-9.7.1-1.el5.i586.rpm
包名格式:
name-version-release.arch.rpm
bind-major.minor.release-release.arch.rpm
主版本號:重大改進
次版本號:某個子功能發生重大變化
發行號:修正了部分bug,調整了一點功能
bind-9.7.1.tar.gz
rpm包:
二進制格式
rpm包作者下載源程序,編譯配置完成後,製作成rpm包
bind-9.7.1-1.noarch.rpm
bind-9.7.1-1.ppc.rpm
rpm:
1、安裝
rpm -i /PATH/TO/PACKAGE_FILE
-h: 以#顯示進度;每個#表示2%;
-v: 顯示詳細過程
-vv: 更詳細的過程
rpm -ivh /PATH/TO/PACKAGE_FILE
--nodeps: 忽略依賴關係;
--replacepkgs: 重新安裝,替換原有安裝;
--force: 強行安裝,可以實現重裝或降級;
2、查詢
rpm -q PACKAGE_NAME: 查詢指定的包是否已經安裝
rpm -qa : 查詢已經安裝的所有包
rpm -qi PACKAGE_NAME: 查詢指定包的說明信息;
rpm -ql PACKAGE_NAME: 查詢指定包安裝後生成的文件列表;
rpm -qc PACEAGE_NEME:查詢指定包安裝的配置文件;
rpm -qd PACKAGE_NAME: 查詢指定包安裝的幫助文件;
rpm -q --scripts PACKAGE_NAME: 查詢指定包中包含的腳本
rpm -qf /path/to/somefile: 查詢指定的文件是由哪個rpm包安裝生成的;
如果某rpm包尚未安裝,我們需查詢其說明信息、安裝以後會生成的文件;
rpm -qpi /PATH/TO/PACKAGE_FILE
rpm -qpl
3、升級
rpm -Uvh /PATH/TO/NEW_PACKAGE_FILE: 如果裝有老版本的,則升級;否則,則安裝;
rpm -Fvh /PATH/TO/NEW_PACKAGE_FILE:如果裝有老版本的,則升級;否則,退出;
--oldpackage: 降級
4、卸載
rpm -e PACKAGE_NAME
--nodeps
5、校驗
rpm -V PACKAGE_NAME
6、重建數據庫
rpm
--rebuilddb: 重建數據庫,一定會重新建立;
--initdb:初始化數據庫,沒有才建立,有就不用建立;
7、檢驗來源合法性,及軟件包完整性;
加密類型:
對稱:加密解密使用同一個密鑰
公鑰:一對兒密鑰,公鑰,私鑰;公鑰隱含於私鑰中,可以提取出來,並公開出去;
單向:
# ls /etc/pki/rpm-gpg/
RPM-GPG-KEY-redhat-release
rpm -K /PAPT/TO/PACKAGE_FILE
dsa, gpg: 驗正來源合法性,也即驗正簽名;可以使用--nosignature,略過此項
sha1, md5: 驗正軟件包完整性;可以使用--nodigest,略過此項
rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release: 導入密鑰文件
1、rpm -qf
2、rpm -qpl
l: List
i: 軟件包的信息;
3、--import /etc/pki/rpm-gpg/
4、--rebuilddb
rpm --> yum
HTML: HyperText Mark Language
XML: eXtended Mark Language
XML, JSON: 半結構化的數據
yum倉庫中的元數據文件:
primary.xml.gz
所有RPM包的列表;
依賴關係;
每個RPM安裝生成的文件列表;
filelists.xml.gz
當前倉庫中所有RPM包的所有文件列表;
other.xml.gz
額外信息,RPM包的修改日誌;
repomd.xml
記錄的是上面三個文件的時間戳和校驗和;
yum install zsh
comps*.xml: RPM包分組信息
ftp://172.16.0.1/pub/{Server,VT,Cluster,ClusterStorage}
如何爲yum定義repo文件
[Repo_ID]
name=Description
baseurl=
ftp://
http://
file:///
enabled={1|0}
gpgcheck={1|0}
gpgkey=
yum [options] [command] [package ...]
-y: 自動回答爲yes
--nogpgcheck
list: 列表
支持glob
all
available:可用的,倉庫中有但尚未安裝的
installed: 已經安裝的
updates: 可用的升級
clean: 清理緩存
[ packages | headers | metadata | dbcache | all ]
repolist: 顯示repo列表及其簡要信息
all
enabled: 默認
disabled
install: 安裝
yum install PACKAGE_NAME
update: 升級
update_to: 升級爲指定版本
remove|erase:卸載
info:
provides| whatprovides: 查看指定的文件或特性是由哪個包安裝生成的;
groupinfo
grouplist
groupinstall
groupremove
groupupdate
/media/cdrom/{Server,VT,Cluster,ClusterStorage}
如何創建yum倉庫:
createrepo
http://172.16.0.1/yum/{Server,VT}
練習:
1、將系統安裝光盤掛載至/media/yum目錄,用其實現yum倉庫;
2、配置使用http://172.16.0.1/yum/{Server,VT,Cluster,ClusterStorage}爲可用yum倉庫;
寫一個腳本,完成以下功能:
說明:此腳本能於同一個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;
if [ -e $1 ]; then
echo "$1 exist."
exit 5
fi
[repo id]
name=
baseurl=
enabled=
gpgcheck=
while, until, for
break: 提前退出循環
continue:提前結束本輪循環,而進入下一輪循環;
1000, SUM>5000
while的特殊用法一:
while :;do
done
while的特殊用法二:
while read LINE; do
done < /PATH/TO/SOMEFILE
/etc/passwd
寫一個腳本,完成如下功能:
說明:此腳本能夠爲指定網卡創建別名,則指定地址;使用格式如:mkethalias.sh -v|--verbose -i ethX
1、-i選項用於指定網卡;指定完成後,要判斷其是否存在,如果不存在,就退出;
2、如果用戶指定的網卡存在,則讓用戶爲其指定一個別名,此別名可以爲空;如果不空,請確保其事先不存在,否則,要報錯,並讓用戶重新輸入;
3、在用戶輸入了一個正確的別名後,請用戶輸入地址和掩碼;並將其配置在指定的別名上;
4、如果用戶使用了-v選項,則在配置完成後,顯示其配置結果信息;否則,將不顯示;
RPM安裝:
二進制格式:
源程序-->編譯-->二進制格式
有些特性是編譯選定的,如果編譯未選定此特性,將無法使用;
rpm包的版本會落後於源碼包,甚至落後很多;bind-9.8.7, bind-9.7.2
定製:手動編譯安裝
編譯環境,開發環境
開發庫,開發工具
Linux: C,
GNU: C
C,C++:
gcc: GNU C Complier, C
g++:
make: 項目管理工具,
makefile: 定義了make(gcc,g++)按何種次序去編譯這些源程序文件中的源程序
automake, --> makefile.in --> makefile
autoconf, --> configure
100個可選擇特性,
make install
編譯安裝的三步驟:
前提:準備開發環境(編譯環境)
安裝"Development Tools"和"Development Libraries"
# tar
# cd
# ./configure
--help
--prefix=/path/to/somewhere
--sysconfdir=/PATH/TO/CONFFILE_PATH
功能:1、讓用戶選定編譯特性;2、檢查編譯環境;
# make
# make install
# tar xf tengine-1.4.2.tar.gz
# cd tegnine-1.4.2
# ./configure --prefix=/usr/local/tengine --conf-path=/etc/tengine/tengine.conf
# make
# make install
# /usr/local/tengine/sbin/nginx
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/tengine/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
netstat命令:
-r: 顯示路由表
-n: 以數字方式顯示
-t: 建立的tcp連接
-u: 顯示udp連接
-l: 顯示監聽狀態的連接
-p: 顯示監聽指定的套接字的進程的進程號及進程名