您當前的位置:首頁 > 攝影

Cygwin系列(八):命令列軟體包管理器apt-cyg

作者:由 silaoA 發表于 攝影時間:2019-05-25

本文共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軟體包。

Cygwin系列(八):命令列軟體包管理器apt-cyg

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符號未定義的引用”,極有可能就是缺少某個開發庫,但要安裝開發庫首先得查出它屬於哪個包。

Cygwin系列(八):命令列軟體包管理器apt-cyg

在web頁面searchall案例

對比命令列和Web頁面查詢兩種方式,在

https://

cygwin。com/cgi-bin2/pac

kage-grep。cgi

查詢結果更準確,命令列經常無匹配或者匹配過多,對比http請求提交引數,疑似對特殊符號處理不同,應是

apt-cyg

指令碼本身不夠完善。

Cygwin系列(八):命令列軟體包管理器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

如本文對你有幫助,或內容引起極度舒適,歡迎分享轉發與留言交流

Cygwin系列(八):命令列軟體包管理器apt-cyg

Cygwin系列(八):命令列軟體包管理器apt-cyg

►本文為原創文章,如需轉載請私信知乎賬號silaoA或聯絡公眾號偽碼人(We_Coder)。

都看這裡了,不妨點個贊再走唄

標簽: cyg  APT  軟體包  setup  targets