列出已經安裝的軟件包
https://wiki.archlinux.org/index.php/Pacman_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87) 維基
pacman -Q
查看virtualbox包是否已經安裝
pacman -Q virtualbox
查看已安裝的包virtualbox的詳細信息
pacman -Qi virtualbox
列出已安裝包virtualbox的所有文件
pacman -Ql virtualbox
查找某個文件屬於哪個包
pacman -Qo /etc/passwd
查詢包組
pacman -Sg
查詢包組所包含的軟件包
pacman -Sg gnome
搜索virtualbox相關的包
pacman -Ss virtualbox
從數據庫中搜索virtualbox的信息
pacman -Si virtualbox
僅同步源
sudo pacman -Sy
更新系統
sudo pacman -Su
同步源並更新系統
sudo pacman -Syu
同步源后安裝包
sudo pacman -Sy virtualbox
從本地數據庫中獲取virtualbox的信息,並下載安裝
sudo pacman -S virtualbox
強制安裝virtualbox包
sudo pacman -Sf virtualbox
刪除virtualbox
sudo pacman -R virtualbox
強制刪除被依賴的包(慎用)
sudo pacman -Rd virtualbox
刪除virtualbox包及依賴其的包
sudo pacman -Rc virtualbox
刪除virtualbox包及其依賴的包
sudo pacman -Rsc virtualbox
清理/var/cache/pacman/pkg目錄下的舊包
sudo pacman -Sc
清除所有下載的包和數據庫
sudo pacman -Scc
安裝下載的virtualbox包(有時候需要降級包的時候就用這個)
cd /var/cache/pacman/pkg
sudo pacman -U virtualbox-5.2.12-1-x86_64.pkg.tar.xz
升級時不升級virtualbox包
sudo pacman -Su --ignore virtualbox
總結
Manjaro也提供了GUI的包管理工具,可以直接在界面點一點就可以安裝軟件了。
Pacman是Arch Linux 的包管理器。它將一個簡單的二進制包格式和易用的構建系統結合了起來。不管軟件包是來自官方的 Arch 庫還是用戶自己創建,Pacman 都能方便得管理。
更新系統
在 Archlinux 中,使用一條命令即可對整個系統進行更新:
pacman -Syu
如果你已經使用pacman -Sy將本地的包數據庫與遠程的倉庫進行了同步,也可以只執行:pacman -Su
安裝包
➔ pacman -S 包名:例如,執行 pacman -S firefox 將安裝 Firefox。你也可以同時安裝多個包,
只需以空格分隔包名即可。
➔ pacman -Sy 包名:與上面命令不同的是,該命令將在同步包數據庫后再執行安裝。
➔ pacman -Sv 包名:在顯示一些操作信息后執行安裝。
➔ pacman -U:安裝本地包,其擴展名為 pkg.tar.gz。
➔ pacman -U http://www.example.com/repo/example.pkg.tar.xz 安裝一個遠程包(不在 pacman 配置的源里面)
刪除包
➔ pacman -R 包名:該命令將只刪除包,保留其全部已經安裝的依賴關系
➔ pacman -Rs 包名:在刪除包的同時,刪除其所有沒有被其他已安裝軟件包使用的依賴關系
➔ pacman -Rsc 包名:在刪除包的同時,刪除所有依賴這個軟件包的程序
➔ pacman -Rd 包名:在刪除包時不檢查依賴。
搜索包
➔ pacman -Ss 關鍵字:在倉庫中搜索含關鍵字的包。
➔ pacman -Qs 關鍵字: 搜索已安裝的包。
➔ pacman -Qi 包名:查看有關包的詳盡信息。
➔ pacman -Ql 包名:列出該包的文件。
其他用法
➔ pacman -Sw 包名:只下載包,不安裝。
➔ pacman -Sc:清理未安裝的包文件,包文件位於 /var/cache/pacman/pkg/ 目錄。
➔ pacman -Scc:清理所有的緩存文件。
首先pacman安裝軟件包有兩種理由:
1、通過-U、-S指定安裝。
2、作為某軟件包的依賴被安裝的。
安裝軟件包:
# pacman -S package_name
安裝一個組:
# pacman -S group_name
這兩個是一致的,輸入組名會讓選安裝哪些包,輸入包名則直接安裝。
查組里包括哪些包:
# pacman -Sg group_name
卸載包/組:
# pacman -R(u)(s)(n) package/group_name
(刪除依賴)(刪除其他不需要用的包(有待研究))(不保留重要配置文件)
系統升級:
# pacman -Syu
搜索數據庫:
# pacman -Ss package/group_name
搜索本地安裝包:
# pacman -Qs package/group_name
列舉數據庫某包的詳細信息:
# pacman -Si package_name
列舉已安裝某包的詳細信息:
# pacman -Qi package_name
列舉某已安裝軟件的已安裝文件:
# pacman -Ql package_name
查看作為依賴被裝入且不被任何軟件依賴的軟件包(孤兒):
# pacman -Qdt
查看指定(-U/S)安裝且不被任何其他軟件依賴的包:
# pacman -Qet
以上兩句,第一句把-t去了,就是查詢所有作為依賴被安裝的包;第二句把-t去了,就是查詢被指定安裝的包。
列舉特定包的依賴關系樹:
# pactree package_name
安裝本地/遠程包:
# pacman -U 路徑/網址
將本地包存入緩存庫:
# pacman -U file://路徑
Pacman 是一個命令行工具,這意味着當你執行下面的命令時,必須在終端或控制台中進行。
1、更新系統
在 Arch Linux 中,使用一條命令即可對整個系統進行更新:
pacman -Syu
如果你已經使用 pacman -Sy
將本地的包數據庫與遠程的倉庫進行了同步,也可以只執行:
pacman -Su
2、安裝包
pacman -S 包名
例如,執行pacman -S firefox
將安裝 Firefox。你也可以同時安裝多個包,只需以空格分隔包名即可。pacman -Sy 包名
與上面命令不同的是,該命令將在同步包數據庫后再執行安裝。pacman -Sv 包名
在顯示一些操作信息后執行安裝。pacman -U
安裝本地包,其擴展名為 pkg.tar.gz。
3、刪除包
pacman -R 包名
該命令將只刪除包,不包含該包的依賴。pacman -Rs 包名
在刪除包的同時,也將刪除其依賴。pacman -Rd 包名
在刪除包時不檢查依賴。
4、搜索包
pacman -Ss 關鍵字
這將搜索含關鍵字的包。pacman -Qi 包名
查看有關包的信息。pacman -Ql 包名
列出該包的文件。
5、其他用法
pacman -Sw 包名
只下載包,不安裝。pacman -Sc
Pacman 下載的包文件位於 /var/cache/pacman/pkg/ 目錄。該命令將清理未安裝的包文件。pacman -Scc
清理所有的緩存文件。
關於 Pacman 更加詳細的用法,可以閱讀 Pacman 的手冊頁
Pacman 是一個 軟件包管理器, 作為 ArchLinux發行版的一部分. 它最早由 Arch Linux 的 Judd Vinet開發. Pacman 可以解決安裝過程中的依賴問題,自動下載並且安裝所有需要的軟件包。Pacman包管理器是Arch Linux的一大亮點。它將一個簡單的二進制包格式和易用的構建系統結合了起來。Pacman使得簡單的管理與自定義軟件包成為了可能,而不論他們來自於官方的Arch軟件庫或是用戶自己創建的
[zhangy@BlackGhost ~]$ pacman -h
用法: pacman <操作> [...]
操作:
pacman {-h --help} //幫助
pacman {-V --version} //查看版本
pacman {-D --database} <選項> <軟件包> //pacman管理數據庫選項
pacman {-Q --query} [選項] [軟件包] //查詢安裝包
pacman {-R --remove} [選項] <軟件包> //刪除安裝包
pacman {-S --sync} [選項] [軟件包] //安裝安裝包
pacman {-U --upgrade} [選項] <文件> //更新安裝包
使用 'pacman {-h --help}' 及某個操作以查看可得的選項
[zhangy@BlackGhost ~]$ pacman -D --help
用法: pacman {-D --database} <選項> <軟件包>
選項:
--asdeps 標記為非單獨指定安裝的軟件包
--asexplicit 標記為單獨指定安裝的軟件包
--config <路徑> 指定另外的配置文件
--logfile <路徑> 指定另外的日志文件
--noconfirm 不詢問確認
--noprogressbar 下載文件時不顯示進度條
--noscriptlet 不執行安裝小腳本
-v, --verbose 循環執行
-- debug 顯示除錯信息
-r, --root <路徑> 指定另外的安裝根目錄
-b, --dbpath <路徑> 指定另外的數據庫位置
--cachedir <目錄> 指定另外的軟件包緩存位置
--arch <架構> 設定另外的架構
[zhangy@BlackGhost ~]$ pacman -Q --help
用法: pacman {-Q --query} [選項] [軟件包]
選項:
-c, --changelog 查看某軟件包的更新日志
-d, --deps 列出所有作為依賴關系安裝的軟件包 [過濾器]
-e, --explicit 列出所有單獨指定安裝的軟件包 [過濾器]
-g, --groups 查看某軟件包組所屬的所有軟件包
-i, --info 查看軟件包信息 (-ii 查看備份文件)
-k, --check 檢查該軟件包擁有的文件是否存在
-l, --list 列出被查詢軟件包的內容
-m, --foreign 列出沒有在同步數據庫時找到的已安裝軟件包 [過濾器]
-o, --owns <文件> 查詢哪個軟件包擁有 <文件>
-p, --file <軟件包> 從某個軟件包而不是數據庫查詢
-s, --search 搜尋符合指定字符串的已安裝本地的軟件包
-t, --unrequired 列出所有不被其他軟件包要求的軟件包 [過濾器]
-u, --upgrades 列出所有可升級的軟件包 [過濾器]
-q, --quiet 在查詢或搜索時顯示較少的信息
--config <路徑> 指定另外的配置文件
--logfile <路徑> 指定另外的日志文件
--noconfirm 不詢問確認
--noprogressbar 下載文件時不顯示進度條
--noscriptlet 不執行安裝小腳本
-v, --verbose 循環執行
-- debug 顯示除錯信息
-r, --root <路徑> 指定另外的安裝根目錄
-b, --dbpath <路徑> 指定另外的數據庫位置
--cachedir <目錄> 指定另外的軟件包緩存位置
--arch <架構> 設定另外的架構
[zhangy@BlackGhost ~]$ pacman -R --help
用法: pacman {-R --remove} [選項] <軟件包>
選項:
-c, --cascade 刪除軟件包及所有的依賴於此的軟件包
-d, --nodeps 略過依賴關系檢查
-k, --dbonly 只刪除數據庫記錄,不刪除文件
-n, --nosave 同時刪除配置文件
-s, --recursive 同時刪除 (不會破壞其他軟件包的) 依賴關系(-ss·也包括單獨指定安裝的依賴關系)
-u, --unneeded 同時刪除不需要的 (且不會破壞其他軟件包的) 依賴關系
--print 僅打印目標而不執行操作
--print-format <字符串>指定如何打印目標
--config <路徑> 指定另外的配置文件
--logfile <路徑> 指定另外的日志文件
--noconfirm 不詢問確認
--noprogressbar 下載文件時不顯示進度條
--noscriptlet 不執行安裝小腳本
-v, --verbose 循環執行
-- debug 顯示除錯信息
-r, --root <路徑> 指定另外的安裝根目錄
-b, --dbpath <路徑> 指定另外的數據庫位置
--cachedir <目錄> 指定另外的軟件包緩存位置
--arch <架構> 設定另外的架構
[zhangy@BlackGhost ~]$ pacman -S --help
用法: pacman {-S --sync} [選項] [軟件包]
選項:
--asdeps 作為非單獨指定安裝的軟件包安裝
--asexplicit 作為單獨指定安裝的軟件包安裝
-c, --clean 從緩存目錄中刪除舊軟件包 (-cc 清除所有)
-d, --nodeps 略過依賴關系檢查
-f, -force 強制安裝,覆蓋存在沖突的文件
-g, --groups 查看某軟件包組所屬的所有軟件包
-i, --info 查看軟件包信息
-l, --list <軟件庫> 查看在該軟件庫中的軟件包清單
-s, --search 按照指定字符串查詢遠端軟件庫
-u, --sysupgrade 升級所有已安裝的軟件包 (-uu 可啟用降級)
-w, --downloadonly 下載但不安裝/升級軟件包
-y, --refresh 從服務器下載新的軟件包數據庫
--needed 不重新安裝已經為最新的軟件包
--ignore <軟件包> 升級時忽略某個軟件包 (可多次使用)
--ignoregroup <軟件包組>升級時忽略某個軟件包組 (可多次使用)
--print 僅打印目標而不執行操作
--print-format <字符串>指定如何打印目標
-q, --quiet 在查詢或搜索時顯示較少的信息
--config <路徑> 指定另外的配置文件
--logfile <路徑> 指定另外的日志文件
--noconfirm 不詢問確認
--noprogressbar 下載文件時不顯示進度條
--noscriptlet 不執行安裝小腳本
-v, --verbose 循環執行
-- debug 顯示除錯信息
-r, --root <路徑> 指定另外的安裝根目錄
-b, --dbpath <路徑> 指定另外的數據庫位置
--cachedir <目錄> 指定另外的軟件包緩存位置
--arch <架構> 設定另外的架構
[zhangy@BlackGhost ~]$ pacman -U --help
用法: pacman {-U --upgrade} [選項] <文件>
選項:
--asdeps 作為非單獨指定安裝的軟件包安裝
--asexplicit 作為單獨指定安裝的軟件包安裝
-d, --nodeps 略過依賴關系檢查
-f, -force 強制安裝,覆蓋存在沖突的文件
-k, --dbonly 添加數據庫記錄,不安裝或保持現存文件
--print 僅打印目標而不執行操作
--print-format <字符串> 指定如何打印目標
--config <路徑> 指定另外的配置文件
--logfile <路徑> 指定另外的日志文件
--noconfirm 不詢問確認
--noprogressbar 下載文件時不顯示進度條
--noscriptlet 不執行安裝小腳本
-v, --verbose 循環執行
-- debug 顯示除錯信息
-r, --root <路徑> 指定另外的安裝根目錄
-b, --dbpath <路徑> 指定另外的數據庫位置
--cachedir <目錄> 指定另外的軟件包緩存位置
--arch <架構> 設定另外的架構
安裝包
安裝或者升級單個軟件包
pacman -S mysql
2,有時候在不同的軟件倉庫中,一個軟件包有多個版本(比如extra和community)。你可以選擇一個來安裝
pacman -S extra/mysql
3,步包數據庫並且安裝一個軟件包
pacman -Sy mysql
( 0)
( 8)
刪除包
1,刪除單個軟件包,保留其全部已經安裝的依賴關系
pacman -R mysql
2,刪除指定軟件包,及其所有沒有被其他已安裝軟件包使用的依賴關系:
pacman -Rs mysql
( 0)
( 1)
升級系統
pacman -Syu
( 0)
( 2)
查詢包
查詢可用安裝包
pacman -Ss mysql
要查詢已安裝的軟件包:
pacman -Qs mysql
( 0)
( 1)
其他用法
清理當前未被安裝軟件包的緩存
pacman -Sc
下載包而不安裝
pacman -Sw mysql
( 0)
( 2)
# pacman -Rsc package_name #要刪除軟件包和所有依賴這個軟件包的程序
# pacman -Rdd package_name #要刪除軟件包,但是不刪除依賴這個軟件包的其他程序: # pacman 刪除某些程序時會備份重要配置文件,在其后面加上*.pacsave擴展名。-n 選項可以刪除這些文件 # pacman -Rn package_name # pacman -Rsn package_name # pacman -Si package_name #顯示軟件包的詳盡的信息 # pacman -Qi package_name #查詢本地安裝包的詳細信息 # pacman -Qii package_name #使用兩個 -i 將同時顯示備份文件和修改狀態 # pacman -Ql package_name #要獲取已安裝軟件包所包含文件的列表 # pacman -Qk package_name #檢查軟件包安裝的文件是否都存在 # pacman -Qo /path/to/file_name #查詢數據庫獲取某個文件屬於哪個軟件包 # pacman -Qdt #要羅列所有不再作為依賴的軟件包(孤立orphans) # pacman -Qet #要羅列所有明確安裝而且不被其它包依賴的軟件包 # pactree package_name #要顯示軟件包的依賴樹 # pactree -r package_name #檢查一個安裝的軟件包被那些包依賴
Update Proxy Rule
edit .pac/user-rule.txt
genpac -c ~/.pac/config.ini
pacman -Sy abc #和源同步后安裝名為abc的包
pacman -S abc #從本地數據庫中得到abc的信息,下載安裝abc包
pacman -Sf abc #強制安裝包abc
pacman -Ss abc #搜索有關abc信息的包
pacman -Si abc #從數據庫中搜索包abc的信息
pacman -Q # 列出已經安裝的軟件包
pacman -Q abc # 檢查 abc 軟件包是否已經安裝
pacman -Qi abc #列出已安裝的包abc的詳細信息
pacman -Ql abc # 列出abc軟件包的所有文件
pacman -Qo /path/to/abc # 列出abc文件所屬的軟件包
pacman -Syu #同步源,並更新系統
pacman -Sy #僅同步源
pacman -Su #更新系統
pacman -R abc #刪除abc包
pacman -Rd abc #強制刪除被依賴的包
pacman -Rc abc #刪除abc包和依賴abc的包
pacman -Rsc abc #刪除abc包和abc依賴的包
pacman -Sc #清理/var/cache/pacman/pkg目錄下的舊包
pacman -Scc #清除所有下載的包和數據庫
pacman -U abc #安裝下載的abs包,或新編譯的abc包
pacman -Sd abc #忽略依賴性問題,安裝包abc
pacman -Su --ignore foo #升級時不升級包foo
pacman -Sg abc #查詢abc這個包組包含的軟件包
清除無用的包
sudo pacman -R $(pacman -Qdtq)
Pacman命令介紹
用pacman很久了,一直沒有深入去研究到底它包含多少神秘的力量,每次都是pacman -Syu就簡單的把所有升級更新問題搞定實在是讓筆者懶惰了很多。不過也正是因為pacman的簡單讓筆者愛不釋手,同時Archlinux的強大靈活也讓其成為筆者最為心儀的Linux,不過筆者對Archlinux的最終評價就是-Archlinux是一款為折騰而誕生的Linux(至少對筆者來說是這樣的)。想要折騰,就用Archlinux吧。今天給大家帶來的是Archlinux下最關鍵,也是靈魂的工具pacman命令介紹(這個工具與debian,ubuntu下的apt-get十分類似),不過命令稍微復雜一些,轉過來當做給自己作參考了。
一、首先說說啥是pacman吧:
Pacman 是一個 軟件包管理器, 作為 ArchLinux發行版的一部分. 它最早由 Arch Linux 的 Judd Vinet開發. Pacman 可以解決安裝過程中的依賴問題,自動下載並且安裝所有需要的軟件包。Pacman包管理器是Arch Linux的一大亮點。它將一個簡單的二進制包格式和易用的構建系統結合了起來。Pacman使得簡單的管理與自定義軟件包成為了可能,而不論他們來自於官方的Arch軟件庫或是用戶自己創建的。
二、pacman參數詳細說明
1. [arch@ghostbb ~]$ pacman -h 2. 用法: pacman <操作> [...] 3. 操作: 4. pacman {-h --help} //幫助 5. pacman {-V --version} //查看版本 6. pacman {-D --data base} <選項> <軟件包> //pacman管理數據庫選項 7. pacman {-Q --query} [選項] [軟件包] //查詢安裝包 8. pacman {-R --remove} [選項] <軟件包> //刪除安裝包 9. pacman {-S --sync} [選項] [軟件包] //安裝安裝包 10. pacman {-U --upgrade} [選項] <文件> //更新安裝包 11. 12. 使用 'pacman {-h --help}' 及某個操作以查看可得的選項
[arch@ghostbb ~]$ pacman -h
用法: pacman <操作> [...]
操作:
pacman {-h –help} //幫助
pacman {-V –version} //查看版本
pacman {-D –database} <選項> <軟件包> //pacman管理數據庫選項
pacman {-Q –query} [選項] [軟件包] //查詢安裝包
pacman {-R –remove} [選項] <軟件包> //刪除安裝包
pacman {-S –sync} [選項] [軟件包] //安裝安裝包
pacman {-U –upgrade} [選項] <文件> //更新安裝包
使用 ‘pacman {-h –help}’ 及某個操作以查看可得的選項
1,pacman -D
1. [arch@ghostbb ~]$ pacman -D --help 2. 用法: pacman {-D --database} <選項> <軟件包> 3. 選項: 4. --asdeps 標記為非單獨指定安裝的軟件包 5. --asexplicit 標記為單獨指定安裝的軟件包 6. --config <路徑> 指定另外的配置文件 7. --logfile <路徑> 指定另外的日志文件 8. --noconfirm 不詢問確認 9. --noprogressbar 下載文件時不顯示進度條 10. --noscriptlet 不執行安裝小腳本 11. -v, --verbose 循環執行 12. -- debug 顯示除錯信息 13. -r, --root <路徑> 指定另外的安裝根目錄 14. -b, --dbpath <路徑> 指定另外的數據庫位置 15. --cachedir <目錄> 指定另外的軟件包緩存位置 16. --arch <架構> 設定另外的架構
[arch@ghostbb ~]$ pacman -D –help
用法: pacman {-D –database} <選項> <軟件包>
選項:
–asdeps 標記為非單獨指定安裝的軟件包
–asexplicit 標記為單獨指定安裝的軟件包
–config <路徑> 指定另外的配置文件
–logfile <路徑> 指定另外的日志文件
–noconfirm 不詢問確認
–noprogressbar 下載文件時不顯示進度條
–noscriptlet 不執行安裝小腳本
-v, –verbose 循環執行
— debug 顯示除錯信息
-r, –root <路徑> 指定另外的安裝根目錄
-b, –dbpath <路徑> 指定另外的數據庫位置
–cachedir <目錄> 指定另外的軟件包緩存位置
–arch <架構> 設定另外的架構
2,pacman -Q
1. [arch@ghostbb ~]$ pacman -Q --help 2. 用法: pacman {-Q --query} [選項] [軟件包] 3. 選項: 4. -c, --changelog 查看某軟件包的更新日志 5. -d, --deps 列出所有作為依賴關系安裝的軟件包 [過濾器] 6. -e, --explicit 列出所有單獨指定安裝的軟件包 [過濾器] 7. -g, --groups 查看某軟件包組所屬的所有軟件包 8. -i, --info 查看軟件包信息 (-ii 查看備份文件) 9. -k, --check 檢查該軟件包擁有的文件是否存在 10. -l, --list 列出被查詢軟件包的內容 11. -m, --foreign 列出沒有在同步數據庫時找到的已安裝軟件包 [過濾器] 12. -o, --owns <文件> 查詢哪個軟件包擁有 <文件> 13. -p, --file <軟件包> 從某個軟件包而不是數據庫查詢 14. -s, --search <regex> 搜尋符合指定字符串的已安裝本地的軟件包 15. -t, --unrequired 列出所有不被其他軟件包要求的軟件包 [過濾器] 16. -u, --upgrades 列出所有可升級的軟件包 [過濾器] 17. -q, --quiet 在查詢或搜索時顯示較少的信息 18. --config <路徑> 指定另外的配置文件 19. --logfile <路徑> 指定另外的日志文件 20. --noconfirm 不詢問確認 21. --noprogressbar 下載文件時不顯示進度條 22. --noscriptlet 不執行安裝小腳本 23. -v, --verbose 循環執行 24. -- debug 顯示除錯信息 25. -r, --root <路徑> 指定另外的安裝根目錄 26. -b, --dbpath <路徑> 指定另外的數據庫位置 27. --cachedir <目錄> 指定另外的軟件包緩存位置 28. --arch <架構> 設定另外的架構 </regex>
[arch@ghostbb ~]$ pacman -Q –help
用法: pacman {-Q –query} [選項] [軟件包]
選項:
-c, –changelog 查看某軟件包的更新日志
-d, –deps 列出所有作為依賴關系安裝的軟件包 [過濾器]
-e, –explicit 列出所有單獨指定安裝的軟件包 [過濾器]
-g, –groups 查看某軟件包組所屬的所有軟件包
-i, –info 查看軟件包信息 (-ii 查看備份文件)
-k, –check 檢查該軟件包擁有的文件是否存在
-l, –list 列出被查詢軟件包的內容
-m, –foreign 列出沒有在同步數據庫時找到的已安裝軟件包 [過濾器]
-o, –owns <文件> 查詢哪個軟件包擁有 <文件>
-p, –file <軟件包> 從某個軟件包而不是數據庫查詢
-s, –search 搜尋符合指定字符串的已安裝本地的軟件包
-t, –unrequired 列出所有不被其他軟件包要求的軟件包 [過濾器]
-u, –upgrades 列出所有可升級的軟件包 [過濾器]
-q, –quiet 在查詢或搜索時顯示較少的信息
–config <路徑> 指定另外的配置文件
–logfile <路徑> 指定另外的日志文件
–noconfirm 不詢問確認
–noprogressbar 下載文件時不顯示進度條
–noscriptlet 不執行安裝小腳本
-v, –verbose 循環執行
— debug 顯示除錯信息
-r, –root <路徑> 指定另外的安裝根目錄
-b, –dbpath <路徑> 指定另外的數據庫位置
–cachedir <目錄> 指定另外的軟件包緩存位置
–arch <架構> 設定另外的架構
3,pacman -R
1. [arch@ghostbb ~]$ pacman -R --help 2. 用法: pacman {-R --remove} [選項] <軟件包> 3. 選項: 4. -c, --cascade 刪除軟件包及所有的依賴於此的軟件包 5. -d, --nodeps 略過依賴關系檢查 6. -k, --dbonly 只刪除數據庫記錄,不刪除文件 7. -n, --nosave 同時刪除配置文件 8. -s, --recursive 同時刪除 (不會破壞其他軟件包的) 依賴關系(-ss·也包括單獨指定安裝的依賴關系) 9. -u, --unneeded 同時刪除不需要的 (且不會破壞其他軟件包的) 依賴關系 10. --print 僅打印目標而不執行操作 11. --print-format <字符串>指定如何打印目標 12. --config <路徑> 指定另外的配置文件 13. --logfile <路徑> 指定另外的日志文件 14. --noconfirm 不詢問確認 15. --noprogressbar 下載文件時不顯示進度條 16. --noscriptlet 不執行安裝小腳本 17. -v, --verbose 循環執行 18. -- debug 顯示除錯信息 19. -r, --root <路徑> 指定另外的安裝根目錄 20. -b, --dbpath <路徑> 指定另外的數據庫位置 21. --cachedir <目錄> 指定另外的軟件包緩存位置 22. --arch <架構> 設定另外的架構
[arch@ghostbb ~]$ pacman -R –help
用法: pacman {-R –remove} [選項] <軟件包>
選項:
-c, –cascade 刪除軟件包及所有的依賴於此的軟件包
-d, –nodeps 略過依賴關系檢查
-k, –dbonly 只刪除數據庫記錄,不刪除文件
-n, –nosave 同時刪除配置文件
-s, –recursive 同時刪除 (不會破壞其他軟件包的) 依賴關系(-ss·也包括單獨指定安裝的依賴關系)
-u, –unneeded 同時刪除不需要的 (且不會破壞其他軟件包的) 依賴關系
–print 僅打印目標而不執行操作
–print-format <字符串>指定如何打印目標
–config <路徑> 指定另外的配置文件
–logfile <路徑> 指定另外的日志文件
–noconfirm 不詢問確認
–noprogressbar 下載文件時不顯示進度條
–noscriptlet 不執行安裝小腳本
-v, –verbose 循環執行
— debug 顯示除錯信息
-r, –root <路徑> 指定另外的安裝根目錄
-b, –dbpath <路徑> 指定另外的數據庫位置
–cachedir <目錄> 指定另外的軟件包緩存位置
–arch <架構> 設定另外的架構
4,pacman -S
1. [arch@ghostbb ~]$ pacman -S --help 2. 用法: pacman {-S --sync} [選項] [軟件包] 3. 選項: 4. --asdeps 作為非單獨指定安裝的軟件包安裝 5. --asexplicit 作為單獨指定安裝的軟件包安裝 6. -c, --clean 從緩存目錄中刪除舊軟件包 (-cc 清除所有) 7. -d, --nodeps 略過依賴關系檢查 8. -f, -force 強制安裝,覆蓋存在沖突的文件 9. -g, --groups 查看某軟件包組所屬的所有軟件包 10. -i, --info 查看軟件包信息 11. -l, --list <軟件庫> 查看在該軟件庫中的軟件包清單 12. -s, --search <regex表達式> 按照指定字符串查詢遠端軟件庫 13. -u, --sysupgrade 升級所有已安裝的軟件包 (-uu 可啟用降級) 14. -w, --downloadonly 下載但不安裝/升級軟件包 15. -y, --refresh 從服務器下載新的軟件包數據庫 16. --needed 不重新安裝已經為最新的軟件包 17. --ignore <軟件包> 升級時忽略某個軟件包 (可多次使用) 18. --ignoregroup <軟件包組>升級時忽略某個軟件包組 (可多次使用) 19. --print 僅打印目標而不執行操作 20. --print-format <字符串>指定如何打印目標 21. -q, --quiet 在查詢或搜索時顯示較少的信息 22. --config <路徑> 指定另外的配置文件 23. --logfile <路徑> 指定另外的日志文件 24. --noconfirm 不詢問確認 25. --noprogressbar 下載文件時不顯示進度條 26. --noscriptlet 不執行安裝小腳本 27. -v, --verbose 循環執行 28. -- debug 顯示除錯信息 29. -r, --root <路徑> 指定另外的安裝根目錄 30. -b, --dbpath <路徑> 指定另外的數據庫位置 31. --cachedir <目錄> 指定另外的軟件包緩存位置 32. --arch <架構> 設定另外的架構 </regex表達式>
[arch@ghostbb ~]$ pacman -S –help
用法: pacman {-S –sync} [選項] [軟件包]
選項:
–asdeps 作為非單獨指定安裝的軟件包安裝
–asexplicit 作為單獨指定安裝的軟件包安裝
-c, –clean 從緩存目錄中刪除舊軟件包 (-cc 清除所有)
-d, –nodeps 略過依賴關系檢查
-f, -force 強制安裝,覆蓋存在沖突的文件
-g, –groups 查看某軟件包組所屬的所有軟件包
-i, –info 查看軟件包信息
-l, –list <軟件庫> 查看在該軟件庫中的軟件包清單
-s, –search 按照指定字符串查詢遠端軟件庫
-u, –sysupgrade 升級所有已安裝的軟件包 (-uu 可啟用降級)
-w, –downloadonly 下載但不安裝/升級軟件包
-y, –refresh 從服務器下載新的軟件包數據庫
–needed 不重新安裝已經為最新的軟件包
–ignore <軟件包> 升級時忽略某個軟件包 (可多次使用)
–ignoregroup <軟件包組>升級時忽略某個軟件包組 (可多次使用)
–print 僅打印目標而不執行操作
–print-format <字符串>指定如何打印目標
-q, –quiet 在查詢或搜索時顯示較少的信息
–config <路徑> 指定另外的配置文件
–logfile <路徑> 指定另外的日志文件
–noconfirm 不詢問確認
–noprogressbar 下載文件時不顯示進度條
–noscriptlet 不執行安裝小腳本
-v, –verbose 循環執行
— debug 顯示除錯信息
-r, –root <路徑> 指定另外的安裝根目錄
-b, –dbpath <路徑> 指定另外的數據庫位置
–cachedir <目錄> 指定另外的軟件包緩存位置
–arch <架構> 設定另外的架構
5,pacman -U
1. [arch@ghostbb ~]$ pacman -U --help 2. 用法: pacman {-U --upgrade} [選項] <文件> 3. 選項: 4. --asdeps 作為非單獨指定安裝的軟件包安裝 5. --asexplicit 作為單獨指定安裝的軟件包安裝 6. -d, --nodeps 略過依賴關系檢查 7. -f, -force 強制安裝,覆蓋存在沖突的文件 8. -k, --dbonly 添加數據庫記錄,不安裝或保持現存文件 9. --print 僅打印目標而不執行操作 10. --print-format <字符串> 指定如何打印目標 11. --config <路徑> 指定另外的配置文件 12. --logfile <路徑> 指定另外的日志文件 13. --noconfirm 不詢問確認 14. --noprogressbar 下載文件時不顯示進度條 15. --noscriptlet 不執行安裝小腳本 16. -v, --verbose 循環執行 17. -- debug 顯示除錯信息 18. -r, --root <路徑> 指定另外的安裝根目錄 19. -b, --dbpath <路徑> 指定另外的數據庫位置 20. --cachedir <目錄> 指定另外的軟件包緩存位置 21. --arch <架構> 設定另外的架構
[arch@ghostbb ~]$ pacman -U –help
用法: pacman {-U –upgrade} [選項] <文件>
選項:
–asdeps 作為非單獨指定安裝的軟件包安裝
–asexplicit 作為單獨指定安裝的軟件包安裝
-d, –nodeps 略過依賴關系檢查
-f, -force 強制安裝,覆蓋存在沖突的文件
-k, –dbonly 添加數據庫記錄,不安裝或保持現存文件
–print 僅打印目標而不執行操作
–print-format <字符串> 指定如何打印目標
–config <路徑> 指定另外的配置文件
–logfile <路徑> 指定另外的日志文件
–noconfirm 不詢問確認
–noprogressbar 下載文件時不顯示進度條
–noscriptlet 不執行安裝小腳本
-v, –verbose 循環執行
— debug 顯示除錯信息
-r, –root <路徑> 指定另外的安裝根目錄
-b, –dbpath <路徑> 指定另外的數據庫位置
–cachedir <目錄> 指定另外的軟件包緩存位置
–arch <架構> 設定另外的架構
三,一些常規用法
1,安裝包
安裝或者升級單個軟件包,或者一列軟件包(包含依賴包),使用如下命令:
pacman -S mysql
有時候在不同的軟件倉庫中,一個軟件包有多個版本(比如extra和community)。你可以選擇一個來安裝:
pacman -S extra/mysql
pacman -S community/mysql
你也可以在一個命令里同步包數據庫並且安裝一個軟件包:
pacman -Sy mysql
2,刪除包
刪除單個軟件包,保留其全部已經安裝的依賴關系
pacman -R mysql
刪除指定軟件包,及其所有沒有被其他已安裝軟件包使用的依賴關系:
pacman -Rs mysql
3,升級系統
pacman -Syu
安裝一個本地包:
pacman -U 后面根上已下載的包或者是遠程URL
當我們用pacman進行升級時,經常會遇到下載的包沒有,到源里看時,要升級的包是有的,但是版本不一樣,你要下的版本是沒有,這種情況下,就可以用pacman -u
4,查詢包
查詢可用安裝包
pacman -Ss mysql
要查詢已安裝的軟件包:
pacman -Qs mysql
5,其他用法
清理當前未被安裝軟件包的緩存(/var/cache/pacman/pkg):
pacman -Sc
下載包而不安裝它:
pacman -Sw mysql
來源:http://xiexiejiao.cn/linux/pacman-introduce.html
1、使用包文件加入一個新的軟件包
# pacman --add foo.pkg.tar.gz
# pacman -A foo.pkg.tar.gz
這將會在系統上安裝 foo.pkg.tar.gz 軟件包。如果不能滿足依賴關系,pacman 會退出並顯示錯誤和報
告所缺少的依賴關系,但不會嘗試自動解決依賴關系,如果你需要這功能,看看 --sync 選項。
2、使用包文件升級一個軟件包
# pacman --upgrade foo.pkg.tar.gz
# pacman -U foo.pkg.tar.gz
本質上這和 --add 是一樣的,但它會還有升級已安裝的軟件包而不需要額外的開銷。我個人很難想像你
會寧願用 --add 而不是 --upgrade。
3、卸載軟件包
# pacman --remove foo
# pacman -R foo
這會卸載屬於 foo 的所有文件,已編輯過的配置文件除外。只需提供包名就可以了,無需使用 tar.gz
的后綴。
如果需要完全卸載一個軟件包,在上面的命令里加入 --nosave 選項就可以了。
4、更新軟件包列表
# pacman --sync --refresh
# pacman -Sy
這將會從 /etc/pacman.conf 內定義的軟件庫中取得新的主軟件包列表以及將它解壓添加至數據庫域。
在使用 --sysupgrade 之前你應該使用它來確保你得到的都是最新的軟件包。取決於你 pacman.conf 的
設定,這個命令可能需要一個可用的因特網鏈接來接入基於 FTP 的軟件庫。它和 Debian 的 apt-get
update 命令很相似。
5、升級系統
# pacman --sync --sysupgrade
# pacman -Su
這個命令會將本地的軟件包版本與通過 --refresh 下載的主軟件包列表內的版本對比,然后升級系統內
所有過時的軟件包。偶而運行這個命令可以讓你的系統保持在最新的狀態。注意:這個命令並不會更新
主軟件包列表,所以通常較為聰明的做法是把它們聯合在一起:
# pacman --sync --refresh --sysupgrade
# pacman -Syu
通過這些選項,pacman 將自動取得當前的主軟件包列表和進行全面的系統升級,所有的依賴關系將會被
自動解決。你將想要經常的運行這個。
6、從軟件庫加入/升級一個軟件包
# pacman --sync foo
# pacman -S foo
取得以及安裝 foo 並滿足它所有的依賴關系。在使用 sync 選項前,確認你已經更新了軟件包列表,又
或是在安裝前加入了 --refresh 或 -y 的選項。不同於 --add,--sync 的安裝和升級並沒有不同。取
決於你 pacman.conf 的設定,這個功能需要可用的因特網鏈接。
7、列出已安裝的軟件包
# pacman --query
# pacman -Q
顯示系統內所有已安裝軟件包的列表。
8、查看指定軟件包是否已安裝
# pacman --query foo
# pacman -Q foo
你可以輸入需要查找的名稱而不是完整的軟件名。如果 foo 已安裝,那這個命令將會顯示它的名稱以及
版
9、顯示指定軟件包的信息
# pacman --query --info foo
# pacman -Qi foo
顯示已安裝軟件包 foo 的信息(大小、安裝日期、創建日期、依賴關系、沖突等)。顯示一個未安裝的
軟件包的信息,可以加入 --file 或是 -p 選項,分別是:
# pacman --query --info --file foo.pkg.tar.gz
# pacman -Qip foo.pkg.tar.gz
10、顯示軟件包所包含的文件列表
# pacman --query --list foo
# pacman -Ql foo
列出屬於 foo 軟件包的所有文件。
11、查找指定文件所屬的軟件包# pacman --query --owns /path/to/file
# pacman -Qo /path/to/file
顯示文件通過完整路徑作為參數所引用的軟件包名稱和版本
用法
下面只是一個可執行操作的小部分示范,pacman 的其他示例請閱讀pacman(8)。
安裝軟件包
安裝指定的包
安裝或者升級單個軟件包,或者一列軟件包(包含依賴包),使用如下命令:
# pacman -S package_name1 package_name2 ...
用正則表達式安裝多個軟件包(參見 pacman 小貼士[broken link: invalid section]和這個帖子):
# pacman -S $(pacman -Ssq package_regex)
有時候在不同的軟件倉庫中,一個軟件包有多個版本(比如[extra]和[testing])。可以選擇一個來安裝:
# pacman -S extra/package_name
安裝多個含有相似名稱的軟件包,而並非整個包組或全部匹配的軟件包; 例如,plasma:
# pacman -S plasma-{desktop,mediacenter,nm}
當然,可以多層擴展,並不作限制:
# pacman -S plasma-{workspace{,-wallpapers},pa}
安裝包組
一些包屬於一個可以同時安裝的軟件包組[broken link: invalid section]。例如,運行下面的命令
# pacman -S gnome
會提醒用戶選擇 gnome
內需要安裝的包。
有的包組包含大量的軟件包,有時用戶只需其中幾個。除了逐一鍵入序號外,pacman 還支持選擇或排除某個區間內的的軟件包:
Enter a selection (default=all): 1-10 15
這將選中序號 1 至 10 和 15 的軟件包。而
Enter a selection (default=all): ^5-8 ^2
將會選中除了序號 5 至 8 和 2 之外的所有軟件包。
想要查看哪些包屬於 gnome 組,運行:
# pacman -Sg gnome
也可以訪問 https://www.archlinux.org/groups/ 查看可用的包組。
刪除軟件包
刪除單個軟件包,保留其全部已經安裝的依賴關系
pacman -R package_name
刪除指定軟件包,及其所有沒有被其他已安裝軟件包使用的依賴關系:
pacman -Rs package_name
要刪除軟件包和所有依賴這個軟件包的程序:
# pacman -Rsc package_name
要刪除軟件包,但是不刪除依賴這個軟件包的其他程序:
# pacman -Rdd package_name
pacman 刪除某些程序時會備份重要配置文件,在其后面加上*.pacsave擴展名。-n 選項可以避免備份這些文件:
pacman -Rn package_name
升級軟件包
一個 pacman 命令就可以升級整個系統。花費的時間取決於系統有多老。這個命令會同步非本地(local)軟件倉庫並升級系統的軟件包:
# pacman -Syu
查詢包數據庫
pacman 使用 -Q
參數查詢本地軟件包數據庫。參見:
$ pacman -Q --help
使用 -S
參數來查詢遠程同步的數據庫。參見:
$ pacman -S --help
pacman 可以在包數據庫中查詢軟件包,查詢位置包含了軟件包的名字和描述:
$ pacman -Ss string1 string2 ...
有時,-s
的內置正則會匹配很多不需要的結果,所以應當指定僅搜索包名,而非描述或其他子段,下面的命令就會返回很多不必要結果:
$ pacman -Ss '^vim-'
要查詢已安裝的軟件包:
$ pacman -Qs string1 string2 ...
按文件名查找軟件庫:
$ pacman -Fs string1 string2 ...
顯示軟件包的詳盡的信息:
$ pacman -Si package_name
查詢本地安裝包的詳細信息:
$ pacman -Qi package_name
使用兩個 -i
將同時顯示備份文件和修改狀態:
$ pacman -Qii package_name
要獲取已安裝軟件包所包含文件的列表:
$ pacman -Ql package_name
查詢遠程庫中軟件包包含的文件:
$ pacman -Fl package_name
檢查軟件包安裝的文件是否都存在:
$ pacman -Qk package_name
兩個參數k
將會執行一次更徹底的檢查。 查詢數據庫獲取某個文件屬於哪個軟件包:
$ pacman -Qo /path/to/file_name
查詢文件屬於遠程數據庫中的哪個軟件包:
$ pacman -Fo /path/to/file_name
要羅列所有不再作為依賴的軟件包(孤立orphans):
$ pacman -Qdt
要羅列所有明確安裝而且不被其它包依賴的軟件包:
$ pacman -Qet
要顯示軟件包的依賴樹:
$ pactree package_name
檢查一個安裝的軟件包被那些包依賴,可以使用 pkgtoolsAUR中的whoneeds:
$ whoneeds package_name
或者pactree中使用-r
:
$ pactree -r package_name
更多信息查看pacman tips。
數據庫結構
pacman數據庫通常位於 /var/lib/pacman/sync
. 對於每一個在/etc/pacman.conf
中指定的軟件倉庫, 這里都有一個一致的數據庫。數據庫文件夾里每個tar.gz文件都包含着一個倉庫的軟件包信息。例如which 包:
% tree which-2.20-6 which-2.20-6 |-- depends `-- desc
這個 depends
項列出了該軟件的依賴包, 而desc
有該包的介紹,例如文件大小和MD5值 。
清理軟件包緩存
pacman 將下載的軟件包保存在 /var/cache/pacman/pkg/
並且不會自動移除舊的和未安裝版本的軟件包,因此需要手動清理,以免該文件夾過於龐大。
使用內建選項即可清除未安裝軟件包的緩存:
# pacman -Sc
由於以上種種局限,建議使用專門的腳本去處理清理哪些、清理多少緩存:
pacman-contrib 提供的 paccache 命令默認會刪除近3個版本前的軟件包
# paccache -r
也可以自己設置保留最近幾個版本:
# paccache -rk 1
清理所有未安裝包的緩存文件,再此運行paccache
:
# paccache -ruk0
更多功能參見paccache -h
。
paccache,還可以使用 Arch User Repository 中的 pkgcachecleanAUR:
# pkgcacheclean
,以及pacleanerAUR,這兩個是未來的替代工具.
其它命令
升級系統時安裝其他軟件包:
# pacman -Syu package_name1 package_name2 ...
下載包而不安裝它:
# pacman -Sw package_name
安裝一個本地包(不從源里下載):
# pacman -U /path/to/package/package_name-version.pkg.tar.xz
要將本地包保存至緩存,可執行:
# pacman -U file://path/to/package/package_name-version.pkg.tar.xz
安裝一個遠程包(不在 pacman 配置的源里面):
# pacman -U http://www.example.com/repo/example.pkg.tar.xz
要禁用 -S
, -U
和 -R
動作,可以使用 -p
選項.
pacman 會列出需要安裝和刪除的軟件,並在執行動作前要求需要的權限。
安裝原因
pacman數據庫按照軟件包被安裝的原因,將其分為兩類:
- 指定安裝包:通過pacman
-S
或者-U
指令安裝的軟件包。 - 依賴包:指定安裝包所依賴的軟件包,盡管命令中未傳入,但仍然會被安裝。
當安裝軟件包時,可以把安裝原因指定設為依賴:
# pacman -S --asdeps package_name
但是當重新安裝該軟件包時,安裝原因將會被設為軟件包所默認的。 指定安裝的軟件包列表可用pacman -Qe
, 已安裝的依賴包可用pacman -Qd
獲取。 改變某個已安裝軟件包的安裝原因,可以執行:
# pacman -D --asdeps package_name
使用--asexplicit
改為指定安裝。
查詢一個包含具體文件的包名
同步文件數據庫:
# pacman -Fy
查詢包含某個文件的包名,比如:
# pacman -Fs pacman core/pacman 5.0.1-4 usr/bin/pacman usr/share/bash-completion/completions/pacman extra/xscreensaver 5.36-1 usr/lib/xscreensaver/pacman
如果需要高級功能請安裝 pkgfile,它使用一個單獨的數據庫來保存文件和它們所關聯的軟件包的信息。
配置
pacman 的配置文件位於/etc/pacman.conf
。 man pacman.conf 可以查看配置文件的進一步信息。
通用選項
通用選項都在[options]
段。閱讀 man 手冊或者查看默認的 pacman.conf 可以獲得有關信息和用法。
升級前對比版本
要查看舊版和新版的有效安裝包,請取消/etc/pacman.conf
中"VerbosePkgLists"的注釋。修改后的pacman -Syu
輸出如下:
Package (6) Old Version New Version Net Change Download Size extra/libmariadbclient 10.1.9-4 10.1.10-1 0.03 MiB 4.35 MiB extra/libpng 1.6.19-1 1.6.20-1 0.00 MiB 0.23 MiB extra/mariadb 10.1.9-4 10.1.10-1 0.26 MiB 13.80 MiB
彩色輸出
Pacman 具有顏色選項,取消 "Color" 行的注釋即可.
不升級軟件包
如果由於某種原因,用戶不希望升級某個軟件包,可以加入內容如下:
IgnorePkg = 軟件包名
多軟件包可以用空格隔開,也可是用 glob 模式。如果只打算忽略一次升級,可以使用 --ignore
選項。
忽略了的軟件包可通過 pacman -S
升級。
不升級軟件包組
和軟件包一樣,也可以不升級某個軟件包組:
IgnoreGroup = gnome
跳過軟件包文件
要跳過某些文件夾的安裝,可以將它們放到 NoExtract
中,例如不想安裝 systemd unit 文件:
NoExtract=usr/lib/systemd/system/*
后面的規則覆蓋前面的規則,加上 !
可以取消跳過效果.
保留多個配置文件
如果你有多個配置文件(比如,主配置和測試testing倉庫生效的配置文件),需要共享一些設置:
Include = /path/to/common/settings
/path/to/common/settings
文件中是兩個配置文件共享的相同配置。
Hooks
pacman可以在更新安裝前后時,運行/usr/share/libalpm/hooks/
文件夾下的hooks,更多的hooks文件夾HooDir
可以在pacman.conf
中設置,默認/etc/pacman.d/hooks
。Hook文件必須以.hook結尾。
軟件倉庫
除了特殊的options[broken link: invalid section]section, 每個pacman.conf
中的section
都定義了一個使用的軟件包倉庫,倉庫是多個軟件包的邏輯上的集合,他們物理上存儲在一個或多個服務器:這也是為什么每一個服務器都叫做這個倉庫的鏡像。
倉庫區分為官方]與[Unofficial user repositories|非官方兩類。配置文件中倉庫的順序十分重要;當幾個倉庫出現同名安裝包,不管版本號是否相同,pacman將使用配置文件中排前的倉庫。upgrade[broken link: invalid section]升級整個系統,來讓新添加的倉庫生效。
每個倉庫設置都可以直接指定鏡像列表或者Include
引用其他的文件:例如,官方鏡像引用了/etc/pacman.d/mirrorlist/
。具體查看Mirrors。
軟件包的安全性
pacman 4 支持軟件包簽名。語句 SigLevel = Required DatabaseOptional
將啟用全局簽名驗證,但會被每個軟件倉庫的 SigLevel
行所覆蓋。詳情參見 pacman-key.
一般注意事項
pacman 附帶了許多實用工具能讓系統使用更加便捷。所有工具功能都能通過 --help
開關查看。運行:
$ pacman -Ql pacman | awk -F"[/ ]" '/\/usr\/bin/ {print $5}'
查看完整列表
問題解決
升級時遇到問題: "file exists in filesystem"(conflicting files)!
如果碰到這個帖子的錯誤:
error: could not prepare transaction error: failed to commit transaction (conflicting files) package: /path/to/file exists in filesystem Errors occurred, no packages were upgraded.
發生了什么事: pacman 檢測到文件沖突,而且按照設計,pacman 不會覆蓋文件。這是設計功能,不是缺陷。
先用 (pacman -Qo 文件的完整路徑
檢查哪個軟件包提供了文件。如果是其它軟件包,請報告問題。如果不是其它軟件包提供,將已經存在的文件重命名並重新升級。如果一切順利,可以刪掉備份文件。
如果是通過 make install
等非 pacman 方式安裝的軟件,安裝的文件不屬於任何軟件包!需要先手動刪除這些文件,這樣就可以正常安裝軟件了。不屬於任何軟件包的文件列表一文中提供了查找這些文件的腳本。
每一個安裝的軟件包都會提供一個 /var/lib/pacman/local/$package-$version/files
文件,包含此軟件包的元數據。如果文件損壞或者丟失,將會導致升級時出現file exists in filesystem
錯誤。此錯誤通常只會影響一個軟件包,除了手動刪除或移動所有的問題文件,可以作為特例使用pacman -S --force $package
讓 pacman 強制覆蓋這些文件。
"failed to commit transaction (invalid or corrupted package" 錯誤
看看/var/cache/pacman/pkg
中是否有*.part
結尾的文件,它們是沒有完全下載的文件,刪除它們並重新執行更新。這些程序一般是自定義的XferCommand
下載命令造成的。
# find /var/cache/pacman/pkg/ -iname "*.part" -exec rm {} \;
"error: failed to init transaction (unable to lock database)" 錯誤
pacman 在更新軟件包數據庫前,比如安裝軟件包時會創建一個文件鎖 /var/lib/pacman/db.lck
。該文件會阻止其他 pacman 實例在同一時間修改軟件包數據庫。如果 pacman 在更新數據庫時收到干擾,舊鎖會一直存在。如果確認 pacman 沒有在運行,那么刪掉文件鎖:
# rm /var/lib/pacman/db.lck
安裝時無法獲取軟件包
錯誤內容包含:Not found in sync db
, Target not found
或 Failed retrieving file
.
首先確認軟件包確實存在(並注意錯別字)。如果確認軟件包存在,可能本地數據庫過時了或者軟件倉庫沒有配置好,試試 pacman -Syyu
強制數據庫更新和升級。
也有可能包含該軟件包的軟件倉庫沒有啟動。例如,該軟件包可能在 multilib 倉庫里,但該倉庫沒有在 pacman.conf 中啟用。
參閱FAQ#Why is there only a single version of each shared library in the official repositories?.
pacman 重復升級同一個包
這是因為在 /var/lib/pacman/local/
有重復的條目,例如有兩個 linux
條目。pacman -Qi
輸出正確的版本,但是 pacman -Qu
識別了舊版本,因此嘗試升級。
解決方法:刪除 /var/lib/pacman/local/
中多余的條目。
pacman 完全壞掉,如何修復?
如果 pacman 完全壞掉不能使用,需要手動下載或構建需要的軟件包(openssl, libarchive 和 pacman) 並解壓到根目錄。pacman 會和默認配置文件一起恢復。之后,用 pacman 重新安裝這些軟件包以保證數據庫的完整性。
pacman 更新時崩潰
如果 pacman 在刪除、重新安裝或更新軟件包時 "數據庫寫入" 出錯:
- 從 Arch 安裝媒體啟動,最好用最新的安裝媒體
- 掛載根文件系統,通過
df -h
確認根文件目錄包含足夠的空間 - 如果系統使用默認的數據庫目錄位置,可以通過root用戶執行下面命令
pacman --root=/mnt --cachedir=/mnt/var/cache/pacman/pkg -Syyu
- 更新之后,可以通過下面命令確認是否還存在損壞的包:
find /mnt/usr/lib -size 0
- 通過下面命令重新安裝依然損壞的軟件包:
pacman --root /mnt --cachedir=/mnt/var/cache/pacman/pkg -S package
.
pacman crashes the official installation media
The official installation media (ISO) before version 10.2015 are not setup to be updated itself at runtime. Running pacman -Syu
from a booted install media console may crash unexpectedly any time, as soon as memory is depleted. This happens because the install media image build reports an arbitrary capacity (of 32GB) to pacman, regardless of available free memory.[1] At the same time the ISO reserves only a low static memory allotment for operations (/run/archiso/cowspace
of 256MB
RAM) of the live system, in order to allow installation on machines with low resources. If the machine has more RAM available, you can override the allotment by setting the cow_spacesize=
kernel option for the ISO manually, e.g. cow_spacesize=2GB
.
If you use the install media to update an installed system, you simply have to use the --root=
option along with a --cachedir=
path to point pacman to available real storage. For example, see #pacman 更新時崩潰.
If you require an install media with persistent dataspace, the Archiso build script can be used to create one along with its boot options.
升級系統重啟后,出現"unable to find root device"錯誤,無法登陸
很有可能 initramfs 在內核升級時損壞,例如錯誤的使用 pacman 的 --force
選項。有兩個選擇:
Fallback 啟動項
如果系統可以啟動,運行如下命令可以生產原始內核 linux 的 initramfs:
# mkinitcpio -p linux
Chroot 修復
如果上面方法不行,請下載最新的安裝程序進行啟動,執行:
# mount /dev/sdxY /mnt #Your root partition. # mount /dev/sdxZ /mnt/boot #If you use a separate /boot partition. # arch-chroot /mnt # pacman -Syu mkinitcpio systemd-tools linux
重新安裝內核(linux 軟件包)將會自動運行 mkinitcpio -p linux
重新生成 initramfs 鏡像,不需要單獨生成。
之后建議執行 exit
, umount /mnt/{boot,}
然后 reboot
.
Signature from "User <email@gmail.com>" is unknown trust, installation failed
試試以下途徑:
- 更新已知密鑰:
pacman-key --refresh-keys
; - 手動升級
archlinux-keyring
軟件包:pacman -Sy archlinux-keyring && pacman -Su
. - 查看pacman-key#Resetting all the keys.
Request on importing PGP keys
If installing Arch with an outdated ISO, you are likely prompted to import PGP keys. Agree to download the key to proceed. If you are unable to add the PGP key successfully, update the keyring or upgrade archlinux-keyring (see above).
Error: key "0123456789ABCDEF" could not be looked up remotely
If packages are signed with new keys, which were only recently added to archlinux-keyring, these keys are not locally available during update (chicken-egg-problem). The installed archlinux-keyring does not contain the key, until it is updated. Pacman tries to bypass this by a lookup through a key-server, which might not be possible e.g. behind proxys or firewalls and results in the stated error. Upgrade archlinux-keyring first as shown above.
不停看到錯誤 "PackageName: signature from "User <email@archlinux.org>" is invalid"
When the system time is faulty, signing keys are considered expired (or invalid) and signature checks on packages will fail with the following error:
error: PackageName: signature from "User <email@archlinux.org>" is invalid error: failed to commit transaction (invalid or corrupted package (PGP signature)) Errors occured, no packages were upgraded.
Make sure to correct the system time, for example with ntpd -qg
run as root, and run hwclock -w
as root before subsequent installations or upgrades.
'warning: current locale is invalid; using default "C" locale' 錯誤
錯誤信息已經很明確了,locale 設置不正確,請閱讀Locale進行設置。
pacman不使用我的代理設置
正確設置環境變量($http_proxy
, $ftp_proxy
etc.)如果使用sudo,需要讓 sudo 將這些變量傳遞給 pacman.
如何重裝所有包並保留安裝和依賴信息?
重裝所有軟件包:pacman -S $(pacman -Qnq)
(-S
選項會保留安裝緣由)。
接着需要重裝外來包(不在官方倉庫里的軟件包)。外來包可通過pacman -Qmq
查看。
It looks like previous pacman transaction removed or corrupted shared libraries needed for pacman itself.
To recover from this situation you need to unpack required libraries to your filesystem manually. First find what package contains the missed library and then locate it in the pacman cache (/var/cache/pacman/pkg/
). Unpack required shared library to the filesystem. This will allow to run pacman.
需要重新安裝損壞的軟件包. Note that you need to use --force
flag as you just unpacked system files and pacman does not know about it. pacman will correctly replace our shared library file with one from package.
That's it. Update the rest of the system.
軟件包下載停滯
Some issues have been reported regarding network problems that prevent pacman from updating/synchronizing repositories. [2] [3] When installing Arch Linux natively, these issues have been resolved by replacing the default pacman file downloader with an alternative (see Improve pacman performance for more details). When installing Arch Linux as a guest OS in VirtualBox, this issue has also been addressed by using Host interface instead of NAT in the machine properties.