<?xml version="1.0" encoding="UTF-8"?><rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0">
    <channel>
        <title>www.unuw.com</title>
        <description>记录运维相关笔记的一个简单易用的Markdown博客</description>
        <link>/</link>
        <atom:link href="//feed.xml" rel="self" type="application/rss+xml" />
        <pubDate>2026-06-09 18:06:48</pubDate>
        <lastBuildDate>2026-06-09 18:06:48</lastBuildDate>
        <generator>Gitblog v1.0</generator>
                <item>
            <title>手动删除数据库</title>
            <description>
            &lt;h1&gt;手动删除数据库&lt;/h1&gt;
&lt;h2&gt;删除admin目录下相关文件&lt;/h2&gt;
&lt;p&gt;删除adump，dpdump，pfile，scripts子目录下的所有文件&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;cd  /u01/app/oracle/admin/orcl/adump;rm -rf *
cd  /u01/app/oracle/admin/orcl/dpdump;rm -rf *
cd  /u01/app/oracle/admin/orcl/pfile;rm -rf *  (如init.ora.47201325517)
cd  /u01/app/oracle/admin/orcl/scripts;rm -rf *&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;删除/u01/diag/rdbms目录下相关文件&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;[root@bj orcl]# pwd
/u01/app/oracle/diag/rdbms/orcl
[root@bj orcl]# ls
i_1.mif  orcl
[root@bj orcl]# rm -rf *&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;删除/u01/oradata/目录下相关文件&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;/u01/oradata/orcl:
control01.ctl         control02.ctl           example01.dbf
redo01.log            redo02.log              redo03.log
sysaux01.dbf          system01.dbf            temp01.dbf
undotbs01.dbf         users01.dbf&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;删除dbs目录下相关文件&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;rm -f  /u01/app/oracle/product/11.2.0/db_1/dbs/spfileorcl.ora
rm -f /u01/app/oracle/product/11.2.0/db_1/dbs/lkORCL
rm -f /u01/app/oracle/product/11.2.0/db_1/dbs/hc_dg.dat
rm -f /u01/app/oracle/product/11.2.0/db_1/dbs/orapworcl
rm -f /u01/app/oracle/product/11.2.0/db_1/dbs/initorcl.ora&lt;/code&gt;&lt;/pre&gt;            </description>
            <pubDate>2019-04-11 08:20:49</pubDate>
            <link>//blog/Notes/03-%CA%FD%BE%DD%BF%E2/Oracle/%CA%D6%B6%AF%C9%BE%B3%FD%CA%FD%BE%DD%BF%E2.html</link>
            <guid isPermaLink="true">//blog/Notes/03-%CA%FD%BE%DD%BF%E2/Oracle/%CA%D6%B6%AF%C9%BE%B3%FD%CA%FD%BE%DD%BF%E2.html</guid>
                    </item>
                <item>
            <title>Tomcat &amp;&amp; JAVA</title>
            <description>
            &lt;h1&gt;Tomcat &amp;amp;&amp;amp; JAVA&lt;/h1&gt;
&lt;p&gt;&lt;strong&gt;所有web服务器上线前需要修改limit&lt;/strong&gt;&lt;/p&gt;
&lt;h2&gt;基本概念&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;jdk：java开发工具包（包含jre）&lt;/li&gt;
&lt;li&gt;jre：java运行环境&lt;/li&gt;
&lt;li&gt;SDK: 软件开发工具包&lt;/li&gt;
&lt;li&gt;j2ee:企业应用类库&lt;/li&gt;
&lt;li&gt;j2se:标准应用类库&lt;/li&gt;
&lt;li&gt;j2me:手机微型应用类库&lt;/li&gt;
&lt;li&gt;jdk: JDK是 Java 语言的软件开发工具包
&lt;h2&gt;下载&lt;/h2&gt;
&lt;p&gt;tomcat：\
&lt;a href=&quot;http://tomcat.apache.org/download-80.cgi#8.0.44&quot;&gt;http://tomcat.apache.org/download-80.cgi#8.0.44&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;jdk：\
&lt;a href=&quot;http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html&quot;&gt;http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;创建用户，统一uid，方便以后运维&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;[root@ops-82 ~]# useradd -u 601 tomcat
[root@ops-82 ~]# passwd tomcat
Changing password for user tomcat.
New password:
BAD PASSWORD: The password is shorter than 8 characters
Retype new password:  
passwd: all authentication tokens updated successfully.
[root@ops-82 ~]# id tomcat
uid=601(tomcat) gid=1000(tomcat) groups=1000(tomcat)
[root@ops-82 ~]#

不确定uid、gid不相等原有， 使用下述方法创建
[root@ops-81 ~]# groupadd -g 601 tomcat
[root@ops-81 ~]# useradd -u 601 -g 601 tomcat&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;安装&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;[root@ops-82 backup]# tar zxf jdk-8u131-linux-x64.tar.gz
root@ops-82 backup]# mv jdk
jdk1.8.0_131/               jdk-8u131-linux-x64.tar.gz
[root@ops-82 backup]# mv jdk
jdk1.8.0_131/               jdk-8u131-linux-x64.tar.gz  
[root@ops-82 backup]# mv jdk1.8.0_131/ /usr/local/
[root@ops-82 backup]# ln -s /usr/local/jdk1.8.0_131/ /usr/local/jdk
[root@ops-82 backup]#
[root@ops-82 backup]# tar zxf apache-tomcat-8.0.44.tar.gz
[root@ops-82 backup]# mv apache-tomcat-8.0.44 /usr/local
[root@ops-82 backup]# ln -s /usr/local/apache-tomcat-8.0.44/ /usr/local/tomcat
[root@ops-82 backup]#&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;设置环境变量&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;[root@ops-82 local]# vim /etc/profile
export JAVA_HOME=/usr/local/jdk
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
export CLASSPATH=.$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$JAVA_HOME/lib/tools.jar
export TOMCAT_HOME=/usr/local/tomcat
[root@ops-82 local]# source /etc/profile
[root@ops-82 local]# java -version
java version &quot;1.8.0_131&quot;
Java(TM) SE Runtime Environment (build 1.8.0_131-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.131-b11, mixed mode)
[root@ops-82 local]#&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;设置权限并切换用户&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;[root@ops-82 local]# chown -R tomcat.tomcat /usr/local/jdk
[root@ops-82 local]# chown -R tomcat.tomcat /usr/local/tomcat/
[root@ops-82 local]# su - tomcat
Last login: Wed Jun 28 11:09:05 CST 2017 on pts/0
[tomcat@ops-82 ~]$&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;启动&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;[tomcat@ops-82 ~]$ cd /usr/local/tomcat/bin/
[tomcat@ops-82 bin]$ ./startup.sh
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr/local/jdk
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Tomcat started.
[tomcat@ops-82 bin]$&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;默认8080端口，检查端口\
&lt;code&gt;[tomcat@ops-82 bin]$ netstat -nltp&lt;/code&gt;\
检查日志&lt;code&gt;/usr/local/tomcat/logs&lt;/code&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;[tomcat@ops-82 logs]$ ls
catalina.2017-06-28.log  host-manager.2017-06-28.log  localhost_access_log.2017-06-28.txt
catalina.out             localhost.2017-06-28.log     manager.2017-06-28.log
[tomcat@ops-82 logs]$&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;配置文件&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;[tomcat@ops-82 conf]$ pwd
/usr/local/tomcat/conf
[tomcat@ops-82 conf]$ ls
Catalina         catalina.properties  logging.properties  tomcat-users.xml  web.xml
catalina.policy  context.xml          server.xml          tomcat-users.xsd
[tomcat@ops-82 conf]$&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;默认根路径，一般情况下不修改，默认放在root下是不需要加路径的&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;[tomcat@ops-82 webapps]$ pwd
/usr/local/tomcat/webapps
[tomcat@ops-82 webapps]$ ls
docs  examples  host-manager  manager  ROOT&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;配置用户名密码，增加内容&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;[tomcat@ops-82 conf]$ vim tomcat-users.xml
  &amp;lt;role rolename=&quot;manager-gui&quot;/&amp;gt;
  &amp;lt;role rolename=&quot;admin-gui&quot;/&amp;gt;
  &amp;lt;user username=&quot;tomcat&quot; password=&quot;wanghui&quot; roles=&quot;manager-gui,admin-gui&quot;/&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;重启f服务&lt;/h2&gt;
&lt;h3&gt;临时目录每次重启要清空&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;/usr/local/tomcat/temp&lt;/code&gt;
&lt;code&gt;/usr/local/tomcat/work&lt;/code&gt;&lt;/p&gt;
&lt;h3&gt;关闭&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;[tomcat@ops-82 work]$ cd /usr/local/tomcat/bin/
[tomcat@ops-82 bin]$ ./shutdown.sh
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr/local/jdk
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
[tomcat@ops-82 bin]$&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;重启、启动、关闭脚本&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;[root@ops-82 bin]# cat tomcat.sh
#!/bin/bash
TOMCAT_PATH=/usr/local/tomcat

usage(){
echo &quot;Usage: $0 [start|stop|status|restart]&quot;
}

status_tomcat(){
ps aux|grep java|grep tomcat |grep -v 'grep'
}

start_tomcat(){
/usr/local/tomcat/bin/startup.sh
}

stop_tomcat(){
TPID=$(ps aux | grep java |grep tomcat | grep -v 'grep' | grep -v 'su' | awk '{print $2}')
kill -9 $TPID
sleep 5;

TSTAT=$(ps aux | grep java |grep tomcat | grep -v 'grep' | grep -v 'su' | awk '{print $2}')
    if [ -Z $TSTAT];then
        echo &quot;tomcat stopped&quot;
    else
        kill -9 $TSTAT
    fi

cd $TOMCAT_PATH

rm temp/* -rf
rm work/* -rf
}

main(){
case $1 in
    start)
        start_tomcat;;
    stop)
        stop_tomcat;;
    status)
        status_tomcat;;
    restart)
        stop_tomcat &amp;amp;&amp;amp; start_tomcat;;
    *)
        usage;;
esac
}

main $1
[root@ops-82 bin]#chmod +x tomcat.sh&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;安全设置规范&lt;/h2&gt;
&lt;p&gt;参见《&lt;a href=&quot;./tomcat-安全设置规范.md&quot;&gt;tomcat-安全设置规范&lt;/a&gt;》&lt;/p&gt;            </description>
            <pubDate>2019-04-11 08:20:49</pubDate>
            <link>//blog/Notes/02-%CD%F8%D5%BE%B7%FE%CE%F1/tomcat/tomcat.html</link>
            <guid isPermaLink="true">//blog/Notes/02-%CD%F8%D5%BE%B7%FE%CE%F1/tomcat/tomcat.html</guid>
                    </item>
                <item>
            <title>Nginx</title>
            <description>
            &lt;h1&gt;Nginx&lt;/h1&gt;
&lt;h2&gt;Nginx常用命令&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;nginx -t        #检查配置文件
nginx -s reload #重新载入配置文件
curl -I www.baidu.com&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;搭建虚拟主机步骤&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;增加一个完整的server标签段到结尾处&lt;/li&gt;
&lt;li&gt;更改server_name及对应的root根目录&lt;/li&gt;
&lt;li&gt;创建server_name域对应的网页根目录，并建立测试文件&lt;/li&gt;
&lt;li&gt;检查nginx配置语法，平滑重启&lt;/li&gt;
&lt;li&gt;做host解析或DNS解析&lt;/li&gt;
&lt;li&gt;浏览器输入网址、curl、wget进行检查&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;主配置文件nginx.conf&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;Nginx配置段
//全局区
Worker_processes 1 ;//有1个工作的子进程，可以进行修改，意义不大，需要争抢CPU资源，一般设置为cpu核心数（cpu*单颗核心）

Event{
//一般是配置nginx链接特性
//如1个work能同时允许多少连接
Worker_connections 1024;//是指一个子进程最大允许连1024个链接
}

http{//配置http服务器的主要段
    server {//这是虚拟主机段
        location{//定位，把特殊的路径或文件再次定位，如image目录单独处理，
            //如php单独处理
    }
  }
}&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Nginx虚拟主机配置&lt;/h2&gt;
&lt;h3&gt;基于域名的虚拟机&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;server{
  listen  80;
  server_name www.bacd.com;
  location /{
    root html/www;
    index index.html index.htm;
  }
}

server{
  listen  80;
  server_name bbs.bacd.com;
  location /{
    root html/bbs;
    index index.html index.htm;
  }
}

server{
  listen  80;
  server_name chat.bacd.com;
  location /{
    root html/chat;
    index index.html index.htm;
  }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;基于端口的虚拟机&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;server{
  listen  80;
  server_name www.bacd.com;
  location /{
    root html/www;
    index index.html index.htm;
  }
}

server{
  listen  81;
  server_name bbs.bacd.com;
  location /{
    root html/bbs;
    index index.html index.htm;
  }
}&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;基于IP的虚拟机&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;server{
  listen  10.0.0.10:80;
  server_name www.bacd.com;
  location /{
    root html/www;
    index index.html index.htm;
  }
}

server{
  listen  10.0.0.11:80;
  server_name bbs.bacd.com;
  location /{
    root html/bbs;
    index index.html index.htm;
  }
}&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;重启nginx后的检测&lt;/h3&gt;
&lt;h3&gt;Nginx 监控&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;location /nginx_status{
    stub_status on;
    access_log off;
    allow 10.0.0.0/24;
    deny allow;
}&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;server:启动nginx到现在共处理的连接数
accepts:启动nginx到现在创建的握手数
请求丢失数=握手数-连接数
handled requests:表述共处理请求数
reading：读取到客户端的header信息数
writing:返回给客户端的header信息数
waiting：nginx已经处理完正在等候下一次请求指令的驻留连接。开启keepalive的情况下，这个值等于active-（reading+writing）&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;为了安全，这个状态要防止被外部用户看到&lt;/strong&gt;&lt;/p&gt;
&lt;h2&gt;集成php环境&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;../php/php-win.md&quot;&gt;配置php环境&lt;/a&gt;，修改nginx.conf,支持php&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000

location ~ \.php$ {
    root           html;
    fastcgi_pass   127.0.0.1:9000;
    fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME  D:/app/nginx-1.12.1/html$fastcgi_script_name;
    include        fastcgi_params;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;nginx.conf&lt;/code&gt;中&lt;code&gt;fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name&lt;/code&gt;修改为&lt;code&gt;fastcgi_param  SCRIPT_FILENAME  D:\app\nginx-1.12.1\html$fastcgi_script_name;&lt;/code&gt;不能访问，提示‘No input file specified’，nginx access.log中出现404，将&lt;code&gt;\&lt;/code&gt;替换为&lt;code&gt;/&lt;/code&gt;正常，&lt;code&gt;fastcgi_param  SCRIPT_FILENAME  D:/app/nginx-1.12.1/html$fastcgi_script_name&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;编辑index.php文件&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;?php phpinfo(); ?&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;执行命令&lt;code&gt;nginx -s reload&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;访问&lt;a href=&quot;http://localhost/phpinfo.php查看是否可以打开phpinfo&quot;&gt;http://localhost/phpinfo.php查看是否可以打开phpinfo&lt;/a&gt;页面&lt;/p&gt;
&lt;h2&gt;虚拟主机的别名配置&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;server_name&lt;/code&gt;可以添加多个主机名，别名之间用空格分隔&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;server{
  listen  10.0.0.11:80;
  server_name bbs.bacd.com b.abcd.com abcd.com;
  location /{
    root html/bbs;
    index index.html index.htm;
  }
}&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote&gt;
&lt;p&gt;集群中多个服务器提供相同的服务，通过前端负载进行分发，为了对每个主机进行检测，可以使用别名分别进行监测&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;   ...
   server_name www.bacd.com www1.abcd.com;
   ...
   server_name www.bacd.com www2.abcd.com;
   ...&lt;/code&gt;&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;h2&gt;Nginx 日志&lt;/h2&gt;
&lt;h3&gt;Nginx error_log&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;error_log logs/error.log [debug|info|crit|alert|emerg]&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;可以设置的标签段为&lt;/p&gt;
&lt;p&gt;&lt;code&gt;#content:main,http,server,location&lt;/code&gt;&lt;/p&gt;
&lt;h3&gt;Nginx access_log&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Module:&lt;/strong&gt; ngx_http_log_module&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://nginx.org/en/docs/http/ngx_http_log_module.html&quot;&gt;http://nginx.org/en/docs/http/ngx_http_log_module.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;access_log logs/access.log main&lt;/code&gt;&lt;/p&gt;
&lt;h3&gt;Nginx 日志切割&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;创建脚本&lt;code&gt;runlog.sh&lt;/code&gt;
&lt;pre&gt;&lt;code&gt;
#!/bin/bash
LOGPATH=/usr/local/nginx/logs/abcd.com.access.log
BASEPATH=/data&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;bak=$BASEPATH/$(date -d yesterday +%Y%m%d%H%M).abcd.com.access.log&lt;/p&gt;
&lt;p&gt;mv $LOGPATH $bak
touch $LOGPATH
kill -USR1 &lt;code&gt;cat /usr/local/nginx/logs/nginx.pid&lt;/code&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;或者使用`nginx -s reload` 替换kill -USR1 \`cat /usr/local/nginx/logs/nginx.pid\`

2. 添加计划任务（每分钟执行一次）

    `crontab -e`添加计划任务

    `*/1 * * * * sh /data/runlog.sh &amp;gt;/dev/null 2&amp;gt;&amp;amp;1`

    `crontab -l` 查看计划任务

## location
### location语法&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;location[=|~|~*|^~|@] uri{
...
}&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;=：精确匹配
~:大小写敏感匹配
~*:不区分大小写
!：取反
^~:不做正则检查，常规检查
@：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;### location 测试
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;server {
listen       1006;
server_name 192.168.0.121;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;location = / {
    return 401;
}

location / {
    return 402;
}

location /documents/ {
    return 403;
}

location ^~ /images/ {
    return 404;
}

location ~* \.(gif|jpg) {
    return 500;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;}&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;`curl -s -o /dev/null -I -w &quot;%{http_code}\n&quot; http://192.168.0.121:1006/`&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;[root@ops-83 conf.d]# curl -s -o /dev/null -I -w &amp;quot;%{http_code}\n&amp;quot; &lt;a href=&quot;http://192.168.0.121:1080&quot;&gt;http://192.168.0.121:1080&lt;/a&gt;
401
[root@ops-83 conf.d]# curl -s -o /dev/null -I -w &amp;quot;%{http_code}\n&amp;quot; &lt;a href=&quot;http://192.168.0.121:1080/&quot;&gt;http://192.168.0.121:1080/&lt;/a&gt;
401
[root@ops-83 conf.d]# curl -s -o /dev/null -I -w &amp;quot;%{http_code}\n&amp;quot; &lt;a href=&quot;http://192.168.0.121:1080/abc&quot;&gt;http://192.168.0.121:1080/abc&lt;/a&gt;
402
[root@ops-83 conf.d]# curl -s -o /dev/null -I -w &amp;quot;%{http_code}\n&amp;quot; &lt;a href=&quot;http://192.168.0.121:1080/documents&quot;&gt;http://192.168.0.121:1080/documents&lt;/a&gt;
402
[root@ops-83 conf.d]# curl -s -o /dev/null -I -w &amp;quot;%{http_code}\n&amp;quot; &lt;a href=&quot;http://192.168.0.121:1080/documents/&quot;&gt;http://192.168.0.121:1080/documents/&lt;/a&gt;
403
[root@ops-83 conf.d]# curl -s -o /dev/null -I -w &amp;quot;%{http_code}\n&amp;quot; &lt;a href=&quot;http://192.168.0.121:1080/documents/abc&quot;&gt;http://192.168.0.121:1080/documents/abc&lt;/a&gt;
403
[root@ops-83 conf.d]# curl -s -o /dev/null -I -w &amp;quot;%{http_code}\n&amp;quot; &lt;a href=&quot;http://192.168.0.121:1080/images/&quot;&gt;http://192.168.0.121:1080/images/&lt;/a&gt;
404
[root@ops-83 conf.d]# curl -s -o /dev/null -I -w &amp;quot;%{http_code}\n&amp;quot; &lt;a href=&quot;http://192.168.0.121:1080/IMAGES/&quot;&gt;http://192.168.0.121:1080/IMAGES/&lt;/a&gt;
402
[root@ops-83 conf.d]# curl -s -o /dev/null -I -w &amp;quot;%{http_code}\n&amp;quot; &lt;a href=&quot;http://192.168.0.121:1080/images/abc.jpg&quot;&gt;http://192.168.0.121:1080/images/abc.jpg&lt;/a&gt;
404
[root@ops-83 conf.d]# curl -s -o /dev/null -I -w &amp;quot;%{http_code}\n&amp;quot; &lt;a href=&quot;http://192.168.0.121:1080/images/ABC.JPG&quot;&gt;http://192.168.0.121:1080/images/ABC.JPG&lt;/a&gt;
404
[root@ops-83 conf.d]# curl -s -o /dev/null -I -w &amp;quot;%{http_code}\n&amp;quot; &lt;a href=&quot;http://192.168.0.121:1080/abc.jpg&quot;&gt;http://192.168.0.121:1080/abc.jpg&lt;/a&gt;
500
[root@ops-83 conf.d]# curl -s -o /dev/null -I -w &amp;quot;%{http_code}\n&amp;quot; &lt;a href=&quot;http://192.168.0.121:1080/abc.JPG&quot;&gt;http://192.168.0.121:1080/abc.JPG&lt;/a&gt;
500
[root@ops-83 conf.d]#&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;/:默认匹配
=:优先，和顺序无关
^~ 和 ~*：有限匹配^~&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;
## rewrite
### rewrite语法
### rewrite示例&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;server {
listen       1006;
server_name www.abcd.com abcd.com;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;location = / {
    rewrite ^/(.*) http://www.xx.com/$1 permanent;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;}&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;`$1`后向引用,`permanent`永久跳转，类似301。

url重写&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;location /cathtml{
root /ecmoban/www;
index index.php index.html index.html;&lt;/p&gt;
&lt;h1&gt;rewrite &amp;quot;cathtml-(\d{1,7}).html&amp;quot; &amp;quot;/category.php?id=(\d{1,7})&amp;quot;;&lt;/h1&gt;
&lt;pre&gt;&lt;code&gt;    rewrite &quot;cathtml-(\d+).html&quot; /category.php?id=$1;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;}
location /goods{
root /ecmoban/www;
index index.php index.html index.html;
rewrite &amp;quot;goods-(\d+).html&amp;quot; /goods.php?id=$1;
}&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;`(\d+)`，为任意个数字，`$1`为后向引用，前面匹配的可以在后面直接调用

## nginx访问认证
### 配置文件修改&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;location /{
auth_basic  &amp;quot;xxxx&amp;quot;;
auth_basic_user_file conf/htpasswd;
}&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;使用位置：http/server/location/limit_except

### 生成密码文件
可以使用apache自带的“htpasswd ”或“openssl passwd”设置。
&lt;/code&gt;&lt;/pre&gt;
&lt;h1&gt;htpasswd -bc /etc/nginx/conf/htpasswd wanghui 1234567&lt;/h1&gt;
&lt;h1&gt;chmod /etc/nginx/conf/htpasswd&lt;/h1&gt;
&lt;h1&gt;chown nginx /etc/nginx/conf/htpasswd&lt;/h1&gt;
&lt;pre&gt;&lt;code&gt;重新加载生效&lt;/code&gt;&lt;/pre&gt;
&lt;h1&gt;nginx -t&lt;/h1&gt;
&lt;h1&gt;nginx -s reload&lt;/h1&gt;
&lt;pre&gt;&lt;code&gt;## nginx 的目录浏览
### autoindex&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;server{
listen  10.0.0.11:80;
server_name bbs.bacd.com b.abcd.com abcd.com;
location /{
root html/bbs;
autoindex on;
index index.html index.htm;
}
}&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;
## 提升网站性能
### 启用nginx 压缩

查看nginx中文件类型准确写法mime.types，可以放置在http、server、location段的位置&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;    gzip on;
gzip_buffers 32 4k;
gzip_comp_level 6;
gzip_min_length 20;
gzip_types text/css text/xml application/x-javascript;&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;对比测试结果:\
`curl 'http://192.168.0.121:99/themes/ecmoban_dsc2017/css/base.css' -H 'Pragma: no-cache' -H 'Accept-Encoding: gzip, deflate, sdch' &amp;gt;/dev/null`

![](./nginx-img/nginx-01.png)

### expires缓存
通过正则表达式对.jpg/.js/.png/.gif进行缓存，没有缓存的css就没有过期时间。同时需要注意正则表达式写法，如果gif后有“|”，则要匹配一个空字符串，相当于所有的都能匹配上了。&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;location ~ .(jpg|js|png|gif){
expires 1d;
root /ecmoban/www;
}&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;
### 负载均衡
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;[root@ops-83 conf.d]# grep -v '#' back-101.conf
server {
listen       1001;
server&lt;em&gt;name  &lt;/em&gt;;
access_log  /var/log/nginx/101.access.log  main;
location / {
root   /usr/share/nginx/back_html_101;
index  index.php index.html index.htm;
}
error_page  404              /404.html;
location = /404.html {
root /usr/share/nginx/back_html_101;
}
error_page   500 502 503 504  /50x.html;
location = /50x.html {
root /usr/share/nginx/back_html_101;&lt;br /&gt;
}
location ~ .php$ {
root           /ecmoban/www;
fastcgi_pass   127.0.0.1:9000;
fastcgi_index  index.php;
fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
include        fastcgi_params;
}
}&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;[root@ops-83 conf.d]# grep -v '#' back-102.conf
server {
listen       1002;
server&lt;em&gt;name  &lt;/em&gt;;
access_log  /var/log/nginx/102.access.log  main;
location / {
root   /usr/share/nginx/back_html_102;
index  index.php index.html index.htm;
}
error_page  404              /404.html;
location = /404.html {
root /usr/share/nginx/back_html_101;
}
error_page   500 502 503 504  /50x.html;
location = /50x.html {
root /usr/share/nginx/back_html_101;&lt;br /&gt;
}
location ~ .php$ {
root           /ecmoban/www;
fastcgi_pass   127.0.0.1:9000;
fastcgi_index  index.php;
fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
include        fastcgi_params;
}
}&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;[root@ops-83 conf.d]# grep -v '#' back.conf
upstream  up_test{
server 192.168.0.121:1001;
server 192.168.0.121:1002;
}&lt;/p&gt;
&lt;p&gt;server {
listen       1005;
server&lt;em&gt;name  &lt;/em&gt;;
gzip on;
gzip_buffers 32 4k;
gzip_comp_level 6;
gzip_min_length 20;
gzip_types text/css text/xml application/x-javascript;
access_log  /var/log/nginx/back.access.log  main;
location / {
proxy_pass &lt;a href=&quot;http://up_test&quot;&gt;http://up_test&lt;/a&gt;;
}
}&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;
在经过负载均衡后，客户端源ip将丢失，为了准确获得源ip，需要增加参数`proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for`。本次测试由1006端口（代理）-&amp;gt;1005（代理）-&amp;gt;(1001、1002)，最终实现1005日志中记录了源ip（客户端），1001、1002中记录了源ip（客户端）及二级代理ip（1005）。
![](./nginx-img/nginx-02.png) \
![](./nginx-img/nginx-03.png) &lt;/code&gt;&lt;/pre&gt;            </description>
            <pubDate>2019-04-11 08:20:49</pubDate>
            <link>//blog/Notes/02-%CD%F8%D5%BE%B7%FE%CE%F1/nginx/nginx.html</link>
            <guid isPermaLink="true">//blog/Notes/02-%CD%F8%D5%BE%B7%FE%CE%F1/nginx/nginx.html</guid>
                    </item>
                <item>
            <title>Cisco常用命令</title>
            <description>
            &lt;!--
author: 王辉
head: http://blog.unuw.com/blog/logo.jpg
date: 2018-09-25
title: Cisco常用命令
tags: Cisco
images: http://blog.unuw.com/blog/logo.jpg
category: 32-网络
status: publish
summary: Cisco中的常用命令。
--&gt;
&lt;h1&gt;基本操作&lt;/h1&gt;
&lt;p&gt;IOS操作:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Ctrl-w：删除一个参数
Ctrl-x：删除整行命令
Ctrl-c/Ctrl-z:都可以退回到特权模式，c不执行退出，z执行后退出。
exit、end、quit&lt;/code&gt;&lt;/pre&gt;
&lt;h1&gt;常识&lt;/h1&gt;
&lt;p&gt;&lt;strong&gt;判断广播组播：&lt;/strong&gt; MAC地址第8bit为1，则为广播或组播&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;串行链路不需ARP：&lt;/strong&gt; 串行链路点对点传输，不需要进行ARP识别对端mac，因此不需要丢弃第一个包进行ARP查询，5个包全通。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;泛洪：&lt;/strong&gt; 数据帧到达交换机，交换机中mac表没有目的mac，需要进行通过其他所有接口进行泛洪转发。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;广播：&lt;/strong&gt; 目的mac为广播FFFF……FF.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;思科私有协议MAC:&lt;/strong&gt; 本地处理，不向外转发类型为0x2004的组播MAC:01-00-0C-CC-CC-CC,如：DTP/CDP/VTP&lt;/p&gt;
&lt;hr /&gt;
&lt;h1&gt;基本命令&lt;/h1&gt;
&lt;p&gt;模式:用户模式、特权模式、全局配置模式&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;HQ&amp;gt;enable
HQ#configure terminal
Enter configuration commands, one per line.  End with CNTL/Z.
HQ(config)#&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;问号输入：&lt;code&gt;?&lt;/code&gt;在华为不能输入，在IOS中输入&lt;code&gt;ctrl+v+?&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;两个配置文件:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;copy running-config startup-config
copy startup-config running-config&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;保存与擦除：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;write
erase&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;查看版本：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;show version&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;重启：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;reload&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;配置特权模式密码，使用telnet远程管理&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;R1#configure terminal
R1(config)#enable password cisco //设置enable提权口令
R1(config)#line vty 0 4
R1(config-line)#password ccna    //设置远程链接口令
R1(config-line)#login
R1(config-line)#transport input ?
  all      All protocols
  lapb-ta  LAPB Terminal Adapter
  lat      DEC LAT protocol
  mop      DEC MOP Remote Console Protocol
  none     No protocols
  pad      X.3 PAD
  rlogin   Unix rlogin protocol
  ssh      TCP/IP SSH protocol
  telnet   TCP/IP Telnet protocol
  udptn    UDPTN async via UDP protocol
  v120     Async over ISDN
R1(config-line)#transport input telnet  //设置远程链接方式
R1(config-line)#&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;删除特权模式密码:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;SW1(config)#no enable password&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;h1&gt;接口常用命令&lt;/h1&gt;
&lt;p&gt;接口摘要信息&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;show ip interface brief&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;配置路由器接口IP地址&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;R3#configure terminal
Enter configuration commands, one per line.  End with CNTL/Z.
R3(config)#interface ethernet 0/1
R3(config-if)#ip address 10.2.2.1 255.255.255.0
R3(config-if)#no shutdown
R3(config-if)#exit
R3(config)#exit
R3#write&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;查看接口配置&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;SW03(config-if)#do show running-config interface e0/2&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;h1&gt;协议常用命令&lt;/h1&gt;
&lt;h2&gt;CDP:&lt;/h2&gt;
&lt;p&gt;查看CDP摘要：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;show cdp neighbors
show cdp neighbors detail&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;ARP:&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;HQ#show arp
HQ#show ip arp&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;h1&gt;路由相关命令&lt;/h1&gt;
&lt;h2&gt;查看命令&lt;/h2&gt;
&lt;p&gt;查看路由表&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;HQ#show ip route&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;静态路由&lt;/h2&gt;
&lt;p&gt;添加静态路由&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;R2(config)#ip route 20.0.0.0 255.255.255.0 e0/0 30.0.0.1&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;浮动静态路由&lt;/h2&gt;
&lt;p&gt;串口直连，不需要指定下一跳接口地址，“10”为管理距离，在两条默认路由选择优先路由，停e0/0用后，s1/0起作用。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;R2(config)#ip route 0.0.0.0 0.0.0.0 e0/0 30.0.0.1
R2(config)#ip route 0.0.0.0 0.0.0.0 s1/0 10&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;h1&gt;交换相关命令&lt;/h1&gt;
&lt;h2&gt;基本命令&lt;/h2&gt;
&lt;p&gt;查看mac地址表&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;SW01#show mac address-table&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;交换机基本配置&lt;/h2&gt;
&lt;p&gt;配置交换机双工模式&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Switch#configure terminal
Enter configuration commands, one per line.  End with CNTL/Z.
Switch(config)#interface e0/0
Switch(config-if)#duplex ?
  auto  Enable AUTO duplex configuration
  full  Force full duplex operation
  half  Force half-duplex operation
Switch(config-if)#duplex auto&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;交换机配置IP&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;SW06#configure terminal
SW06(config)#interface vlan 10
SW06(config-if)#ip address 30.0.0.106 255.255.255.0
SW06(config-if)#no shutdown
SW06(config-if)#end
SW06#show ip interface brief&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;vlan&lt;/h2&gt;
&lt;p&gt;建立vlan&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;SW03(config)#vlan 10
SW03(config-vlan)#exit
SW03(config)#interface e0/2
SW03(config-if)#switchport access vlan 10
SW03(config-if)#end
SW03#write
SW03#show vlan brief&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;vlan命名&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;SW01(config)#vlan 10
SW01(config-vlan)#name vlanccna&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;查看vlan摘要&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;SW03#show vlan brief&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;查看接口交换端口信息&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;SW01#show interface e0/0 switchport&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;关闭vlan&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;SW03(config)#hutdown vlan 10
SW03(config)#no shutdown vlan 10&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;配置ip地址，用于管理。二层交换机仅能配置一个IP地址，配置其他的，前面地址即失效。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;SW06#configure terminal
SW06(config)#interface vlan 10
SW06(config-if)#ip address 30.0.0.106 255.255.255.0
SW06(config-if)#no shutdown
SW06(config-if)#end
SW06#show ip interface brief
Interface              IP-Address      OK? Method Status                Protocol
Ethernet0/0            unassigned      YES unset  up                    up      
Ethernet0/1            unassigned      YES unset  up                    up      
Ethernet0/2            unassigned      YES unset  up                    up      
Ethernet0/3            unassigned      YES unset  up                    up      
Vlan10                 30.0.0.106      YES manual up                    up      
SW06#&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;trunk&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;两个交换机之间的vlan通讯，可以将连接两个交换机的端口划入对应vlan，实现互相访问；由于多个vlan就需要多个端口直连，为解决该问题，使用trunk。s
交换机配置trunk（二层交换机配置），二层仅有一个封装模式，不需要指定,三层交换机，由于涉及设置多个封装格式，必须选择一个。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;二层交换机：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;SW01&amp;gt;enable
SW01#configure terminal
SW01(config)#vlan 10
SW01(config-vlan)#exit
SW01(config)#interface e0/1
SW01(config-if)#switchport access vlan 10
SW01(config-if)#exit
SW03(config)#interface e0/3
SW01(config)#interface e0/3
SW01(config-if)#switchport mode trunk&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;三层交换机&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;SW03&amp;gt;enable
SW03#configure terminal
SW03(config)#vlan 10
SW03(config-vlan)#exit
SW03(config)#interface e0/1
SW03(config-if)#switchport access vlan 10
SW03(config-if)#exit
SW03(config)#interface e0/3
SW03(config-if)#switchport trunk encapsulation dot1q
SW03(config-if)#switchport mode trunk
SW03(config-if)#end
SW03#write&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;查看接口trunk&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;SW2#show interfaces trunk
SW2#show interfaces e0/0 switchport&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;DTP动态trunk协议&lt;/h2&gt;
&lt;p&gt;查看及调试&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;show dtp interface
Debug dtp event&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;打开DTP(DTP默认是工作的)&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;switchport mode trunk
no switchport mode trunk&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;关闭DTP(DTP默认是工作的，端口为trunk时才可以关闭)&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;switchport nonegotiate&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;配置DTP协商模式。auto被动协商，没人协商默认为access模式;desirable主动协商。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;switchport mode dynamic auto/desirable&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Trunk工作模式&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;需要确认下！！&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;链路trunk模式&lt;/th&gt;
&lt;th&gt;描述&lt;/th&gt;
&lt;th&gt;命令&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;开启&lt;/td&gt;
&lt;td&gt;将端口强制设定为Trunk即使对端不成为Trunk，本端也成为Trunk&lt;/td&gt;
&lt;td&gt;&lt;code&gt;switchport mode trunk&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;关闭&lt;/td&gt;
&lt;td&gt;将端口强制设定为非Trunk&lt;/td&gt;
&lt;td&gt;&lt;code&gt;switchport mode access&lt;/code&gt;？？&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;期望（desirable）&lt;/td&gt;
&lt;td&gt;端口主动与邻接端口协商为Trunk&lt;/td&gt;
&lt;td&gt;&lt;code&gt;switchport mode dynamic desirable&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;自动（Auto）&lt;/td&gt;
&lt;td&gt;如果邻接端口尝试协商为Trunk，则成为Trunk，如果两端均为auto，不能协商成为trunk。&lt;/td&gt;
&lt;td&gt;&lt;code&gt;switchport mode dynamic auto&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;非协商&lt;/td&gt;
&lt;td&gt;将端口强制设定为Trunk，并且不再发送DTP报文&lt;/td&gt;
&lt;td&gt;&lt;code&gt;switchport nonegotiate&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Switchport 模式交互&lt;/strong&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Dynamic Auto&lt;/th&gt;
&lt;th&gt;Dynamic Desirable&lt;/th&gt;
&lt;th&gt;Trunk&lt;/th&gt;
&lt;th&gt;Access&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Dynamic Auto&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Access&lt;/td&gt;
&lt;td&gt;Trunk&lt;/td&gt;
&lt;td&gt;Trunk&lt;/td&gt;
&lt;td&gt;Access&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Dynamic Desirable&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Trunk&lt;/td&gt;
&lt;td&gt;Trunk&lt;/td&gt;
&lt;td&gt;Trunk&lt;/td&gt;
&lt;td&gt;Access&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Trunk&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Trunk&lt;/td&gt;
&lt;td&gt;Trunk&lt;/td&gt;
&lt;td&gt;Trunk&lt;/td&gt;
&lt;td&gt;Not recommended&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Access&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Access&lt;/td&gt;
&lt;td&gt;Access&lt;/td&gt;
&lt;td&gt;Not recommended&lt;/td&gt;
&lt;td&gt;Access&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Note: Table assumes DTP is enabled at both ends.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;show dtp interface–看当前配置&lt;/li&gt;
&lt;li&gt;Debug dtp event-验证DTP事件&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;VTP&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;不能通过刷配置模式进行同步，配置存放在vlan.dat文件中，VTP的消息只在trunk中传递。。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;查看vtp工作状态&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;SW01#show vtp status
SW01#show vtp counters&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;重置vtp修订版本号，割接时容易出问题，旧的设备接入网络，由于之前版本号较高，导致同步至其他设备，清空现有vlan配置。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;vtp domain null&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;配置vtp&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;vtpdomain Shanghai(默认domain=空)
vtpversion 2
vtpmode server(默认为server)
vtpdomain NULL（会清空配置版本号）
vtppassword cisco&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;单臂路由&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;.\cisco-img\vlan-route.png&quot; alt=&quot;单臂路由实验拓扑图&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;SW01:&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Switch&amp;gt;enable
Switch#configure terminal
Switch(config)#hostname SW01
SW01(config)#vtp domain vtptestdomain
SW01(config)#vtp mode server         
SW01(config)#vtp password cisco
--&amp;gt;SW02操作
SW01(config)#interface range e0/2-3
SW01(config-if-range)#switchport trunk encapsulation dot1q
SW01(config-if-range)#switchport mode trunk
SW01(config-if-range)#end
SW01#    
SW01#configure terminal
SW01(config)#vlan 10
SW01(config-vlan)#exit
SW01(config)#vlan 20
SW01(config-vlan)#exit
SW01(config)#interface e0/0
SW01(config-if)#switchport trunk encapsulation dot1q
SW01(config-if)#switchport mode trunk
SW01(config-if)#
SW01(config)#interface e1/0
SW01(config-if)#switchport access vlan 10
SW01(config-if)#exit
SW01(config)#interface e1/1           
SW01(config-if)#switchport access vlan 20
SW01(config-if)#end
SW01#write&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;SW02:&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Switch&amp;gt;enable
Switch#configure terminal
Switch(config)#hostname SW02
SW02(config)#vtp domain vtptestdomain
SW02(config)#vtp mode client
SW02(config)#vtp password cisco
SW02(config)#interface range e0/2-3
SW02(config-if-range)#switchport trunk encapsulation dot1q
SW02(config-if-range)#switchport mode trunk
SW02(config-if-range)#end
&amp;lt;--回到SW01继续执行
SW02#show vlan brief

VLAN Name                             Status    Ports
---- -------------------------------- --------- -------------------------------
1    default                          active    Et0/0, Et0/1, Et1/0, Et1/1, Et1/2, Et1/3
10   VLAN0010                         active    
20   VLAN0020                         active    
1002 fddi-default                     act/unsup
1003 token-ring-default               act/unsup
1004 fddinet-default                  act/unsup
1005 trnet-default                    act/unsup
SW02#
SW02#configure terminal
SW02(config)#interface e1/0
SW02(config-if)#switchport access vlan 10
SW02(config-if)#exit
SW02(config)#interface e1/1
SW02(config-if)#switchport access vlan 20
SW02(config-if)#end
SW02#write&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;R1:&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Router&amp;gt;enable
Router#configure terminal
Router(config)#hostname R1
R1(config)#interface e0/0
R1(config-if)#no shutdown
R1(config)#interface e0/0.1
R1(config-subif)#encapsulation dot1Q 10
R1(config-subif)#ip address 10.0.0.254 255.255.255.0
R1(config-subif)#exit
R1(config)#interface e0/0.2
R1(config-subif)#encapsulation dot1Q 20
R1(config-subif)#ip address 20.0.0.254 255.255.255.0
R1(config-subif)#end
R1#write
R1#&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;STP（防环）&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;生成式在思科设备上默认是开启的&lt;/p&gt;
&lt;p&gt;1、802.1D 传统PVST+（思科默认开启）&lt;/p&gt;
&lt;p&gt;2、802.1w快速生成树Rapid PVST+&lt;/p&gt;
&lt;p&gt;3、802.1s 多实例生成树MSTP（华为默认开启）&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;查看spt:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;show spanning-tree vlan 1&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;开启spt:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;spanning-tree vlan 1&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;停止spt:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;no spanning-tree vlan 1&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;在dot1q的vlan上也对本帧vlan打tag(模拟器不支持):&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;vlan dot1q tag native&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;查看spt接口&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;show spanning-tree interface e0/0 detail&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;NAT&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;几个地址概念:&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;inside local:内部本地地址，内部的主机IP地址
inside global：内部全局地址，一般由运营商指定
outside global：外部全局地址，外部主机的地址&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;常用命令&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;R1#show ip nat translations
Pro Inside global      Inside local       Outside local      Outside global
icmp 150.0.0.1:59579   100.0.0.2:59579    200.0.0.1:59579    200.0.0.1:59579
icmp 150.0.0.1:59835   100.0.0.2:59835    200.0.0.1:59835    200.0.0.1:59835
icmp 150.0.0.1:60091   100.0.0.2:60091    200.0.0.1:60091    200.0.0.1:60091
R1#show running-config | s nat
 ip nat inside
 ip nat outside
ip nat inside source list 1 interface Ethernet0/1 overload
R1#&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;.\cisco-img\nat.png&quot; alt=&quot;测试拓扑&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;R1&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Router&amp;gt;enable
Router#configure t
Router(config)#hostname R1
Router(config)#interface e0/0
Router(config-if)#ip address 100.0.0.254 255.255.255.0
Router(config-if)#no shutdown
Router(config-if)#interface e0/1  
Router(config-if)#ip address 150.0.0.1 255.255.255.0
Router(config-if)#no shutdown
R1(config)#ip route 200.0.0.0 255.255.255.0 e0/1 150.0.0.2
R1(config)#&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;R2&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Router&amp;gt;enable
Router#configure terminal
Router(config)#hostname R2
R2(config)#interface e0/1
R2(config-if)#ip address 150.0.0.2 255.255.255.0
R2(config-if)#no shutdown
R2(config-if)#interface e0/0                    
R2(config-if)#ip address 200.0.0.254 255.255.255.0
R2(config-if)#no shutdown
R2(config)#&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;R1-NAT静态地址转换（PC1），一对一&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;R1(config)#interface e0/0  //如果是子接口，对应配置子接口
R1(config-if)#ip nat inside
R1(config-if)#interface e0/1
R1(config-if)#ip nat outside
R1(config-if)#exit
R1(config)#ip nat inside source static 100.0.0.1 interface e0/1
或者
R1(config)#ip nat inside source static 100.0.0.1 150.0.0.10&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;R1-NAT端口转换PAT，多对一&lt;/strong&gt;，也需要定义inside、outside端口。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;R1(config)#no ip nat inside source static 100.0.0.1 150.0.0.10
Static entry in use, do you want to delete child entries? [no]: yes
R1(config)#access-list 1 permit 100.0.0.0 0.0.0.255
R1(config)#ip nat inside source list 1 interface e0/1 overload
R1(config)#&lt;/code&gt;&lt;/pre&gt;
&lt;h1&gt;a&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;11111&lt;/li&gt;
&lt;li&gt;222222&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;aaa&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;bbbb&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;aaa&lt;/em&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;xxxxx&lt;/li&gt;
&lt;li&gt;3333&lt;/li&gt;
&lt;li&gt;3333
&lt;blockquote&gt;
&lt;p&gt;11111111111111111111&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;1111111111111&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/blockquote&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;&lt;code&gt;&lt;/code&gt;&lt;/pre&gt;            </description>
            <pubDate>2019-04-11 08:20:49</pubDate>
            <link>//blog/Notes/32-%CD%F8%C2%E7/00-Cisco%B3%A3%D3%C3%C3%FC%C1%EE.html</link>
            <guid isPermaLink="true">//blog/Notes/32-%CD%F8%C2%E7/00-Cisco%B3%A3%D3%C3%C3%FC%C1%EE.html</guid>
                                               <category>32-网络</category>
                                    </item>
                <item>
            <title>监测url的一个小脚本</title>
            <description>
            &lt;!--
author: 王辉
head: http://blog.unuw.com/blog/logo.jpg
date: 2017-12-28
title: 监测url的一个小脚本
tags: shell
images: http://blog.unuw.com/blog/logo.jpg
category: 01-操作系统
status: publish
summary: 监测url的一个小脚本。
--&gt;
&lt;h1&gt;!/bin/sh&lt;/h1&gt;
&lt;h1&gt;File: checkurl&lt;/h1&gt;
&lt;p&gt;[ -f /etc/init.d/functions ] &amp;amp;&amp;amp; . /etc/init.d/functions&lt;/p&gt;
&lt;p&gt;function checkURL() {&lt;/p&gt;
&lt;h1&gt;statements&lt;/h1&gt;
&lt;p&gt;checkUrl=$1
echo 'check url start ...' &amp;quot;${checkUrl}&amp;quot;
judge=($(curl -I -s --connect-timeout 2 ${checkUrl}|head -1|tr &amp;quot; &amp;quot; &amp;quot;\n&amp;quot;))&lt;/p&gt;
&lt;h1&gt;if [ [ ${judge[1]} == '200' -a ${judge[2]} == 'OK' ] ]  ; then&lt;/h1&gt;
&lt;p&gt;if [ ${judge[1]} == '200' ]  ; then
action &amp;quot;${checkUrl}&amp;quot; /bin/true
else
action &amp;quot;${checkUrl}&amp;quot; /bin/false
echo -n &amp;quot;retrying again ...&amp;quot;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sleep 3
judgeagain=($(curl -I -s --connect-timeout 2 ${checkUrl}|head -1|tr &quot;\r&quot; &quot;\n&quot;))
if [ &quot;${judgeagain[1]}&quot; == '200' ]; then
  action &quot;${checkUrl},retried again&quot; /bin/true
else
  action &quot;${checkUrl},retried again&quot; /bin/false
fi&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;fi
sleep 1;
}&lt;/p&gt;
&lt;h1&gt;usage method&lt;/h1&gt;
&lt;p&gt;checkURL &lt;a href=&quot;http://abcd.com&quot;&gt;http://abcd.com&lt;/a&gt;&lt;/p&gt;            </description>
            <pubDate>2019-04-11 08:20:49</pubDate>
            <link>//blog/Notes/01-%B2%D9%D7%F7%CF%B5%CD%B3/shell/check_url.html</link>
            <guid isPermaLink="true">//blog/Notes/01-%B2%D9%D7%F7%CF%B5%CD%B3/shell/check_url.html</guid>
                                               <category>01-操作系统</category>
                                    </item>
                <item>
            <title>ELK部署</title>
            <description>
            &lt;!--
author: 王辉
head: http://blog.unuw.com/blog/logo.jpg
date: 2017-12-28
title: ELK部署
tags: elk elasticsearch logstash kibana
images: http://blog.unuw.com/blog/logo.jpg
category: 23-日志相关
status: publish
summary: 搭建elk环境。
--&gt;
&lt;h1&gt;Elasticsearch 部署&lt;/h1&gt;
&lt;p&gt;&lt;a href=&quot;https://www.unixhot.com/article/59&quot;&gt;https://www.unixhot.com/article/59&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;安装JDK&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;[root@ww1 ~]# yum install -y java
[root@ww1 ~]# java -version
openjdk version &quot;1.8.0_65&quot;
OpenJDK Runtime Environment (build 1.8.0_65-b17)
OpenJDK 64-Bit Server VM (build 25.65-b01, mixed mode)&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;YUM安装ElasticSearch&lt;/h2&gt;
&lt;h3&gt;1.下载并安装GPG key&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;[root@ww1 ~]# rpm --import https://packages.elastic.co/GPG-KEY-elasticsearch&lt;/code&gt;&lt;/p&gt;
&lt;h3&gt;2.添加yum仓库&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;[root@ww1 ~]# vim /etc/yum.repos.d/elasticsearch.repo
[elasticsearch-2.x]
name=Elasticsearch repository for 2.x packages
baseurl=http://packages.elastic.co/elasticsearch/2.x/centos
gpgcheck=1
gpgkey=http://packages.elastic.co/GPG-KEY-elasticsearch
enabled=1&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;3.安装elasticsearch&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;[root@hadoop-node1 ~]# yum install -y elasticsearch&lt;/code&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;[root@ww1 elasticsearch]# grep '^[a-z]' elasticsearch.yml
cluster.name: escls
node.name: el-node-01
path.data: /elk_data/data
path.logs: /elk_data/logs
bootstrap.memory_lock: true
network.host: 192.168.116.101
http.port: 9200
[root@ww1 elasticsearch]# systemctl restart elasticsearch.service
[root@ww1 elasticsearch]# netstat -nltp|grep 9200
tcp6       0      0 192.168.116.101:9200    :::*                    LISTEN      4086/java           
[root@ww1 elasticsearch]#&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;** 注意权限，之前因为日志目录属性不对，导致无法启动&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;[root@ww1 elasticsearch]# chown -R elasticsearch:elasticsearch /elk_data
[root@ww1 elasticsearch]# ll /elk_data/
drwxr-xr-x. 2 elasticsearch elasticsearch 6 10?27 14:40 data
drwxr-xr-x. 2 elasticsearch elasticsearch 6 10?27 14:40 logs
[root@ww1 elasticsearch]# cd /elk_data/&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;测试elasticsearch&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;[root@ww1 elasticsearch]# curl http://192.168.116.101:9200
{
  &quot;name&quot; : &quot;el-node-01&quot;,
  &quot;cluster_name&quot; : &quot;escls&quot;,
  &quot;cluster_uuid&quot; : &quot;f-W7UrSUSv2jPOCn0VKE-w&quot;,
  &quot;version&quot; : {
    &quot;number&quot; : &quot;2.4.6&quot;,
    &quot;build_hash&quot; : &quot;5376dca9f70f3abef96a77f4bb22720ace8240fd&quot;,
    &quot;build_timestamp&quot; : &quot;2017-07-18T12:17:44Z&quot;,
    &quot;build_snapshot&quot; : false,
    &quot;lucene_version&quot; : &quot;5.5.4&quot;
  },
  &quot;tagline&quot; : &quot;You Know, for Search&quot;
}
[root@ww1 elasticsearch]#
[root@ww1 elasticsearch]# curl -i -XGET 'http://192.168.116.101:9200/_count?'
HTTP/1.1 200 OK
Content-Type: application/json; charset=UTF-8
Content-Length: 59

{&quot;count&quot;:0,&quot;_shards&quot;:{&quot;total&quot;:0,&quot;successful&quot;:0,&quot;failed&quot;:0}}[root@ww1 elasticsearch]#&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;安装Head插件，集群管理&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;[root@ww1 bin]# ./plugin install mobz/elasticsearch-head
-&amp;gt; Installing mobz/elasticsearch-head...
Trying https://github.com/mobz/elasticsearch-head/archive/master.zip ...
Downloading ............................................................................DONE
Verifying https://github.com/mobz/elasticsearch-head/archive/master.zip checksums if available ...
NOTE: Unable to verify checksum for downloaded plugin (unable to find .sha1 or .md5 file to verify)
Installed head into /usr/share/elasticsearch/plugins/head
[root@ww1 bin]#
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;a href=&quot;http://192.168.116.101:9200/_plugin/head/&quot;&gt;http://192.168.116.101:9200/_plugin/head/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;安装kopf插件&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;[root@ww1 bin]# ./plugin install lmenezes/elasticsearch-kopf
-&amp;gt; Installing lmenezes/elasticsearch-kopf...
Trying https://github.com/lmenezes/elasticsearch-kopf/archive/master.zip ...
Downloading ..............................................................................DONE
Verifying https://github.com/lmenezes/elasticsearch-kopf/archive/master.zip checksums if available ...
NOTE: Unable to verify checksum for downloaded plugin (unable to find .sha1 or .md5 file to verify)
Installed kopf into /usr/share/elasticsearch/plugins/kopf
[root@ww1 bin]#

http://192.168.116.101:9200/_plugin/kopf/#!/cluster&lt;/code&gt;&lt;/pre&gt;
&lt;h1&gt;LogStash部署与配置&lt;/h1&gt;
&lt;h2&gt;安装JDK&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;[root@ww1 ~]# yum install -y java
[root@ww1 ~]# java -version
openjdk version &quot;1.8.0_65&quot;
OpenJDK Runtime Environment (build 1.8.0_65-b17)
OpenJDK 64-Bit Server VM (build 25.65-b01, mixed mode)&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;YUM部署LogStash&lt;/h2&gt;
&lt;h3&gt;1.下载并安装GPG key&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;[root@ww2 ~]# rpm --import https://packages.elastic.co/GPG-KEY-elasticsearch&lt;/code&gt;&lt;/p&gt;
&lt;h3&gt;2.添加yum仓库&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;[root@linux-node2 ~]# vim /etc/yum.repos.d/logstash.repo
[logstash-2.3]
name=Logstash repository for 2.3.x packages
baseurl=https://packages.elastic.co/logstash/2.3/centos
gpgcheck=1
gpgkey=https://packages.elastic.co/GPG-KEY-elasticsearch
enabled=1&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;3.安装logstash&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;[root@ww2 ~]# yum install -y logstash&lt;/code&gt;&lt;/p&gt;
&lt;h1&gt;Kibana简介&lt;/h1&gt;
&lt;h2&gt;Yum安装Kibana&lt;/h2&gt;
&lt;h3&gt;1.下载并安装GPG key&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;[root@ww2 ~]# rpm --import https://packages.elastic.co/GPG-KEY-elasticsearch&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;2.添加yum仓库&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;[root@ww2 ~]# vim /etc/yum.repos.d/kibana.repo
[kibana-4.5]
name=Kibana repository for 4.5.x packages
baseurl=http://packages.elastic.co/kibana/4.5/centos
gpgcheck=1
gpgkey=http://packages.elastic.co/GPG-KEY-elasticsearch
enabled=1&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;3.安装kibana&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;[root@ww2 ~]# yum install -y kibana&lt;/code&gt;&lt;/pre&gt;
&lt;h1&gt;使用Cobbler创建ELKStack仓库&lt;/h1&gt;
&lt;p&gt;当然生产环境，肯定不能使用外网的YUM仓库，可以使用Cobbler来创建自己的yum仓库。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;[root@log-node1 ~]# cobbler repo add --name=logstash-2.3 --mirror=http://packages.elastic.co/logstash/2.3/centos --arch=x86_64 --breed=yum
[root@log-node1 ~]# cobbler repo add --name=elasticsearch2 --mirror=http://packages.elastic.co/elasticsearch/2.x/centos --arch=x86_64 --breed=yum
[root@log-node1 ~]# cobbler repo add --name=kibana4.5 --mirror=http://packages.elastic.co/kibana/4.5/centos --arch=x86_64 --breed=yum
[root@log-node1 ~]# cobbler reposync&lt;/code&gt;&lt;/pre&gt;            </description>
            <pubDate>2019-04-11 08:20:49</pubDate>
            <link>//blog/Notes/23-%C8%D5%D6%BE%CF%E0%B9%D8/ELK/01-%B2%BF%CA%F0%B0%B2%D7%B0.html</link>
            <guid isPermaLink="true">//blog/Notes/23-%C8%D5%D6%BE%CF%E0%B9%D8/ELK/01-%B2%BF%CA%F0%B0%B2%D7%B0.html</guid>
                                               <category>23-日志相关</category>
                                    </item>
                <item>
            <title>Linux运维人员必会开源运维工具体系</title>
            <description>
            &lt;!--
author: 王辉
head: http://blog.unuw.com/blog/logo.jpg
date: 2017-12-28
title: Linux运维人员必会开源运维工具体系
tags: 运维 工具
images: http://pingodata.qiniudn.com/cube2.jpg
category: 0-工具体系
status: publish
summary: Linux运维人员必会开源运维工具体系。
--&gt;
&lt;h1&gt;Linux运维人员必会开源运维工具体系&lt;/h1&gt;
&lt;p&gt;&lt;a href=&quot;http://oldboy.blog.51cto.com/2561410/775056/&quot;&gt;http://oldboy.blog.51cto.com/2561410/775056/&lt;/a&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;blockquote&gt;
&lt;p&gt;新手必会用深黄色（8-15k）标记，老鸟必会深黄色+浅蓝色(15-25K)标记&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;操作系统：Centos,Ubuntu,Redhat,suse,Freebsd&lt;/li&gt;
&lt;li&gt;网站服务：nginx,apache,lighttpd,php,tomcat,resin&lt;/li&gt;
&lt;li&gt;数据   库：MySQL,MariaDB,PostgreSQL&lt;/li&gt;
&lt;li&gt;DB中间件：maxscale,MyCat,atlas,cobar,amoeba,MySQL-proxy&lt;/li&gt;
&lt;li&gt;代理相关：lvs,keepalived,haproxy,nginx,heartbeat&lt;/li&gt;
&lt;li&gt;网站缓存：squid,nginx,varnish&lt;/li&gt;
&lt;li&gt;NOSQL库：Redis,Memcached,MongoDB,HBase,Cassandra,CouchDB&lt;/li&gt;
&lt;li&gt;存储相关：Nfs,FastDFS,Moosefs(mfs),Hadoop,glusterfs,lustre&lt;/li&gt;
&lt;li&gt;版本管理：svn,git&lt;/li&gt;
&lt;li&gt;监控报警：nagios,cacti,zabbix,munin,hyperic,mrtg,graphite&lt;/li&gt;
&lt;li&gt;域名解析：bind,powerdns,dnsmasq&lt;/li&gt;
&lt;li&gt;同步软件：scp,rsync,inotify,sersync,drbd&lt;/li&gt;
&lt;li&gt;批量管理：SSH,Ansible,Saltstack,expect,puppet&lt;/li&gt;
&lt;li&gt;虚拟   化：kvm,xen&lt;/li&gt;
&lt;li&gt;云计   算：openstack,docker,cloudstack&lt;/li&gt;
&lt;li&gt;内网软件：iptables,zebra,iftraf,ntop,tc,iftop&lt;/li&gt;
&lt;li&gt;邮件软件：qmail,posfix,sendmail,zimbra&lt;/li&gt;
&lt;li&gt;远程拨号：openvpn,pptp,openswan,ipip&lt;/li&gt;
&lt;li&gt;统一认证：openldap&lt;/li&gt;
&lt;li&gt;队列工具：ActiveMQ,RabbitMQ,Metaq,MemcacheQ,Zeromq&lt;/li&gt;
&lt;li&gt;打包发布：mvn,ants,jenkins&lt;/li&gt;
&lt;li&gt;测试软件：ab,JMeter,Webbench,LoadRunner,http_load,tcpcopy&lt;/li&gt;
&lt;li&gt;带宽测试：smokeping&lt;/li&gt;
&lt;li&gt;性能测试：dd, fio(IOPS测试),iozone(磁盘测试)&lt;/li&gt;
&lt;li&gt;日志相关：rsyslog,Awstats,flume,storm,ELK(Elasticsearch+Logstash+Kibana)&lt;/li&gt;
&lt;li&gt;搜索软件：Sphinx,Xapian,Solr&lt;/li&gt;
&lt;li&gt;无人值守：kickstart,cobbler&lt;/li&gt;
&lt;li&gt;软件安装：rpm,yum（设计rpm包定制及yum仓库构建）&lt;/li&gt;
&lt;li&gt;大数据：HDFS,Hive,Hbase,Zookeeper,Pig,Spark,Mahout,flume,sqoop&lt;/li&gt;
&lt;li&gt;开发语言：Shell,Python,go&lt;/li&gt;
&lt;/ul&gt;            </description>
            <pubDate>2018-05-12 14:38:27</pubDate>
            <link>//blog/Notes.bak/%D4%CB%CE%AC%B9%A4%BE%DF%CC%E5%CF%B5.html</link>
            <guid isPermaLink="true">//blog/Notes.bak/%D4%CB%CE%AC%B9%A4%BE%DF%CC%E5%CF%B5.html</guid>
                                               <category>0-工具体系</category>
                                    </item>
                <item>
            <title>Linux运维人员必会开源运维工具体系</title>
            <description>
            &lt;!--
author: 王辉
head: http://blog.unuw.com/blog/logo.jpg
date: 2017-12-28
title: Linux运维人员必会开源运维工具体系
tags: 运维 工具
images: http://pingodata.qiniudn.com/cube2.jpg
category: 0-工具体系
status: publish
summary: Linux运维人员必会开源运维工具体系。
--&gt;
&lt;h1&gt;Linux运维人员必会开源运维工具体系&lt;/h1&gt;
&lt;p&gt;&lt;a href=&quot;http://oldboy.blog.51cto.com/2561410/775056/&quot;&gt;http://oldboy.blog.51cto.com/2561410/775056/&lt;/a&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;blockquote&gt;
&lt;p&gt;新手必会用深黄色（8-15k）标记，老鸟必会深黄色+浅蓝色(15-25K)标记&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;操作系统：Centos,Ubuntu,Redhat,suse,Freebsd&lt;/li&gt;
&lt;li&gt;网站服务：nginx,apache,lighttpd,php,tomcat,resin&lt;/li&gt;
&lt;li&gt;数据   库：MySQL,MariaDB,PostgreSQL&lt;/li&gt;
&lt;li&gt;DB中间件：maxscale,MyCat,atlas,cobar,amoeba,MySQL-proxy&lt;/li&gt;
&lt;li&gt;代理相关：lvs,keepalived,haproxy,nginx,heartbeat&lt;/li&gt;
&lt;li&gt;网站缓存：squid,nginx,varnish&lt;/li&gt;
&lt;li&gt;NOSQL库：Redis,Memcached,MongoDB,HBase,Cassandra,CouchDB&lt;/li&gt;
&lt;li&gt;存储相关：Nfs,FastDFS,Moosefs(mfs),Hadoop,glusterfs,lustre&lt;/li&gt;
&lt;li&gt;版本管理：svn,git&lt;/li&gt;
&lt;li&gt;监控报警：nagios,cacti,zabbix,munin,hyperic,mrtg,graphite&lt;/li&gt;
&lt;li&gt;域名解析：bind,powerdns,dnsmasq&lt;/li&gt;
&lt;li&gt;同步软件：scp,rsync,inotify,sersync,drbd&lt;/li&gt;
&lt;li&gt;批量管理：SSH,Ansible,Saltstack,expect,puppet&lt;/li&gt;
&lt;li&gt;虚拟   化：kvm,xen&lt;/li&gt;
&lt;li&gt;云计   算：openstack,docker,cloudstack&lt;/li&gt;
&lt;li&gt;内网软件：iptables,zebra,iftraf,ntop,tc,iftop&lt;/li&gt;
&lt;li&gt;邮件软件：qmail,posfix,sendmail,zimbra&lt;/li&gt;
&lt;li&gt;远程拨号：openvpn,pptp,openswan,ipip&lt;/li&gt;
&lt;li&gt;统一认证：openldap&lt;/li&gt;
&lt;li&gt;队列工具：ActiveMQ,RabbitMQ,Metaq,MemcacheQ,Zeromq&lt;/li&gt;
&lt;li&gt;打包发布：mvn,ants,jenkins&lt;/li&gt;
&lt;li&gt;测试软件：ab,JMeter,Webbench,LoadRunner,http_load,tcpcopy&lt;/li&gt;
&lt;li&gt;带宽测试：smokeping&lt;/li&gt;
&lt;li&gt;性能测试：dd, fio(IOPS测试),iozone(磁盘测试)&lt;/li&gt;
&lt;li&gt;日志相关：rsyslog,Awstats,flume,storm,ELK(Elasticsearch+Logstash+Kibana)&lt;/li&gt;
&lt;li&gt;搜索软件：Sphinx,Xapian,Solr&lt;/li&gt;
&lt;li&gt;无人值守：kickstart,cobbler&lt;/li&gt;
&lt;li&gt;软件安装：rpm,yum（设计rpm包定制及yum仓库构建）&lt;/li&gt;
&lt;li&gt;大数据：HDFS,Hive,Hbase,Zookeeper,Pig,Spark,Mahout,flume,sqoop&lt;/li&gt;
&lt;li&gt;开发语言：Shell,Python,go&lt;/li&gt;
&lt;/ul&gt;            </description>
            <pubDate>2019-04-11 08:20:49</pubDate>
            <link>//blog/Notes/%D4%CB%CE%AC%B9%A4%BE%DF%CC%E5%CF%B5.html</link>
            <guid isPermaLink="true">//blog/Notes/%D4%CB%CE%AC%B9%A4%BE%DF%CC%E5%CF%B5.html</guid>
                                               <category>0-工具体系</category>
                                    </item>
                <item>
            <title>GitBlog搭建</title>
            <description>
            &lt;!--
author: 王辉
head: http://blog.unuw.com/blog/logo.jpg
date: 2017-12-28
title: GitBlog搭建
tags: gitblog blog
images: http://pingodata.qiniudn.com/cube2.jpg
category: 31-博客商城等服务
status: publish
summary: GitBlog是一个简单易用的Markdown博客系统，它不需要数据库，没有管理后台功能，更新博客只需要添加你写好的Markdown文件即可。
--&gt;
&lt;h2&gt;一. 简介&lt;/h2&gt;
&lt;p&gt;GitBlog是一个简单易用的Markdown博客系统，它不需要数据库，没有管理后台功能，更新博客只需要添加你写好的Markdown文件即可。它摆脱了在线编辑器排版困难，无法实时预览的缺点，一切都交给Markdown来完成，一篇博客就是一个Markdown文件。同时也支持评论，代码高亮，数学公式，页面PV统计等常用功能。GitBlog提供了不同的主题样式，你可以根据自己的喜好配置，如果你想自己制作博客主题，也是非常容易的。GitBlog还支持整站静态导出，你完全可以导出整站静态网页部署到Github Pages。&lt;/p&gt;
&lt;h2&gt;二. 下载文件&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/jockchou/gitblog/releases&quot;&gt;https://github.com/jockchou/gitblog/releases&lt;/a&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;mkdir /data/
tar -xvf v2.3.2.tar.gz
ln -s gitblog-2.3.2 gitblog&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;三. 配置nginx、php环境&lt;/h2&gt;
&lt;h3&gt;安装&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;yum install php-fpm nginx -y
yum install php-mbstring -y&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;nginx配置&lt;/h3&gt;
&lt;p&gt;nginx.conf&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;user  nginx;
worker_processes  1;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;

events {
    worker_connections  1024;
}

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;
    log_format  main  '$remote_addr - $remote_user [$time_local] &quot;$request&quot; '
                      '$status $body_bytes_sent &quot;$http_referer&quot; '
                      '&quot;$http_user_agent&quot; &quot;$http_x_forwarded_for&quot;';

    access_log  /var/log/nginx/access.log  main;
    sendfile        on;
    #tcp_nopush     on;
    keepalive_timeout  65;
    gzip  on;
    server_tokens  off;
    include /etc/nginx/conf.d/*.conf;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;./conf.d/gitblog.conf&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;server {
        listen       80;
        server_name  *.unuw.com;
        root         /data/gitblog;
        index        index.html index.htm index.php;

        location ~ \.(jpg|png|gif|js|css|swf|flv|ico)$ {
                 expires 12h;
        }

        location / {
                if (!-e $request_filename) {
        rewrite ^(.*)$ /index.php?$1 last ;
        break;
                }
        }

        location ~* ^/(doc|logs|app|sys)/ {
                return 403;
        }

        location ~ .*\.(php|php5)?$
        {
                fastcgi_connect_timeout 300;
                fastcgi_send_timeout 300;
                fastcgi_read_timeout 300;
                fastcgi_pass   127.0.0.1:9000;
                fastcgi_index  index.php;
                fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
                include        fastcgi_params;
        }
}&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;启动服务&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;service nginx start  
service php-fpm start

chkconfig nginx on
chkconfig php-fpm on&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;四. 安装步骤&lt;/h2&gt;
&lt;h3&gt;配置gitblog&lt;/h3&gt;
&lt;p&gt;修改配置文件/data/gitblog/conf.yaml&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;#GitBlog配置文件，使用4个空格代替Tab
---
url: /
title: www.unuw.com
subtitle: GitBlog
theme: quest
enableCache: true
highlight: true
mathjax: false
katex: false
youyan:
baiduAnalytics:
keywords: GitBlog,博客,Markdown博客
description: &amp;gt;
    记录运维相关笔记的一个简单易用的Markdown博客
version: 2.2
author:
    name: 王辉
    email: wanghui3w@139.com
    github:
    weibo:
    avatar:
blog:
    recentSize: 5
    pageSize: 6
    pageBarSize: 5
    allBlogsForPage: false
text:
    title: 介绍
    intro: &amp;gt;
          本博客使用Gitblog搭建，欢迎你!&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;上传Markdown文件到&lt;code&gt;blog&lt;/code&gt;文件夹  &lt;/p&gt;            </description>
            <pubDate>2019-04-11 08:20:49</pubDate>
            <link>//blog/Notes/31-%B2%A9%BF%CD%C9%CC%B3%C7%B5%C8%B7%FE%CE%F1/gitblog.html</link>
            <guid isPermaLink="true">//blog/Notes/31-%B2%A9%BF%CD%C9%CC%B3%C7%B5%C8%B7%FE%CE%F1/gitblog.html</guid>
                                               <category>31-博客商城等服务</category>
                                    </item>
                <item>
            <title>GitBlog搭建</title>
            <description>
            &lt;!--
author: 王辉
head: http://blog.unuw.com/blog/logo.jpg
date: 2017-12-28
title: GitBlog搭建
tags: gitblog blog
images: http://pingodata.qiniudn.com/cube2.jpg
category: 31-博客商城等服务
status: publish
summary: GitBlog是一个简单易用的Markdown博客系统，它不需要数据库，没有管理后台功能，更新博客只需要添加你写好的Markdown文件即可。
--&gt;
&lt;h2&gt;一. 简介&lt;/h2&gt;
&lt;p&gt;GitBlog是一个简单易用的Markdown博客系统，它不需要数据库，没有管理后台功能，更新博客只需要添加你写好的Markdown文件即可。它摆脱了在线编辑器排版困难，无法实时预览的缺点，一切都交给Markdown来完成，一篇博客就是一个Markdown文件。同时也支持评论，代码高亮，数学公式，页面PV统计等常用功能。GitBlog提供了不同的主题样式，你可以根据自己的喜好配置，如果你想自己制作博客主题，也是非常容易的。GitBlog还支持整站静态导出，你完全可以导出整站静态网页部署到Github Pages。&lt;/p&gt;
&lt;h2&gt;二. 下载文件&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/jockchou/gitblog/releases&quot;&gt;https://github.com/jockchou/gitblog/releases&lt;/a&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;mkdir /data/
tar -xvf v2.3.2.tar.gz
ln -s gitblog-2.3.2 gitblog&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;三. 配置nginx、php环境&lt;/h2&gt;
&lt;h3&gt;安装&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;yum install php-fpm nginx -y
yum install php-mbstring -y&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;nginx配置&lt;/h3&gt;
&lt;p&gt;nginx.conf&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;user  nginx;
worker_processes  1;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;

events {
    worker_connections  1024;
}

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;
    log_format  main  '$remote_addr - $remote_user [$time_local] &quot;$request&quot; '
                      '$status $body_bytes_sent &quot;$http_referer&quot; '
                      '&quot;$http_user_agent&quot; &quot;$http_x_forwarded_for&quot;';

    access_log  /var/log/nginx/access.log  main;
    sendfile        on;
    #tcp_nopush     on;
    keepalive_timeout  65;
    gzip  on;
    server_tokens  off;
    include /etc/nginx/conf.d/*.conf;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;./conf.d/gitblog.conf&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;server {
        listen       80;
        server_name  *.unuw.com;
        root         /data/gitblog;
        index        index.html index.htm index.php;

        location ~ \.(jpg|png|gif|js|css|swf|flv|ico)$ {
                 expires 12h;
        }

        location / {
                if (!-e $request_filename) {
        rewrite ^(.*)$ /index.php?$1 last ;
        break;
                }
        }

        location ~* ^/(doc|logs|app|sys)/ {
                return 403;
        }

        location ~ .*\.(php|php5)?$
        {
                fastcgi_connect_timeout 300;
                fastcgi_send_timeout 300;
                fastcgi_read_timeout 300;
                fastcgi_pass   127.0.0.1:9000;
                fastcgi_index  index.php;
                fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
                include        fastcgi_params;
        }
}&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;启动服务&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;service nginx start  
service php-fpm start

chkconfig nginx on
chkconfig php-fpm on&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;四. 安装步骤&lt;/h2&gt;
&lt;h3&gt;配置gitblog&lt;/h3&gt;
&lt;p&gt;修改配置文件/data/gitblog/conf.yaml&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;#GitBlog配置文件，使用4个空格代替Tab
---
url: /
title: www.unuw.com
subtitle: GitBlog
theme: quest
enableCache: true
highlight: true
mathjax: false
katex: false
youyan:
baiduAnalytics:
keywords: GitBlog,博客,Markdown博客
description: &amp;gt;
    记录运维相关笔记的一个简单易用的Markdown博客
version: 2.2
author:
    name: 王辉
    email: wanghui3w@139.com
    github:
    weibo:
    avatar:
blog:
    recentSize: 5
    pageSize: 6
    pageBarSize: 5
    allBlogsForPage: false
text:
    title: 介绍
    intro: &amp;gt;
          本博客使用Gitblog搭建，欢迎你!&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;上传Markdown文件到&lt;code&gt;blog&lt;/code&gt;文件夹  &lt;/p&gt;            </description>
            <pubDate>2018-05-12 14:38:27</pubDate>
            <link>//blog/Notes.bak/31-%B2%A9%BF%CD%C9%CC%B3%C7%B5%C8%B7%FE%CE%F1/gitblog.html</link>
            <guid isPermaLink="true">//blog/Notes.bak/31-%B2%A9%BF%CD%C9%CC%B3%C7%B5%C8%B7%FE%CE%F1/gitblog.html</guid>
                                               <category>31-博客商城等服务</category>
                                    </item>
                <item>
            <title>vim的常用命令</title>
            <description>
            &lt;!--
author: 王辉
head: http://blog.unuw.com/blog/logo.jpg
date: 2017-12-28
title: vim的常用命令
tags: vim
images: http://blog.unuw.com/blog/logo.jpg
category: 30-文本编辑
status: publish
summary: vim的常用命令。
--&gt;
&lt;h2&gt;插入命令：&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;a 光标后加入文本
A 本行末尾加入文本
i 光标前加入文本
I 本行开始加入文本
o 光标下加入新行
O 光标上加入新行&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;移动命令&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;h 左移
j 下移
k 上移
l 右移
$ 行尾
0 行首
H 屏幕上端
M 屏幕中央
L 屏幕下端

gg 第一行
G  最后一行
nG 第n行
：n 第n行&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;:paste 粘贴模式&lt;/p&gt;
&lt;h2&gt;查找命令&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;/text　　查找text，按n健查找下一个，按N健查找前一个。
?text　　查找text，反向查找，按n健查找下一个，按N健查找前一个。
vim中有一些特殊字符在查找时需要转义　　.*[]^%/?~$
:set ignorecase　　忽略大小写的查找
:set noignorecase　　不忽略大小写的查找
查找很长的词，如果一个词很长，键入麻烦，可以将光标移动到该词上，按*或#键即可以该单词进行搜索，相当于/搜索。而#命令相当于?搜索。
:set hlsearch　　高亮搜索结果，所有结果都高亮显示，而不是只显示一个匹配。
:set nohlsearch　　关闭高亮搜索显示
:nohlsearch　　关闭当前的高亮显示，如果再次搜索或者按下n或N键，则会再次高亮。
:set incsearch　　逐步搜索模式，对当前键入的字符进行搜索而不必等待键入完成。
:set wrapscan　　重新搜索，在搜索到文件头或尾时，返回继续搜索，默认开启。&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;替换命令&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;ra 将当前字符替换为a，当期字符即光标所在字符。
s/old/new/ 用old替换new，替换当前行的第一个匹配
s/old/new/g 用old替换new，替换当前行的所有匹配
%s/old/new/ 用old替换new，替换所有行的第一个匹配
%s/old/new/g 用old替换new，替换整个文件的所有匹配
:10,20 s/^/    /g 在第10行知第20行每行前面加四个空格，用于缩进。
ddp 交换光标所在行和其下紧邻的一行。&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;块编辑&lt;/h2&gt;
&lt;p&gt;Ctrl+v&lt;/p&gt;            </description>
            <pubDate>2018-05-12 14:38:27</pubDate>
            <link>//blog/Notes.bak/30-%CE%C4%B1%BE%B1%E0%BC%AD/vim/vim.html</link>
            <guid isPermaLink="true">//blog/Notes.bak/30-%CE%C4%B1%BE%B1%E0%BC%AD/vim/vim.html</guid>
                                               <category>30-文本编辑</category>
                                    </item>
                <item>
            <title>vim的常用命令</title>
            <description>
            &lt;!--
author: 王辉
head: http://blog.unuw.com/blog/logo.jpg
date: 2017-12-28
title: vim的常用命令
tags: vim
images: http://blog.unuw.com/blog/logo.jpg
category: 30-文本编辑
status: publish
summary: vim的常用命令。
--&gt;
&lt;h2&gt;插入命令：&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;a 光标后加入文本
A 本行末尾加入文本
i 光标前加入文本
I 本行开始加入文本
o 光标下加入新行
O 光标上加入新行&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;移动命令&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;h 左移
j 下移
k 上移
l 右移
$ 行尾
0 行首
H 屏幕上端
M 屏幕中央
L 屏幕下端

gg 第一行
G  最后一行
nG 第n行
：n 第n行&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;:paste 粘贴模式&lt;/p&gt;
&lt;h2&gt;查找命令&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;/text　　查找text，按n健查找下一个，按N健查找前一个。
?text　　查找text，反向查找，按n健查找下一个，按N健查找前一个。
vim中有一些特殊字符在查找时需要转义　　.*[]^%/?~$
:set ignorecase　　忽略大小写的查找
:set noignorecase　　不忽略大小写的查找
查找很长的词，如果一个词很长，键入麻烦，可以将光标移动到该词上，按*或#键即可以该单词进行搜索，相当于/搜索。而#命令相当于?搜索。
:set hlsearch　　高亮搜索结果，所有结果都高亮显示，而不是只显示一个匹配。
:set nohlsearch　　关闭高亮搜索显示
:nohlsearch　　关闭当前的高亮显示，如果再次搜索或者按下n或N键，则会再次高亮。
:set incsearch　　逐步搜索模式，对当前键入的字符进行搜索而不必等待键入完成。
:set wrapscan　　重新搜索，在搜索到文件头或尾时，返回继续搜索，默认开启。&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;替换命令&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;ra 将当前字符替换为a，当期字符即光标所在字符。
s/old/new/ 用old替换new，替换当前行的第一个匹配
s/old/new/g 用old替换new，替换当前行的所有匹配
%s/old/new/ 用old替换new，替换所有行的第一个匹配
%s/old/new/g 用old替换new，替换整个文件的所有匹配
:10,20 s/^/    /g 在第10行知第20行每行前面加四个空格，用于缩进。
ddp 交换光标所在行和其下紧邻的一行。&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;块编辑&lt;/h2&gt;
&lt;p&gt;Ctrl+v&lt;/p&gt;            </description>
            <pubDate>2019-04-11 08:20:49</pubDate>
            <link>//blog/Notes/30-%CE%C4%B1%BE%B1%E0%BC%AD/vim/vim.html</link>
            <guid isPermaLink="true">//blog/Notes/30-%CE%C4%B1%BE%B1%E0%BC%AD/vim/vim.html</guid>
                                               <category>30-文本编辑</category>
                                    </item>
                <item>
            <title>Atom MarkDown 插件</title>
            <description>
            &lt;!--
author: 王辉
head: http://blog.unuw.com/blog/logo.jpg
date: 2017-12-28
title: Atom MarkDown 插件
tags: Atom MarkDown 插件
images: http://blog.unuw.com/blog/logo.jpg
category: 30-文本编辑
status: publish
summary: Atom MarkDown 插件的安装。
--&gt;
&lt;h1&gt;Atom MarkDown 插件&lt;/h1&gt;
&lt;h3&gt;增强预览(markdown-preview-plus)&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;Atom自带的Markdown预览插件markdown-preview功能比较简单，markdown-preview-plus对其做了功能扩展和增强。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;支持预览实时渲染。(Ctrl + Shift + M)&lt;/li&gt;
&lt;li&gt;支持Latex公式。(Ctrl + Shift + X)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;使用该插件前，需要先禁用markdown-preview。&lt;/strong&gt;&lt;/p&gt;            </description>
            <pubDate>2019-04-11 08:20:49</pubDate>
            <link>//blog/Notes/30-%CE%C4%B1%BE%B1%E0%BC%AD/MarkDown/MarkDown.html</link>
            <guid isPermaLink="true">//blog/Notes/30-%CE%C4%B1%BE%B1%E0%BC%AD/MarkDown/MarkDown.html</guid>
                                               <category>30-文本编辑</category>
                                    </item>
                <item>
            <title>Atom MarkDown 插件</title>
            <description>
            &lt;!--
author: 王辉
head: http://blog.unuw.com/blog/logo.jpg
date: 2017-12-28
title: Atom MarkDown 插件
tags: Atom MarkDown 插件
images: http://blog.unuw.com/blog/logo.jpg
category: 30-文本编辑
status: publish
summary: Atom MarkDown 插件的安装。
--&gt;
&lt;h1&gt;Atom MarkDown 插件&lt;/h1&gt;
&lt;h3&gt;增强预览(markdown-preview-plus)&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;Atom自带的Markdown预览插件markdown-preview功能比较简单，markdown-preview-plus对其做了功能扩展和增强。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;支持预览实时渲染。(Ctrl + Shift + M)&lt;/li&gt;
&lt;li&gt;支持Latex公式。(Ctrl + Shift + X)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;使用该插件前，需要先禁用markdown-preview。&lt;/strong&gt;&lt;/p&gt;            </description>
            <pubDate>2018-05-12 14:38:27</pubDate>
            <link>//blog/Notes.bak/30-%CE%C4%B1%BE%B1%E0%BC%AD/MarkDown/MarkDown.html</link>
            <guid isPermaLink="true">//blog/Notes.bak/30-%CE%C4%B1%BE%B1%E0%BC%AD/MarkDown/MarkDown.html</guid>
                                               <category>30-文本编辑</category>
                                    </item>
                <item>
            <title>piwik部署</title>
            <description>
            &lt;!--
author: 王辉
head: http://blog.unuw.com/blog/logo.jpg
date: 2017-12-28
title: piwik部署
tags: piwik
images: http://blog.unuw.com/blog/logo.jpg
category: 23-日志相关
status: publish
summary: Piwik是一个PHP和MySQL的开放源代码的Web统计软件. 它给你一些关于你的网站的实用统计报告，比如网页浏览人数, 访问最多的页面, 搜索引擎关键词等等… Piwik拥有众多不同功能的插件，你可以添加新的功能或是移除你不需要的功能，Piwik同样可以安装在你的服务器上面，数据就保存在你自己的服务器上面。你可以非常容易的插入统计图表到你的博客或是网站抑或是后台的控制面板中。安装完成后，你只需将一小段代码放到将要统计的网页中即可。
--&gt;
&lt;h1&gt;piwik部署&lt;/h1&gt;
&lt;h2&gt;下载&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;http://php.net/downloads.php&quot;&gt;http://php.net/downloads.php&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://nginx.org/&quot;&gt;http://nginx.org/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://piwik.org/&quot;&gt;https://piwik.org/&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;环境准备&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;../../02-网站服务/nginx/nginx.md&quot;&gt;搭建nginx+php环境&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;../../03-数据库/mysql/mysql-win.md&quot;&gt;搭建mysql环境&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;部署&lt;/h2&gt;
&lt;h3&gt;解压至piwik至发布目录&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;D:\app\piwik&lt;/code&gt;&lt;/p&gt;
&lt;h3&gt;修改hosts文件&lt;/h3&gt;
&lt;p&gt;配置hosts文件&lt;code&gt;127.0.0.1  piwik.abcd.com&lt;/code&gt;&lt;/p&gt;
&lt;h3&gt;修改nginx.conf文件&lt;/h3&gt;
&lt;p&gt;应用访问配置：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;#HTTPS server

server {
    listen       443 ssl;
    server_name  piwik.abcd.com;

    ssl_certificate      keys/abcd.crt;
    ssl_certificate_key  keys/abcd_nopass.key;

    ssl_session_cache    shared:SSL:1m;
    ssl_session_timeout  5m;

    ssl_ciphers  HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers  on;

    location / {
        root   D:/app/piwik;
        index  index.html index.htm index.php;
    }
    location ~ \.php$ {
        root           html;
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  D:/app/piwik$fastcgi_script_name;
        include        fastcgi_params;
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;为了防止外部用户访问应用，专门发布一个对外站点收集客户端信息，仅允许访问&lt;code&gt;piwik.js&lt;/code&gt;、&lt;code&gt;piwik.php&lt;/code&gt;,配置如下：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;#HTTP server

server {
listen       7003;
    server_name  piwik.abcd.com;

    location  / {
        root   html/piwik;
        index  index.html index.htm index.php;
    }
location  ~/piwik.js {
        root   D:/app/piwik;
        index  index.html index.htm index.php;
    }
location ~piwik\.php {
        #root           html/piwik;
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  D:/app/piwik$fastcgi_script_name;
        include        fastcgi_params;
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;mysql 配置&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;mysql -uroot -p
create database piwik;
create user 'piwik'@'%' identified by 'wanghui';
grant all on piwik.* to 'piwik'@'localhost' identified by 'wanghui';
grant all on piwik.* to 'piwik'@'%' identified by 'wanghui';&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;配置piwik&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;访问&lt;code&gt;https://piwik.abcd.com/index.php&lt;/code&gt;
&lt;img src=&quot;./piwik-win/piwik-01.png&quot; alt=&quot;欢迎页&quot; /&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;检查系统
按照检查配置进行修改
&lt;img src=&quot;./piwik-win/piwik-02.png&quot; alt=&quot;系统检查&quot; /&gt;
检查中提示&lt;code&gt;mbstring.func_overload设置为&quot;0&quot;&lt;/code&gt;，同时需要设置 &lt;code&gt;extension=php_mbstring.dll&lt;/code&gt;,否则不会生效。其他系统如下：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;windows平台：
修改php.ini文件，去掉 ;extension=php_mbstring.dll 前面的分号。
unix平台：
打开/etc/php.ini
把 ;extension=php_mbstring.so 改成 extension=php_mbstring.so 。&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;配置&lt;code&gt;GD &amp;gt; 2.x + Freetype (graphics)&lt;/code&gt;，修改php.ini&lt;code&gt;extension=php_gd2.dll&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;配置数据库
&lt;img src=&quot;./piwik-win/piwik-03.png&quot; alt=&quot;数据库配置&quot; /&gt;&lt;/li&gt;
&lt;li&gt;设置超级用户
&lt;img src=&quot;./piwik-win/piwik-04.png&quot; alt=&quot;设置超级用户&quot; /&gt;&lt;/li&gt;
&lt;li&gt;设定站点&lt;/li&gt;
&lt;li&gt;生成跟踪代码
&lt;pre&gt;&lt;code&gt;&amp;lt;!-- Piwik --&amp;gt;
&amp;lt;script type=&quot;text/javascript&quot;&amp;gt;
var _paq = _paq || [];
/* tracker methods like &quot;setCustomDimension&quot; should be called before &quot;trackPageView&quot; */
_paq.push(['trackPageView']);
_paq.push(['enableLinkTracking']);
(function() {
var u=&quot;//piwik.abcd.com/&quot;;
_paq.push(['setTrackerUrl', u+'piwik.php']);
_paq.push(['setSiteId', '1']);
var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];
g.type='text/javascript'; g.async=true; g.defer=true; g.src=u+'piwik.js'; s.parentNode.insertBefore(g,s);
})();
&amp;lt;/script&amp;gt;
&amp;lt;!-- End Piwik Code --&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;更新geoip地址库&lt;/h3&gt;
&lt;h4&gt;下载geoip地址库&lt;/h4&gt;
&lt;p&gt;&lt;a href=&quot;http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz&quot;&gt;http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;解压缩，重命名为&lt;code&gt;GeoIPCity.dat&lt;/code&gt;，拷贝至&lt;code&gt;D:\app\piwik\misc&lt;/code&gt;。&lt;/p&gt;
&lt;h4&gt;下载windows版本gphp_eoip.dll&lt;/h4&gt;
&lt;p&gt;&lt;a href=&quot;http://windows.php.net/downloads/pecl/releases/geoip/1.1.1/&quot;&gt;http://windows.php.net/downloads/pecl/releases/geoip/1.1.1/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;解压缩后，拷贝&lt;code&gt;php_geoip.pdb&lt;/code&gt;、&lt;code&gt;php_geoip.dll&lt;/code&gt;至&lt;code&gt;D:\app\php-5.6.31-nts-Win32-VC11-x64\ext&lt;/code&gt;。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;PECL扩展&lt;/p&gt;
&lt;p&gt;&lt;code&gt;http://windows.php.net/downloads/pecl/releases/&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h4&gt;配置php.ini&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;extension=php_geoip.dll
[geoip]
geoip.custom_directory = D:\\app\\piwik\\misc&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;重启php
&lt;code&gt;D:\app&amp;gt;D:\app\php-5.6.31-nts-Win32-VC11-x64\php-cgi.exe -b 127.0.0.1:9000 -c D:\app\php-5.6.31-nts-Win32-VC11-x64\php.ini&lt;/code&gt;&lt;/p&gt;
&lt;h4&gt;选择Geoip库&lt;/h4&gt;
&lt;p&gt;&lt;img src=&quot;./piwik-win/piwik-05.png&quot; alt=&quot;选择Geoip库&quot; /&gt;&lt;/p&gt;            </description>
            <pubDate>2019-04-11 08:20:49</pubDate>
            <link>//blog/Notes/23-%C8%D5%D6%BE%CF%E0%B9%D8/piwik/piwik-win.html</link>
            <guid isPermaLink="true">//blog/Notes/23-%C8%D5%D6%BE%CF%E0%B9%D8/piwik/piwik-win.html</guid>
                                               <category>23-日志相关</category>
                                    </item>
                <item>
            <title>piwik部署</title>
            <description>
            &lt;!--
author: 王辉
head: http://blog.unuw.com/blog/logo.jpg
date: 2017-12-28
title: piwik部署
tags: piwik
images: http://blog.unuw.com/blog/logo.jpg
category: 23-日志相关
status: publish
summary: Piwik是一个PHP和MySQL的开放源代码的Web统计软件. 它给你一些关于你的网站的实用统计报告，比如网页浏览人数, 访问最多的页面, 搜索引擎关键词等等… Piwik拥有众多不同功能的插件，你可以添加新的功能或是移除你不需要的功能，Piwik同样可以安装在你的服务器上面，数据就保存在你自己的服务器上面。你可以非常容易的插入统计图表到你的博客或是网站抑或是后台的控制面板中。安装完成后，你只需将一小段代码放到将要统计的网页中即可。
--&gt;
&lt;h1&gt;piwik部署&lt;/h1&gt;
&lt;h2&gt;下载&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;http://php.net/downloads.php&quot;&gt;http://php.net/downloads.php&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://nginx.org/&quot;&gt;http://nginx.org/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://piwik.org/&quot;&gt;https://piwik.org/&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;环境准备&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;../../02-网站服务/nginx/nginx.md&quot;&gt;搭建nginx+php环境&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;../../03-数据库/mysql/mysql-win.md&quot;&gt;搭建mysql环境&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;部署&lt;/h2&gt;
&lt;h3&gt;解压至piwik至发布目录&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;D:\app\piwik&lt;/code&gt;&lt;/p&gt;
&lt;h3&gt;修改hosts文件&lt;/h3&gt;
&lt;p&gt;配置hosts文件&lt;code&gt;127.0.0.1  piwik.abcd.com&lt;/code&gt;&lt;/p&gt;
&lt;h3&gt;修改nginx.conf文件&lt;/h3&gt;
&lt;p&gt;应用访问配置：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;#HTTPS server

server {
    listen       443 ssl;
    server_name  piwik.abcd.com;

    ssl_certificate      keys/abcd.crt;
    ssl_certificate_key  keys/abcd_nopass.key;

    ssl_session_cache    shared:SSL:1m;
    ssl_session_timeout  5m;

    ssl_ciphers  HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers  on;

    location / {
        root   D:/app/piwik;
        index  index.html index.htm index.php;
    }
    location ~ \.php$ {
        root           html;
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  D:/app/piwik$fastcgi_script_name;
        include        fastcgi_params;
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;为了防止外部用户访问应用，专门发布一个对外站点收集客户端信息，仅允许访问&lt;code&gt;piwik.js&lt;/code&gt;、&lt;code&gt;piwik.php&lt;/code&gt;,配置如下：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;#HTTP server

server {
listen       7003;
    server_name  piwik.abcd.com;

    location  / {
        root   html/piwik;
        index  index.html index.htm index.php;
    }
location  ~/piwik.js {
        root   D:/app/piwik;
        index  index.html index.htm index.php;
    }
location ~piwik\.php {
        #root           html/piwik;
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  D:/app/piwik$fastcgi_script_name;
        include        fastcgi_params;
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;mysql 配置&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;mysql -uroot -p
create database piwik;
create user 'piwik'@'%' identified by 'wanghui';
grant all on piwik.* to 'piwik'@'localhost' identified by 'wanghui';
grant all on piwik.* to 'piwik'@'%' identified by 'wanghui';&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;配置piwik&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;访问&lt;code&gt;https://piwik.abcd.com/index.php&lt;/code&gt;
&lt;img src=&quot;./piwik-win/piwik-01.png&quot; alt=&quot;欢迎页&quot; /&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;检查系统
按照检查配置进行修改
&lt;img src=&quot;./piwik-win/piwik-02.png&quot; alt=&quot;系统检查&quot; /&gt;
检查中提示&lt;code&gt;mbstring.func_overload设置为&quot;0&quot;&lt;/code&gt;，同时需要设置 &lt;code&gt;extension=php_mbstring.dll&lt;/code&gt;,否则不会生效。其他系统如下：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;windows平台：
修改php.ini文件，去掉 ;extension=php_mbstring.dll 前面的分号。
unix平台：
打开/etc/php.ini
把 ;extension=php_mbstring.so 改成 extension=php_mbstring.so 。&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;配置&lt;code&gt;GD &amp;gt; 2.x + Freetype (graphics)&lt;/code&gt;，修改php.ini&lt;code&gt;extension=php_gd2.dll&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;配置数据库
&lt;img src=&quot;./piwik-win/piwik-03.png&quot; alt=&quot;数据库配置&quot; /&gt;&lt;/li&gt;
&lt;li&gt;设置超级用户
&lt;img src=&quot;./piwik-win/piwik-04.png&quot; alt=&quot;设置超级用户&quot; /&gt;&lt;/li&gt;
&lt;li&gt;设定站点&lt;/li&gt;
&lt;li&gt;生成跟踪代码
&lt;pre&gt;&lt;code&gt;&amp;lt;!-- Piwik --&amp;gt;
&amp;lt;script type=&quot;text/javascript&quot;&amp;gt;
var _paq = _paq || [];
/* tracker methods like &quot;setCustomDimension&quot; should be called before &quot;trackPageView&quot; */
_paq.push(['trackPageView']);
_paq.push(['enableLinkTracking']);
(function() {
var u=&quot;//piwik.abcd.com/&quot;;
_paq.push(['setTrackerUrl', u+'piwik.php']);
_paq.push(['setSiteId', '1']);
var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];
g.type='text/javascript'; g.async=true; g.defer=true; g.src=u+'piwik.js'; s.parentNode.insertBefore(g,s);
})();
&amp;lt;/script&amp;gt;
&amp;lt;!-- End Piwik Code --&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;更新geoip地址库&lt;/h3&gt;
&lt;h4&gt;下载geoip地址库&lt;/h4&gt;
&lt;p&gt;&lt;a href=&quot;http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz&quot;&gt;http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;解压缩，重命名为&lt;code&gt;GeoIPCity.dat&lt;/code&gt;，拷贝至&lt;code&gt;D:\app\piwik\misc&lt;/code&gt;。&lt;/p&gt;
&lt;h4&gt;下载windows版本gphp_eoip.dll&lt;/h4&gt;
&lt;p&gt;&lt;a href=&quot;http://windows.php.net/downloads/pecl/releases/geoip/1.1.1/&quot;&gt;http://windows.php.net/downloads/pecl/releases/geoip/1.1.1/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;解压缩后，拷贝&lt;code&gt;php_geoip.pdb&lt;/code&gt;、&lt;code&gt;php_geoip.dll&lt;/code&gt;至&lt;code&gt;D:\app\php-5.6.31-nts-Win32-VC11-x64\ext&lt;/code&gt;。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;PECL扩展&lt;/p&gt;
&lt;p&gt;&lt;code&gt;http://windows.php.net/downloads/pecl/releases/&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h4&gt;配置php.ini&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;extension=php_geoip.dll
[geoip]
geoip.custom_directory = D:\\app\\piwik\\misc&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;重启php
&lt;code&gt;D:\app&amp;gt;D:\app\php-5.6.31-nts-Win32-VC11-x64\php-cgi.exe -b 127.0.0.1:9000 -c D:\app\php-5.6.31-nts-Win32-VC11-x64\php.ini&lt;/code&gt;&lt;/p&gt;
&lt;h4&gt;选择Geoip库&lt;/h4&gt;
&lt;p&gt;&lt;img src=&quot;./piwik-win/piwik-05.png&quot; alt=&quot;选择Geoip库&quot; /&gt;&lt;/p&gt;            </description>
            <pubDate>2018-05-12 14:38:27</pubDate>
            <link>//blog/Notes.bak/23-%C8%D5%D6%BE%CF%E0%B9%D8/piwik/piwik-win.html</link>
            <guid isPermaLink="true">//blog/Notes.bak/23-%C8%D5%D6%BE%CF%E0%B9%D8/piwik/piwik-win.html</guid>
                                               <category>23-日志相关</category>
                                    </item>
                <item>
            <title>ELK部署</title>
            <description>
            &lt;!--
author: 王辉
head: http://blog.unuw.com/blog/logo.jpg
date: 2017-12-28
title: ELK部署
tags: elk elasticsearch logstash kibana
images: http://blog.unuw.com/blog/logo.jpg
category: 23-日志相关
status: publish
summary: 使用bind搭建dns。
--&gt;
&lt;h1&gt;Elasticsearch 部署&lt;/h1&gt;
&lt;p&gt;&lt;a href=&quot;https://www.unixhot.com/article/59&quot;&gt;https://www.unixhot.com/article/59&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;安装JDK&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;[root@ww1 ~]# yum install -y java
[root@ww1 ~]# java -version
openjdk version &quot;1.8.0_65&quot;
OpenJDK Runtime Environment (build 1.8.0_65-b17)
OpenJDK 64-Bit Server VM (build 25.65-b01, mixed mode)&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;YUM安装ElasticSearch&lt;/h2&gt;
&lt;h3&gt;1.下载并安装GPG key&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;[root@ww1 ~]# rpm --import https://packages.elastic.co/GPG-KEY-elasticsearch&lt;/code&gt;&lt;/p&gt;
&lt;h3&gt;2.添加yum仓库&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;[root@ww1 ~]# vim /etc/yum.repos.d/elasticsearch.repo
[elasticsearch-2.x]
name=Elasticsearch repository for 2.x packages
baseurl=http://packages.elastic.co/elasticsearch/2.x/centos
gpgcheck=1
gpgkey=http://packages.elastic.co/GPG-KEY-elasticsearch
enabled=1&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;3.安装elasticsearch&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;[root@hadoop-node1 ~]# yum install -y elasticsearch&lt;/code&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;[root@ww1 elasticsearch]# grep '^[a-z]' elasticsearch.yml
cluster.name: escls
node.name: el-node-01
path.data: /elk_data/data
path.logs: /elk_data/logs
bootstrap.memory_lock: true
network.host: 192.168.116.101
http.port: 9200
[root@ww1 elasticsearch]# systemctl restart elasticsearch.service
[root@ww1 elasticsearch]# netstat -nltp|grep 9200
tcp6       0      0 192.168.116.101:9200    :::*                    LISTEN      4086/java           
[root@ww1 elasticsearch]#&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;** 注意权限，之前因为日志目录属性不对，导致无法启动&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;[root@ww1 elasticsearch]# chown -R elasticsearch:elasticsearch /elk_data
[root@ww1 elasticsearch]# ll /elk_data/
drwxr-xr-x. 2 elasticsearch elasticsearch 6 10?27 14:40 data
drwxr-xr-x. 2 elasticsearch elasticsearch 6 10?27 14:40 logs
[root@ww1 elasticsearch]# cd /elk_data/&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;测试elasticsearch&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;[root@ww1 elasticsearch]# curl http://192.168.116.101:9200
{
  &quot;name&quot; : &quot;el-node-01&quot;,
  &quot;cluster_name&quot; : &quot;escls&quot;,
  &quot;cluster_uuid&quot; : &quot;f-W7UrSUSv2jPOCn0VKE-w&quot;,
  &quot;version&quot; : {
    &quot;number&quot; : &quot;2.4.6&quot;,
    &quot;build_hash&quot; : &quot;5376dca9f70f3abef96a77f4bb22720ace8240fd&quot;,
    &quot;build_timestamp&quot; : &quot;2017-07-18T12:17:44Z&quot;,
    &quot;build_snapshot&quot; : false,
    &quot;lucene_version&quot; : &quot;5.5.4&quot;
  },
  &quot;tagline&quot; : &quot;You Know, for Search&quot;
}
[root@ww1 elasticsearch]#
[root@ww1 elasticsearch]# curl -i -XGET 'http://192.168.116.101:9200/_count?'
HTTP/1.1 200 OK
Content-Type: application/json; charset=UTF-8
Content-Length: 59

{&quot;count&quot;:0,&quot;_shards&quot;:{&quot;total&quot;:0,&quot;successful&quot;:0,&quot;failed&quot;:0}}[root@ww1 elasticsearch]#&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;安装Head插件，集群管理&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;[root@ww1 bin]# ./plugin install mobz/elasticsearch-head
-&amp;gt; Installing mobz/elasticsearch-head...
Trying https://github.com/mobz/elasticsearch-head/archive/master.zip ...
Downloading ............................................................................DONE
Verifying https://github.com/mobz/elasticsearch-head/archive/master.zip checksums if available ...
NOTE: Unable to verify checksum for downloaded plugin (unable to find .sha1 or .md5 file to verify)
Installed head into /usr/share/elasticsearch/plugins/head
[root@ww1 bin]#
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;a href=&quot;http://192.168.116.101:9200/_plugin/head/&quot;&gt;http://192.168.116.101:9200/_plugin/head/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;安装kopf插件&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;[root@ww1 bin]# ./plugin install lmenezes/elasticsearch-kopf
-&amp;gt; Installing lmenezes/elasticsearch-kopf...
Trying https://github.com/lmenezes/elasticsearch-kopf/archive/master.zip ...
Downloading ..............................................................................DONE
Verifying https://github.com/lmenezes/elasticsearch-kopf/archive/master.zip checksums if available ...
NOTE: Unable to verify checksum for downloaded plugin (unable to find .sha1 or .md5 file to verify)
Installed kopf into /usr/share/elasticsearch/plugins/kopf
[root@ww1 bin]#

http://192.168.116.101:9200/_plugin/kopf/#!/cluster&lt;/code&gt;&lt;/pre&gt;
&lt;h1&gt;LogStash部署与配置&lt;/h1&gt;
&lt;h2&gt;安装JDK&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;[root@ww1 ~]# yum install -y java
[root@ww1 ~]# java -version
openjdk version &quot;1.8.0_65&quot;
OpenJDK Runtime Environment (build 1.8.0_65-b17)
OpenJDK 64-Bit Server VM (build 25.65-b01, mixed mode)&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;YUM部署LogStash&lt;/h2&gt;
&lt;h3&gt;1.下载并安装GPG key&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;[root@ww2 ~]# rpm --import https://packages.elastic.co/GPG-KEY-elasticsearch&lt;/code&gt;&lt;/p&gt;
&lt;h3&gt;2.添加yum仓库&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;[root@linux-node2 ~]# vim /etc/yum.repos.d/logstash.repo
[logstash-2.3]
name=Logstash repository for 2.3.x packages
baseurl=https://packages.elastic.co/logstash/2.3/centos
gpgcheck=1
gpgkey=https://packages.elastic.co/GPG-KEY-elasticsearch
enabled=1&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;3.安装logstash&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;[root@ww2 ~]# yum install -y logstash&lt;/code&gt;&lt;/p&gt;
&lt;h1&gt;Kibana简介&lt;/h1&gt;
&lt;h2&gt;Yum安装Kibana&lt;/h2&gt;
&lt;h3&gt;1.下载并安装GPG key&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;[root@ww2 ~]# rpm --import https://packages.elastic.co/GPG-KEY-elasticsearch&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;2.添加yum仓库&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;[root@ww2 ~]# vim /etc/yum.repos.d/kibana.repo
[kibana-4.5]
name=Kibana repository for 4.5.x packages
baseurl=http://packages.elastic.co/kibana/4.5/centos
gpgcheck=1
gpgkey=http://packages.elastic.co/GPG-KEY-elasticsearch
enabled=1&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;3.安装kibana&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;[root@ww2 ~]# yum install -y kibana&lt;/code&gt;&lt;/pre&gt;
&lt;h1&gt;使用Cobbler创建ELKStack仓库&lt;/h1&gt;
&lt;p&gt;当然生产环境，肯定不能使用外网的YUM仓库，可以使用Cobbler来创建自己的yum仓库。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;[root@log-node1 ~]# cobbler repo add --name=logstash-2.3 --mirror=http://packages.elastic.co/logstash/2.3/centos --arch=x86_64 --breed=yum
[root@log-node1 ~]# cobbler repo add --name=elasticsearch2 --mirror=http://packages.elastic.co/elasticsearch/2.x/centos --arch=x86_64 --breed=yum
[root@log-node1 ~]# cobbler repo add --name=kibana4.5 --mirror=http://packages.elastic.co/kibana/4.5/centos --arch=x86_64 --breed=yum
[root@log-node1 ~]# cobbler reposync&lt;/code&gt;&lt;/pre&gt;            </description>
            <pubDate>2018-05-12 14:38:27</pubDate>
            <link>//blog/Notes.bak/23-%C8%D5%D6%BE%CF%E0%B9%D8/ELK/01-%B2%BF%CA%F0%B0%B2%D7%B0.html</link>
            <guid isPermaLink="true">//blog/Notes.bak/23-%C8%D5%D6%BE%CF%E0%B9%D8/ELK/01-%B2%BF%CA%F0%B0%B2%D7%B0.html</guid>
                                               <category>23-日志相关</category>
                                    </item>
                <item>
            <title>bind搭建dns</title>
            <description>
            &lt;!--
author: 王辉
head: http://blog.unuw.com/blog/logo.jpg
date: 2017-12-28
title: bind搭建dns
tags: bind dns 域名解析
images: http://blog.unuw.com/blog/logo.jpg
category: 09-域名解析
status: publish
summary: 使用bind搭建dns。
--&gt;
&lt;h1&gt;DNS&lt;/h1&gt;
&lt;hr /&gt;
&lt;h2&gt;DNS概述&lt;/h2&gt;
&lt;h3&gt;解析过程&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;检查DNS缓存，若查到请求地址的名字，即向客户机发出响应信息&lt;/li&gt;
&lt;li&gt;若没有查到，则在数据库中查找，若查到地址或名字，即向客户机发出响应信息&lt;/li&gt;
&lt;li&gt;若没有查到，则请求根DNS服务器，并依次从根、定级、二级查找，直至找到，即向客户机发出响应信息&lt;/li&gt;
&lt;li&gt;若没有找到，返回错误信息&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;一些概念&lt;/h3&gt;
&lt;p&gt;FQDN (Full Qualified Domain Name) –&amp;gt; IP : 正向解析\
IP –&amp;gt; FQDN：反向解析 \
递归：DNS请求被服务器接收后，如果属于此服务器管辖范围则请求上级服务器依次传递请求，并且依次传递结果给发出请求的主机。客户机指向的服务器一定给递归服务。  \
迭代： DNS请求被服务器接收后，如果不是自己管辖范围，让客户端访问根域服务器，然后跟域通知客户端去访问下级服务器，直到最后客户端访问管辖请求域名的服务器为止。\&lt;/p&gt;
&lt;p&gt;域（Domain）：逻辑概念\
区域（zone）：物理概念，特指存储资源记录的硬件设备，如文本文件，或者数据库\
正向区域和反向区域域不能存储在一个文件或者数据库中，由于解析技术不同 \&lt;/p&gt;
&lt;h3&gt;DNS的分类&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;主DNS&lt;/li&gt;
&lt;li&gt;从DNS&lt;/li&gt;
&lt;li&gt;缓存服务器&lt;/li&gt;
&lt;li&gt;转发器&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;DNS中记录类型&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;SOA:可以理解为dns做备注的说明文本，一般与ns一致&lt;/li&gt;
&lt;li&gt;NS：域名授权名称服务器&lt;/li&gt;
&lt;li&gt;MX:域的邮件交换器，要跟一个优先级值，越小越高&lt;/li&gt;
&lt;li&gt;A：ipv4主机地址&lt;/li&gt;
&lt;li&gt;AAAA:ipv6主机地址&lt;/li&gt;
&lt;li&gt;PTR:解析IP的指针，反向记录&lt;/li&gt;
&lt;li&gt;CNAME：权威名称，定义别名记录&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;DNS命名规范&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;26个英文字母&lt;/li&gt;
&lt;li&gt;数字&lt;/li&gt;
&lt;li&gt;“-”&lt;/li&gt;
&lt;li&gt;最多63字节长度&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;常用命令&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;host&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;```
[root@ops-82 etc]# host baidu.com
baidu.com has address 220.181.57.217
baidu.com has address 111.13.101.208
baidu.com has address 180.149.132.47
baidu.com has address 123.125.114.144
baidu.com mail is handled by 10 mx.n.shifen.com.
baidu.com mail is handled by 20 mx50.baidu.com.
baidu.com mail is handled by 20 mx1.baidu.com.
baidu.com mail is handled by 20 jpmx.baidu.com.
```&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;dig&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;[root@ops-82 etc]# dig admin.abcd.tax

; &amp;lt;&amp;lt;&amp;gt;&amp;gt; DiG 9.9.4-RedHat-9.9.4-50.el7_3.1 &amp;lt;&amp;lt;&amp;gt;&amp;gt; admin.abcd.tax
;; global options: +cmd
;; Got answer:
;; -&amp;gt;&amp;gt;HEADER&amp;lt;&amp;lt;- opcode: QUERY, status: NOERROR, id: 4732
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 2

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;admin.abcd.tax.                        IN      A

;; ANSWER SECTION:
admin.abcd.tax.         3600    IN      A       192.168.2.31

;; AUTHORITY SECTION:
abcd.tax.               3600    IN      NS      ns1.abcd.tax.

;; ADDITIONAL SECTION:
ns1.abcd.tax.           3600    IN      A       192.168.0.119

;; Query time: 1 msec
;; SERVER: 192.168.0.119#53(192.168.0.119)
;; WHEN: Tue Aug 01 14:01:01 CST 2017
;; MSG SIZE  rcvd: 93

[root@ops-82 etc]#&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;nslookup&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;[root@ops-82 etc]# nslookup admin.abcd.tax
Server:         192.168.0.119
Address:        192.168.0.119#53

Name:   admin.abcd.tax
Address: 192.168.2.31

[root@ops-82 etc]#&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;h2&gt;部署bind&lt;/h2&gt;
&lt;h3&gt;yum安装&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;yum 安装
&lt;code&gt;yum install bind-utils bind bind-devel bind-chroot&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;检查rpm包：&lt;/p&gt;
&lt;p&gt;&lt;code&gt;rpm -qa|grep bind&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;查看本机DNS
&lt;pre&gt;&lt;code&gt;[root@ops-82 etc]# cat /etc/resolv.conf
# Generated by NetworkManager
search box.cn
#nameserver 8.8.8.8
nameserver 192.168.0.119
[root@ops-82 etc]#&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;编辑/etc/named.conf,主配置文件&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;[root@ops-82 etc]# cat /etc/named.conf
options {
  version &quot;1.1.1&quot;;
  listen-on port 53 {any;};
  directory &quot;/var/named/chroot/etc/&quot;;
  pid-file &quot;/var/run/named/named.pid&quot;;
  allow-query { any; };
  Dump-file &quot;/var/named/chroot/var/log/binddump.db&quot;;
  Statistics-file &quot;/var/named/chroot/var/log/named_stats&quot;;
  zone-statistics yes;

  memstatistics-file &quot;log/mem_stats&quot;;
  empty-zones-enable no;
  forwarders {114.114.114.114;8.8.8.8; };
};
key &quot;rndc-key&quot; {
        algorithm hmac-md5;
        secret &quot;Eqw4hClGExUWeDkKBX/pBg==&quot;;
};
controls {
       inet 127.0.0.1 port 953
               allow { 127.0.0.1; } keys { &quot;rndc-key&quot;; };
};
logging {
  channel warning {
    file &quot;/var/named/chroot/var/log/dns_warning&quot; versions 10 size 10m;
    severity warning;
    print-category yes;
    print-severity yes;
    print-time yes;
  };
  channel general_dns {
    file &quot;/var/named/chroot/var/log/dns_log&quot; versions 10 size 100m;
    severity info;
    print-category yes;
    print-severity yes;
    print-time yes;
  };
  category default {
    warning;
  };
  category queries {
    general_dns;
  };
};
include &quot;/var/named/chroot/etc/view.conf&quot;;
[root@ops-82 etc]#&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;chroot目录，是bind的一个安全机制，假根&lt;/p&gt;
&lt;p&gt;状态文件：&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Statistics-file &quot;/var/named/chroot/var/log/named_stats&quot;;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;监控的话可以重点看namd_stats文件`&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;内存状态文件：
&lt;code&gt;memstatistics-file &quot;log/mem_stats&quot;;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;日志文件：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;Channel warning&lt;/code&gt;:警告日志&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;channel general_dns&lt;/code&gt;:访问日志&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;named.conf&lt;/code&gt;文件中给rndc定义key：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;key &quot;rndc-key&quot; {
        algorithm hmac-md5;
        secret &quot;Eqw4hClGExUWeDkKBX/pBg==&quot;;
};&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;编辑/etc/rndc.key&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;[root@ops-82 etc]# cat /etc/rndc.key
key &quot;rndc-key&quot; {
        algorithm hmac-md5;
        secret &quot;Eqw4hClGExUWeDkKBX/pBg==&quot;;
};
[root@ops-82 etc]#&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;编辑/etc/rndc.conf&lt;/p&gt;
&lt;p&gt;用哪个key去哪台机器连哪个端口，同named.conf中配置对应。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;[root@ops-82 etc]# cat /etc/rndc.conf
key &quot;rndc-key&quot; {
        algorithm hmac-md5;
        secret &quot;Eqw4hClGExUWeDkKBX/pBg==&quot;;
};
options {
        default-key &quot;rndc-key&quot;;
        default-server 127.0.0.1;
        default-port 953;
};
[root@ops-82 etc]#&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;编辑/var/named/chroot/etc/view.conf&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;[root@ops-82 etc]# cat /var/named/chroot/etc/view.conf
view &quot;View&quot; {
  zone &quot;abcd.tax&quot; {
        type    master;
        file    &quot;abcd.tax.zone&quot;;
        allow-transfer {
                192.168.0.121;
        };
        notify  yes;
        also-notify {
                192.168.0.121;
        };
  };
};
[root@ops-82 etc]#&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;Zone&lt;/code&gt;：为哪个域进行解析 \
&lt;code&gt;Type&lt;/code&gt;：类型 \
&lt;code&gt;File&lt;/code&gt;：指定zong文件，路径默认为同级目录 \
&lt;code&gt;Allow-transfer&lt;/code&gt;： 允许谁来数据同步 \
&lt;code&gt;Also-notify&lt;/code&gt;： 通知谁该向我这里同步\
所指定的IP可以作为本master dns的slave&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;编辑/var/named/chroot/etc/abcd.tax.zone&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;[root@ops-82 etc]# cat /var/named/chroot/etc/abcd.tax.zone
$ORIGIN .
$TTL 3600       ;
abcd.tax           IN SOA  ns1.abcd.tax. ns2.abcd.tax.(
                                2002       ; serial
                                900        ; refresh (15 minutes)
                                600        ; retry (10 minutes)
                                86400      ; expire (1 day)
                                3600       ; minimum (1 hour)
                                )
                        NS      ns1.abcd.tax.
$ORIGIN abcd.tax
ns1     A       192.168.0.119
ns2     A       192.168.0.121
2w              A       192.168.0.121
3w              A       192.168.0.119
admin   A       192.168.2.31
[root@ops-82 etc]#&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;注意：&lt;/strong&gt; 必须配置&lt;code&gt;ns1&lt;/code&gt;解析记录，否则系统无法找到dns&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ORIGIN 变量，引用哪个域，“.”为当前不引用其他域，如果不配，默认引用view中配置的zone
$TTL server端缓存时间，秒
Serial 序列号，每次修改完dns需增加，以使dns能够判断出修改了，以进行同步，实际配置时可以配置为时间戳；
Refresh：同步刷新间隔；
Retry：失败后隔多长时间重试；
Expire：超过该时间后认为dns服务不可用
NS:ns地址，域名服务商处配置，如万网，让其他人知道该域名由谁进行解析
A记录解析，首先要配置自己ns记录的解析，否则别人无法找到dns服务器&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;涉及文件&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;全局文件：&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;/etc/name.conf
/etc/rndc.key
/etc/rndc.conf
/var/named/chroot/etc/view.conf&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;解析配置文件&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;/var/named/chroot/etc/abcd.tax.zone&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;修改权限及重启
修改目录权限：&lt;code&gt;cd /var &amp;amp;&amp;amp; chown -R named.named named/&lt;/code&gt;
重启：&lt;code&gt;systemctl restart named&lt;/code&gt;
&lt;blockquote&gt;
&lt;p&gt;启动失败，不能写入pid文件，重新进行了授权，后来又报出pid文件不可读,经查是个bug
&lt;a href=&quot;https://unix.stackexchange.com/questions/116725/pid-file-var-run-named-named-pid-not-readable-yet-after-start&quot;&gt;https://unix.stackexchange.com/questions/116725/pid-file-var-run-named-named-pid-not-readable-yet-after-start&lt;/a&gt;
&lt;img src=&quot;./bind-img/bind-01.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;/blockquote&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;hr /&gt;
&lt;h2&gt;bind 配置slave&lt;/h2&gt;
&lt;h3&gt;安装及编辑相同文件（同master一样）&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;安装yum install bind-utils bind bind-devel bind-chroot&lt;/li&gt;
&lt;li&gt;编辑/etc/named.conf&lt;/li&gt;
&lt;li&gt;编辑/etc/rndc.key&lt;/li&gt;
&lt;li&gt;编辑/etc/nrdc.conf&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;编辑单独文件&lt;/h3&gt;
&lt;p&gt;编辑/var/named/chroot/etc/view.conf&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;[root@ops-83 etc]# vim view.conf
view &quot;SlaveView&quot; {
  zone &quot;tax861.gov.test&quot; {
        type    slave;
        masters {192.168.0.119;};
        file    &quot;slave.abcd.gov.cn.zone&quot;;
  };
  zone &quot;tax862.gov.cn&quot; {
        type    slave;
        masters {192.168.0.119;};
        file    &quot;slave.abcd2.gov.cn.zone&quot;;
  };
  zone &quot;abcd.tax&quot; {
        type    slave;
        masters {192.168.0.119;};
        file    &quot;slave.abcd.tax.zone&quot;;
  };
};&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;同步&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;修改master上view.conf配置，将slave节点IP加入&lt;/li&gt;
&lt;li&gt;修改master上zone文件中serial+1&lt;/li&gt;
&lt;li&gt;修改slave目录权限&lt;code&gt;cd /var &amp;amp;&amp;amp; chown -R named.named named/&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;启动slave bind服务&lt;code&gt;systemctl start named&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;重载master bind服务&lt;code&gt;rndc reload&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;blockquote&gt;
&lt;p&gt;日常同步修改完master上zone文件后，修改serial值+1，执行重载命令&lt;code&gt;rndc reload&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr /&gt;
&lt;h2&gt;DNS添加&lt;/h2&gt;
&lt;p&gt;针对dns操作后，需要执行&lt;code&gt;rndc reload&lt;/code&gt;&lt;/p&gt;
&lt;h3&gt;A记录&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;ns1     A       192.168.0.119
ns2     A       192.168.0.121
2w              A       192.168.0.121
3w              A       192.168.0.119
admin   A       192.168.2.31&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;[root@ops-82 etc]# host admin.abcd.tax
admin.abcd.tax has address 192.168.2.31
[root@ops-82 etc]# host admin.abcd.tax 192.168.0.119
Using domain server:
Name: 192.168.0.119
Address: 192.168.0.119#53
Aliases:

admin.abcd.tax has address 192.168.2.31
[root@ops-82 etc]# host admin.abcd.tax 192.168.0.121
Using domain server:
Name: 192.168.0.121
Address: 192.168.0.121#53
Aliases:

admin.abcd.tax has address 192.168.2.31&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;CNAME&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;cname   CNAME   admin.abcd.tax.&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;[root@ops-82 etc]# host cname.abcd.tax 192.168.0.119
Using domain server:
Name: 192.168.0.119
Address: 192.168.0.119#53
Aliases:

cname.abcd.tax is an alias for admin.abcd.tax.
admin.abcd.tax has address 192.168.2.31
[root@ops-82 etc]# host cname.abcd.tax 192.168.0.121
Using domain server:
Name: 192.168.0.121
Address: 192.168.0.121#53
Aliases:

Host cname.abcd.tax not found: 3(NXDOMAIN)
[root@ops-82 etc]#&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote&gt;
&lt;p&gt;121没有做DNS数据同步，造成cname无法解析&lt;/p&gt;
&lt;h3&gt;MX记录&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;mx   MX   5 192.168.0.101&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;MX优先级设置为5&lt;/p&gt;
&lt;h3&gt;PTR记录&lt;/h3&gt;
&lt;p&gt;ptr记录有问题，暂时没有调通&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;编辑master节点view.conf文件，加入ptr的zone配置
&lt;pre&gt;&lt;code&gt;zone &quot;168.192.in-addr.arpa&quot; {
type    master;
file    &quot;168.192.zone&quot;;
allow-transfer {
192.168.0.121;
};
notify  yes;
also-notify {
192.168.0.121;
};
};&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;编辑master节点168.192.zone文件&lt;/li&gt;
&lt;/ol&gt;
&lt;/blockquote&gt;
&lt;hr /&gt;
&lt;h2&gt;清除DNS缓存&lt;/h2&gt;
&lt;h3&gt;Windows&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;ipconfig /flushdns&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Linux&lt;/h3&gt;
&lt;h3&gt;chrome&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;查看缓存:&lt;code&gt;chrome://dns/&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;清除Chrome浏览器的DNS缓存&lt;/p&gt;
&lt;p&gt;在地址栏中输入: &lt;code&gt;chrome://net-internals/#dns&lt;/code&gt;，然后点&amp;quot;Clear host cache&amp;quot;按钮。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;清除套接字缓存:&lt;/p&gt;
&lt;p&gt;在地址栏中输入: &lt;code&gt;chrome://net-internals/#sockets&lt;/code&gt;，然后点&amp;quot;Clear idle sockets&amp;quot;按钮和&amp;quot;Flush socket pools&amp;quot;按钮。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;清除浏览缓存&lt;/p&gt;
&lt;p&gt;有时候还需要清除浏览缓存。在地址栏中输入: &lt;code&gt;chrome://settings/clearBrowserData&lt;/code&gt;，选择&amp;quot;浏览记录&amp;quot;和&amp;quot;缓存的图片和文件&amp;quot;两项内容，点&amp;quot;清除浏览缓存&amp;quot;按钮。&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;通过nginx反向代理对dns进行负载均衡&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;stream {
upstream dns_servers {
    least_conn;
    server 192.168.0.119:53;
    server 192.168.0.121:53;
}
server {
    listen     53 udp;
    proxy_pass dns_servers;
}
}&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;            </description>
            <pubDate>2018-05-12 14:38:27</pubDate>
            <link>//blog/Notes.bak/09-%D3%F2%C3%FB%BD%E2%CE%F6/bind.html</link>
            <guid isPermaLink="true">//blog/Notes.bak/09-%D3%F2%C3%FB%BD%E2%CE%F6/bind.html</guid>
                                               <category>09-域名解析</category>
                                    </item>
                <item>
            <title>bind搭建dns</title>
            <description>
            &lt;!--
author: 王辉
head: http://blog.unuw.com/blog/logo.jpg
date: 2017-12-28
title: bind搭建dns
tags: bind dns 域名解析
images: http://blog.unuw.com/blog/logo.jpg
category: 09-域名解析
status: publish
summary: 使用bind搭建dns。
--&gt;
&lt;h1&gt;DNS&lt;/h1&gt;
&lt;hr /&gt;
&lt;h2&gt;DNS概述&lt;/h2&gt;
&lt;h3&gt;解析过程&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;检查DNS缓存，若查到请求地址的名字，即向客户机发出响应信息&lt;/li&gt;
&lt;li&gt;若没有查到，则在数据库中查找，若查到地址或名字，即向客户机发出响应信息&lt;/li&gt;
&lt;li&gt;若没有查到，则请求根DNS服务器，并依次从根、定级、二级查找，直至找到，即向客户机发出响应信息&lt;/li&gt;
&lt;li&gt;若没有找到，返回错误信息&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;一些概念&lt;/h3&gt;
&lt;p&gt;FQDN (Full Qualified Domain Name) –&amp;gt; IP : 正向解析\
IP –&amp;gt; FQDN：反向解析 \
递归：DNS请求被服务器接收后，如果属于此服务器管辖范围则请求上级服务器依次传递请求，并且依次传递结果给发出请求的主机。客户机指向的服务器一定给递归服务。  \
迭代： DNS请求被服务器接收后，如果不是自己管辖范围，让客户端访问根域服务器，然后跟域通知客户端去访问下级服务器，直到最后客户端访问管辖请求域名的服务器为止。\&lt;/p&gt;
&lt;p&gt;域（Domain）：逻辑概念\
区域（zone）：物理概念，特指存储资源记录的硬件设备，如文本文件，或者数据库\
正向区域和反向区域域不能存储在一个文件或者数据库中，由于解析技术不同 \&lt;/p&gt;
&lt;h3&gt;DNS的分类&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;主DNS&lt;/li&gt;
&lt;li&gt;从DNS&lt;/li&gt;
&lt;li&gt;缓存服务器&lt;/li&gt;
&lt;li&gt;转发器&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;DNS中记录类型&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;SOA:可以理解为dns做备注的说明文本，一般与ns一致&lt;/li&gt;
&lt;li&gt;NS：域名授权名称服务器&lt;/li&gt;
&lt;li&gt;MX:域的邮件交换器，要跟一个优先级值，越小越高&lt;/li&gt;
&lt;li&gt;A：ipv4主机地址&lt;/li&gt;
&lt;li&gt;AAAA:ipv6主机地址&lt;/li&gt;
&lt;li&gt;PTR:解析IP的指针，反向记录&lt;/li&gt;
&lt;li&gt;CNAME：权威名称，定义别名记录&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;DNS命名规范&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;26个英文字母&lt;/li&gt;
&lt;li&gt;数字&lt;/li&gt;
&lt;li&gt;“-”&lt;/li&gt;
&lt;li&gt;最多63字节长度&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;常用命令&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;host&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;```
[root@ops-82 etc]# host baidu.com
baidu.com has address 220.181.57.217
baidu.com has address 111.13.101.208
baidu.com has address 180.149.132.47
baidu.com has address 123.125.114.144
baidu.com mail is handled by 10 mx.n.shifen.com.
baidu.com mail is handled by 20 mx50.baidu.com.
baidu.com mail is handled by 20 mx1.baidu.com.
baidu.com mail is handled by 20 jpmx.baidu.com.
```&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;dig&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;[root@ops-82 etc]# dig admin.abcd.tax

; &amp;lt;&amp;lt;&amp;gt;&amp;gt; DiG 9.9.4-RedHat-9.9.4-50.el7_3.1 &amp;lt;&amp;lt;&amp;gt;&amp;gt; admin.abcd.tax
;; global options: +cmd
;; Got answer:
;; -&amp;gt;&amp;gt;HEADER&amp;lt;&amp;lt;- opcode: QUERY, status: NOERROR, id: 4732
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 2

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;admin.abcd.tax.                        IN      A

;; ANSWER SECTION:
admin.abcd.tax.         3600    IN      A       192.168.2.31

;; AUTHORITY SECTION:
abcd.tax.               3600    IN      NS      ns1.abcd.tax.

;; ADDITIONAL SECTION:
ns1.abcd.tax.           3600    IN      A       192.168.0.119

;; Query time: 1 msec
;; SERVER: 192.168.0.119#53(192.168.0.119)
;; WHEN: Tue Aug 01 14:01:01 CST 2017
;; MSG SIZE  rcvd: 93

[root@ops-82 etc]#&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;nslookup&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;[root@ops-82 etc]# nslookup admin.abcd.tax
Server:         192.168.0.119
Address:        192.168.0.119#53

Name:   admin.abcd.tax
Address: 192.168.2.31

[root@ops-82 etc]#&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;h2&gt;部署bind&lt;/h2&gt;
&lt;h3&gt;yum安装&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;yum 安装
&lt;code&gt;yum install bind-utils bind bind-devel bind-chroot&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;检查rpm包：&lt;/p&gt;
&lt;p&gt;&lt;code&gt;rpm -qa|grep bind&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;查看本机DNS
&lt;pre&gt;&lt;code&gt;[root@ops-82 etc]# cat /etc/resolv.conf
# Generated by NetworkManager
search box.cn
#nameserver 8.8.8.8
nameserver 192.168.0.119
[root@ops-82 etc]#&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;编辑/etc/named.conf,主配置文件&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;[root@ops-82 etc]# cat /etc/named.conf
options {
  version &quot;1.1.1&quot;;
  listen-on port 53 {any;};
  directory &quot;/var/named/chroot/etc/&quot;;
  pid-file &quot;/var/run/named/named.pid&quot;;
  allow-query { any; };
  Dump-file &quot;/var/named/chroot/var/log/binddump.db&quot;;
  Statistics-file &quot;/var/named/chroot/var/log/named_stats&quot;;
  zone-statistics yes;

  memstatistics-file &quot;log/mem_stats&quot;;
  empty-zones-enable no;
  forwarders {114.114.114.114;8.8.8.8; };
};
key &quot;rndc-key&quot; {
        algorithm hmac-md5;
        secret &quot;Eqw4hClGExUWeDkKBX/pBg==&quot;;
};
controls {
       inet 127.0.0.1 port 953
               allow { 127.0.0.1; } keys { &quot;rndc-key&quot;; };
};
logging {
  channel warning {
    file &quot;/var/named/chroot/var/log/dns_warning&quot; versions 10 size 10m;
    severity warning;
    print-category yes;
    print-severity yes;
    print-time yes;
  };
  channel general_dns {
    file &quot;/var/named/chroot/var/log/dns_log&quot; versions 10 size 100m;
    severity info;
    print-category yes;
    print-severity yes;
    print-time yes;
  };
  category default {
    warning;
  };
  category queries {
    general_dns;
  };
};
include &quot;/var/named/chroot/etc/view.conf&quot;;
[root@ops-82 etc]#&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;chroot目录，是bind的一个安全机制，假根&lt;/p&gt;
&lt;p&gt;状态文件：&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Statistics-file &quot;/var/named/chroot/var/log/named_stats&quot;;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;监控的话可以重点看namd_stats文件`&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;内存状态文件：
&lt;code&gt;memstatistics-file &quot;log/mem_stats&quot;;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;日志文件：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;Channel warning&lt;/code&gt;:警告日志&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;channel general_dns&lt;/code&gt;:访问日志&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;named.conf&lt;/code&gt;文件中给rndc定义key：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;key &quot;rndc-key&quot; {
        algorithm hmac-md5;
        secret &quot;Eqw4hClGExUWeDkKBX/pBg==&quot;;
};&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;编辑/etc/rndc.key&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;[root@ops-82 etc]# cat /etc/rndc.key
key &quot;rndc-key&quot; {
        algorithm hmac-md5;
        secret &quot;Eqw4hClGExUWeDkKBX/pBg==&quot;;
};
[root@ops-82 etc]#&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;编辑/etc/rndc.conf&lt;/p&gt;
&lt;p&gt;用哪个key去哪台机器连哪个端口，同named.conf中配置对应。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;[root@ops-82 etc]# cat /etc/rndc.conf
key &quot;rndc-key&quot; {
        algorithm hmac-md5;
        secret &quot;Eqw4hClGExUWeDkKBX/pBg==&quot;;
};
options {
        default-key &quot;rndc-key&quot;;
        default-server 127.0.0.1;
        default-port 953;
};
[root@ops-82 etc]#&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;编辑/var/named/chroot/etc/view.conf&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;[root@ops-82 etc]# cat /var/named/chroot/etc/view.conf
view &quot;View&quot; {
  zone &quot;abcd.tax&quot; {
        type    master;
        file    &quot;abcd.tax.zone&quot;;
        allow-transfer {
                192.168.0.121;
        };
        notify  yes;
        also-notify {
                192.168.0.121;
        };
  };
};
[root@ops-82 etc]#&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;Zone&lt;/code&gt;：为哪个域进行解析 \
&lt;code&gt;Type&lt;/code&gt;：类型 \
&lt;code&gt;File&lt;/code&gt;：指定zong文件，路径默认为同级目录 \
&lt;code&gt;Allow-transfer&lt;/code&gt;： 允许谁来数据同步 \
&lt;code&gt;Also-notify&lt;/code&gt;： 通知谁该向我这里同步\
所指定的IP可以作为本master dns的slave&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;编辑/var/named/chroot/etc/abcd.tax.zone&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;[root@ops-82 etc]# cat /var/named/chroot/etc/abcd.tax.zone
$ORIGIN .
$TTL 3600       ;
abcd.tax           IN SOA  ns1.abcd.tax. ns2.abcd.tax.(
                                2002       ; serial
                                900        ; refresh (15 minutes)
                                600        ; retry (10 minutes)
                                86400      ; expire (1 day)
                                3600       ; minimum (1 hour)
                                )
                        NS      ns1.abcd.tax.
$ORIGIN abcd.tax
ns1     A       192.168.0.119
ns2     A       192.168.0.121
2w              A       192.168.0.121
3w              A       192.168.0.119
admin   A       192.168.2.31
[root@ops-82 etc]#&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;注意：&lt;/strong&gt; 必须配置&lt;code&gt;ns1&lt;/code&gt;解析记录，否则系统无法找到dns&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ORIGIN 变量，引用哪个域，“.”为当前不引用其他域，如果不配，默认引用view中配置的zone
$TTL server端缓存时间，秒
Serial 序列号，每次修改完dns需增加，以使dns能够判断出修改了，以进行同步，实际配置时可以配置为时间戳；
Refresh：同步刷新间隔；
Retry：失败后隔多长时间重试；
Expire：超过该时间后认为dns服务不可用
NS:ns地址，域名服务商处配置，如万网，让其他人知道该域名由谁进行解析
A记录解析，首先要配置自己ns记录的解析，否则别人无法找到dns服务器&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;涉及文件&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;全局文件：&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;/etc/name.conf
/etc/rndc.key
/etc/rndc.conf
/var/named/chroot/etc/view.conf&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;解析配置文件&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;/var/named/chroot/etc/abcd.tax.zone&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;修改权限及重启
修改目录权限：&lt;code&gt;cd /var &amp;amp;&amp;amp; chown -R named.named named/&lt;/code&gt;
重启：&lt;code&gt;systemctl restart named&lt;/code&gt;
&lt;blockquote&gt;
&lt;p&gt;启动失败，不能写入pid文件，重新进行了授权，后来又报出pid文件不可读,经查是个bug
&lt;a href=&quot;https://unix.stackexchange.com/questions/116725/pid-file-var-run-named-named-pid-not-readable-yet-after-start&quot;&gt;https://unix.stackexchange.com/questions/116725/pid-file-var-run-named-named-pid-not-readable-yet-after-start&lt;/a&gt;
&lt;img src=&quot;./bind-img/bind-01.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;/blockquote&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;hr /&gt;
&lt;h2&gt;bind 配置slave&lt;/h2&gt;
&lt;h3&gt;安装及编辑相同文件（同master一样）&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;安装yum install bind-utils bind bind-devel bind-chroot&lt;/li&gt;
&lt;li&gt;编辑/etc/named.conf&lt;/li&gt;
&lt;li&gt;编辑/etc/rndc.key&lt;/li&gt;
&lt;li&gt;编辑/etc/nrdc.conf&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;编辑单独文件&lt;/h3&gt;
&lt;p&gt;编辑/var/named/chroot/etc/view.conf&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;[root@ops-83 etc]# vim view.conf
view &quot;SlaveView&quot; {
  zone &quot;tax861.gov.test&quot; {
        type    slave;
        masters {192.168.0.119;};
        file    &quot;slave.abcd.gov.cn.zone&quot;;
  };
  zone &quot;tax862.gov.cn&quot; {
        type    slave;
        masters {192.168.0.119;};
        file    &quot;slave.abcd2.gov.cn.zone&quot;;
  };
  zone &quot;abcd.tax&quot; {
        type    slave;
        masters {192.168.0.119;};
        file    &quot;slave.abcd.tax.zone&quot;;
  };
};&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;同步&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;修改master上view.conf配置，将slave节点IP加入&lt;/li&gt;
&lt;li&gt;修改master上zone文件中serial+1&lt;/li&gt;
&lt;li&gt;修改slave目录权限&lt;code&gt;cd /var &amp;amp;&amp;amp; chown -R named.named named/&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;启动slave bind服务&lt;code&gt;systemctl start named&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;重载master bind服务&lt;code&gt;rndc reload&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;blockquote&gt;
&lt;p&gt;日常同步修改完master上zone文件后，修改serial值+1，执行重载命令&lt;code&gt;rndc reload&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr /&gt;
&lt;h2&gt;DNS添加&lt;/h2&gt;
&lt;p&gt;针对dns操作后，需要执行&lt;code&gt;rndc reload&lt;/code&gt;&lt;/p&gt;
&lt;h3&gt;A记录&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;ns1     A       192.168.0.119
ns2     A       192.168.0.121
2w              A       192.168.0.121
3w              A       192.168.0.119
admin   A       192.168.2.31&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;[root@ops-82 etc]# host admin.abcd.tax
admin.abcd.tax has address 192.168.2.31
[root@ops-82 etc]# host admin.abcd.tax 192.168.0.119
Using domain server:
Name: 192.168.0.119
Address: 192.168.0.119#53
Aliases:

admin.abcd.tax has address 192.168.2.31
[root@ops-82 etc]# host admin.abcd.tax 192.168.0.121
Using domain server:
Name: 192.168.0.121
Address: 192.168.0.121#53
Aliases:

admin.abcd.tax has address 192.168.2.31&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;CNAME&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;cname   CNAME   admin.abcd.tax.&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;[root@ops-82 etc]# host cname.abcd.tax 192.168.0.119
Using domain server:
Name: 192.168.0.119
Address: 192.168.0.119#53
Aliases:

cname.abcd.tax is an alias for admin.abcd.tax.
admin.abcd.tax has address 192.168.2.31
[root@ops-82 etc]# host cname.abcd.tax 192.168.0.121
Using domain server:
Name: 192.168.0.121
Address: 192.168.0.121#53
Aliases:

Host cname.abcd.tax not found: 3(NXDOMAIN)
[root@ops-82 etc]#&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote&gt;
&lt;p&gt;121没有做DNS数据同步，造成cname无法解析&lt;/p&gt;
&lt;h3&gt;MX记录&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;mx   MX   5 192.168.0.101&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;MX优先级设置为5&lt;/p&gt;
&lt;h3&gt;PTR记录&lt;/h3&gt;
&lt;p&gt;ptr记录有问题，暂时没有调通&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;编辑master节点view.conf文件，加入ptr的zone配置
&lt;pre&gt;&lt;code&gt;zone &quot;168.192.in-addr.arpa&quot; {
type    master;
file    &quot;168.192.zone&quot;;
allow-transfer {
192.168.0.121;
};
notify  yes;
also-notify {
192.168.0.121;
};
};&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;编辑master节点168.192.zone文件&lt;/li&gt;
&lt;/ol&gt;
&lt;/blockquote&gt;
&lt;hr /&gt;
&lt;h2&gt;清除DNS缓存&lt;/h2&gt;
&lt;h3&gt;Windows&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;ipconfig /flushdns&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Linux&lt;/h3&gt;
&lt;h3&gt;chrome&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;查看缓存:&lt;code&gt;chrome://dns/&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;清除Chrome浏览器的DNS缓存&lt;/p&gt;
&lt;p&gt;在地址栏中输入: &lt;code&gt;chrome://net-internals/#dns&lt;/code&gt;，然后点&amp;quot;Clear host cache&amp;quot;按钮。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;清除套接字缓存:&lt;/p&gt;
&lt;p&gt;在地址栏中输入: &lt;code&gt;chrome://net-internals/#sockets&lt;/code&gt;，然后点&amp;quot;Clear idle sockets&amp;quot;按钮和&amp;quot;Flush socket pools&amp;quot;按钮。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;清除浏览缓存&lt;/p&gt;
&lt;p&gt;有时候还需要清除浏览缓存。在地址栏中输入: &lt;code&gt;chrome://settings/clearBrowserData&lt;/code&gt;，选择&amp;quot;浏览记录&amp;quot;和&amp;quot;缓存的图片和文件&amp;quot;两项内容，点&amp;quot;清除浏览缓存&amp;quot;按钮。&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;通过nginx反向代理对dns进行负载均衡&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;stream {
upstream dns_servers {
    least_conn;
    server 192.168.0.119:53;
    server 192.168.0.121:53;
}
server {
    listen     53 udp;
    proxy_pass dns_servers;
}
}&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;            </description>
            <pubDate>2019-04-11 08:20:49</pubDate>
            <link>//blog/Notes/09-%D3%F2%C3%FB%BD%E2%CE%F6/bind.html</link>
            <guid isPermaLink="true">//blog/Notes/09-%D3%F2%C3%FB%BD%E2%CE%F6/bind.html</guid>
                                               <category>09-域名解析</category>
                                    </item>
                <item>
            <title>git使用教程</title>
            <description>
            &lt;!--
author: 王辉
head: http://blog.unuw.com/blog/logo.jpg
date: 2017-12-28
title: git使用教程
tags: git 版本管理
images: http://blog.unuw.com/blog/logo.jpg
category: 08-版本管理
status: publish
summary: git使用简单教程。
--&gt;
&lt;h1&gt;Git 教程&lt;/h1&gt;
&lt;p&gt;&lt;a href=&quot;https://www.liaoxuefeng.com/&quot;&gt;https://www.liaoxuefeng.com/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;markdown 语法：&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.appinn.com/markdown/&quot;&gt;http://www.appinn.com/markdown/&lt;/a&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;Git安装&lt;/h2&gt;
&lt;h3&gt;Linux下安装&lt;/h3&gt;
&lt;p&gt;首先，你可以试着输入git，看看系统有没有安装Git：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ git
The program 'git' is currently not installed. You can install it by typing:
sudo apt-get install git
$ yum install git-core -y&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;在Windows上安装Git&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://git-for-windows.github.io/&quot; title=&quot;Git&quot;&gt;github下载&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;安装完成后，在开始菜单里找到“Git”-&amp;gt;“Git Bash”&lt;/p&gt;
&lt;p&gt;安装完成后，还需要最后一步设置，在命令行输入：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ git config --global user.name &quot;Your Name&quot;
$ git config --global user.email &quot;email@example.com&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;创建版本库&lt;/h2&gt;
&lt;p&gt;什么是版本库呢？版本库又名仓库，英文名repository，你可以简单理解成一个目录，这个目录里面的所有文件都可以被Git管理起来，每个文件的修改、删除，Git都能跟踪，以便任何时刻都可以追踪历史，或者在将来某个时刻可以“还原”。&lt;/p&gt;
&lt;p&gt;所以，创建一个版本库非常简单，首先，选择一个合适的地方，创建一个空目录：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;HUI@HUI-THINK220 MINGW64 ~
$ mkdir /d/git/
$ cd /d/git/
$ pwd
/d/git&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;pwd&lt;/code&gt;命令用于显示当前目录。在我的Mac上，这个仓库位于&lt;code&gt;/Users/michael/learngit&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;如果你使用Windows系统，为了避免遇到各种莫名其妙的问题，请确保目录名（包括父目录）不包含中文。&lt;/p&gt;
&lt;p&gt;第二步，通过git init命令把这个目录变成Git可以管理的仓库：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ git init
Initialized empty Git repository in D:/git/.git/
$ ls -ah
./  ../  .git/&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;瞬间Git就把仓库建好了，而且告诉你是一个空的仓库（empty Git repository），细心的读者可以发现当前目录下多了一个&lt;code&gt;.git&lt;/code&gt;的目录，这个目录是Git来跟踪管理版本库的，没事千万不要手动修改这个目录里面的文件，不然改乱了，就把Git仓库给破坏了。&lt;/p&gt;
&lt;p&gt;如果你没有看到&lt;code&gt;.git&lt;/code&gt;目录，那是因为这个目录默认是隐藏的，用&lt;code&gt;ls -ah&lt;/code&gt;命令就可以看见。&lt;/p&gt;
&lt;p&gt;第一步，用命令git add告诉Git，把文件添加到仓库：&lt;/p&gt;
&lt;p&gt;&lt;code&gt;D:\MyDoc\GitHub\Notes\08-版本管理\Git [master +1 ~0 -0 !]&amp;gt; git add .\git.md&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;第二步，用命令git commit告诉Git，把文件提交到仓库：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;D:\MyDoc\GitHub\Notes\08-版本管理\Git [master +1 ~0 -0 | +3 ~0 -0 !]&amp;gt; git commit -m &quot;git file git.md&quot;
[master (root-commit) d1ee4a3] git file git.md
 1 file changed, 56 insertions(+)
 create mode 100644 &quot;Notes/08-\347\211\210\346\234\254\347\256\241\347\220\206/Git/git.md&quot;
D:\MyDoc\GitHub\Notes\08-版本管理\Git [master +3 ~0 -0 !]&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;小结&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;现在总结一下今天学的两点内容：&lt;/p&gt;
&lt;p&gt;1 初始化一个Git仓库，使用git init命令。&lt;/p&gt;
&lt;p&gt;2 添加文件到Git仓库，分两步：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;第一步，使用命令git add &lt;file&gt;，注意，可反复多次使用，添加多个文件；&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;第二步，使用命令git commit，完成。&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;hr /&gt;
&lt;h2&gt;时光穿梭机&lt;/h2&gt;
&lt;p&gt;之前田间了git.md文件，运行&lt;code&gt;git status&lt;/code&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;D:\MyDoc\GitHub\Notes\08-版本管理\Git [master +3 ~1 -0 !]&amp;gt; git status
On branch master
Changes not staged for commit:
  (use &quot;git add &amp;lt;file&amp;gt;...&quot; to update what will be committed)
  (use &quot;git checkout -- &amp;lt;file&amp;gt;...&quot; to discard changes in working directory)

        modified:   git.md

Untracked files:
  (use &quot;git add &amp;lt;file&amp;gt;...&quot; to include in what will be committed)

        img/
        &quot;../../30-\346\226\207\346\234\254\347\274\226\350\276\221/&quot;
        &quot;../../\350\277\220\347\273\264\345\267\245\345\205\267\344\275\223\347\263\273.md&quot;

no changes added to commit (use &quot;git add&quot; and/or &quot;git commit -a&quot;)
D:\MyDoc\GitHub\Notes\08-版本管理\Git [master +3 ~1 -0 !]&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;git status&lt;/code&gt;确认仓库状态&lt;/li&gt;
&lt;li&gt;&lt;code&gt;git diff git.md&lt;/code&gt;对比修改前后&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;小结&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;要随时掌握工作区的状态，使用git status命令。&lt;/p&gt;
&lt;p&gt;如果&lt;code&gt;git status&lt;/code&gt;告诉你有文件被修改过，用&lt;code&gt;git diff&lt;/code&gt;可以查看修改内容。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;版本回退&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;git log&lt;/code&gt;令显示从最近到最远的提交日志，如果嫌输出信息太多，看得眼花缭乱的，可以试试加上--pretty=oneline参数：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;D:\MyDoc\GitHub\Notes\08-版本管理\Git [master +3 ~0 -0 !]&amp;gt; git log
commit 7ba4071416ba21e4d7e3fd578278bcf07ed0c280
Author: wanghui &amp;lt;wanghui3w@139.com&amp;gt;
Date:   Tue Jul 18 11:03:24 2017 +0800

    4

commit 4ce15acc90b56f162328288bc348f31d6a0f672e
Author: wanghui &amp;lt;wanghui3w@139.com&amp;gt;
Date:   Tue Jul 18 10:47:34 2017 +0800

    第三次

commit cf3fa8e4f566225e1c804daae94d4d68dc438d1b
Author: wanghui &amp;lt;wanghui3w@139.com&amp;gt;
Date:   Tue Jul 18 10:41:03 2017 +0800

    第二次commit

commit 01c42de30c64591323d07092db35a13496be17d2
Author: wanghui &amp;lt;wanghui3w@139.com&amp;gt;
Date:   Tue Jul 18 10:39:00 2017 +0800

    git test file get-test.txt

commit d1ee4a38ee3a3d785e2ff1c803d9fc9303a2e7a8
Author: wanghui &amp;lt;wanghui3w@139.com&amp;gt;
Date:   Tue Jul 18 10:14:57 2017 +0800

    git file git.md
D:\MyDoc\GitHub\Notes\08-版本管理\Git [master +3 ~0 -0 !]&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;D:\MyDoc\GitHub\Notes\08-版本管理\Git [master +3 ~0 -0 !]&amp;gt; git log --pretty=oneline
7ba4071416ba21e4d7e3fd578278bcf07ed0c280 4
4ce15acc90b56f162328288bc348f31d6a0f672e 第三次
cf3fa8e4f566225e1c804daae94d4d68dc438d1b 第二次commit
01c42de30c64591323d07092db35a13496be17d2 git test file get-test.txt
d1ee4a38ee3a3d785e2ff1c803d9fc9303a2e7a8 git file git.md
D:\MyDoc\GitHub\Notes\08-版本管理\Git [master +3 ~1 -0 !]&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;首先，Git必须知道当前版本是哪个版本，在Git中，用HEAD表示当前版本，也就是最新的提交7ba4071416ba21e4d7e3fd578278bcf07ed0c280（注意提交ID每个人不一样），上一个版本就是HEAD^，上上一个版本就是HEAD^^，当然往上100个版本写100个^比较容易数不过来，所以写成HEAD~100。现在，我们要把当前版回退到上一个版本，就可以使用&lt;code&gt;git reset&lt;/code&gt;命令：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ git reset --hard HEAD^&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;只要上面的命令行窗口还没有被关掉，你就可以顺着往上找啊找啊，找到那个append GPL的commit id是3628164...，于是就可以指定回到未来的某个版本：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git reset --hard 3628164&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Git的版本回退速度非常快，因为Git在内部有个指向当前版本的HEAD指针，当你回退版本的时候，Git仅仅是把HEAD从指向上个版本标签，然后顺便把工作区的文件更新了。所以你让HEAD指向哪个版本号，你就把当前版本定位在哪。&lt;/p&gt;
&lt;p&gt;Git提供了一个命令&lt;code&gt;git reflog&lt;/code&gt;用来记录你的每一次命令：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;D:\MyDoc\GitHub\Notes\08-版本管理\Git [master +3 ~1 -0 !]&amp;gt; git reflog
7ba4071 HEAD@{0}: commit: 4
4ce15ac HEAD@{1}: commit: 第三次
cf3fa8e HEAD@{2}: commit: 第二次commit
01c42de HEAD@{3}: commit: git test file get-test.txt
d1ee4a3 HEAD@{4}: commit (initial): git file git.md
D:\MyDoc\GitHub\Notes\08-版本管理\Git [master +3 ~1 -0 !]&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;小结&lt;/h3&gt;
&lt;p&gt;现在总结一下：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;HEAD指向的版本就是当前版本，因此，Git允许我们在版本的历史之间穿梭，使用命令git reset --hard commit_id。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;穿梭前，用git log可以查看提交历史，以便确定要回退到哪个版本。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;要重返未来，用git reflog查看命令历史，以便确定要回到未来的哪个版本。&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;h2&gt;工作区和暂存区&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;工作区（Working Directory）：&lt;/strong&gt; 就是你在电脑里能看到的目录。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;暂存区（Stage）：&lt;/strong&gt; 通过&lt;code&gt;git add&lt;/code&gt; 后的文件，暂时放在暂存区&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;版本库（Repository）：&lt;/strong&gt; 工作区有一个隐藏目录.git，这个不算工作区，而是Git的版本库。&lt;/p&gt;
&lt;p&gt;前面讲了我们把文件往Git版本库里添加的时候，是分两步执行的：&lt;/p&gt;
&lt;p&gt;第一步是用&lt;code&gt;git add&lt;/code&gt;把文件添加进去，实际上就是把文件修改添加到暂存区；&lt;/p&gt;
&lt;p&gt;第二步是用&lt;code&gt;git commit&lt;/code&gt;提交更改，实际上就是把暂存区的所有内容提交到当前分支。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;git add&lt;/code&gt;命令实际上就是把要提交的所有修改放到暂存区（Stage），然后，执行&lt;code&gt;git commit&lt;/code&gt;就可以一次性把暂存区的所有修改提交到分支。一旦提交后，如果你又没有对工作区做任何修改，那么工作区就是“干净”的，暂存区是空的。&lt;/p&gt;
&lt;h3&gt;小结&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;暂存区是Git非常重要的概念，弄明白了暂存区，就弄明白了Git的很多操作到底干了什么。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;管理修改&lt;/h2&gt;
&lt;h3&gt;小结&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;现在，你又理解了Git是如何跟踪修改的，每次修改，如果不add到暂存区，那就不会加入到commit中。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;撤销修改&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;回到上一个修改：&lt;/strong&gt; &lt;code&gt;git reset HEAD readme.txt&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;清空缓存区：&lt;/strong&gt; &lt;code&gt;git checkout -- readme.txt&lt;/code&gt;（注意两个减号）,可以丢弃工作区的修改。&lt;/p&gt;
&lt;p&gt;命令&lt;code&gt;git checkout -- readme.txt&lt;/code&gt;意思就是，把readme.txt文件在工作区的修改全部撤销，这里有两种情况：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;一种是readme.txt自修改后还没有被放到暂存区，现在，撤销修改就回到和版本库一模一样的状态；&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;一种是readme.txt已经添加到暂存区后，又作了修改，现在，撤销修改就回到添加到暂存区后的状态。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;总之，就是让这个文件回到最近一次git commit或git add时的状态。&lt;/p&gt;
&lt;h3&gt;小结&lt;/h3&gt;
&lt;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;场景1：当你改乱了工作区某个文件的内容，想直接丢弃工作区的修改时，用命令&lt;code&gt;git checkout -- file&lt;/code&gt;。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;场景2：当你不但改乱了工作区某个文件的内容，还添加到了暂存区时，想丢弃修改，分两步，第一步用命令&lt;code&gt;git reset HEAD file&lt;/code&gt;，就回到了场景1，第二步按场景1操作。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;场景3：已经提交了不合适的修改到版本库时，想要撤销本次提交，参考版本回退一节，不过前提是没有推送到远程库。&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;h2&gt;删除文件&lt;/h2&gt;
&lt;h3&gt;第一种：&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;操作系统下直接删除&lt;code&gt;rm test.txt&lt;/code&gt;，如果需要找回&lt;code&gt;git checkout -- test.txt&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;git rm test.txt&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;git commit -m &quot;delete test&quot;&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;第二种&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;git rm test.txt&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;git commit -m &quot;delete test&quot;&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;小结&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;git checkout&lt;/code&gt;其实是用版本库里的版本替换工作区的版本，无论工作区是修改还是删除，都可以“一键还原”。命令&lt;code&gt;git rm&lt;/code&gt;用于删除一个文件。如果一个文件已经被提交到版本库，那么你永远不用担心误删，但是要小心，你只能恢复文件到最新版本，你会丢失最近一次提交后你修改的内容。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr /&gt;
&lt;h2&gt;远程仓库&lt;/h2&gt;
&lt;p&gt;注册GitHub账号。由于你的本地Git仓库和GitHub仓库之间的传输是通过SSH加密的，所以，需要一点设置：&lt;/p&gt;
&lt;h4&gt;第1步：创建SSH Key&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;$ ssh-keygen -t rsa -C &quot;wanghui3w@139.com&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;第2步：登陆GitHub&lt;/h4&gt;
&lt;p&gt;打开“Account settings”，“SSH Keys”页面，然后点“Add SSH Key”，填上任意Title，在Key文本框里粘贴id_rsa.pub文件的内容。&lt;/p&gt;
&lt;p&gt;git出现问题，参考了：&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://blog.csdn.net/laner415/article/details/52966890&quot;&gt;http://blog.csdn.net/laner415/article/details/52966890&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://my.oschina.net/uniquejava/blog/165140&quot;&gt;https://my.oschina.net/uniquejava/blog/165140&lt;/a&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;问题（Non-fast-forward）的出现原因在于：git仓库中已经有一部分代码，所以它不允许你直接把你的代码覆盖上去。于是你有2个选择方式：

1，强推，即利用强覆盖方式用你本地的代码替代git仓库内的内容

git push -f

2，先把git的东西fetch到你本地然后merge后再push

$ git fetch

$ git merge

这2句命令等价于

$ git pull&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;添加远程仓库&lt;/h3&gt;
&lt;p&gt;登陆GitHub，然后，在右上角找到“Create a new repo”按钮，创建一个新的仓库，然后执行命令，将本地库与远程库关联，并执行推送：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ git remote add origin git@github.com:michaelliao/learngit.git
$ git push -u origin master&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;小结&lt;/h4&gt;
&lt;p&gt;要关联一个远程库，使用命令&lt;code&gt;git remote add origin git@server-name:path/repo-name.git&lt;/code&gt;；&lt;/p&gt;
&lt;p&gt;关联后，使用命令&lt;code&gt;git push -u origin master&lt;/code&gt;第一次推送master分支的所有内容；&lt;/p&gt;
&lt;p&gt;此后，每次本地提交后，只要有必要，就可以使用命令&lt;code&gt;git push origin master&lt;/code&gt;推送最新修改；&lt;/p&gt;
&lt;p&gt;分布式版本系统的最大好处之一是在本地工作完全不需要考虑远程库的存在，也就是有没有联网都可以正常工作，而SVN在没有联网的时候是拒绝干活的！当有网络的时候，再把本地提交推送一下就完成了同步，真是太方便了！&lt;/p&gt;
&lt;h3&gt;从远程库克隆&lt;/h3&gt;
&lt;p&gt;首先，登陆GitHub，创建一个新的仓库，勾选Initialize this repository with a README，这样GitHub会自动为我们创建一个README.md文件。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ git clone git@github.com:michaelliao/gitskills.git
Cloning into 'gitskills'...
remote: Counting objects: 3, done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (3/3), done.

$ cd gitskills
$ ls
README.md&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;如果有多个人协作开发，那么每个人各自从远程克隆一份就可以了。&lt;/p&gt;
&lt;p&gt;你也许还注意到，GitHub给出的地址不止一个，还可以用&lt;code&gt;https://github.com/michaelliao/gitskills.git&lt;/code&gt;这样的地址。实际上，Git支持多种协议，默认的git://使用ssh，但也可以使用https等其他协议。&lt;/p&gt;
&lt;p&gt;使用https除了速度慢以外，还有个最大的麻烦是每次推送都必须输入口令，但是在某些只开放http端口的公司内部就无法使用ssh协议而只能用https。&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;分支管理&lt;/h2&gt;
&lt;h3&gt;创建与合并分支&lt;/h3&gt;
&lt;p&gt;首先，我们创建dev分支，然后切换到dev分支：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ git checkout -b dev
Switched to a new branch 'dev'&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;git checkout&lt;/code&gt;命令加上-b参数表示创建并切换，相当于以下两条命令：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ git branch dev
$ git checkout dev
Switched to branch 'dev'&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;然后，用&lt;code&gt;git branch&lt;/code&gt;命令查看当前分支：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ git branch
* dev
  master&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;然后提交：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ git add readme.txt
$ git commit -m &quot;branch test&quot;
[dev fec145a] branch test
 1 file changed, 1 insertion(+)&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;现在，dev分支的工作完成，我们就可以切换回master分支：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ git checkout master
Switched to branch 'master'&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;把dev分支的工作成果合并到master分支上：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ git merge dev
Updating d17efd8..fec145a
Fast-forward
 readme.txt |    1 +
 1 file changed, 1 insertion(+)&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;合并完成后，就可以放心地删除dev分支了：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ git branch -d dev
Deleted branch dev (was fec145a).&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;小结&lt;/h4&gt;
&lt;p&gt;Git鼓励大量使用分支：&lt;/p&gt;
&lt;p&gt;查看分支：&lt;code&gt;git branch&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;创建分支：&lt;code&gt;git branch &amp;lt;name&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;切换分支：&lt;code&gt;git checkout &amp;lt;name&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;创建+切换分支：&lt;code&gt;git checkout -b &amp;lt;name&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;合并某分支到当前分支：&lt;code&gt;git merge &amp;lt;name&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;删除分支：&lt;code&gt;git branch -d &amp;lt;name&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;h3&gt;解决冲突&lt;/h3&gt;
&lt;p&gt;准备新的feature1分支，继续我们的新分支开发，在feature1分支上修改并提交，切换到master分支修改并提交，这种情况下，Git无法执行“快速合并”，只能试图把各自的修改合并起来，但这种合并就可能会有冲突：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ git merge feature1
Auto-merging readme.txt
CONFLICT (content): Merge conflict in readme.txt
Automatic merge failed; fix conflicts and then commit the result.&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Git用&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;，=======，&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;标记出不同分支的内容，我们修改如下后保存再提交：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ git add readme.txt
$ git commit -m &quot;conflict fixed&quot;
[master 59bc1cb] conflict fixed&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;用带参数的git log也可以看到分支的合并情况：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ git log --graph --pretty=oneline --abbrev-commit
*   59bc1cb conflict fixed
|\
| * 75a857c AND simple
* | 400b400 &amp;amp; simple
|/
* fec145a branch test&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;分支管理策略&lt;/h3&gt;
&lt;p&gt;通常，合并分支时，如果可能，Git会用Fast forward模式，但这种模式下，删除分支后，会丢掉分支信息。&lt;/p&gt;
&lt;p&gt;如果要强制禁用Fast forward模式，Git就会在merge时生成一个新的commit，这样，从分支历史上就可以看出分支信息。
在实际开发中，我们应该按照几个基本原则进行分支管理：&lt;/p&gt;
&lt;p&gt;首先，master分支应该是非常稳定的，也就是仅用来发布新版本，平时不能在上面干活；&lt;/p&gt;
&lt;p&gt;那在哪干活呢？干活都在dev分支上，也就是说，dev分支是不稳定的，到某个时候，比如1.0版本发布时，再把dev分支合并到master上，在master分支发布1.0版本；&lt;/p&gt;
&lt;p&gt;你和你的小伙伴们每个人都在dev分支上干活，每个人都有自己的分支，时不时地往dev分支上合并就可以了。&lt;/p&gt;
&lt;p&gt;所以，团队合作的分支看起来就像这样：
&lt;img src=&quot;./img/branch.png&quot; alt=&quot;branch&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;Bug分支&lt;/h3&gt;
&lt;p&gt;当你接到一个修复一个代号101的bug的任务时，很自然地，你想创建一个分支issue-101来修复它，但是，等等，当前正在dev上进行的工作还没有提交,并不是你不想提交，而是工作只进行到一半，还没法提交，预计完成还需1天时间。但是，必须在两个小时内修复该bug，怎么办？&lt;/p&gt;
&lt;p&gt;幸好，Git还提供了一个stash功能，可以把当前工作现场“储藏”起来，等以后恢复现场后继续工作：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ git stash
Saved working directory and index state WIP on dev: 6224937 add merge
HEAD is now at 6224937 add merge&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;小结&lt;/h4&gt;
&lt;p&gt;修复bug时，我们会通过创建新的bug分支进行修复，然后合并，最后删除；&lt;/p&gt;
&lt;p&gt;当手头工作没有完成时，先把工作现场&lt;code&gt;git stash&lt;/code&gt;一下，然后去修复bug，修复后，再&lt;code&gt;git stash pop&lt;/code&gt;，回到工作现场。&lt;/p&gt;
&lt;h3&gt;Feature分支&lt;/h3&gt;
&lt;h4&gt;小结&lt;/h4&gt;
&lt;p&gt;开发一个新feature，最好新建一个分支；&lt;/p&gt;
&lt;p&gt;如果要丢弃一个没有被合并过的分支，可以通过&lt;code&gt;git branch -D &amp;lt;name&amp;gt;&lt;/code&gt;强行删除。&lt;/p&gt;
&lt;h3&gt;多人协作&lt;/h3&gt;
&lt;p&gt;当你从远程仓库克隆时，实际上Git自动把本地的master分支和远程的master分支对应起来了，并且，远程仓库的默认名称是origin。&lt;/p&gt;
&lt;p&gt;要查看远程库的信息，用git remote：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ git remote
origin&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;或者，用git remote -v显示更详细的信息：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ git remote -v
origin  git@github.com:michaelliao/learngit.git (fetch)
origin  git@github.com:michaelliao/learngit.git (push)&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;上面显示了可以抓取和推送的origin的地址。如果没有推送权限，就看不到push的地址。&lt;/p&gt;
&lt;h4&gt;获取修改后内容&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;D:\MyDoc\GitHub\Notes\08-版本管理\Git [master]&amp;gt; git pull
Warning: Permanently added 'github.com,192.30.255.112' (RSA) to the list of known hosts.
There is no tracking information for the current branch.
Please specify which branch you want to merge with.
See git-pull(1) for details.

    git pull &amp;lt;remote&amp;gt; &amp;lt;branch&amp;gt;

If you wish to set tracking information for this branch you can do so with:

    git branch --set-upstream-to=origin/&amp;lt;branch&amp;gt; master

D:\MyDoc\GitHub\Notes\08-版本管理\Git [master]&amp;gt; git branch --set-upstream-to=origin/master master&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;推送分支&lt;/h4&gt;
&lt;p&gt;推送分支，就是把该分支上的所有本地提交推送到远程库。推送时，要指定本地分支，这样，Git就会把该分支推送到远程库对应的远程分支上：&lt;/p&gt;
&lt;p&gt;&lt;code&gt;$ git push origin master&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;如果要推送其他分支，比如dev，就改成：&lt;/p&gt;
&lt;p&gt;&lt;code&gt;$ git push origin dev&lt;/code&gt;
但是，并不是一定要把本地分支往远程推送，那么，哪些分支需要推送，哪些不需要呢？&lt;/p&gt;
&lt;p&gt;&lt;code&gt;master&lt;/code&gt;分支是主分支，因此要时刻与远程同步；&lt;/p&gt;
&lt;p&gt;&lt;code&gt;dev&lt;/code&gt;分支是开发分支，团队所有成员都需要在上面工作，所以也需要与远程同步；&lt;/p&gt;
&lt;p&gt;&lt;code&gt;bug&lt;/code&gt;分支只用于在本地修复bug，就没必要推到远程了，除非老板要看看你每周到底修复了几个bug；&lt;/p&gt;
&lt;p&gt;&lt;code&gt;feature&lt;/code&gt;分支是否推到远程，取决于你是否和你的小伙伴合作在上面开发。&lt;/p&gt;
&lt;p&gt;总之，就是在Git中，分支完全可以在本地自己藏着玩，是否推送，视你的心情而定！&lt;/p&gt;
&lt;p&gt;因此，多人协作的工作模式通常是这样：&lt;/p&gt;
&lt;p&gt;首先，可以试图用&lt;code&gt;git push origin branch-name&lt;/code&gt;推送自己的修改；&lt;/p&gt;
&lt;p&gt;如果推送失败，则因为远程分支比你的本地更新，需要先用&lt;code&gt;git pull&lt;/code&gt;试图合并；&lt;/p&gt;
&lt;p&gt;如果合并有冲突，则解决冲突，并在本地提交；&lt;/p&gt;
&lt;p&gt;没有冲突或者解决掉冲突后，再用&lt;code&gt;git push origin branch-name&lt;/code&gt;推送就能成功！&lt;/p&gt;
&lt;p&gt;如果&lt;code&gt;git pull&lt;/code&gt;提示“no tracking information”，则说明本地分支和远程分支的链接关系没有创建，用命令&lt;code&gt;git branch --set-upstream branch-name origin/branch-name&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;这就是多人协作的工作模式，一旦熟悉了，就非常简单。&lt;/p&gt;
&lt;h4&gt;小结&lt;/h4&gt;
&lt;p&gt;查看远程库信息，使用&lt;code&gt;git remote -v&lt;/code&gt;；&lt;/p&gt;
&lt;p&gt;本地新建的分支如果不推送到远程，对其他人就是不可见的；&lt;/p&gt;
&lt;p&gt;从本地推送分支，使用&lt;code&gt;git push origin branch-name&lt;/code&gt;，如果推送失败，先用&lt;code&gt;git pull&lt;/code&gt;抓取远程的新提交；&lt;/p&gt;
&lt;p&gt;在本地创建和远程分支对应的分支，使用&lt;code&gt;git checkout -b branch-name origin/branch-name&lt;/code&gt;，本地和远程分支的名称最好一致；&lt;/p&gt;
&lt;p&gt;建立本地分支和远程分支的关联，使用&lt;code&gt;git branch --set-upstream branch-name origin/branch-name&lt;/code&gt;；&lt;/p&gt;
&lt;p&gt;从远程抓取分支，使用&lt;code&gt;git pull&lt;/code&gt;，如果有冲突，要先处理冲突。&lt;/p&gt;            </description>
            <pubDate>2019-04-11 08:20:49</pubDate>
            <link>//blog/Notes/08-%B0%E6%B1%BE%B9%DC%C0%ED/Git/git.html</link>
            <guid isPermaLink="true">//blog/Notes/08-%B0%E6%B1%BE%B9%DC%C0%ED/Git/git.html</guid>
                                               <category>08-版本管理</category>
                                    </item>
                <item>
            <title>git使用教程</title>
            <description>
            &lt;!--
author: 王辉
head: http://blog.unuw.com/blog/logo.jpg
date: 2017-12-28
title: git使用教程
tags: git 版本管理
images: http://blog.unuw.com/blog/logo.jpg
category: 08-版本管理
status: publish
summary: git使用简单教程。
--&gt;
&lt;h1&gt;Git 教程&lt;/h1&gt;
&lt;p&gt;&lt;a href=&quot;https://www.liaoxuefeng.com/&quot;&gt;https://www.liaoxuefeng.com/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;markdown 语法：&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.appinn.com/markdown/&quot;&gt;http://www.appinn.com/markdown/&lt;/a&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;Git安装&lt;/h2&gt;
&lt;h3&gt;Linux下安装&lt;/h3&gt;
&lt;p&gt;首先，你可以试着输入git，看看系统有没有安装Git：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ git
The program 'git' is currently not installed. You can install it by typing:
sudo apt-get install git
$ yum install git-core -y&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;在Windows上安装Git&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://git-for-windows.github.io/&quot; title=&quot;Git&quot;&gt;github下载&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;安装完成后，在开始菜单里找到“Git”-&amp;gt;“Git Bash”&lt;/p&gt;
&lt;p&gt;安装完成后，还需要最后一步设置，在命令行输入：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ git config --global user.name &quot;Your Name&quot;
$ git config --global user.email &quot;email@example.com&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;创建版本库&lt;/h2&gt;
&lt;p&gt;什么是版本库呢？版本库又名仓库，英文名repository，你可以简单理解成一个目录，这个目录里面的所有文件都可以被Git管理起来，每个文件的修改、删除，Git都能跟踪，以便任何时刻都可以追踪历史，或者在将来某个时刻可以“还原”。&lt;/p&gt;
&lt;p&gt;所以，创建一个版本库非常简单，首先，选择一个合适的地方，创建一个空目录：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;HUI@HUI-THINK220 MINGW64 ~
$ mkdir /d/git/
$ cd /d/git/
$ pwd
/d/git&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;pwd&lt;/code&gt;命令用于显示当前目录。在我的Mac上，这个仓库位于&lt;code&gt;/Users/michael/learngit&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;如果你使用Windows系统，为了避免遇到各种莫名其妙的问题，请确保目录名（包括父目录）不包含中文。&lt;/p&gt;
&lt;p&gt;第二步，通过git init命令把这个目录变成Git可以管理的仓库：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ git init
Initialized empty Git repository in D:/git/.git/
$ ls -ah
./  ../  .git/&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;瞬间Git就把仓库建好了，而且告诉你是一个空的仓库（empty Git repository），细心的读者可以发现当前目录下多了一个&lt;code&gt;.git&lt;/code&gt;的目录，这个目录是Git来跟踪管理版本库的，没事千万不要手动修改这个目录里面的文件，不然改乱了，就把Git仓库给破坏了。&lt;/p&gt;
&lt;p&gt;如果你没有看到&lt;code&gt;.git&lt;/code&gt;目录，那是因为这个目录默认是隐藏的，用&lt;code&gt;ls -ah&lt;/code&gt;命令就可以看见。&lt;/p&gt;
&lt;p&gt;第一步，用命令git add告诉Git，把文件添加到仓库：&lt;/p&gt;
&lt;p&gt;&lt;code&gt;D:\MyDoc\GitHub\Notes\08-版本管理\Git [master +1 ~0 -0 !]&amp;gt; git add .\git.md&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;第二步，用命令git commit告诉Git，把文件提交到仓库：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;D:\MyDoc\GitHub\Notes\08-版本管理\Git [master +1 ~0 -0 | +3 ~0 -0 !]&amp;gt; git commit -m &quot;git file git.md&quot;
[master (root-commit) d1ee4a3] git file git.md
 1 file changed, 56 insertions(+)
 create mode 100644 &quot;Notes/08-\347\211\210\346\234\254\347\256\241\347\220\206/Git/git.md&quot;
D:\MyDoc\GitHub\Notes\08-版本管理\Git [master +3 ~0 -0 !]&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;小结&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;现在总结一下今天学的两点内容：&lt;/p&gt;
&lt;p&gt;1 初始化一个Git仓库，使用git init命令。&lt;/p&gt;
&lt;p&gt;2 添加文件到Git仓库，分两步：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;第一步，使用命令git add &lt;file&gt;，注意，可反复多次使用，添加多个文件；&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;第二步，使用命令git commit，完成。&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;hr /&gt;
&lt;h2&gt;时光穿梭机&lt;/h2&gt;
&lt;p&gt;之前田间了git.md文件，运行&lt;code&gt;git status&lt;/code&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;D:\MyDoc\GitHub\Notes\08-版本管理\Git [master +3 ~1 -0 !]&amp;gt; git status
On branch master
Changes not staged for commit:
  (use &quot;git add &amp;lt;file&amp;gt;...&quot; to update what will be committed)
  (use &quot;git checkout -- &amp;lt;file&amp;gt;...&quot; to discard changes in working directory)

        modified:   git.md

Untracked files:
  (use &quot;git add &amp;lt;file&amp;gt;...&quot; to include in what will be committed)

        img/
        &quot;../../30-\346\226\207\346\234\254\347\274\226\350\276\221/&quot;
        &quot;../../\350\277\220\347\273\264\345\267\245\345\205\267\344\275\223\347\263\273.md&quot;

no changes added to commit (use &quot;git add&quot; and/or &quot;git commit -a&quot;)
D:\MyDoc\GitHub\Notes\08-版本管理\Git [master +3 ~1 -0 !]&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;git status&lt;/code&gt;确认仓库状态&lt;/li&gt;
&lt;li&gt;&lt;code&gt;git diff git.md&lt;/code&gt;对比修改前后&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;小结&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;要随时掌握工作区的状态，使用git status命令。&lt;/p&gt;
&lt;p&gt;如果&lt;code&gt;git status&lt;/code&gt;告诉你有文件被修改过，用&lt;code&gt;git diff&lt;/code&gt;可以查看修改内容。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;版本回退&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;git log&lt;/code&gt;令显示从最近到最远的提交日志，如果嫌输出信息太多，看得眼花缭乱的，可以试试加上--pretty=oneline参数：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;D:\MyDoc\GitHub\Notes\08-版本管理\Git [master +3 ~0 -0 !]&amp;gt; git log
commit 7ba4071416ba21e4d7e3fd578278bcf07ed0c280
Author: wanghui &amp;lt;wanghui3w@139.com&amp;gt;
Date:   Tue Jul 18 11:03:24 2017 +0800

    4

commit 4ce15acc90b56f162328288bc348f31d6a0f672e
Author: wanghui &amp;lt;wanghui3w@139.com&amp;gt;
Date:   Tue Jul 18 10:47:34 2017 +0800

    第三次

commit cf3fa8e4f566225e1c804daae94d4d68dc438d1b
Author: wanghui &amp;lt;wanghui3w@139.com&amp;gt;
Date:   Tue Jul 18 10:41:03 2017 +0800

    第二次commit

commit 01c42de30c64591323d07092db35a13496be17d2
Author: wanghui &amp;lt;wanghui3w@139.com&amp;gt;
Date:   Tue Jul 18 10:39:00 2017 +0800

    git test file get-test.txt

commit d1ee4a38ee3a3d785e2ff1c803d9fc9303a2e7a8
Author: wanghui &amp;lt;wanghui3w@139.com&amp;gt;
Date:   Tue Jul 18 10:14:57 2017 +0800

    git file git.md
D:\MyDoc\GitHub\Notes\08-版本管理\Git [master +3 ~0 -0 !]&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;D:\MyDoc\GitHub\Notes\08-版本管理\Git [master +3 ~0 -0 !]&amp;gt; git log --pretty=oneline
7ba4071416ba21e4d7e3fd578278bcf07ed0c280 4
4ce15acc90b56f162328288bc348f31d6a0f672e 第三次
cf3fa8e4f566225e1c804daae94d4d68dc438d1b 第二次commit
01c42de30c64591323d07092db35a13496be17d2 git test file get-test.txt
d1ee4a38ee3a3d785e2ff1c803d9fc9303a2e7a8 git file git.md
D:\MyDoc\GitHub\Notes\08-版本管理\Git [master +3 ~1 -0 !]&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;首先，Git必须知道当前版本是哪个版本，在Git中，用HEAD表示当前版本，也就是最新的提交7ba4071416ba21e4d7e3fd578278bcf07ed0c280（注意提交ID每个人不一样），上一个版本就是HEAD^，上上一个版本就是HEAD^^，当然往上100个版本写100个^比较容易数不过来，所以写成HEAD~100。现在，我们要把当前版回退到上一个版本，就可以使用&lt;code&gt;git reset&lt;/code&gt;命令：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ git reset --hard HEAD^&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;只要上面的命令行窗口还没有被关掉，你就可以顺着往上找啊找啊，找到那个append GPL的commit id是3628164...，于是就可以指定回到未来的某个版本：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git reset --hard 3628164&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Git的版本回退速度非常快，因为Git在内部有个指向当前版本的HEAD指针，当你回退版本的时候，Git仅仅是把HEAD从指向上个版本标签，然后顺便把工作区的文件更新了。所以你让HEAD指向哪个版本号，你就把当前版本定位在哪。&lt;/p&gt;
&lt;p&gt;Git提供了一个命令&lt;code&gt;git reflog&lt;/code&gt;用来记录你的每一次命令：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;D:\MyDoc\GitHub\Notes\08-版本管理\Git [master +3 ~1 -0 !]&amp;gt; git reflog
7ba4071 HEAD@{0}: commit: 4
4ce15ac HEAD@{1}: commit: 第三次
cf3fa8e HEAD@{2}: commit: 第二次commit
01c42de HEAD@{3}: commit: git test file get-test.txt
d1ee4a3 HEAD@{4}: commit (initial): git file git.md
D:\MyDoc\GitHub\Notes\08-版本管理\Git [master +3 ~1 -0 !]&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;小结&lt;/h3&gt;
&lt;p&gt;现在总结一下：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;HEAD指向的版本就是当前版本，因此，Git允许我们在版本的历史之间穿梭，使用命令git reset --hard commit_id。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;穿梭前，用git log可以查看提交历史，以便确定要回退到哪个版本。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;要重返未来，用git reflog查看命令历史，以便确定要回到未来的哪个版本。&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;h2&gt;工作区和暂存区&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;工作区（Working Directory）：&lt;/strong&gt; 就是你在电脑里能看到的目录。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;暂存区（Stage）：&lt;/strong&gt; 通过&lt;code&gt;git add&lt;/code&gt; 后的文件，暂时放在暂存区&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;版本库（Repository）：&lt;/strong&gt; 工作区有一个隐藏目录.git，这个不算工作区，而是Git的版本库。&lt;/p&gt;
&lt;p&gt;前面讲了我们把文件往Git版本库里添加的时候，是分两步执行的：&lt;/p&gt;
&lt;p&gt;第一步是用&lt;code&gt;git add&lt;/code&gt;把文件添加进去，实际上就是把文件修改添加到暂存区；&lt;/p&gt;
&lt;p&gt;第二步是用&lt;code&gt;git commit&lt;/code&gt;提交更改，实际上就是把暂存区的所有内容提交到当前分支。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;git add&lt;/code&gt;命令实际上就是把要提交的所有修改放到暂存区（Stage），然后，执行&lt;code&gt;git commit&lt;/code&gt;就可以一次性把暂存区的所有修改提交到分支。一旦提交后，如果你又没有对工作区做任何修改，那么工作区就是“干净”的，暂存区是空的。&lt;/p&gt;
&lt;h3&gt;小结&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;暂存区是Git非常重要的概念，弄明白了暂存区，就弄明白了Git的很多操作到底干了什么。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;管理修改&lt;/h2&gt;
&lt;h3&gt;小结&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;现在，你又理解了Git是如何跟踪修改的，每次修改，如果不add到暂存区，那就不会加入到commit中。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;撤销修改&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;回到上一个修改：&lt;/strong&gt; &lt;code&gt;git reset HEAD readme.txt&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;清空缓存区：&lt;/strong&gt; &lt;code&gt;git checkout -- readme.txt&lt;/code&gt;（注意两个减号）,可以丢弃工作区的修改。&lt;/p&gt;
&lt;p&gt;命令&lt;code&gt;git checkout -- readme.txt&lt;/code&gt;意思就是，把readme.txt文件在工作区的修改全部撤销，这里有两种情况：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;一种是readme.txt自修改后还没有被放到暂存区，现在，撤销修改就回到和版本库一模一样的状态；&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;一种是readme.txt已经添加到暂存区后，又作了修改，现在，撤销修改就回到添加到暂存区后的状态。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;总之，就是让这个文件回到最近一次git commit或git add时的状态。&lt;/p&gt;
&lt;h3&gt;小结&lt;/h3&gt;
&lt;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;场景1：当你改乱了工作区某个文件的内容，想直接丢弃工作区的修改时，用命令&lt;code&gt;git checkout -- file&lt;/code&gt;。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;场景2：当你不但改乱了工作区某个文件的内容，还添加到了暂存区时，想丢弃修改，分两步，第一步用命令&lt;code&gt;git reset HEAD file&lt;/code&gt;，就回到了场景1，第二步按场景1操作。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;场景3：已经提交了不合适的修改到版本库时，想要撤销本次提交，参考版本回退一节，不过前提是没有推送到远程库。&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;h2&gt;删除文件&lt;/h2&gt;
&lt;h3&gt;第一种：&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;操作系统下直接删除&lt;code&gt;rm test.txt&lt;/code&gt;，如果需要找回&lt;code&gt;git checkout -- test.txt&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;git rm test.txt&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;git commit -m &quot;delete test&quot;&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;第二种&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;git rm test.txt&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;git commit -m &quot;delete test&quot;&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;小结&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;git checkout&lt;/code&gt;其实是用版本库里的版本替换工作区的版本，无论工作区是修改还是删除，都可以“一键还原”。命令&lt;code&gt;git rm&lt;/code&gt;用于删除一个文件。如果一个文件已经被提交到版本库，那么你永远不用担心误删，但是要小心，你只能恢复文件到最新版本，你会丢失最近一次提交后你修改的内容。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr /&gt;
&lt;h2&gt;远程仓库&lt;/h2&gt;
&lt;p&gt;注册GitHub账号。由于你的本地Git仓库和GitHub仓库之间的传输是通过SSH加密的，所以，需要一点设置：&lt;/p&gt;
&lt;h4&gt;第1步：创建SSH Key&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;$ ssh-keygen -t rsa -C &quot;wanghui3w@139.com&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;第2步：登陆GitHub&lt;/h4&gt;
&lt;p&gt;打开“Account settings”，“SSH Keys”页面，然后点“Add SSH Key”，填上任意Title，在Key文本框里粘贴id_rsa.pub文件的内容。&lt;/p&gt;
&lt;p&gt;git出现问题，参考了：&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://blog.csdn.net/laner415/article/details/52966890&quot;&gt;http://blog.csdn.net/laner415/article/details/52966890&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://my.oschina.net/uniquejava/blog/165140&quot;&gt;https://my.oschina.net/uniquejava/blog/165140&lt;/a&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;问题（Non-fast-forward）的出现原因在于：git仓库中已经有一部分代码，所以它不允许你直接把你的代码覆盖上去。于是你有2个选择方式：

1，强推，即利用强覆盖方式用你本地的代码替代git仓库内的内容

git push -f

2，先把git的东西fetch到你本地然后merge后再push

$ git fetch

$ git merge

这2句命令等价于

$ git pull&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;添加远程仓库&lt;/h3&gt;
&lt;p&gt;登陆GitHub，然后，在右上角找到“Create a new repo”按钮，创建一个新的仓库，然后执行命令，将本地库与远程库关联，并执行推送：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ git remote add origin git@github.com:michaelliao/learngit.git
$ git push -u origin master&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;小结&lt;/h4&gt;
&lt;p&gt;要关联一个远程库，使用命令&lt;code&gt;git remote add origin git@server-name:path/repo-name.git&lt;/code&gt;；&lt;/p&gt;
&lt;p&gt;关联后，使用命令&lt;code&gt;git push -u origin master&lt;/code&gt;第一次推送master分支的所有内容；&lt;/p&gt;
&lt;p&gt;此后，每次本地提交后，只要有必要，就可以使用命令&lt;code&gt;git push origin master&lt;/code&gt;推送最新修改；&lt;/p&gt;
&lt;p&gt;分布式版本系统的最大好处之一是在本地工作完全不需要考虑远程库的存在，也就是有没有联网都可以正常工作，而SVN在没有联网的时候是拒绝干活的！当有网络的时候，再把本地提交推送一下就完成了同步，真是太方便了！&lt;/p&gt;
&lt;h3&gt;从远程库克隆&lt;/h3&gt;
&lt;p&gt;首先，登陆GitHub，创建一个新的仓库，勾选Initialize this repository with a README，这样GitHub会自动为我们创建一个README.md文件。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ git clone git@github.com:michaelliao/gitskills.git
Cloning into 'gitskills'...
remote: Counting objects: 3, done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (3/3), done.

$ cd gitskills
$ ls
README.md&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;如果有多个人协作开发，那么每个人各自从远程克隆一份就可以了。&lt;/p&gt;
&lt;p&gt;你也许还注意到，GitHub给出的地址不止一个，还可以用&lt;code&gt;https://github.com/michaelliao/gitskills.git&lt;/code&gt;这样的地址。实际上，Git支持多种协议，默认的git://使用ssh，但也可以使用https等其他协议。&lt;/p&gt;
&lt;p&gt;使用https除了速度慢以外，还有个最大的麻烦是每次推送都必须输入口令，但是在某些只开放http端口的公司内部就无法使用ssh协议而只能用https。&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;分支管理&lt;/h2&gt;
&lt;h3&gt;创建与合并分支&lt;/h3&gt;
&lt;p&gt;首先，我们创建dev分支，然后切换到dev分支：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ git checkout -b dev
Switched to a new branch 'dev'&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;git checkout&lt;/code&gt;命令加上-b参数表示创建并切换，相当于以下两条命令：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ git branch dev
$ git checkout dev
Switched to branch 'dev'&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;然后，用&lt;code&gt;git branch&lt;/code&gt;命令查看当前分支：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ git branch
* dev
  master&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;然后提交：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ git add readme.txt
$ git commit -m &quot;branch test&quot;
[dev fec145a] branch test
 1 file changed, 1 insertion(+)&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;现在，dev分支的工作完成，我们就可以切换回master分支：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ git checkout master
Switched to branch 'master'&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;把dev分支的工作成果合并到master分支上：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ git merge dev
Updating d17efd8..fec145a
Fast-forward
 readme.txt |    1 +
 1 file changed, 1 insertion(+)&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;合并完成后，就可以放心地删除dev分支了：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ git branch -d dev
Deleted branch dev (was fec145a).&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;小结&lt;/h4&gt;
&lt;p&gt;Git鼓励大量使用分支：&lt;/p&gt;
&lt;p&gt;查看分支：&lt;code&gt;git branch&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;创建分支：&lt;code&gt;git branch &amp;lt;name&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;切换分支：&lt;code&gt;git checkout &amp;lt;name&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;创建+切换分支：&lt;code&gt;git checkout -b &amp;lt;name&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;合并某分支到当前分支：&lt;code&gt;git merge &amp;lt;name&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;删除分支：&lt;code&gt;git branch -d &amp;lt;name&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;h3&gt;解决冲突&lt;/h3&gt;
&lt;p&gt;准备新的feature1分支，继续我们的新分支开发，在feature1分支上修改并提交，切换到master分支修改并提交，这种情况下，Git无法执行“快速合并”，只能试图把各自的修改合并起来，但这种合并就可能会有冲突：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ git merge feature1
Auto-merging readme.txt
CONFLICT (content): Merge conflict in readme.txt
Automatic merge failed; fix conflicts and then commit the result.&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Git用&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;，=======，&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;标记出不同分支的内容，我们修改如下后保存再提交：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ git add readme.txt
$ git commit -m &quot;conflict fixed&quot;
[master 59bc1cb] conflict fixed&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;用带参数的git log也可以看到分支的合并情况：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ git log --graph --pretty=oneline --abbrev-commit
*   59bc1cb conflict fixed
|\
| * 75a857c AND simple
* | 400b400 &amp;amp; simple
|/
* fec145a branch test&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;分支管理策略&lt;/h3&gt;
&lt;p&gt;通常，合并分支时，如果可能，Git会用Fast forward模式，但这种模式下，删除分支后，会丢掉分支信息。&lt;/p&gt;
&lt;p&gt;如果要强制禁用Fast forward模式，Git就会在merge时生成一个新的commit，这样，从分支历史上就可以看出分支信息。
在实际开发中，我们应该按照几个基本原则进行分支管理：&lt;/p&gt;
&lt;p&gt;首先，master分支应该是非常稳定的，也就是仅用来发布新版本，平时不能在上面干活；&lt;/p&gt;
&lt;p&gt;那在哪干活呢？干活都在dev分支上，也就是说，dev分支是不稳定的，到某个时候，比如1.0版本发布时，再把dev分支合并到master上，在master分支发布1.0版本；&lt;/p&gt;
&lt;p&gt;你和你的小伙伴们每个人都在dev分支上干活，每个人都有自己的分支，时不时地往dev分支上合并就可以了。&lt;/p&gt;
&lt;p&gt;所以，团队合作的分支看起来就像这样：
&lt;img src=&quot;./img/branch.png&quot; alt=&quot;branch&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;Bug分支&lt;/h3&gt;
&lt;p&gt;当你接到一个修复一个代号101的bug的任务时，很自然地，你想创建一个分支issue-101来修复它，但是，等等，当前正在dev上进行的工作还没有提交,并不是你不想提交，而是工作只进行到一半，还没法提交，预计完成还需1天时间。但是，必须在两个小时内修复该bug，怎么办？&lt;/p&gt;
&lt;p&gt;幸好，Git还提供了一个stash功能，可以把当前工作现场“储藏”起来，等以后恢复现场后继续工作：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ git stash
Saved working directory and index state WIP on dev: 6224937 add merge
HEAD is now at 6224937 add merge&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;小结&lt;/h4&gt;
&lt;p&gt;修复bug时，我们会通过创建新的bug分支进行修复，然后合并，最后删除；&lt;/p&gt;
&lt;p&gt;当手头工作没有完成时，先把工作现场&lt;code&gt;git stash&lt;/code&gt;一下，然后去修复bug，修复后，再&lt;code&gt;git stash pop&lt;/code&gt;，回到工作现场。&lt;/p&gt;
&lt;h3&gt;Feature分支&lt;/h3&gt;
&lt;h4&gt;小结&lt;/h4&gt;
&lt;p&gt;开发一个新feature，最好新建一个分支；&lt;/p&gt;
&lt;p&gt;如果要丢弃一个没有被合并过的分支，可以通过&lt;code&gt;git branch -D &amp;lt;name&amp;gt;&lt;/code&gt;强行删除。&lt;/p&gt;
&lt;h3&gt;多人协作&lt;/h3&gt;
&lt;p&gt;当你从远程仓库克隆时，实际上Git自动把本地的master分支和远程的master分支对应起来了，并且，远程仓库的默认名称是origin。&lt;/p&gt;
&lt;p&gt;要查看远程库的信息，用git remote：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ git remote
origin&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;或者，用git remote -v显示更详细的信息：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ git remote -v
origin  git@github.com:michaelliao/learngit.git (fetch)
origin  git@github.com:michaelliao/learngit.git (push)&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;上面显示了可以抓取和推送的origin的地址。如果没有推送权限，就看不到push的地址。&lt;/p&gt;
&lt;h4&gt;获取修改后内容&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;D:\MyDoc\GitHub\Notes\08-版本管理\Git [master]&amp;gt; git pull
Warning: Permanently added 'github.com,192.30.255.112' (RSA) to the list of known hosts.
There is no tracking information for the current branch.
Please specify which branch you want to merge with.
See git-pull(1) for details.

    git pull &amp;lt;remote&amp;gt; &amp;lt;branch&amp;gt;

If you wish to set tracking information for this branch you can do so with:

    git branch --set-upstream-to=origin/&amp;lt;branch&amp;gt; master

D:\MyDoc\GitHub\Notes\08-版本管理\Git [master]&amp;gt; git branch --set-upstream-to=origin/master master&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;推送分支&lt;/h4&gt;
&lt;p&gt;推送分支，就是把该分支上的所有本地提交推送到远程库。推送时，要指定本地分支，这样，Git就会把该分支推送到远程库对应的远程分支上：&lt;/p&gt;
&lt;p&gt;&lt;code&gt;$ git push origin master&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;如果要推送其他分支，比如dev，就改成：&lt;/p&gt;
&lt;p&gt;&lt;code&gt;$ git push origin dev&lt;/code&gt;
但是，并不是一定要把本地分支往远程推送，那么，哪些分支需要推送，哪些不需要呢？&lt;/p&gt;
&lt;p&gt;&lt;code&gt;master&lt;/code&gt;分支是主分支，因此要时刻与远程同步；&lt;/p&gt;
&lt;p&gt;&lt;code&gt;dev&lt;/code&gt;分支是开发分支，团队所有成员都需要在上面工作，所以也需要与远程同步；&lt;/p&gt;
&lt;p&gt;&lt;code&gt;bug&lt;/code&gt;分支只用于在本地修复bug，就没必要推到远程了，除非老板要看看你每周到底修复了几个bug；&lt;/p&gt;
&lt;p&gt;&lt;code&gt;feature&lt;/code&gt;分支是否推到远程，取决于你是否和你的小伙伴合作在上面开发。&lt;/p&gt;
&lt;p&gt;总之，就是在Git中，分支完全可以在本地自己藏着玩，是否推送，视你的心情而定！&lt;/p&gt;
&lt;p&gt;因此，多人协作的工作模式通常是这样：&lt;/p&gt;
&lt;p&gt;首先，可以试图用&lt;code&gt;git push origin branch-name&lt;/code&gt;推送自己的修改；&lt;/p&gt;
&lt;p&gt;如果推送失败，则因为远程分支比你的本地更新，需要先用&lt;code&gt;git pull&lt;/code&gt;试图合并；&lt;/p&gt;
&lt;p&gt;如果合并有冲突，则解决冲突，并在本地提交；&lt;/p&gt;
&lt;p&gt;没有冲突或者解决掉冲突后，再用&lt;code&gt;git push origin branch-name&lt;/code&gt;推送就能成功！&lt;/p&gt;
&lt;p&gt;如果&lt;code&gt;git pull&lt;/code&gt;提示“no tracking information”，则说明本地分支和远程分支的链接关系没有创建，用命令&lt;code&gt;git branch --set-upstream branch-name origin/branch-name&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;这就是多人协作的工作模式，一旦熟悉了，就非常简单。&lt;/p&gt;
&lt;h4&gt;小结&lt;/h4&gt;
&lt;p&gt;查看远程库信息，使用&lt;code&gt;git remote -v&lt;/code&gt;；&lt;/p&gt;
&lt;p&gt;本地新建的分支如果不推送到远程，对其他人就是不可见的；&lt;/p&gt;
&lt;p&gt;从本地推送分支，使用&lt;code&gt;git push origin branch-name&lt;/code&gt;，如果推送失败，先用&lt;code&gt;git pull&lt;/code&gt;抓取远程的新提交；&lt;/p&gt;
&lt;p&gt;在本地创建和远程分支对应的分支，使用&lt;code&gt;git checkout -b branch-name origin/branch-name&lt;/code&gt;，本地和远程分支的名称最好一致；&lt;/p&gt;
&lt;p&gt;建立本地分支和远程分支的关联，使用&lt;code&gt;git branch --set-upstream branch-name origin/branch-name&lt;/code&gt;；&lt;/p&gt;
&lt;p&gt;从远程抓取分支，使用&lt;code&gt;git pull&lt;/code&gt;，如果有冲突，要先处理冲突。&lt;/p&gt;            </description>
            <pubDate>2018-05-12 14:38:27</pubDate>
            <link>//blog/Notes.bak/08-%B0%E6%B1%BE%B9%DC%C0%ED/Git/git.html</link>
            <guid isPermaLink="true">//blog/Notes.bak/08-%B0%E6%B1%BE%B9%DC%C0%ED/Git/git.html</guid>
                                               <category>08-版本管理</category>
                                    </item>
                <item>
            <title>keepalived安装配置</title>
            <description>
            &lt;!--
author: 王辉
head: http://blog.unuw.com/blog/logo.jpg
date: 2017-12-28
title: keepalived安装配置
tags: keepalived
images: http://blog.unuw.com/blog/logo.jpg
category: 04-代理相关
status: publish
summary: keepalived安装配置。
--&gt;
&lt;h3&gt;安装&lt;/h3&gt;
&lt;p&gt;yum install keepalived&lt;/p&gt;
&lt;h3&gt;修改配置文件&lt;/h3&gt;
&lt;p&gt;cd /etc/keepalived/
vim keepalived.conf&lt;/p&gt;
&lt;p&gt;systemctl enable keepalived
systemctl start keepalived&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;[root@ops-83 ~]# cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived

global_defs {
   notification_email {
        wanghui3w@139.com
   }

   notification_email_from wanghui3w@139.com
   smtp_server smtp.139.com
   smtp_connect_timeout 30
   router_id NGINX_UPSTREAM
}

vrrp_instance VI_1 {
    state MASTER
    interface eno16777984
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1346
    }
    virtual_ipaddress {
        192.168.0.123
    }
}
[root@ops-83 ~]#&lt;/code&gt;&lt;/pre&gt;            </description>
            <pubDate>2018-05-12 14:38:27</pubDate>
            <link>//blog/Notes.bak/04-%B4%FA%C0%ED%CF%E0%B9%D8/keepalived.html</link>
            <guid isPermaLink="true">//blog/Notes.bak/04-%B4%FA%C0%ED%CF%E0%B9%D8/keepalived.html</guid>
                                               <category>04-代理相关</category>
                                    </item>
                <item>
            <title>windows下mysql安装</title>
            <description>
            &lt;!--
author: 王辉
head: http://blog.unuw.com/blog/logo.jpg
date: 2017-12-28
title: windows下mysql安装
tags: windows mysql
images: http://blog.unuw.com/blog/logo.jpg
category: 03-数据库
status: publish
summary: windows下mysql安装。
--&gt;
&lt;h1&gt;mysql安装&lt;/h1&gt;
&lt;p&gt;环境:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;系统：windows10&lt;/li&gt;
&lt;li&gt;mysql：5.7.19&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;下载MySQL&lt;/h2&gt;
&lt;h2&gt;解压并安装&lt;/h2&gt;
&lt;h3&gt;解压至目录&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;D:\app\mysql-5.7.19-winx64&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;配置环境变量&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;键名：MYSQL_HOME
值为：D:\app\mysql-5.7.19-winx64&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;准备my.cnf文件&lt;/h3&gt;
&lt;p&gt;里面使用了%MYSQL_HOME%变量，有问题，所以改写了绝对路径；文件放置在主目录。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;[client]
port=3306
default-character-set=utf8
[mysqld]
port=3306
character_set_server=utf8
basedir=D:\app\mysql-5.7.19-winx64
datadir=D:\app\mysql-5.7.19-winx64\data
[WinMySQLAdmin]
D:\app\mysql-5.7.19-winx64\bin\mysqld.exe&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;管理员身份执行cmd&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;mysqld.exe -install
mysqld --initialize-insecure --user=mysql #windows下不需要使用`--user`参数
net start mysql
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;修改密码&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;D:\app\mysql-5.7.19-winx64&amp;gt;mysqladmin -u root -p password
Enter password:
New password: *******
Confirm new password: *******
Warning: Since password will be sent to server in plain text, use ssl connection to ensure password safety.&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;登陆&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;D:\app\mysql-5.7.19-winx64&amp;gt;mysql -uroot -p
Enter password: *******
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 7
Server version: 5.7.19 MySQL Community Server (GPL)

Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql&amp;gt; show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.00 sec)

mysql&amp;gt; exit&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;删除数据库&lt;/h3&gt;
&lt;p&gt;如果不再想用mysql了，则可以执行如下命令：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;mysqld --remove&lt;/code&gt;&lt;/pre&gt;            </description>
            <pubDate>2019-04-11 08:20:49</pubDate>
            <link>//blog/Notes/03-%CA%FD%BE%DD%BF%E2/mysql/mysql-win.html</link>
            <guid isPermaLink="true">//blog/Notes/03-%CA%FD%BE%DD%BF%E2/mysql/mysql-win.html</guid>
                                               <category>03-数据库</category>
                                    </item>
                <item>
            <title>windows下mysql安装</title>
            <description>
            &lt;!--
author: 王辉
head: http://blog.unuw.com/blog/logo.jpg
date: 2017-12-28
title: windows下mysql安装
tags: windows mysql
images: http://blog.unuw.com/blog/logo.jpg
category: 03-数据库
status: publish
summary: windows下mysql安装。
--&gt;
&lt;h1&gt;mysql安装&lt;/h1&gt;
&lt;p&gt;环境:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;系统：windows10&lt;/li&gt;
&lt;li&gt;mysql：5.7.19&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;下载MySQL&lt;/h2&gt;
&lt;h2&gt;解压并安装&lt;/h2&gt;
&lt;h3&gt;解压至目录&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;D:\app\mysql-5.7.19-winx64&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;配置环境变量&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;键名：MYSQL_HOME
值为：D:\app\mysql-5.7.19-winx64&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;准备my.cnf文件&lt;/h3&gt;
&lt;p&gt;里面使用了%MYSQL_HOME%变量，有问题，所以改写了绝对路径；文件放置在主目录。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;[client]
port=3306
default-character-set=utf8
[mysqld]
port=3306
character_set_server=utf8
basedir=D:\app\mysql-5.7.19-winx64
datadir=D:\app\mysql-5.7.19-winx64\data
[WinMySQLAdmin]
D:\app\mysql-5.7.19-winx64\bin\mysqld.exe&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;管理员身份执行cmd&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;mysqld.exe -install
mysqld --initialize-insecure --user=mysql #windows下不需要使用`--user`参数
net start mysql
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;修改密码&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;D:\app\mysql-5.7.19-winx64&amp;gt;mysqladmin -u root -p password
Enter password:
New password: *******
Confirm new password: *******
Warning: Since password will be sent to server in plain text, use ssl connection to ensure password safety.&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;登陆&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;D:\app\mysql-5.7.19-winx64&amp;gt;mysql -uroot -p
Enter password: *******
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 7
Server version: 5.7.19 MySQL Community Server (GPL)

Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql&amp;gt; show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.00 sec)

mysql&amp;gt; exit&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;删除数据库&lt;/h3&gt;
&lt;p&gt;如果不再想用mysql了，则可以执行如下命令：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;mysqld --remove&lt;/code&gt;&lt;/pre&gt;            </description>
            <pubDate>2018-05-12 14:38:27</pubDate>
            <link>//blog/Notes.bak/03-%CA%FD%BE%DD%BF%E2/mysql/mysql-win.html</link>
            <guid isPermaLink="true">//blog/Notes.bak/03-%CA%FD%BE%DD%BF%E2/mysql/mysql-win.html</guid>
                                               <category>03-数据库</category>
                                    </item>
                <item>
            <title>Tomcat JAVA 配置</title>
            <description>
            &lt;!--
author: 王辉
head: http://blog.unuw.com/blog/logo.jpg
date: 2017-12-28
title: Tomcat JAVA 配置
tags: tomcat java
images: http://blog.unuw.com/blog/logo.jpg
category: 02-网站服务
status: publish
summary: Tomcat JAVA 配置。
--&gt;
&lt;h1&gt;Tomcat &amp;amp;&amp;amp; JAVA&lt;/h1&gt;
&lt;p&gt;&lt;strong&gt;所有web服务器上线前需要修改limit&lt;/strong&gt;&lt;/p&gt;
&lt;h2&gt;基本概念&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;jdk：java开发工具包（包含jre）&lt;/li&gt;
&lt;li&gt;jre：java运行环境&lt;/li&gt;
&lt;li&gt;SDK: 软件开发工具包&lt;/li&gt;
&lt;li&gt;j2ee:企业应用类库&lt;/li&gt;
&lt;li&gt;j2se:标准应用类库&lt;/li&gt;
&lt;li&gt;j2me:手机微型应用类库&lt;/li&gt;
&lt;li&gt;jdk: JDK是 Java 语言的软件开发工具包
&lt;h2&gt;下载&lt;/h2&gt;
&lt;p&gt;tomcat：\
&lt;a href=&quot;http://tomcat.apache.org/download-80.cgi#8.0.44&quot;&gt;http://tomcat.apache.org/download-80.cgi#8.0.44&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;jdk：\
&lt;a href=&quot;http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html&quot;&gt;http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;创建用户，统一uid，方便以后运维&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;[root@ops-82 ~]# useradd -u 601 tomcat
[root@ops-82 ~]# passwd tomcat
Changing password for user tomcat.
New password:
BAD PASSWORD: The password is shorter than 8 characters
Retype new password:  
passwd: all authentication tokens updated successfully.
[root@ops-82 ~]# id tomcat
uid=601(tomcat) gid=1000(tomcat) groups=1000(tomcat)
[root@ops-82 ~]#

不确定uid、gid不相等原有， 使用下述方法创建
[root@ops-81 ~]# groupadd -g 601 tomcat
[root@ops-81 ~]# useradd -u 601 -g 601 tomcat&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;安装&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;[root@ops-82 backup]# tar zxf jdk-8u131-linux-x64.tar.gz
root@ops-82 backup]# mv jdk
jdk1.8.0_131/               jdk-8u131-linux-x64.tar.gz
[root@ops-82 backup]# mv jdk
jdk1.8.0_131/               jdk-8u131-linux-x64.tar.gz  
[root@ops-82 backup]# mv jdk1.8.0_131/ /usr/local/
[root@ops-82 backup]# ln -s /usr/local/jdk1.8.0_131/ /usr/local/jdk
[root@ops-82 backup]#
[root@ops-82 backup]# tar zxf apache-tomcat-8.0.44.tar.gz
[root@ops-82 backup]# mv apache-tomcat-8.0.44 /usr/local
[root@ops-82 backup]# ln -s /usr/local/apache-tomcat-8.0.44/ /usr/local/tomcat
[root@ops-82 backup]#&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;设置环境变量&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;[root@ops-82 local]# vim /etc/profile
export JAVA_HOME=/usr/local/jdk
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
export CLASSPATH=.$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$JAVA_HOME/lib/tools.jar
export TOMCAT_HOME=/usr/local/tomcat
[root@ops-82 local]# source /etc/profile
[root@ops-82 local]# java -version
java version &quot;1.8.0_131&quot;
Java(TM) SE Runtime Environment (build 1.8.0_131-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.131-b11, mixed mode)
[root@ops-82 local]#&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;设置权限并切换用户&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;[root@ops-82 local]# chown -R tomcat.tomcat /usr/local/jdk
[root@ops-82 local]# chown -R tomcat.tomcat /usr/local/tomcat/
[root@ops-82 local]# su - tomcat
Last login: Wed Jun 28 11:09:05 CST 2017 on pts/0
[tomcat@ops-82 ~]$&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;启动&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;[tomcat@ops-82 ~]$ cd /usr/local/tomcat/bin/
[tomcat@ops-82 bin]$ ./startup.sh
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr/local/jdk
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Tomcat started.
[tomcat@ops-82 bin]$&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;默认8080端口，检查端口\
&lt;code&gt;[tomcat@ops-82 bin]$ netstat -nltp&lt;/code&gt;\
检查日志&lt;code&gt;/usr/local/tomcat/logs&lt;/code&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;[tomcat@ops-82 logs]$ ls
catalina.2017-06-28.log  host-manager.2017-06-28.log  localhost_access_log.2017-06-28.txt
catalina.out             localhost.2017-06-28.log     manager.2017-06-28.log
[tomcat@ops-82 logs]$&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;配置文件&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;[tomcat@ops-82 conf]$ pwd
/usr/local/tomcat/conf
[tomcat@ops-82 conf]$ ls
Catalina         catalina.properties  logging.properties  tomcat-users.xml  web.xml
catalina.policy  context.xml          server.xml          tomcat-users.xsd
[tomcat@ops-82 conf]$&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;默认根路径，一般情况下不修改，默认放在root下是不需要加路径的&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;[tomcat@ops-82 webapps]$ pwd
/usr/local/tomcat/webapps
[tomcat@ops-82 webapps]$ ls
docs  examples  host-manager  manager  ROOT&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;配置用户名密码，增加内容&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;[tomcat@ops-82 conf]$ vim tomcat-users.xml
  &amp;lt;role rolename=&quot;manager-gui&quot;/&amp;gt;
  &amp;lt;role rolename=&quot;admin-gui&quot;/&amp;gt;
  &amp;lt;user username=&quot;tomcat&quot; password=&quot;wanghui&quot; roles=&quot;manager-gui,admin-gui&quot;/&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;重启f服务&lt;/h2&gt;
&lt;h3&gt;临时目录每次重启要清空&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;/usr/local/tomcat/temp&lt;/code&gt;
&lt;code&gt;/usr/local/tomcat/work&lt;/code&gt;&lt;/p&gt;
&lt;h3&gt;关闭&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;[tomcat@ops-82 work]$ cd /usr/local/tomcat/bin/
[tomcat@ops-82 bin]$ ./shutdown.sh
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr/local/jdk
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
[tomcat@ops-82 bin]$&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;重启、启动、关闭脚本&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;[root@ops-82 bin]# cat tomcat.sh
#!/bin/bash
TOMCAT_PATH=/usr/local/tomcat

usage(){
echo &quot;Usage: $0 [start|stop|status|restart]&quot;
}

status_tomcat(){
ps aux|grep java|grep tomcat |grep -v 'grep'
}

start_tomcat(){
/usr/local/tomcat/bin/startup.sh
}

stop_tomcat(){
TPID=$(ps aux | grep java |grep tomcat | grep -v 'grep' | grep -v 'su' | awk '{print $2}')
kill -9 $TPID
sleep 5;

TSTAT=$(ps aux | grep java |grep tomcat | grep -v 'grep' | grep -v 'su' | awk '{print $2}')
    if [ -Z $TSTAT];then
        echo &quot;tomcat stopped&quot;
    else
        kill -9 $TSTAT
    fi

cd $TOMCAT_PATH

rm temp/* -rf
rm work/* -rf
}

main(){
case $1 in
    start)
        start_tomcat;;
    stop)
        stop_tomcat;;
    status)
        status_tomcat;;
    restart)
        stop_tomcat &amp;amp;&amp;amp; start_tomcat;;
    *)
        usage;;
esac
}

main $1
[root@ops-82 bin]#chmod +x tomcat.sh&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;安全设置规范&lt;/h2&gt;
&lt;p&gt;参见《&lt;a href=&quot;./tomcat-安全设置规范.md&quot;&gt;tomcat-安全设置规范&lt;/a&gt;》&lt;/p&gt;            </description>
            <pubDate>2018-05-12 14:38:27</pubDate>
            <link>//blog/Notes.bak/02-%CD%F8%D5%BE%B7%FE%CE%F1/tomcat/tomcat.html</link>
            <guid isPermaLink="true">//blog/Notes.bak/02-%CD%F8%D5%BE%B7%FE%CE%F1/tomcat/tomcat.html</guid>
                                               <category>02-网站服务</category>
                                    </item>
                <item>
            <title>在windows下部署php环境。</title>
            <description>
            &lt;!--
author: 王辉
head: http://blog.unuw.com/blog/logo.jpg
date: 2017-12-28
title: 在windows下部署php环境。
tags: windows php
images: http://blog.unuw.com/blog/logo.jpg
category: 02-网站服务
status: publish
summary: 在windows下部署php环境。
--&gt;
&lt;h1&gt;PHP安装&lt;/h1&gt;
&lt;p&gt;参考：&lt;a href=&quot;http://www.cnblogs.com/wuzhenbo/p/3493518.html&quot;&gt;http://www.cnblogs.com/wuzhenbo/p/3493518.html&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;系统环境&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;系统：windows10&lt;/li&gt;
&lt;li&gt;PHP: php-5.6.31&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;下载&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;http://windows.php.net/download#php-5.6&quot;&gt;http://windows.php.net/download#php-5.6&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;各版本区别&lt;/h2&gt;
&lt;p&gt;操作系统是32位还是64位？如果是32位的，就选择带“x86”的版本，如果是64位的，就选择带“x64”的版本。然后看WEB服务器是什么？如果是IIS系列，就选择带“Non Thread Safe”的版本，如果是Apache httpd系列，就选择带“Thread Safe”的版本。如果是Apache httpd还要看这个二进制版本是怎么编译的，有三种编译类型，分别是：VC6、VC9、VC11（分别代表Visual C++ 6、Visual C++ 2008、Visual C++ 2012）。&lt;/p&gt;
&lt;p&gt;Windows版的PHP从版本5.2.1开始有ThreadSafe(线程安全)和None Thread Safe(NTS，非线程安全)之分，windows iis使用非线程安全版本。&lt;/p&gt;
&lt;h2&gt;安装&lt;/h2&gt;
&lt;h3&gt;解压至目录&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;D:\app\php-5.6.31-nts-Win32-VC11-x64&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;检查版本&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;D:\app\php-5.6.31-nts-Win32-VC11-x64&amp;gt;php -v
PHP 5.6.31 (cli) (built: Jul  5 2017 22:24:47)
Copyright (c) 1997-2016 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2016 Zend Technologies&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;配置php.ini文件&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;extension_dir = &quot;D:\app\php-5.6.31-nts-Win32-VC11-x64\ext&quot;
date.timezone = Asia/Shanghai
enable_dl = On
cgi.force_redirect = 0
fastcgi.impersonate = 1
cgi.rfc2616_headers = 1&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;需要配置&lt;code&gt;doc_root = D:\app\nginx-1.12.1\html\&lt;/code&gt;，否则报错&lt;code&gt;No input file specified.&lt;/code&gt;,经过尝试&lt;code&gt;doc_root=&lt;/code&gt;,配置nginx.conf，设置&lt;code&gt;fastcgi_param  SCRIPT_FILENAME  D:/app/nginx-1.12.1/html$fastcgi_script_name&lt;/code&gt;，之前错误由于&lt;code&gt;\&lt;/code&gt;引起，替换为&lt;code&gt;/&lt;/code&gt;正常。&lt;/p&gt;
&lt;h3&gt;启动&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;php-cgi.exe -b 127.0.0.1:9000 -c D:\app\php-5.6.31-nts-Win32-VC11-x64\php.ini&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;集成nginx环境&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;../nginx/nginx.md#集成php环境&quot;&gt;参考《nginx》中“集成php环境”&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;常见问题 nginx - php-cgi.exe进程自动退出&lt;/h3&gt;
&lt;p&gt;RunHiddenConsole E:/wnmp/php5/php-cgi.exe -b 127.0.0.1:9000 -c &amp;quot;E:/wnmp/php5/php.ini&amp;quot;
第一步：下载xxfpm,百度搜一下，有很多。&lt;/p&gt;
&lt;p&gt;第二步：新建一个文本，写上以下代码。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;RunHiddenConsole.exe H:/Server_Core/xxfpm/bin/xxfpm.exe &quot;H:/Server_Core/PHP/php-cgi.exe -c
H:/Server_Core/PHP/php.ini&quot; -n 2 -i 127.0.0.1 -p 9000&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;解释下：
RunHiddenConsole.exe这个是窗口隐藏工具，因为如果不用这个，CMD窗口就会一直开着，关闭窗口的话进程也就会退出了,把这个RunHiddenConsole.exe和php-cgi.bat要放在你的PHP根目录下。&lt;/p&gt;
&lt;h3&gt;php.ini配置文件参考如下：&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;[PHP]
engine = On
short_open_tag = Off
asp_tags = Off
precision = 14
output_buffering = 4096
zlib.output_compression = Off
implicit_flush = Off
unserialize_callback_func =
serialize_precision = 17
disable_functions =
disable_classes =
zend.enable_gc = On
expose_php = On
max_execution_time = 30
max_input_time = 60
memory_limit = 128M
error_reporting = E_ALL
display_errors = On
display_startup_errors = On
log_errors = On
log_errors_max_len = 1024
ignore_repeated_errors = Off
ignore_repeated_source = Off
report_memleaks = On
track_errors = On
html_errors = On
variables_order = &quot;GPCS&quot;
request_order = &quot;GP&quot;
register_argc_argv = Off
auto_globals_jit = On
post_max_size = 8M
auto_prepend_file =
auto_append_file =
default_mimetype = &quot;text/html&quot;
default_charset = &quot;UTF-8&quot;
doc_root =
user_dir =
extension_dir = &quot;D:\app\php-5.6.31-nts-Win32-VC11-x64\ext&quot;
enable_dl = On
cgi.force_redirect = 0
rfc2616_headersfastcgi.impersonate = 1
cgi.rfc2616_headers = 1
file_uploads = On
upload_max_filesize = 2M
max_file_uploads = 20
allow_url_fopen = On
allow_url_include = Off
default_socket_timeout = 60
extension=php_mysql.dll
extension=php_mysqli.dll
[CLI Server]
cli_server.color = On
[Date]
date.timezone = Asia/Shanghai
[filter]
[iconv]
[intl]
[sqlite3]
[Pcre]
[Pdo]
[Pdo_mysql]
pdo_mysql.cache_size = 2000
pdo_mysql.default_socket=
[Phar]
[mail function]
SMTP = localhost
smtp_port = 25
mail.add_x_header = On
[SQL]
sql.safe_mode = Off
[ODBC]
odbc.allow_persistent = On
odbc.check_persistent = On
odbc.max_persistent = -1
odbc.max_links = -1
odbc.defaultlrl = 4096
odbc.defaultbinmode = 1
[Interbase]
ibase.allow_persistent = 1
ibase.max_persistent = -1
ibase.max_links = -1
ibase.timestampformat = &quot;%Y-%m-%d %H:%M:%S&quot;
ibase.dateformat = &quot;%Y-%m-%d&quot;
ibase.timeformat = &quot;%H:%M:%S&quot;
[MySQL]
mysql.allow_local_infile = On
mysql.allow_persistent = On
mysql.cache_size = 2000
mysql.max_persistent = -1
mysql.max_links = -1
mysql.default_port =
mysql.default_socket =
mysql.default_host =
mysql.default_user =
mysql.default_password =
mysql.connect_timeout = 60
mysql.trace_mode = Off
[MySQLi]
mysqli.max_persistent = -1
mysqli.allow_persistent = On
mysqli.max_links = -1
mysqli.cache_size = 2000
mysqli.default_port = 3306
mysqli.default_socket =
mysqli.default_host =
mysqli.default_user =
mysqli.default_pw =
mysqli.reconnect = Off
[mysqlnd]
mysqlnd.collect_statistics = On
mysqlnd.collect_memory_statistics = On
[OCI8]
[PostgreSQL]
pgsql.allow_persistent = On
pgsql.auto_reset_persistent = Off
pgsql.max_persistent = -1
pgsql.max_links = -1
pgsql.ignore_notice = 0
pgsql.log_notice = 0
[Sybase-CT]
sybct.allow_persistent = On
sybct.max_persistent = -1
sybct.max_links = -1
sybct.min_server_severity = 10
sybct.min_client_severity = 10
[bcmath]
bcmath.scale = 0
[browscap]
[Session]
session.save_handler = files
session.use_strict_mode = 0
session.use_cookies = 1
session.use_only_cookies = 1
session.name = PHPSESSID
session.auto_start = 0
session.cookie_lifetime = 0
session.cookie_path = /
session.cookie_domain =
session.cookie_httponly =
session.serialize_handler = php
session.gc_probability = 1
session.gc_divisor = 1000
session.gc_maxlifetime = 1440
session.referer_check =
session.cache_limiter = nocache
session.cache_expire = 180
session.use_trans_sid = 0
session.hash_function = 0
session.hash_bits_per_character = 5
url_rewriter.tags = &quot;a=href,area=href,frame=src,input=src,form=fakeentry&quot;
[MSSQL]
mssql.allow_persistent = On
mssql.max_persistent = -1
mssql.max_links = -1
mssql.min_error_severity = 10
mssql.min_message_severity = 10
mssql.compatibility_mode = Off
mssql.secure_connection = Off
[Assertion]
[COM]
[mbstring]
[gd]
[exif]
[Tidy]
tidy.clean_output = Off
[soap]
soap.wsdl_cache_enabled=1
soap.wsdl_cache_dir=&quot;/tmp&quot;
soap.wsdl_cache_ttl=86400
soap.wsdl_cache_limit = 5
[sysvshm]
[ldap]
ldap.max_links = -1
[mcrypt]
[dba]
[opcache]
[curl]
[openssl]
&lt;/code&gt;&lt;/pre&gt;            </description>
            <pubDate>2018-05-12 14:38:27</pubDate>
            <link>//blog/Notes.bak/02-%CD%F8%D5%BE%B7%FE%CE%F1/php/php-win.html</link>
            <guid isPermaLink="true">//blog/Notes.bak/02-%CD%F8%D5%BE%B7%FE%CE%F1/php/php-win.html</guid>
                                               <category>02-网站服务</category>
                                    </item>
                <item>
            <title>在windows下部署php环境。</title>
            <description>
            &lt;!--
author: 王辉
head: http://blog.unuw.com/blog/logo.jpg
date: 2017-12-28
title: 在windows下部署php环境。
tags: windows php
images: http://blog.unuw.com/blog/logo.jpg
category: 02-网站服务
status: publish
summary: 在windows下部署php环境。
--&gt;
&lt;h1&gt;PHP安装&lt;/h1&gt;
&lt;p&gt;参考：&lt;a href=&quot;http://www.cnblogs.com/wuzhenbo/p/3493518.html&quot;&gt;http://www.cnblogs.com/wuzhenbo/p/3493518.html&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;系统环境&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;系统：windows10&lt;/li&gt;
&lt;li&gt;PHP: php-5.6.31&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;下载&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;http://windows.php.net/download#php-5.6&quot;&gt;http://windows.php.net/download#php-5.6&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;各版本区别&lt;/h2&gt;
&lt;p&gt;操作系统是32位还是64位？如果是32位的，就选择带“x86”的版本，如果是64位的，就选择带“x64”的版本。然后看WEB服务器是什么？如果是IIS系列，就选择带“Non Thread Safe”的版本，如果是Apache httpd系列，就选择带“Thread Safe”的版本。如果是Apache httpd还要看这个二进制版本是怎么编译的，有三种编译类型，分别是：VC6、VC9、VC11（分别代表Visual C++ 6、Visual C++ 2008、Visual C++ 2012）。&lt;/p&gt;
&lt;p&gt;Windows版的PHP从版本5.2.1开始有ThreadSafe(线程安全)和None Thread Safe(NTS，非线程安全)之分，windows iis使用非线程安全版本。&lt;/p&gt;
&lt;h2&gt;安装&lt;/h2&gt;
&lt;h3&gt;解压至目录&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;D:\app\php-5.6.31-nts-Win32-VC11-x64&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;检查版本&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;D:\app\php-5.6.31-nts-Win32-VC11-x64&amp;gt;php -v
PHP 5.6.31 (cli) (built: Jul  5 2017 22:24:47)
Copyright (c) 1997-2016 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2016 Zend Technologies&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;配置php.ini文件&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;extension_dir = &quot;D:\app\php-5.6.31-nts-Win32-VC11-x64\ext&quot;
date.timezone = Asia/Shanghai
enable_dl = On
cgi.force_redirect = 0
fastcgi.impersonate = 1
cgi.rfc2616_headers = 1&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;需要配置&lt;code&gt;doc_root = D:\app\nginx-1.12.1\html\&lt;/code&gt;，否则报错&lt;code&gt;No input file specified.&lt;/code&gt;,经过尝试&lt;code&gt;doc_root=&lt;/code&gt;,配置nginx.conf，设置&lt;code&gt;fastcgi_param  SCRIPT_FILENAME  D:/app/nginx-1.12.1/html$fastcgi_script_name&lt;/code&gt;，之前错误由于&lt;code&gt;\&lt;/code&gt;引起，替换为&lt;code&gt;/&lt;/code&gt;正常。&lt;/p&gt;
&lt;h3&gt;启动&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;php-cgi.exe -b 127.0.0.1:9000 -c D:\app\php-5.6.31-nts-Win32-VC11-x64\php.ini&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;集成nginx环境&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;../nginx/nginx.md#集成php环境&quot;&gt;参考《nginx》中“集成php环境”&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;常见问题 nginx - php-cgi.exe进程自动退出&lt;/h3&gt;
&lt;p&gt;RunHiddenConsole E:/wnmp/php5/php-cgi.exe -b 127.0.0.1:9000 -c &amp;quot;E:/wnmp/php5/php.ini&amp;quot;
第一步：下载xxfpm,百度搜一下，有很多。&lt;/p&gt;
&lt;p&gt;第二步：新建一个文本，写上以下代码。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;RunHiddenConsole.exe H:/Server_Core/xxfpm/bin/xxfpm.exe &quot;H:/Server_Core/PHP/php-cgi.exe -c
H:/Server_Core/PHP/php.ini&quot; -n 2 -i 127.0.0.1 -p 9000&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;解释下：
RunHiddenConsole.exe这个是窗口隐藏工具，因为如果不用这个，CMD窗口就会一直开着，关闭窗口的话进程也就会退出了,把这个RunHiddenConsole.exe和php-cgi.bat要放在你的PHP根目录下。&lt;/p&gt;
&lt;h3&gt;php.ini配置文件参考如下：&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;[PHP]
engine = On
short_open_tag = Off
asp_tags = Off
precision = 14
output_buffering = 4096
zlib.output_compression = Off
implicit_flush = Off
unserialize_callback_func =
serialize_precision = 17
disable_functions =
disable_classes =
zend.enable_gc = On
expose_php = On
max_execution_time = 30
max_input_time = 60
memory_limit = 128M
error_reporting = E_ALL
display_errors = On
display_startup_errors = On
log_errors = On
log_errors_max_len = 1024
ignore_repeated_errors = Off
ignore_repeated_source = Off
report_memleaks = On
track_errors = On
html_errors = On
variables_order = &quot;GPCS&quot;
request_order = &quot;GP&quot;
register_argc_argv = Off
auto_globals_jit = On
post_max_size = 8M
auto_prepend_file =
auto_append_file =
default_mimetype = &quot;text/html&quot;
default_charset = &quot;UTF-8&quot;
doc_root =
user_dir =
extension_dir = &quot;D:\app\php-5.6.31-nts-Win32-VC11-x64\ext&quot;
enable_dl = On
cgi.force_redirect = 0
rfc2616_headersfastcgi.impersonate = 1
cgi.rfc2616_headers = 1
file_uploads = On
upload_max_filesize = 2M
max_file_uploads = 20
allow_url_fopen = On
allow_url_include = Off
default_socket_timeout = 60
extension=php_mysql.dll
extension=php_mysqli.dll
[CLI Server]
cli_server.color = On
[Date]
date.timezone = Asia/Shanghai
[filter]
[iconv]
[intl]
[sqlite3]
[Pcre]
[Pdo]
[Pdo_mysql]
pdo_mysql.cache_size = 2000
pdo_mysql.default_socket=
[Phar]
[mail function]
SMTP = localhost
smtp_port = 25
mail.add_x_header = On
[SQL]
sql.safe_mode = Off
[ODBC]
odbc.allow_persistent = On
odbc.check_persistent = On
odbc.max_persistent = -1
odbc.max_links = -1
odbc.defaultlrl = 4096
odbc.defaultbinmode = 1
[Interbase]
ibase.allow_persistent = 1
ibase.max_persistent = -1
ibase.max_links = -1
ibase.timestampformat = &quot;%Y-%m-%d %H:%M:%S&quot;
ibase.dateformat = &quot;%Y-%m-%d&quot;
ibase.timeformat = &quot;%H:%M:%S&quot;
[MySQL]
mysql.allow_local_infile = On
mysql.allow_persistent = On
mysql.cache_size = 2000
mysql.max_persistent = -1
mysql.max_links = -1
mysql.default_port =
mysql.default_socket =
mysql.default_host =
mysql.default_user =
mysql.default_password =
mysql.connect_timeout = 60
mysql.trace_mode = Off
[MySQLi]
mysqli.max_persistent = -1
mysqli.allow_persistent = On
mysqli.max_links = -1
mysqli.cache_size = 2000
mysqli.default_port = 3306
mysqli.default_socket =
mysqli.default_host =
mysqli.default_user =
mysqli.default_pw =
mysqli.reconnect = Off
[mysqlnd]
mysqlnd.collect_statistics = On
mysqlnd.collect_memory_statistics = On
[OCI8]
[PostgreSQL]
pgsql.allow_persistent = On
pgsql.auto_reset_persistent = Off
pgsql.max_persistent = -1
pgsql.max_links = -1
pgsql.ignore_notice = 0
pgsql.log_notice = 0
[Sybase-CT]
sybct.allow_persistent = On
sybct.max_persistent = -1
sybct.max_links = -1
sybct.min_server_severity = 10
sybct.min_client_severity = 10
[bcmath]
bcmath.scale = 0
[browscap]
[Session]
session.save_handler = files
session.use_strict_mode = 0
session.use_cookies = 1
session.use_only_cookies = 1
session.name = PHPSESSID
session.auto_start = 0
session.cookie_lifetime = 0
session.cookie_path = /
session.cookie_domain =
session.cookie_httponly =
session.serialize_handler = php
session.gc_probability = 1
session.gc_divisor = 1000
session.gc_maxlifetime = 1440
session.referer_check =
session.cache_limiter = nocache
session.cache_expire = 180
session.use_trans_sid = 0
session.hash_function = 0
session.hash_bits_per_character = 5
url_rewriter.tags = &quot;a=href,area=href,frame=src,input=src,form=fakeentry&quot;
[MSSQL]
mssql.allow_persistent = On
mssql.max_persistent = -1
mssql.max_links = -1
mssql.min_error_severity = 10
mssql.min_message_severity = 10
mssql.compatibility_mode = Off
mssql.secure_connection = Off
[Assertion]
[COM]
[mbstring]
[gd]
[exif]
[Tidy]
tidy.clean_output = Off
[soap]
soap.wsdl_cache_enabled=1
soap.wsdl_cache_dir=&quot;/tmp&quot;
soap.wsdl_cache_ttl=86400
soap.wsdl_cache_limit = 5
[sysvshm]
[ldap]
ldap.max_links = -1
[mcrypt]
[dba]
[opcache]
[curl]
[openssl]
&lt;/code&gt;&lt;/pre&gt;            </description>
            <pubDate>2019-04-11 08:20:49</pubDate>
            <link>//blog/Notes/02-%CD%F8%D5%BE%B7%FE%CE%F1/php/php-win.html</link>
            <guid isPermaLink="true">//blog/Notes/02-%CD%F8%D5%BE%B7%FE%CE%F1/php/php-win.html</guid>
                                               <category>02-网站服务</category>
                                    </item>
                <item>
            <title>Nginx配置SSL证书部署HTTPS网站</title>
            <description>
            &lt;!--
author: 王辉
head: http://blog.unuw.com/blog/logo.jpg
date: 2017-12-28
title: Nginx配置SSL证书部署HTTPS网站
tags: nginx ssl https
images: http://blog.unuw.com/blog/logo.jpg
category: 02-网站服务
status: publish
summary: Nginx配置SSL证书部署HTTPS网站
--&gt;
&lt;h1&gt;Nginx配置SSL证书部署HTTPS网站&lt;/h1&gt;
&lt;p&gt;调试环境：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;系统：win10&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Apache： Apache/2.4.26 (Win64)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;nginx:nginx/1.12.1&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;1.生成一个RSA密钥(密码abcd)&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;$ openssl genrsa -des3 -out abcd.key 1024&lt;/code&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;D:\app\Apache24\conf&amp;gt;openssl genrsa -des3 -out abcd.key 1024
WARNING: can't open config file: /apache24/conf/openssl.cnf
Generating RSA private key, 1024 bit long modulus
.....++++++
.++++++
e is 65537 (0x10001)
Enter pass phrase for abcd.key:
Verifying - Enter pass phrase for abcd.key:

D:\app\Apache24\conf&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;2. 拷贝一个不需要输入密码的密钥文件&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;$ openssl rsa -in abcd.key -out abcd_nopass.key&lt;/code&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;D:\app\Apache24\conf&amp;gt;openssl rsa -in abcd.key -out abcd_nopass.key
WARNING: can't open config file: /apache24/conf/openssl.cnf
Enter pass phrase for abcd.key:
writing RSA key

D:\app\Apache24\conf&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;3.生成一个证书请求&lt;/h3&gt;
&lt;p&gt;提示找不到&lt;code&gt;openssl.cnf&lt;/code&gt;时，需配置环境变量&lt;code&gt;set OPENSSL_CONF=openssl.cnf&lt;/code&gt;。
&lt;code&gt;$ openssl req -new -key abcd.key -out abcd.csr&lt;/code&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;D:\app\Apache24\conf&amp;gt;set OPENSSL_CONF=openssl.cnf

D:\app\Apache24\conf&amp;gt;openssl req -new -key abcd.key -out abcd.csr
Enter pass phrase for abcd.key:
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:CN
State or Province Name (full name) [Some-State]:Beijing
Locality Name (eg, city) []:Beijing
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Abcd Ltd
Organizational Unit Name (eg, section) []:abcd
Common Name (e.g. server FQDN or YOUR name) []:*.abcd.com
Email Address []:admin@abcd.com

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

D:\app\Apache24\conf&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;4.自己签发证书&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;$ openssl x509 -req -days 365 -in abcd.csr -signkey abcd.key -out abcd.crt&lt;/code&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;D:\app\Apache24\conf&amp;gt;openssl x509 -req -days 365 -in abcd.csr -signkey abcd.key -out abcd.crt
Signature ok
subject=/C=CN/ST=Beijing/L=Beijing/O=Abcd Ltd/OU=abcd/CN=*.abcd.com/emailAddress=admin@abcd.com
Getting Private key
Enter pass phrase for abcd.key:

D:\app\Apache24\conf&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;5.编辑配置文件nginx.conf&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;#HTTPS server

server {
    listen       443 ssl;
    server_name  abcd.com;

    ssl_certificate      keys/abcd.crt;
    ssl_certificate_key  keys/abcd_nopass.key;

    ssl_session_cache    shared:SSL:1m;
    ssl_session_timeout  5m;

    ssl_ciphers  HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers  on;

    location / {
        root   html/ssl;
        index  index.html index.htm;
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;ssl_certificate_key  keys/abcd_nopass.key;&lt;/code&gt;配置为&lt;code&gt;abcd.key&lt;/code&gt;时，每次启动nginx时需要输入密码，可能windows的问题，无法启动；配置为&lt;code&gt;abcd_nopass.key&lt;/code&gt;即可正常启动;在win10环境下使用openssl制作ca的证书文件时出现问题：Unable to write ‘random state’，需要在“管理员”模式下运行。&lt;/p&gt;            </description>
            <pubDate>2018-05-12 14:38:27</pubDate>
            <link>//blog/Notes.bak/02-%CD%F8%D5%BE%B7%FE%CE%F1/nginx/ssl.html</link>
            <guid isPermaLink="true">//blog/Notes.bak/02-%CD%F8%D5%BE%B7%FE%CE%F1/nginx/ssl.html</guid>
                                               <category>02-网站服务</category>
                                    </item>
                <item>
            <title>Nginx配置SSL证书部署HTTPS网站</title>
            <description>
            &lt;!--
author: 王辉
head: http://blog.unuw.com/blog/logo.jpg
date: 2017-12-28
title: Nginx配置SSL证书部署HTTPS网站
tags: nginx ssl https
images: http://blog.unuw.com/blog/logo.jpg
category: 02-网站服务
status: publish
summary: Nginx配置SSL证书部署HTTPS网站
--&gt;
&lt;h1&gt;Nginx配置SSL证书部署HTTPS网站&lt;/h1&gt;
&lt;p&gt;调试环境：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;系统：win10&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Apache： Apache/2.4.26 (Win64)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;nginx:nginx/1.12.1&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;1.生成一个RSA密钥(密码abcd)&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;$ openssl genrsa -des3 -out abcd.key 1024&lt;/code&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;D:\app\Apache24\conf&amp;gt;openssl genrsa -des3 -out abcd.key 1024
WARNING: can't open config file: /apache24/conf/openssl.cnf
Generating RSA private key, 1024 bit long modulus
.....++++++
.++++++
e is 65537 (0x10001)
Enter pass phrase for abcd.key:
Verifying - Enter pass phrase for abcd.key:

D:\app\Apache24\conf&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;2. 拷贝一个不需要输入密码的密钥文件&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;$ openssl rsa -in abcd.key -out abcd_nopass.key&lt;/code&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;D:\app\Apache24\conf&amp;gt;openssl rsa -in abcd.key -out abcd_nopass.key
WARNING: can't open config file: /apache24/conf/openssl.cnf
Enter pass phrase for abcd.key:
writing RSA key

D:\app\Apache24\conf&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;3.生成一个证书请求&lt;/h3&gt;
&lt;p&gt;提示找不到&lt;code&gt;openssl.cnf&lt;/code&gt;时，需配置环境变量&lt;code&gt;set OPENSSL_CONF=openssl.cnf&lt;/code&gt;。
&lt;code&gt;$ openssl req -new -key abcd.key -out abcd.csr&lt;/code&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;D:\app\Apache24\conf&amp;gt;set OPENSSL_CONF=openssl.cnf

D:\app\Apache24\conf&amp;gt;openssl req -new -key abcd.key -out abcd.csr
Enter pass phrase for abcd.key:
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:CN
State or Province Name (full name) [Some-State]:Beijing
Locality Name (eg, city) []:Beijing
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Abcd Ltd
Organizational Unit Name (eg, section) []:abcd
Common Name (e.g. server FQDN or YOUR name) []:*.abcd.com
Email Address []:admin@abcd.com

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

D:\app\Apache24\conf&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;4.自己签发证书&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;$ openssl x509 -req -days 365 -in abcd.csr -signkey abcd.key -out abcd.crt&lt;/code&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;D:\app\Apache24\conf&amp;gt;openssl x509 -req -days 365 -in abcd.csr -signkey abcd.key -out abcd.crt
Signature ok
subject=/C=CN/ST=Beijing/L=Beijing/O=Abcd Ltd/OU=abcd/CN=*.abcd.com/emailAddress=admin@abcd.com
Getting Private key
Enter pass phrase for abcd.key:

D:\app\Apache24\conf&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;5.编辑配置文件nginx.conf&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;#HTTPS server

server {
    listen       443 ssl;
    server_name  abcd.com;

    ssl_certificate      keys/abcd.crt;
    ssl_certificate_key  keys/abcd_nopass.key;

    ssl_session_cache    shared:SSL:1m;
    ssl_session_timeout  5m;

    ssl_ciphers  HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers  on;

    location / {
        root   html/ssl;
        index  index.html index.htm;
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;ssl_certificate_key  keys/abcd_nopass.key;&lt;/code&gt;配置为&lt;code&gt;abcd.key&lt;/code&gt;时，每次启动nginx时需要输入密码，可能windows的问题，无法启动；配置为&lt;code&gt;abcd_nopass.key&lt;/code&gt;即可正常启动;在win10环境下使用openssl制作ca的证书文件时出现问题：Unable to write ‘random state’，需要在“管理员”模式下运行。&lt;/p&gt;            </description>
            <pubDate>2019-04-11 08:20:49</pubDate>
            <link>//blog/Notes/02-%CD%F8%D5%BE%B7%FE%CE%F1/nginx/ssl.html</link>
            <guid isPermaLink="true">//blog/Notes/02-%CD%F8%D5%BE%B7%FE%CE%F1/nginx/ssl.html</guid>
                                               <category>02-网站服务</category>
                                    </item>
                <item>
            <title>Centos初始化</title>
            <description>
            &lt;!--
author: 王辉
head: http://blog.unuw.com/blog/logo.jpg
date: 2017-12-28
title: Centos初始化
tags: shell
images: http://blog.unuw.com/blog/logo.jpg
category: 01-操作系统
status: publish
summary: Centos的常用设置，如初始化脚本等。
--&gt;
&lt;h1&gt;!/bin/bash&lt;/h1&gt;
&lt;h1&gt;written:51clocker&lt;/h1&gt;
&lt;h1&gt;date:2015-07-18&lt;/h1&gt;
&lt;h1&gt;email:admin@51clocker.com&lt;/h1&gt;
&lt;h1&gt;web:&lt;a href=&quot;http://www.51clocker.com&quot;&gt;http://www.51clocker.com&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;echo -e &amp;quot;\033[31m 这个是系统初始化脚本，请慎重运行！ press ctrl+C to cancel \033[0m&amp;quot;
sleep 5&lt;/p&gt;
&lt;p&gt;yum_update(){
yum -y install wget
cd /etc/yum.repos.d/
mkdir bak
mv ./*.repo bak
wget -O /etc/yum.repos.d/CentOS-Base.repo &lt;a href=&quot;http://mirrors.aliyun.com/repo/Centos-6.repo&quot;&gt;http://mirrors.aliyun.com/repo/Centos-6.repo&lt;/a&gt;
wget -O /etc/yum.repos.d/epel.repo &lt;a href=&quot;http://mirrors.aliyun.com/repo/epel-6.repo&quot;&gt;http://mirrors.aliyun.com/repo/epel-6.repo&lt;/a&gt;
yum clean all &amp;amp;&amp;amp; yum makecache
yum -y install vim unzip  openssl-client gcc gcc-c++ ntp
}&lt;/p&gt;
&lt;h1&gt;/etc/hosts&lt;/h1&gt;
&lt;h1&gt;[ &amp;quot;$(hostname -i)&amp;quot; != &amp;quot;127.0.0.1&amp;quot; ] &amp;amp;&amp;amp; sed -i &amp;quot;s@^127.0.0.1(.*)@127.0.0.1   &lt;code&gt;hostname&lt;/code&gt; \1@&amp;quot; /etc/hosts&lt;/h1&gt;
&lt;h1&gt;关闭SEKINUX&lt;/h1&gt;
&lt;p&gt;selinux(){
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux
setenforce 0
}&lt;/p&gt;
&lt;h1&gt;修改文件打开数&lt;/h1&gt;
&lt;h1&gt;/etc/security/limits.conf&lt;/h1&gt;
&lt;p&gt;limits_config(){
cat &amp;gt;&amp;gt; /etc/security/limits.conf &amp;lt;&amp;lt;EOF&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;soft nproc 65535&lt;/li&gt;
&lt;li&gt;hard nproc 65535&lt;/li&gt;
&lt;li&gt;soft nofile 65535&lt;/li&gt;
&lt;li&gt;hard nofile 65535
EOF
echo &amp;quot;ulimit -SH 65535&amp;quot; &amp;gt;&amp;gt; /etc/rc.local
}
&lt;h1&gt;优化内核参数&lt;/h1&gt;
&lt;p&gt;sysctl_config(){
sed -i 's/net.ipv4.tcp_syncookies.*$/net.ipv4.tcp_syncookies = 1/g' /etc/sysctl.conf
cat &amp;gt;&amp;gt; /etc/sysctl.conf &amp;lt;&amp;lt; ENDF
net.ipv4.tcp_max_syn_backlog = 65536
net.core.netdev_max_backlog =  32768
net.core.somaxconn = 32768
net.core.wmem_default = 8388608
net.core.rmem_default = 8388608
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.ipv4.tcp_timestamps = 0
net.ipv4.tcp_synack_retries = 2
net.ipv4.tcp_syn_retries = 2
net.ipv4.tcp_tw_recycle = 1&lt;/p&gt;
&lt;h1&gt;net.ipv4.tcp_tw_len = 1&lt;/h1&gt;
&lt;p&gt;net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_mem = 94500000 915000000 927000000
net.ipv4.tcp_max_orphans = 3276800
net.ipv4.ip_local_port_range = 1024  65535
ENDF
sysctl -p
}&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h1&gt;关闭系统不用的服务&lt;/h1&gt;
&lt;p&gt;stop_server(){
for server in &lt;code&gt;chkconfig --list |grep 3:on|awk '{ print $1}'&lt;/code&gt;
do
chkconfig --level 3 $server off
done&lt;/p&gt;
&lt;p&gt;for server in crond network rsyslog sshd
do
chkconfig --level 3 $server on
done
}&lt;/p&gt;
&lt;h1&gt;language..&lt;/h1&gt;
&lt;p&gt;inittab(){
if [ -z &amp;quot;$(cat /etc/redhat-release | grep '6.')&amp;quot; ];then
sed -i 's/3:2345:respawn/#3:2345:respawn/g' /etc/inittab
sed -i 's/4:2345:respawn/#4:2345:respawn/g' /etc/inittab
sed -i 's/5:2345:respawn/#5:2345:respawn/g' /etc/inittab
sed -i 's/6:2345:respawn/#6:2345:respawn/g' /etc/inittab
sed -i 's/ca::ctrlaltdel/#ca::ctrlaltdel/g' /etc/inittab
sed -i 's@LANG=.&lt;em&gt;$@LANG=&amp;quot;en_US.UTF-8&amp;quot;@g' /etc/sysconfig/i18n
else
sed -i 's@^ACTIVE_CONSOLES.&lt;/em&gt;@ACTIVE_CONSOLES=/dev/tty[1-2]@' /etc/sysconfig/init
sed -i 's@^start@#start@' /etc/init/control-alt-delete.conf
fi
/sbin/init q
}&lt;/p&gt;
&lt;h1&gt;设置时间时区同步&lt;/h1&gt;
&lt;p&gt;zone_time(){
rm -rf /etc/localtime
ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# Update time
/usr/sbin/ntpdate pool.ntp.org
echo '*/5 * * * * /usr/sbin/ntpdate pool.ntp.org &amp;gt; /dev/null 2&amp;gt;&amp;amp;1' &amp;gt; /var/spool/cron/root;chmod 600 /var/spool/cron/root
/sbin/service crond restart&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;}&lt;/p&gt;
&lt;h1&gt;配置SSHD&lt;/h1&gt;
&lt;p&gt;sshd_config(){&lt;/p&gt;
&lt;h1&gt;sed -i '/^#Port/s/#Port 22/Port 65535/g' /etc/ssh/sshd_config&lt;/h1&gt;
&lt;pre&gt;&lt;code&gt;sed -i '/^#UseDNS/s/#UseDNS yes/UseDNS no/g' /etc/ssh/sshd_config
#sed -i 's/#PermitRootLogin yes/PermitRootLogin no/g' /etc/ssh/sshd_config
sed -i 's/#PermitEmptyPasswords no/PermitEmptyPasswords no/g' /etc/ssh/sshd_config
/etc/init.d/sshd restart&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;}&lt;/p&gt;
&lt;h1&gt;iptables&lt;/h1&gt;
&lt;p&gt;iptables(){
cat &amp;gt; /etc/sysconfig/iptables &amp;lt;&amp;lt; EOF&lt;/p&gt;
&lt;h1&gt;Firewall configuration written by system-config-securitylevel&lt;/h1&gt;
&lt;h1&gt;Manual customization of this file is not recommended.&lt;/h1&gt;
&lt;dl&gt;
&lt;dt&gt;*filter&lt;/dt&gt;
&lt;dd&gt;INPUT DROP [0:0]&lt;/dd&gt;
&lt;dd&gt;FORWARD ACCEPT [0:0]&lt;/dd&gt;
&lt;dd&gt;OUTPUT ACCEPT [0:0]&lt;/dd&gt;
&lt;dd&gt;syn-flood - [0:0]
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
-A INPUT -p icmp -m limit --limit 100/sec --limit-burst 100 -j ACCEPT
-A INPUT -p icmp -m limit --limit 1/s --limit-burst 10 -j ACCEPT
-A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -j syn-flood
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A syn-flood -p tcp -m limit --limit 3/sec --limit-burst 6 -j RETURN
-A syn-flood -j REJECT --reject-with icmp-port-unreachable
COMMIT
EOF
/sbin/service iptables restart
source /etc/profile
}
other(){
# initdefault
sed -i 's/^id:.*$/id:3:initdefault:/' /etc/inittab
/sbin/init q
# PS1
echo 'PS1=&amp;quot;[\e[37;40m][[\e[32;40m]\u[\e[37;40m]@\h [\e[35;40m]\W[\e[0m]]\$ [\e[33;40m]&amp;quot;' &amp;gt;&amp;gt; /etc/profile&lt;/dd&gt;
&lt;/dl&gt;
&lt;h1&gt;Record command&lt;/h1&gt;
&lt;p&gt;sed -i 's/^HISTSIZE=.*$/HISTSIZE=100/' /etc/profile
echo &amp;quot;export PROMPT_COMMAND='{ msg=\$(history 1 | { read x y; echo \$y; });user=\$(whoami); echo \$(date \&amp;quot;+%Y-%m-%d %H:%M:%S\&amp;quot;):\$user:`pwd`/:\$msg ---- \$(who am i); } &amp;gt;&amp;gt; /tmp/`hostname`.`whoami`.history-timestamp'&amp;quot; &amp;gt;&amp;gt; /root/.bash_profile&lt;/p&gt;
&lt;h1&gt;Wrong password five times locked 180s&lt;/h1&gt;
&lt;p&gt;sed -i '4a auth        required      pam_tally2.so deny=5 unlock_time=180' /etc/pam.d/system-auth
. /etc/profile
}&lt;/p&gt;
&lt;p&gt;main(){
yum_update
selinux
limits_config
sysctl_config
stop_server
inittab
zone_time
sshd_config&lt;/p&gt;
&lt;h1&gt;iptables&lt;/h1&gt;
&lt;pre&gt;&lt;code&gt;other&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;}
main&lt;/p&gt;            </description>
            <pubDate>2019-04-11 08:20:49</pubDate>
            <link>//blog/Notes/01-%B2%D9%D7%F7%CF%B5%CD%B3/shell/%B3%F5%CA%BC%BB%AFcentos6.html</link>
            <guid isPermaLink="true">//blog/Notes/01-%B2%D9%D7%F7%CF%B5%CD%B3/shell/%B3%F5%CA%BC%BB%AFcentos6.html</guid>
                                               <category>01-操作系统</category>
                                    </item>
                <item>
            <title>Centos初始化</title>
            <description>
            &lt;!--
author: 王辉
head: http://blog.unuw.com/blog/logo.jpg
date: 2017-12-28
title: Centos初始化
tags: shell
images: http://blog.unuw.com/blog/logo.jpg
category: 01-操作系统
status: publish
summary: Centos的常用设置，如初始化脚本等。
--&gt;
&lt;h1&gt;!/bin/bash&lt;/h1&gt;
&lt;h1&gt;written:51clocker&lt;/h1&gt;
&lt;h1&gt;date:2015-07-18&lt;/h1&gt;
&lt;h1&gt;email:admin@51clocker.com&lt;/h1&gt;
&lt;h1&gt;web:&lt;a href=&quot;http://www.51clocker.com&quot;&gt;http://www.51clocker.com&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;echo -e &amp;quot;\033[31m 这个是系统初始化脚本，请慎重运行！ press ctrl+C to cancel \033[0m&amp;quot;
sleep 5&lt;/p&gt;
&lt;p&gt;yum_update(){
yum -y install wget
cd /etc/yum.repos.d/
mkdir bak
mv ./*.repo bak
wget -O /etc/yum.repos.d/CentOS-Base.repo &lt;a href=&quot;http://mirrors.aliyun.com/repo/Centos-6.repo&quot;&gt;http://mirrors.aliyun.com/repo/Centos-6.repo&lt;/a&gt;
wget -O /etc/yum.repos.d/epel.repo &lt;a href=&quot;http://mirrors.aliyun.com/repo/epel-6.repo&quot;&gt;http://mirrors.aliyun.com/repo/epel-6.repo&lt;/a&gt;
yum clean all &amp;amp;&amp;amp; yum makecache
yum -y install vim unzip  openssl-client gcc gcc-c++ ntp
}&lt;/p&gt;
&lt;h1&gt;/etc/hosts&lt;/h1&gt;
&lt;h1&gt;[ &amp;quot;$(hostname -i)&amp;quot; != &amp;quot;127.0.0.1&amp;quot; ] &amp;amp;&amp;amp; sed -i &amp;quot;s@^127.0.0.1(.*)@127.0.0.1   &lt;code&gt;hostname&lt;/code&gt; \1@&amp;quot; /etc/hosts&lt;/h1&gt;
&lt;h1&gt;关闭SEKINUX&lt;/h1&gt;
&lt;p&gt;selinux(){
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux
setenforce 0
}&lt;/p&gt;
&lt;h1&gt;修改文件打开数&lt;/h1&gt;
&lt;h1&gt;/etc/security/limits.conf&lt;/h1&gt;
&lt;p&gt;limits_config(){
cat &amp;gt;&amp;gt; /etc/security/limits.conf &amp;lt;&amp;lt;EOF&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;soft nproc 65535&lt;/li&gt;
&lt;li&gt;hard nproc 65535&lt;/li&gt;
&lt;li&gt;soft nofile 65535&lt;/li&gt;
&lt;li&gt;hard nofile 65535
EOF
echo &amp;quot;ulimit -SH 65535&amp;quot; &amp;gt;&amp;gt; /etc/rc.local
}
&lt;h1&gt;优化内核参数&lt;/h1&gt;
&lt;p&gt;sysctl_config(){
sed -i 's/net.ipv4.tcp_syncookies.*$/net.ipv4.tcp_syncookies = 1/g' /etc/sysctl.conf
cat &amp;gt;&amp;gt; /etc/sysctl.conf &amp;lt;&amp;lt; ENDF
net.ipv4.tcp_max_syn_backlog = 65536
net.core.netdev_max_backlog =  32768
net.core.somaxconn = 32768
net.core.wmem_default = 8388608
net.core.rmem_default = 8388608
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.ipv4.tcp_timestamps = 0
net.ipv4.tcp_synack_retries = 2
net.ipv4.tcp_syn_retries = 2
net.ipv4.tcp_tw_recycle = 1&lt;/p&gt;
&lt;h1&gt;net.ipv4.tcp_tw_len = 1&lt;/h1&gt;
&lt;p&gt;net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_mem = 94500000 915000000 927000000
net.ipv4.tcp_max_orphans = 3276800
net.ipv4.ip_local_port_range = 1024  65535
ENDF
sysctl -p
}&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h1&gt;关闭系统不用的服务&lt;/h1&gt;
&lt;p&gt;stop_server(){
for server in &lt;code&gt;chkconfig --list |grep 3:on|awk '{ print $1}'&lt;/code&gt;
do
chkconfig --level 3 $server off
done&lt;/p&gt;
&lt;p&gt;for server in crond network rsyslog sshd
do
chkconfig --level 3 $server on
done
}&lt;/p&gt;
&lt;h1&gt;language..&lt;/h1&gt;
&lt;p&gt;inittab(){
if [ -z &amp;quot;$(cat /etc/redhat-release | grep '6.')&amp;quot; ];then
sed -i 's/3:2345:respawn/#3:2345:respawn/g' /etc/inittab
sed -i 's/4:2345:respawn/#4:2345:respawn/g' /etc/inittab
sed -i 's/5:2345:respawn/#5:2345:respawn/g' /etc/inittab
sed -i 's/6:2345:respawn/#6:2345:respawn/g' /etc/inittab
sed -i 's/ca::ctrlaltdel/#ca::ctrlaltdel/g' /etc/inittab
sed -i 's@LANG=.&lt;em&gt;$@LANG=&amp;quot;en_US.UTF-8&amp;quot;@g' /etc/sysconfig/i18n
else
sed -i 's@^ACTIVE_CONSOLES.&lt;/em&gt;@ACTIVE_CONSOLES=/dev/tty[1-2]@' /etc/sysconfig/init
sed -i 's@^start@#start@' /etc/init/control-alt-delete.conf
fi
/sbin/init q
}&lt;/p&gt;
&lt;h1&gt;设置时间时区同步&lt;/h1&gt;
&lt;p&gt;zone_time(){
rm -rf /etc/localtime
ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# Update time
/usr/sbin/ntpdate pool.ntp.org
echo '*/5 * * * * /usr/sbin/ntpdate pool.ntp.org &amp;gt; /dev/null 2&amp;gt;&amp;amp;1' &amp;gt; /var/spool/cron/root;chmod 600 /var/spool/cron/root
/sbin/service crond restart&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;}&lt;/p&gt;
&lt;h1&gt;配置SSHD&lt;/h1&gt;
&lt;p&gt;sshd_config(){&lt;/p&gt;
&lt;h1&gt;sed -i '/^#Port/s/#Port 22/Port 65535/g' /etc/ssh/sshd_config&lt;/h1&gt;
&lt;pre&gt;&lt;code&gt;sed -i '/^#UseDNS/s/#UseDNS yes/UseDNS no/g' /etc/ssh/sshd_config
#sed -i 's/#PermitRootLogin yes/PermitRootLogin no/g' /etc/ssh/sshd_config
sed -i 's/#PermitEmptyPasswords no/PermitEmptyPasswords no/g' /etc/ssh/sshd_config
/etc/init.d/sshd restart&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;}&lt;/p&gt;
&lt;h1&gt;iptables&lt;/h1&gt;
&lt;p&gt;iptables(){
cat &amp;gt; /etc/sysconfig/iptables &amp;lt;&amp;lt; EOF&lt;/p&gt;
&lt;h1&gt;Firewall configuration written by system-config-securitylevel&lt;/h1&gt;
&lt;h1&gt;Manual customization of this file is not recommended.&lt;/h1&gt;
&lt;dl&gt;
&lt;dt&gt;*filter&lt;/dt&gt;
&lt;dd&gt;INPUT DROP [0:0]&lt;/dd&gt;
&lt;dd&gt;FORWARD ACCEPT [0:0]&lt;/dd&gt;
&lt;dd&gt;OUTPUT ACCEPT [0:0]&lt;/dd&gt;
&lt;dd&gt;syn-flood - [0:0]
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
-A INPUT -p icmp -m limit --limit 100/sec --limit-burst 100 -j ACCEPT
-A INPUT -p icmp -m limit --limit 1/s --limit-burst 10 -j ACCEPT
-A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -j syn-flood
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A syn-flood -p tcp -m limit --limit 3/sec --limit-burst 6 -j RETURN
-A syn-flood -j REJECT --reject-with icmp-port-unreachable
COMMIT
EOF
/sbin/service iptables restart
source /etc/profile
}
other(){
# initdefault
sed -i 's/^id:.*$/id:3:initdefault:/' /etc/inittab
/sbin/init q
# PS1
echo 'PS1=&amp;quot;[\e[37;40m][[\e[32;40m]\u[\e[37;40m]@\h [\e[35;40m]\W[\e[0m]]\$ [\e[33;40m]&amp;quot;' &amp;gt;&amp;gt; /etc/profile&lt;/dd&gt;
&lt;/dl&gt;
&lt;h1&gt;Record command&lt;/h1&gt;
&lt;p&gt;sed -i 's/^HISTSIZE=.*$/HISTSIZE=100/' /etc/profile
echo &amp;quot;export PROMPT_COMMAND='{ msg=\$(history 1 | { read x y; echo \$y; });user=\$(whoami); echo \$(date \&amp;quot;+%Y-%m-%d %H:%M:%S\&amp;quot;):\$user:`pwd`/:\$msg ---- \$(who am i); } &amp;gt;&amp;gt; /tmp/`hostname`.`whoami`.history-timestamp'&amp;quot; &amp;gt;&amp;gt; /root/.bash_profile&lt;/p&gt;
&lt;h1&gt;Wrong password five times locked 180s&lt;/h1&gt;
&lt;p&gt;sed -i '4a auth        required      pam_tally2.so deny=5 unlock_time=180' /etc/pam.d/system-auth
. /etc/profile
}&lt;/p&gt;
&lt;p&gt;main(){
yum_update
selinux
limits_config
sysctl_config
stop_server
inittab
zone_time
sshd_config&lt;/p&gt;
&lt;h1&gt;iptables&lt;/h1&gt;
&lt;pre&gt;&lt;code&gt;other&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;}
main&lt;/p&gt;            </description>
            <pubDate>2018-05-12 14:38:27</pubDate>
            <link>//blog/Notes.bak/01-%B2%D9%D7%F7%CF%B5%CD%B3/shell/%B3%F5%CA%BC%BB%AFcentos6.html</link>
            <guid isPermaLink="true">//blog/Notes.bak/01-%B2%D9%D7%F7%CF%B5%CD%B3/shell/%B3%F5%CA%BC%BB%AFcentos6.html</guid>
                                               <category>01-操作系统</category>
                                    </item>
                <item>
            <title>监测url的一个小脚本</title>
            <description>
            &lt;!--
author: 王辉
head: http://blog.unuw.com/blog/logo.jpg
date: 2017-12-28
title: 监测url的一个小脚本
tags: shell
images: http://blog.unuw.com/blog/logo.jpg
category: 01-操作系统
status: publish
summary: 监测url的一个小脚本。
--&gt;
&lt;h1&gt;!/bin/sh&lt;/h1&gt;
&lt;p&gt;function checkURL() {&lt;/p&gt;
&lt;h1&gt;statements&lt;/h1&gt;
&lt;p&gt;checkUrl=$1
echo 'check url start ...'
judge=($(curl -I -s --connect-timeout 2 $(checkUrl)|head -1|tr &amp;quot; &amp;quot; &amp;quot;\n&amp;quot;))
if [[&amp;quot;${judge[1]}&amp;quot; == '200' &amp;amp;&amp;amp; &amp;quot;${judge[2]}&amp;quot; == 'OK']]
then
action &amp;quot;${checkUrl}&amp;quot; /bin/true
else
action &amp;quot;${checkUrl}&amp;quot; /bin/false
echo -n &amp;quot;retrying again ...&amp;quot;;
sleep 3;
judgeagain=($(curl -I -s --connect-timeout 2 ${checkUrl}|head -1|tr &amp;quot;\r&amp;quot; &amp;quot;\n&amp;quot;))
if [[&amp;quot;${judgeagain[1]}&amp;quot;=='200' &amp;amp;&amp;amp; &amp;quot;${judegagain[2]}&amp;quot;=='OK']] then
action &amp;quot;${checkUrl},retried again&amp;quot; /bin/true
else
action &amp;quot;${checkUrl},retried again&amp;quot; /bin/false
fi
fi
sleep 1;
}&lt;/p&gt;
&lt;h1&gt;usage method&lt;/h1&gt;
&lt;p&gt;checkURL &lt;a href=&quot;http://abcd.com&quot;&gt;http://abcd.com&lt;/a&gt;&lt;/p&gt;            </description>
            <pubDate>2018-05-12 14:38:27</pubDate>
            <link>//blog/Notes.bak/01-%B2%D9%D7%F7%CF%B5%CD%B3/shell/check_url.html</link>
            <guid isPermaLink="true">//blog/Notes.bak/01-%B2%D9%D7%F7%CF%B5%CD%B3/shell/check_url.html</guid>
                                               <category>01-操作系统</category>
                                    </item>
                <item>
            <title>备份并利用mutt发送邮件</title>
            <description>
            &lt;!--
author: 王辉
head: http://blog.unuw.com/blog/logo.jpg
date: 2017-12-28
title: 备份并利用mutt发送邮件
tags: shell mutt
images: http://blog.unuw.com/blog/logo.jpg
category: 01-操作系统
status: publish
summary: 利用mutt邮件客户端，将备份文件发送至备份邮箱。按星期创建7个文件夹，每天备份放入本星期当天文件夹内，放入前清空历史文件，7天一个循环。
--&gt;
&lt;p&gt;利用mutt邮件客户端，将备份文件发送至备份邮箱。按星期创建7个文件夹，每天备份放入本星期当天文件夹内，放入前清空历史文件，7天一个循环。&lt;/p&gt;
&lt;h1&gt;1.安装MUTT邮件客户端&lt;/h1&gt;
&lt;p&gt;&lt;code&gt;# yum install mutt -y&lt;/code&gt;
&lt;code&gt;# mkdir 0 1 2 3 4 5 6 7&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;是由于超过系统默认发送附件大小，修改成如下大小即可（2G）&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# postconf -e &quot;message_size_limit = 2048000000&quot;
# postconf -e &quot;mailbox_size_limit = 2048000000&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;建立当前用户的.muttrc文件&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;#vi ~/.muttrc
set envelope_from=yes
set from=noreply@unuw.com
set realname=&quot;unuwadmin&quot;
set use_from=yes&lt;/code&gt;&lt;/pre&gt;
&lt;h1&gt;2.创建脚本&lt;/h1&gt;
&lt;pre&gt;&lt;code&gt;[root@www backup]# cat backup.sh
#!/bin/sh
#File: /backup/backup.sh

# =========================================================
# 请输入，你想让备份数据放置到哪个独立的目录区
basedir=/backup

# =========================================================
export LANG=C

# 定义blog.unuw.com备份路径
uwuw_bak=$basedir
#[ ! -d &quot;$basedir/blog.unuw.com&quot; ] &amp;amp;&amp;amp; mkdir -p $basedir/blog.unuw.com

# 定义邮件附件路径
mail_attach_www=$uwuw_bak/blog.unuw.com_$(date +%F_%H%M%S).tar.bz2
mail_attach_etc=$uwuw_bak/www.unuw.com_etc_$(date +%F_%H%M%S).tar.bz2

# 定义邮件标题
mail_subject=&quot;unuw.com_daily_backup&quot;
# 注：这里的标题之间的字符不能有空格，如有空格会按照邮件名发出,例如daily@www.example.com,backup@www.example.com 本例以下划线代替

# 定义邮件内容
mail_content=/tmp/mail_content.txt
mail_code=&quot;send www.unuw.com to you at $(date +%F_%H%M)&quot;

# 定义邮件地址
mail_address=&quot;wanghui3w@139.com&quot;

# 2.备份:
cd /data
tar -jpcf $mail_attach_www /data/gitblog-2.3.2
tar -jpcf $mail_attach_etc /etc

# 3.邮件正文
cd /tmp
echo $mail_code &amp;gt; $mail_content

# 4.发送附件
#yum install mutt -y
cat $mail_content |mutt -s $mail_subject  -a $mail_attach_www -a $mail_attach_etc -- $mail_address

# 5.清除临时文件
cd /tmp
rm -rf $mail_content

rm -rf `ls /backup/$(date+%w)/*.bz2|egrep -v $(date +%F)`
mv $mail_attach_www /backup/$(date +%w)
mv $mail_attach_etc /backup/$(date +%w)
&lt;/code&gt;&lt;/pre&gt;
&lt;h1&gt;3.自动执行任务&lt;/h1&gt;
&lt;pre&gt;&lt;code&gt;[root@www backup]# crontab -l
0 0 * * * `sh -x /backup/backup.sh&amp;gt;&amp;gt;/backup/backup.log`&lt;/code&gt;&lt;/pre&gt;
&lt;h1&gt;File too large错误处理&lt;/h1&gt;
&lt;pre&gt;&lt;code&gt;注:如果报如下错误
------------------
postdrop: warning: uid=0: File too large
sendmail: fatal: root(0): message file too big
Error sending message, child exited 75 (Deferred.).
Could not send the message.
------------------
是由于超过系统默认发送附件大小，修改成如下大小即可（2G）
# postconf -e &quot;message_size_limit = 2048000000&quot;
# postconf -e &quot;mailbox_size_limit = 2048000000&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;h1&gt;检查日志&lt;/h1&gt;
&lt;p&gt;&lt;code&gt;tailf /var/log/mail.log&lt;/code&gt;&lt;/p&gt;
&lt;h1&gt;关于发送邮件日志显示450&lt;/h1&gt;
&lt;p&gt;最近发现邮件服务器在发送邮件的时候，出现很多&lt;/p&gt;
&lt;p&gt;said: 450 Requested action not taken: AQAAf5ArtAMfEPFP7k0PAA--.42222S2, please try again (in reply to end of DATA command))&lt;/p&gt;
&lt;p&gt;日志如下：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Dec 29 14:15:38 www postfix/qmgr[1259]: C5AEE21722: from=&amp;lt;root@www.unuw.com&amp;gt;, size=16441667, nrcpt=1 (queue active)
Dec 29 14:15:45 www postfix/smtp[14372]: C5AEE21722: host mx1.mail.139.com[221.176.66.188] said: 450 2f2b5a45dd87fbc-b5960 Mail rejected, please try again (in reply to end of DATA command)
Dec 29 14:15:54 www postfix/smtp[14372]: C5AEE21722: to=&amp;lt;wanghui3w@139.com&amp;gt;, relay=mx2.mail.139.com[221.176.66.188]:25, delay=17, delays=0.43/0.01/8.5/8, dsn=4.0.0, status=deferred (host mx2.mail.139.com[221.176.66.188] said: 450 2f2a5a45dd8fe35-b9a8b Mail rejected, please try again (in reply to end of DATA command))
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;接收方邮件系统使用了一种叫做“Hurdle”的反垃圾邮件技术 ，他的技术原理如下：&lt;/p&gt;
&lt;p&gt;使用了“Hurdle”技术的系统，在收到一个陌生的邮箱发过来的一个邮件时，会把这个邮件暂时“扣押”（姑且这么说），并作上记号。同时，系统用退信的方式告诉发件方，我“现在繁忙”、“不能响应请求”，“请稍后再次尝试发送”。
如果，发送方是垃圾邮件发送器，则不会收到这个退信。如果是邮件服务器收到这个返回的信息，通常情况就会对这个退信中的4xx的错误代码做出响应，再次发送。
接收方服务器收到这个再次发来的邮件，就会和上次“扣押”的邮件进行比较，如果两者一样，那么接收方服务器就认为这个邮件不是垃圾邮件，并分发到用户邮箱中，同时，将此发信人列入白名单，下次直接放行。&lt;/p&gt;
&lt;p&gt;这种方法显然能够阻挡很多垃圾邮件，但同时也具有比较严重的缺点：
1，会造成邮件的延迟。
2，误判有用邮件为垃圾邮件，即对于那些对4xx错误代码不在尝试发送的邮件服务器，将无法给这个系统发邮件。 （可以要接收服务器添加白名单解决）&lt;/p&gt;
&lt;p&gt;知道原因后，等过一段时间再次查看日志发现：邮件还真发送出去了（判断理由：队列ID一样）&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;参考来源：&lt;/strong&gt;
&lt;a href=&quot;http://www.showerlee.com/archives/570&quot;&gt;http://www.showerlee.com/archives/570&lt;/a&gt;&lt;/p&gt;            </description>
            <pubDate>2019-04-11 08:20:49</pubDate>
            <link>//blog/Notes/01-%B2%D9%D7%F7%CF%B5%CD%B3/shell/%B1%B8%B7%DD%B2%A2%C0%FB%D3%C3mutt%B7%A2%CB%CD%D3%CA%BC%FE.html</link>
            <guid isPermaLink="true">//blog/Notes/01-%B2%D9%D7%F7%CF%B5%CD%B3/shell/%B1%B8%B7%DD%B2%A2%C0%FB%D3%C3mutt%B7%A2%CB%CD%D3%CA%BC%FE.html</guid>
                                               <category>01-操作系统</category>
                                    </item>
                <item>
            <title>备份并利用mutt发送邮件</title>
            <description>
            &lt;!--
author: 王辉
head: http://blog.unuw.com/blog/logo.jpg
date: 2017-12-28
title: 备份并利用mutt发送邮件
tags: shell mutt
images: http://blog.unuw.com/blog/logo.jpg
category: 01-操作系统
status: publish
summary: 利用mutt邮件客户端，将备份文件发送至备份邮箱。按星期创建7个文件夹，每天备份放入本星期当天文件夹内，放入前清空历史文件，7天一个循环。
--&gt;
&lt;p&gt;利用mutt邮件客户端，将备份文件发送至备份邮箱。按星期创建7个文件夹，每天备份放入本星期当天文件夹内，放入前清空历史文件，7天一个循环。&lt;/p&gt;
&lt;h1&gt;1.安装MUTT邮件客户端&lt;/h1&gt;
&lt;p&gt;&lt;code&gt;# yum install mutt -y&lt;/code&gt;
&lt;code&gt;# mkdir 0 1 2 3 4 5 6 7&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;是由于超过系统默认发送附件大小，修改成如下大小即可（2G）&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# postconf -e &quot;message_size_limit = 2048000000&quot;
# postconf -e &quot;mailbox_size_limit = 2048000000&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;建立当前用户的.muttrc文件&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;#vi ~/.muttrc
set envelope_from=yes
set from=noreply@unuw.com
set realname=&quot;unuwadmin&quot;
set use_from=yes&lt;/code&gt;&lt;/pre&gt;
&lt;h1&gt;2.创建脚本&lt;/h1&gt;
&lt;pre&gt;&lt;code&gt;[root@www backup]# cat backup.sh
#!/bin/sh
#File: /backup/backup.sh

# =========================================================
# 请输入，你想让备份数据放置到哪个独立的目录区
basedir=/backup

# =========================================================
export LANG=C

# 定义blog.unuw.com备份路径
uwuw_bak=$basedir
#[ ! -d &quot;$basedir/blog.unuw.com&quot; ] &amp;amp;&amp;amp; mkdir -p $basedir/blog.unuw.com

# 定义邮件附件路径
mail_attach_www=$uwuw_bak/blog.unuw.com_$(date +%F_%H%M%S).tar.bz2
mail_attach_etc=$uwuw_bak/www.unuw.com_etc_$(date +%F_%H%M%S).tar.bz2

# 定义邮件标题
mail_subject=&quot;unuw.com_daily_backup&quot;
# 注：这里的标题之间的字符不能有空格，如有空格会按照邮件名发出,例如daily@www.example.com,backup@www.example.com 本例以下划线代替

# 定义邮件内容
mail_content=/tmp/mail_content.txt
mail_code=&quot;send www.unuw.com to you at $(date +%F_%H%M)&quot;

# 定义邮件地址
mail_address=&quot;wanghui3w@139.com&quot;

# 2.备份:
cd /data
tar -jpcf $mail_attach_www /data/gitblog-2.3.2
tar -jpcf $mail_attach_etc /etc

# 3.邮件正文
cd /tmp
echo $mail_code &amp;gt; $mail_content

# 4.发送附件
#yum install mutt -y
cat $mail_content |mutt -s $mail_subject  -a $mail_attach_www -a $mail_attach_etc -- $mail_address

# 5.清除临时文件
cd /tmp
rm -rf $mail_content

rm -rf `ls /backup/$(date+%w)/*.bz2|egrep -v $(date +%F)`
mv $mail_attach_www /backup/$(date +%w)
mv $mail_attach_etc /backup/$(date +%w)
&lt;/code&gt;&lt;/pre&gt;
&lt;h1&gt;3.自动执行任务&lt;/h1&gt;
&lt;pre&gt;&lt;code&gt;[root@www backup]# crontab -l
0 0 * * * `sh -x /backup/backup.sh&amp;gt;&amp;gt;/backup/backup.log`&lt;/code&gt;&lt;/pre&gt;
&lt;h1&gt;File too large错误处理&lt;/h1&gt;
&lt;pre&gt;&lt;code&gt;注:如果报如下错误
------------------
postdrop: warning: uid=0: File too large
sendmail: fatal: root(0): message file too big
Error sending message, child exited 75 (Deferred.).
Could not send the message.
------------------
是由于超过系统默认发送附件大小，修改成如下大小即可（2G）
# postconf -e &quot;message_size_limit = 2048000000&quot;
# postconf -e &quot;mailbox_size_limit = 2048000000&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;h1&gt;检查日志&lt;/h1&gt;
&lt;p&gt;&lt;code&gt;tailf /var/log/mail.log&lt;/code&gt;&lt;/p&gt;
&lt;h1&gt;关于发送邮件日志显示450&lt;/h1&gt;
&lt;p&gt;最近发现邮件服务器在发送邮件的时候，出现很多&lt;/p&gt;
&lt;p&gt;said: 450 Requested action not taken: AQAAf5ArtAMfEPFP7k0PAA--.42222S2, please try again (in reply to end of DATA command))&lt;/p&gt;
&lt;p&gt;日志如下：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Dec 29 14:15:38 www postfix/qmgr[1259]: C5AEE21722: from=&amp;lt;root@www.unuw.com&amp;gt;, size=16441667, nrcpt=1 (queue active)
Dec 29 14:15:45 www postfix/smtp[14372]: C5AEE21722: host mx1.mail.139.com[221.176.66.188] said: 450 2f2b5a45dd87fbc-b5960 Mail rejected, please try again (in reply to end of DATA command)
Dec 29 14:15:54 www postfix/smtp[14372]: C5AEE21722: to=&amp;lt;wanghui3w@139.com&amp;gt;, relay=mx2.mail.139.com[221.176.66.188]:25, delay=17, delays=0.43/0.01/8.5/8, dsn=4.0.0, status=deferred (host mx2.mail.139.com[221.176.66.188] said: 450 2f2a5a45dd8fe35-b9a8b Mail rejected, please try again (in reply to end of DATA command))
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;接收方邮件系统使用了一种叫做“Hurdle”的反垃圾邮件技术 ，他的技术原理如下：&lt;/p&gt;
&lt;p&gt;使用了“Hurdle”技术的系统，在收到一个陌生的邮箱发过来的一个邮件时，会把这个邮件暂时“扣押”（姑且这么说），并作上记号。同时，系统用退信的方式告诉发件方，我“现在繁忙”、“不能响应请求”，“请稍后再次尝试发送”。
如果，发送方是垃圾邮件发送器，则不会收到这个退信。如果是邮件服务器收到这个返回的信息，通常情况就会对这个退信中的4xx的错误代码做出响应，再次发送。
接收方服务器收到这个再次发来的邮件，就会和上次“扣押”的邮件进行比较，如果两者一样，那么接收方服务器就认为这个邮件不是垃圾邮件，并分发到用户邮箱中，同时，将此发信人列入白名单，下次直接放行。&lt;/p&gt;
&lt;p&gt;这种方法显然能够阻挡很多垃圾邮件，但同时也具有比较严重的缺点：
1，会造成邮件的延迟。
2，误判有用邮件为垃圾邮件，即对于那些对4xx错误代码不在尝试发送的邮件服务器，将无法给这个系统发邮件。 （可以要接收服务器添加白名单解决）&lt;/p&gt;
&lt;p&gt;知道原因后，等过一段时间再次查看日志发现：邮件还真发送出去了（判断理由：队列ID一样）&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;参考来源：&lt;/strong&gt;
&lt;a href=&quot;http://www.showerlee.com/archives/570&quot;&gt;http://www.showerlee.com/archives/570&lt;/a&gt;&lt;/p&gt;            </description>
            <pubDate>2018-05-12 14:38:27</pubDate>
            <link>//blog/Notes.bak/01-%B2%D9%D7%F7%CF%B5%CD%B3/shell/%B1%B8%B7%DD%B2%A2%C0%FB%D3%C3mutt%B7%A2%CB%CD%D3%CA%BC%FE.html</link>
            <guid isPermaLink="true">//blog/Notes.bak/01-%B2%D9%D7%F7%CF%B5%CD%B3/shell/%B1%B8%B7%DD%B2%A2%C0%FB%D3%C3mutt%B7%A2%CB%CD%D3%CA%BC%FE.html</guid>
                                               <category>01-操作系统</category>
                                    </item>
                <item>
            <title>Linux常用命令</title>
            <description>
            &lt;!--
author: 王辉
head: http://blog.unuw.com/blog/logo.jpg
date: 2017-12-28
title: Linux常用命令
tags: Centos
images: http://blog.unuw.com/blog/logo.jpg
category: 01-操作系统
status: publish
summary: linux中的常用命令。
--&gt;
&lt;h1&gt;a&lt;/h1&gt;
&lt;pre&gt;&lt;code&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h1&gt;b&lt;/h1&gt;
&lt;pre&gt;&lt;code&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h1&gt;c&lt;/h1&gt;
&lt;pre&gt;&lt;code&gt;curl -I 查看响应header信息，-s 安静，-w 获取状态吗&lt;/code&gt;&lt;/pre&gt;
&lt;h1&gt;d&lt;/h1&gt;
&lt;pre&gt;&lt;code&gt;diff file1 file2&lt;/code&gt;&lt;/pre&gt;
&lt;h1&gt;e&lt;/h1&gt;
&lt;pre&gt;&lt;code&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h1&gt;f&lt;/h1&gt;
&lt;pre&gt;&lt;code&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h1&gt;g&lt;/h1&gt;
&lt;pre&gt;&lt;code&gt;grep -v &quot;#|^$&quot; nginx.conf #排除注释‘#’和空行；
     -r 递归
     -n 显示行号
     -i 忽略大小写
     -l 输出文件名清单
     '^xxx' 以xxx开头
     'xxx$' 以xxx结束
grep -rn wanghui ./ #递归查找当前目录下所有含wanghui的文件&lt;/code&gt;&lt;/pre&gt;
&lt;h1&gt;h&lt;/h1&gt;
&lt;pre&gt;&lt;code&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h1&gt;i&lt;/h1&gt;
&lt;pre&gt;&lt;code&gt;# 临时添加ip
ip addr add 10.0.0.10/24 dev eth0&lt;/code&gt;&lt;/pre&gt;
&lt;h1&gt;j&lt;/h1&gt;
&lt;pre&gt;&lt;code&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h1&gt;k&lt;/h1&gt;
&lt;pre&gt;&lt;code&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h1&gt;l&lt;/h1&gt;
&lt;pre&gt;&lt;code&gt;# list open files
lsof  &lt;/code&gt;&lt;/pre&gt;
&lt;h1&gt;m&lt;/h1&gt;
&lt;pre&gt;&lt;code&gt;# md5校验
md5sum * &amp;gt; tmp.md5
md5sum -c tmp.md5
# md5批量校验
find ./ -type f -print0 | xargs -0 md5sum &amp;gt; ./backup.md5
md5sum -c ./backup.md5 |grep -nv OK

mkdir -p /1/2/3/4&lt;/code&gt;&lt;/pre&gt;
&lt;h1&gt;n&lt;/h1&gt;
&lt;pre&gt;&lt;code&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h1&gt;o&lt;/h1&gt;
&lt;pre&gt;&lt;code&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h1&gt;p&lt;/h1&gt;
&lt;pre&gt;&lt;code&gt;ps -ef
ps -aux&lt;/code&gt;&lt;/pre&gt;
&lt;h1&gt;q&lt;/h1&gt;
&lt;pre&gt;&lt;code&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h1&gt;r&lt;/h1&gt;
&lt;pre&gt;&lt;code&gt;# 查看文件属于哪个安装包
rpm -qf /usr/bin/htpasswd
# 查看包是否安装
rpm -qa httpd
rpm -ivh 包名 #安装
rpm -e --nodeps 包名 #
rpm -Uvh 包名 #升级
rpm -ql 包名 #查看包里包含的文件&lt;/code&gt;&lt;/pre&gt;
&lt;h1&gt;s&lt;/h1&gt;
&lt;pre&gt;&lt;code&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h1&gt;t&lt;/h1&gt;
&lt;pre&gt;&lt;code&gt;#查看文件末尾
tail -n 100 file
tail -f file
tailf file

# tcpdump
&lt;/code&gt;&lt;/pre&gt;
&lt;h1&gt;u&lt;/h1&gt;
&lt;pre&gt;&lt;code&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h1&gt;v&lt;/h1&gt;
&lt;pre&gt;&lt;code&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h1&gt;w&lt;/h1&gt;
&lt;pre&gt;&lt;code&gt;wget -q 安静，-O 指定文件名&lt;/code&gt;&lt;/pre&gt;
&lt;h1&gt;x&lt;/h1&gt;
&lt;pre&gt;&lt;code&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h1&gt;y&lt;/h1&gt;
&lt;p&gt;&lt;a href=&quot;../Centos/创建yum源.md&quot;&gt;yum源&lt;/a&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 指定yum安装位置
yum install --installroot=/usr/src/
# 查看yum缓存位置
cat /etc/yum.conf | grep cachedir

# yum下载本地
# 1.下载指定包及相关依赖
yum install --downloadonly packetName
# 2.查看下载的缓存文件,默认存/var/cache/yum
ll /var/cache/yum
# 3.yum使用缓存安装指定包
yum -C install packetName&lt;/code&gt;&lt;/pre&gt;
&lt;h1&gt;z&lt;/h1&gt;
&lt;pre&gt;&lt;code&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h1&gt;生成密码&lt;/h1&gt;
&lt;h4&gt;1&lt;/h4&gt;
&lt;p&gt;&lt;code&gt;date +%s | sha256sum | base64 | head -c 32 ; echo&lt;/code&gt;
上述命令使用SHA来哈希日期，输出头32个字节。&lt;/p&gt;
&lt;h4&gt;3&lt;/h4&gt;
&lt;p&gt;&lt;code&gt;&amp;lt; /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c${1:-32};echo;&lt;/code&gt;
上述命令使用内嵌的/dev/urandom，只输出字符，结果取头32个。&lt;/p&gt;
&lt;h4&gt;3&lt;/h4&gt;
&lt;p&gt;&lt;code&gt;openssl rand -base64 32&lt;/code&gt;
上述命令使用系统自带的openssl的随机特点来产生随机密码&lt;/p&gt;
&lt;h4&gt;4&lt;/h4&gt;
&lt;p&gt;&lt;code&gt;tr -cd ‘[:alnum:]‘ &amp;lt; /dev/urandom | fold -w30 | head -n1&lt;/code&gt;&lt;/p&gt;
&lt;h4&gt;5&lt;/h4&gt;
&lt;p&gt;&lt;code&gt;strings /dev/urandom | grep -o ‘[[:alnum:]]’ | head -n 30 | tr -d ‘\n’; echo&lt;/code&gt;
通过过滤字符命令，输出随机密码&lt;/p&gt;
&lt;h4&gt;6&lt;/h4&gt;
&lt;p&gt;&lt;code&gt;&amp;lt; /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c6&lt;/code&gt;
这个命令比起来比较简单了&lt;/p&gt;
&lt;h4&gt;7&lt;/h4&gt;
&lt;p&gt;&lt;code&gt;dd if=/dev/urandom bs=1 count=32 2&amp;gt;/dev/null | base64 -w 0 | rev | cut -b 2- | rev&lt;/code&gt;
上述命令使用命令dd的强大功能&lt;/p&gt;
&lt;h4&gt;8&lt;/h4&gt;
&lt;p&gt;&lt;code&gt;&amp;lt;/dev/urandom  tr -dc ’12345!@#$%qwertQWERTasdfgASDFGzxcvbZXCVB’ | head -c8; echo “”&lt;/code&gt;
上述命令输出很简洁&lt;/p&gt;
&lt;h4&gt;9&lt;/h4&gt;
&lt;p&gt;&lt;code&gt;randpw(){ &amp;lt; /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c${1:-16};echo;}&lt;/code&gt;
使用randpw随时产生随机密码，可以把它放到~/.bashrc文件里面。
(我这里没有什么密码产生，可留言讨论)&lt;/p&gt;
&lt;h4&gt;10&lt;/h4&gt;
&lt;p&gt;&lt;code&gt;date | md5sum&lt;/code&gt;&lt;/p&gt;            </description>
            <pubDate>2019-04-11 08:20:49</pubDate>
            <link>//blog/Notes/01-%B2%D9%D7%F7%CF%B5%CD%B3/Centos/linux%B3%A3%D3%C3%C3%FC%C1%EE.html</link>
            <guid isPermaLink="true">//blog/Notes/01-%B2%D9%D7%F7%CF%B5%CD%B3/Centos/linux%B3%A3%D3%C3%C3%FC%C1%EE.html</guid>
                                               <category>01-操作系统</category>
                                    </item>
                <item>
            <title>Centos常用设置</title>
            <description>
            &lt;!--
author: 王辉
head: http://blog.unuw.com/blog/logo.jpg
date: 2017-12-28
title: Centos常用设置
tags: Centos
images: http://blog.unuw.com/blog/logo.jpg
category: 01-操作系统
status: publish
summary: Centos的常用设置，如中文支持等。
--&gt;
&lt;h1&gt;中文支持&lt;/h1&gt;
&lt;h2&gt;1：安装支持中文：&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;yum -y group install chinese-support&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;2：修改字符编码配置文件&lt;/h2&gt;
&lt;p&gt;默认设置为英文：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;[root@Tony_ts_tian sysconfig]# pwd   
/etc/sysconfig  
[root@Tony_ts_tian sysconfig]# cat i18n   
LANG=&quot;en_US.UTF-8&quot;   
SYSFONT=&quot;latarcyrheb-sun16&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;设置为中文：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;[root@Tony_ts_tian sysconfig]# vi /etc/sysconfig/i18n  
 LANG=”zh_CN.utf8″  
[root@Tony_ts_tian sysconfig]# source /etc/sysconfig/i18n  &lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;3：Terminal Console终端设置为utf8编码：&lt;/h2&gt;
&lt;p&gt;配置文件：/etc/profile，最后添加：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;export LC_ALL=&quot;zh_CN.utf8&quot;  &lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;4：Xshell / xwindow终端乱码&lt;/h2&gt;
&lt;p&gt;文件/etc/sysconfig/i18n的最后添加：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;export LC_ALL=&quot;zh_CN.utf8&quot;  &lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;查看是否安装，中文字体 / 字体显示：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;yum -y install fonts-chinese  
yum -y install fonts-ISO8859&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;安装中文输入：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;yum install scim  
yum install scim-pinyin  &lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;后字符编码配置文件[/etc/sysconfig/i18n]：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;LANG=&quot;zh_CN.GB18030&quot;  
LANGUAGE=&quot;zh_CN.GB18030:zh_CN.GB2312:zh_CN&quot;  
SUPPORTED=&quot;zh_CN.UTF-8:zh_CN:zh:en_US.UTF-8:en_US:en&quot;  
SYSFONT=&quot;lat0-sun16&quot;  &lt;/code&gt;&lt;/pre&gt;            </description>
            <pubDate>2018-05-12 14:38:27</pubDate>
            <link>//blog/Notes.bak/01-%B2%D9%D7%F7%CF%B5%CD%B3/Centos/%B3%A3%D3%C3%C9%E8%D6%C3.html</link>
            <guid isPermaLink="true">//blog/Notes.bak/01-%B2%D9%D7%F7%CF%B5%CD%B3/Centos/%B3%A3%D3%C3%C9%E8%D6%C3.html</guid>
                                               <category>01-操作系统</category>
                                    </item>
                <item>
            <title>linux在shell中获取时间</title>
            <description>
            &lt;!--
author: 王辉
head: http://blog.unuw.com/blog/logo.jpg
date: 2017-12-28
title: linux在shell中获取时间
tags: Centos
images: http://blog.unuw.com/blog/logo.jpg
category: 01-操作系统
status: publish
summary: linux在shell中获取时间
--&gt;
&lt;p&gt;linux在shell中获取时间&lt;/p&gt;
&lt;p&gt;获得当天的日期&lt;/p&gt;
&lt;p&gt;date +%Y-%m-%d&lt;/p&gt;
&lt;p&gt;输出： 2011-07-28&lt;/p&gt;
&lt;p&gt;将当前日期赋值给DATE变量
DATE=$(date +%Y%m%d)&lt;/p&gt;
&lt;p&gt;有时候我们需要使用今天之前或者往后的日期，这时可以使用date的 -d参数&lt;/p&gt;
&lt;p&gt;获取明天的日期&lt;/p&gt;
&lt;p&gt;date -d next-day +%Y%m%d&lt;/p&gt;
&lt;p&gt;获取昨天的日期&lt;/p&gt;
&lt;p&gt;date -d last-day +%Y%m%d&lt;/p&gt;
&lt;p&gt;获取上个月的年和月&lt;/p&gt;
&lt;p&gt;date -d last-month +%Y%m&lt;/p&gt;
&lt;p&gt;获取下个月的年和月
date -d next-month +%Y%m&lt;/p&gt;
&lt;p&gt;获取明年的年份
date -d next-year +%Y&lt;/p&gt;
&lt;p&gt;下面是一些date参数的说明和一些例子&lt;/p&gt;
&lt;h2&gt;名称 : date
使用权限 : 所有使用者
使用方式 : date [-u] [-d datestr] [-s datestr] [--utc] [--universal] [--date=datestr] [--set=datestr] [--help] [--version] [+FORMAT] [MMDDhhmm[[CC]YY][.ss]]
说明 : date 能用来显示或设定系统的日期和时间，在显示方面，使用者能设定欲显示的格式，格式设定为一个加号后接数个标记，其中可用的标记列表如下 :
时间方面 :
% : 印出
% %n : 下一行
%t : 跳格
%H : 小时(00..23)
%I : 小时(01..12)
%k : 小时(0..23)
%l : 小时(1..12)
%M : 分钟(00..59)
%p : 显示本地 AM 或 PM
%r : 直接显示时间 (12 小时制，格式为 hh:mm:ss [AP]M)
%s : 从 1970 年 1 月 1 日 00:00:00 UTC 到目前为止的秒数 %S : 秒(00..61)
%T : 直接显示时间 (24 小时制)
%X : 相当于 %H:%M:%S
%Z : 显示时区
日期方面 :
%a : 星期几 (Sun..Sat)
%A : 星期几 (Sunday..Saturday)
%b : 月份 (Jan..Dec)
%B : 月份 (January..December)
%c : 直接显示日期和时间
%d : 日 (01..31)
%D : 直接显示日期 (mm/dd/yy)
%h : 同 %b
%j : 一年中的第几天 (001..366)
%m : 月份 (01..12)
%U : 一年中的第几周 (00..53) (以 Sunday 为一周的第一天的情形)
%w : 一周中的第几天 (0..6)
%W : 一年中的第几周 (00..53) (以 Monday 为一周的第一天的情形)
%x : 直接显示日期 (mm/dd/yy)
%y : 年份的最后两位数字 (00.99)
%Y : 完整年份 (0000..9999)
若是不以加号作为开头，则表示要设定时间，而时间格式为 MMDDhhmm[[CC]YY][.ss]，
其中 MM 为月份，
DD 为日，
hh 为小时，
mm 为分钟，
CC 为年份前两位数字，
YY 为年份后两位数字，
ss 为秒数
把计 :
-d datestr : 显示 datestr 中所设定的时间 (非系统时间)
--help : 显示辅助讯息
-s datestr : 将系统时间设为 datestr 中所设定的时间
-u : 显示目前的格林威治时间
--version : 显示版本编号
例子 :
显示时间后跳行，再显示目前日期 : date +%T%n%D
显示月份和日数 : date +%B %d
显示日期和设定时间(12:34:56) : date --date 12:34:56
设置系统当前时间（12:34:56）：date --s 12:34:56
注意 : 当你不希望出现无意义的 0 时(比如说 1999/03/07)，则能在标记中插入 - 符号，比如说 date +%-H:%-M:%-S 会把时分秒中无意义的 0 给去掉，像是原本的 08:09:04 会变为 8:9:4。另外，只有取得权限者(比如说 root)才能设定系统时间。 当你以 root 身分更改了系统时间之后，请记得以 clock -w 来将系统时间写入 CMOS 中，这样下次重新开机时系统时间才会持续抱持最新的正确值。
ntp时间同步
linux系统下默认安装了ntp服务，手动进行ntp同步如下
ntpdate ntp1.nl.net
当然，也能指定其他的ntp服务器&lt;/h2&gt;
&lt;p&gt;扩展功能
date 工具可以完成更多的工作，不仅仅只是打印出当前的系统日期。您可以使用它来得到给定的日期究竟是星期几，并得到相对于当前日期的相对日期。了解某一天是星期几
GNU 对 date 命令的另一个扩展是 -d 选项，当您的桌上没有日历表时（UNIX 用户不需要日历表），该选项非常有用。使用这个功能强大的选项，通过将日期作为引号括起来的参数提供，您可以快速地查明一个特定的日期究竟是星期几：
$ date -d &amp;quot;nov 22&amp;quot;
Wed Nov 22 00:00:00 EST 2006
$
在本示例中，您可以看到今年的 11 月 22 日是星期三。
所以，假设在 11 月 22 日召开一个重大的会议，您可以立即了解到这一天是星期三，而这一天您将赶到驻地办公室。
获得相对日期
d 选项还可以告诉您，相对于 当前日期若干天的究竟是哪一天，从现在开始的若干天或若干星期以后，或者以前（过去）。通过将这个相对偏移使用引号括起来，作为 -d 选项的参数，就可以完成这项任务。
例如，您需要了解两星期以后的日期。如果您处于 Shell 提示符处，那么可以迅速地得到答案：
$ date -d ’2 weeks’
关于使用该命令，还有其他一些重要的方法。使用 next/last指令，您可以得到以后的星期几是哪一天：
$ date -d ’next monday’ (下周一的日期)
$ date -d next-day +%Y%m%d（明天的日期）或者：date -d tomorrow +%Y%m%d
$ date -d last-day +%Y%m%d(昨天的日期) 或者：date -d yesterday +%Y%m%d
$ date -d last-month +%Y%m(上个月是几月)
$ date -d next-month +%Y%m(下个月是几月)
使用 ago 指令，您可以得到过去的日期：
$ date -d ’30 days ago’ （30天前的日期）
您可以使用负数以得到相反的日期：
$ date -d ’dec 14 -2 weeks’ （相对:dec 14这个日期的两周前的日期）
$ date -d ’-100 days’ (100天以前的日期)
$ date -d ’50 days’(50天后的日期)
这个技巧非常有用，它可以根据将来的日期为自己设置提醒，可能是在脚本或 Shell 启动文件中，如下所示：
DAY=&lt;code&gt;date -d ’2 weeks’ +&quot;%b %d&quot;&lt;/code&gt;
if test &amp;quot;&lt;code&gt;echo $DAY&lt;/code&gt;&amp;quot; = &amp;quot;Aug 16&amp;quot;; then echo ’Product launch is now two weeks away!’; fi&lt;/p&gt;
&lt;p&gt;##############################&lt;/p&gt;
&lt;p&gt;unix shell中的日期格式转换
$ t_t=&amp;quot;Jul  1 21:29&amp;quot;
$ date &amp;quot;+%G-%m-%d %H:%M:%S&amp;quot; -d &amp;quot;$t_t&amp;quot; # $t_t的格式是比较随意的
2008-07-01 21:29:00
$ date +%b/%d/%G -d &amp;quot;2008-07-01&amp;quot;
Jul/01/2008&lt;/p&gt;
&lt;p&gt;unix shell中的日期之间间隔的天数
$ expr '(' $(date +%s -d &amp;quot;2008-07-02&amp;quot;) - $(date +%s -d &amp;quot;2008-05-30&amp;quot;) ')' / 86400
33&lt;/p&gt;
&lt;h2&gt;存在bcdate的话，可以直接使用。&lt;/h2&gt;
&lt;p&gt;shell中日期加减指定间隔单位
增加36小时：
$ a=&lt;code&gt;date +%Y-%m-%d&lt;/code&gt;
$ b=&lt;code&gt;date +%Y-%m-%d -d &quot;$a +36 hours&quot;&lt;/code&gt;
10天前：
$ date -d &amp;quot;$a -10 days&amp;quot;
Sun Jun 22 00:00:00 CST 2008&lt;/p&gt;
&lt;p&gt;以指定格式显示文件更改后最后日期，如yyyy-mm-dd hh24:mi:ss
$ date &amp;quot;+%Y-%m-%d %H:%M:%S&amp;quot; -r test.bak
2008-07-01 21:28:55&lt;/p&gt;            </description>
            <pubDate>2019-04-11 08:20:49</pubDate>
            <link>//blog/Notes/01-%B2%D9%D7%F7%CF%B5%CD%B3/Centos/linux%D4%DAshell%D6%D0%BB%F1%C8%A1%CA%B1%BC%E4.html</link>
            <guid isPermaLink="true">//blog/Notes/01-%B2%D9%D7%F7%CF%B5%CD%B3/Centos/linux%D4%DAshell%D6%D0%BB%F1%C8%A1%CA%B1%BC%E4.html</guid>
                                               <category>01-操作系统</category>
                                    </item>
                <item>
            <title>Linux常用命令</title>
            <description>
            &lt;!--
author: 王辉
head: http://blog.unuw.com/blog/logo.jpg
date: 2017-12-28
title: Linux常用命令
tags: Centos
images: http://blog.unuw.com/blog/logo.jpg
category: 01-操作系统
status: publish
summary: linux中的常用命令。
--&gt;
&lt;h1&gt;a&lt;/h1&gt;
&lt;pre&gt;&lt;code&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h1&gt;b&lt;/h1&gt;
&lt;pre&gt;&lt;code&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h1&gt;c&lt;/h1&gt;
&lt;pre&gt;&lt;code&gt;curl -I 查看响应header信息，-s 安静，-w 获取状态吗&lt;/code&gt;&lt;/pre&gt;
&lt;h1&gt;d&lt;/h1&gt;
&lt;pre&gt;&lt;code&gt;diff file1 file2&lt;/code&gt;&lt;/pre&gt;
&lt;h1&gt;e&lt;/h1&gt;
&lt;pre&gt;&lt;code&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h1&gt;f&lt;/h1&gt;
&lt;pre&gt;&lt;code&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h1&gt;g&lt;/h1&gt;
&lt;pre&gt;&lt;code&gt;grep -v &quot;#|^$&quot; nginx.conf #排除注释‘#’和空行；
     -r 递归
     -n 显示行号
     -i 忽略大小写
     -l 输出文件名清单
     '^xxx' 以xxx开头
     'xxx$' 以xxx结束
grep -rn wanghui ./ #递归查找当前目录下所有含wanghui的文件&lt;/code&gt;&lt;/pre&gt;
&lt;h1&gt;h&lt;/h1&gt;
&lt;pre&gt;&lt;code&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h1&gt;i&lt;/h1&gt;
&lt;pre&gt;&lt;code&gt;# 临时添加ip
ip addr add 10.0.0.10/24 dev eth0&lt;/code&gt;&lt;/pre&gt;
&lt;h1&gt;j&lt;/h1&gt;
&lt;pre&gt;&lt;code&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h1&gt;k&lt;/h1&gt;
&lt;pre&gt;&lt;code&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h1&gt;l&lt;/h1&gt;
&lt;pre&gt;&lt;code&gt;# list open files
lsof  &lt;/code&gt;&lt;/pre&gt;
&lt;h1&gt;m&lt;/h1&gt;
&lt;pre&gt;&lt;code&gt;# md5校验
md5sum * &amp;gt; tmp.md5
md5sum -c tmp.md5
# md5批量校验
find ./ -type f -print0 | xargs -0 md5sum &amp;gt; ./backup.md5
md5sum -c ./backup.md5 |grep -nv OK

mkdir -p /1/2/3/4&lt;/code&gt;&lt;/pre&gt;
&lt;h1&gt;n&lt;/h1&gt;
&lt;pre&gt;&lt;code&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h1&gt;o&lt;/h1&gt;
&lt;pre&gt;&lt;code&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h1&gt;p&lt;/h1&gt;
&lt;pre&gt;&lt;code&gt;ps -ef
ps -aux&lt;/code&gt;&lt;/pre&gt;
&lt;h1&gt;q&lt;/h1&gt;
&lt;pre&gt;&lt;code&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h1&gt;r&lt;/h1&gt;
&lt;pre&gt;&lt;code&gt;# 查看文件属于哪个安装包
rpm -qf /usr/bin/htpasswd
# 查看包是否安装
rpm -qa httpd
rpm -ivh 包名 #安装
rpm -e --nodeps 包名 #
rpm -Uvh 包名 #升级
rpm -ql 包名 #查看包里包含的文件&lt;/code&gt;&lt;/pre&gt;
&lt;h1&gt;s&lt;/h1&gt;
&lt;pre&gt;&lt;code&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h1&gt;t&lt;/h1&gt;
&lt;pre&gt;&lt;code&gt;#查看文件末尾
tail -n 100 file
tail -f file
tailf file

# tcpdump
&lt;/code&gt;&lt;/pre&gt;
&lt;h1&gt;u&lt;/h1&gt;
&lt;pre&gt;&lt;code&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h1&gt;v&lt;/h1&gt;
&lt;pre&gt;&lt;code&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h1&gt;w&lt;/h1&gt;
&lt;pre&gt;&lt;code&gt;wget -q 安静，-O 指定文件名&lt;/code&gt;&lt;/pre&gt;
&lt;h1&gt;x&lt;/h1&gt;
&lt;pre&gt;&lt;code&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h1&gt;y&lt;/h1&gt;
&lt;p&gt;&lt;a href=&quot;../Centos/创建yum源.md&quot;&gt;yum源&lt;/a&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 指定yum安装位置
yum install --installroot=/usr/src/
# 查看yum缓存位置
cat /etc/yum.conf | grep cachedir

# yum下载本地
# 1.下载指定包及相关依赖
yum install --downloadonly packetName
# 2.查看下载的缓存文件,默认存/var/cache/yum
ll /var/cache/yum
# 3.yum使用缓存安装指定包
yum -C install packetName&lt;/code&gt;&lt;/pre&gt;
&lt;h1&gt;z&lt;/h1&gt;
&lt;pre&gt;&lt;code&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h1&gt;生成密码&lt;/h1&gt;
&lt;h4&gt;1&lt;/h4&gt;
&lt;p&gt;&lt;code&gt;date +%s | sha256sum | base64 | head -c 32 ; echo&lt;/code&gt;
上述命令使用SHA来哈希日期，输出头32个字节。&lt;/p&gt;
&lt;h4&gt;3&lt;/h4&gt;
&lt;p&gt;&lt;code&gt;&amp;lt; /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c${1:-32};echo;&lt;/code&gt;
上述命令使用内嵌的/dev/urandom，只输出字符，结果取头32个。&lt;/p&gt;
&lt;h4&gt;3&lt;/h4&gt;
&lt;p&gt;&lt;code&gt;openssl rand -base64 32&lt;/code&gt;
上述命令使用系统自带的openssl的随机特点来产生随机密码&lt;/p&gt;
&lt;h4&gt;4&lt;/h4&gt;
&lt;p&gt;&lt;code&gt;tr -cd ‘[:alnum:]‘ &amp;lt; /dev/urandom | fold -w30 | head -n1&lt;/code&gt;&lt;/p&gt;
&lt;h4&gt;5&lt;/h4&gt;
&lt;p&gt;&lt;code&gt;strings /dev/urandom | grep -o ‘[[:alnum:]]’ | head -n 30 | tr -d ‘\n’; echo&lt;/code&gt;
通过过滤字符命令，输出随机密码&lt;/p&gt;
&lt;h4&gt;6&lt;/h4&gt;
&lt;p&gt;&lt;code&gt;&amp;lt; /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c6&lt;/code&gt;
这个命令比起来比较简单了&lt;/p&gt;
&lt;h4&gt;7&lt;/h4&gt;
&lt;p&gt;&lt;code&gt;dd if=/dev/urandom bs=1 count=32 2&amp;gt;/dev/null | base64 -w 0 | rev | cut -b 2- | rev&lt;/code&gt;
上述命令使用命令dd的强大功能&lt;/p&gt;
&lt;h4&gt;8&lt;/h4&gt;
&lt;p&gt;&lt;code&gt;&amp;lt;/dev/urandom  tr -dc ’12345!@#$%qwertQWERTasdfgASDFGzxcvbZXCVB’ | head -c8; echo “”&lt;/code&gt;
上述命令输出很简洁&lt;/p&gt;
&lt;h4&gt;9&lt;/h4&gt;
&lt;p&gt;&lt;code&gt;randpw(){ &amp;lt; /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c${1:-16};echo;}&lt;/code&gt;
使用randpw随时产生随机密码，可以把它放到~/.bashrc文件里面。
(我这里没有什么密码产生，可留言讨论)&lt;/p&gt;
&lt;h4&gt;10&lt;/h4&gt;
&lt;p&gt;&lt;code&gt;date | md5sum&lt;/code&gt;&lt;/p&gt;            </description>
            <pubDate>2018-05-12 14:38:27</pubDate>
            <link>//blog/Notes.bak/01-%B2%D9%D7%F7%CF%B5%CD%B3/Centos/linux%B3%A3%D3%C3%C3%FC%C1%EE.html</link>
            <guid isPermaLink="true">//blog/Notes.bak/01-%B2%D9%D7%F7%CF%B5%CD%B3/Centos/linux%B3%A3%D3%C3%C3%FC%C1%EE.html</guid>
                                               <category>01-操作系统</category>
                                    </item>
                <item>
            <title>Centos常用设置</title>
            <description>
            &lt;!--
author: 王辉
head: http://blog.unuw.com/blog/logo.jpg
date: 2017-12-28
title: Centos常用设置
tags: Centos
images: http://blog.unuw.com/blog/logo.jpg
category: 01-操作系统
status: publish
summary: Centos的常用设置，如中文支持等。
--&gt;
&lt;h1&gt;中文支持&lt;/h1&gt;
&lt;h2&gt;1：安装支持中文：&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;yum -y group install chinese-support&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;2：修改字符编码配置文件&lt;/h2&gt;
&lt;p&gt;默认设置为英文：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;[root@Tony_ts_tian sysconfig]# pwd   
/etc/sysconfig  
[root@Tony_ts_tian sysconfig]# cat i18n   
LANG=&quot;en_US.UTF-8&quot;   
SYSFONT=&quot;latarcyrheb-sun16&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;设置为中文：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;[root@Tony_ts_tian sysconfig]# vi /etc/sysconfig/i18n  
 LANG=”zh_CN.utf8″  
[root@Tony_ts_tian sysconfig]# source /etc/sysconfig/i18n  &lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;3：Terminal Console终端设置为utf8编码：&lt;/h2&gt;
&lt;p&gt;配置文件：/etc/profile，最后添加：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;export LC_ALL=&quot;zh_CN.utf8&quot;  &lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;4：Xshell / xwindow终端乱码&lt;/h2&gt;
&lt;p&gt;文件/etc/sysconfig/i18n的最后添加：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;export LC_ALL=&quot;zh_CN.utf8&quot;  &lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;查看是否安装，中文字体 / 字体显示：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;yum -y install fonts-chinese  
yum -y install fonts-ISO8859&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;安装中文输入：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;yum install scim  
yum install scim-pinyin  &lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;后字符编码配置文件[/etc/sysconfig/i18n]：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;LANG=&quot;zh_CN.GB18030&quot;  
LANGUAGE=&quot;zh_CN.GB18030:zh_CN.GB2312:zh_CN&quot;  
SUPPORTED=&quot;zh_CN.UTF-8:zh_CN:zh:en_US.UTF-8:en_US:en&quot;  
SYSFONT=&quot;lat0-sun16&quot;  &lt;/code&gt;&lt;/pre&gt;            </description>
            <pubDate>2019-04-11 08:20:49</pubDate>
            <link>//blog/Notes/01-%B2%D9%D7%F7%CF%B5%CD%B3/Centos/%B3%A3%D3%C3%C9%E8%D6%C3.html</link>
            <guid isPermaLink="true">//blog/Notes/01-%B2%D9%D7%F7%CF%B5%CD%B3/Centos/%B3%A3%D3%C3%C9%E8%D6%C3.html</guid>
                                               <category>01-操作系统</category>
                                    </item>
                <item>
            <title>linux在shell中获取时间</title>
            <description>
            &lt;!--
author: 王辉
head: http://blog.unuw.com/blog/logo.jpg
date: 2017-12-28
title: linux在shell中获取时间
tags: Centos
images: http://blog.unuw.com/blog/logo.jpg
category: 01-操作系统
status: publish
summary: linux在shell中获取时间
--&gt;
&lt;p&gt;linux在shell中获取时间&lt;/p&gt;
&lt;p&gt;获得当天的日期&lt;/p&gt;
&lt;p&gt;date +%Y-%m-%d&lt;/p&gt;
&lt;p&gt;输出： 2011-07-28&lt;/p&gt;
&lt;p&gt;将当前日期赋值给DATE变量
DATE=$(date +%Y%m%d)&lt;/p&gt;
&lt;p&gt;有时候我们需要使用今天之前或者往后的日期，这时可以使用date的 -d参数&lt;/p&gt;
&lt;p&gt;获取明天的日期&lt;/p&gt;
&lt;p&gt;date -d next-day +%Y%m%d&lt;/p&gt;
&lt;p&gt;获取昨天的日期&lt;/p&gt;
&lt;p&gt;date -d last-day +%Y%m%d&lt;/p&gt;
&lt;p&gt;获取上个月的年和月&lt;/p&gt;
&lt;p&gt;date -d last-month +%Y%m&lt;/p&gt;
&lt;p&gt;获取下个月的年和月
date -d next-month +%Y%m&lt;/p&gt;
&lt;p&gt;获取明年的年份
date -d next-year +%Y&lt;/p&gt;
&lt;p&gt;下面是一些date参数的说明和一些例子&lt;/p&gt;
&lt;h2&gt;名称 : date
使用权限 : 所有使用者
使用方式 : date [-u] [-d datestr] [-s datestr] [--utc] [--universal] [--date=datestr] [--set=datestr] [--help] [--version] [+FORMAT] [MMDDhhmm[[CC]YY][.ss]]
说明 : date 能用来显示或设定系统的日期和时间，在显示方面，使用者能设定欲显示的格式，格式设定为一个加号后接数个标记，其中可用的标记列表如下 :
时间方面 :
% : 印出
% %n : 下一行
%t : 跳格
%H : 小时(00..23)
%I : 小时(01..12)
%k : 小时(0..23)
%l : 小时(1..12)
%M : 分钟(00..59)
%p : 显示本地 AM 或 PM
%r : 直接显示时间 (12 小时制，格式为 hh:mm:ss [AP]M)
%s : 从 1970 年 1 月 1 日 00:00:00 UTC 到目前为止的秒数 %S : 秒(00..61)
%T : 直接显示时间 (24 小时制)
%X : 相当于 %H:%M:%S
%Z : 显示时区
日期方面 :
%a : 星期几 (Sun..Sat)
%A : 星期几 (Sunday..Saturday)
%b : 月份 (Jan..Dec)
%B : 月份 (January..December)
%c : 直接显示日期和时间
%d : 日 (01..31)
%D : 直接显示日期 (mm/dd/yy)
%h : 同 %b
%j : 一年中的第几天 (001..366)
%m : 月份 (01..12)
%U : 一年中的第几周 (00..53) (以 Sunday 为一周的第一天的情形)
%w : 一周中的第几天 (0..6)
%W : 一年中的第几周 (00..53) (以 Monday 为一周的第一天的情形)
%x : 直接显示日期 (mm/dd/yy)
%y : 年份的最后两位数字 (00.99)
%Y : 完整年份 (0000..9999)
若是不以加号作为开头，则表示要设定时间，而时间格式为 MMDDhhmm[[CC]YY][.ss]，
其中 MM 为月份，
DD 为日，
hh 为小时，
mm 为分钟，
CC 为年份前两位数字，
YY 为年份后两位数字，
ss 为秒数
把计 :
-d datestr : 显示 datestr 中所设定的时间 (非系统时间)
--help : 显示辅助讯息
-s datestr : 将系统时间设为 datestr 中所设定的时间
-u : 显示目前的格林威治时间
--version : 显示版本编号
例子 :
显示时间后跳行，再显示目前日期 : date +%T%n%D
显示月份和日数 : date +%B %d
显示日期和设定时间(12:34:56) : date --date 12:34:56
设置系统当前时间（12:34:56）：date --s 12:34:56
注意 : 当你不希望出现无意义的 0 时(比如说 1999/03/07)，则能在标记中插入 - 符号，比如说 date +%-H:%-M:%-S 会把时分秒中无意义的 0 给去掉，像是原本的 08:09:04 会变为 8:9:4。另外，只有取得权限者(比如说 root)才能设定系统时间。 当你以 root 身分更改了系统时间之后，请记得以 clock -w 来将系统时间写入 CMOS 中，这样下次重新开机时系统时间才会持续抱持最新的正确值。
ntp时间同步
linux系统下默认安装了ntp服务，手动进行ntp同步如下
ntpdate ntp1.nl.net
当然，也能指定其他的ntp服务器&lt;/h2&gt;
&lt;p&gt;扩展功能
date 工具可以完成更多的工作，不仅仅只是打印出当前的系统日期。您可以使用它来得到给定的日期究竟是星期几，并得到相对于当前日期的相对日期。了解某一天是星期几
GNU 对 date 命令的另一个扩展是 -d 选项，当您的桌上没有日历表时（UNIX 用户不需要日历表），该选项非常有用。使用这个功能强大的选项，通过将日期作为引号括起来的参数提供，您可以快速地查明一个特定的日期究竟是星期几：
$ date -d &amp;quot;nov 22&amp;quot;
Wed Nov 22 00:00:00 EST 2006
$
在本示例中，您可以看到今年的 11 月 22 日是星期三。
所以，假设在 11 月 22 日召开一个重大的会议，您可以立即了解到这一天是星期三，而这一天您将赶到驻地办公室。
获得相对日期
d 选项还可以告诉您，相对于 当前日期若干天的究竟是哪一天，从现在开始的若干天或若干星期以后，或者以前（过去）。通过将这个相对偏移使用引号括起来，作为 -d 选项的参数，就可以完成这项任务。
例如，您需要了解两星期以后的日期。如果您处于 Shell 提示符处，那么可以迅速地得到答案：
$ date -d ’2 weeks’
关于使用该命令，还有其他一些重要的方法。使用 next/last指令，您可以得到以后的星期几是哪一天：
$ date -d ’next monday’ (下周一的日期)
$ date -d next-day +%Y%m%d（明天的日期）或者：date -d tomorrow +%Y%m%d
$ date -d last-day +%Y%m%d(昨天的日期) 或者：date -d yesterday +%Y%m%d
$ date -d last-month +%Y%m(上个月是几月)
$ date -d next-month +%Y%m(下个月是几月)
使用 ago 指令，您可以得到过去的日期：
$ date -d ’30 days ago’ （30天前的日期）
您可以使用负数以得到相反的日期：
$ date -d ’dec 14 -2 weeks’ （相对:dec 14这个日期的两周前的日期）
$ date -d ’-100 days’ (100天以前的日期)
$ date -d ’50 days’(50天后的日期)
这个技巧非常有用，它可以根据将来的日期为自己设置提醒，可能是在脚本或 Shell 启动文件中，如下所示：
DAY=&lt;code&gt;date -d ’2 weeks’ +&quot;%b %d&quot;&lt;/code&gt;
if test &amp;quot;&lt;code&gt;echo $DAY&lt;/code&gt;&amp;quot; = &amp;quot;Aug 16&amp;quot;; then echo ’Product launch is now two weeks away!’; fi&lt;/p&gt;
&lt;p&gt;##############################&lt;/p&gt;
&lt;p&gt;unix shell中的日期格式转换
$ t_t=&amp;quot;Jul  1 21:29&amp;quot;
$ date &amp;quot;+%G-%m-%d %H:%M:%S&amp;quot; -d &amp;quot;$t_t&amp;quot; # $t_t的格式是比较随意的
2008-07-01 21:29:00
$ date +%b/%d/%G -d &amp;quot;2008-07-01&amp;quot;
Jul/01/2008&lt;/p&gt;
&lt;p&gt;unix shell中的日期之间间隔的天数
$ expr '(' $(date +%s -d &amp;quot;2008-07-02&amp;quot;) - $(date +%s -d &amp;quot;2008-05-30&amp;quot;) ')' / 86400
33&lt;/p&gt;
&lt;h2&gt;存在bcdate的话，可以直接使用。&lt;/h2&gt;
&lt;p&gt;shell中日期加减指定间隔单位
增加36小时：
$ a=&lt;code&gt;date +%Y-%m-%d&lt;/code&gt;
$ b=&lt;code&gt;date +%Y-%m-%d -d &quot;$a +36 hours&quot;&lt;/code&gt;
10天前：
$ date -d &amp;quot;$a -10 days&amp;quot;
Sun Jun 22 00:00:00 CST 2008&lt;/p&gt;
&lt;p&gt;以指定格式显示文件更改后最后日期，如yyyy-mm-dd hh24:mi:ss
$ date &amp;quot;+%Y-%m-%d %H:%M:%S&amp;quot; -r test.bak
2008-07-01 21:28:55&lt;/p&gt;            </description>
            <pubDate>2018-05-12 14:38:27</pubDate>
            <link>//blog/Notes.bak/01-%B2%D9%D7%F7%CF%B5%CD%B3/Centos/linux%D4%DAshell%D6%D0%BB%F1%C8%A1%CA%B1%BC%E4.html</link>
            <guid isPermaLink="true">//blog/Notes.bak/01-%B2%D9%D7%F7%CF%B5%CD%B3/Centos/linux%D4%DAshell%D6%D0%BB%F1%C8%A1%CA%B1%BC%E4.html</guid>
                                               <category>01-操作系统</category>
                                    </item>
                <item>
            <title>Centos常用设置</title>
            <description>
            &lt;!--
author: 王辉
head: http://blog.unuw.com/blog/logo.jpg
date: 2017-12-28
title: Centos常用设置
tags: Centos
images: http://blog.unuw.com/blog/logo.jpg
category: 01-操作系统
status: publish
summary: Linux操作系统定时任务系统 Cron 入门。
--&gt;
&lt;h1&gt;Linux操作系统定时任务系统 Cron 入门&lt;/h1&gt;
&lt;p&gt;　　cron是一个linux下的定时执行工具，可以在无需人工干预的情况下运行作业。由于Cron 是Linux的内置服务，但它不自动起来，可以用以下的方法启动、关闭这个服务:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;　　/sbin/service crond start //启动服务

　　/sbin/service crond stop //关闭服务

　　/sbin/service crond restart //重启服务

　　/sbin/service crond reload //重新载入配置&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;　　你也可以将这个服务在系统启动的时候自动启动:&lt;/p&gt;
&lt;p&gt;　　在/etc/rc.d/rc.local这个脚本的末尾加上:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;　　/sbin/service crond start&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;　　现在Cron这个服务已经在进程里面了，我们就可以用这个服务了，Cron服务提供以下几种接口供大家使用:&lt;/p&gt;
&lt;h2&gt;1.直接用crontab命令编辑&lt;/h2&gt;
&lt;p&gt;　　cron服务提供crontab命令来设定cron服务的，以下是这个命令的一些参数与说明:&lt;/p&gt;
&lt;p&gt;　　crontab -u //设定某个用户的cron服务，一般root用户在执行这个命令的时候需要此参数&lt;/p&gt;
&lt;p&gt;　　crontab -l //列出某个用户cron服务的详细内容&lt;/p&gt;
&lt;p&gt;　　crontab -r //删除没个用户的cron服务&lt;/p&gt;
&lt;p&gt;　　crontab -e //编辑某个用户的cron服务&lt;/p&gt;
&lt;p&gt;　　比如说root查看自己的cron设置:crontab -u root -l&lt;/p&gt;
&lt;p&gt;　　再例如，root想删除fred的cron设置:crontab -u fred -r&lt;/p&gt;
&lt;p&gt;　　在编辑cron服务时，编辑的内容有一些格式和约定，输入:crontab -u root -e&lt;/p&gt;
&lt;p&gt;　　进入vi编辑模式，编辑的内容一定要符合下面的格式:&lt;code&gt;*/1 * * * * ls &amp;gt;&amp;gt; /tmp/ls.txt&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;任务调度的crond常驻命令
crond 是linux用来定期执行程序的命令。当安装完成操作系统之后，默认便会启动此任务调度命令。crond命令每分锺会定期检查是否有要执行的工作，如果有要执行的工作便会自动执行该工作。&lt;/p&gt;
&lt;p&gt;1、linux任务调度的工作主要分为以下两类：
系统执行的工作：系统周期性所要执行的工作，如备份系统数据、清理缓存
个人执行的工作：某个用户定期要做的工作，例如每隔10分钟检查邮件服务器是否有新信，这些工作可由每个用户自行设置。&lt;/p&gt;
&lt;p&gt;2.crontab命令选项:
-u指定一个用户,
-l列出某个用户的任务计划,
-r删除某个用户的任务,
-e编辑某个用户的任务&lt;/p&gt;
&lt;p&gt;3.cron文件语法:
分     小时    日       月       星期      命令
0-59   0-23   1-31   1-12     0-6     command     (取值范围,0表示周日一般一行对应一个任务)&lt;/p&gt;
&lt;p&gt;4.记住几个特殊符号的含义:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;        &quot;*&quot;代表取值范围内的数字,
        &quot;/&quot;代表&quot;每&quot;,
        &quot;-&quot;代表从某个数字到某个数字,
        &quot;,&quot;分开几个离散的数字&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;一、任务调度设置文件的写法&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;  可用crontab -e命令来编辑,编辑的是/var/spool/cron下对应用户的cron文件,也可以直接修改/etc/crontab文件&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;具体格式如下：
Minute Hour Day Month Dayofweek    command
分钟     小时   天     月        天每星期        命令&lt;/p&gt;
&lt;p&gt;每个字段代表的含义如下：
Minute             每个小时的第几分钟执行该任务
Hour                每天的第几个小时执行该任务
Day                 每月的第几天执行该任务
Month              每年的第几个月执行该任务
DayOfWeek     每周的第几天执行该任务
Command        指定要执行的程序
在这些字段里，除了“Command”是每次都必须指定的字段以外，其它字段皆为可选字段，可视需要决定。对于不指定的字段，要用&lt;code&gt;*&lt;/code&gt;来填补其位置。&lt;/p&gt;
&lt;p&gt;举例如下：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;5       *        *           *      *     ls              指定每小时的第5分钟执行一次ls命令
30     5       *           *      *     ls              指定每天的 5:30 执行ls命令
30     7       8          *      *      ls              指定每月8号的7：30分执行ls命令
30     5       8          6     *      ls              指定每年的6月8日5：30执行ls命令
30     6       *           *     0      ls              指定每星期日的6:30执行ls命令[注：0表示星期天，1表示星期1，以此类推，也可以用英文来表示，sun表示星期天，mon表示星期一等。]
30     3      10,20     *     *      ls     每月10号及20号的3：30执行ls命令[注：“，”用来连接多个不连续的时段]
25     8-11 *            *     *      ls       每天8-11点的第25分钟执行ls命令[注：“-”用来连接连续的时段]
*/15   *        *            *     *      ls          每15分钟执行一次ls命令 [即每个小时的第0 15 30 45 60分钟执行ls命令 ]
30    6      */10         *      *      ls       每个月中，每隔10天6:30执行一次ls命令[即每月的1、11、21、31日是的6：30执行一次ls命令。 ]
每天7：50以root 身份执行/etc/cron.daily目录中的所有可执行文件
50    7       *             *      *     root      run-parts      /etc/cron.daily   [ 注：run-parts参数表示，执行后面目录中的所有可执行文件。 ]&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;二、新增调度任务&lt;/h2&gt;
&lt;p&gt;新增调度任务可用两种方法：
1、在命令行输入: crontab -e 然后添加相应的任务，wq存盘退出。
2、直接编辑/etc/crontab 文件，即vi /etc/crontab，添加相应的任务。&lt;/p&gt;
&lt;h2&gt;三、查看调度任务&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;    crontab -l //列出当前的所有调度任务
    crontab -l -u jp    //列出用户jp的所有调度任务&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;四、删除任务调度工作&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;    crontab -r   //删除所有任务调度工作&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;五、任务调度执行结果的转向&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt; 例1：每天5：30执行ls命令，并把结果输出到/jp/test文件中
    30 5 * * * ls &amp;gt;/jp/test 2&amp;gt;&amp;amp;1
注：2&amp;gt;&amp;amp;1 表示执行结果及错误信息。&lt;/code&gt;&lt;/pre&gt;
&lt;h1&gt;2.编辑/etc/crontab 文件配置cron&lt;/h1&gt;
&lt;p&gt;　　cron服务每分钟不仅要读一次/var/spool/cron内的所有文件，还需要读一次/etc/crontab,因此我们配置这个文件也能运用cron服务做一些事情。用crontab配置是针对某个用户的，而编辑/etc/crontab是针对系统的任务。此文件的文件格式是:&lt;/p&gt;
&lt;p&gt;　　SHELL=/bin/bash&lt;/p&gt;
&lt;p&gt;　　PATH=/sbin:/bin:/usr/sbin:/usr/bin&lt;/p&gt;
&lt;p&gt;　　MAILTO=root //如果出现错误，或者有数据输出，数据作为邮件发给这个帐号&lt;/p&gt;
&lt;p&gt;　　HOME=/ //使用者运行的路径,这里是根目录&lt;/p&gt;
&lt;p&gt;　　# run-parts&lt;/p&gt;
&lt;p&gt;　　01    &lt;em&gt;    &lt;/em&gt;    &lt;em&gt;    &lt;/em&gt;      root run-parts /etc/cron.hourly         //每小时执行/etc/cron.hourly内的脚本&lt;/p&gt;
&lt;p&gt;　　02    4    &lt;em&gt;    &lt;/em&gt;    *      root run-parts /etc/cron.daily            //每天执行/etc/cron.daily内的脚本&lt;/p&gt;
&lt;p&gt;　　22    4    &lt;em&gt;    &lt;/em&gt;    0      root run-parts /etc/cron.weekly       //每星期执行/etc/cron.weekly内的脚本&lt;/p&gt;
&lt;p&gt;　　42    4    1    &lt;em&gt;    &lt;/em&gt;      root run-parts /etc/cron.monthly     //每月去执行/etc/cron.monthly内的脚本&lt;/p&gt;
&lt;p&gt;　　大家注意&amp;quot;run-parts&amp;quot;这个参数了，如果去掉这个参数的话，后面就可以写要运行的某个脚本名，而不是文件夹名了&lt;/p&gt;
&lt;p&gt;例如：         1、在命令行输入: crontab -e 然后添加相应的任务，wq存盘退出。
2、直接编辑/etc/crontab 文件，即vi /etc/crontab，添加相应的任务&lt;/p&gt;
&lt;p&gt;11 2 21 10 * rm -rf /mnt/fb&lt;/p&gt;            </description>
            <pubDate>2019-04-11 08:20:49</pubDate>
            <link>//blog/Notes/01-%B2%D9%D7%F7%CF%B5%CD%B3/Centos/Linux%B5%C4%B6%A8%CA%B1%C8%CE%CE%F1.html</link>
            <guid isPermaLink="true">//blog/Notes/01-%B2%D9%D7%F7%CF%B5%CD%B3/Centos/Linux%B5%C4%B6%A8%CA%B1%C8%CE%CE%F1.html</guid>
                                               <category>01-操作系统</category>
                                    </item>
                <item>
            <title>Centos常用设置</title>
            <description>
            &lt;!--
author: 王辉
head: http://blog.unuw.com/blog/logo.jpg
date: 2017-12-28
title: Centos常用设置
tags: Centos
images: http://blog.unuw.com/blog/logo.jpg
category: 01-操作系统
status: publish
summary: Linux操作系统定时任务系统 Cron 入门。
--&gt;
&lt;h1&gt;Linux操作系统定时任务系统 Cron 入门&lt;/h1&gt;
&lt;p&gt;　　cron是一个linux下的定时执行工具，可以在无需人工干预的情况下运行作业。由于Cron 是Linux的内置服务，但它不自动起来，可以用以下的方法启动、关闭这个服务:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;　　/sbin/service crond start //启动服务

　　/sbin/service crond stop //关闭服务

　　/sbin/service crond restart //重启服务

　　/sbin/service crond reload //重新载入配置&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;　　你也可以将这个服务在系统启动的时候自动启动:&lt;/p&gt;
&lt;p&gt;　　在/etc/rc.d/rc.local这个脚本的末尾加上:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;　　/sbin/service crond start&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;　　现在Cron这个服务已经在进程里面了，我们就可以用这个服务了，Cron服务提供以下几种接口供大家使用:&lt;/p&gt;
&lt;h2&gt;1.直接用crontab命令编辑&lt;/h2&gt;
&lt;p&gt;　　cron服务提供crontab命令来设定cron服务的，以下是这个命令的一些参数与说明:&lt;/p&gt;
&lt;p&gt;　　crontab -u //设定某个用户的cron服务，一般root用户在执行这个命令的时候需要此参数&lt;/p&gt;
&lt;p&gt;　　crontab -l //列出某个用户cron服务的详细内容&lt;/p&gt;
&lt;p&gt;　　crontab -r //删除没个用户的cron服务&lt;/p&gt;
&lt;p&gt;　　crontab -e //编辑某个用户的cron服务&lt;/p&gt;
&lt;p&gt;　　比如说root查看自己的cron设置:crontab -u root -l&lt;/p&gt;
&lt;p&gt;　　再例如，root想删除fred的cron设置:crontab -u fred -r&lt;/p&gt;
&lt;p&gt;　　在编辑cron服务时，编辑的内容有一些格式和约定，输入:crontab -u root -e&lt;/p&gt;
&lt;p&gt;　　进入vi编辑模式，编辑的内容一定要符合下面的格式:&lt;code&gt;*/1 * * * * ls &amp;gt;&amp;gt; /tmp/ls.txt&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;任务调度的crond常驻命令
crond 是linux用来定期执行程序的命令。当安装完成操作系统之后，默认便会启动此任务调度命令。crond命令每分锺会定期检查是否有要执行的工作，如果有要执行的工作便会自动执行该工作。&lt;/p&gt;
&lt;p&gt;1、linux任务调度的工作主要分为以下两类：
系统执行的工作：系统周期性所要执行的工作，如备份系统数据、清理缓存
个人执行的工作：某个用户定期要做的工作，例如每隔10分钟检查邮件服务器是否有新信，这些工作可由每个用户自行设置。&lt;/p&gt;
&lt;p&gt;2.crontab命令选项:
-u指定一个用户,
-l列出某个用户的任务计划,
-r删除某个用户的任务,
-e编辑某个用户的任务&lt;/p&gt;
&lt;p&gt;3.cron文件语法:
分     小时    日       月       星期      命令
0-59   0-23   1-31   1-12     0-6     command     (取值范围,0表示周日一般一行对应一个任务)&lt;/p&gt;
&lt;p&gt;4.记住几个特殊符号的含义:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;        &quot;*&quot;代表取值范围内的数字,
        &quot;/&quot;代表&quot;每&quot;,
        &quot;-&quot;代表从某个数字到某个数字,
        &quot;,&quot;分开几个离散的数字&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;一、任务调度设置文件的写法&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;  可用crontab -e命令来编辑,编辑的是/var/spool/cron下对应用户的cron文件,也可以直接修改/etc/crontab文件&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;具体格式如下：
Minute Hour Day Month Dayofweek    command
分钟     小时   天     月        天每星期        命令&lt;/p&gt;
&lt;p&gt;每个字段代表的含义如下：
Minute             每个小时的第几分钟执行该任务
Hour                每天的第几个小时执行该任务
Day                 每月的第几天执行该任务
Month              每年的第几个月执行该任务
DayOfWeek     每周的第几天执行该任务
Command        指定要执行的程序
在这些字段里，除了“Command”是每次都必须指定的字段以外，其它字段皆为可选字段，可视需要决定。对于不指定的字段，要用&lt;code&gt;*&lt;/code&gt;来填补其位置。&lt;/p&gt;
&lt;p&gt;举例如下：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;5       *        *           *      *     ls              指定每小时的第5分钟执行一次ls命令
30     5       *           *      *     ls              指定每天的 5:30 执行ls命令
30     7       8          *      *      ls              指定每月8号的7：30分执行ls命令
30     5       8          6     *      ls              指定每年的6月8日5：30执行ls命令
30     6       *           *     0      ls              指定每星期日的6:30执行ls命令[注：0表示星期天，1表示星期1，以此类推，也可以用英文来表示，sun表示星期天，mon表示星期一等。]
30     3      10,20     *     *      ls     每月10号及20号的3：30执行ls命令[注：“，”用来连接多个不连续的时段]
25     8-11 *            *     *      ls       每天8-11点的第25分钟执行ls命令[注：“-”用来连接连续的时段]
*/15   *        *            *     *      ls          每15分钟执行一次ls命令 [即每个小时的第0 15 30 45 60分钟执行ls命令 ]
30    6      */10         *      *      ls       每个月中，每隔10天6:30执行一次ls命令[即每月的1、11、21、31日是的6：30执行一次ls命令。 ]
每天7：50以root 身份执行/etc/cron.daily目录中的所有可执行文件
50    7       *             *      *     root      run-parts      /etc/cron.daily   [ 注：run-parts参数表示，执行后面目录中的所有可执行文件。 ]&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;二、新增调度任务&lt;/h2&gt;
&lt;p&gt;新增调度任务可用两种方法：
1、在命令行输入: crontab -e 然后添加相应的任务，wq存盘退出。
2、直接编辑/etc/crontab 文件，即vi /etc/crontab，添加相应的任务。&lt;/p&gt;
&lt;h2&gt;三、查看调度任务&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;    crontab -l //列出当前的所有调度任务
    crontab -l -u jp    //列出用户jp的所有调度任务&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;四、删除任务调度工作&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;    crontab -r   //删除所有任务调度工作&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;五、任务调度执行结果的转向&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt; 例1：每天5：30执行ls命令，并把结果输出到/jp/test文件中
    30 5 * * * ls &amp;gt;/jp/test 2&amp;gt;&amp;amp;1
注：2&amp;gt;&amp;amp;1 表示执行结果及错误信息。&lt;/code&gt;&lt;/pre&gt;
&lt;h1&gt;2.编辑/etc/crontab 文件配置cron&lt;/h1&gt;
&lt;p&gt;　　cron服务每分钟不仅要读一次/var/spool/cron内的所有文件，还需要读一次/etc/crontab,因此我们配置这个文件也能运用cron服务做一些事情。用crontab配置是针对某个用户的，而编辑/etc/crontab是针对系统的任务。此文件的文件格式是:&lt;/p&gt;
&lt;p&gt;　　SHELL=/bin/bash&lt;/p&gt;
&lt;p&gt;　　PATH=/sbin:/bin:/usr/sbin:/usr/bin&lt;/p&gt;
&lt;p&gt;　　MAILTO=root //如果出现错误，或者有数据输出，数据作为邮件发给这个帐号&lt;/p&gt;
&lt;p&gt;　　HOME=/ //使用者运行的路径,这里是根目录&lt;/p&gt;
&lt;p&gt;　　# run-parts&lt;/p&gt;
&lt;p&gt;　　01    &lt;em&gt;    &lt;/em&gt;    &lt;em&gt;    &lt;/em&gt;      root run-parts /etc/cron.hourly         //每小时执行/etc/cron.hourly内的脚本&lt;/p&gt;
&lt;p&gt;　　02    4    &lt;em&gt;    &lt;/em&gt;    *      root run-parts /etc/cron.daily            //每天执行/etc/cron.daily内的脚本&lt;/p&gt;
&lt;p&gt;　　22    4    &lt;em&gt;    &lt;/em&gt;    0      root run-parts /etc/cron.weekly       //每星期执行/etc/cron.weekly内的脚本&lt;/p&gt;
&lt;p&gt;　　42    4    1    &lt;em&gt;    &lt;/em&gt;      root run-parts /etc/cron.monthly     //每月去执行/etc/cron.monthly内的脚本&lt;/p&gt;
&lt;p&gt;　　大家注意&amp;quot;run-parts&amp;quot;这个参数了，如果去掉这个参数的话，后面就可以写要运行的某个脚本名，而不是文件夹名了&lt;/p&gt;
&lt;p&gt;例如：         1、在命令行输入: crontab -e 然后添加相应的任务，wq存盘退出。
2、直接编辑/etc/crontab 文件，即vi /etc/crontab，添加相应的任务&lt;/p&gt;
&lt;p&gt;11 2 21 10 * rm -rf /mnt/fb&lt;/p&gt;            </description>
            <pubDate>2018-05-12 14:38:27</pubDate>
            <link>//blog/Notes.bak/01-%B2%D9%D7%F7%CF%B5%CD%B3/Centos/Linux%B5%C4%B6%A8%CA%B1%C8%CE%CE%F1.html</link>
            <guid isPermaLink="true">//blog/Notes.bak/01-%B2%D9%D7%F7%CF%B5%CD%B3/Centos/Linux%B5%C4%B6%A8%CA%B1%C8%CE%CE%F1.html</guid>
                                               <category>01-操作系统</category>
                                    </item>
                <item>
            <title>Nginx 简介</title>
            <description>
            &lt;!--
author: 王辉
head: http://blog.unuw.com/blog/logo.jpg
date: 2017-12-28
title: Nginx 简介
tags: nginx
images: http://blog.unuw.com/blog/logo.jpg
category: 02-网站服务
status: publish
summary: nginx简介。
--&gt;
&lt;h1&gt;Nginx&lt;/h1&gt;
&lt;h2&gt;Nginx常用命令&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;nginx -t        #检查配置文件
nginx -s reload #重新载入配置文件
curl -I www.baidu.com&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;搭建虚拟主机步骤&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;增加一个完整的server标签段到结尾处&lt;/li&gt;
&lt;li&gt;更改server_name及对应的root根目录&lt;/li&gt;
&lt;li&gt;创建server_name域对应的网页根目录，并建立测试文件&lt;/li&gt;
&lt;li&gt;检查nginx配置语法，平滑重启&lt;/li&gt;
&lt;li&gt;做host解析或DNS解析&lt;/li&gt;
&lt;li&gt;浏览器输入网址、curl、wget进行检查&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;主配置文件nginx.conf&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;Nginx配置段
//全局区
Worker_processes 1 ;//有1个工作的子进程，可以进行修改，意义不大，需要争抢CPU资源，一般设置为cpu核心数（cpu*单颗核心）

Event{
//一般是配置nginx链接特性
//如1个work能同时允许多少连接
Worker_connections 1024;//是指一个子进程最大允许连1024个链接
}

http{//配置http服务器的主要段
    server {//这是虚拟主机段
        location{//定位，把特殊的路径或文件再次定位，如image目录单独处理，
            //如php单独处理
    }
  }
}&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Nginx虚拟主机配置&lt;/h2&gt;
&lt;h3&gt;基于域名的虚拟机&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;server{
  listen  80;
  server_name www.bacd.com;
  location /{
    root html/www;
    index index.html index.htm;
  }
}

server{
  listen  80;
  server_name bbs.bacd.com;
  location /{
    root html/bbs;
    index index.html index.htm;
  }
}

server{
  listen  80;
  server_name chat.bacd.com;
  location /{
    root html/chat;
    index index.html index.htm;
  }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;基于端口的虚拟机&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;server{
  listen  80;
  server_name www.bacd.com;
  location /{
    root html/www;
    index index.html index.htm;
  }
}

server{
  listen  81;
  server_name bbs.bacd.com;
  location /{
    root html/bbs;
    index index.html index.htm;
  }
}&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;基于IP的虚拟机&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;server{
  listen  10.0.0.10:80;
  server_name www.bacd.com;
  location /{
    root html/www;
    index index.html index.htm;
  }
}

server{
  listen  10.0.0.11:80;
  server_name bbs.bacd.com;
  location /{
    root html/bbs;
    index index.html index.htm;
  }
}&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Nginx禁止直接通过IP地址访问网站以及限制IP登陆某目录(关闭默认站点或空主机头)&lt;/h3&gt;
&lt;p&gt;国内因为备案的原因，所有服务器都要禁止使用IP访问网站。否则，如果允许使用IP访问网站，那随便解析一个域名到该IP，访问该域名就可以打开网站了。这是一个极大的风险！Nginx中可以很方便的来解决这个问题，小菜鸟来跟大家一起探讨一下。&lt;/p&gt;
&lt;p&gt;如下的配置项，可以设置允许使用IP访问网站。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;server {
    listen       80;
    server_name  &quot;&quot;;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;这里相当于是绑定了一个空的主机头，于是任意主机头，只要是指向这个IP的都可以打开网站了。&lt;/p&gt;
&lt;p&gt;也可以把这些流量收集起来，导进到本人的网站，只需做以下跳转设置就可以：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;server {

listen 80 default;
rewrite ^(.*) http://www.abc.com;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;如果需要Nginx禁止使用IP访问网站，可以定义如下主机，丢弃这些请求：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;server {
    listen 80default;
    server_name &quot;&quot;;
    return  444;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;或者&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;server {
listen 80 default;
server_name _;
return 500;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;在这里，我们设置主机名为空字符串以匹配未定义“Host”头的请求，而且返回了一个nginx特有的，非http标准的返回码444，它可以用来关闭连接。&lt;/p&gt;
&lt;p&gt;从0.8.48版本开始，这已成为主机名的默认设置，所以可以省略server_name &amp;quot;&amp;quot;，即如下的配置即可：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;server {
    listen   80;
    return   444;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;限制某IP登陆网站
allow all;&lt;/p&gt;
&lt;p&gt;deny all;&lt;/p&gt;
&lt;p&gt;其中网段的写法是这样的：192.168.1.0/24这样的形式。&lt;/p&gt;
&lt;p&gt;deny 192.168.1.11;
deny 192.168.1.123;
deny 10.0.1.0/24;&lt;/p&gt;
&lt;p&gt;如果你想实现这样的应用，除了几个IP外，其他全部拒绝，
那需要你在ip.balcklist中这样写
然后在在nginx的配置文件nginx.conf中加入：include blocksip.conf; 或者直接在相应虚拟主机server{中填写}&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;allow 1.1.1.1;
allow 1.1.1.2;
allow 192.168.1.0/24;
deny all;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;如果你想实现这样的应用，禁止几个IP，其他通过，&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;deny 1.1.1.1;
deny 192.168.1.0/24;
allow all;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;单独网站屏闭IP的方法：&lt;/p&gt;
&lt;p&gt;在server&amp;quot;{}&amp;quot;，在这个大括号内加入deny IP地址是限制某IP地址访问；allow IP地址是只允许某IP地址访问；&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;屏蔽单个IP的命令是&lt;/strong&gt;
&lt;code&gt;deny 123.45.6.7&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;封整个段即从123.0.0.1到123.255.255.254的命令&lt;/strong&gt;
&lt;code&gt;deny 123.0.0.0/8&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;封IP段即从123.45.0.1到123.45.255.254的命令&lt;/strong&gt;
&lt;code&gt;deny 124.45.0.0/16&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;封IP段即从123.45.6.1到123.45.6.254的命令是&lt;/strong&gt;
&lt;code&gt;deny 123.45.6.0/24&lt;/code&gt;&lt;/p&gt;
&lt;h3&gt;重启nginx后的检测&lt;/h3&gt;
&lt;h3&gt;Nginx 监控&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;location /nginx_status{
    stub_status on;
    access_log off;
    allow 10.0.0.0/24;
    deny allow;
}&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;server:启动nginx到现在共处理的连接数
accepts:启动nginx到现在创建的握手数
请求丢失数=握手数-连接数
handled requests:表述共处理请求数
reading：读取到客户端的header信息数
writing:返回给客户端的header信息数
waiting：nginx已经处理完正在等候下一次请求指令的驻留连接。开启keepalive的情况下，这个值等于active-（reading+writing）&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;为了安全，这个状态要防止被外部用户看到&lt;/strong&gt;&lt;/p&gt;
&lt;h2&gt;集成php环境&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;../php/php-win.md&quot;&gt;配置php环境&lt;/a&gt;，修改nginx.conf,支持php&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000

location ~ \.php$ {
    root           html;
    fastcgi_pass   127.0.0.1:9000;
    fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME  D:/app/nginx-1.12.1/html$fastcgi_script_name;
    include        fastcgi_params;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;nginx.conf&lt;/code&gt;中&lt;code&gt;fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name&lt;/code&gt;修改为&lt;code&gt;fastcgi_param  SCRIPT_FILENAME  D:\app\nginx-1.12.1\html$fastcgi_script_name;&lt;/code&gt;不能访问，提示‘No input file specified’，nginx access.log中出现404，将&lt;code&gt;\&lt;/code&gt;替换为&lt;code&gt;/&lt;/code&gt;正常，&lt;code&gt;fastcgi_param  SCRIPT_FILENAME  D:/app/nginx-1.12.1/html$fastcgi_script_name&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;编辑index.php文件&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;?php phpinfo(); ?&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;执行命令&lt;code&gt;nginx -s reload&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;访问&lt;a href=&quot;http://localhost/phpinfo.php查看是否可以打开phpinfo&quot;&gt;http://localhost/phpinfo.php查看是否可以打开phpinfo&lt;/a&gt;页面&lt;/p&gt;
&lt;h2&gt;虚拟主机的别名配置&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;server_name&lt;/code&gt;可以添加多个主机名，别名之间用空格分隔&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;server{
  listen  10.0.0.11:80;
  server_name bbs.bacd.com b.abcd.com abcd.com;
  location /{
    root html/bbs;
    index index.html index.htm;
  }
}&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote&gt;
&lt;p&gt;集群中多个服务器提供相同的服务，通过前端负载进行分发，为了对每个主机进行检测，可以使用别名分别进行监测&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;   ...
   server_name www.bacd.com www1.abcd.com;
   ...
   server_name www.bacd.com www2.abcd.com;
   ...&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;隐藏版本信息&lt;/h2&gt;
&lt;p&gt;然后在配置文件中，http区段中插入“server_tokens  off;”，重新载入配置文件：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;
http {
include       /etc/nginx/mime.types;
default_type  application/octet-stream;&lt;/code&gt;&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;pre&gt;&lt;code&gt;log_format  main  '$remote_addr - $remote_user [$time_local] &quot;$request&quot; '
                  '$status $body_bytes_sent &quot;$http_referer&quot; '
                  '&quot;$http_user_agent&quot; &quot;$http_x_forwarded_for&quot;';

access_log  /var/log/nginx/access.log  main;

sendfile        on;
#tcp_nopush     on;

keepalive_timeout  65;

gzip  on;

server_tokens  off;

include /etc/nginx/conf.d/*.conf;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;}&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;
## Nginx 日志
### Nginx error_log
`error_log logs/error.log [debug|info|crit|alert|emerg]`

可以设置的标签段为

`#content:main,http,server,location`

### Nginx access_log

**Module:** ngx_http_log_module

http://nginx.org/en/docs/http/ngx_http_log_module.html

`access_log logs/access.log main`

### Nginx 日志切割

1. 创建脚本`runlog.sh`&lt;/code&gt;&lt;/pre&gt;
&lt;h1&gt;!/bin/bash&lt;/h1&gt;
&lt;p&gt;LOGPATH=/usr/local/nginx/logs/abcd.com.access.log
BASEPATH=/data&lt;/p&gt;
&lt;p&gt;bak=$BASEPATH/$(date -d yesterday +%Y%m%d%H%M).abcd.com.access.log&lt;/p&gt;
&lt;p&gt;mv $LOGPATH $bak
touch $LOGPATH
kill -USR1 &lt;code&gt;cat /usr/local/nginx/logs/nginx.pid&lt;/code&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;或者使用`nginx -s reload` 替换kill -USR1 \`cat /usr/local/nginx/logs/nginx.pid\`

2. 添加计划任务（每分钟执行一次）

    `crontab -e`添加计划任务

    `*/1 * * * * sh /data/runlog.sh &amp;gt;/dev/null 2&amp;gt;&amp;amp;1`

    `crontab -l` 查看计划任务

## location
### location语法&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;location[=|~|~*|^~|@] uri{
...
}&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;=：精确匹配
~:大小写敏感匹配
~*:不区分大小写
!：取反
^~:不做正则检查，常规检查
@：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;### location 测试
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;server {
listen       1006;
server_name 192.168.0.121;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;location = / {
    return 401;
}

location / {
    return 402;
}

location /documents/ {
    return 403;
}

location ^~ /images/ {
    return 404;
}

location ~* \.(gif|jpg) {
    return 500;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;}&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;`curl -s -o /dev/null -I -w &quot;%{http_code}\n&quot; http://192.168.0.121:1006/`&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;[root@ops-83 conf.d]# curl -s -o /dev/null -I -w &amp;quot;%{http_code}\n&amp;quot; &lt;a href=&quot;http://192.168.0.121:1080&quot;&gt;http://192.168.0.121:1080&lt;/a&gt;
401
[root@ops-83 conf.d]# curl -s -o /dev/null -I -w &amp;quot;%{http_code}\n&amp;quot; &lt;a href=&quot;http://192.168.0.121:1080/&quot;&gt;http://192.168.0.121:1080/&lt;/a&gt;
401
[root@ops-83 conf.d]# curl -s -o /dev/null -I -w &amp;quot;%{http_code}\n&amp;quot; &lt;a href=&quot;http://192.168.0.121:1080/abc&quot;&gt;http://192.168.0.121:1080/abc&lt;/a&gt;
402
[root@ops-83 conf.d]# curl -s -o /dev/null -I -w &amp;quot;%{http_code}\n&amp;quot; &lt;a href=&quot;http://192.168.0.121:1080/documents&quot;&gt;http://192.168.0.121:1080/documents&lt;/a&gt;
402
[root@ops-83 conf.d]# curl -s -o /dev/null -I -w &amp;quot;%{http_code}\n&amp;quot; &lt;a href=&quot;http://192.168.0.121:1080/documents/&quot;&gt;http://192.168.0.121:1080/documents/&lt;/a&gt;
403
[root@ops-83 conf.d]# curl -s -o /dev/null -I -w &amp;quot;%{http_code}\n&amp;quot; &lt;a href=&quot;http://192.168.0.121:1080/documents/abc&quot;&gt;http://192.168.0.121:1080/documents/abc&lt;/a&gt;
403
[root@ops-83 conf.d]# curl -s -o /dev/null -I -w &amp;quot;%{http_code}\n&amp;quot; &lt;a href=&quot;http://192.168.0.121:1080/images/&quot;&gt;http://192.168.0.121:1080/images/&lt;/a&gt;
404
[root@ops-83 conf.d]# curl -s -o /dev/null -I -w &amp;quot;%{http_code}\n&amp;quot; &lt;a href=&quot;http://192.168.0.121:1080/IMAGES/&quot;&gt;http://192.168.0.121:1080/IMAGES/&lt;/a&gt;
402
[root@ops-83 conf.d]# curl -s -o /dev/null -I -w &amp;quot;%{http_code}\n&amp;quot; &lt;a href=&quot;http://192.168.0.121:1080/images/abc.jpg&quot;&gt;http://192.168.0.121:1080/images/abc.jpg&lt;/a&gt;
404
[root@ops-83 conf.d]# curl -s -o /dev/null -I -w &amp;quot;%{http_code}\n&amp;quot; &lt;a href=&quot;http://192.168.0.121:1080/images/ABC.JPG&quot;&gt;http://192.168.0.121:1080/images/ABC.JPG&lt;/a&gt;
404
[root@ops-83 conf.d]# curl -s -o /dev/null -I -w &amp;quot;%{http_code}\n&amp;quot; &lt;a href=&quot;http://192.168.0.121:1080/abc.jpg&quot;&gt;http://192.168.0.121:1080/abc.jpg&lt;/a&gt;
500
[root@ops-83 conf.d]# curl -s -o /dev/null -I -w &amp;quot;%{http_code}\n&amp;quot; &lt;a href=&quot;http://192.168.0.121:1080/abc.JPG&quot;&gt;http://192.168.0.121:1080/abc.JPG&lt;/a&gt;
500
[root@ops-83 conf.d]#&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;/:默认匹配
=:优先，和顺序无关
^~ 和 ~*：有限匹配^~&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;
## rewrite
### rewrite语法
### rewrite示例&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;server {
listen       1006;
server_name www.abcd.com abcd.com;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;location = / {
    rewrite ^/(.*) http://www.xx.com/$1 permanent;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;}&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;`$1`后向引用,`permanent`永久跳转，类似301。

url重写&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;location /cathtml{
root /ecmoban/www;
index index.php index.html index.html;&lt;/p&gt;
&lt;h1&gt;rewrite &amp;quot;cathtml-(\d{1,7}).html&amp;quot; &amp;quot;/category.php?id=(\d{1,7})&amp;quot;;&lt;/h1&gt;
&lt;pre&gt;&lt;code&gt;    rewrite &quot;cathtml-(\d+).html&quot; /category.php?id=$1;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;}
location /goods{
root /ecmoban/www;
index index.php index.html index.html;
rewrite &amp;quot;goods-(\d+).html&amp;quot; /goods.php?id=$1;
}&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;`(\d+)`，为任意个数字，`$1`为后向引用，前面匹配的可以在后面直接调用

## nginx访问认证
### 配置文件修改&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;location /{
auth_basic  &amp;quot;xxxx&amp;quot;;
auth_basic_user_file conf/htpasswd;
}&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;使用位置：http/server/location/limit_except

### 生成密码文件
可以使用apache自带的“htpasswd ”或“openssl passwd”设置。
&lt;/code&gt;&lt;/pre&gt;
&lt;h1&gt;htpasswd -bc /etc/nginx/conf/htpasswd wanghui 1234567&lt;/h1&gt;
&lt;h1&gt;chmod /etc/nginx/conf/htpasswd&lt;/h1&gt;
&lt;h1&gt;chown nginx /etc/nginx/conf/htpasswd&lt;/h1&gt;
&lt;pre&gt;&lt;code&gt;重新加载生效&lt;/code&gt;&lt;/pre&gt;
&lt;h1&gt;nginx -t&lt;/h1&gt;
&lt;h1&gt;nginx -s reload&lt;/h1&gt;
&lt;pre&gt;&lt;code&gt;## nginx 的目录浏览
### autoindex&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;server{
listen  10.0.0.11:80;
server_name bbs.bacd.com b.abcd.com abcd.com;
location /{
root html/bbs;
autoindex on;
index index.html index.htm;
}
}&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;
## 提升网站性能
### 启用nginx 压缩

查看nginx中文件类型准确写法mime.types，可以放置在http、server、location段的位置&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;    gzip on;
gzip_buffers 32 4k;
gzip_comp_level 6;
gzip_min_length 20;
gzip_types text/css text/xml application/x-javascript;&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;对比测试结果:\
`curl 'http://192.168.0.121:99/themes/ecmoban_dsc2017/css/base.css' -H 'Pragma: no-cache' -H 'Accept-Encoding: gzip, deflate, sdch' &amp;gt;/dev/null`

![](./nginx-img/nginx-01.png)

### expires缓存
通过正则表达式对.jpg/.js/.png/.gif进行缓存，没有缓存的css就没有过期时间。同时需要注意正则表达式写法，如果gif后有“|”，则要匹配一个空字符串，相当于所有的都能匹配上了。&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;location ~ .(jpg|js|png|gif){
expires 1d;
root /ecmoban/www;
}&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;
### 负载均衡
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;[root@ops-83 conf.d]# grep -v '#' back-101.conf
server {
listen       1001;
server&lt;em&gt;name  &lt;/em&gt;;
access_log  /var/log/nginx/101.access.log  main;
location / {
root   /usr/share/nginx/back_html_101;
index  index.php index.html index.htm;
}
error_page  404              /404.html;
location = /404.html {
root /usr/share/nginx/back_html_101;
}
error_page   500 502 503 504  /50x.html;
location = /50x.html {
root /usr/share/nginx/back_html_101;&lt;br /&gt;
}
location ~ .php$ {
root           /ecmoban/www;
fastcgi_pass   127.0.0.1:9000;
fastcgi_index  index.php;
fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
include        fastcgi_params;
}
}&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;[root@ops-83 conf.d]# grep -v '#' back-102.conf
server {
listen       1002;
server&lt;em&gt;name  &lt;/em&gt;;
access_log  /var/log/nginx/102.access.log  main;
location / {
root   /usr/share/nginx/back_html_102;
index  index.php index.html index.htm;
}
error_page  404              /404.html;
location = /404.html {
root /usr/share/nginx/back_html_101;
}
error_page   500 502 503 504  /50x.html;
location = /50x.html {
root /usr/share/nginx/back_html_101;&lt;br /&gt;
}
location ~ .php$ {
root           /ecmoban/www;
fastcgi_pass   127.0.0.1:9000;
fastcgi_index  index.php;
fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
include        fastcgi_params;
}
}&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;[root@ops-83 conf.d]# grep -v '#' back.conf
upstream  up_test{
server 192.168.0.121:1001;
server 192.168.0.121:1002;
}&lt;/p&gt;
&lt;p&gt;server {
listen       1005;
server&lt;em&gt;name  &lt;/em&gt;;
gzip on;
gzip_buffers 32 4k;
gzip_comp_level 6;
gzip_min_length 20;
gzip_types text/css text/xml application/x-javascript;
access_log  /var/log/nginx/back.access.log  main;
location / {
proxy_pass &lt;a href=&quot;http://up_test&quot;&gt;http://up_test&lt;/a&gt;;
}
}&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;
在经过负载均衡后，客户端源ip将丢失，为了准确获得源ip，需要增加参数`proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for`。本次测试由1006端口（代理）-&amp;gt;1005（代理）-&amp;gt;(1001、1002)，最终实现1005日志中记录了源ip（客户端），1001、1002中记录了源ip（客户端）及二级代理ip（1005）。
![](./nginx-img/nginx-02.png) \
![](./nginx-img/nginx-03.png)&lt;/code&gt;&lt;/pre&gt;            </description>
            <pubDate>2018-05-12 14:38:27</pubDate>
            <link>//blog/Notes.bak/02-%CD%F8%D5%BE%B7%FE%CE%F1/nginx/nginx.html</link>
            <guid isPermaLink="true">//blog/Notes.bak/02-%CD%F8%D5%BE%B7%FE%CE%F1/nginx/nginx.html</guid>
                                               <category>02-网站服务</category>
                                    </item>
                <item>
            <title>Linux中的shell</title>
            <description>
            &lt;!--
author: 王辉
head: http://blog.unuw.com/blog/logo.jpg
date: 2017-12-28
title: Linux中的shell
tags: shell
images: http://blog.unuw.com/blog/logo.jpg
category: 01-操作系统
status: publish
summary: linux中的shell。
--&gt;
&lt;pre&gt;&lt;code&gt;for n in www bbs chat;
do
mkdir -p ../html/$n;
echo &quot;http://${n}.abcd.com&quot; &amp;gt; ../html/$n/index.html;
cat ../html/$n/index.html;
done&lt;/code&gt;&lt;/pre&gt;            </description>
            <pubDate>2019-04-11 08:20:49</pubDate>
            <link>//blog/Notes/01-%B2%D9%D7%F7%CF%B5%CD%B3/Centos/shell.html</link>
            <guid isPermaLink="true">//blog/Notes/01-%B2%D9%D7%F7%CF%B5%CD%B3/Centos/shell.html</guid>
                                               <category>01-操作系统</category>
                                    </item>
                <item>
            <title>Linux中的shell</title>
            <description>
            &lt;!--
author: 王辉
head: http://blog.unuw.com/blog/logo.jpg
date: 2017-12-28
title: Linux中的shell
tags: shell
images: http://blog.unuw.com/blog/logo.jpg
category: 01-操作系统
status: publish
summary: linux中的shell。
--&gt;
&lt;pre&gt;&lt;code&gt;for n in www bbs chat;
do
mkdir -p ../html/$n;
echo &quot;http://${n}.abcd.com&quot; &amp;gt; ../html/$n/index.html;
cat ../html/$n/index.html;
done&lt;/code&gt;&lt;/pre&gt;            </description>
            <pubDate>2018-05-12 14:38:27</pubDate>
            <link>//blog/Notes.bak/01-%B2%D9%D7%F7%CF%B5%CD%B3/Centos/shell.html</link>
            <guid isPermaLink="true">//blog/Notes.bak/01-%B2%D9%D7%F7%CF%B5%CD%B3/Centos/shell.html</guid>
                                               <category>01-操作系统</category>
                                    </item>
                <item>
            <title>Linux中的shell</title>
            <description>
            &lt;!--
author: 王辉
head: http://blog.unuw.com/blog/logo.jpg
date: 2017-12-28
title: Linux中的shell
tags: shell
images: http://blog.unuw.com/blog/logo.jpg
category: 01-操作系统
status: publish
summary: linux中的shell。
--&gt;
&lt;pre&gt;&lt;code&gt;for n in www bbs chat;
do
mkdir -p ../html/$n;
echo &quot;http://${n}.abcd.com&quot; &amp;gt; ../html/$n/index.html;
cat ../html/$n/index.html;
done&lt;/code&gt;&lt;/pre&gt;            </description>
            <pubDate>2018-05-12 14:38:27</pubDate>
            <link>//blog/Notes.bak/01-%B2%D9%D7%F7%CF%B5%CD%B3/shell.html</link>
            <guid isPermaLink="true">//blog/Notes.bak/01-%B2%D9%D7%F7%CF%B5%CD%B3/shell.html</guid>
                                               <category>01-操作系统</category>
                                    </item>
                <item>
            <title>Linux常用命令</title>
            <description>
            &lt;!--
author: 王辉
head: http://blog.unuw.com/blog/logo.jpg
date: 2017-12-28
title: Linux常用命令
tags: shell
images: http://blog.unuw.com/blog/logo.jpg
category: 01-操作系统
status: publish
summary: linux中的常用命令。
--&gt;
&lt;h1&gt;a&lt;/h1&gt;
&lt;pre&gt;&lt;code&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h1&gt;b&lt;/h1&gt;
&lt;pre&gt;&lt;code&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h1&gt;c&lt;/h1&gt;
&lt;pre&gt;&lt;code&gt;curl -I 查看响应header信息，-s 安静，-w 获取状态吗&lt;/code&gt;&lt;/pre&gt;
&lt;h1&gt;d&lt;/h1&gt;
&lt;pre&gt;&lt;code&gt;diff file1 file2&lt;/code&gt;&lt;/pre&gt;
&lt;h1&gt;e&lt;/h1&gt;
&lt;pre&gt;&lt;code&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h1&gt;f&lt;/h1&gt;
&lt;pre&gt;&lt;code&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h1&gt;g&lt;/h1&gt;
&lt;pre&gt;&lt;code&gt;grep -v &quot;#|^$&quot; nginx.conf #排除注释‘#’和空行；
     -r 递归
     -n 显示行号
     -i 忽略大小写
     -l 输出文件名清单
     '^xxx' 以xxx开头
     'xxx$' 以xxx结束
grep -rn wanghui ./ #递归查找当前目录下所有含wanghui的文件&lt;/code&gt;&lt;/pre&gt;
&lt;h1&gt;h&lt;/h1&gt;
&lt;pre&gt;&lt;code&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h1&gt;i&lt;/h1&gt;
&lt;pre&gt;&lt;code&gt;# 临时添加ip
ip addr add 10.0.0.10/24 dev eth0&lt;/code&gt;&lt;/pre&gt;
&lt;h1&gt;j&lt;/h1&gt;
&lt;pre&gt;&lt;code&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h1&gt;k&lt;/h1&gt;
&lt;pre&gt;&lt;code&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h1&gt;l&lt;/h1&gt;
&lt;pre&gt;&lt;code&gt;# list open files
lsof  &lt;/code&gt;&lt;/pre&gt;
&lt;h1&gt;m&lt;/h1&gt;
&lt;pre&gt;&lt;code&gt;# md5校验
md5sum * &amp;gt; tmp.md5
md5sum -c tmp.md5
# md5批量校验
find ./ -type f -print0 | xargs -0 md5sum &amp;gt; ./backup.md5
md5sum -c ./backup.md5 |grep -nv OK

mkdir -p /1/2/3/4&lt;/code&gt;&lt;/pre&gt;
&lt;h1&gt;n&lt;/h1&gt;
&lt;pre&gt;&lt;code&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h1&gt;o&lt;/h1&gt;
&lt;pre&gt;&lt;code&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h1&gt;p&lt;/h1&gt;
&lt;pre&gt;&lt;code&gt;ps -ef
ps -aux&lt;/code&gt;&lt;/pre&gt;
&lt;h1&gt;q&lt;/h1&gt;
&lt;pre&gt;&lt;code&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h1&gt;r&lt;/h1&gt;
&lt;pre&gt;&lt;code&gt;# 查看文件属于哪个安装包
rpm -qf /usr/bin/htpasswd
# 查看包是否安装
rpm -qa httpd
rpm -ivh 包名 #安装
rpm -e --nodeps 包名 #
rpm -Uvh 包名 #升级
rpm -ql 包名 #查看包里包含的文件&lt;/code&gt;&lt;/pre&gt;
&lt;h1&gt;s&lt;/h1&gt;
&lt;pre&gt;&lt;code&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h1&gt;t&lt;/h1&gt;
&lt;pre&gt;&lt;code&gt;#查看文件末尾
tail -n 100 file
tail -f file
tailf file

# tcpdump
&lt;/code&gt;&lt;/pre&gt;
&lt;h1&gt;u&lt;/h1&gt;
&lt;pre&gt;&lt;code&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h1&gt;v&lt;/h1&gt;
&lt;pre&gt;&lt;code&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h1&gt;w&lt;/h1&gt;
&lt;pre&gt;&lt;code&gt;wget -q 安静，-O 指定文件名&lt;/code&gt;&lt;/pre&gt;
&lt;h1&gt;x&lt;/h1&gt;
&lt;pre&gt;&lt;code&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h1&gt;y&lt;/h1&gt;
&lt;p&gt;&lt;a href=&quot;../Centos/创建yum源.md&quot;&gt;yum源&lt;/a&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 指定yum安装位置
yum install --installroot=/usr/src/
# 查看yum缓存位置
cat /etc/yum.conf | grep cachedir

# yum下载本地
# 1.下载指定包及相关依赖
yum install --downloadonly packetName
# 2.查看下载的缓存文件,默认存/var/cache/yum
ll /var/cache/yum
# 3.yum使用缓存安装指定包
yum -C install packetName&lt;/code&gt;&lt;/pre&gt;
&lt;h1&gt;z&lt;/h1&gt;
&lt;pre&gt;&lt;code&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h1&gt;生成密码&lt;/h1&gt;
&lt;h4&gt;1&lt;/h4&gt;
&lt;p&gt;&lt;code&gt;date +%s | sha256sum | base64 | head -c 32 ; echo&lt;/code&gt;
上述命令使用SHA来哈希日期，输出头32个字节。&lt;/p&gt;
&lt;h4&gt;3&lt;/h4&gt;
&lt;p&gt;&lt;code&gt;&amp;lt; /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c${1:-32};echo;&lt;/code&gt;
上述命令使用内嵌的/dev/urandom，只输出字符，结果取头32个。&lt;/p&gt;
&lt;h4&gt;3&lt;/h4&gt;
&lt;p&gt;&lt;code&gt;openssl rand -base64 32&lt;/code&gt;
上述命令使用系统自带的openssl的随机特点来产生随机密码&lt;/p&gt;
&lt;h4&gt;4&lt;/h4&gt;
&lt;p&gt;&lt;code&gt;tr -cd ‘[:alnum:]‘ &amp;lt; /dev/urandom | fold -w30 | head -n1&lt;/code&gt;&lt;/p&gt;
&lt;h4&gt;5&lt;/h4&gt;
&lt;p&gt;&lt;code&gt;strings /dev/urandom | grep -o ‘[[:alnum:]]’ | head -n 30 | tr -d ‘\n’; echo&lt;/code&gt;
通过过滤字符命令，输出随机密码&lt;/p&gt;
&lt;h4&gt;6&lt;/h4&gt;
&lt;p&gt;&lt;code&gt;&amp;lt; /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c6&lt;/code&gt;
这个命令比起来比较简单了&lt;/p&gt;
&lt;h4&gt;7&lt;/h4&gt;
&lt;p&gt;&lt;code&gt;dd if=/dev/urandom bs=1 count=32 2&amp;gt;/dev/null | base64 -w 0 | rev | cut -b 2- | rev&lt;/code&gt;
上述命令使用命令dd的强大功能&lt;/p&gt;
&lt;h4&gt;8&lt;/h4&gt;
&lt;p&gt;&lt;code&gt;&amp;lt;/dev/urandom  tr -dc ’12345!@#$%qwertQWERTasdfgASDFGzxcvbZXCVB’ | head -c8; echo “”&lt;/code&gt;
上述命令输出很简洁&lt;/p&gt;
&lt;h4&gt;9&lt;/h4&gt;
&lt;p&gt;&lt;code&gt;randpw(){ &amp;lt; /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c${1:-16};echo;}&lt;/code&gt;
使用randpw随时产生随机密码，可以把它放到~/.bashrc文件里面。
(我这里没有什么密码产生，可留言讨论)&lt;/p&gt;
&lt;h4&gt;10&lt;/h4&gt;
&lt;p&gt;&lt;code&gt;date | md5sum&lt;/code&gt;&lt;/p&gt;            </description>
            <pubDate>2018-05-12 14:38:27</pubDate>
            <link>//blog/Notes.bak/01-%B2%D9%D7%F7%CF%B5%CD%B3/linux%B3%A3%D3%C3%C3%FC%C1%EE.html</link>
            <guid isPermaLink="true">//blog/Notes.bak/01-%B2%D9%D7%F7%CF%B5%CD%B3/linux%B3%A3%D3%C3%C3%FC%C1%EE.html</guid>
                                               <category>01-操作系统</category>
                                    </item>
                <item>
            <title>创建yum源</title>
            <description>
            &lt;!--
author: 王辉
head: http://blog.unuw.com/blog/logo.jpg
date: 2017-12-28
title: 创建yum源
tags: Centos
images: http://blog.unuw.com/blog/logo.jpg
category: 01-操作系统
status: publish
summary: Centos的常用设置，如创建yum源等。
--&gt;
&lt;h1&gt;创建YUM源&lt;/h1&gt;
&lt;h2&gt;1. 创建本地DVD源&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;mount /dev/cdrom /mnt&lt;/code&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;[dvd]
name=dvd
baseurl=file:///mnt
enabled=1
gpgcheck=0&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;2. 创建网络源&lt;/h2&gt;
&lt;h3&gt;2.1 阿里云镜像源&lt;/h3&gt;
&lt;p&gt;1、备份&lt;/p&gt;
&lt;p&gt;&lt;code&gt;mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;2、下载新的CentOS-Base.repo 到/etc/yum.repos.d/&lt;/p&gt;
&lt;p&gt;CentOS 5&lt;/p&gt;
&lt;p&gt;&lt;code&gt;wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-5.repo&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;或者&lt;/p&gt;
&lt;p&gt;&lt;code&gt;curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-5.repo&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;CentOS 6&lt;/p&gt;
&lt;p&gt;&lt;code&gt;wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;或者&lt;/p&gt;
&lt;p&gt;&lt;code&gt;curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;CentOS 7&lt;/p&gt;
&lt;p&gt;&lt;code&gt;wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;或者&lt;/p&gt;
&lt;p&gt;&lt;code&gt;curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;3、之后运行 yum clean all，yum makecache 生成缓存&lt;/p&gt;
&lt;h3&gt;2.1 163镜像源&lt;/h3&gt;
&lt;p&gt;第一步：备份你的原镜像文件，以免出错后可以恢复。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup&lt;/code&gt;   &lt;/p&gt;
&lt;p&gt;第二步：下载新的CentOS-Base.repo 到/etc/yum.repos.d/&lt;/p&gt;
&lt;p&gt;CentOS 5&lt;/p&gt;
&lt;p&gt;&lt;code&gt;wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.163.com/.help/CentOS5-Base-163.repo&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;CentOS 6&lt;/p&gt;
&lt;p&gt;&lt;code&gt;wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.163.com/.help/CentOS6-Base-163.repo&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;CentOS 7&lt;/p&gt;
&lt;p&gt;&lt;code&gt;wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.163.com/.help/CentOS7-Base-163.repo&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;3、之后运行 yum clean all，yum makecache 生成缓存&lt;/p&gt;            </description>
            <pubDate>2018-05-12 14:38:27</pubDate>
            <link>//blog/Notes.bak/01-%B2%D9%D7%F7%CF%B5%CD%B3/Centos/%B4%B4%BD%A8yum%D4%B4.html</link>
            <guid isPermaLink="true">//blog/Notes.bak/01-%B2%D9%D7%F7%CF%B5%CD%B3/Centos/%B4%B4%BD%A8yum%D4%B4.html</guid>
                                               <category>01-操作系统</category>
                                    </item>
                <item>
            <title>创建yum源</title>
            <description>
            &lt;!--
author: 王辉
head: http://blog.unuw.com/blog/logo.jpg
date: 2017-12-28
title: 创建yum源
tags: Centos
images: http://blog.unuw.com/blog/logo.jpg
category: 01-操作系统
status: publish
summary: Centos的常用设置，如创建yum源等。
--&gt;
&lt;h1&gt;创建YUM源&lt;/h1&gt;
&lt;h2&gt;1. 创建本地DVD源&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;mount /dev/cdrom /mnt&lt;/code&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;[dvd]
name=dvd
baseurl=file:///mnt
enabled=1
gpgcheck=0&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;2. 创建网络源&lt;/h2&gt;
&lt;h3&gt;2.1 阿里云镜像源&lt;/h3&gt;
&lt;p&gt;1、备份&lt;/p&gt;
&lt;p&gt;&lt;code&gt;mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;2、下载新的CentOS-Base.repo 到/etc/yum.repos.d/&lt;/p&gt;
&lt;p&gt;CentOS 5&lt;/p&gt;
&lt;p&gt;&lt;code&gt;wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-5.repo&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;或者&lt;/p&gt;
&lt;p&gt;&lt;code&gt;curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-5.repo&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;CentOS 6&lt;/p&gt;
&lt;p&gt;&lt;code&gt;wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;或者&lt;/p&gt;
&lt;p&gt;&lt;code&gt;curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;CentOS 7&lt;/p&gt;
&lt;p&gt;&lt;code&gt;wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;或者&lt;/p&gt;
&lt;p&gt;&lt;code&gt;curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;3、之后运行 yum clean all，yum makecache 生成缓存&lt;/p&gt;
&lt;h3&gt;2.1 163镜像源&lt;/h3&gt;
&lt;p&gt;第一步：备份你的原镜像文件，以免出错后可以恢复。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup&lt;/code&gt;   &lt;/p&gt;
&lt;p&gt;第二步：下载新的CentOS-Base.repo 到/etc/yum.repos.d/&lt;/p&gt;
&lt;p&gt;CentOS 5&lt;/p&gt;
&lt;p&gt;&lt;code&gt;wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.163.com/.help/CentOS5-Base-163.repo&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;CentOS 6&lt;/p&gt;
&lt;p&gt;&lt;code&gt;wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.163.com/.help/CentOS6-Base-163.repo&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;CentOS 7&lt;/p&gt;
&lt;p&gt;&lt;code&gt;wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.163.com/.help/CentOS7-Base-163.repo&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;3、之后运行 yum clean all，yum makecache 生成缓存&lt;/p&gt;            </description>
            <pubDate>2019-04-11 08:20:49</pubDate>
            <link>//blog/Notes/01-%B2%D9%D7%F7%CF%B5%CD%B3/Centos/%B4%B4%BD%A8yum%D4%B4.html</link>
            <guid isPermaLink="true">//blog/Notes/01-%B2%D9%D7%F7%CF%B5%CD%B3/Centos/%B4%B4%BD%A8yum%D4%B4.html</guid>
                                               <category>01-操作系统</category>
                                    </item>
                <item>
            <title>Centos初始化</title>
            <description>
            &lt;!--
author: 王辉
head: http://blog.unuw.com/blog/logo.jpg
date: 2017-12-28
title: Centos初始化
tags: Centos
images: http://blog.unuw.com/blog/logo.jpg
category: 01-操作系统
status: publish
summary: Centos的常用设置，如初始化等。
--&gt;
&lt;p&gt;cat /etc/sysctl.conf&lt;/p&gt;
&lt;h1&gt;CTCDN系统优化参数&lt;/h1&gt;
&lt;h1&gt;关闭ipv6&lt;/h1&gt;
&lt;p&gt;net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1&lt;/p&gt;
&lt;h1&gt;避免放大攻击&lt;/h1&gt;
&lt;p&gt;net.ipv4.icmp_echo_ignore_broadcasts = 1&lt;/p&gt;
&lt;h1&gt;开启恶意icmp错误消息保护&lt;/h1&gt;
&lt;p&gt;net.ipv4.icmp_ignore_bogus_error_responses = 1&lt;/p&gt;
&lt;h1&gt;关闭路由转发&lt;/h1&gt;
&lt;p&gt;net.ipv4.ip_forward = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0&lt;/p&gt;
&lt;h1&gt;开启反向路径过滤&lt;/h1&gt;
&lt;p&gt;net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1&lt;/p&gt;
&lt;h1&gt;处理无源路由的包&lt;/h1&gt;
&lt;p&gt;net.ipv4.conf.all.accept_source_route = 0
net.ipv4.conf.default.accept_source_route = 0&lt;/p&gt;
&lt;h1&gt;关闭sysrq功能&lt;/h1&gt;
&lt;p&gt;kernel.sysrq = 0&lt;/p&gt;
&lt;h1&gt;core文件名中添加pid作为扩展名&lt;/h1&gt;
&lt;p&gt;kernel.core_uses_pid = 1&lt;/p&gt;
&lt;h1&gt;开启SYN洪水攻击保护&lt;/h1&gt;
&lt;p&gt;net.ipv4.tcp_syncookies = 1&lt;/p&gt;
&lt;h1&gt;修改消息队列长度&lt;/h1&gt;
&lt;p&gt;kernel.msgmnb = 65536
kernel.msgmax = 65536&lt;/p&gt;
&lt;h1&gt;设置最大内存共享段大小bytes&lt;/h1&gt;
&lt;p&gt;kernel.shmmax = 68719476736
kernel.shmall = 4294967296&lt;/p&gt;
&lt;h1&gt;timewait的数量，默认180000&lt;/h1&gt;
&lt;p&gt;net.ipv4.tcp_max_tw_buckets = 6000
net.ipv4.tcp_sack = 1
net.ipv4.tcp_window_scaling = 1
net.ipv4.tcp_rmem = 4096        87380   4194304
net.ipv4.tcp_wmem = 4096        16384   4194304
net.core.wmem_default = 8388608
net.core.rmem_default = 8388608
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216&lt;/p&gt;
&lt;h1&gt;每个网络接口接收数据包的速率比内核处理这些包的速率快时，允许送到队列的数据包的最大数目&lt;/h1&gt;
&lt;p&gt;net.core.netdev_max_backlog = 262144&lt;/p&gt;
&lt;h1&gt;限制仅仅是为了防止简单的DoS 攻击&lt;/h1&gt;
&lt;p&gt;net.ipv4.tcp_max_orphans = 3276800&lt;/p&gt;
&lt;h1&gt;未收到客户端确认信息的连接请求的最大值&lt;/h1&gt;
&lt;p&gt;net.ipv4.tcp_max_syn_backlog = 262144
net.ipv4.tcp_timestamps = 0&lt;/p&gt;
&lt;h1&gt;内核放弃建立连接之前发送SYNACK 包的数量&lt;/h1&gt;
&lt;p&gt;net.ipv4.tcp_synack_retries = 1&lt;/p&gt;
&lt;h1&gt;内核放弃建立连接之前发送SYN 包的数量&lt;/h1&gt;
&lt;p&gt;net.ipv4.tcp_syn_retries = 1&lt;/p&gt;
&lt;h1&gt;启用timewait 快速回收&lt;/h1&gt;
&lt;p&gt;net.ipv4.tcp_tw_recycle = 1&lt;/p&gt;
&lt;h1&gt;开启重用。允许将TIME-WAIT sockets 重新用于新的TCP 连接&lt;/h1&gt;
&lt;p&gt;net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_mem = 94500000 915000000 927000000
net.ipv4.tcp_fin_timeout = 1&lt;/p&gt;
&lt;h1&gt;当keepalive 起用的时候，TCP 发送keepalive 消息的频度。缺省是2 小时&lt;/h1&gt;
&lt;p&gt;net.ipv4.tcp_keepalive_time = 30&lt;/p&gt;
&lt;h1&gt;允许系统打开的端口范围&lt;/h1&gt;
&lt;p&gt;net.ipv4.ip_local_port_range = 1024    65000&lt;/p&gt;
&lt;h1&gt;修改防火墙表大小，默认65536&lt;/h1&gt;
&lt;h1&gt;net.netfilter.nf_conntrack_max=655350&lt;/h1&gt;
&lt;h1&gt;net.netfilter.nf_conntrack_tcp_timeout_established=1200&lt;/h1&gt;
&lt;h1&gt;确保无人能修改路由表&lt;/h1&gt;
&lt;p&gt;net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
net.ipv4.conf.all.secure_redirects = 0
net.ipv4.conf.default.secure_redirects = 0&lt;/p&gt;            </description>
            <pubDate>2018-05-12 14:38:27</pubDate>
            <link>//blog/Notes.bak/01-%B2%D9%D7%F7%CF%B5%CD%B3/Centos/%B3%F5%CA%BC%BB%AF.html</link>
            <guid isPermaLink="true">//blog/Notes.bak/01-%B2%D9%D7%F7%CF%B5%CD%B3/Centos/%B3%F5%CA%BC%BB%AF.html</guid>
                                               <category>01-操作系统</category>
                                    </item>
                <item>
            <title>Centos初始化</title>
            <description>
            &lt;!--
author: 王辉
head: http://blog.unuw.com/blog/logo.jpg
date: 2017-12-28
title: Centos初始化
tags: Centos
images: http://blog.unuw.com/blog/logo.jpg
category: 01-操作系统
status: publish
summary: Centos的常用设置，如初始化等。
--&gt;
&lt;p&gt;cat /etc/sysctl.conf&lt;/p&gt;
&lt;h1&gt;CTCDN系统优化参数&lt;/h1&gt;
&lt;h1&gt;关闭ipv6&lt;/h1&gt;
&lt;p&gt;net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1&lt;/p&gt;
&lt;h1&gt;避免放大攻击&lt;/h1&gt;
&lt;p&gt;net.ipv4.icmp_echo_ignore_broadcasts = 1&lt;/p&gt;
&lt;h1&gt;开启恶意icmp错误消息保护&lt;/h1&gt;
&lt;p&gt;net.ipv4.icmp_ignore_bogus_error_responses = 1&lt;/p&gt;
&lt;h1&gt;关闭路由转发&lt;/h1&gt;
&lt;p&gt;net.ipv4.ip_forward = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0&lt;/p&gt;
&lt;h1&gt;开启反向路径过滤&lt;/h1&gt;
&lt;p&gt;net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1&lt;/p&gt;
&lt;h1&gt;处理无源路由的包&lt;/h1&gt;
&lt;p&gt;net.ipv4.conf.all.accept_source_route = 0
net.ipv4.conf.default.accept_source_route = 0&lt;/p&gt;
&lt;h1&gt;关闭sysrq功能&lt;/h1&gt;
&lt;p&gt;kernel.sysrq = 0&lt;/p&gt;
&lt;h1&gt;core文件名中添加pid作为扩展名&lt;/h1&gt;
&lt;p&gt;kernel.core_uses_pid = 1&lt;/p&gt;
&lt;h1&gt;开启SYN洪水攻击保护&lt;/h1&gt;
&lt;p&gt;net.ipv4.tcp_syncookies = 1&lt;/p&gt;
&lt;h1&gt;修改消息队列长度&lt;/h1&gt;
&lt;p&gt;kernel.msgmnb = 65536
kernel.msgmax = 65536&lt;/p&gt;
&lt;h1&gt;设置最大内存共享段大小bytes&lt;/h1&gt;
&lt;p&gt;kernel.shmmax = 68719476736
kernel.shmall = 4294967296&lt;/p&gt;
&lt;h1&gt;timewait的数量，默认180000&lt;/h1&gt;
&lt;p&gt;net.ipv4.tcp_max_tw_buckets = 6000
net.ipv4.tcp_sack = 1
net.ipv4.tcp_window_scaling = 1
net.ipv4.tcp_rmem = 4096        87380   4194304
net.ipv4.tcp_wmem = 4096        16384   4194304
net.core.wmem_default = 8388608
net.core.rmem_default = 8388608
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216&lt;/p&gt;
&lt;h1&gt;每个网络接口接收数据包的速率比内核处理这些包的速率快时，允许送到队列的数据包的最大数目&lt;/h1&gt;
&lt;p&gt;net.core.netdev_max_backlog = 262144&lt;/p&gt;
&lt;h1&gt;限制仅仅是为了防止简单的DoS 攻击&lt;/h1&gt;
&lt;p&gt;net.ipv4.tcp_max_orphans = 3276800&lt;/p&gt;
&lt;h1&gt;未收到客户端确认信息的连接请求的最大值&lt;/h1&gt;
&lt;p&gt;net.ipv4.tcp_max_syn_backlog = 262144
net.ipv4.tcp_timestamps = 0&lt;/p&gt;
&lt;h1&gt;内核放弃建立连接之前发送SYNACK 包的数量&lt;/h1&gt;
&lt;p&gt;net.ipv4.tcp_synack_retries = 1&lt;/p&gt;
&lt;h1&gt;内核放弃建立连接之前发送SYN 包的数量&lt;/h1&gt;
&lt;p&gt;net.ipv4.tcp_syn_retries = 1&lt;/p&gt;
&lt;h1&gt;启用timewait 快速回收&lt;/h1&gt;
&lt;p&gt;net.ipv4.tcp_tw_recycle = 1&lt;/p&gt;
&lt;h1&gt;开启重用。允许将TIME-WAIT sockets 重新用于新的TCP 连接&lt;/h1&gt;
&lt;p&gt;net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_mem = 94500000 915000000 927000000
net.ipv4.tcp_fin_timeout = 1&lt;/p&gt;
&lt;h1&gt;当keepalive 起用的时候，TCP 发送keepalive 消息的频度。缺省是2 小时&lt;/h1&gt;
&lt;p&gt;net.ipv4.tcp_keepalive_time = 30&lt;/p&gt;
&lt;h1&gt;允许系统打开的端口范围&lt;/h1&gt;
&lt;p&gt;net.ipv4.ip_local_port_range = 1024    65000&lt;/p&gt;
&lt;h1&gt;修改防火墙表大小，默认65536&lt;/h1&gt;
&lt;h1&gt;net.netfilter.nf_conntrack_max=655350&lt;/h1&gt;
&lt;h1&gt;net.netfilter.nf_conntrack_tcp_timeout_established=1200&lt;/h1&gt;
&lt;h1&gt;确保无人能修改路由表&lt;/h1&gt;
&lt;p&gt;net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
net.ipv4.conf.all.secure_redirects = 0
net.ipv4.conf.default.secure_redirects = 0&lt;/p&gt;            </description>
            <pubDate>2019-04-11 08:20:49</pubDate>
            <link>//blog/Notes/01-%B2%D9%D7%F7%CF%B5%CD%B3/Centos/%B3%F5%CA%BC%BB%AF.html</link>
            <guid isPermaLink="true">//blog/Notes/01-%B2%D9%D7%F7%CF%B5%CD%B3/Centos/%B3%F5%CA%BC%BB%AF.html</guid>
                                               <category>01-操作系统</category>
                                    </item>
                <item>
            <title>欢迎使用GitBlog</title>
            <description>
            &lt;!--
author: jockchou
head: http://pingodata.qiniudn.com/jockchou-avatar.jpg
date: 2015-07-31
title: 欢迎使用GitBlog
tags: GitBlog
images: http://pingodata.qiniudn.com/cube2.jpg
category: GitBlog
status: publish
summary: GitBlog是一个简单易用的Markdown博客系统，它不需要数据库，没有管理后台功能，更新博客只需要添加你写好的Markdown文件即可。
--&gt;
&lt;h2&gt;一. 简介&lt;/h2&gt;
&lt;p&gt;GitBlog是一个简单易用的Markdown博客系统，它不需要数据库，没有管理后台功能，更新博客只需要添加你写好的Markdown文件即可。它摆脱了在线编辑器排版困难，无法实时预览的缺点，一切都交给Markdown来完成，一篇博客就是一个Markdown文件。同时也支持评论，代码高亮，数学公式，页面PV统计等常用功能。GitBlog提供了不同的主题样式，你可以根据自己的喜好配置，如果你想自己制作博客主题，也是非常容易的。GitBlog还支持整站静态导出，你完全可以导出整站静态网页部署到Github Pages。&lt;/p&gt;
&lt;h2&gt;二. 功能特点&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;使用Markdown  &lt;/li&gt;
&lt;li&gt;评论框  &lt;/li&gt;
&lt;li&gt;代码高亮  &lt;/li&gt;
&lt;li&gt;PV统计  &lt;/li&gt;
&lt;li&gt;Latex数学公式  &lt;/li&gt;
&lt;li&gt;自制主题  &lt;/li&gt;
&lt;li&gt;响应式  &lt;/li&gt;
&lt;li&gt;全站静态导出  &lt;/li&gt;
&lt;li&gt;良好的SEO  &lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;三. GitBlog优势&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;无需数据库，系统更轻量，移植更方便  &lt;/li&gt;
&lt;li&gt;使用Markdown编写，摆脱后台编辑排版困难，无法实时预览的缺点  &lt;/li&gt;
&lt;li&gt;可全站静态导出  &lt;/li&gt;
&lt;li&gt;配置灵活，可自由开关某些功能  &lt;/li&gt;
&lt;li&gt;多主题支持，可自制主题  &lt;/li&gt;
&lt;li&gt;博客，分类，标签，归档  &lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;四. 环境要求&lt;/h2&gt;
&lt;p&gt;PHP 5.2.4+&lt;/p&gt;
&lt;h2&gt;五. 安装步骤&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;下载GitBlog源代码  &lt;/li&gt;
&lt;li&gt;解压上传到你的PHP网站根目录  &lt;/li&gt;
&lt;li&gt;打开浏览器，访问网站首页  &lt;/li&gt;
&lt;li&gt;上传Markdown文件到&lt;code&gt;posts&lt;/code&gt;文件夹  &lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;六. 详细说明&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/jockchou/gitblogdoc/tree/master/posts/gitblog/install.md&quot;&gt;1. 安装&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;https://github.com/jockchou/gitblogdoc/tree/master/posts/gitblog/struct.md&quot;&gt;2. 目录结构&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;https://github.com/jockchou/gitblogdoc/tree/master/posts/gitblog/config.md&quot;&gt;3. 配置说明&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;https://github.com/jockchou/gitblogdoc/tree/master/posts/gitblog/edit.md&quot;&gt;4. 编写博客&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;https://github.com/jockchou/gitblogdoc/tree/master/posts/gitblog/other-func.md&quot;&gt;5. 评论，订阅，统计等&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;https://github.com/jockchou/gitblogdoc/tree/master/posts/gitblog/cache.md&quot;&gt;6. 缓存机制&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;https://github.com/jockchou/gitblogdoc/tree/master/posts/gitblog/export.md&quot;&gt;7. 全站静态导出&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;https://github.com/jockchou/gitblogdoc/tree/master/posts/gitblog/theme.md&quot;&gt;8. 主题制作&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;https://github.com/jockchou/gitblogdoc/tree/master/posts/gitblog/nginx.md&quot;&gt;9. 在Nginx上运行GitBlog&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;https://github.com/jockchou/gitblogdoc/tree/master/posts/gitblog/apache.md&quot;&gt;10. 在Apache上运行GitBlog&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;https://github.com/jockchou/gitblogdoc/tree/master/posts/gitblog/sae.md&quot;&gt;11. 在SAE上运行GitBlog&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;https://github.com/jockchou/gitblogdoc/tree/master/posts/gitblog/github-pages.md&quot;&gt;12. 使用GitBlog和Github Pages搭建博客&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;https://github.com/jockchou/gitblogdoc/tree/master/posts/gitblog/update.md&quot;&gt;13. Gitblog升级&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;https://github.com/jockchou/gitblogdoc/tree/master/posts/gitblog/wordpress.md&quot;&gt;14. 从wordpress导入&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;七. 问题及bug反馈&lt;/h2&gt;
&lt;p&gt;如果在实际使用过程中对GitBlog有新的功能需求，或者在使用GitBlog的过程中发现了Bug，欢迎反馈给我。可以直接在Github上提交，也可以发邮件至&lt;code&gt;164068300[AT]qq.com&lt;/code&gt;与我取得联系，我将及时回复。如果你自己制作了漂亮好用的主题，也非常欢迎你提交给我，我会在这里展示你的主题链接。如果你正在使用GitBlog，也可以告诉我，我将也会在这里列出使用者名单。如果你想和其他GitBlog使用者讨论交流，欢迎加入QQ群&lt;code&gt;84692078&lt;/code&gt;。&lt;/p&gt;
&lt;h2&gt;八. 使用者列表&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://blog.hiweeds.net&quot;&gt;Weeds&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://xiaochengzi.sinaapp.com&quot;&gt;橙子&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://jockchou.com&quot;&gt;jockchou&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://github.com/jockchou/gitblogdoc&quot;&gt;GitBlog Doc&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://zxy.link&quot;&gt;zxy&lt;/a&gt;  &lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;九. 感谢&lt;/h2&gt;
&lt;p&gt;GitBlog的成长需要喜欢Markdown，喜欢写博客的各位亲们支持！感谢你们使用GitBlog，感激你们对Gitblog的良好建议与Bug反馈。&lt;/p&gt;
&lt;p&gt;QQ群：&lt;code&gt;84692078&lt;/code&gt;&lt;br /&gt;
作者邮箱：&lt;code&gt;164068300[AT]qq.com&lt;/code&gt;    &lt;/p&gt;            </description>
            <pubDate>2018-05-12 14:38:27</pubDate>
            <link>//blog/welcome.html</link>
            <guid isPermaLink="true">//blog/welcome.html</guid>
                                               <category>GitBlog</category>
                                    </item>
            </channel>
</rss>