软件包管理基础
软件包管理系统使用数据库来记录下列内容。
·Linux系统中已安装的软件包。
·每个软件包安装了哪些文件。
·每个已安装的软件包的版本。
基于Debian的发行版(比如Ubuntu和Linux Mint)使用的是dpkg命令,该命令是其软件包管理系统的底层基础。
基于Red Hat的发行版(比如Fedora、CentOS和openSUSE)使用的是rpm命令,该命令是其软件包管理系统的底层基础。
基于Debian的系统
dpkg本身是一个底层的工具。上层的工具,如APT(advanced package tool)被用于从远程获取软件包以及处理复杂的软件包关系。 “dpkg”是“Debian Package”的简写。
·apt-cache
·apt-get
·apt
apt命令本质上是apt-cache命令和apt-get命令的前端。
apt命令的基本格式如下:
apt [options] command
使用apt管理软件包
apt list
命令会显示仓库中所有可用的软件包,如果再加入--installed
选项,就可以限制仅输出那些已安装在系统中的软件包:
apt list --installed
如果已经知道系统中的某个软件包,希望显示其详细信息,可以使用show命令来操作:
apt show package_name
└─# apt show zsh
Package: zsh
Version: 5.9-4
Priority: optional
Section: shells
Maintainer: Debian Zsh Maintainers <[email protected]>
Installed-Size: 2,519 kB
...
注意 apt show命令并不会指明软件包是否已经安装。它只根据软件仓库显示该软件包的详细信息。
有一个细节无法通过apt获得,即与特定软件包相关的所有文件。为此,需要使用dpkg命令:
dpkg -L package_name
└─# dpkg -L acl
/.
/bin
/bin/chacl
/bin/getfacl
/bin/setfacl
/usr
也可以执行相反的操作,即找出特定的文件属于哪个软件包:
dpkg --search absolute_file_name
注意,文件要使用绝对路径:
└─# dpkg --search /bin/getfacl
acl: /bin/getfacl
输出表明文件getfacl属于acl软件包。
使用apt安装软件包
该怎么查找特定的软件包呢?答案是同时使用apt命令与search命令:
apt search package_name
在默认情况下,search命令显示的是在名称或描述中包含搜索关键字的那些软件包,这有时候会产生误导。如果只想搜索软件包名称,可以加入--name-only
选项:
chou@chou-virtual-machine:~$ apt search --names-only zsh
正在排序... 完成
全文搜索... 完成
fizsh/focal,focal 1.0.9-1 all
Friendly Interactive ZSHell
zsh/focal-updates,focal-security 5.8-3ubuntu1.1 amd64
具有很多特性的 Shell
......
一旦找到待安装的软件包,就可以使用apt安装了,非常简单:
apt install package_name
sudo apt install zsh
注意 上面的例子中用到了sudo命令。sudo命令允许以root用户身份执行命令。像安装软件这类管理任务都需要使用sudo命令帮助完成。
用apt升级软件
upgrade命令可以使用仓库中的任何新版本安全地升级系统中所有的软件包:
apt upgrade
upgrade命令在升级过程中不会删除任何软件包。如果必须删除某个软件包才能完成升级,可以使用以下命令:
apt full-upgrade
使用apt卸载软件包
apt
的remove
命令可以删除软件包,同时保留数据和配置文件。如果要将软件包以及相关的数据和配置文件全部删除,那么需要使用purge
选项:
apt purge zsh
如果apt警告我们卸载的软件包存在依赖,不能自动删除,以免其他软件包还有需要。如果确定有依赖关系的软件包不会再有他用,可以使用autoremove
命令将其删除:
apt autoremove
autoremove命令会检查所有被标记为存在依赖关系且不再被需要的软件包。
apt仓库
apt默认的软件存储库位置是在安装Linux发行版时设置的。仓库位置保存在文件/etc/apt/sources.list中。
sources.list使用下列结构来指定仓库源:
deb (or deb-src) address distribution_name package_type_list
deb或deb-src指定了软件包的类型。deb表明这是一个已编译程序的仓库源,而deb-src表明这是一个源代码的仓库源。
address是软件仓库的网址。
distribution_name是该软件仓库的发行版的版本名称。
最后,package_type_list可能并不止一个单词,它还表明仓库里面有什么类型的软件包。
基于Red Hat的系统
·yum:用于Red Hat、CentOS和Fedora。
·zypper:用于openSUSE。
·dnf:yum的升级版,有一些新增的特性。
上述前端全部基于命令行工具rpm
列出已安装的软件包
yum list installed
除了会给出软件包的详细描述,它还可以告诉你软件包是否已经安装:
[root@Wesuiliye ~]# yum list xterm
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
Available Packages
xterm.x86_64 295-3.el7_9.1 updates
[root@Wesuiliye ~]# yum list installed xterm
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
Error: No matching Packages to list
[root@Wesuiliye ~]# yum list installed bash
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
Installed Packages
bash.x86_64 4.2.46-35.el7_9 @updates
[root@Wesuiliye ~]#
找出文件系统中的某个文件是由哪个软件包安装
yum install package_nam
[root@Wesuiliye ~]# yum provides bash
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
bash-4.2.46-34.el7.x86_64 : The GNU Bourne Again shell
Repo : base
bash-4.2.46-35.el7_9.x86_64 : The GNU Bourne Again shell
Repo : updates
bash-4.2.46-35.el7_9.x86_64 : The GNU Bourne Again shell
Repo : @updates
[root@Wesuiliye ~]#
使用yum安装软件
yum install package_name
使用yum升级软件
yum list updates
没输出就是好事,因为这说明没什么可升级的!但如果你发现有需要升级的软件包,可以输入下列命令:
yum update
注意 yum工具的upgrade命令支持--skip-broken选项,可以跳过依赖关系损坏的软件包,同时仍尝试继续升级其他包
使用yum卸载软件
yum remove package_name
处理损坏的依赖关系
有时在安装多个软件包时,一个软件包的依赖关系可能会被另一个软件包搞乱。
这称为依赖关系损坏(broken dependency)。
如果系统出现了这种情况,可以先试试下列命令:
yum clean all
然后尝试使用yum命令的update选项。
RPM仓库
要想查看当前拉取软件的仓库,可以使用下列命令:
yum repolist
如果发现其中没有所需的仓库,那就需要编辑配置文件了。
[root@Wesuiliye ~]# cd /etc/yum.repos.d/
[root@Wesuiliye yum.repos.d]# ll
total 16
-rw-r--r-- 1 root root 675 Mar 8 08:27 CentOS-Base.repo
-rw-r--r-- 1 root root 675 Mar 2 12:30 CentOS-Base.repo.bak
-rw-r--r-- 1 root root 2081 Apr 4 19:27 docker-ce.repo
-rw-r--r-- 1 root root 230 Mar 2 12:30 epel.repo
[root@Wesuiliye yum.repos.d]#
使用容器管理软件
云计算带来了应用程序打包方式的一种新范式:应用程序容器(application container)。应用程序容器创建了一个环境,其中包含了应用程序运行所需的全部文件,包括运行时库文件。开发人员随后可以将应用程序容器作为单个软件包分发,保证能够在任何Linux系统中正常运行。
snap
Ubuntu Linux发行版的创建者Canonical开发了一种称为snap的应用程序容器格式。
使用snap version命令检查snap是否正在运行:
chou@chou-virtual-machine:~$ snap version
snap 2.58.2
snapd 2.58.2
series 16
ubuntu 20.04
kernel 5.15.0-72-generic
chou@chou-virtual-machine:~$
如果snap正在运行,可以使用snap list命令查看当前已安装的snap应用程序列表:
chou@chou-virtual-machine:~$ snap list
名称 版本 修订版本 追踪 发布者 注记
bare 1.0 5 latest/stable canonical✓ base
core20 20230207 1828 latest/stable canonical✓ base
gnome-3-38-2004 0+git.6f39565 119 latest/stable/… canonical✓ -
gtk-common-themes 0.1-81-g442e511 1535 latest/stable/… canonical✓ -
snap-store 41.3-66-gfe1e325 638 latest/stable/… canonical✓ -
snapd 2.58.2 18357 latest/stable canonical✓ snapd
chou@chou-virtual-machine:~$
snap find命令可以在snap仓库中搜索指定程序:
chou@chou-virtual-machine:~$ snap find solitaire
名称 版本 发布者 注记 摘要
solitaire 1.1 1bsyl - usual Solitaire card game, as known as Patience or Klondike
solitaire-ultra 1.0.0 marisag1967 - Solitaire game for Windows
......
snap info命令可以查看snap应用程序(简称为snap)的详细信息:
chou@chou-virtual-machine:~$ snap info solitaire
name: solitaire
summary: usual Solitaire card game, as known as Patience or Klondike
publisher: Sylvain Becker (1bsyl)
store-url: https://snapcraft.io/solitaire
contact: [email protected]
license: Proprietary
description: |
This is the usual Solitaire card game. Also known as Patience or Klondike.
snap-id: 0rnkesZh4jFy9oovDTvL661qVTW4iDdE
channels:
latest/stable: 1.1 2020-12-14 (5) 44MB -
latest/candidate: 1.0 2017-05-17 (2) 11MB -
latest/beta: 1.0 2017-05-17 (2) 11MB -
latest/edge: 1.0 2017-05-17 (2) 11MB -
chou@chou-virtual-machine:~$
snap install命令可以安装新的snap:
$ sudo snap install solitaire
[sudo] password for rich:
solitaire 1.0 from Sylvain Becker (1bsyl) installed
$
如果需要删除某个snap,使用snap remove命令即可:
$ sudo snap remove solitaire
solitaire removed
$
注意 也可以通过禁用来代替删除。使用snap disable命令即可。要想重新恢复snap,可以使用snap enable命令。
flatpak
flatpak应用程序容器格式是作为一个独立的开源项目创建的,与任何特定的Linux发行版都没有直接联系。
使用flatpak list
命令列出已安装的应用程序容器:
[root@Wesuiliye ~]# flatpak list
[root@Wesuiliye ~]#
flatpak search
命令可以在flatpak仓库中搜索指定应用程序:
[root@Wesuiliye ~]# flatpak search solitaire
No matches found
[root@Wesuiliye ~]#
使用容器时,必须使用其Application ID值,而不是名称。可以使用flatpak install
命令安装应用程序:
flatpak install
可以使用flatpak uninstall
命令删除应用程序容器:
flatpak uninstall
从源代码安装
在软件包管理系统和应用程序容器出现之前,开源软件开发人员只能以源代码形式分发软件,用户需要在系统中自行编译。源代码形式的软件包通常以tarball的形式发布。
经由tar命令创建出的归档文件通常称为tarball.参见维基百科条目"tar (computing)"
使用软件包sysstat作为示例。sysstat提供了各种系统监测工具,非常好用。
下载源代码:
git clone git://github.com/sysstat/sysstat
先使用cd命令进入新目录,然后列出目录内容:
[root@Wesuiliye data]# cd sysstat/
[root@Wesuiliye sysstat]# ls
activity.c count.c iostat.c pcp_stats.h rd_stats.h sadf_misc.c sysstat.sysconfig.in
BUG_REPORT count.h iostat.h pidstat.c README.md sa.h systest.c
build CREDITS json_stats.c pidstat.h rndr_stats.c sar.c systest.h
CHANGES cron json_stats.h pr_stats.c rndr_stats.h sa_wrap.c tapestat.c
cifsiostat.c do_test Makefile.in pr_stats.h sa1.in svg_stats.c tapestat.h
cifsiostat.h FAQ.md man pr_xstats.c sa2.in svg_stats.h tests
common.c format.c mpstat.c pr_xstats.h sa_common.c sysconfig.in version.in
common.h iconfig mpstat.h raw_stats.c sa_conv.c sysstat-12.7.2.lsm xml
configure images nls raw_stats.h sa_conv.h sysstat-12.7.2.spec xml_stats.c
configure.ac INSTALL pcp_def_metrics.c rd_sensors.c sadc.c sysstat.in xml_stats.h
contrib ioconf.c pcp_def_metrics.h rd_sensors.h sadf.c sysstat.ioconf
COPYING ioconf.h pcp_stats.c rd_stats.c sadf.h sysstat.service.in
[root@Wesuiliye sysstat]#
在目录的列表中,应该能看到README文件或INSTALL文件。务必阅读这些文件,其中写明了软件安装所需的操作步骤。
cat INSTALL
按照INSTALL文件中的建议,下一步是运行configure工具,检查你的Linux,确保拥有合适的能够编译源代码的编译器,以及正确的库依赖关系:
[root@Wesuiliye sysstat]# ./configure
...
...
config.status: creating man/cifsiostat.1
config.status: creating tests/variables
config.status: creating Makefile
Sysstat version: 12.7.3
Installation prefix: /usr/local
rc directory: /etc/rc.d
Init directory: /etc/rc.d/init.d
Systemd unit dir: /usr/lib/systemd/system
Systemd sleep dir: /usr/lib/systemd/system-sleep
Configuration file: /etc/sysconfig/sysstat
Man pages directory: ${datarootdir}/man
Compiler: gcc -std=gnu11
Compiler flags: -g -O2
Linker flags:
如果有问题,则configure会显示错误消息,说明缺失了哪些东西。
注意 大多数Linux程序是用C或C++编程语言编写的。要在系统中编译这些源代码,需要安装gcc软件包和make软件包。
下一步是用make命令来构建各种二进制文件。make命令会编译源代码,然后由链接器生成最终的可执行文件。和configure命令一样,make命令会在编译和链接所有源代码文件的过程中产生大量的输出:
[root@Wesuiliye sysstat]# make
gcc -std=gnu11 -o sadc.o -c -g -O2 -Wall -Wstrict-prototypes -pipe -O2 -fno-tree-slp-vectorize -DSA_DIR=\"/var/log/sa\" -DSADC_PATH=\"/usr/local/lib64/sa/sadc\" -DHAVE_SYS_SYSMACROS_H -DHAVE_LINUX_SCHED_H -DHAVE_SYS_PARAM_H -DUSE_NLS -DPACKAGE=\"sysstat\" -DLOCALEDIR=\"/usr/local/share/locale\" sadc.c
make命令结束后,可运行的sysstat程序就出现在目录中了。但是从这个目录中运行程序有点儿不方便。你希望将其安装在Linux系统的常用位置。为此,必须以root用户身份登录(或者使用sudo命令),然后使用make命令的install选项:
[root@Wesuiliye ~]# make install
查看一下sysstat版本看成功没有
[root@Wesuiliye ~]# sar -V
sysstat version 10.1.5
(C) Sebastien Godard (sysstat <at> orange.fr)
[root@Wesuiliye ~]#
标签:安装,apt,命令,yum,软件包,snap,软件,root
From: https://www.cnblogs.com/Wesuiliye/p/17425120.html