LIUNX中程式包管理 此內容僅為筆記,這一兩天給會重新整理補充上操作示例。 一、基礎 1、程式描述: 第一種描述: 程式+數據 第二種描述: 演算法+數據結構 2、程式的組成部分: 1、二進位程式 2、配置文件,可以被查看其內容的文件 3、庫文件,庫文件不能獨立執行,只能被調用執行 ...
LIUNX中程式包管理
此內容僅為筆記,這一兩天給會重新整理補充上操作示例。
一、基礎
1、程式描述:
第一種描述: 程式+數據
第二種描述: 演算法+數據結構
2、程式的組成部分:
1、二進位程式
2、配置文件,可以被查看其內容的文件
3、庫文件,庫文件不能獨立執行,只能被調用執行
4、幫助文件,可以被查看其內容的文件。
解壓rpm軟體包
rpm2cpio 包文件 | cpio -id
3、程式包管理器描述:
最早的包管理器應用於Debian上,dpkg為第一個包管理工具。
程式的組成文件打包 成一個或者有限幾個文件
安裝
卸載
查詢
升級
校驗
1> 包組成(每個包都有)
包內的文件
元數據,如:包的名稱 版本 依賴性 描述等
可能會有包安裝或卸載時運行的腳本
2> 資料庫(公共) /var/lib/rpm 自動更新
程式包名稱及版本
依賴關係
功能說明
包安裝後生成的各文件路徑及校驗碼信息
4、各個發行版本的程式包管理器和前端管理工具
發行版 包管理器 包前端管理工具
Debian: deb apt-get/apt
ubuntu: deb apt-get/apt
RedHat: rpm yum/dnf
centos: rpm yum/dnf
5、程式編譯方式:
動態編譯:編譯時不會把庫文件編譯進程式,編譯好的程式不能獨立運行,需要調運庫文件,體積小。
靜態編譯:編譯時會把需要用到的庫文件都編譯進程式,編譯後程式沒有庫也可以獨立運行,體積大。
6、命令存放路徑:
普通命令:/bin /usr/bin /usr/local/bin
管理命令:/sbin /usr/sbin /usr/local/sbin
庫文件: /lib /lib64 /usr/lib /usr/lib64 /usr/local/lib /usr/local/lib64
7、命令行展開
命令行展開優先順序
1、把命令行分成單個命令詞
2、展開別名
3、展開大括弧的聲明{}
4、展開波浪線聲明~
5、命令替換$()或··
6、再次把命令行分成命令詞
7、展開文件通配符
8、準備I/O重定向
9、運行命令
8、ABI 二進位編程介面
windows: PE
LINUX: ELF
虛擬化技術
LINUX: WINE
windows: Cygwin
9、LINUX中源文件生成執行文件的過程
預處理:gcc -E hello.c -o hello.i 對hello.c文件進行預處理,生成hello.i文件
編譯:gcc -S hello.i -o hello.s 對預處理文件hello.i進行編譯,生成彙編文件hello.s
彙編:gcc -C hello.s -o hello.o 對彙編文件hello.s進行編譯,生成目標文件hello.o
鏈接:hello.o -o hello 對目標文件hello.o文件進行鏈接,生成可執行文件
gcc hello.c -o hello2 一步到位,直接生成執行文件
選項:
-c 源文件 把源文件編譯成目標文件
-o 新名稱 目標文件1 目標文件2 把多個目標文件鏈接成可執行文件,並以新名稱命名
-O 此選項主要用於優化編譯
-l 庫文件名 指定編譯時需要的庫文件,此庫文件名不用寫開頭字母lib和結尾字母so
-L 庫文件路徑 路徑為目錄,指定庫文件在什麼位置搜索。省略的話預設在/lib /lib64 /usr/lib /usrlib64等位置搜索
-I 頭文件 指定編譯時需要用到的頭文件
10、軟體包名
軟體名-軟體版本號-編譯版本號-適用平臺-尾碼
適用平臺
noarch 無論任何機型都行
i386 只要是x86平臺的架構都支持
i686 32位平臺
x86_64 64位平臺
示例: 查看目錄內各個平臺架構的數量
ls *.rpm | rev | cut -d . -f2 |rev | sort | uniq -c
練習題:在出現進度條出現的時候按esc鍵,進入光碟,然後進入救援模式 進行恢復 被刪除的基礎庫文件/lib64/libc.so.6
11、雜項
ldconfig命令
此命令會更具/etc/ldconfig配置文件中記載目錄中的庫文件載入入緩存中,以提高調用程式的執行速度
-p 顯示已經載入到記憶體中的庫文件
autofs工具可以自動掛在/misc/cd目錄下
yum -y install autofs
systemctl enable --now autofs
二、軟體包和包管理器
rpm命
此命令主要是通過資料庫記錄的方式來管理軟體的安裝、卸載、升級、查詢、校驗等等。
rpm軟體的數據包保存在/var/lib/rpm目錄中,如果此目錄中的數據損壞可以通過rpm --rebuilddb重建資料庫
選項:
-i --install 安裝
-v 顯示詳細進度
-h 顯示百分比,一個#表示2%
-q 查詢
-qa 列出所有已安裝的包的,依賴於/var/lib/rpm內的資料庫
rpm -qa "*http*" 最好加上雙引號,怕出問題。可以直接模糊搜索
-qi 查詢某個已安裝過的安裝包的信息
-qpi 查詢指定未安裝的安裝包的信息
-ql 查詢指定已安裝的安裝包的安裝文件列表
-qpl 查詢指定未安裝的安裝包的要安裝文件列表
-qf 查詢某個命令或文件來自於哪個安裝包。很有用
-q --whatprovides /PATH/TO/COMMAND 查詢某個命令由哪個安裝包所提供
-q --whatrequires 查詢指定的安裝包被哪個包所依賴
-qc 查詢指定安裝包的配置文件
-qd 查詢指定安裝包的幫助文檔
-q --changelog 查詢指定安裝包的變更歷史
-q --scripts 查詢指定安裝包的腳本
-q --provides 查詢指定安裝包的提供了哪些依賴性
安裝腳本分為:
安裝前 preinstall
安裝後 postinstall
卸載前 preuninstalll
卸載後 postuninstalll
-U 或 --Update 升級或安裝軟體包
-F 或 --Freshen 只升級,如果沒有不安裝
-e --erase 卸載,如果卸載的時候別的包,依賴於要下載的包,就卸載不了
--root= 指定根目錄
--nodeps 忽略依賴性,強行安裝卸載
--force 強制安裝
--replacepkgs 重裝 和 force差不多,多用於重新安裝老版本軟體
包校驗
--import 導入密鑰
-K 或 --checksig 檢查簽名
-V 查詢文件是否有修改
-Va 檢查所有安裝包,看看哪些包被修改過
S file size differs 文件大小是否被改變
M modediffers 文件的類型或文件屬性是否被改變
5 MD5
D device major/minor number設備的主次代碼號是否被修改
L readlink path 軟連接指向路徑是否被修改
U user ownership 屬主是否被修改
G group ownership 屬組是否被修改
T mtime differ 文件的mtime是否被修改
P
c 配置文件 config file
d 文件 documentation
g 鬼文件,通常時該文件不被某個軟體所包含,較少發生 ghost file
l 授權文件 license file
r 自述文件 read me
yum命令
同一臺電腦上,只能運行一個yum。yum的日誌文件是/var/log/yum.log centos8:/var/log/dnf.log
命令的選項優先順序高於配置文件
-y 不詢問,自動安裝
-q 或--quiet 靜默安裝
install 安裝
reinsatll 重新安裝
remove 卸載
update 升級
history 安裝歷史
history info # 具體查看安裝的幾個文件
history undo # 卸載指定第幾次操作
history redo # 重新安裝指定的第幾次操作
list 列表
repolist 倉庫列表
search 搜索
deplist 查詢依賴關係
info 查看軟體信息
repolist [all] 顯示yum源列表
--enablerepo=* 臨時啟用指定某個源
--disablerepo=* 臨時禁用指定某個源
--showduplicates 顯示重覆的源
--noplugins 禁用所有插件
clean all 清理緩存
provides /PATH/TO/COMMAND 查詢某個命令是由哪個安裝包提供
--nogpgcheck 禁止檢查gpgcheck,即使配置文件中指定了需要檢查,命令行的優先順序高於配置文件
包組
安裝卸載包組在引用包組名的時候需要加上引號
groupinstall 安裝包組
groupupdate 包組升級
grouplist 查詢包組列表
groupremove 包組卸載
groupinfo 查詢包組的信息
yum的repo配置文件中的變數
$releasever 當前OS的發行版的主版本號 如 6 7 8
$arch 平臺 如:i386 x86_64
$basearch 基礎平臺 如:1386 ppc arm
createrepo命令
createrepo [options] <directory>
--basedir path 用戶一定輸出repodata的位置。常用於指向軟體包的父目錄
dpkg包管理器
-i 安裝
dpkg -i package.deb
-r 不完全卸載
dpkg -r package.deb
-l 已安裝包的列表
dpkg -l
-L PACKAGE 列出軟體包所包含的文件,相當於rpm -ql
-S FILE 查詢某個文件屬於哪個包,相當於rpm -qf
-a 配置所偶沒有配置的軟體包
-c
apt命令
包前端管理工具,類似yum命令。debian系統的軟體包前端管理工具。之前的叫apt-get
apt install
apt remove
apt purge
apt update
apt upgrade
apt search
apt show
三、倉庫
倉庫一般由包文件、包文件元數據組成。客戶端會先下載元數據下載到本地緩存中。
然後校驗元數據,看看元數據是否下載有無問題。
根據元數據內信息再到倉庫中下載對應的各種包文件和依賴包文件。
最後安裝。
企業中可以單獨新建一個軟體倉庫伺服器。通過網路服務(http https ftp)共用給區域網內電腦遠程安裝。
本地電腦需要配置倉庫客戶端
centos 8中由兩個軟體倉庫 Base倉庫和AppStream倉庫
repodata 元數據存放目錄
Packages 軟體包存放目錄
關於倉庫路徑就是repodata所在的父目錄的絕對路徑就是倉庫路徑
倉庫配置文件必須放在yum.repo.d目錄下。尾碼必須是.repo
倉庫元數據存放路徑/var/cache/yum
yum.conf(centos7)配置文件{
cachedir=/var/cache/yum/$basearch/$releasever
keepcache=0
debuglevel=2
logfile=/var/log/yum.log
exactarch=1
obsoletes=1
gpgcheck=1
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
}
dnf.conf(centso8)配置文件{
gpgcheck=1 是否安裝前檢測簽名
installonly_limit=3 併發安裝
clean_requirements_on_remove=True 安裝後清空軟體
best=True 如果多個倉庫中某個軟體由多個版本,預設指定安裝最新版本
}
repo配置倉庫{}
[] 中括弧內的是倉庫ID,必須項
name=Base 倉庫名
mirrorlist= 倉庫路徑,
baseurl= 倉庫路徑,建議使用國內
gpgcheck=1 校驗包簽名
enabled=1 是否啟用倉庫,如果不寫,預設是啟用的
gpgkey= 簽名保存路徑
創建私有倉庫
yum -y install httpd
systemctl enable --now httpd
mkdir /var/www/html/centos/8
mount /dev/sr0 /var/www/html/centos/8
用於同步倉庫中的軟體和元數據
dnf reposync --repoid=REPOID --download-metadata -p /path centos8
reposync --repoid=REPOID --download-metadata -p /path centos7
creatrepo /var/www/heml/epel/ 手工創建元數據
--basedir 指定repodata存放位置
四、源碼編譯安裝
./configure 最終目的是生成Makefile文件
1、通過選型傳遞參數,指定安裝路徑、啟用特性等,執行時會參考用戶的指定的選項以及模板文件Makefile.in 生成Makefile
2、檢查依賴到的外部環境,如依賴的軟體包
選項:
--prefix=PATH/TO/SOMEDIR 指定總安裝目錄
--sysconfdir=DIR 指定配置文件安裝目錄
備註:
autoconf命令,用來生成configure腳本。部分軟體沒有configure腳本,需要事先自己手工生成,然後再去執行./configure等後續編譯安裝步驟,也可能已經實現提供號了Makefile文件
automake命令,用於生成Makfiel.in模板文件
make
根據上一步生成的Makefile文件,檢測依賴環境,進行構建應用程式
執行make命令之前一定要進入到解壓目錄,只有在解壓目錄才能執行成功make
make命令
選項:
-j # 如果軟體較大,可以指定多個CPU同時工作
備註:
make命令這一步也會檢查環境依賴配置,一般情況下是很順利,如果這一步檢測依賴環境報錯,
可能說明上一步configure配置處的Makefile文件有問題,需要刪掉整個文件夾,重新來。要不會出現莫名其妙的問題。
make install
複製文件到相應路徑
make install 命令會自動創建目錄。不用手工創建
可以通過README INSTALL文件獲取安裝幫助
開法工具:make gcc
開發環境:開發庫(gblic:標準庫) 頭文件
系統通過修改/etc/man_db.conf文件指定新軟體幫助文件的路徑。以後就能直接使用man幫助了
五、備註
生產環境一般是最小安裝,推薦安裝軟體明細。
gcc
make
gcc-c++
glibc glibc-devel
pcre pcre-devel 與正則表達式相關的包
openssl openssl-devel 與openssl加密相關的包
systemd-devel
zlib-devel 與壓縮相關的包
vim
lrzsz 傳輸文件工具,xshell給主機傳送文件需要依賴此包,它提供了rz命令
tree
tmux screen 視窗工具。在斷開鏈接後不會終止
lsof
tcpdump 抓包工具
wget 下載工具
net-tools 網路工具
iotop io的檢測工具
bc bzip2 zip unzip
nfs-utils
man-pages