安装软件程序

article/2025/10/10 13:52:18

包管理基础

在深入了解Linux软件包管理之前,本章将先介绍一些基础知识。各种主流Linux发行版都采用了某种形式的包管理系统来控制软件和库的安装。 PMS利用一个数据库来记录各种相关内容:
 Linux系统上已安装了什么软件包;
 每个包安装了什么文件;
 每个已安装软件包的版本。
软件包存储在服务器上,可以利用本地Linux系统上的PMS工具通过互联网访问。这些服务器称为仓库( repository)。可以用PMS工具来搜索新的软件包,或者是更新系统上已安装软件包。

软件包通常会依赖其他的包,为了前者能够正常运行,被依赖的包必须提前安装在系统中。PMS工具将会检测这些依赖关系,并在安装需要的包之前先安装好所有额外的软件包。PMS的不足之处在于目前还没有统一的标准工具。

PMS工具及相关命令在不同的Linux发行版上有很大的不同。 Linux中广泛使用的两种主要的PMS基础工具是dpkg和rpm。

基于Debian的发行版(如Ubuntu和Linux Mint)使用的是dpkg命令,这些发行版的PMS工具也是以该命令为基础的。 dpkg会直接和Linux系统上的PMS交互,用来安装、管理和删除软件包。

基于Red Hat的发行版(如Fedora、 openSUSE及Mandriva)使用的是rpm命令,该命令是其PMS的底层基础。类似于dpkg命令, rmp命令能够列出已安装包、安装新包和删除已有软件。注意,这两个命令是它们各自PMS的核心,并非全部的PMS。许多使用dpkg或rpm命令的Linux发行版都有各自基于这些命令的特定PMS工具,这些工具能够助你事半功倍。

基于 Debian 的系统

dpkg命令是基于Debian系PMS工具的核心。包含在这个PMS中的其他工具有:
 apt-get
 apt-cache
 aptitude
到目前为止,最常用的命令行工具是aptitude,这是有原因的。 aptitude工具本质上是apt工具和dpkg的前端。 dpkg是软件包管理系统工具,而aptitude则是完整的软件包管理系统。命令行下使用aptitude命令有助于避免常见的软件安装问题,如软件依赖关系缺失、系统环境不稳定及其他一些不必要的麻烦。

用 aptitude 管理软件包

Linux系统管理员面对的一个常见任务是确定系统上已经安装了什么软件包。好在aptitude有个很方便的交互式界面可以轻松完成这项任务。如果使用的Linux发行版中已经安装了aptitude,只需要在shell提示符键入aptitude并按下回车键就行了。紧接着就会进入aptitude的全屏模式,如图9-1所示。
在这里插入图片描述
可以用方向键在菜单上移动。选择菜单选项Installed Packages来查看已安装了什么软件包。你可以看到几组软件包,比如编辑器等。每组后面的括号里都有个数字,表示这个组包含多少个软件包。

使用方向键高亮显示一个组,按回车键来查看每个软件包分组。你会看到每个单独的软件包名称以及它们的版本号。在软件包上按回车键可以获得更详细的信息,比如软件包的描述、主页、大小和维护人员等。

看完了已安装软件包后,按q键来退出显示。你可以继续用方向键和回车键打开或关闭软件包和它们所在的分组。如果想退出,多按几次q键,直到看到弹出的屏幕提示“ Really quit Aptitude?”。

如果你已经知道了系统上的那些软件包,只想快速显示某个特定包的详细信息,就没必要到aptitude的交互式界面。可以在命令行下以单个命令的方式使用aptitude。

aptitude show package_name

下面的例子显示了包mysql-client的详情。

$ aptitude show mysql-client
Package: mysql-client
State: not installed
Version: 5.5.38-0ubuntu0.14.04.1
Priority: optional
Section: database
Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
Architecture: all
Uncompressed Size: 129 k
Depends: mysql-client-5.5
Provided by: mysql-client-5.5
Description: MySQL database client (metapackage depending on the latest version)
This is an empty package that depends on the current "best" version of
mysql-client (currently mysql-client-5.5), as determined by the MySQL
maintainers. Install this package if in doubt about which MySQL version you
want, as this is the one considered to be in the best shape by the Maintainers.
Homepage: http://dev.mysql.com/
$

说明 aptitude show命令显示上面例子中的软件包还没有安装到系统上。它输出的软件包相关的详细信息来自于软件仓库。

无法通过aptitude看到的一个细节是所有跟某个特定软件包相关的所有文件的列表。要得到这个列表,就必须用dpkg命令。

dpkg -L package_name

下面这个例子是用dpkg列出vim-common软件包所安装的全部文件。

$ dpkg -L vim-common
/.
/usr
/usr/bin
/usr/bin/xxd
/usr/bin/helpztags
/usr/lib
/usr/lib/mime
/usr/lib/mime/packages
/usr/lib/mime/packages/vim-common
/usr/share
/usr/share/man
/usr/share/man/ru
/usr/share/man/ru/man1
/usr/share/man/ru/man1/vim.1.gz
/usr/share/man/ru/man1/vimdiff.1.gz
/usr/share/man/ru/man1/xxd.1.gz
/usr/share/man/it
/usr/share/man/it/man1
[...]

同样可以进行反向操作,查找某个特定文件属于哪个软件包。

dpkg --search absolute_file_name

注意,在使用的时候必须用绝对文件路径。

$ dpkg --search /usr/bin/xxd
vim-common: /usr/bin/xxd

从输出中可以看出/usr/bin/xxd文件是作为vim-common包的一部分被安装的。

用 aptitude 安装软件包

了解了怎样在系统中列出软件包信息之后,本节将带你逐步学习怎样安装软件包。首先,要确定准备安装的软件包名称。怎么才能找到特定的软件包呢?用aptitude命令加search选项。

aptitude search package_name

search选项的妙处在于你无需在package_name周围加通配符。通配符会隐式添加。下面是用aptitude来查找wine软件包的例子。

$ aptitude search wine
p gnome-wine-icon-theme - red variation of the GNOME- ...
v libkwineffects1-api -
p libkwineffects1a - library used by effects...
p q4wine - Qt4 GUI for wine (W.I.N.E)
p shiki-wine-theme - red variation of the Shiki- ...
p wine - Microsoft Windows Compatibility ...
p wine-dev - Microsoft Windows Compatibility ...
p wine-gecko - Microsoft Windows Compatibility ...
p wine1.0 - Microsoft Windows Compatibility ...
p wine1.0-dev - Microsoft Windows Compatibility ...
p wine1.0-gecko - Microsoft Windows Compatibility ...
p wine1.2 - Microsoft Windows Compatibility ...
p wine1.2-dbg - Microsoft Windows Compatibility ...
p wine1.2-dev - Microsoft Windows Compatibility ...
p wine1.2-gecko - Microsoft Windows Compatibility ...
p winefish - LaTeX Editor based on Bluefish

注意,在每个包名字之前都有一个p或i。如果看到一个i,说明这个包现在已经安装到了你
的系统上了。如果看到一个p或v,说明这个包可用,但还没安装。我们在上面的列表中可以看到
系统中尚未安装wine,但是在软件仓库中可以找到这个包。
在系统上用aptitude从软件仓库中安装软件包非常简单。
aptitude install package_name
一旦通过search选项找到了软件包名称,只要将它通过install选项插入aptitude命令。

$ sudo aptitude install wine
The following NEW packages will be installed:
cabextract{a} esound-clients{a} esound-common{a} gnome-exe-thumbnailer
{a}
icoutils{a} imagemagick{a} libaudio2{a} libaudiofile0{a} libcdt4{a}
libesd0{a} libgraph4{a} libgvc5{a} libilmbase6{a} libmagickcore3-extra
{a}
libmpg123-0{a} libnetpbm10{a} libopenal1{a} libopenexr6{a}
libpathplan4{a} libxdot4{a} netpbm{a} ttf-mscorefonts-installer{a}
ttf-symbol-replacement{a} winbind{a} wine wine1.2{a} wine1.2-gecko{a}
0 packages upgraded, 27 newly installed, 0 to remove and 0 not upgraded.
Need to get 0B/27.6MB of archives. After unpacking 121MB will be used.
Do you want to continue? [Y/n/?] Y
Preconfiguring packages ...
[...]
All done, no errors.
All fonts downloaded and installed.
Updating fontconfig cache for /usr/share/fonts/truetype/msttcorefonts
Setting up winbind (2:3.5.4~dfsg-1ubuntu7) ...
* Starting the Winbind daemon winbind
[ OK ]
Setting up wine (1.2-0ubuntu5) ...
Setting up gnome-exe-thumbnailer (0.6-0ubuntu1) ...
Processing triggers for libc-bin ...
ldconfig deferred processing now taking place

说明 在上面的例子中,在aptitude命令之前出现了sudo命令。 sudo命令允许你以root用户身
份运行一个命令。可以用sudo命令进行管理任务,比如安装软件。

要检查安装过程是否正常,只要再次使用search选项就可以了。这次你应该可以看到在wine软件包出现了i u ,这说明它已经安装好了。

你可能还会注意到这里的另外一些包前面也有i u 。这是因为aptitude自动解析了必要的包依赖关系,并安装了需要的额外的库和软件包。这是许多包管理系统都有的非常好的功能。

用 aptitude 更新软件

尽管aptitude可以帮忙解决安装软件时遇到的问题,但解决有依赖关系的多个包的更新会比较烦琐。要用软件仓库中的新版本妥善地更新系统上所有的软件包,可用safe-upgrade选项。

aptitude safe-upgrade

注意,这个命令不需要使用软件包名称作为参数。因为safe-upgrade选项会将所有已安装的包更新到软件仓库中的最新版本,更有利于系统稳定。
这里是aptitude safe-upgrade命令的输出示例。

$ sudo aptitude safe-upgrade
The following packages will be upgraded:
evolution evolution-common evolution-plugins gsfonts libevolution
xserver-xorg-video-geode
6 packages upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
Need to get 9,312kB of archives. After unpacking 0B will be used.
Do you want to continue? [Y/n/?] Y
Get:1 http://us.archive.ubuntu.com/ubuntu/ maverick/main
libevolution i386 2.30.3-1ubuntu4 [2,096kB]
[...]
Preparing to replace xserver-xorg-video-geode 2.11.9-2
(using .../xserver-xorg-video-geode_2.11.9-3_i386.deb) ...
Unpacking replacement xserver-xorg-video-geode ...
Processing triggers for man-db ...
Processing triggers for desktop-file-utils ...
Processing triggers for python-gmenu ...
[...]
Current status: 0 updates [-6].

还有一些不那么保守的软件升级选项:
 aptitude full-upgrade
 aptitude dist-upgrade
这些选项执行相同的任务,将所有软件包升级到最新版本。它们同safe-upgrade的区别在于,它们不会检查包与包之间的依赖关系。整个包依赖关系问题非常麻烦。如果不是很确定各种包的依赖关系,那还是坚持用safe-upgrade选项吧。

说明 显然,应该定期运行aptitude的safe-upgrade选项来保持系统处于最新状态。这点在安装了一个全新的发行版之后尤其重要。通常在发行版推出最新的完整发布之后,就会 跟着出现很多新的安全补丁和更新。

用 aptitude 卸载软件

用aptitude卸载软件包与安装及更新它们一样容易。你要作出的唯一选择就是要不要保留软件数据和配置文件。

要想只删除软件包而不删除数据和配置文件,可以使用aptitude的remove选项。要删除软件包和相关的数据和配置文件,可用purge选项。

$ sudo aptitude purge wine
[sudo] password for user:
The following packages will be REMOVED:
cabextract{u} esound-clients{u} esound-common{u} gnome-exe-thumbnailer
{u}
icoutils{u} imagemagick{u} libaudio2{u} libaudiofile0{u} libcdt4{u}
libesd0{u} libgraph4{u} libgvc5{u} libilmbase6{u} libmagickcore3-extra
{u}
libmpg123-0{u} libnetpbm10{u} libopenal1{u} libopenexr6{u}
libpathplan4{u} libxdot4{u} netpbm{u} ttf-mscorefonts-installer{u}
ttf-symbol-replacement{u} winbind{u} wine{p} wine1.2{u} wine1.2-gecko
{u}
0 packages upgraded, 0 newly installed, 27 to remove and 6 not upgraded.
Need to get 0B of archives. After unpacking 121MB will be freed.
Do you want to continue? [Y/n/?] Y
(Reading database ... 120968 files and directories currently installed.)
Removing ttf-mscorefonts-installer ...
[...]
Processing triggers for fontconfig ...
Processing triggers for ureadahead ...
Processing triggers for python-support ...

要看软件包是否已删除,可以再用aptitude的search选项。如果在软件包名称的前面看到一个c,意味着软件已删除,但配置文件尚未从系统中清除;如果前面是个p的话,说明配置文件也已删除。

aptitude 仓库

aptitude默认的软件仓库位置是在安装Linux发行版时设置的。具体位置存储在文件/etc/apt/sources. list中。

很多情况下,根本不需要添加或删除软件仓库,所以也没必要接触这个文件。但aptitude只会从这些仓库中下载文件。另外,在搜索软件进行安装或更新时, aptitude同样只会检查这些库。如果需要为你的PMS添加一些额外的软件仓库,就在这个文件中设置吧。

窍门 Linux发行版的开发人员下了大工夫,以保证添加到软件仓库的包版本不会互相冲突。通 常通过库来升级或安装软件包是最安全的。即使在其他地方有更新的版本,也应该等到该版本出现在你的Linux发行版仓库中的时候再安装。

首先,我们注意到文件里满是帮助性的注释和警告。使用下面的结构来指定仓库源。

deb (or deb-src) address distribution_name package_type_list

deb或deb-src的值表明了软件包的类型。 deb值说明这是一个已编译程序源,而deb-src值则说明这是一个源代码的源。

address条目是软件仓库的Web地址。 distribution_name条目是这个特定软件仓库的发行版版本的名称。在这个例子中,发行版名称是trusty。这未必就是说你使用的发行版就是Ubuntu Trusty Tahr,它只是说明这个Linux发行版正在用Ubuntu Trusty Tahr软件仓库!举个例子,在Linux Mint的sources.list文件中,你能看到混用了Linux Mint和Ubuntu的软件仓库。

最后, package_type_list条目可能并不止一个词,它还表明仓库里面有什么类型的包。
你可以看到诸如main、 restricted、 universe和partner这样的值。

当需要给你的source_list文件添加软件仓库时,你可以自己发挥,但一般会带来问题。通常本软件仓库网站或各种包开发人员网站上都会有一行文本,你可以直接复制, 然后粘贴到sources.list文件中。最好选择较安全的途径并且只复制/粘贴。

aptitude前端界面提供了智能命令行选项来配合基于Debian的dpkg工具。现在是时候了解基于Red Hat的发行版的rpm工具和它的各种前端界面了。

基于 Red Hat 的系统

和基于Debian的发行版类似,基于Red Hat的系统也有几种不同的可用前端工具。常见的有以下3种。
 yum:在Red Hat和Fedora中使用。
 urpm:在Mandriva中使用。
 zypper:在openSUSE中使用。
这些前端都是基于rpm命令行工具的。

列出已安装包

要找出系统上已安装的包,可在shell提示符下输入如下命令:

yum list installed

输出的信息可能会在屏幕上一闪而过,所以最好是将已安装包的列表重定向到一个文件中。可以用more或less命令(或一个GUI编辑器)按照需要查看这个列表。

yum list installed > installed_software

要列出openSUSE或Mandriva发行版上的已安装包,可参考表9-1中的命令。遗憾的是,Mandriva中采用的urpm工具无法生成当前已安装软件列表。因此,你需要转向底层的rpm工具。
表9-1 如何用zypper和urpm列出已安装软件

版 本前端工具命 令
Mandrivaurpmrpm -qa > installed_software
openSUSEzypperzypper search -I > installed_software

yum擅长找出某个特定软件包的详细信息。它能给出关于包的非常详尽的描述,另外你还可以通过一条简单的命令查看包是否已安装。

# yum list xterm
Loaded plugins: langpacks, presto, refresh-packagekit
Adding en_US to language list
Available Packages
xterm.i686 253-1.el6
#
# yum list installed xterm
Loaded plugins: refresh-packagekit
Error: No matching Packages to list

用urpm和zypper列出详细软件包信息的命令见表9-2。还可用zypper命令的info选项从库中获得一份更详细的包信息。
表9-2 如何用zypper和urpm查看各种包详细信息

信息类型前端工具命 令
包信息urpmurpmq -i package_name
是否安装urpmrpm -q package_name
包信息zypperzypper search -s package_name
是否安装zypper同样的命令,注意在Status列查找i

最后,如果需要找出系统上的某个特定文件属于哪个软件包,万能的yum可以做到!只要输入命令:

yum provides file_name

这里有个查找配置文件/etc/yum.conf归属的例子。

# yum provides /etc/yum.conf
Loaded plugins: fastestmirror, refresh-packagekit, security
Determining fastest mirrors
* base: mirror.web-ster.com
* extras: centos.chi.host-engine.com
* updates: mirror.umd.edu
yum-3.2.29-40.el6.centos.noarch : RPM package installer/updater/manager
Repo : base
Matched from:
Filename : /etc/yum.conf
yum-3.2.29-43.el6.centos.noarch : RPM package installer/updater/manager
Repo : updates
Matched from:
Filename : /etc/yum.conf
yum-3.2.29-40.el6.centos.noarch : RPM package installer/updater/manager
Repo : installed
Matched from:
Other : Provides-match: /etc/yum.conf

用 yum 安装软件

用yum安装软件包极其简单。下面这个简单的命令会从仓库中安装软件包、所有它需要的库以及依赖的其他包:

yum install package_name

下面的例子是安装在第2章中讨论过的xterm包。

$ su -
Password:
# yum install xterm
Loaded plugins: fastestmirror, refresh-packagekit, security
Determining fastest mirrors
* base: mirrors.bluehost.com
* extras: mirror.5ninesolutions.com
* updates: mirror.san.fastserv.com
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package xterm.i686 0:253-1.el6 will be installed
--> Finished Dependency Resolution
Dependencies Resolved
[...]
Installed:
xterm.i686 0:253-1.el6
Complete!

说明 在上面的例子中,我们在运行yum命令之前使用了su-命令。这个命令允许你切换到root用户。在Linux系统上, #表明你是以root用户身份登录的。应该只有在运行管理性的任务时才临时切换到root用户(比如安装和更新软件)。也可以使用sudo命令。

也可以手动下载rpm安装文件并用yum安装,这叫作本地安装。基本的命令是:

yum localinstall package_name.rpm

你现在应该能发现yum的优点之一就是它的命令富有逻辑性,而且对用户也友好。
表9-3显示了如何用urpm和zypper安装包。注意,如果不是以root用户身份登录,你会在使用urpm时得到一个“command not found”的错误消息。
表9-3 如何用zypper和urpm安装软件

前端工具命 令
urpmurpmi package_name
zypperzypper install package_name

用 yum 更新软件

在大多数Linux发行版上,如果你是在GUI上工作,就会看到一些好看的小通知图标,告诉你需要更新了。在命令行下的话,就得费点事了。要列出所有已安装包的可用更新,输入如下命令:

yum list updates

如果这个命令没有输出就太好了,因为它说明你没有任何需要更新的!但如果发现某个特定软件包需要更新,输入如下命令:

yum update package_name

如果想对更新列表中的所有包进行更新,只要输入如下命令:

yum update

Mandriva和openSUSE上用来更新软件包的命令列在了表9-4中。在使用urpm时,软件仓库数
据库会自动更新,软件包也会更新。
表9-4 如何用zypper和urpm更新软件

前端工具命 令
urpmurpmi --auto-update --update
zypperzypper update

用 yum 卸载软件

yum工具还提供了一种简单的方法来卸载系统中不再想要的应用。和aptitude一样,你需要决定是否保留软件包的数据和配置文件。

只删除软件包而保留配置文件和数据文件,就用如下命令:

yum remove package_name

要删除软件和它所有的文件,就用erase选项:

yum erase package_name

在表9-5中不难发现,用urpm和zypper删除软件同样简单。这两个工具的作用类似于yum的erase选项。

前端工具命 令
urpmurpme package_name
zypperzypper remove package_name

有了PMS包的生活尽管安逸了不少,但也不是风平浪静。偶尔也会有一些波澜,好在总有解决的办法。

处理损坏的包依赖关系

有时在安装多个软件包时,某个包的软件依赖关系可能会被另一个包的安装覆盖掉。这叫作损坏的包依赖关系( broken dependency)。
如果系统出现了这个问题,先试试下面的命令:

yum clean all

然后试着用yum命令的update选项。有时,只要清理了放错位置的文件就可以了。如果这还解决不了问题,试试下面的命令:

yum deplist package_name

这个命令显示了所有包的库依赖关系以及什么软件可以提供这些库依赖关系。一旦知道某个包需要的库,你就能安装它们了。下面是确定xterm包依赖关系的例子。

# yum deplist xterm
Loaded plugins: fastestmirror, refresh-packagekit, security
Loading mirror speeds from cached hostfile
* base: mirrors.bluehost.com
* extras: mirror.5ninesolutions.com
* updates: mirror.san.fastserv.com
Finding dependencies:
package: xterm.i686 253-1.el6
dependency: libncurses.so.5
provider: ncurses-libs.i686 5.7-3.20090208.el6
dependency: libfontconfig.so.1
provider: fontconfig.i686 2.8.0-3.el6
dependency: libXft.so.2
provider: libXft.i686 2.3.1-2.el6
dependency: libXt.so.6
provider: libXt.i686 1.1.3-1.el6
dependency: libX11.so.6
provider: libX11.i686 1.5.0-4.el6
dependency: rtld(GNU_HASH)
provider: glibc.i686 2.12-1.132.el6
provider: glibc.i686 2.12-1.132.el6_5.1
provider: glibc.i686 2.12-1.132.el6_5.2
dependency: libICE.so.6
provider: libICE.i686 1.0.6-1.el6
dependency: libXaw.so.7

如果这样仍未解决问题,还有最后一招:

yum update --skip-broken

–skip-broken选项允许你忽略依赖关系损坏的那个包,继续去更新其他软件包。这可能救不了损坏的包,但至少可以更新系统上的其他包。
表9-6中列出了用urpm和zypper来尝试修复损坏的依赖关系的命令。用zypper时,只有一个命令能够用来验证和修复损坏的依赖关系。用urpm时,如果clean选项不工作,你可以跳过更新那些有问题的包。要这么做的话,就必须将有问题包的名字添加到文件/etc/urpmi/skip.list。
表9-6 用zypper和urpm修复损坏的依赖关系

前端工具命 令
urpmurpmi –clean
Zipperzypper verify

yum 软件仓库

类似于aptitude系统, yum也是在安装发行版的时候设置的软件仓库。这些预设的仓库就能很好地满足你的大部分需求。但如果需要从其他仓库安装软件,有些事情你得知道。

窍门 聪明的系统管理员会坚持使用通过审核的仓库。通过审核的仓库是指该发行版官方网站上指定的库。如果你添加了未通过审核的库,就失去了稳定性方面的保证,可能陷入损坏的依赖关系惨剧中。

要想知道你现在正从哪些仓库中获取软件,输入如下命令:

yum repolist

如果仓库中没有需要的软件,你可以编辑一下配置文件。 yum的仓库定义文件位于/etc/yum.repos.d。你需要添加正确的URL,并获得必要的加密密钥。

像rpmfusion.org这种优秀的仓库站点会列出必要的使用步骤。有时这些仓库网站会提供一个可下载的rpm文件,可以用yum localinstall命令进行安装。这个rpm文件在安装过程会为你完成所有的仓库设置工作。现在方便多了!
urpm称它的仓库为媒体。查看urpm媒体和zypper仓库的命令列在了表9-7中。注意,用这两个前端工具时不需要编辑配置文件。只需要输入命令就可以添加媒体或仓库。
表9-7 zypper和urpm的库

动 作前端工具命 令
显示仓库urpmurpmq --list-media
添加仓库urpmurpmi.addmedia path_name
显示仓库zypperzypper repos
添加仓库zypperzypper addrepo path_name

基于Debian的和基于Red Hat的系统都使用包管理系统来简化管理软件的过程。现在我们就要离开包管理系统的世界,看看稍微麻烦一点的:直接从源码安装。

从源码安装

在好用的rpm和dpkg工具出现之前,管理员必须知道如何从tarball来解包和安装软件。
如果你经常在开源软件环境中工作,就很可能会遇到打包成tarball形式的软件。
在这个例子中用到了软件包sysstat。 sysstat提供了各种系统监测工具,非常好用。首先需要将sysstat的tarball下载到你的Linux系统上。通常能在各种Linux网站上找到sysstat包,但最好是直接到程序的官方站点下载( http://sebastien.godard.pagesperso-orange.fr/)。
单击Download(下载)链接,就会转入文件下载页面。本书编写时的最新版本是11.1.1,发行文件名是sysstat-11.1.1.tar.gz。
将文件下载到你的Linux系统上,然后解包。要解包一个软件的tarball,用标准的tar命令。

# tar -zxvf sysstat-11.1.1.tar.gz
sysstat-11.1.1/
sysstat-11.1.1/cifsiostat.c
sysstat-11.1.1/FAQ
sysstat-11.1.1/ioconf.h
sysstat-11.1.1/rd_stats.h
sysstat-11.1.1/COPYING
sysstat-11.1.1/common.h
sysstat-11.1.1/sysconfig.in
sysstat-11.1.1/mpstat.h
sysstat-11.1.1/rndr_stats.h
[...]

现在, tarball已经完成了解包,所有文件都已顺利放到了一个叫sysstat-11.1.1的目录中,你可以跳到那个目录下继续了。
首先,用cd命令进入这个新目录中,然后列出这个目录的内容。

$ cd sysstat-11.1.1

在这个目录的列表中,应该能看到README或AAAREADME文件。读这个文件非常重要。该文件中包含了软件安装所需要的操作。
按照README文件中的建议,下一步是为系统配置sysstat。它会检查你的Linux系统,确保它拥有合适的编译器能够编译源代码,另外还要具备正确的库依赖关系。

# ./configure

如果哪里有错了,在configure步骤中会显示一条错误消息说明缺失了什么东西。如果你所用的Linux发行版中没有安装GNU C编译器,那只会得到一条错误信息。对于其他问题,你会看到好几条消息,说明安装了什么,没有安装什么。

下一步就是用make命令来构建各种二进制文件。 make命令会编译源码,然后链接器会为这个包创建最终的可执行文件。和configure命令一样, make命令会在编译和链接所有的源码文件的过程中产生大量的输出。

# make

make步骤结束时,可运行的sysstat软件程序就会出现在目录下!但是从那个目录下运行程序有些不便。你会想将它安装到Linux系统中常用的位置上。要这样的话,就必须以root用户身份登录(或者用sudo命令,如果你的Linux发行版偏好这个的话),然后用make命令的install选项。

# make install
mkdir -p /usr/local/share/man/man1
mkdir -p /usr/local/share/man/man5
mkdir -p /usr/local/share/man/man8
rm -f /usr/local/share/man/man8/sa1.8*
install -m 644 -g man man/sa1.8 /usr/local/share/man/man8
rm -f /usr/local/share/man/man8/sa2.8*
install -m 644 -g man man/sa2.8 /usr/local/share/man/man8
rm -f /usr/local/share/man/man8/sadc.8*
[...]
install -m 644 -g man man/sadc.8 /usr/local/share/man/man8
install -m 644 FAQ /usr/local/share/doc/sysstat-11.1.1
install -m 644 *.lsm /usr/local/share/doc/sysstat-11.1.1
#

现在, sysstat包已经安装在系统上了!虽然不像使用PMS安装那样简单,但是通过tarball安装软件也没那么难。


http://chatgpt.dhexx.cn/article/93ffscXp.shtml

相关文章

android 获取已安装应用(App)列表

效果图 获取手机上已安装应用列表&#xff0c;将获取到的信息用集合返回&#xff0c;可以自己定义是否过滤系统应用&#xff0c;Appinfo是一个实体类&#xff0c;包含应用的名称 包名 图标icon等等 /*** 获取手机已安装应用列表* param ctx* param isFilterSystem 是否过滤系统…

应用程序安装流程

https://maoao530.github.io/2017/01/18/package-install/ 本文介绍APK的安装流程。 一、安装流程图 APK安装流程&#xff0c;总体可以下图流程&#xff0c;用ProcessOn画的&#xff0c;凑合看&#xff1a; 从上图我们可以看到apk安装到最后都会调用到这个flow&#xff1a; PM…

app 安装方式

APK的安装方式主要有以下几种&#xff1a; 通过adb命令安装&#xff1a;adb 命令包括adb push/install用户下载的Apk&#xff0c;通过系统安装器PackageInstaller安装该Apk。PackageInstaller是系统内置的应用程序&#xff0c;用于安装和卸载应用程序。系统开机时安装系统应用…

安卓手机怎样安装apk应用

以华为手机为例 首先手机要关闭纯净模式&#xff0c;方法&#xff1a; 设置–系统和更新–纯净模式–关闭 然后下载/接收apk文件 &#xff08;如果是从浏览器下载的&#xff0c;可以直接安装&#xff0c;如果是从其他渠道下载&#xff0c;则安装方法如下&#xff09; 打开手机…

大体了解Android应用安装过程及原理

Android应用安装的流程及路径&#xff1a; 应用安装涉及到如下几个目录&#xff1a; system/app 系统自带的应用程序&#xff0c;无法删除 data/app 用户程序安装的目录&#xff0c;有删除权限。安装时把apk文件复制到此目录 data/data …

[笔记] 应用安装过程梳理

一、概述 1、四种应用安装场景 (1)系统自安装:每次开机启动时,都会预安装系统自带的APK文件,没有安装界面; (2)应用市场安装:从小米应用商店(com.xiaomi.market)、Google Play(com.android.vending)等,下载 APK 后,自动安装; (3)adb命令安装:使用 adb 工具…

如何在win10+VS2017环境下新建一个简单的WDF示例程序

上一课我们在win10系统VS2017开发环境下搭建了WDK驱动程序开发环境的搭建&#xff0c;详见我的博客【如何在win10VS2017环境下安装USB驱动开发套件WDK】&#xff0c;今天我们来尝试建立一个最简单的KDM示例工程。 提前说明&#xff1a;本博客所建立的示例工程的源码&#xff0…

WDF驱动安装方法

WDF驱动的安装方法: 编译好的SYS文件、INF文件、另外还需要一个WdfCoInstaller01009.dll文件&#xff0c;对应的WDK版本是7600.16385.1这个版本&#xff0c;其中WdfCoInstaller01009.dll文件位于“WDK安装目录” \redist\wdf\x86下,这个动态链接库文件是WDF驱动框架在安装时所必…

WRF模式

随着生态文明建设和“碳中和”战略的持续推进&#xff0c;我国及全球气候变化及应对是政府、科学界及商业界关注的焦点。气候是多个领域&#xff08;生态、水资源、风资源及碳中和等问题&#xff09;的主要驱动因素&#xff0c;合理认知气候变化有利于解释生态环境变化机理及过…

WDF VIOLATION 你的电脑遇到问题,需要重新启动

文章目录 问题描述问题原因解决方法 【写在前面】作为一名还未毕业的研究僧&#xff0c;天天泡实验室是常有的事。学校的电脑是惠普的。我在上面装了Win10的系统。不久之前&#xff0c;电脑重启后竟然蓝屏了&#xff0c;无法进入系统&#xff0c;蓝屏上显示的是WDF VIOLATION 你…

WDS服务

二&#xff1a;WDS服务 预启动执行环境&#xff08;Preboot eXecution Environment&#xff0c;PXE&#xff09;也被称为预执行环境&#xff0c;提供了一种使用网络接口&#xff08;Network Interface&#xff09;启动计算机的机制。这种机制让计算机的启动可以不依赖本地数据存…

基于WDF驱动模型使用WFP框架进行网络层数据修改

一、WDF驱动模型介绍&#xff1a; WDF驱动模型是微软推出的驱动程序开发环境&#xff0c;是Vista及其以后OS的驱动模型。在visia之前win2000之后用的是WDM驱动模型。WDF是以WDM为基础进行了建模和封装&#xff0c;降低了开发难度。WDF将驱动程序与操作系统内核之间进行了分离&a…

从零开始学习Windows WDF驱动程序开发

从零开始学习Windows WDF驱动程序开发 ▼ 目录&#xff1a; 1. 第一部分 编译安装测试一个简单的WDF驱动程序 1.1 编译安装测试 1.2 Windows驱动开发就是要开发出INF文件和SYS文件 1.3 简单介绍下编译脚本 1.4 Windows应用程序如何访问一个设备 2. 第二部分 了解WDF框架并且开发…

亲手解剖WDF驱动

亲手解剖WDF驱动 创建一个WDF驱动(non-pnp) WDF驱动其实是微软公司提供的一套驱动开发的框架。 有了这个框架之后&#xff0c;开发驱动会简单一些。WDF本身是从WDM基础上封装而成的。WDF里面封装了很多对象&#xff0c;如WDFDRIVER等。如果要学习使用WDF来开发驱动&#xff0c;…

windows驱动开发4:WDM、WDF等驱动基本概念

一、WDM 1、WDM WDM是英文Windows Driver Model(WDM)的缩写&#xff0c;是Windows98和Windows2000使用的新的驱动程序设计规范。使用WDM使得硬件驱动程序更加稳定&#xff0c;让操作系统对硬件更加有效地控制硬件。 除了定义一个驱动程序与操作系统连接的标准接口以外&#…

WDF开发详解

原文地址&#xff1a;https://blog.csdn.net/lang_eva/article/details/109676808 WDF开发详解 添加设备&#xff1a;hdwwiz KMDF驱动程序框架 KMDF 驱动程序框架由对象和事件回调例程构成。KMDF 框架中所有的事物都由对象表示&#xff0c;各种事件处理都由事件回调例程来完…

windows驱动开发-WDF编程

文章目录 前言WDF编程前的准备工作WDF编程创建驱动对象创建设备对象设备对象的回调函数链表操作驱动的测试代码 其他 前言 注&#xff1a;本文的完整代码见仓库 18-WDF-reflect 代码参考自&#xff1a;junjiexing/libredirect 我不是从事驱动开发的专业人员&#xff0c;打酱…

javaWeb图书管理系统

javaWeb图书管理系统 1.项目简单介绍 a.项目用到的技术 IDE: Intellij IDEA语言&#xff1a;java&#xff0c;html ajax&#xff0c;js数据库&#xff1a;Mysql数据库可视化&#xff1a; navicatweb服务器&#xff1a;Tomcat框架&#xff1a;&#xff08;mybatis&#xff0…

基于Java基础的图书管理系统

文章目录 前言一、前期准备二、需求分析三、核心代码开发1、 model 层1.1、 Book 类1.2、 User 类1.3、 NormalUser 类1.4、 Admin 类 2、 service 层2.1、 IOOperation 接口2.1、 AddBook 类2.2、 DeleteBook 类2.3、 ReplaceBook 类2.4、 ListAllBook 类2.5、 BorrowBook 类2…

图书馆管理系统 Java

目录 要求&#xff1a; 代码 Operate接口 Book类 Reader类 BookList类 ReadList 类 Infor类 InforList类 main 功能实现 改进 错误 总结 要求&#xff1a; 为图书管理人员编写一个图书管理系统&#xff0c;图书管理系统的设计主要是实现对图书的管理和相关操作&a…