安装软件
Posted 0x1e61
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了安装软件相关的知识,希望对你有一定的参考价值。
软件包管理基础
软件包管理系统使用数据库来记录下列内容。
·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卸载软件包
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: 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 ~]#
Linux软件安装——安装软件的命令
Linux软件安装——安装软件的命令
摘要:本文主要学习了如何在Linux系统中安装、更新、卸载软件。
rpm命令
rpm命令用来在Linux系统上进行软件的安装。
基本语法
安装命令:
1 [[email protected] ~]# rpm -ivh 包全名
如果没有安装则安装,如果已经安装则升级:
1 [[email protected] ~]# rpm -Uvh 包全名
如果没有安装则不安装,如果已经安装则升级:
1 [[email protected] ~]# rpm -Fvh 包全名
卸载命令:
1 [[email protected] ~]# rpm -e 包名
查询安装信息:
1 [[email protected] ~]# rpm [选项]
选项说明
关于软件安装的选项:
1 -i:安装。 2 -v:显示更详细的信息。 3 -h:显示安装进度。 4 -nodeps:不检测依赖性安装。软件安装时会检测依赖性,确定所需的底层软件是否安装,如果没有安装则会报错。如果不管依赖性,想强制安装,则可以使用这个选项。注意,这样不检测依赖性安装的软件基本上是不能使用的,所以不建议这样做。 5 -replacefiles:替换文件安装。如果要安装软件包,但是包中的部分文件已经存在,那么在正常安装时会报“某个文件已经存在”的错误,从而导致软件无法安装。使用这个选项可以忽略这个报错而覆盖安装。 6 -replacepkgs:替换软件包安装。如果软件包已经安装,那么此选项可以把软件包重复安装一遍。 7 -force:强制安装。不管是否已经安装,都重新安装。也就是-replacefiles和-replacepkgs的综合。 8 -test:测试安装。不会实际安装,只是检测一下依赖性。 9 -prefix:指定安装路径。为安装软件指定安装路径,而不使用默认安装路径。 10 -U:如果该软件没有安装则直接安装,如果安装过则升级至最新版本。 11 -F:如果该软件没有安装则不会安装,如果安装过则升级至最新版本。 12 -e:表示卸载。
关于查询软件安装信息的选项:
1 -q 包名:查询指定软件是否安装。 2 -qa:查询已经安装的所有软件。 3 -qi 包名:查询软件的详细信息,包含开发商、版本与说明等。 4 -ql 包名:查询安装软件的用到的文件和目录。 5 -qc 包名:查询软件的所有配置文件。 6 -qd 包名:查询软件的所有说明文件。 7 -qR 包名:查询软件包的依赖关系。 8 -qip 包全名:查询未安装的软件包信息。 9 -qf 系统文件名:命令查询系统文件属于什么软件。
yum命令
使用yum命令可以实现查询、安装、升级和卸载RPM包。
基本语法
查询命令:
1 [[email protected] ~]# yum [选项]
安装命令:
1 [[email protected] ~]# yum install -y 包名
升级命令:
1 [[email protected] ~]# yum update -y 包名
卸载命令:
使用yum卸载软件包时,会同时卸载所有与该包有依赖关系的其他软件包,即便有依赖包属于系统运行必备文件,也会被yum无情卸载,带来的直接后果就是使系统崩溃。
除非你能确定卸载此包以及它的所有依赖包不会对系统产生影响,否则不要使用yum卸载软件包。
1 [[email protected] ~]# yum remove 包名
选项说明
关于软件查询的选项:
1 list:查询所有已安装和可安装的软件包。 2 list 包名:查询执行软件包的安装情况。 3 search 关键字:从源服务器上查找与关键字相关的所有软件包。 4 info 包名:查询执行软件包的详细信息。 5 provides 系统文件名:查询提供指定内容的软件包。
以上是关于安装软件的主要内容,如果未能解决你的问题,请参考以下文章