安装软件

软件包管理基础

软件包管理系统使用数据库来记录下列内容。

·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 <pkg-zsh-devel@lists.alioth.debian.org>
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卸载软件包

aptremove命令可以删除软件包,同时保留数据和配置文件。如果要将软件包以及相关的数据和配置文件全部删除,那么需要使用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:   sylvain.becker@gmail.com
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 ~]# 
posted @ 2023-05-23 14:50  0x1e61  阅读(90)  评论(0编辑  收藏  举报