欢迎各位兄弟 发布技术文章
这里的技术是共享的
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 的意思吧
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)显示监听指定套接字的进程的进程号及进程名
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
Compatibility libraries
Development tools
我学习是在红帽5上学习的 下面的操作 都是红帽5 有了这两个组才能使用make编译工具吧,才有了开发环境(编译环境)吧
[root@localhost yum.repos.d]# yum groupinstall "Development Tools" "Development Libraries" -y
$ lftps
这是淘宝的web服务器 在nginx的基础上修改的
我在 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 ~]#
[root@localhost ~]# tar zxvf tengine-1.4.2.tar.gz
[root@localhost ~]# cd tengine-1.4.2
[root@localhost tengine-1.4.2]# ls
[root@localhost tengine-1.4.2]# ./configure --help | less
安装在一个单独目录下,卸载比较方便,一删就可以了
[root@localhost tengine-1.4.2]# ./configure --prefix=/usr/local/tengine --conf-dir=/etc/tengine
./configure: error: invalid option "--conf-dir=/etc/tengine"
其实可以找 makefile文件 把 --config-path 改成 --config-dir
编译的时候,可能会报下面的错 我们要以根据提示操作 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
# yum install pcre-devel
[root@localhost tengine-1.4.2]# ./configure --prefix=/usr/local/tengine --conf-path=/etc/tengine
( --conf-path 指的是文件本身,不是目录)
[root@localhost tengine-1.4.2]# ./configure --prefix=/usr/local/tengine --conf-path=/etc/tengine/tengine.conf
(/usr/local/tengine /etc/tengine 这些目录可能不存在 在 make install 的时候会帮我们创建)
[root@localhost tengine-1.4.2]# make (像下面的 -O -W 大约就是优化吧)
[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]#
[root@localhost tengine]# cd sbin/
[root@localhost sbin]# ls
dso_tool nginx
[root@localhost sbin]#
[root@localhost sbin]# nginx
-bash: nginx: command not found
[root@localhost sbin]# pwd
/usr/local/tengine/sbin
[root@localhost sbin]#
(nginx 不能执行,把它加到 PATH路径下)
[root@localhost sbin]# vim /etc/profile
约 46 上面 加上 PATH=$PATH:/usr/local/tengine/sbin ,再让系统重读脚本,见下面 (下次重启也行)
或者 ( # vim ~/.bash_profile )约12 上面增加吧 (表示当前用户的PATH环境变量吧)
[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
# nginx (未报错,说明正常运行了)
[root@localhost ~]# netstat -tnlp
我自己亲自做的 不能 打开 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]#
# vim index.html
可以看到修改的变化
# ls (一般默认装在安装路径下面的库(lib)里面去 比如(lib,但是nginx 没有这个lib))
(因为 这些 lib 一般无法给其它程序使用)
# man nginx
# ls /usr/share/man (它是分章节的)
# man ls (它就在这个目录下面找了)
# vim /etc/man.config (在里面加一条 MANPATH /usr/local/tengine/man 就立即生效了)
# man man (-M 明确告诉man命令到哪里去找)
# lftps
# ls
我是从 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
# rpm -q httpd (也确保没有安装)
# ./configure --prefix=/usr/local/apache --sysconfdir=/etc/httpd
# make
# make install
# cd /usr/local/apache
# ls
# ls bin
# htpasswd (命令找不到)
# vim /etc/profile.d/httpd.sh
export PATH=$PATH:/usr/local/apache/bin
新窗口中
(或者 使用 # source /etc/profile.d/httpd.sh)
# echo $PATH
# htpasswd (此时命令是可以使用的了)
# Idconfig -v (显示当前系统上所能够导出的所有的库)
# Idconfig -v | grep apr (找到的可能与apache的不是同一个库 比如 libapr-1.so.0不一定是apache下面的库)
# vim /etc/ld.so.conf.d/httpd.conf (把apache 库目录输出到系统)
# Idconfig -v | grep apr (此时看到 libaprutil-1.so -> libaprutil-1.so.0.3.9 是在 /usr/local/apache/lib 目录下的 说明系统已经找到/usr/local/apache/lib 这个库了 )
在原putty窗口
# 在 apache 目录下
# ls lib/
在 /usr/local/apache 目录下
# pwd
# ls include/
# ln -sv /usr/local/apache/include/* /usr/include/ (可以,不过会创建一大堆的链接文件,太眼花瞭乱了 Ctrl+C未执行)
# ln -sv /usr/local/apache/include /usr/include/httpd (给 /usr/local/apache/include 目录创建一个httpd的快捷方式 这个比较简洁)
# pwd
# ls bin
# man htpasswd (很可能找不着,因为刚编译的时候,可能会找到 ,这里是没找到)
# ls
# ls man
# ls man/man1
第一种方式
# man -M /usr/local/apache/man htpasswd (-M路径只需指到 man 即可)
第二种方式
# vim /etc/man.config
( 里面增加一行 MANPATH /usr/local/apache/man )
已经启动了 nginx服务器 这时如果再启动 apache 80端口冲突 (修改端口或者把原来的nginx关掉)
# netstat -tnlp
nignx 进程号是16744
# kill 16744 (杀死这个进程)
# netstat -tnlp (此时 nginx 进程没有了)
# echo $PATH
# apachectl start
# netstat -tnlp
可以打开apache服务器
浏览器访问
# cd /usr/local/apache/htdocs/
# ls
# vim index.html
刷新浏览器访问 看到变化
# netstat -r (显示本地路由表) (显示的主机名 www.magedu.com 在互联网上速度慢 )
# netstat -rn (以数字方式显示 不显示的主机名,显示数字ip,速度快 )
# netstat -t (-t表示与tcp协议相关的 正在建立的连接信息) (已建立的连接信息)
# netstat -u (udp显示不出来的,因为udp是无状态的)
# netstat -tl (显示监听状态的tcp连接)(监听 就是打开状态,等待别人连接)
# netstat -ul (显示监听状态的tcp连接)(监听 就是打开状态,等待别人连接,它是打开状态 类似于监听,因为其实udp是无法监听的)
# netstat -tul (监听的tcp和udp)
Foreign Address (这里*:*) 对于监听来讲,显示的是允许的远程地址
*:*表示任意远程主机,任意远程端口
协议 接收队列 发送队列 本地地址 远程地址(*:*表示接受任意主机:端口) 状态(LISTEN表示监听状态)
# netstat -tuln (监听的tcp和udp)(以ip数字方式显示 ,不显示主机名了)
# netstat -tulnp
(PID/Program name 进程号/进程名)