03 Linux安装及管理程序

Linux应用程序基础

在学习安装及管理程序之前,先了解一下Linux应用程序的基础

Linux命令与应用程序的关系

在Linux操作系统中,一直以来命令和应用程序并没有特别明确的区别;
下面描述一下两者的区别:

应用程序命令的执行文件大多比较小,通常放置在/bin和/sbin目录中。对于内部命令,常集成在Bash程序内,而不是独立地执行文件;命令文件一般在安装操作系统时一起安装,用于辅助操作系统本身的管理;命令行大多适用于“命令字 选项 参数”形式的一般格式;命令只在字符操作界面中运行
应用程序的执行文件通常放在**/usr/bin**、/usr/sbin和**/usr/local/bin**、/usr/local/sbin等目录中;应用程序一般需要再操作系统之外另行安装,提供相对独立于操作系统的功能,有时候等同于“软件”的概念;应用程序一般没有固定的执行格式,运行方式由程序开发者自行定义;应用程序可能会用到图形界面,形式多样;有些应用程序提供的执行文件,能够使用像Linux命令一样的运行格式,所有也经常被称为程序命令

Linux应用程序的组成

安装完软件包以后,可能会像系统中复制大量的数据文件,并进行相关设置
在Linux操作系统中,典型的应用程序通常由以下几部分组成

普通的可执行程序文件:一般保存在/usr/bin目录中,普通用户即可执行
服务器程序、管理程序文件:一般保存在/usr/sbin目录中,只有管理员能执行
配置文件:一般保存在/etc目录中,配置文件较多时会建立相应的子目录
日志文件:一般保存在/var/log目录中
关于应用程序的参考文档等数据;一般保存在/user/share/doc/目录中
执行文件及配置文件的man手册页;一般保存在/usr/share/man/目录中

软件包的封装类型

对于各种应用程序的软件包,在封装时可以采用各种不同的类型,不同类型的软件包其安装方式也各不相同。
常见的软件包封装类型如下:

RPM软件包:这种软件包文件的扩展名为“.rpm”,只能使用RPM(RPM Package Manager,RPM软件包管理器)机制的Linux操作系统中安装,如RHEL、Fedora、CentOS等。RPM软件包一般针对特定版本的操作系统量身定制,因此依赖性较强。安装RPM软件包需要使用操作系统中的rpm命令
DEB软件包:这种软件包文件的扩展名为“.deb”,只能在使用DPKG(Debian Package,Debian包管理器)机制的Linux操作系统中进行安装、如Debian、Ubuntu等。安装DEB软件包需要使用操作系统中的dpkg命令
源代码软件包:这种软件包时程序包开发完成的原始代码,一般被制作成“.tar.gz”或“.tar.bz2”等格式的压缩包文件,因多数使用tar命令打包而成,所以经常被称为“TarBall”。安装源代码软件包需要使用相应的编译工具,如Linux中的C语言编译器gcc。因此,在安装操作系统的时候尽量勾选“开发工具”一项来安装基本的编译环境
附带安装程序的软件包:这种软件包的扩展名不一,但仍以TarBall格式的居多。软件包中会提供用于安装的可执行程序或脚本文件,如install.sh、setup等,有时候会以“.bin”格式的单个安装文件形式出现。安装时只需运行安装文件就可以根据向导程序的提示完成安装操作

使用RPM软件包管理工具

RPM概述

RPM软件包管理机制最早由Red Hat公司提出,后来随着版本的升级逐渐融入更多的优秀特性,称为众多Linux发行版本中公认的软件包管理标准
使用RPM机制封装的软件包文件拥有约定俗成的命名格式,一般使用“软件名-软件版本-发布次数.操作系统类型.硬件架构类型.rpm”的文件名形式,如“bash-4.4.46-20.el7_2x86.rpm”。其中硬件平台通常wield“i386”或“i686”等,表示适用于Intel公司的处理器,“x86_64”表示适用于64为的系统,如果是“noarch”表示不区分硬件架构(支持1不同硬件体系的处理器)
CentOS的DVD安装光盘携带的大部分软件包都在Packages目录中,通过该目录中的文件可以熟悉RPM软件包的一般命名格式

使用RPM软件包管理命令——rpm

rpm命令的格式

使用rpm命令能够实现几乎所有对RPM软件包的管理功能,执行“man rpm”命令可以获得关于rpm命令的详细帮助信息

[root@localhost ~]# man rpm
RPM(8)                                   System Manager's Manual                                  RPM(8)

NAME
       rpm - RPM Package Manager

SYNOPSIS
   QUERYING AND VERIFYING PACKAGES:
       rpm {-q|--query} [select-options] [query-options]

       rpm {-V|--verify} [select-options] [verify-options]

   INSTALLING, UPGRADING, AND REMOVING PACKAGES:
       rpm {-i|--install} [install-options] PACKAGE_FILE ...

       rpm {-U|--upgrade} [install-options] PACKAGE_FILE ...

       rpm {-F|--freshen} [install-options] PACKAGE_FILE ...

       rpm {-e|--erase} [--allmatches] [--justdb] [--nodeps] [--noscripts]
           [--notriggers] [--test] PACKAGE_NAME ...

   MISCELLANEOUS:
       rpm {--querytags|--showrc}

       rpm {--setperms|--setugids} PACKAGE_NAME ...

   select-options
        [PACKAGE_NAME] [-a,--all] [-f,--file FILE]
        [-g,--group GROUP] {-p,--package PACKAGE_FILE]
        [--hdrid SHA1] [--pkgid MD5] [--tid TID]
        [--querybynumber HDRNUM] [--triggeredby PACKAGE_NAME]
        [--whatprovides CAPABILITY] [--whatrequires CAPABILITY]

   query-options
        [--changelog] [-c,--configfiles] [--conflicts]
        [-d,--docfiles] [--dump] [--filesbypkg] [-i,--info]
		....//省略部分内容

查询RPM软件包信息

使用rpm命令的查询功能可以查看某个软件包是否已经安装,软件包的用途以及软件包复制到系统中的文件等相关信息,以便更好地管理Linux操作系统中的应用程序
rpm命令的查询功能主要通过“-q”选项实现,主要针对当前系统中已经安装的软件包;通过“-qp”选项可以针对尚未安装的RPM软件包文件进行查询。根据所需查询的具体项目不同,还可以为这两个选项指定相关的子选项

  1. 查询已安装的RPM软件包信息
    不带子选项的“-q”选项可用于查询已知名称的软件包是否已经安装,需要使用准确的软件名作为参数(可以有多个)。结合不同的子选项使用时,可以实现更具体的查询
    常用的子选项如下所述:

-qa:显示当前系统中以RPM方式安装的所有软件列表
-qi:查看知道软件包的名称、版本、许可协议、用途描述等详细信息(–info)
-ql:显示知道的软件包在当前系统中安装的所有目录、文件列表(–list)
-qf:查看指定的文件或目录是由哪个软件包所安装的(–file)

直接执行“rpm -qa”命令将列出当前操作系统中以RPM方式安装的所有软件包清单,每行记录一个软件包的名称、版本信息。结合管道操作和“wc -l”命令,可以统计出系统中已安装的RPM软件的个数

[root@localhost ~]# rpm -qa
json-c-0.11-4.el7_0.x86_64
ncurses-base-5.9-14.20130511.el7_4.noarch
cryptsetup-libs-2.0.3-6.el7.x86_64
libstdc++-4.8.5-44.el7.x86_64
elfutils-default-yama-scope-0.176-5.el7.noarch
xz-libs-5.2.2-1.el7.x86_64
grub2-tools-minimal-2.02-0.86.el7.centos.x86_64
libxml2-2.9.1-6.el7.5.x86_64
NetworkManager-libnm-1.18.8-1.el7.x86_64
libattr-2.4.46-13.el7.x86_64
....//省略部分内容

当需要查询某个软件包是否已经安装时,可以直接使用软件包名称作为查询参数。例如,执行以下的“rpm -q elinks lynx”操作可以查询是否已安装enlinks和lynx软件包

[root@localhost ~]# rpm -q elinks lynx
未安装软件包 elinks 
未安装软件包 lynx 
[root@localhost ~]# 

如果不知道准确的软件包名称,还可以对全部查询结果进行过滤,使用软件包的一部分名称进行模糊查询,根据查询结果再进行判断。例如,执行以下操作可以查询系统中是否安装了名称中包含“samba”的软件包,查询时不区分大小写

[root@localhost ~]# rpm -qa | grep -i samba
[root@localhost ~]# 

因为我没有安装名称包含samba的软件包,所有没有结果

对于系统中已经安装的各种软件程序,如果不知道其中某个软件的用途,通用可以通过rpm工具进行查询。例如:samba-client软件,可以执行“rpm -qi samba-client”命令来了解samba-client软件包的摘要信息(各位可以尝试一下,我就不详细展示了)

当需要查看某个软件包安装的目录和文件清单时,可以使用“-ql”选项。例如,执行“rpm -ql wget”命令可以列出wget软件包安装的目录和文件清单

[root@localhost ~]# rpm -ql wget
/etc/wgetrc
/usr/bin/wget
/usr/share/doc/wget-1.14
/usr/share/doc/wget-1.14/AUTHORS
/usr/share/doc/wget-1.14/COPYING
/usr/share/doc/wget-1.14/MAILING-LIST
/usr/share/doc/wget-1.14/NEWS
/usr/share/doc/wget-1.14/README
/usr/share/doc/wget-1.14/sample.wgetrc
/usr/share/info/wget.info.gz
/usr/share/locale/be/LC_MESSAGES/wget.mo
/usr/share/locale/bg/LC_MESSAGES/wget.mo
/usr/share/locale/ca/LC_MESSAGES/wget.mo
/usr/share/locale/cs/LC_MESSAGES/wget.mo
/usr/share/locale/da/LC_MESSAGES/wget.mo
/usr/share/locale/de/LC_MESSAGES/wget.mo
/usr/share/locale/el/LC_MESSAGES/wget.mo
/usr/share/locale/en_GB/LC_MESSAGES/wget.mo
/usr/share/locale/eo/LC_MESSAGES/wget.mo
/usr/share/locale/es/LC_MESSAGES/wget.mo
/usr/share/locale/et/LC_MESSAGES/wget.mo
/usr/share/locale/eu/LC_MESSAGES/wget.mo
/usr/share/locale/fi/LC_MESSAGES/wget.mo
/usr/share/locale/fr/LC_MESSAGES/wget.mo
/usr/share/locale/ga/LC_MESSAGES/wget.mo
/usr/share/locale/gl/LC_MESSAGES/wget.mo
/usr/share/locale/he/LC_MESSAGES/wget.mo
/usr/share/locale/hr/LC_MESSAGES/wget.mo
/usr/share/locale/hu/LC_MESSAGES/wget.mo
/usr/share/locale/id/LC_MESSAGES/wget.mo
/usr/share/locale/it/LC_MESSAGES/wget.mo
/usr/share/locale/ja/LC_MESSAGES/wget.mo
/usr/share/locale/lt/LC_MESSAGES/wget.mo
/usr/share/locale/nb/LC_MESSAGES/wget.mo
/usr/share/locale/nl/LC_MESSAGES/wget.mo
/usr/share/locale/pl/LC_MESSAGES/wget.mo
/usr/share/locale/pt/LC_MESSAGES/wget.mo
/usr/share/locale/pt_BR/LC_MESSAGES/wget.mo
/usr/share/locale/ro/LC_MESSAGES/wget.mo
/usr/share/locale/ru/LC_MESSAGES/wget.mo
/usr/share/locale/sk/LC_MESSAGES/wget.mo
/usr/share/locale/sl/LC_MESSAGES/wget.mo
/usr/share/locale/sr/LC_MESSAGES/wget.mo
/usr/share/locale/sv/LC_MESSAGES/wget.mo
/usr/share/locale/tr/LC_MESSAGES/wget.mo
/usr/share/locale/uk/LC_MESSAGES/wget.mo
/usr/share/locale/vi/LC_MESSAGES/wget.mo
/usr/share/locale/zh_CN/LC_MESSAGES/wget.mo
/usr/share/locale/zh_TW/LC_MESSAGES/wget.mo
/usr/share/man/man1/wget.1.gz
[root@localhost ~]# 

当需要知道系统中的某个文件时由哪一个软件包生成的时候,可以使用“-qf”选项。例如:执行以下操作可以获知vim编辑器程序是在安装vim-enhanced软件包时生成的
在这里插入图片描述

  1. 查询RPM软件包文件中的相关信息
    使用“-qp”选项时,必须以RPM软件包文件的路径作为参数(可以是多个),而不是软件包名称。其相关的子选项与使用“-q”查询时类似。
    常用的两个查询的选项如下:

-qpi:查看指定软件包的名称、版本、许可协议、用途描述等详细信息
-qpl:查看该软件包准备要安装的所有目标目录、文件列表

安装、升级、卸载RPM软件包

在日常系统管理工作中,安装、升级及卸载软件包是管理应用程序最基本的工作内容使用rpm命令实现这些操作时,基本的命令选项如下:

-i:在当前系统中安装(Install)应该新的RPM软件包
-e:卸载指定名称的软件包
-U:检查并升级系统中的某个软件包,若该软件包原来并未安装,则等同于“-i”选项
-F:检查并更新系统中的某个软件包,若该软件包原来并未安装,则放弃安装
-h:在安装或升级软件包的过程中,以“#”号显示安装进度
-v:显示软件安装过程中的详细信息
–force:强制安装某个软件包,当需要替换已安装的软件包及文件,或者安装一个比当前使用的软件版本更旧的软件时,可以使用此选项
–nodeps:在安装或升级、卸载一个软件包时,不检查与其他软件包的依赖关系

  1. 安装、升级软件包

使用rpm命令安装软件包时,一般需要指定完整的软件包文件名作为参数(可以是多个);而卸载软件包时,只需要指定软件名即可。若要一次安装多个RPM软件包,可以使用通配符“*”,这种方式在安装存在相互依赖关系的多个软件包时特别有用,系统将会自动检查依赖性并决定安装顺序,而无需管理员去判断应该先装哪一个包

  1. 卸载软件包
    卸载一个软件包时,主要使用“-e”选项。
    例如:执行“rpm -e lynx”操作可卸载已安装的lynx软件,再执行查询时会发现lynx软件并没有安装

在这里插入图片描述
当需要安装、卸载一个与其他程序存在依赖关系的软件包时,系统将提示存在依赖关系而放弃执行。这时可以结合“–nodeps”选项忽略依赖关系,而强行安装或卸载指定的软件包。忽略依赖关系可以会导致软件功能异常或失效,因此只在学习或者调时程序时使用,生产环境中应避免使用

维护RPM数据库

  1. 重建RPM数据库
    RPM数据库用于记录在Linux操作系统中安装、卸载、升级应用程序的相关信息,由RPM软件包管理系统自动完成维护,一般不需要用户干预。当RPM数据库发送损坏(可能由误删文件、非法关机、病毒破坏等导致),且Linux操作系统无法自动完成修复时,将导致无法使用rpm命令正常地安装、卸载及查询软件包。这时候使用rpm命令的“–rebuilddb”或“–initdb”功能对RPM数据库进行重建;操作如下:
[root@localhost ~]# rpm --rebuilddb
或者
[root@localhost ~]# rpm -initdb

从源代码编译安装程序

在Linux操作系统中搭建一些大型服务时,考虑兼容性与功能的扩展,通常会选择源代码安装软件,其实最早的Linux操作系统整体上都是编译安装而成的。

源代码编译概述

Linux操作系统之所以能够在十余年的时间里发展壮大以致风靡全球,其开放源代码和操作简单的特使是很重要的原因之一,即Linux操作系统中包括内核在内的所有软件都可以获得源代码,并且可以经过定制修改后编译安装

编译安装的基本过程

获得所需安装的软件源代码以后,,安装的基本过程包括解包、配置、编译及安装这几个通用的步骤
在这里插入图片描述

解包

开源软件的源代码包一搬为TarBall形式,扩展名为“.tar.gz”或“.tar.bz2”,都可以使用tar命令进行解压释放。对于只有“.gz”扩展名的源代码包,表示只经过压缩而并未被使用tar归档,这样的文件只需使用gzip进行解压缩即可。在Linux操作系统中,通常将各种软件的源代码目录保存到“/usr/src/”目录中,以便于集中管理。释放后的软件包目录一般包括软件名和版本信息。解包前先安装编译环境和依赖包

配置

在编译应用程序之前,需要进入源代码目录,通过目录下的脚步检查安装环境,并且对软件的安装目录、功能选择等参数进行预习配置

编译

编译的过程主要是根据Makefile文件内的配置信息,将源代码文件进行编译生成二进制的程序模块、动态链接库、可执行文件等。配置完成后,只要在源代码目录中执行“make”命令即可执行编译操作。编译的过程比配置过程需要更长的时间,期间同样会显示大量的执行过程信息

安装

编译完成以后,就可以执行“make install”命令将软件的执行程序、配置文件、帮助文档等相关文件复制到Linux操作系统中了,即应用程序的最后“安装”过程。安装过程需要的时间相对要短一些,期间也会显示安装的过程信息

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值