第九章 安装软件程序

Linux使用软件预编译包来安装软件,Linux通过各种包管理系统(package management system, PMS)来进行软件安装,管理和删除。

1.包管理基础

各种主流Linux发行版都采用了某种形式的包管理系统来控制软件和库的的安装。PMS采用一个数据库来记录各种相关内容:

Linux系统上已安装了什么软件包。

每个包安装了什么文件。

每个已安装软件包的版本。

软件包存储在服务器上,可以利用本地Linux系统上的PMS工具通过互联网访问。这些服务器称为仓库(repository)。可以用PMS工具来搜索新的软件包,或者是更新系统上已安装软件包。软件包通常会依赖其他的包,为了前者能够正常运行,被依赖的包必须提前安装在系统中。PMS工具将会检测这些依赖关系,并在安装需要的包之前先安装好所有额外的软件包。PMS不足之处在于目前还没有统一的标准工具。PMS工具及相关命令在不同的Linux发行版上有很大的不同,Linux中管饭使用的PMS基础工具是dpkgrpm

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

基于Red Hat的发行版(如Fedora)使用的是rpm命令,该命令是PMS的底层基础。

2.基于Debian的系统

dpkg命令是基于Debian系列PMS工具的核心,包含在这个PMS中的其他工具有:

apt-getapt-cacheaptitude

aptitude管理软件包

aptitude show package_name

$ 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 -L package_name可以显示。

$ dpkg -L vim-common
/.
/usr
/usr/bin
/usr/bin/xxd
/usr/bin/helpztags
/usr/lib
/usr/lib/mime
/usr/lib/mime/packages

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

dpkg --search absolute_file_name

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

使用aptitude安装软件包

首先要确定安装软件包的名称,使用aptitude命令加上search选项,其中search选项会隐式添加通配符,所以不用在package_name周围添加通配符。

aptitude search package_name

$ 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 ...

在每个包名字前面都有一个pii表明此软件已安装到了你的系统上了。pv表明此包可用,但是还没安装。

aptitude install package_name

$ 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.

要检查安装过程是否正常,只要再次使用search选项就可以了。

aptitude更新软件

用软件仓库中的新版本安全的更新系统上所有的软件包,可以用safe-upgarde选项。此选项不需要使用软件包名作为参数,因为safe-upgarde选项会将所有已安装的包更新到软件仓库中的最新版本,更有利于系统稳定。

aptitude卸载软件

想要只删除软件包而不删除数据和配置文件,可以使用remove选项。要删除软件包和相关的数据和配置文件,可以用purge选项。要查看软件包是否已删除,可以用search选项。如果在软件包名称前面看到一个c,意味着软件已删除,但是配置文件尚未从系统中清除。如果前面是一个p,说明配置文件已删除。

aptitude仓库

aptitude默认的软件仓库位置在安装Linux发行版时设置,存储在文件/etc/apt/sources.list中。aptitude只会从这些库中下载文件,在搜索软件进行安装或者更新时,aptitude同样只会检查这些库。如果需要为PMS添加一些额外的软件仓库,就在这个文件中设置。

$ cat /etc/apt/sources.list
#deb cdrom:[Ubuntu 14.04 LTS _Trusty Tahr_ - Release i386 (20140417)]/
trusty main restricted
# See http://help.ubuntu.com/community/UpgradeNotes for how to upgrade to
# newer versions of the distribution.
deb http://us.archive.ubuntu.com/ubuntu/ trusty main restricted
deb-src http://us.archive.ubuntu.com/ubuntu/ trusty main restricted
## Major bug fix updates produced after the final release of the
## distribution.
deb http://us.archive.ubuntu.com/ubuntu/ trusty-updates main restricted
deb-src http://us.archive.ubuntu.com/ubuntu/ trusty-updates main restricted

deb (or deb-src) address distribution_name package_type_list

debdeb-src的值表明了软件包的类型。deb值说明这是一个已编译程序源,而deb-src值说明这是一个源代码的源。address是软件仓库的Web地址。distribution_name是这个特定软件仓库的发行版本名称。

3.基于Red Hat的系统

列出已安装包

yum list installed

输出的信息可能会在屏幕上一闪而过,所以最好是将已安装的列表重定向到一个文件中。可以用moreless命令查看这个列表。

yum list installed > installed_sofeware

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

如果需要找出系统的某个特定文化属于哪个软件包,使用yum provides命令。

yum provides file_name

yum会分别查找三个仓库:baseupdateinstalled

用yum安装软件

yum install命令会从仓库中安装软件包,所有它需要的库以及依赖的其他包。

yum install package_name

# 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!

也可以手动下载rpm安装文件并用yum安装,这叫做本地安装

yum localinstall package_name.rpm

yum更新软件

列出所有已安装包的可用更新,输入命令:

yum list updates

如果发现某个特定软件包需要更新,输入命令:

yum update package_name

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

yum update

用yum卸载软件

只删除软件包而保留配置文件和数据文件,输入命令:

yum remove package_name

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

yum erase package_name

处理损坏的包依赖关系

有时在安装多个软件包时,某个包的软件依赖关系可能会被另一个包的安装覆盖掉。这叫做损坏的包依赖关系(broken dependency)。出现此问题,可以先尝试:yum clean all,然后使用yum update

yum deplist package_name,此命令显示了所有包的库依赖关系以及什么软件可以提供这些库依赖关系。一旦知道某个包需要的库,就能安装。

# 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

yum update --skip-broken--skip-broken选项允许你忽略依赖关系损坏的包,继续更新其他软件包。

yum软件仓库

如果想知道从哪些仓库中获取软件,输入如下命令:

yum repolist

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

4.从源码安装

首先从官网下载需要安装的软件tar压缩包,使用标准的tar命令解压缩tar -zxvf filename。解压完毕后,进入解压后的文件目录。

$ cd sysstat-11.1.1
$ ls
activity.c iconfig prealloc.in sa.h
build INSTALL pr_stats.c sar.c
CHANGES ioconf.c pr_stats.h sa_wrap.c
cifsiostat.c ioconf.h rd_sensors.c sysconfig.in
cifsiostat.h iostat.c rd_sensors.h sysstat-11.1.1.lsm
common.c iostat.h rd_stats.c sysstat-11.1.1.spec
common.h json_stats.c rd_stats.h sysstat.in
configure json_stats.h README sysstat.ioconf
configure.in Makefile.in rndr_stats.c sysstat.service.in
contrib man rndr_stats.h sysstat.sysconfig.in
COPYING mpstat.c sa1.in version.in
count.c mpstat.h sa2.in xml
count.h nfsiostat-sysstat.c sa_common.c xml_stats.c
CREDITS nfsiostat-sysstat.h sadc.c xml_stats.h
cron nls sadf.c
FAQ pidstat.c sadf.h
format.c pidstat.h sadf_misc.c

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

# ./configure
Check programs:
.
checking for gcc... gcc
checking whether the C compiler works... yes
checking for C compiler default output file name... a.out
checking for errno.h... yes
[...]
Check library functions:
.
checking for sensors support... yes
checking for sensors_get_detected_chips in -lsensors... no
checking for sensors lib... no
Check configuration:
[...]
Now create files:
[...]
config.status: creating Makefile
Sysstat version: 11.1.1
Installation prefix: /usr/local
rc directory: /etc/rc.d
Init directory: /etc/rc.d/init.d
Systemd unit dir:
Configuration directory: /etc/sysconfig
Man pages directory: ${datarootdir}/man
Compiler: gcc
Compiler flags: -g -O2

如果哪里有错误,在configure步骤中会显示一条错误消息说明缺失了什么东西。下一步就是用make命令来构建各种二进制文件,make命令会编译源码,然后链接器会为这个包创建最终的可执行文件。

# make
–gcc -o sadc.o -c -g -O2 -Wall -Wstrict-prototypes -pipe -O2
-DSA_DIR=\"/var/log/sa\" -DSADC_PATH=\"/usr/local/lib/sa/sadc\"
-DUSE_NLS -DPACKAGE=\"sysstat\"
-DLOCALEDIR=\"/usr/local/share/locale\" sadc.c

make步骤结束时,可运行的sysstat软件程序就会出现在目录下。从此目录下运行程序有些不变,可以将它安装到Linux系统中的常用位置。切换root用户,使用命令make install进行安装。

本章小结

​ 1.Linux包管理工具

​ 2.基于Debian的apt包管理命令

​ 3.基于Red Hat的yum包管理命令

​ 4.从源码安装软件

参考文献:Linux命令行与shell脚本编程大全(第三版)Richard Blum Christine Bresnahan著 门佳 武海峰译

Linux学习笔记(九)相关推荐

  1. Cty的Linux学习笔记(九)

    Linux学习笔记--第九篇 命令(command): df(disk filesystem):用于查看已挂载的磁盘的总容量,使用容量,剩余容量,不可以加任何参数 -i:表示查看inodes的使用情况 ...

  2. Linux学习笔记(十八) -- 运行程序,出现Failed to load module canberra-gtk-module错误的解决方案

    1.错误内容 错误描述 执行程序时,提示如下错误: Failed to load module "canberra-gtk-module" 2.解决方案 (1)执行语句: sudo ...

  3. 【Linux学习笔记④】——Shell程序设计【变量 输入与输出 条件表达式 判断语句 循环语句 Shell函数】

    ⌛️ 文章目录 一.Shell 概述 二.Shell 脚本的定义与执行 2.1 Shell 脚本的定义 2.2 Shell 脚本的执行 三.Shell 变量 3.1 用户自定义变量 3.2 环境变量 ...

  4. Linux 学习笔记(八):时间片轮转调度

    看这篇文章前可以先了解一下时间片:Linux 学习笔记(七):时间片_Amentos的博客-CSDN博客 一.基本概念 时间片轮转调度算法(Round-Robin,RR)主要用于分时操作系统中的进程调 ...

  5. Linux学习笔记(一)(服务器环境搭配 常用命令 文件属性)

    Linux学习笔记(一) 概述 Linux发行版 Linux应用 Linux系统运行级别 远程环境配置 连接服务器 安装宝塔 配置环境 测试 测试连接Tomcat 测试访问网站 测试上传 学习Linu ...

  6. Linux学习笔记:Linux常用命令总结

    文章目录 前言 Linux学习笔记:Linux常用命令总结 1. 目录命令 1.1 Linux目录结构 1.2 cd命令 切换工作目录 1.3 ls命令 显示目录下文件 1.4 mkdir命令 创建目 ...

  7. IOS学习笔记(九)之UIAlertView(警告视图)和UIActionSheet(操作表视图)基本概念和使用方法...

    IOS学习笔记(九)之UIAlertView(警告视图)和UIActionSheet(操作表视图)基本概念和使用方法 Author:hmjiangqq Email:jiangqqlmj@163.com ...

  8. linux rcs文件中的ip,linux学习笔记之diff和patch命令

    关键字:Linux 学习笔记 运维 系统 命令 一.命令的功能 diff命令的功能为逐行比较两个文本文件,列出其不同之处.可是做成diff记录也就是补丁. patch就是利用diff制作的补丁来打到文 ...

  9. (零)我为什么要写Linux学习笔记?

    我对Linux有强烈的好奇心,兴趣:写学习笔记会让我有成就感:我记忆力实在不好.好吧,其实真正原因是:如果我能把自己学到的知识简明扼要的讲出来,写出来,那便证明我真的学懂了我想学的知识.没时间怎么办? ...

  10. linux添加自己的库,Linux学习笔记——例叙makefile 增加自定义共享库

    Linux学习笔记--例说makefile 增加自定义共享库 0.前言 从学习C语言开始就慢慢开始接触makefile,查阅了很多的makefile的资料但总感觉没有真正掌握makefile,如果自己 ...

最新文章

  1. 节能无线信标Ver0:功率测试
  2. 基于口令的密码PBE(Password Based Encryption)
  3. html代码在线运行环境,ES5/可执行代码与执行环境
  4. 新加坡科技设计大学(SUTD)招收计算机视觉方向全奖PhD学生
  5. 前端问题之body没设置高度背景色为什么会全屏显示?
  6. QT的QTimer类的使用
  7. 神经网络激活函数sigmoid、tanh、Relu、LeakyRelu、Elu、PRelu、MaxOut的java实现
  8. cshtml中引用css_css基础必备-使用样式,前端小白一看就会
  9. Java获得中文输入_使用java简单实现根据输入的汉字,得到汉字的首字母
  10. 一步一步从Linux线程到MySQL慢sql定位
  11. python能写桌面程序吗_Python新手教程:40行python代码写一个桌面翻译器
  12. 罚函数(penalty function)的设计
  13. 怎么在线批量网站打开?
  14. java digester_Digester学习笔记(一)
  15. 东北大学毕业设计(论文)全程解析
  16. 高效人士的七个管理习惯
  17. 已解决SyntaxError:positional argument follows keyword argument
  18. 基于matlab的单相pwm逆变电路的仿真研究,基于MATLAB的单相PWM逆变电路的仿真研究.pdf...
  19. 科大讯飞语音开发包上手体验(1)
  20. CityBuilder+DataV制作次世代3D城市大屏,一秒俘获甲方的心!

热门文章

  1. 获取cookies(pyppeteer)
  2. 连接Mysql提示Can’t connect to local MySQL server through socket的解决方法
  3. mp4转换m3u8格式php,【过程】第一次将m3u8文件转换为MP4文件经验分享
  4. (附源码)spring boot跨境电商系统 毕业设计211003
  5. 磨金石教育插画技能干货分享|学习插画可以从事什么工作?
  6. 杂谈:渐进增强与优雅降级
  7. java 过滤字符串_java 过滤字符串方法实现
  8. php 标点符号,php 过滤英文标点符号及过滤中文标点符号代码_PHP教程
  9. Java-超市购物小票案例-详细介绍
  10. P1567 统计天数 python代码