Cygwin系列(八):命令列軟體包管理器apt-cyg
本文共2500餘字,預計閱讀時間9分鐘,本文知乎連線:Cygwin系列(八):命令列軟體包管理器apt-cyg,本文同步釋出於silaoA的部落格和微信公眾號平。 關注學習瞭解更多的Cygwin、Linux技術。
前文 Cygwin系列(四):一步一步搭建Cygwin最小系統和Cygwin系列(七):Cygwin軟體包管理相關配置著重介紹了
setup
作為包管理器的使用方法、相關配置檔案,本文介紹Cygwin中另一個值得嘗試的
命令列包管理器
——
apt-cyg
。
目 錄
0x00 初識apt-cyg
0x01 安裝apt-cyg
0x02 基本使用
mirror
cache
install/remove
update
download
show
depends/rdepends
list
listall
listfiles
category
search/searchall
選項說明
0x03 使用感受及建議
更多閱讀
0x00 初識apt-cyg
setup
是Cygwin中圖形介面的包管理器,操作上基本是傻瓜式的點選“下一步”;與之對應,存在命令列包管理器。
GNU/Linux世界裡常用有
apt-get
、
yum
、
pacman
等著名的命令列包管理器,成熟穩定、強大無比,Cygwin下則有
apt-cyg
這個有好易用的命令列包管理器,從名字一看便是模仿
apt-get
。Github上託管了39種shell語言版的apt-cyg,點選連線便可看到,本文要說的是搜尋結果排第一的transcode-open/apt-cyg,遵循MIT開源協議釋出,2016年釋出v1版本後便再未更新過。它其實就是一個Shell指令碼,幫助使用者查詢、安裝、解除安裝軟體包,還可以根據檔名稱反向查詢所屬的軟體包。
0x01 安裝apt-cyg
transcode-open/apt-cyg頁面上推薦的安裝步驟為:
lynx -source rawgit。com/transcode-open/apt-cyg/master/apt-cyg > apt-cyg
install apt-cyg /bin
第1行是使用
lynx
命令將
apt-cyg
指令碼從網站下載儲存至當前目錄的apt-cyg檔案,第2行是使用
install
命令將apt-cyg檔案安裝至
/bin
目錄下,這一步其實包含了兩個動作:①將apt-cyg檔案複製到
/bin
目錄,②增加
/bin/apt-cyg
檔案可執行許可權,這樣使用者可以在任意位置使用
apt-cyg
命令。
也可以手工的方式用瀏覽器下載
apt-cyg
指令碼至本地,透過
cp
命令複製到
/bin
目錄,再透過
chmod
命令增加
/bin/apt-cyg
檔案可執行許可權。
apt-cyg
執行過程中依賴
bash
、
tar
、
wget
、
bzip2
、
gawk
、
xz
軟體包中的命令來完成檔案下載、文字分析、壓縮/解壓等基本功能,需要先在Cygwin中安裝好這些軟體包。其中,
bash
、
tar
、
wget
、
gawk
屬於Base類,在安裝最小系統時已包含;
bzip2
、
xz
屬於Archive類,需要透過
setup
先裝上,確保後續執行
apt-cyg
不出錯。
0x02 基本使用
老規矩,先試試
apt-cyg ——help
看用法提示,可看出
apt-cyg
命令形式為
apt-cyg [operation] [options] [targets]
,其中operation代表所支援的15個操作,以下逐一說明。檢視
apt-cyg
檔案指令碼原始碼,可以發現指令碼實際是透過相應函式一一實現這15個操作,並且
apt-cyg
和
setup
共用了一套配置檔案。
mirror
apt-cyg mirror [url]
可以檢視/設定映象源地址。如果未給url引數,
apt-cyg
查詢
/etc/setup/setup。rc
檔案中
last-mirror
項並打印出來,以此作為映象源地址;如果給定了url引數,則將
/etc/setup/setup。rc
檔案中
last-mirror
項的值修改為url。
cache
英文cache的意思是快取,不管是
setup
還是
apt-cyg
,安裝軟體包時,均需從映象源站點下載檔案,儲存到本地的位置即稱“快取”,並且本地快取的目錄結構和映象站點保持一致。
apt-cyg cache [path]
可以檢視/設定本地快取頂層路徑。如果未給path引數,
apt-cyg
查詢
/etc/setup/setup。rc
檔案中
last-cache
項並打印出來,以此作為本地快取頂層路徑;如果給定了path引數,則將
/etc/setup/setup。rc
檔案中
last-cache
項的值修改為path。
在使用
setup
或
apt-cyg
時,允許每次設定不同的映象源,本地快取頂層路徑之下,會給不同的映象源建不同的目錄,儲存檔案不會造成混亂。
但一般不建議這麼做
,每個映象源站點同步時間有先有後,儲存的軟體包清單和依賴就不一樣,在安裝時可能造成版本混亂。
install/remove
apt-cyg install [targets]
和
apt-cyg remove [targets]
分別是安裝、解除安裝軟體包,targets引數指定軟體包名稱,可以同時多個。
apt-cyg
會從
/etc/setup/installed。db
檔案中查詢本地系統中已經安裝的軟體包記錄,如果已安裝,再次install則跳過,也就是說
apt-cyg
不會自動更新軟體包至最新版本
;同理,如果未安裝,卻要remove則也跳過。
如果
installed。db
中沒有記錄,那麼install操作便會觸發下載、解壓至根目錄、執行安裝後腳本等一系列動作,最後在
installed。db
中增加該軟體包的記錄。
apt-cyg
還支援
依賴解析
,安裝軟體包過程中,遞迴地安裝每一個依賴。但remove操作不會把解除安裝軟體包的依賴。
update
apt-cyg update
是更新軟體源的軟體包清單,即根據
/etc/setup/setup。rc
中配置的
last-mirror
項和本地Cygwin的指令集架構版本(x86或者x86_64),呼叫
wget
去映象站點下載最新的
setup。ini
檔案至本地快取。
在進行install操作時,會自動先update。
download
apt-cyg download [targets]
僅將軟體包下載到本地快取但不安裝,targets引數指定軟體包名稱,可以同時多個。在進行install操作時,下載動作實質就是download。
show
apt-cyg show targets
展示軟體包基本資訊,targets引數指定軟體包名稱,可以同時多個。
apt-cyg
呼叫
awk
、
sed
在本地快取的
setup。ini
檔案中查詢匹配的軟體包的名稱、版本、描述、依賴等資訊。如Cygwin系列(七):Cygwin軟體包管理相關配置所舉例的glew軟體包。
setup。ini檔案中glew軟體包記錄
depends/rdepends
apt-cyg depends targets
查詢軟體包的依賴,
apt-cyg rdepends targets
查詢依賴該軟體包的更高層軟體包,均以樹形展示,targets引數可同時指定多個軟體包名稱。
依賴/反向依賴的解析,實質是呼叫
awk
、
sed
在本地快取的
setup。ini
檔案中根據軟體包名稱暴力搜尋匹配。
list
apt-cyg list targets
在
/etc/setup/installed。db
檔案中查詢與targets引數匹配的已安裝軟體包的名稱,targets引數為正則表示式,可以同時多個。如果未指定targets引數,則列出所有已安裝軟體包。例如:
$ apt-cyg list xz bzip2
xz
#匹配xz
bzip2
#匹配bzip2
libzip2
#匹配bzip2
listall
與list類似,但
apt-cyg list targets
是在本地快取的
setup。ini
檔案中查詢與targets引數匹配的軟體包的名稱,targets引數為正則表示式,可以同時多個。那麼,不論本地是否已安裝,只要映象站點中包含,listall均列出,即listall查詢範圍更廣。例如:
$ apt-cyg listall bzip2
bzip2
bzip2-debuginfo
libzip2
mingw64-i686-bzip2
mingw64-x86_64-bzip2
pbzip2
listfiles
apt-cyg listfiles targets
是查詢指定軟體包所含的檔案清單,功能與
cygcheck -l
相同,targets引數指定軟體包名稱,可以同時多個。
apt-cyg
是透過檢視
/etc/setup/
下
package。lst。gz
的檔案實現這個功能的。
category
apt-cyg category targets
列出某個類別下的所有軟體包名稱,targets引數為類別名稱(如Base、Archive),類別名稱見
setup
執行介面。例如:
$ apt-cyg category Base
alternatives
base-cygwin
base-files
bash
coreutils
crypto-policies
cygutils
cygwin
dash
diffutils
editrights
file
findutils
gawk
getent
grep
gzip
hostname
info
ipc-utils
libreadline7
libssl1。1
login
man-db
mintty
ncurses
openssl
rebase
run
sed
tar
terminfo
tzdata
util-linux
vim-minimal
which
_autorebase
search/searchall
apt-cyg search targets
在本地快取中查詢匹配targets的軟體包名稱,過程相當於是listfiles反向暴力搜尋匹配,
apt-cyg searchall targets
在
https://
cygwin。com/cgi-bin2/pac
kage-grep。cgi
查詢內容與targets匹配的軟體包,targets引數為正則表示式,可以同時多個。searchall和
cygcheck -f
功能相同,但後者查詢範圍僅包括本地已安裝軟體包,前者範圍更廣。這對於查詢某個標頭檔案、庫檔案所屬軟體包比較有用,在構建程式過程中遇到報錯“xx符號未定義的引用”,極有可能就是缺少某個開發庫,但要安裝開發庫首先得查出它屬於哪個包。
在web頁面searchall案例
對比命令列和Web頁面查詢兩種方式,在
https://
cygwin。com/cgi-bin2/pac
kage-grep。cgi
查詢結果更準確,命令列經常無匹配或者匹配過多,對比http請求提交引數,疑似對特殊符號處理不同,應是
apt-cyg
指令碼本身不夠完善。
web頁面vs命令列searchall
選項說明
——nodeps
選項,用於忽略依賴解析,不建議使用。
——version
選項列印版本資訊。
——help
選項或不帶任何引數和選項,用於列印使用方法。
0x03 使用感受及建議
使用
apt-cyg
過程,體驗確實比
setup
輕量、快捷不少,命令列簡潔高效,圖形介面操作簡易,二者各有所長,常用操作一般是install、remove、show、listfiles、searchall。
但在透過
apt-cyg
安裝軟體包時,偶爾遇到執行完命令發現僅在
/etc/setup/installed。db
增加記錄實際卻未安裝的經歷。安裝執行完後建議
cygcheck -c
,檢查軟體包安裝完整性,如不完整則用
setup
重新安裝。另外,上文對比了
apt-cyg searchall
和網頁查詢的結果,後者更加準確,建議使用網頁查詢替代
apt-cyg searchall
。
更多閱讀
上一篇 Cygwin系列(七):Cygwin軟體包管理相關配置
下一篇 Cygwin系列(九):Cygwin學習路線
偽碼人專欄目錄導航(持續更新。。。)
Cygwin前傳:從割據到互補
Cygwin系列(九):Cygwin學習路線
微軟WSL——Linux桌面版未來之光
GNU Wget 爬蟲?試一試
silaoA的部落格。https://silaoa。github。io
如本文對你有幫助,或內容引起極度舒適,歡迎分享轉發與留言交流
►本文為原創文章,如需轉載請私信知乎賬號silaoA或聯絡公眾號偽碼人(We_Coder)。
都看這裡了,不妨點個贊再走唄
上一篇:寶馬有什麼黑點?