贡献者: addis
apt-show-versions 包1 包2
可以查看已安装包的版本
apt show 包
显示包的详细信息,包括依赖(可以是存在但没有安装的包)
apt policy 包
显示包的来源
apt-cache rdepends 包
显示它目前被谁依赖
apt remove 包
不会清除它依赖的包,但是会清除依赖它的包! 所以一定要仔细看卸载提示中哪些包将被删除不要无脑确认!
apt autoremove
清除没有被依赖的, 被自动安装的包, 比如 apt remove
了一个包以后,就用这个清干净。也可以 apt autoremove 包
,相当于卸载包后再 autoremove
。
aptitude
通常能提供更详细的信息
apt
,aptitude
和 synaptic
都使用 dpkg
作为后端,所以它们不会冲突
aptitude
遇到冲突时会提供多种解决方案(卸载哪些包,安装哪些,升级哪些),手动选择合适的即可。这是解决 you have held broken packages
的常见办法。
/var/lib/apt/extended_states
文件储存了哪些包是自动安装的哪些是手动安装的
comm -23 <(apt-mark showmanual | sort -u) <(gzip -dc /var/log/installer/initial-status.gz | sed -n 's/^Package: //p' | sort -u)
grep " install " /var/log/dpkg.log
dpkg-query --show --showformat='${Package}\t${Status}\n' | tac | awk '/installed$/ {print $1}' | xargs apt-cache rdepends --installed | tac | awk '{ if (/^ /) ++deps; else if (!/:$/) { if (!deps) print; deps = 0 } }'
。注意这里面有一些重要的系统包(包括 linux 内核)如果不是自己装的包要删除时要小心。
comm -23 <(aptitude search '~i !~M' -F '%p' | sed "s/ *$//" | sort -u) <(gzip -dc /var/log/installer/initial-status.gz | sed -n 's/^Package: //p' | sort -u)
参考这里.
apt --installed list
列出所有安装的包
apt/dpkg
安装时不会覆盖文件,而是会给出警告并停止安装。
apt install ... -y
可以自动全选 yes
apt install -f
可以修复依赖
sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
apt upgrade
自动更新所有包,但并不删除已存在的包,apt dist-upgrade
或者等效的 apt full-upgrade
更激进,会删除已有的包,可能会更新内核,可能造成一些破坏。
apt download 包
可以不安装只下载某个包的 deb(但不会下载它的依赖!)
sudo apt-mark hold 包名
可以在 apt upgrade
的时候不更新一些包,会显示 The following packages have been kept back
,要 unhold,用 sudo apt-mark unhold 包名
The following packages have been kept back
,可以用 apt install ...
手动更新他们
apt install
命令也是先下载所有需要的以及依赖的 deb 包然后再安装,这些 deb 包存在 /var/cache/apt/archives
目录中。
apt clean
和 apt autoclean
可以清除缓存(例如下载的 deb 安装包等,后者清的没那么干净)
apt update
显示 public key 的问题,就用
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys DCC9EFBF77E11517
,其他系统替换成不同网址即可
sudo apt-clone clone --with-dpkg-repack 文件夹
可以把本机所有安装包备份到文件夹中的一个压缩文件。
apt-clone info 备份文件.gz
可以查看包的信息
sudo apt-clone restore 备份文件.gz
可以进行恢复(注意一定要相同架构相同 ubuntu 版本)
sudo apt install xxx.deb
安装
sudo apt-clone restore 备份文件.gz --destination 某文件夹
把包安装到某个文件夹(使用 chroot)。
aptic
软件据说也有类似的功能。
dpkg -l | grep -i 关键字
可以查找已安装的某个包
sudo dpkg -i 名字.deb
安装 deb 安装包,其中 名字
可以带 *
。完了以后用 sudo apt install -fy
安装缺失的依赖包(dpkg 不自动安装依赖)。
sudo apt install *.deb
,会自动安装依赖
sudo apt remove 包
或者 dpkg --remove 包
卸载,dpkg --purge 包
可以连配置文件一起卸载。
dpkg -S 文件
查看该文件是哪个包安装的。例如 dpkg -S /bin/gcc
dpkg -f 文件名.deb [field名]
查看 deb 的某个属性,如果省略 field名
则查看所有属性
sudo apt show *.deb
同样可以检查包的信息。
.deb
包中的所有包,用 sudo dpkg -r $(dpkg -f 文件名.deb Package)
(不支持 *
)
dpkg-deb
用于操作 deb 安装包(Debian package archive)
dpkg-deb -I xxx.deb
查看信息
dpkg-deb -c xxx.deb
列出所有要安装的文件和路径。这和安装完以后用 dpkg -L 包名
列出的文件一样。
snap list
列出所有的安装包(注意 Ubuntu Software 中安装的未必都是 snap)
sudo snap refresh
会更新所有包,或者显示 All snaps up to date.
snap find 关键词
搜索包
snap install code --classic
安装 vscode
--classic
,会出现如下错误 error: This revision of snap "code" was published using classic confinement and thus may perform arbitrary system changes outside of the security sandbox that snaps are usually confined to, which may put your system at risk. If you understand and want to proceed repeat the command including --classic.
snap version
查看版本
snap remove
删除包
snap run 软件名
运行某个软件,也可以直接 软件名
运行(在目录 /usr/snap/bin
下)
/etc/apt/sources.list
文件会列出软件 repo 的网址
sudo add-apt-repository ppa:dr-akulavich/lighttable
。然后就可以 update
和 install
了。
sources.list
,而是会在 /etc/apt/sources.list.d
添加两个文件,一个 .list
文件,一个 .list.save
Synaptic
软件可以很方便地查看哪些包是 PPA 安装的,以及移除 PPA
。