前一章,写了脚本的初步,这一章当然接着说脚本了。标题为啥那么怪呢!因为我们是运维人员,我们不写程序,我们只是程序的搬运工。既然是使用程序那我们必不可少的,需要了解程序的类型,程序的编译,程序的管理。

一 程序的类型

       脚本就是程序,只不过这个程序比较特殊。脚本需要使用解释器,每条命令都需要实时翻译为机器指令。还有程序是事先编译好的,用的时候直接拿去执行,直接发送给cpu就可以。除此之外还有一些奇葩的程序,也是当代使用量最多的程序。直接写机器指令的大神直接略过。

       1事先编译的程序,这种语言主要是为了解决特别基础常用问题的语言与机器交互最多的程序。这种程序一般都特别能压榨机器的性能,但是他们的书写难度特别大。

       首屈一指的是汇编语言,然后是cc++go等等

       2实时编译的程序,这种程序的性能一般不高,他们生来也不是为写大程序的,而是为了解决实际生活中,遇到的一些重复性的工作。

pythonshell等等

3奇葩的java

Java设计之初就秉承着一个理念,我的程序要运行在所有的平台上。它的主要目的是打通各大平台程序不通用的痛点。因此他要有一个特点,把不同平台的接口打造成同样的接口。基于这个特点,java就制造了一个东西——虚拟机。在虚拟机的内部实现代码执行。那java写的代码,编译的时候就不用基于某种平台编译了,这时它需要把代码编译为可以在虚拟机中可执行的指令就可以了。这也就导致了它的性能不是很好。

二 程序的管理

       这半天扯了一堆和我们运维一毛钱关系没有的皮,其实很有用。当我们安装程序的时候,我们首先需要了解我们使用的程序是什么样的,我们才可以更好的利用。

       我们要使用一款程序,我们需要怎么办,下载程序的源码包然后编译,好麻烦。回想安装windows程序我基本上都是下一步下一步就按照好了,完全没有编译的过程啊,在linux中也有这种机制,由他人编译好程序,我们直接拿过来放到目录里直接使用。在windows中安装程序时,尤其是windows组件时,我们明明只想装一个程序,但是windows却提示,需要先安装其它程序这个程序才可以运行。

       不扯皮了,上干货。Linux中安装程序的方法有三种(简单划分):编译安装,rpmyum

       1Rpm安装,这种安装使用的是别人编译好的程序,我们下载好后,解压到特定的目录下,然后我们使用。

      

安装rpm [option] packages
       option的选项
       -v                 显示安装过程
       -h                 显示进度条
       -i                  安装,
       --scripts    我们安装绿色文件的时候需要一些配置,有时安装好后还需要配置,有些rpm包内有一些准备脚本,我们可以强制rpm安装的时候不让脚本运行,脚本分为安装前脚本--nopre,安装后脚本--nopost,一般没有使用的
       -U                升级程序,没有该程序的时候默认安装,一般不推荐升级,最好两个版本并存
       -F                 升级程序,没有不安装
       --replacepkgs           只重装程序,不更改配置文件
       --replacefiles            完全重装程序
       --oldpackages          降级
       -e                               卸载
       --force                       强制安装(慎重)


       Windows中的各种管家,管理我们程序的工具太好用了。rpm自带这种功能,它和windows的程序管理程序的机制差不多,没有经过rpm安装的程序,虽然可以使用,但是rpm不知道该程序的存在,这时因为,rpm每安装一个程序都会把该程序的信息保存到/var/lib/rpm/目录下的一个文件中(我不记得哪个了)。查询程序信息的参数

      

-q                 根据包名可以查出,已安装包的版本信息
       -qa               列出所有的已安装包,配合grep,我们可以熟练的找到我们想要的包
       -ql                列出某个已安装包的所有文件的路径
       -qd               列出已安装包的文档
       -qc               列出已安装包的配置文件
       -p                 列出包(这里的包是包的路径)的信息,与以上几个命令配合使用
       --provides          列出这个包的能力
rpm2cpio 包文件|cpio –itv          预览包内文件
rpm2cpio 包文件|cpio –id          “ *.conf” 释放包内文件


       2Yum

       yum安装,这种方法安装程序极其特别简单,尤其是在centos7上可以补全安装包名,这很过分,这么强大是怎么做到的。它是基于rpm运行的,也是为了解决rpm安装程序时那个烦人的依赖问题。

       Yum是怎么解决包依赖问题的?yum是先把所有的包建一个类似索引的数据库,把某个目录内的所有包的信息存入该目录的子目录repodate中。安装的时候,自动遍历数据库解决依赖问题。然而这还不能满足我们对懒的追求,有时我们需要的包可能来自两个机构不同的网站内,咋整,我们把所有的提供包的网站整理到/etc/yum.repo.d/目录下,安装程序时直接遍历所有的网站。 /etc/yum.repo.d/目录下的文件只要是以.repo结尾都算是配置文件。配置文件的格式如下:

[reponame]
name=
baseurl=
gpgkey=
gpgcheck=
enabled=
cost=

       先说安装,yum install packagename [option]这样就可以安装包了。

       Option的选项
       -y                        确认安装
       --disablerepo    临时禁用某个repo
       --enablerepo     临时启用某个repo
       --noplugins       禁用所有插件
       whatprovides     提供该功能的包
       list                       列出包
       seach
       repolist
       groplist
       update
       upgrade
       groupinstall
       groupinfo
       history
       Available,installed,


三 程序的编译

       编译是个有大学问,编译方式就分为两种,静态编译和动态编译。首先说静态编译,静态编译是全部的代码都由自己的程序提供,编译后就可以独立运行。动态编译自己只提供一部分代码,这部分代码是基于某几个公共程序写的,这种公共程序比如说加减乘除,这么基础的代码,每次都有自己写多麻烦,并且使用量特别大,我们就把这些程序做成了一个公共程序,放到一个约定好的地方,使用的时候直接调用。

       既然有两种编译方式,那个更好。很难说,静态编译的程序性能绝对一流,因为程序运行的时候所有指令都在一个进程中,完全用不到系统调用,系统调用就好比在一个大公司上班,提前预支薪水需要层层审批,小公司天天见领导,知根知底想支钱很容易。但是每个程序的代码都是独立的,代码中难免很多重复的代码。在硬盘中这种情况还不是很明显,到了内存里这个矛盾就比较突出了,动态编译,大家共用同一代码块,内存使用会少很多。

       编译前电脑中要安装编译器gcc和与之配套的组件,linux把这个组件命令为Development Tools

       编译程序的流程

1,       解压并进入源码包内
2,       ./configure [option]           option的参数可以通过--help查看参数的使用方法。
3,       make              这一步是执行编译,需要比较多的时间,编译好的文件会生成在当前目录
4,       make install         把编译好的文件,安装到指定的目录
5,       编辑$PATH变量
6,       导出库文件/etc/ld.so.conf.d/name.conf
7,       导出头文件ln -s azdir /usr/lib/dir

总结

       管理程序rpmyum基本上可以满足我们的需求。这一节主要说了,程序的类型,程序编译类型的优缺点,两种包管理工具rpmyum