Apache2.2和Apache2.4中httpd.conf配置文件的异同

Windows环境从Apache2.2改成Apache2.4后httpd.conf中的设置异同。

1、权限设定方式变更

2.2使用Order Deny / Allow的方式,2.4改用Require

apache2.2:

Order deny,allow
Deny from all

apache2.4:

Require all denied

此处比较常用的有如下几种:

Require all denied

Require all granted

Require host xxx.com

Require ip 192.168.1 192.168.2

Require local

注意:若有设定在htaccess文件中的也要修改

2、设定日志纪录方式变更

RewriteLogLevel 指令改为 logLevel

LOGLEVEL设置第一个值是针对整个Apache的预设等级,后方可以对指定的模块修改此模块的日志记录等级

比如:

LogLevel warn rewrite: warn

3、Namevirtualhost 被移除

4、需载入更多的模块

开启Gzip在apache2.2中需载入mod_deflate,apache2.4中需载入mod_filter和mod_deflate

开启SSL在apache2.2中需载入mod_ssl,apache2.4中需载入mod_socache_shmcb和mod_ssl

5、在windows环境建议的设置

EnableSendfile Off
EnableMMAP Off

当Log日志出现AcceptEx failed等错误时建议设置

AcceptFilter http none
AcceptFilter https none

说明:Win32DisableAcceptEx在apache2.4中被AcceptFilter None取代

6、Listen设定的调整

以443为例,不可以只设定Listen 443

会出现以下错误:

(OS 10048)一次只能用一个通讯端地址(通讯协定/网路位址/连接) : AH00072: make_sock: could not bind to address [::]:443

(OS 10048)一次只能用一个通讯端地址(通讯协定/网路位址/连接) : AH00072: make_sock: could not bind to address 0.0.0.0:443

AH00451: no listening sockets available, shutting down

AH00015: Unable to open logs

因此需指定监听的IP,可设定多个

例如:

Listen 192.168.2.1:443
Listen 127.0.0.1:443

Apache2.4和Apache2.2访问控制配置语法对比

一、访问控制

在Apache2.2版本中,访问控制是基于客户端的主机名、IP地址以及客户端请求中的其他特征,使用Order(排序), Allow(允许), Deny(拒绝),Satisfy(满足)指令来实现。

在Apache2.4版本中,使用mod_authz_host这个新的模块,来实现访问控制,其他授权检查也以同样的方式来完成。旧的访问控制语句应当被新的授权认证机制所取代,即便Apache已经提供了mod_access_compat这一新模块来兼容旧语句。

这里有一些实例,用新方法取代旧语句实现相同的访问控制

实例1:所有请求都被拒绝

Apache2.2 配置:

复制代码代码如下:
Order deny,allow #排序,先拒绝后允许
Deny from all #拒绝所有

Apache2.4 配置:

复制代码代码如下:
Require all denied #拒绝所有

实例2:所有请求都被允许

Apache2.2 配置:

复制代码代码如下:
Order allow,deny #排序,先允许后拒绝
Allow from all #允许所有

Apache2.4 配置:

复制代码代码如下:
Require all granted #拒绝所有

实例3:example.org所有请求都被允许,其他拒绝

Apache2.2 配置:

复制代码代码如下:
Order Deny,Allow #排序,先拒绝后允许
Deny from all #拒绝所有
Allow from example.org #允许example.org

Apache2.4 配置:

复制代码代码如下:
Require host example.org #拒绝所有

二、Apache Require 指令

了解更多require指令用法:《Apache Module mod_authz_core》

附:常见访问控制指令

复制代码代码如下:
Require all granted #允许所有
Require all denied #拒绝所有
Require env env-var [env-var] … #允许,匹配环境变量中任意一个
Require method http-method [http-method] … #允许,特定的HTTP方法
Require expr expression #允许,表达式为true
Require user userid [ userid ] … #允许,特定用户
Require group group-name [group-name] … #允许,特定用户组
Require valid-user # #允许,有效用户
Require ip 10 172.20 192.168.2 #允许 特定IP

Apache的Order Allow,Deny 详解

Allow和Deny可以用于apache的conf文件或者.htaccess文件中(配合Directory, Location, Files等),用来控制目录和文件的访问授权。

所以,最常用的是:
Order Deny,Allow
Allow from All

注意“Deny,Allow”中间只有一个逗号,也只能有一个逗号,有空格都会出错;单词的大小写不限。上面设定的含义是先设定“先检查禁止设定,没有禁止的全部允许”,而第二句没有Deny,也就是没有禁止访问的设定,直接就是允许所有访问了。这个主要是用来确保或者覆盖上级目录的设置,开放所有内容的访问权。

按照上面的解释,下面的设定是无条件禁止访问:
Order Allow,Deny
Deny from All

如果要禁止部分内容的访问,其他的全部开放:
Order Deny,Allow
Deny from ip1 ip2
或者
Order Allow,Deny
Allow from all
Deny from ip1 ip2

apache会按照order决定最后使用哪一条规则,比如上面的第二种方式,虽然第二句allow允许了访问,但由于在order中allow不是最后规则,因此还需要看有没有deny规则,于是到了第三句,符合ip1和ip2的访问就被禁止了。注意,order决定的“最后”规则非常重要,下面是两个错误的例子和改正方式:

Order Deny,Allow
Allow from all
Deny from domain.org
错误:想禁止来自domain.org的访问,但是deny不是最后规则,apache在处理到第二句allow的时候就已经匹配成功,根本就不会去看第三句。
解决方法:Order Allow,Deny,后面两句不动,即可。

Order Allow,Deny
Allow from ip1
Deny from all
错误:想只允许来自ip1的访问,但是,虽然第二句中设定了allow规则,由于order中deny在后,所以会以第三句deny为准,而第三句的范围中又明显包含了ip1(all include ip1),所以所有的访问都被禁止了。
解决方法一:直接去掉第三句。
解决方法二:
Order Deny,Allow
Deny from all
Allow from ip1

总则——

影响最终判断结果的只有两点:

1. order语句中allow、deny的先后顺序;

2. allow、deny语句中各自包含的范围。

温馨提醒——

1. 修改完配置后要保存好并重启Apache服务,配置才能生效;

2. 开头字母不分大小写;

3. allow、deny语句不分先后顺序,谁先谁后不影响最终判断结果;但都会被判断到;

4. order语句中,“allow,deny”之间“有且只有”一个逗号(英文格式的),而且先后顺序很重要;

5. Apache有一条缺省规则,“order allow,deny”本身就默认了拒绝所有的意思,因为deny在allow的后面;同理,“order deny,allow”本身默认的是允许所有;当然,最终判断结果还要综合下面的allow、deny语句中各自所包含的范围;(也就是说order语句后面可以没有allow、deny语句)

6. allow、deny语句中,第二个单词一定是“from”,否则Apache会因错而无法启动,

7. “order allow,deny”代表先判断allow语句再判断deny语句,反之亦然。

最常用命令

[root@bruce httpd2.4.18]# netstat -lnt           查看端口

[root@bruce httpd2.4.18]# lsof -i tcp:80       反查端口的服务

[root@bruce httpd2.4.18]# lsof -i :80       反查端口的服务

[root@bruce httpd2.4.18]# ps -ef|grep http    查看进程

[root@bruce logs]# tail -100 error_log           查看日志

[root@bruce etc]# /usr/local/httpd/bin/apachectl -t   检查apache配置文件的语法

 

centOS 6.5关闭防火墙步骤

关闭命令:  service iptables stop
永久关闭防火墙:chkconfig iptables off

两个命令同时运行,运行完成后查看防火墙关闭状态
service iptables status

 

InnoDB还是MyISAM 再谈MySQL存储引擎的选择

 

两种类型最主要的差别就是Innodb 支持事务处理与外键和行级锁.而MyISAM不支持.所以MyISAM往往就容易被人认为只适合在小项目中使用。

我作为使用MySQL的用户角度出发,Innodb和MyISAM都是比较喜欢的,但是从我目前运维的数据库平台要达到需求:99.9%的稳定性,方便的扩展性和高可用性来说的话,MyISAM绝对是我的首选。

原因如下:

1、首先我目前平台上承载的大部分项目是读多写少的项目,而MyISAM的读性能是比Innodb强不少的。

2、MyISAM的索引和数据是分开的,并且索引是有压缩的,内存使用率就对应提高了不少。能加载更多索引,而Innodb是索引和数据是紧密捆绑的,没有使用压缩从而会造成Innodb比MyISAM体积庞大不小。

3、从平台角度来说,经常隔1,2个月就会发生应用开发人员不小心update一个表where写的范围不对,导致这个表没法正常用了,这个时候MyISAM的优越性就体现出来了,随便从当天拷贝的压缩包取出对应表的文件,随便放到一个数据库目录下,然后dump成sql再导回到主库,并把对应的binlog补上。如果是Innodb,恐怕不可能有这么快速度,别和我说让Innodb定期用导出xxx.sql机制备份,因为我平台上最小的一个数据库实例的数据量基本都是几十G大小。

4、从我接触的应用逻辑来说,select count(*) 和order by 是最频繁的,大概能占了整个sql总语句的60%以上的操作,而这种操作Innodb其实也是会锁表的,很多人以为Innodb是行级锁,那个只是where对它主键是有效,非主键的都会锁全表的。

5、还有就是经常有很多应用部门需要我给他们定期某些表的数据,MyISAM的话很方便,只要发给他们对应那表的frm.MYD,MYI的文件,让他们自己在对应版本的数据库启动就行,而Innodb就需要导出xxx.sql了,因为光给别人文件,受字典数据文件的影响,对方是无法使用的。

6、如果和MyISAM比insert写操作的话,Innodb还达不到MyISAM的写性能,如果是针对基于索引的update操作,虽然MyISAM可能会逊色Innodb,但是那么高并发的写,从库能否追的上也是一个问题,还不如通过多实例分库分表架构来解决。

7、如果是用MyISAM的话,merge引擎可以大大加快应用部门的开发速度,他们只要对这个merge表做一些select count(*)操作,非常适合大项目总量约几亿的rows某一类型(如日志,调查统计)的业务表。

当然Innodb也不是绝对不用,用事务的项目如模拟炒股项目,我就是用Innodb的,活跃用户20多万时候,也是很轻松应付了,因此我个人也是很喜欢Innodb的,只是如果从数据库平台应用出发,我还是会首选MyISAM。

另外,可能有人会说你MyISAM无法抗太多写操作,但是我可以通过架构来弥补,说个我现有用的数据库平台容量:主从数据总量在几百T以上,每天十多亿 pv的动态页面,还有几个大项目是通过数据接口方式调用未算进pv总数,(其中包括一个大项目因为初期memcached没部署,导致单台数据库每天处理 9千万的查询)。而我的整体数据库服务器平均负载都在0.5-1左右。

Apache httpd-2.4.10编译安装

系统: CentOS6.5_64
软件: httpd-2.4.10.tar.bz2
依赖: openssl-1.0.1j.tar.gz、apr-1.5.1.tar.bz2、apr-util-1.5.4.tar.bz2、pcre-devel
下载地址: http://www.openssl.org/source/            openssl
下载地址: http://httpd.apache.org/download.cgi      httpd
下载地下: http://apr.apache.org/download.cgi        apr,apr-util   是Apache的项目

pcre-devel 我们的系统安装光盘上就有。

首先我们先说明一些情况, 我们已经安装了基础开发包。

我们的系统上已经安装了apr和openssl,但是版本太低了,而它们还会被其它的软件所依赖,所以在不影响其它软件的情况下,就只能编译安装新的版本了。 而原来的httpd也会被其它的软件所依赖,不可以卸载。

1. 先把pcre-devel装上,直接yum安装。

1 yum install pcre-devel -y                  #-y 是直接安装的意思,敬我以前连-y都不知道。

2. 安装apr-1.5.1, 这个版本是我昨天下载的,现在是最新的版本。 低版本会安装不上event模块。

1
2
./configure –prefix=/usr/local/apr1.5      #只来个安装位置就可以
make && make install                        #稍等片片刻。

3. 安装apr-util-1.5.4.

1
2
3
4
./configure –prefix=/usr/local/apr1.5 –with-apr=/usr/local/apr1.5
#这个是apr的工具集,它依赖于上面的那个apr, 所以加上–with来指定我们安装apr的目录。
#跟apr安装在一个目录,现在看来没有什么问题。
make && make install

4. 安装openssl-1.0.1j

1
2
3
./config –prefix=/usr/local/openssl1j enable-shared
# enable-shared没有这一项, httpd编译会报错。  有点奇怪的是,在虚拟机上会报错,提示要加上-fPID。
make $$ make install

导出库文件,新建/etc/ld.so.conf.d/openssl1j.conf文件。    https会用到新版本的库文件。

1
2
vim /etc/ld.so.conf.d/openssl1j.conf
ldconfig

文件内容就写你的openssl安装目录下的lib的路径。 如:

1 /usr/local/openssl1j/lib

5. 安装httpd2.4.10

1
2
3
4
./configure –prefix=/usr/local/httpd2.4 –sysconfdir=/etc/httpd2.4 –enable-so –enable-ssl –enable-rewrite –enable-cgi –with-zlib –with-pcre –with-apr=/usr/local/apr1.5/ –with-apr-util=/usr/local/apr1.5/ –with-ssl=/usr/local/openssl1j/ –enable-modules=most –enable-mpms-shared=all –with-mpm=event
make && make install

#–prefix 安装目 录   –sysconfdir 配置文件目录   –enable-so 开启DSO动态装卸shared模块    –enable-ssl https的功能    –enable-rewrite 地址重写   –enable-cgi CGI脚本功能  –with-zlib 压缩功能的函数库   –with-pcre  perl库    刚才安装的软件的目录   –enable-modules=most 编译常用的模块  –enable-mpms-shared=all 所有的动态模块  后面这个默认挂载MPM模块event.

6. 杂项
(1)去httpd的安装目录看一下结果。  一切OK的话就可以下面的了。
(2) 把httpd的头文件符号链接到/usr/include      #不是必须的,怕以后有软件会用。

1 ln -s /usr/local/httpd2.4/include/ /usr/include/httpd2.4

(3) 新建/etc/profile.d/httpd2.4.sh文件,添加进PATH变量。

1
2
3
4
5
vim /etc/profile.d/httpd2.4.sh            #写入文件内容,执行一个source
source /etc/profile.d/httpd2.4.sh

文件内容:
export PATH=/usr/local/httpd2.4/bin:$PATH

注意路径要写在PATH的前头,这样bash先找到的就是新的httpd了。 不然自动打开的又会是以前的那个httpd了。

1
2
[iyunv@CentOS-Office bin]# echo $PATH
/usr/local/httpd2.4/bin:/usr/local/httpd2.4/bin:/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin

(4)停止你的老httpd, 来看看新的可不可以运行吧。

1
2
3
4
5
6
7
[iyunv@CentOS-Office openssl1j]# httpd
AH00557: httpd: apr_sockaddr_info_get() failed for CentOS-Office
AH00558: httpd: Could not reliably determine the server’s fully qualified domain name, using 127.0.0.1. Set the ‘ServerName’ directive globally to suppress this message
[iyunv@CentOS-Office openssl1j]# httpd -v        #查看版本
Server version: Apache/2.4.10 (Unix)
Server built:   Nov 10 2014 11:10:33
[iyunv@CentOS-Office openssl1j]#


看来我这里暂时是可以运行了。 启动httpd的时候报的错,只要自已的主机名可以解析自已的IP,就没事了。 嗯,在我们这种只是做实验,做练习来说。 添加到/etc/hosts文件里是个不错的办法。
像我这里,加上一行:

172.16.2.0   CentOS-Office
就OK了。
(5) 来个服务脚本,可以用service来启动关闭。
为了避免麻烦,直接把原来的httpd的服务脚本复制一下,改吧改吧。

1
2
cp /etc/init.d/httpd /etc/init.d/httpd
vim /etc/init.d/httpd

先贴一下要改的部分, 占占版面。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
40
41 # Path to the apachectl script, server binary, and short-form for messages.
42 apachectl=/usr/sbin/apachectl            #这一行要改,我就写下边了。
apachectl=/usr/local/httpd2.4/bin/apachectl      #注意路径,看你安装在哪了。

43 httpd=${HTTPD-/usr/sbin/httpd}            #这一行也要改
httpd=/usr/local/httpd2.4/bin/httpd       #因为httpd2.4可以动态加载MPM模块。
#所以就不用运行不同MPM模块的程序,指定这一个就好。
#
44 prog=httpd
45 pidfile=${PIDFILE-/var/run/httpd/httpd.pid}   #这一行改
pidfile=/var/run/httpd2.4/httpd2.4.pid        #不是默认路径,还要改httpd配置文件,
#可以把路径改成你的安装目录下的logs目录,默认是在这里。

46 lockfile=${LOCKFILE-/var/lock/subsys/httpd}   #这一行改
lockfile=/var/lock/subsys/httpd2.4            #

47 RETVAL=0
48 STOP_TIMEOUT=${STOP_TIMEOUT-10}
49

OK 保存退出。
上边的PID文件的路径如果用默认路径,就不用下边这几行了。

1
2
3
4
5
6
[iyunv@CentOS-Office run]# mkdir httpd2.4
[iyunv@CentOS-Office run]# chmod 700 httpd2.4/        #这个文件是由第一个httpd进程创建的
#这个进程是root启动的。root的权限。
[iyunv@CentOS-Office httpd2.4]# vim /etc/httpd2.4/httpd.conf
文件里面加入这一行:
pidFile “/var/run/httpd2.4/httpd2.4.pid”

好啦, 如果现在有httpd进程在运行,  killall httpd
然后就可以启动试试啦。

1
2
[iyunv@CentOS-Office run]# service httpd start
正在启动 httpd:                                           [确定]

这样暂时就算是安装完成了.


注意: httpd2.4的脚本是httpd , 而原来httpd2.2成了httpd.bak.
我们的脚本名称还是httpd. 以前httpd2.2的时候添加过chkconfig的话,就不用设置了。
chkconfig设置:

1
2
3
4
5
6
7
[iyunv@CentOS-Office run]# chkconfig –list httpd
httpd 服务支持 chkconfig,但它在任何级别中都没有被引用(运行“chkconfig –add httpd”)
[iyunv@CentOS-Office run]# chkconfig —add httpd
[iyunv@CentOS-Office run]# chkconfig httpd on
[iyunv@CentOS-Office run]# chkconfig –list httpd
httpd              0:关闭    1:关闭    2:启用    3:启用    4:启用    5:启用    6:关闭
[iyunv@CentOS-Office run]#

vi快捷键使用大全

光标控制命令

命令 光标移动

h或^h 向左移一个字符

j或^j或^n 向下移一行

k或^p 向上移一行

l或空格 向右移一个字符

G 移到文件的最后一行

nG 移到文件的第n行

w 移到下一个字的开头

W 移到下一个字的开头,忽略标点符号

b 移到前一个字的开头

B 移到前一个字的开头,忽略标点符号

L 移到屏幕的最后一行

M 移到屏幕的中间一行

H 移到屏幕的第一行

e 移到下一个字的结尾

E 移到下一个字的结尾,忽略标点符号

( 移到句子的开头

) 移到句子的结尾

{ 移到段落的开头

} 移到下一个段落的开头

0或| 移到当前行的第一列

n| 移到当前行的第n列

^ 移到当前行的第一个非空字符

$ 移到当前行的最后一个字符

+或return 移到下一行的第一个字符

– 移到前一行的第一个非空字符

在vi中添加文本

命令 插入动作

a 在光标后插入文本

A 在当前行插入文本

i 在光标前插入文本

I 在当前行前插入文本

o 在当前行的下边插入新行

O 在当前行的上边插入新行

:r file 读入文件file内容,并插在当前行后

:nr file 读入文件file内容,并插在第n行后

escape 回到命令模式

^v char 插入时忽略char的指定意义,这是为了插入特殊字符

在vi中删除文本

命令 删除操作

x 删除光标处的字符,可以在x前加上需要删除的字符数目

nx 从当前光标处往后删除n个字符

X 删除光标前的字符,可以在X前加上需要删除的字符数目

nX 从当前光标处往前删除n个字符

dw 删至下一个字的开头

ndw 从当前光标处往后删除n个字

dG 删除行,直到文件结束

dd 删除整行

ndd 从当前行开始往后删除

db 删除光标前面的字

ndb 从当前行开始往前删除n字

:n,md 从第m行开始往前删除n行

d或d$ 从光标处删除到行尾

dcursor_command 删除至光标命令处,如dG将从当产胆行删除至文件的末尾

^h或backspace 插入时,删除前面的字符

^w 插入时,删除前面的字

修改vi文本

每个命令前面的数字表示该命令重复的次数

命令 替换操作

rchar 用char替换当前字符

R text escape 用text替换当前字符直到换下Esc键

stext escape 用text代替当前字符

S或cctext escape 用text代替整行

cwtext escape 将当前字改为text

Ctext escape 将当前行余下的改为text

cG escape 修改至文件的末尾

ccursor_cmd text escape 从当前位置处到光标命令位置处都改为text

在vi中查找与替换

命令 查找与替换操作

/text 在文件中向前查找text

?text 在文件中向后查找text

n 在同一方向重复查找

N 在相反方向重复查找

ftext 在当前行向前查找text

Ftext 在当前行向后查找text

ttext 在当前行向前查找text,并将光标定位在text的第一个字符

Ttext 在当前行向后查找text,并将光标定位在text的第一个字符

:set ic 查找时忽略大小写

:set noic 查找时对大小写敏感

:s/oldtext/newtext 用newtext替换oldtext

:m,ns/oldtext/newtext 在m行通过n,用newtext替换oldtext

& 重复最后的:s命令

:g/text1/s/text2/text3 查找包含text1的行,用text3替换text2

:g/text/command 在所有包含text的行运行command所表示的命令

:v/text/command 在所有不包含text的行运行command所表示的命令

在vi中复制文本

命令 复制操作

yy 将当前行的内容放入临时缓冲区

nyy 将n行的内容放入临时缓冲区

p 将临时缓冲区中的文本放入光标后

P 将临时缓冲区中的文本放入光标前

“(a-z)nyy 复制n行放入名字为圆括号内的可命名缓冲区,省略n表示当前行

“(a-z)ndd 删除n行放入名字为圆括号内的可命名缓冲区,省略n表示当前行

“(a-z)p 将名字为圆括号的可命名缓冲区的内容放入当前行后

“(a-z)P 将名字为圆括号的可命名缓冲区的内容放入当前行前

在vi中撤消与重复

命令 撤消操作

u 撤消最后一次修改

U 撤消当前行的所有修改

. 重复最后一次修改

, 以相反的方向重复前面的f、F、t或T查找命令

; 重复前面的f、F、t或T查找命令

“np 取回最后第n次的删除(缓冲区中存有一定次数的删除内容,一般为9)

n 重复前面的/或?查找命令

N 以相反方向重复前面的/或?命令

保存文本和退出vi

命令 保存和/或退出操作

:w 保存文件但不退出vi

:w file 将修改保存在file中但不退出vi

:wq或ZZ或:x 保存文件并退出vi

:q! 不保存文件,退出vi

:e! 放弃所有修改,从上次保存文件开始再编辑

vi中的选项

选项 作用

:set all 打印所有选项

:set nooption 关闭option选项

:set nu 每行前打印行号

:set showmode 显示是输入模式还是替换模式

:set noic 查找时忽略大小写

:set list 显示制表符(^I)和行尾符号

:set ts=8 为文本输入设置tab stops

:set window=n 设置文本窗口显示n行

vi的状态

选项 作用

:.= 打印当前行的行号

:= 打印文件中的行数

^g 显示文件名、当前的行号、文件的总行数和文件位置的百分比

:l 使用字母”l”来显示许多的特殊字符,如制表符和换行符

在文本中定位段落和放置标记

选项 作用

{ 在第一列插入{来定义一个段落

[[ 回到段落的开头处

]] 向前移到下一个段落的开头处

m(a-z) 用一个字母来标记当前位置,如用mz表示标记z

‘(a-z) 将光标移动到指定的标记,如用’z表示移动到z

在vi中连接行

选项 作用

J 将下一行连接到当前行的末尾

nJ 连接后面n行

光标放置与屏幕调整

选项 作用

H 将光标移动到屏幕的顶行

nH 将光标移动到屏幕顶行下的第n行

M 将光标移动到屏幕的中间

L 将光标移动到屏幕的底行

nL 将光标移动到屏幕底行上的第n行

^e(ctrl+e) 将屏幕上滚一行

^y 将屏幕下滚一行

^u 将屏幕上滚半页

^d 将屏幕下滚半页

^b 将屏幕上滚一页

^f 将屏幕下滚一页

^l 重绘屏幕

z-return 将当前行置为屏幕的顶行

nz-return 将当前行下的第n行置为屏幕的顶行

z. 将当前行置为屏幕的中央

nz. 将当前行上的第n行置为屏幕的中央

z- 将当前行置为屏幕的底行

nz- 将当前行上的第n行置为屏幕的底行

vi中的shell转义命令

选项 作用

:!command 执行shell的command命令,如:!ls

:!! 执行前一个shell命令

:r!command 读取command命令的输入并插入,如:r!ls会先执行ls,然后读入内容

:w!command 将当前已编辑文件作为command命令的标准输入并执行command命令,如:w!grep all

:cd directory 将当前工作目录更改为directory所表示的目录

:sh 将启动一个子shell,使用^d(ctrl+d)返回vi

:so file 在shell程序file中读入和执行命令

vi中的宏与缩写

(避免使用控制键和符号,不要使用字符K、V、g、q、v、*、=和功能键)

选项 作用

:map key command_seq 定义一个键来运行command_seq,如:map e ea,无论什么时候都可以e移到一个字的末尾来追加文本

:map 在状态行显示所有已定义的宏

:umap key 删除该键的宏

:ab string1 string2 定义一个缩写,使得当插入string1时,用string2替换string1。当要插入文本时,键入string1然后按Esc键,系统就插入了string2

:ab 显示所有缩写

:una string 取消string的缩写

在vi中缩进文本

选项 作用

^i(ctrl+i)或tab 插入文本时,插入移动的宽度,移动宽度是事先定义好的

:set ai 打开自动缩进

:set sw=n 将移动宽度设置为n个字符

n<< 使n行都向左移动一个宽度

n>> 使n行都向右移动一个宽度,例如3>>就将接下来的三行每行都向右移动一个移动宽度

1.编辑模式: 插入/替换 (按INSERT键切换)

2.[ESC] 指令模式

3.输入模式 将在指令模式下输入 a

新增(a,A)

a:从光标所在位置后面开始新增资料,光标后的资料随新增资料向后移动。

A:从光标所在列最后面的地方开始新增资料。

插入(i,I)

i:从光标所在位置前面开始插入资料,光标后的资料随新增资料向后移动。

I:从光标所在列的第一个非空白字元前面开始插入资料。

开始(o,O)

o:在光标所在列下新增一列并进入输入模式。

O:在光标所在列上方新增一列并进入输入模式。

4.存盘/退出

[ESC] :wq //存盘退出

:w! //存盘继续

:q //退出 (源文件未被编辑过可用)

:q! //强制退出

5.删除与改修

[ESC] x //删除光标所在字符

dd //删除光标所在列。

r //修改光标所在字元,r后接着要修正的字符。

R //进入取替换状态。

s //删除光标所在字元,并进入输入模式。

S //删除光标所在的列,并进入输入模式。

6.恢复

[ESC] u //可以恢复被删除的文字。

U //可以恢复光标所在列的所有改变。

本地虚拟机centos6.5安装后,配置网络

[root@iZ288l7u84mZ ~]# setup

注:只添加dns

[root@iZ288l7u84mZ ~]# /etc/init.d/network  restart

[root@iZ288l7u84mZ ~]# vi /etc/sysconfig/network-scripts/ifcfg-eth0

NAT模式:

DEVICE=eth0
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=dhcp
DNS1=8.8.8.8
USERCTL=no
PEERDNS=yes
IPV6INIT=no

桥接模式:

DEVICE=eth0
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=none
DNS1=8.8.8.8
USERCTL=no
IPV6INIT=no
HWADDR=00:0c:29:56:4b:21
IPADDR=192.168.1.105
NETMASK=255.255.255.0
GATEWAY=192.168.1.1