参考链接https://www.linuxprobe.com/

vim文本编辑器
命令模式:控制光标移动,可对文本进行复制,黏贴,删除和查找工作
输入模式:正常的文本录入
末行模式:保存或退出文档,以及设置编辑环境 命令模式常用的一些命令
dd 删除(剪切)光标所在整行
5dd 删除(剪切)从光标处开始的5行
yy 复制光标所在整行
5yy 复制从光标处开始的5行
n 显示搜索命令定位到的下一个字符串
N 显示搜索命令定位到的上一个字符串
u 撤销上一步的操作
p 将之前删除(dd)或复制(yy)过的数据粘贴到光标后面
ggdG 删除全部 魔航模式
命令 作用
:w 保存
:q 退出
:q! 强制退出(放弃对文档的修改内容)
:wq! 强制保存退出
:set nu 显示行号
:set nonu 不显示行号
:命令 执行该命令
:整数 跳转到该行
:s/one/two 将当前光标所在行的第一个one替换成two
:s/one/two/g 将当前光标所在行的所有one替换成two
:%s/one/two/g 将全文中的所有one替换成two
?字符串 在文本中从下至上搜索该字符串
/字符串 在文本中从上至下搜索该字符串
ps: :%s/one/two/g 将全文的所有one替换成two 使用a、i、o三个键从命令模式切换到输入模式。其中,a键与i键分别是在光标后面一位和光标当前位置切换到输入模式,而o键则是在光 标的下面再创建一个空行 修改主机名
vim /etc/hostname
#linuxprobe.com PS:重启后才生效 hostname 配置网卡信息
在RHEL5,6网卡配置文件都是以eth开头,第一块eth0,第二块eth1
但是在RHEL7中 ,网卡配置文件以ifcfg开始 如ifcfg-eno16777736
现在有一个名为ifcfg-eno16777736网卡设备,将其配置为开机自启动,并设置IP
cd /etc/sysconfig/network-scripts目录中
vim编辑器修改网卡文件 ,写入后保存
设备类型:TYPE=Ethernet 地址分配模式:BOOTPROTO=static 网卡名称:NAME=eno16777736 是否启动:ONBOOT=yes IP地址:IPADDR=192.168.10.10 子网掩码:NETMASK=255.255.255.0 网关地址:GATEWAY=192.168.10.1 DNS地址:DNS1=192.168.10.1 ##
[root@linuxprobe ~]# cd /etc/sysconfig/network-scripts/
[root@linuxprobe network-scripts]# vim ifcfg-eno16777736
TYPE=Ethernet
BOOTPROTO=static
NAME=eno16777736
ONBOOT=yes
IPADDR=192.168.10.10
NETMASK=255.255.255.0
GATEWAY=192.168.10.1
DNS1=192.168.10.1 systemctl restart network 配置yum仓库
第1步:进入到/etc/yum.repos.d/目录中(因为该目录存放着Yum软件仓库的配置文件)。 第2步:使用Vim编辑器创建一个名为rhel7.repo的新配置文件(文件名称可随意,但后缀必须为.repo),逐项写入下面加粗的配置参数并 保存退出(不要写后面的中文注释)。 [rhel-media] :Yum软件仓库唯一标识符,避免与其他仓库冲突。 name=linuxprobe:Yum软件仓库的名称描述,易于识别仓库用处。 baseurl=file:///media/cdrom:提供的方式包括FTP(ftp://..)、HTTP(http://..)、本地(file:///..)。 enabled=:设置此源是否可用;1为可用,0为禁用。 gpgcheck=:设置此源是否校验文件;1为校验,0为不校验。 gpgkey=file:///media/cdrom/RPM-GPG-KEY-redhat-release:若上面参数开启校验,那么请指定公钥文件地址。 第3步:按配置参数的路径挂载光盘,并把光盘挂载信息写入到/etc/fstab文件中。 第4步:使用“yum install httpd -y”命令检查Yum软件仓库是否已经可用。 进入/etc/yum.repos.d目录中后创建Yum配置文件: [root@linuxprobe ~]# cd /etc/yum.repos.d/
[root@linuxprobe yum.repos.d]# vim rhel7.repo
[rhel7]
name=rhel7
baseurl=file:///media/cdrom
enabled=
gpgcheck= 创建挂载点后进行挂载操作,并设置成开机自动挂载(详见第6章)。尝试使用Yum软件仓库来安装Web服务,出现Complete!则代表配置正 确: [root@linuxprobe yum.repos.d]# mkdir -p /media/cdrom
[root@linuxprobe yum.repos.d]# mount /dev/cdrom /media/cdrom
mount: /dev/sr0 is write-protected, mounting read-only
[root@linuxprobe yum.repos.d]# vim /etc/fstab
/dev/cdrom /media/cdrom iso9660 defaults
[root@linuxprobe ~]# yum install httpd
Loaded plugins: langpacks, product-id, subscription-manager
………………省略部分输出信息………………
Dependencies Resolved
================================================================================
Package Arch Version Repository Size
================================================================================
Installing:
httpd x86_64 2.4.-.el7 rhel 1.2 M
Installing for dependencies:
apr x86_64 1.4.-.el7 rhel k
apr-util x86_64 1.5.-.el7 rhel k
httpd-tools x86_64 2.4.-.el7 rhel k
mailcap noarch 2.1.-.el7 rhel k
Transaction Summary
================================================================================
Install Package (+ Dependent packages)
Total download size: 1.5 M
Installed size: 4.3 M
Is this ok [y/d/N]: y
Downloading packages:
--------------------------------------------------------------------------------
………………省略部分输出信息………………
Complete! #参数
[root@linuxprobe ~]# ./example.sh
bash: ./Example.sh: Permission denied
[root@linuxprobe ~]# chmod u+x example.sh $# 表示有多个参数
$* 表示参数分别是
$ - $ - ${} 表示传的参数 测试语句格式: [ 条件表达式 ]
文件测试即使用指定条件来判断文件是否存在或权限是否满足等情况的运算符,
-d 测试文件是否为目录类型
-f 判断是否为一般文件
-e 测试文件是否存在
-r 测试当前用户是否有权限读取
-w 测试当前是否有写入权限
-x 测试当前用户执行权限 [ -d /root/tmp ]
echo $? #如果为真 假为1 与 &&
或 ||
非 !
等于 == [ $USER != root ]
echo $? 整数比较运算符仅对数字进行操作
-eq 是否等于
-ne 是否不等于
-gt 大于
-lt 小于
-le 小于或等于
-ge 大于或等于 [root@linuxprobe ~]# free -m
total used free shared buffers cached
Mem:
-/+ buffers/cache:
Swap:
[root@linuxprobe ~]# free -m | grep Mem:
Mem:
[root@linuxprobe ~]# free -m | grep Mem: | awk '{print $4}' [root@linuxprobe ~]# FreeMem=`free -m | grep Mem: | awk '{print $4}'`
[root@linuxprobe ~]# echo $FreeMem
[ $FreeMem -lt ] && echo "Insufficient Memory" 字符串比较用于判断测试字符串是否为空值
= 比较字符串内容是否相同
!= 字符串内容不等于
-z 判断字符串内容是否为空 [ -z $String ] 流程控制语句 if for while case 下面使用单分支的if条件语句来判断/media/cdrom文件是否存在,若存在就结束条件判断和整个Shell脚本,反之则去创建这个目录: [root@linuxprobe ~]# vim mkcdrom.sh
#!/bin/bash
DIR="/media/cdrom"
if [ ! -e $DIR ]
then
mkdir -p $DIR
fi if
then
else
fi if 条件测试
then 命令1
elif 条件测试
then 命令2
fi for循环条件语句
for 变量名 in 取值列表
do
命令序列
done for 用户名 in 列表文件
do
创建用户并设置密码
done
[root@linuxprobe ~]# vim Example.sh
#!/bin/bash
read -p "Enter The Users Password : " PASSWD
for UNAME in `cat users.txt`
do
id $UNAME &> /dev/null
if [ $? -eq ]
then
echo "Already exists"
else
useradd $UNAME &> /dev/null
echo "$PASSWD" | passwd --stdin $UNAME &> /dev/null
if [ $? -eq ]
then
echo "$UNAME , Create success"
else
echo "$UNAME , Create failure"
fi
fi
done 主机在线测试
[root@linuxprobe ~]# vim CheckHosts.sh
#!/bin/bash
HLIST=$(cat ~/ipadds.txt)
for IP in $HLIST
do
ping -c -i 0.2 -W $IP &> /dev/null
if [ $? -eq ] ; then
echo "Host $IP is On-line."
else
echo "Host $IP is Off-line."
fi
done
[root@linuxprobe ~]# ./CheckHosts.sh
Host 192.168.10.10 is On-line.
Host 192.168.10.11 is Off-line.
Host 192.168.10.12 is Off-line. while条件循环语句
while 条件测试操作
do
命令序列
done case条件测试语句
case 变量值 in
模式1)
命令1
;;
模式2)
命令2
;;
*)
默认命令序列
esac read -p "请输入一个字符,并按Enter键确认:" KEY
case "$KEY" in
[a-z]|[A-Z])
echo "您输入的是 字母。"
;;
[-])
echo "您输入的是 数字。"
;;
*)
echo "您输入的是 空格、功能键或其他控制字符。"
esac 计划任务服务程序
定时任务只执行一次 用at
#at -l 查看定时任务列表
#atrm 任务号 删除
[root@linuxprobe ~]# at :
at > systemctl restart httpd
at > 此处请同时按下Ctrl+d来结束编写计划任务
job at Mon Apr :: crontab
分 时 日 月 星期命令
#crontab -e 编辑
#crontab -l 罗列
字段 说明
分钟 取值为0~59的整数
小时 取值为0~23的任意整数
日期 取值为1~31的任意整数
月份 取值为1~12的任意整数
星期 取值为0~7的任意整数,其中0与7均为星期日
命令 要执行的命令或程序脚本 #假设在每周一、三、五的凌晨3点25分,都需要使用tar命令把某个网站的数据目录进行打包处理
* * ,, /usr/bin/tar -czvf backup.tar.gz /home/wwwroot 计划任务中的“分”字段必须有数值,绝对不能为空或是*号,而“日”和“星期”字段不能同时使用,否则就会发生冲突 .Vim编辑模式三种分别是命令模式、末行模式、输入模式
. $0表示脚本文件名
.if then elif then else fi
.for 变量名 in 取值列表 do .. done
.根据用户输入的不同最好执行case条件语句
.唱起计划任务使用的服务是 crontab -e 分 时 日 月 星期

vim文本编辑器命令模式:控制光标移动,可对文本进行复制,黏贴,删除和查找工作输入模式:正常的文本录入末行模式:保存或退出文档,以及设置编辑环境
命令模式常用的一些命令dd删除(剪切)光标所在整行5dd删除(剪切)从光标处开始的5行yy复制光标所在整行5yy复制从光标处开始的5行n显示搜索命令定位到的下一个字符串N显示搜索命令定位到的上一个字符串u撤销上一步的操作p将之前删除(dd)或复制(yy)过的数据粘贴到光标后面ggdG删除全部
魔航模式命令作用:w保存:q退出:q!强制退出(放弃对文档的修改内容):wq!强制保存退出:set nu显示行号:set nonu不显示行号:命令执行该命令:整数跳转到该行:s/one/two将当前光标所在行的第一个one替换成two:s/one/two/g将当前光标所在行的所有one替换成two:%s/one/two/g将全文中的所有one替换成two?字符串在文本中从下至上搜索该字符串    /字符串在文本中从上至下搜索该字符串ps: :%s/one/two/g 将全文的所有one替换成two

使用a、i、o三个键从命令模式切换到输入模式。其中,a键与i键分别是在光标后面一位和光标当前位置切换到输入模式,而o键则是在光
标的下面再创建一个空行

修改主机名vim /etc/hostname#linuxprobe.com  PS:重启后才生效 hostname
配置网卡信息在RHEL5,6网卡配置文件都是以eth开头,第一块eth0,第二块eth1但是在RHEL7中 ,网卡配置文件以ifcfg开始 如ifcfg-eno16777736现在有一个名为ifcfg-eno16777736网卡设备,将其配置为开机自启动,并设置IPcd /etc/sysconfig/network-scripts目录中vim编辑器修改网卡文件 ,写入后保存设备类型:TYPE=Ethernet
地址分配模式:BOOTPROTO=static
网卡名称:NAME=eno16777736
是否启动:ONBOOT=yes
IP地址:IPADDR=192.168.10.10
子网掩码:NETMASK=255.255.255.0
网关地址:GATEWAY=192.168.10.1
DNS地址:DNS1=192.168.10.1
##[root@linuxprobe ~]# cd /etc/sysconfig/network-scripts/[root@linuxprobe network-scripts]# vim ifcfg-eno16777736TYPE=EthernetBOOTPROTO=staticNAME=eno16777736ONBOOT=yesIPADDR=192.168.10.10NETMASK=255.255.255.0GATEWAY=192.168.10.1DNS1=192.168.10.1
systemctl restart network
配置yum仓库第1步:进入到/etc/yum.repos.d/目录中(因为该目录存放着Yum软件仓库的配置文件)。
第2步:使用Vim编辑器创建一个名为rhel7.repo的新配置文件(文件名称可随意,但后缀必须为.repo),逐项写入下面加粗的配置参数并
保存退出(不要写后面的中文注释)。
[rhel-media] :Yum软件仓库唯一标识符,避免与其他仓库冲突。
name=linuxprobe:Yum软件仓库的名称描述,易于识别仓库用处。
baseurl=file:///media/cdrom:提供的方式包括FTP(ftp://..)、HTTP(http://..)、本地(file:///..)。
enabled=1:设置此源是否可用;1为可用,0为禁用。
gpgcheck=1:设置此源是否校验文件;1为校验,0为不校验。
gpgkey=file:///media/cdrom/RPM-GPG-KEY-redhat-release:若上面参数开启校验,那么请指定公钥文件地址。
第3步:按配置参数的路径挂载光盘,并把光盘挂载信息写入到/etc/fstab文件中。
第4步:使用“yum install httpd -y”命令检查Yum软件仓库是否已经可用。
进入/etc/yum.repos.d目录中后创建Yum配置文件:
[root@linuxprobe ~]# cd /etc/yum.repos.d/[root@linuxprobe yum.repos.d]# vim rhel7.repo[rhel7]name=rhel7baseurl=file:///media/cdromenabled=1gpgcheck=0
创建挂载点后进行挂载操作,并设置成开机自动挂载(详见第6章)。尝试使用Yum软件仓库来安装Web服务,出现Complete!则代表配置正
确:
[root@linuxprobe yum.repos.d]# mkdir -p /media/cdrom[root@linuxprobe yum.repos.d]# mount /dev/cdrom /media/cdrommount: /dev/sr0 is write-protected, mounting read-only[root@linuxprobe yum.repos.d]# vim /etc/fstab/dev/cdrom /media/cdrom iso9660 defaults 0 0[root@linuxprobe ~]# yum install httpdLoaded plugins: langpacks, product-id, subscription-manager………………省略部分输出信息………………Dependencies Resolved================================================================================ Package Arch Version Repository Size================================================================================Installing: httpd x86_64 2.4.6-17.el7 rhel 1.2 MInstalling for dependencies: apr x86_64 1.4.8-3.el7 rhel 103 k apr-util x86_64 1.5.2-6.el7 rhel 92 k httpd-tools x86_64 2.4.6-17.el7 rhel 77 k mailcap noarch 2.1.41-2.el7 rhel 31 kTransaction Summary================================================================================Install 1 Package (+4 Dependent packages)Total download size: 1.5 MInstalled size: 4.3 MIs this ok [y/d/N]: yDownloading packages:--------------------------------------------------------------------------------………………省略部分输出信息………………Complete!
#参数[root@linuxprobe ~]# ./example.shbash: ./Example.sh: Permission denied[root@linuxprobe ~]# chmod u+x example.sh
$# 表示有多个参数$* 表示参数分别是$1 - $9 - ${10} 表示传的参数
测试语句格式:  [ 条件表达式 ]文件测试即使用指定条件来判断文件是否存在或权限是否满足等情况的运算符,-d测试文件是否为目录类型-f判断是否为一般文件-e测试文件是否存在-r测试当前用户是否有权限读取-w测试当前是否有写入权限-x测试当前用户执行权限
[ -d /root/tmp ] echo $? #如果为真 0    假为1
与&&或||非!等于==
[ $USER != root ] echo $?

整数比较运算符仅对数字进行操作-eq是否等于-ne是否不等于-gt大于-lt小于-le小于或等于-ge大于或等于
[root@linuxprobe ~]# free -m            total     used     free     shared     buffers     cachedMem:        1826      1244     582      9          1           413-/+ buffers/cache:    830 996Swap:       2047      0        2047[root@linuxprobe ~]# free -m | grep Mem:Mem:        1826      1244     582      9 [root@linuxprobe ~]# free -m | grep Mem: | awk '{print $4}'582[root@linuxprobe ~]# FreeMem=`free -m | grep Mem: | awk '{print $4}'`[root@linuxprobe ~]# echo $FreeMem [ $FreeMem -lt 1024 ] && echo "Insufficient Memory"
字符串比较用于判断测试字符串是否为空值=比较字符串内容是否相同!=字符串内容不等于-z判断字符串内容是否为空
[ -z $String ]
流程控制语句 if for while case
下面使用单分支的if条件语句来判断/media/cdrom文件是否存在,若存在就结束条件判断和整个Shell脚本,反之则去创建这个目录:
[root@linuxprobe ~]# vim mkcdrom.sh#!/bin/bashDIR="/media/cdrom"if [ ! -e $DIR ]thenmkdir -p $DIRfi
ifthenelsefi

if 条件测试then 命令1elif 条件测试then 命令2fi

for循环条件语句for 变量名 in 取值列表do命令序列done
for 用户名 in 列表文件do创建用户并设置密码done[root@linuxprobe ~]# vim Example.sh#!/bin/bashread -p "Enter The Users Password : " PASSWDfor UNAME in `cat users.txt`doid $UNAME &> /dev/nullif [ $? -eq 0 ]thenecho "Already exists"elseuseradd $UNAME &> /dev/nullecho "$PASSWD" | passwd --stdin $UNAME &> /dev/nullif [ $? -eq 0 ]thenecho "$UNAME , Create success"elseecho "$UNAME , Create failure"fifidone
主机在线测试[root@linuxprobe ~]# vim CheckHosts.sh#!/bin/bashHLIST=$(cat ~/ipadds.txt)for IP in $HLISTdoping -c 3 -i 0.2 -W 3 $IP &> /dev/nullif [ $? -eq 0 ] ; thenecho "Host $IP is On-line."elseecho "Host $IP is Off-line."fidone[root@linuxprobe ~]# ./CheckHosts.shHost 192.168.10.10 is On-line.Host 192.168.10.11 is Off-line.Host 192.168.10.12 is Off-line.

while条件循环语句while条件测试操作do命令序列done
case条件测试语句case 变量值 in模式1)命令1;;模式2)命令2;;*)默认命令序列esac
read -p "请输入一个字符,并按Enter键确认:" KEYcase "$KEY" in[a-z]|[A-Z])echo "您输入的是 字母。";;[0-9])echo "您输入的是 数字。";;*)echo "您输入的是 空格、功能键或其他控制字符。"esac
计划任务服务程序定时任务只执行一次 用at#at -l 查看定时任务列表#atrm 任务号 删除[root@linuxprobe ~]# at 23:30at > systemctl restart httpdat > 此处请同时按下Ctrl+d来结束编写计划任务job 3 at Mon Apr 27 23:30:00 2015

crontab分时日月星期命令#crontab -e 编辑#crontab -l 罗列字段说明分钟取值为0~59的整数小时取值为0~23的任意整数日期取值为1~31的任意整数月份取值为1~12的任意整数星期取值为0~7的任意整数,其中0与7均为星期日命令要执行的命令或程序脚本
#假设在每周一、三、五的凌晨3点25分,都需要使用tar命令把某个网站的数据目录进行打包处理25 3 * * 1,3,5 /usr/bin/tar -czvf backup.tar.gz /home/wwwroot
计划任务中的“分”字段必须有数值,绝对不能为空或是*号,而“日”和“星期”字段不能同时使用,否则就会发生冲突
1.Vim编辑模式三种分别是命令模式、末行模式、输入模式2. $0表示脚本文件名3.if then elif then else fi4.for 变量名 in 取值列表 do .. done5.根据用户输入的不同最好执行case条件语句6.唱起计划任务使用的服务是 crontab -e 分 时 日 月 星期

Linux就该这么学 20181003(第四章Vim/shell/测试条件)的更多相关文章

  1. Linux就该这么学 20181003(第三章管道符)

    参考链接https://www.linuxprobe.com/ 输入输出重定向 标准输入重定向STDIN 文件描述符0 默认键盘输入 标准输出重定向STOUT 文件描述符1 默认输出到屏幕 错误输出重 ...

  2. 《linux就该这么学》第四节课笔记,三章和四章开始!

    第三章 (根据课本和在线培训视频排版总结,借鉴请改动)         右键可打开终端练习             3.1:输入输出重定向 输入重定向:符号 "<" ,是一种 ...

  3. 《Linux内核设计与实现》第四章学习笔记

    <Linux内核设计与实现>第四章学习笔记           ——进程调度 姓名:王玮怡  学号:20135116 一.多任务 1.多任务操作系统的含义 多任务操作系统就是能同时并发地交 ...

  4. 《Linux内核分析》读书笔记(四章)

    <Linux内核分析>读书笔记(四章) 标签(空格分隔): 20135328陈都 第四章 进程调度 调度程序负责决定将哪个进程投入运行,何时运行以及运行多长时间,进程调度程序可看做在可运行 ...

  5. 《Linux内核设计与实现》第四章学习笔记——进程调度

                                                                        <Linux内核设计与实现>第四章学习笔记——进程调 ...

  6. 第四章 vim 可视模式

    第四章  vim 可视模式 vim的可视模式允许我们选中一块文本区域并进行操作 3种不同的可视模式  分为 操作字符文本      行文本 块文本 .命令用来重复执行可视模式中的命令   只有在操作面 ...

  7. 简学Python第四章__装饰器、迭代器、列表生成式

    Python第四章__装饰器.迭代器 欢迎加入Linux_Python学习群  群号:478616847 目录: 列表生成式 生成器 迭代器 单层装饰器(无参) 多层装饰器(有参) 冒泡算法 代码开发 ...

  8. Linux内核分析 读书笔记 (第四章)

    第四章 进程调度 调度程序负责决定将哪个进程投入运行,何时运行以及运行多长时间.进程调度程序可看做在可运行态进程之间分配有限的处理器时间资源的内核子系统.只有通过调度程序的合理调度,系统资源才能最大限 ...

  9. 《Linux内核设计与分析》第四章读书笔记

    <内核设计与实现>第四章读书笔记 第四章:进程调度 进程(操作系统)程序的运行态表现形式. 进程调度程序,它是确保进程能有效工作的一个内核子系统. 调度程序负责决定将哪个进程投入运行,何时 ...

随机推荐

  1. hdoj--5532--Almost Sorted Array(正反LIS)

    Almost Sorted Array Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Ot ...

  2. ubuntu16.04+caffe训练mnist数据集

    1.   caffe-master文件夹权限修改 下载的caffe源码编译的caffe-master文件夹貌似没有写入权限,输入以下命令修改: sudo chmod -R 777 ~/caffe-ma ...

  3. Ubuntu开机报错:could not update ICEauthority file /home/user/.ICEauthority(转载)

    解决方法如下: 一. 代码:sudo chown $USER:$USER /home/$USER/.ICEauthority        sudo chmod 644 /home/$USER/.IC ...

  4. QT-helloworld-QtCreater编写

    前言:纯代码编写helloworld,解析代码含义. 一.新建空项目 新建->其他项目->Empty qmake Project 二.修改.pro文件 打开helloworld.pro文件 ...

  5. SQL Server 查询所有包含某文本的存储过程、视图、函数

    •  方法一:查询所有包含某文本的存储过程.视图.函数 SELECT * from sysobjects o, syscomments s where o.id = s.id AND text LIK ...

  6. MySQL 我自己常用的语句汇总

    1,更新,根据一个表更新另一个表,比如批量同步外键 方法一: update 更新表 set 字段 = (select 参考数据 from 参考表 where  参考表.id = 更新表.id); up ...

  7. redis的持久化功能

    基于快照持久化 修改配置文件,开始基于快照的选项 [root@localhostbin]#vim /etc/redis/redis.conf stop-writes-on-bgsave-error y ...

  8. canvas实现刮刮卡效果

    canvas实现刮刮卡效果 实现步骤: 设置页面背景图,即刮刮卡底部图片 绘制canvas 刮刮卡顶部图片drawImage 绑定事件 addEventListener  touchstart.tou ...

  9. canvas绘制三等分饼型图

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  10. nginx学习地址

    http://www.cnblogs.com/magicsoar/p/5817734.html