欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

马哥 12_04 _Linux软件管理之四 yum 有大用


RPM安装:

        二进制格式的包(如果没有说明)

        源程序-->编译-->二进制格式

            有些特性是编译时选定的 (所以有些特性未能完全包含进来) (如果编译时未选定此特性,将无法使用)

            rpm包的版本会落后于源码包,甚至落后很多:bind-9.8.7(源码包) bind-9.7.2(rpm包)



定制:手动编译安装 

编译环境,开发环境

开发库 开发工具

    


Linux: C,   (99%是C,有一部分代码是汇编语言,汇编语言是跟我们平台相关的,无法用C实现的)


GNU: C


最多的是C

c环境,  部分 c++ ,perl,java,python

    纯静态

    gcc:GNU C Complier     编译器     编译c语言

    g++:                              编译器     编译c++语言  gc++, gc plus plus


make: 项目管理工具(编译管理工具)

        makefile: 定义了 make (调用gcc,g++)按何种次序去编译源文件中的源程序

                (makefile并不属于程序的组成部分)

                automake,只要简单的定义,就可以生成一个makefile文件

                    automake,-->makefile.in -->makefile

                    autoconf,-->configure   (它是配置我们当前这个程序如何编译的准备工作) (执行完./configure, 结合makefile.in 生成makefile )


100个可选特性        configure 指定的结果(比如装在某个路径下,比如选定哪个特性)与 makefile.in 结合在一起,最终生成makefile


make install         安装,说白了就是一大堆的copy命令


 

编译安装程序三个步骤: (编译安装C程序的常用三步骤,C++一般也差不多)

(配置,编译,安装)

前提:准备开发环境(编译环境)

安装 "Development Tools"和"Development Libraries"

(红帽6上可能不一样,但是一般以 Development开头的)

# tar 解压缩

# cd 到源程序的目录下


1)# ./configure        (它会结合makefile.in生成makefile文件)

        --help (获取脚本的使用格式)

        --prefix=/path/to/somewhere  (指定安装路径)

        --sysconfdir=/PATH/TO/CONFILE_PATH  (指定配置文件路径,如果不指定的话,就是默认的路径比如--prefix指这的安装路径下面的etc conf等)


        功能: 1)让用户选定编译特性,2)检查编译环境,是不是符合我们程序的基本需要 (最后一行看看,有没有error错误)

2)# make 

3)# make install




# tar zxvf tengine-1.4.2.tar.gz

# cd tenine-1.4.2

# ./configure --prefix=/usr/local/tengine --conf-path=/etc/tengie/tengie.conf

# make

# make install

# /usr/local/tengine/sbin/nginx


下面步骤不是每一步都是必须的

1,修改PATH环境变量,以能够识别此程序的二进制文件路径

        第一种方法:修改/etc/profile文件

        第二种方法:在/etc/profile.d/目录下建立一个以.sh为名称后缀(结尾)的文件,在里面定义 export PATH=$PATH:/path/to/somewhere

        

      #  source /etc/profile  (重读 这个文件,它的目的就是让 某些变量比如 PATH 生效,    马哥这里未执行)

2,默认情况下,系统搜索库文件的路径 /lib,/usr/lib,要增添额外的搜索路径

    在 /etc/ld.so.conf.d/ 中创建 .conf 为后缀的文件,而后把要增添的路径直接写至此文件中   (ld.so.conf.d  中的l 是小写的l 不是大写的I,也不是1)

    (重启,能找到这个库,但是当前找不到) # ldconfig 当前就可以找到了

            # ldconfig 通知系统重新搜索库文件

                    -v 显示重新搜寻库的过程 

3,任何一个向其它程序提供库的程序,都会提供头文件(提供的函数,及参数,参数类型等相关属性) ,它要输出给系统     头文件应该以.h结尾的吧

        # include 包含别人的库所提供的功能 

  头文件也要输出给系统 

   默认: /usr/include

    增添头文件搜寻路径,使用链接进行

                比如 /usr/local/tengine/include          /usr/include/

                    两种方式: 

                    可以 ln -s /usr/local/tengine/include/* /usr/include   (每一个文件链接到其下面)

                    或者  ln -s /usr/local/tengine/include   /usr/include/tengine (目录链接到其下面)

    

4,man文件路径:安装在 --prefix指定的目录下的man目录,(系统在 /usr/share/man 下找)

        两种方式:

                1) man -M /PATH/TO/MAN_DIR COMMOND


                    -M 就是 MANUAL 的意思吧

image.png

                2)  在 /etc/man.config中添加一条MANPATH 即可,会立即生效



在Internet RFC标准中,Netstat的定义是: Netstat是在内核中访问网络连接状态及其相关信息的程序,它能提供TCP连接,TCP和UDP监听,进程内存管理的相关报告。

netstat命令是一个监控TCP/IP网络的非常有用的工具,它可以显示路由表、实际的网络连接以及每一个网络接口设备的状态信息。

Netstat 是一款命令行工具,可用于列出系统上所有的网络套接字连接情况,包括 tcp, udp 以及 unix 套接字,另外它还能列出处于监听状态(即等待接入请求)的套接字。如果你想确认系统上的 Web 服务有没有起来,你可以查看80端口有没有打开。以上功能使 netstat 成为网管和系统管理员的必备利器。

netstat命令用于显示与IP、TCP、UDP和ICMP协议相关的统计数据,一般用于检验本机各端口的网络连接情况。netstat是在内核中访问网络及相关信息的程序,它能提供TCP连接,TCP和UDP监听,进程内存管理的相关报告。

netstat命令:                netstat -ant  ; netstat -tnlp ; netstat -na

        -r : (route)显示路由表

        -n:(num)以数字的方式显示

         -a, --all

               Show  both  listening and non-listening sockets.  With the --interfaces

               option, show interfaces that are not marked

        

        -t:(tcp) 显示建立的tcp连接  显示主机上的连接状态的连接信息 t 表示与 tcp 协议相关的  

        -u: (udp)显示udp连接 (但udp是无状态的,所以显示不出来,虽然显示不出来已建立的连接,但是可以显示其它连接)

        -l: (listen)显示监听状态的连接  tl(只显示监听状态的连接,不显示已建立的连接)

        -p:(program)显示监听指定套接字的进程的进程号及进程名


image.png

        0.0.0.0 表示当前主机上的每一个地址都监听

        (比如 本地有三个ip 地址

        192.168.0.15,17.200.0.18,127.0.0.1 三个地址都监听

        )

        0.0.0.0:22 表示套接字(ip地址加端口)








部分 perl ,java ,python     



下面是红帽6

# yum grouplist

image.png

image.png

image.png

Compatibility libraries

Development tools


我学习是在红帽5上学习的 下面的操作 都是红帽5  有了这两个组才能使用make编译工具吧,才有了开发环境(编译环境)吧

[root@localhost yum.repos.d]# yum groupinstall "Development Tools" "Development Libraries" -y

image.png



$ lftps

image.png

image.png


image.png

这是淘宝的web服务器  在nginx的基础上修改的  

image.png

image.png

我在 http://tengine.taobao.org/download_cn.html (http://tengine.taobao.org/download.html)下载了


[root@localhost ~]# wget http://tengine.taobao.org/download/tengine-1.4.2.tar.gz

--2018-08-29 21:02:17--  http://tengine.taobao.org/download/tengine-1.4.2

正在解析主机 tengine.taobao.org... 140.205.172.18

Connecting to tengine.taobao.org|140.205.172.18|:80... 已连接。

已发出 HTTP 请求,正在等待回应... 200 OK

长度:1185902 (1.1M) [application/octet-stream]

Saving to: `tengine-1.4.2.tar.gz'


100%[======================================>] 1,185,902   2.77M/s   in 0.


2018-08-29 21:02:17 (2.77 MB/s) - `tengine-1.4.2.tar.gz' saved [1185902/1


[root@localhost ~]#

image.png

[root@localhost ~]# tar zxvf tengine-1.4.2.tar.gz

image.png

[root@localhost ~]# cd tengine-1.4.2

[root@localhost tengine-1.4.2]# ls

image.png




[root@localhost tengine-1.4.2]# ./configure --help  | less

image.png



安装在一个单独目录下,卸载比较方便,一删就可以了


[root@localhost tengine-1.4.2]#  ./configure --prefix=/usr/local/tengine  --conf-dir=/etc/tengine

./configure: error: invalid option "--conf-dir=/etc/tengine"

image.png

其实可以找 makefile文件 把 --config-path 改成 --config-dir

image.png

image.png


image.png

编译的时候,可能会报下面的错  我们要以根据提示操作 1)使用 --without-http_rewrite_module 

[root@localhost tengine-1.4.2]#  ./configure --prefix=/usr/local/tengine  --conf-path=/etc/tengine --without-http_rewrite_module  (这里按 Ctrl+C 未执行 )

2)安装pcre

image.png 可以见 /node-admin/12408

# yum install pcre-devel

image.png



[root@localhost tengine-1.4.2]#  ./configure --prefix=/usr/local/tengine  --conf-path=/etc/tengine

( --conf-path 指的是文件本身,不是目录)


image.png

image.png



[root@localhost tengine-1.4.2]#  ./configure --prefix=/usr/local/tengine  --conf-path=/etc/tengine/tengine.conf

image.png


(/usr/local/tengine  /etc/tengine 这些目录可能不存在 在 make install 的时候会帮我们创建)


[root@localhost tengine-1.4.2]# make  (像下面的 -O -W 大约就是优化吧)

image.png

[root@localhost tengine-1.4.2]# make install

,



[root@localhost tengine-1.4.2]# cd /usr/local/tengine/

[root@localhost tengine]# ls

html  logs  modules  sbin

[root@localhost tengine]#

image.png



[root@localhost tengine]# cd sbin/

[root@localhost sbin]# ls

dso_tool  nginx

[root@localhost sbin]#

image.png



[root@localhost sbin]# nginx  

-bash: nginx: command not found

[root@localhost sbin]# pwd

/usr/local/tengine/sbin

[root@localhost sbin]#


(nginx 不能执行,把它加到 PATH路径下)

image.png


[root@localhost sbin]# vim /etc/profile

约 46 上面 加上 PATH=$PATH:/usr/local/tengine/sbin ,再让系统重读脚本,见下面 (下次重启也行)



image.png


或者 ( # vim ~/.bash_profile )约12 上面增加吧 (表示当前用户的PATH环境变量吧)

image.png


[root@localhost sbin]# source /etc/profile  (重读 这个文件,它的目的就是让 某些变量比如 PATH 生效, 这里未执行)


(如果是 ~/.bash_profile 文件)

[root@localhost sbin]# source ~/.bash_profile  (重读 这个文件,它的目的就是让 某些变量比如 PATH 生效, 这里未执行)


打开加一个 putty 窗口,也是立即生效的吧


下面是另一窗口的打开

[root@localhost ~]# echo $PATH

/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/tengine/sbin:/root/bin

image.png


# nginx  (未报错,说明正常运行了)

image.png



[root@localhost ~]# netstat -tnlp

image.png


image.png


我自己亲自做的 不能 打开 http://192.168.0.95 是因为 防火墙的问题 

[root@ebs-22618 ~]# vim /etc/sysconfig/iptables

加上  -A RH-Firewall-1-INPUT -p tcp -m tcp --dport 80 -j ACCEPT 这一行,问题解决


默认的页面是在 见下面 

[root@localhost ~]# cd /usr/local/tengine/

[root@localhost tengine]# ls

client_body_temp  html  modules     sbin       uwsgi_temp

fastcgi_temp      logs  proxy_temp  scgi_temp

[root@localhost tengine]# cd html/

[root@localhost html]# ls

50x.html  index.html

[root@localhost html]#

image.png


#  vim index.html

image.png

可以看到修改的变化

image.png


# ls  (一般默认装在安装路径下面的库(lib)里面去 比如(lib,但是nginx 没有这个lib))

(因为 这些 lib 一般无法给其它程序使用)

image.png



# man nginx

image.png


# ls /usr/share/man   (它是分章节的)

image.png


# man ls  (它就在这个目录下面找了)

image.png


#  vim /etc/man.config   (在里面加一条 MANPATH /usr/local/tengine/man 就立即生效了)

image.png


# man man  (-M 明确告诉man命令到哪里去找)

image.png






# lftps

image.png

image.png

image.png

image.png



# ls 

image.png

我是从 http://archive.apache.org/dist/httpd/ 里面下载  httpd2.2.16.tar.gz

# tar jxvf httpd2.2.16.tar.bz2

# cd httpd-2.2.16

# ./configure --help | less

image.png

image.png


# rpm -q httpd  (也确保没有安装)

image.png

# ./configure --prefix=/usr/local/apache --sysconfdir=/etc/httpd

image.png

# make

image.png

# make install

image.pngimage.png


# cd /usr/local/apache

# ls 

image.png

# ls bin

image.png

# htpasswd (命令找不到)

image.png


# vim /etc/profile.d/httpd.sh

export PATH=$PATH:/usr/local/apache/bin

image.png


新窗口中 

(或者 使用  # source /etc/profile.d/httpd.sh)

# echo $PATH

image.png# htpasswd (此时命令是可以使用的了)

image.png


# Idconfig -v   (显示当前系统上所能够导出的所有的库)

image.png

# Idconfig -v | grep apr   (找到的可能与apache的不是同一个库 比如 libapr-1.so.0不一定是apache下面的库)

image.png


# vim /etc/ld.so.conf.d/httpd.conf  (把apache 库目录输出到系统)

image.png

image.png

# Idconfig -v | grep apr (此时看到 libaprutil-1.so ->  libaprutil-1.so.0.3.9 是在 /usr/local/apache/lib 目录下的 说明系统已经找到/usr/local/apache/lib 这个库了  )

image.png



 在原putty窗口

# 在 apache 目录下 

# ls lib/

image.png




在 /usr/local/apache 目录下

# pwd

# ls include/

image.png


# ln -sv /usr/local/apache/include/* /usr/include/   (可以,不过会创建一大堆的链接文件,太眼花瞭乱了 Ctrl+C未执行)

image.png


# ln -sv /usr/local/apache/include /usr/include/httpd (给 /usr/local/apache/include 目录创建一个httpd的快捷方式 这个比较简洁)

image.png


# pwd

# ls bin

image.png


# man htpasswd  (很可能找不着,因为刚编译的时候,可能会找到 ,这里是没找到)

image.png


# ls

# ls man

image.png


# ls man/man1


image.png


第一种方式

# man -M /usr/local/apache/man htpasswd (-M路径只需指到 man 即可)

image.png

image.png


第二种方式

# vim /etc/man.config

image.png

( 里面增加一行 MANPATH /usr/local/apache/man )

image.png






已经启动了 nginx服务器 这时如果再启动 apache 80端口冲突 (修改端口或者把原来的nginx关掉)

# netstat -tnlp

image.png

nignx 进程号是16744


# kill 16744 (杀死这个进程)

# netstat -tnlp   (此时 nginx 进程没有了)

image.png



# echo $PATH

image.png


# apachectl start

 image.png 

# netstat -tnlp

image.png

可以打开apache服务器


浏览器访问

image.png


# cd /usr/local/apache/htdocs/

# ls 

# vim index.html

image.png

image.png


刷新浏览器访问 看到变化

image.png






 # netstat -r   (显示本地路由表)   (显示的主机名 www.magedu.com 在互联网上速度慢 )

  # netstat -rn  (以数字方式显示  不显示的主机名,显示数字ip,速度快  )  


image.png


# netstat -t (-t表示与tcp协议相关的 正在建立的连接信息) (已建立的连接信息)

image.png



# netstat -u (udp显示不出来的,因为udp是无状态的)

image.png



# netstat -tl (显示监听状态的tcp连接)(监听 就是打开状态,等待别人连接)


image.png



# netstat -ul (显示监听状态的tcp连接)(监听 就是打开状态,等待别人连接,它是打开状态 类似于监听,因为其实udp是无法监听的)

image.png


# netstat -tul (监听的tcp和udp)


Foreign Address (这里*:*) 对于监听来讲,显示的是允许的远程地址

*:*表示任意远程主机,任意远程端口

image.png

协议 接收队列 发送队列 本地地址 远程地址(*:*表示接受任意主机:端口) 状态(LISTEN表示监听状态)


# netstat -tuln (监听的tcp和udp)(以ip数字方式显示 ,不显示主机名了)

image.png




# netstat -tulnp

(PID/Program name 进程号/进程名)

image.png





普通分类: