关于“成为合格的系统管理” 中 pacman 的疑问
BackMountainDevil opened this issue · 8 comments
在成为合格的系统管理员中:
- 升级系统 -
pacman -Syyu - 删除孤立软件包 -
pacman -Rs $(pacman -Qtdq)
升级系统
在英文 wiki 系统升级 中,升级部分并没有提到,而是说使用 pacman -Syu。因此对于文中所写的 -Syyu 还望能给出来源。
删除孤立软件包 - pacman -Rs $(pacman -Qtdq)
这个是我第一次见到,十分感谢打开的我的视界,本着探究的精神尝试了一下,最后的结果表面,即使是孤立的软件包,在删除前还是应该审慎。
pacman -Qtd 和 pacman -Qtdq 差了一个q,亲自尝试了发现输出差别是后者不会输出版本号。
- 可能删除某个软件,如下面的 mpv
- 删除的包会连其没有被依赖的包也一并删除,如 73 -> 143
第一个可能一时无法发现,或许某天用某个软件才发现这玩意不见了。。。 mpv 常用才晓得,还有一些你不知道ta在哪里干啥用的,比如我卸载完发现图标没有显示了。。桌面环境变的僵化了,后发现是某些正在使用的图标集合被删除了。
第二个原因是因为 -R 和 -Rs 的区别。这里我有一个小小的疑问,如果是要删除孤立的软件包,则要连其依赖包也一并删除吗?个人感觉这个命令风险有点高。。。
案例
在这个例子中,我尝试删除孤立的软件包,因此我会先看看有哪些,是真的多,震惊到我自己,其中有些我认识,mpv播放器、deepin*深度的东西(个人不喜欢)、python-sphinx(之前学习sphinx安装的)
$ sudo pacman -Qdtq
# 数一下这里有73个包
analitza
avfs
avogadrolibs
bamf
black-hole-solver
boost
clucene
colord
ddcutil
deepin-account-faces
deepin-anything
deepin-api
deepin-desktop-schemas
deepin-menu
deepin-network-utils
deepin-polkit-agent-ext-gnomekeyring
deepin-wallpapers
disomaster
dtc
ffmpegthumbnailer
freecell-solver
gdl
geoip
gnugo
gtkspell3
htmlcxx
imwheel
kcachegrind-common
kosmindoormap
kplotting
libabw
libatomic_ops
libcmis
libe-book
libepubgen
libetonyek
libexttextcat
libfreehand
libgsf
libkdegames
libkeduvocdocument
libkmahjongg
libkomparediff2
libktorrent
liblightdm-qt5
libmediainfo
libmspub
libmwaw
libnumbertext
libodfgen
liborcus
libpagemaker
libpwquality
libqtshadowsocks
libqxp
libstaroffice
libwps
libzmf
lpsolve
lucene++
marble-common
mimetic
mlt
mpv
openbabel
python-asn1crypto
python-pyhamcrest
python-sphinx
qhull
redland
sunpinyin
tracker3
xmlsec
$ sudo pacman -Qi mpv
名字 : mpv
版本 : 1:0.33.1-2
描述 : a free, open source, and cross-platform media player
架构 : x86_64
URL : https://mpv.io/
软件许可 : GPL3
组 : 无
提供 : libmpv.so=1-64
依赖于 : alsa-lib libasound.so=2-64 desktop-file-utils ffmpeg libavcodec.so=58-64 libavdevice.so=58-64 libavfilter.so=7-64
libavformat.so=58-64 libavutil.so=56-64 libswresample.so=3-64 libswscale.so=5-64 glibc hicolor-icon-theme jack libjack.so=0-64
lcms2 liblcms2.so=2-64 libarchive libarchive.so=13-64 libass libass.so=9-64 libbluray libbluray.so=2-64 libcaca libcdio
libcdio-paranoia libdrm libdvdnav libdvdread libegl libgl libglvnd libjpeg libjpeg.so=8-64 libplacebo libplacebo.so=120-64
libpulse libpulse.so=0-64 libva libva.so=2-64 libva-drm.so=2-64 libva-wayland.so=2-64 libva-x11.so=2-64 libvdpau libx11 libxext
libxinerama libxkbcommon libxkbcommon.so=0-64 libxrandr libxss libxv lua52 mesa mujs rubberband librubberband.so=2-64 shaderc
libshaderc_shared.so=1-64 uchardet vulkan-icd-loader wayland xdg-utils zlib
可选依赖 : youtube-dl: for video-sharing websites playback
依赖它 : 无
被可选依赖 : 无
与它冲突 : 无
取代 : 无
安装后大小 : 4.98 MiB
打包者 : Levente Polyak <anthraxx@archlinux.org>
编译日期 : 2021年04月27日 星期二 06时01分52秒
安装日期 : 2021年04月30日 星期五 09时44分50秒
安装原因 : 作为其他软件包的依赖关系安装
安装脚本 : 否
验证者 : 数字签名
$ sudo pacman -Rs mpv
正在检查依赖关系...
:: mlt可选依赖于rubberband: rubberband plugin
:: mlt6可选依赖于rubberband: rubberband plugin
软件包 (4) mujs-1.1.3-1 rubberband-1.9.2-1 uchardet-0.0.7-1 mpv-1:0.33.1-2
:: 打算删除这些软件包吗? [Y/n] n
$ sudo pacman -R mpv
正在检查依赖关系...
软件包 (1) mpv-1:0.33.1-2
:: 打算删除这些软件包吗? [Y/n] n
$ mpv
mpv 0.33.1-dirty Copyright © 2000-2020 mpv/MPlayer/mplayer2 projects
built on UNKNOWN
FFmpeg library versions:
libavutil 56.70.100
libavcodec 58.134.100
libavformat 58.76.100
libswscale 5.9.100
libavfilter 7.110.100
libswresample 3.9.100
FFmpeg version: n4.4
Usage: mpv [options] [url|path/]filename
Basic options:
--start=<time> seek to given (percent, seconds, or hh:mm:ss) position
--no-audio do not play sound
--no-video do not play video
--fs fullscreen playback
--sub-file=<file> specify subtitle file to use
--playlist=<file> specify playlist file
--list-options list all mpv options
--h=<string> print options which contain the given string in their name
$ mpv --player-operation-mode=pseudo-gui -- %U
$ sudo pacman -Rs $(pacman -Qtdq)
正在检查依赖关系...
:: grub可选依赖于libisoburn: Provides xorriso for generating grub rescue iso using grub-mkrescue
:: hugo可选依赖于python-pygments: syntax-highlight code snippets
:: hugo可选依赖于python-docutils: reStructuredText support
:: mariadb可选依赖于cracklib: for cracklib plugin
:: mlt6可选依赖于rubberband: rubberband plugin
:: qca-qt5可选依赖于botan: botan plugin
:: subversion可选依赖于libgnome-keyring: for GNOME Keyring for auth credentials
软件包 (143) alsa-utils-1.2.5.1-1 avogadro-crystals-1.0.1-1 avogadro-molecules-1.0.0-1 blur-effect-1.1.3-2 botan-2.18.1-1 coordgen-2.0.3-1
cracklib-2.9.7-2 deepin-anything-arch-5.0.9-7 deepin-desktop-base-2:2021.5.07-1 deepin-gtk-theme-2020.06.10-1
deepin-icon-theme-2021.03.12-1 deepin-polkit-agent-5.4.3-1 deepin-qt-dbus-factory-5.4.5-1 deepin-qt5integration-5.1.12-1
deepin-qt5platform-plugins-5.0.23-2 deepin-sound-theme-15.10.6-1 dtkcommon-5.5.3-1 dtkcore-1:5.4.15-1 dtkgui-5.5.2-1 dtkwidget-5.5.7-1
gdk-pixbuf-xlib-2.40.2-1 geoip-database-20210622-1 gio-qt-0.0.10-1 gsettings-qt-0.1.20170110-3 kdeedu-data-21.04.2-1
kopeninghours-21.04.2-1 kpublictransport-21.04.2-1 libburn-1.5.4-1 libgnome-keyring-3.12.0+13+g4f8ab73-3 libgtop-2.40.0+2+g31db82ef-2
libgusb-0.3.7-1 libisoburn-1.5.4-2 libisofs-1.5.4-1 libixion-0.16.1-6 liblangtag-0.6.3-2 libmsym-0.2.3-5 libqtxdg-3.7.1-1
libwnck3-40.0-1 libxklavier-5.4-3 libzen-0.4.39-1 lightdm-1:1.30.0-4 lshw-B.02.19.2-1 lzlib-1.12-2 maeparser-1.2.4-4
molequeue-0.9.0-2 mujs-1.1.3-1 papirus-icon-theme-20210601-1 python-babel-2.9.1-1 python-docutils-0.17.1-1 python-imagesize-1.2.0-4
python-jinja-3.0.1-1 python-markupsafe-2.0.1-1 python-pygments-2.9.0-1 python-pytz-2021.1-1 python-snowballstemmer-2.1.0-1
python-sphinx-alabaster-theme-0.7.12-6 python-sphinxcontrib-applehelp-1.0.2-6 python-sphinxcontrib-devhelp-1.0.2-6
python-sphinxcontrib-htmlhelp-2.0.0-1 python-sphinxcontrib-jsmath-1.0.1-9 python-sphinxcontrib-qthelp-1.0.3-6
python-sphinxcontrib-serializinghtml-1.1.5-1 rasqal-1:0.9.33-4 rubberband-1.9.2-1 spglib-1.16.1-2 startup-notification-0.12-7
tinyxml2-9.0.0-1 uchardet-0.0.7-1 udisks2-qt5-5.0.5-1 xcur2png-0.7.1-7 analitza-21.04.2-1 avfs-1.1.4-2 avogadrolibs-1.94.0-1
bamf-0.5.5-1 black-hole-solver-1.10.1-1 boost-1.76.0-1 clucene-2.3.3.4-11 colord-1.4.5-4 ddcutil-1.1.0-1 deepin-account-faces-1.0.12-1
deepin-anything-5.0.9-1 deepin-api-5.4.6-1 deepin-desktop-schemas-5.9.11-1 deepin-menu-5.0.1-4 deepin-network-utils-5.4.6-1
deepin-polkit-agent-ext-gnomekeyring-0.1.0-2 deepin-wallpapers-1:1.7.7-2 disomaster-5.0.7-1 dtc-1.6.0-3 ffmpegthumbnailer-2.2.2-2
freecell-solver-6.2.0-1 gdl-3.34.0-2 geoip-1.6.12-2 gnugo-3.8-7 gtkspell3-3.0.10-2 htmlcxx-0.87-3 imwheel-1.0.0pre12-6
kcachegrind-common-21.04.2-1 kosmindoormap-21.04.2-2 kplotting-5.83.0-1 libabw-0.1.3-2 libatomic_ops-7.6.10-2 libcmis-0.5.2-8
libe-book-0.1.3-9 libepubgen-0.1.1-2 libetonyek-0.1.10-1 libexttextcat-3.4.5-2 libfreehand-0.1.2-3 libgsf-1.14.47-1
libkdegames-21.04.2-1 libkeduvocdocument-21.04.2-1 libkmahjongg-21.04.2-1 libkomparediff2-21.04.2-1 libktorrent-21.04.2-1
liblightdm-qt5-1:1.30.0-4 libmediainfo-21.03-1 libmspub-0.1.4-10 libmwaw-0.3.19-1 libnumbertext-1.0.7-1 libodfgen-0.1.8-1
liborcus-0.16.1-7 libpagemaker-0.0.4-2 libpwquality-1.4.4-3 libqtshadowsocks-2.1.0-13 libqxp-0.0.2-6 libstaroffice-0.0.7-1
libwps-0.4.12-1 libzmf-0.0.2-10 lpsolve-5.5.2.11-1 lucene++-3.0.8-2 marble-common-21.04.2-2 mimetic-0.9.8-2 mlt-7.0.1-1
mpv-1:0.33.1-2 openbabel-3.1.1-2 python-asn1crypto-1.4.0-3 python-pyhamcrest-1.10.0-1 python-sphinx-4.0.2-1 qhull-2020.2-4
redland-1:1.0.17-8 sunpinyin-3.0.0rc1-4 tracker3-3.1.2-1 xmlsec-1.2.32-1mpv 播放器已被卸载
pacman -hQ
用法: pacman {-Q --query} [选项] [软件包]
选项:
-b, --dbpath <路径> 指定另外的数据库位置
-c, --changelog 查看某软件包的更新日志
-d, --deps 列出所有作为依赖关系安装的软件包 [过滤器]
-e, --explicit 列出所有单独指定安装的软件包 [过滤器]
-g, --groups 查看某软件包组所属的所有软件包
-i, --info 查看软件包信息 (-ii 查看备份文件)
-k, --check 检查软件包的文件存在(-kk检查文件属性)
-l, --list 列出被查询软件包的内容
-m, --foreign 列出没有在同步数据库时找到的已安装软件包 [过滤器]
-n, --native 列出只在(同步)数据库中的已安装软件包 [过滤]
-o, --owns <文件> 查询哪个软件包拥有<文件>
-p, --file <软件包> 从某个软件包而不是数据库查询
-q, --quiet 在查询或搜索时显示较少的信息
-r, --root <路径> 指定另外的安装根目录
-s, --search <regex> 搜寻符合指定字符串的已安装本地的软件包
-t, --unrequired 列出不被任何软件包(可选)要求的软件包(-tt 忽略可选依赖) [过滤器]
-u, --upgrades 列出所有可升级的软件包 [过滤器]
-v, --verbose 显示详细信息
--arch <架构> 设定另外的架构
--cachedir <dir> 指定另外的软件包缓存位置
--color <when> 彩色化输出
--config <路径> 指定另外的配置文件
--confirm 总是询问确认
--debug 显示调试信息
--disable-download-timeout
下载时用宽松的超时
--gpgdir <路径> 设定 GnuPG 的其他主目录
--hookdir <目录> 指定另外的钩子位置
--logfile <路径> 指定另外的日志文件
--noconfirm 不询问确认
--sysroot 在一个已挂载的 guest 系统操作(仅 root)pacman -hS
用法: pacman {-S --sync} [选项] [软件包]
选项:
-b, --dbpath <路径> 指定另外的数据库位置
-c, --clean 从缓存目录中删除旧软件包 (-cc 清除所有)
-d, --nodeps 跳过依赖关系的版本检查 (-dd 跳过所有检查)
-g, --groups 查看某软件包组所属的所有软件包
(-gg 查看所有软件包组和所属于它们的软件包)
-i, --info 查看软件包信息 (-ii 查看更多信息)
-l, --list <repo> 查看在该软件库中的软件包清单
-p, --print 打印目标而不是执行操作
-q, --quiet 在查询或搜索时显示较少的信息
-r, --root <路径> 指定另外的安装根目录
-s, --search <正则表达式> 按照指定字符串查询远端软件库
-u, --sysupgrade 升级所有已安装的软件包 (-uu 可启用降级)
-v, --verbose 显示详细信息
-w, --downloadonly 下载但不安装/升级软件包
-y, --refresh 从服务器下载新的软件包数据库
(-yy 强制更新软件包数据库)
--arch <架构> 设定另外的架构
--asdeps 作为非单独指定安装的软件包安装
--asexplicit 作为单独指定安装的软件包安装
--assume-installed <package=version>
添加一个虚拟包用以满足依赖要求
--cachedir <dir> 指定另外的软件包缓存位置
--color <when> 彩色化输出
--config <路径> 指定另外的配置文件
--confirm 总是询问确认
--dbonly 仅修改数据库条目,而非软件包文件
--debug 显示调试信息
--disable-download-timeout
下载时用宽松的超时
--gpgdir <路径> 设定 GnuPG 的其他主目录
--hookdir <目录> 指定另外的钩子位置
--ignore <软件包> 升级时忽略某个软件包 (可多次使用)
--ignoregroup <软件包组>
升级时忽略某个软件包组 (可多次使用)
--logfile <路径> 指定另外的日志文件
--needed 不重新安装已是最新的软件包
--noconfirm 不询问确认
--noprogressbar 下载文件时不显示进度条
--noscriptlet 不执行安装小脚本
--overwrite <glob>
overwrite conflicting files (can be used more than once)
--print-format <字符串>
指定如何打印目标
--sysroot 在一个已挂载的 guest 系统操作(仅 root)man pacman
-y, --refresh
Download fresh package databases from the server. Use twice to force a refresh even if databases are up to
date.
系统升级
首先,感谢各位的倾情解答。对于问题中的第一点给出了来源。
yy的含义中文解释的不太到位,看了英文版的“force a refresh even if up to date”。也就是说即使是最新版的软件也要重新安装吗?
$ pacman -hS
-y, --refresh 从服务器下载新的软件包数据库
(-yy 强制更新软件包数据库)
$ export LANG=en
$ pacman -hS
-y, --refresh download fresh package databases from the server
(-yy to force a refresh even if up to date)实际例子
从这个案例中,首先和最后使用了强制刷新软件包数据库( -Syyu),中间使用的是( -Syu)。
可以看到当强制刷新的时候,会重新同步数据库;而使用-Syu则检查两者的数据库一致不一致,一致则不会花时间更新本地数据库,不一致则更新本地数据库(这一点在下面的案例中没有体现)。也就是说,什么情况下才使用强制刷新呢?如果-Syu已经可以达到目的,使用更费力的-Syyu的用意是?这一点随着深入的交流我发现显得更为重要。
$ sudo pacman -Syyu
[sudo] kearney 的密码:
:: 正在同步软件包数据库...
core 134.1 KiB 221 KiB/s 00:01 [####################################] 100%
extra 1566.8 KiB 1284 KiB/s 00:01 [####################################] 100%
community 5.6 MiB 5.60 MiB/s 00:01 [####################################] 100%
multilib 149.6 KiB 4.87 MiB/s 00:00 [####################################] 100%
archlinuxcn 1881.6 KiB 6.34 MiB/s 00:00 [####################################] 100%
:: 正在进行全面系统更新...
警告:google-chrome:忽略软件包升级 (91.0.4472.101-1 => 91.0.4472.114-1)
警告:liburing:忽略软件包升级 (0.7-2 => 2.0-1)
警告:obs-studio:忽略软件包升级 (27.0.0-2 => 27.0.1-1)
警告:qemu:忽略软件包升级 (5.0.0-8 => 6.0.0-3)
警告:qemu-arch-extra:忽略软件包升级 (5.1.0-3 => 6.0.0-3)
正在解析依赖关系...
正在查找软件包冲突...
软件包 (11) drumstick-2.3.0-1 enchant-2.3.0-1 imath-3.0.5-1 iproute2-5.13.0-1 libgit2-1:1.1.1-1
libksba-1.6.0-1 libnm-1.32.2-1 networkmanager-1.32.2-1 pacman-contrib-1.4.0-4 tor-0.4.6.6-1
vmpk-0.8.4-1
下载大小: 13.80 MiB
全部安装大小: 78.44 MiB
净更新大小: 0.14 MiB
:: 进行安装吗? [Y/n] n
$ sudo pacman -Syu
:: 正在同步软件包数据库...
core 已经是最新版本
extra 已经是最新版本
community 已经是最新版本
multilib 已经是最新版本
archlinuxcn 已经是最新版本
:: 正在进行全面系统更新...
警告:google-chrome:忽略软件包升级 (91.0.4472.101-1 => 91.0.4472.114-1)
警告:liburing:忽略软件包升级 (0.7-2 => 2.0-1)
警告:obs-studio:忽略软件包升级 (27.0.0-2 => 27.0.1-1)
警告:qemu:忽略软件包升级 (5.0.0-8 => 6.0.0-3)
警告:qemu-arch-extra:忽略软件包升级 (5.1.0-3 => 6.0.0-3)
正在解析依赖关系...
正在查找软件包冲突...
软件包 (11) drumstick-2.3.0-1 enchant-2.3.0-1 imath-3.0.5-1 iproute2-5.13.0-1 libgit2-1:1.1.1-1
libksba-1.6.0-1 libnm-1.32.2-1 networkmanager-1.32.2-1 pacman-contrib-1.4.0-4 tor-0.4.6.6-1
vmpk-0.8.4-1
下载大小: 13.80 MiB
全部安装大小: 78.44 MiB
净更新大小: 0.14 MiB
:: 进行安装吗? [Y/n] n
$ sudo pacman -Syyu
:: 正在同步软件包数据库...
core 134.1 KiB 552 KiB/s 00:00 [##########################################] 100%
extra 1566.8 KiB 5.15 MiB/s 00:00 [##########################################] 100%
community 5.6 MiB 4.72 MiB/s 00:01 [##########################################] 100%
multilib 149.6 KiB 2.92 MiB/s 00:00 [##########################################] 100%
archlinuxcn 1881.6 KiB 5.57 MiB/s 00:00 [##########################################] 100%
:: 正在进行全面系统更新...
警告:google-chrome:忽略软件包升级 (91.0.4472.101-1 => 91.0.4472.114-1)
警告:liburing:忽略软件包升级 (0.7-2 => 2.0-1)
警告:obs-studio:忽略软件包升级 (27.0.0-2 => 27.0.1-1)
警告:qemu:忽略软件包升级 (5.0.0-8 => 6.0.0-3)
警告:qemu-arch-extra:忽略软件包升级 (5.1.0-3 => 6.0.0-3)
正在解析依赖关系...
正在查找软件包冲突...
软件包 (11) drumstick-2.3.0-1 enchant-2.3.0-1 imath-3.0.5-1 iproute2-5.13.0-1 libgit2-1:1.1.1-1 libksba-1.6.0-1
libnm-1.32.2-1 networkmanager-1.32.2-1 pacman-contrib-1.4.0-4 tor-0.4.6.6-1 vmpk-0.8.4-1
下载大小: 13.80 MiB
全部安装大小: 78.44 MiB
净更新大小: 0.14 MiB
:: 进行安装吗? [Y/n] n-yy 是强制更新软件包数据库,不是软件。你也可以不强制刷新,使用 -Syyu 只是习惯问题而已。
如果对软件包管理器的工作原理有疑问,请参阅 这个链接,里面清晰介绍了本地软件包数据库(元数据的本地缓存)等内容。
该链接中是这样描述的
你的系统上的包管理器首先会与元数据进行交互。包管理器在你的系统上创建了一个元数据的本地缓存。当你运行包管理器的更新选项(例如 apt update)时,它会通过引用仓库中的元数据来更新本地元数据缓存。
当你运行软件包管理器的安装命令(例如 apt install package_name)时,软件包管理器会引用这个缓存。如果它在缓存中找到了包的信息,它就会使用互联网连接到相应的仓库,并在你的系统上安装之前先下载包。
按照这样理解的话,就是更新整个系统时 -Syu 会自动更新数据库(如果不是最新的话),用 -Syyu 只是作者习惯,即使是新的也要更新。
@BackMountainDevil
如果没有问题 请关闭issue
Q&A 中的第一点升级系统 Syu 中加个了个 y 指的是强制刷新软件哭,第二点 删除孤立软件包 并没有对此做出解释,个人认为这个命令容易让人以为这些包是卸载的时候落下的而进行删除