PHP性能分析工具 XHProf 安装与使用

简介

xhprof是一个比xdebug更加强大的轻量级调试和性能分析工具 https://github.com/phacility/xhprof

安装配置

wget http://pecl.php.net/get/xhprof-0.9.4.tgz
tar zxvf xhprof-0.9.4.tgz
cd xhprof-0.9.4/extension/
sudo phpize
./configure --with-php-config=/usr/local/php/bin/php-config
sudo make && make install

或者 yum install php-xhprof

修改php.ini 新增:
extension = xhprof.so
; 注意:output_dir 必须存在且可写
xhprof.output_dir = /tmp/xhprof

使用

xhprof源码中的 xhprof_html 和 xhprof_lib两个文件夹将会使用到

xhprof_enable(XHPROF_FLAGS_NO_BUILTINS | XHPROF_FLAGS_CPU | XHPROF_FLAGS_MEMORY);  //开始

//todo 需要监控的代码  
// .....

$data = \xhprof_disable();   //返回运行数据
include_once 'xhprof_lib/utils/xhprof_lib.php';
include_once 'xhprof_lib/utils/xhprof_runs.php';
$objXhprofRun = new \XHProfRuns_Default();
$run_id = $objXhprofRun->save_run($data, "xhprof");
var_dump($run_id);

查看结果

拷贝  xhprof_html 和  xhprof_lib到一个可以访问的路径

访问 http://127.0.0.1/xhprof_html/index.php 即可看到结果

查看图形结果

# yum install libpng
# yum install graphviz

安装完成后 点击页面中的[View Full Callgraph] 即可看到图形结果

说明

输出结果
ct 函数调用次数,
wt 花费的时间,
cpu 花费的 CPU 时间(微秒即百万分之一秒),
mu 使用的内存(bytes),
pmu 使用的内存峰值(bytes)。

xhprof_enable 参数
XHPROF_FLAGS_CPU 分析结果中添加 CPU 数据
XHPROF_FLAGS_MEMORY 分析结果中添加内存数据
XHPROF_FLAGS_NO_BUILTINS 跳过 PHP 内置函数

结果说明
Incl. CPU (microsecs):包含内部函数 CPU 花费的时间,单位微秒
Excl. CPU (microsec):不包含内部函数 CPU 花费的时间,单位微秒
Incl. MemUse (bytes):包含内部函数所占内存,单位字节
Excl. MemUse (bytes):不包含内部函数所占内存,单位字节
Incl. PeakMemUse (bytes):包含内部函数所占内存峰值,单位字节
Excl. PeakMemUse (bytes):不包含内部函数所占内存峰值,单位字节及所占百分比(%)

Calls:函数的调用次数
Incl.:为 Including 包含的简写 
Excl.:为 Excluding 不包含的简写 
Wall Time:意为挂钟时间即任务花费的时间
main():一个虚构的函数,程序根节点 
bar@2:递归调用 2 次

可以认为共三种情况:
1. 包括内部函数
2. 不包括内部函数或者说函数本身
3. 所占总数(时间或内存使用)的百分比
peak 意为峰值

 

 

 

使用CentOS链接VPN,共享成HTTP代理(搭建HTTP代理)

开始

一,安装相关软件包

# yum install ppp pptp pptp-setup

二,创建VPN链接

# pptpsetup --create vpnname --server hostname --username xxxxx --password xxxx --encrypt  --start

使用–encrypt启用数据加密

断开VPN   # killall pppd

三,设置路由

1.先添加一条 本机 10.0.14.242 可以访问虚拟机CentOS的 路由

# route add -net 10.0.14.0 netmask 255.255.255.0 gw 10.0.18.254

2.CentOS其他所有流量走 VPN

# route add -net 0.0.0.0 dev ppp0

设置后路由表如下

[root@localhost ~]# route 
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
10.0.0.4        *               255.255.255.255 UH    0      0        0 ppp0
106.186.127.186 10.0.18.254     255.255.255.255 UGH   0      0        0 eth0
li817-61.member 10.0.18.254     255.255.255.255 UGH   0      0        0 eth0
10.0.18.0       *               255.255.255.0   U     0      0        0 eth0
10.0.14.0       10.0.18.254     255.255.255.0   UG    0      0        0 eth0
link-local      *               255.255.0.0     U     1002   0        0 eth0
default         *               0.0.0.0         U     0      0        0 ppp0
default         10.0.18.254     0.0.0.0         UG    0      0        0 eth0

 

四,搭建HTTP代理

tinyproxy 是一个小型的基于GPL的HTTP/SSL代理程序,非常适合小型网络而且便于快速部署。这个代理程序最大的优点就是占用系统资源比较少。

1.安装tinyproxy

# yum install tinyproxy

2.编辑配置文件

# vim /etc/tinyproxy/tinyproxy.conf

注释 # Allow 127.0.0.1    允许所有ip访问

3.启动tinyproxy,设置开机启动

# service tinyproxy restart
# chkconfig --level 345 tinyproxy on

 

GIT常用命令速查表(转载)

一、 Git 常用命令速查

git branch 查看本地所有分支
git status 查看当前状态
git commit 提交
git branch -a 查看所有的分支
git branch -r 查看远程所有分支
git commit -am “init” 提交并且加注释
git remote add origin git@192.168.1.119:ndshow
git push origin master 将文件给推到服务器上
git remote show origin 显示远程库origin里的资源
git push origin master:develop
git push origin master:hb-dev 将本地库与服务器上的库进行关联
git checkout –track origin/dev 切换到远程dev分支
git branch -D master develop 删除本地库develop
git checkout -b dev 建立一个新的本地分支dev
git merge origin/dev 将分支dev与当前分支进行合并
git checkout dev 切换到本地dev分支
git remote show 查看远程库
git add .
git rm 文件名(包括路径) 从git中删除指定文件
git clone git://github.com/schacon/grit.git 从服务器上将代码给拉下来
git config –list 看所有用户
git ls-files 看已经被提交的
git rm [file name] 删除一个文件
git commit -a 提交当前repos的所有的改变
git add [file name] 添加一个文件到git index
git commit -v 当你用-v参数的时候可以看commit的差异
git commit -m “This is the message describing the commit” 添加commit信息
git commit -a -a是代表add,把所有的change加到git index里然后再commit
git commit -a -v 一般提交命令
git log 看你commit的日志
git diff 查看尚未暂存的更新
git rm a.a 移除文件(从暂存区和工作区中删除)
git rm –cached a.a 移除文件(只从暂存区中删除)
git commit -m “remove” 移除文件(从Git中删除)
git rm -f a.a 强行移除修改后文件(从暂存区和工作区中删除)
git diff –cached 或 $ git diff –staged 查看尚未提交的更新
git stash push 将文件给push到一个临时空间中
git stash pop 将文件从临时空间pop下来
———————————————————
git remote add origin git@github.com:username/Hello-World.git
git push origin master 将本地项目给提交到服务器中
———————————————————–
git pull 本地与服务器端同步
—————————————————————–
git push (远程仓库名) (分支名) 将本地分支推送到服务器上去。
git push origin serverfix:awesomebranch
——————————————————————
git fetch 相当于是从远程获取最新版本到本地,不会自动merge
git commit -a -m “log_message” (-a是提交所有改动,-m是加入log信息) 本地修改同步至服务器端 :
git branch branch_0.1 master 从主分支master创建branch_0.1分支
git branch -m branch_0.1 branch_1.0 将branch_0.1重命名为branch_1.0
git checkout branch_1.0/master 切换到branch_1.0/master分支
du -hs

git branch 删除远程branch

git push origin :branch_remote_name

git branch -r -d branch_remote_name

———————————————————–

初始化版本库,并提交到远程服务器端
mkdir WebApp
cd WebApp
git init 本地初始化
touch README
git add README 添加文件
git commit -m ‘first commit’
git remote add origin git@github.com:daixu/WebApp.git 增加一个远程服务器端

上面的命令会增加URL地址为’git@github.com:daixu/WebApp.git’,名称为origin的远程服务器库,以后提交代码的时候只需要使用 origin别名即可

二、 Git 命令速查表

1、常用的Git命令

命令

简要说明

git add

添加至暂存区

git add–interactive

交互式添加

git apply

应用补丁

git am

应用邮件格式补丁

git annotate

同义词,等同于 git blame

git archive

文件归档打包

git bisect

二分查找

git blame

文件逐行追溯

git branch

分支管理

git cat-file

版本库对象研究工具

git checkout

检出到工作区、切换或创建分支

git cherry-pick

提交拣选

git citool

图形化提交,相当于 git gui 命令

git clean

清除工作区未跟踪文件

git clone

克隆版本库

git commit

提交

git config

查询和修改配置

git describe

通过里程碑直观地显示提交ID

git diff

差异比较

git difftool

调用图形化差异比较工具

git fetch

获取远程版本库的提交

git format-patch

创建邮件格式的补丁文件。参见 git am 命令

git grep

文件内容搜索定位工具

git gui

基于Tcl/Tk的图形化工具,侧重提交等操作

git help

帮助

git init

版本库初始化

git init-db*

同义词,等同于 git init

git log

显示提交日志

git merge

分支合并

git mergetool

图形化冲突解决

git mv

重命名

git pull

拉回远程版本库的提交

git push

推送至远程版本库

git rebase

分支变基

git rebase–interactive

交互式分支变基

git reflog

分支等引用变更记录管理

git remote

远程版本库管理

git repo-config*

同义词,等同于 git config

git reset

重置改变分支“游标”指向

git rev-parse

将各种引用表示法转换为哈希值等

git revert

反转提交

git rm

删除文件

git show

显示各种类型的对象

git stage*

同义词,等同于 git add

git stash

保存和恢复进度

git status

显示工作区文件状态

git tag

里程碑管理

 

2、对象库操作相关命令

命令

简要说明

git commit-tree

从树对象创建提交

git hash-object

从标准输入或文件计算哈希值或创建对象

git ls-files

显示工作区和暂存区文件

git ls-tree

显示树对象包含的文件

git mktag

读取标准输入创建一个里程碑对象

git mktree

读取标准输入创建一个树对象

git read-tree

读取树对象到暂存区

git update-index

工作区内容注册到暂存区及暂存区管理

git unpack-file

创建临时文件包含指定 blob 的内容

git write-tree

从暂存区创建一个树对象

 

3、引用操作相关命令

命令

简要说明

git check-ref-format

检查引用名称是否符合规范

git for-each-ref

引用迭代器,用于shell编程

git ls-remote

显示远程版本库的引用

git name-rev

将提交ID显示为友好名称

git peek-remote*

过时命令,请使用 git ls-remote

git rev-list

显示版本范围

git show-branch

显示分支列表及拓扑关系

git show-ref

显示本地引用

git symbolic-ref

显示或者设置符号引用

git update-ref

更新引用的指向

git verify-tag

校验 GPG 签名的Tag

 

4、版本库管理相关命令

命令

简要说明

git count-objects

显示松散对象的数量和磁盘占用

git filter-branch

版本库重构

git fsck

对象库完整性检查

git fsck-objects*

同义词,等同于 git fsck

git gc

版本库存储优化

git index-pack

从打包文件创建对应的索引文件

git lost-found*

过时,请使用 git fsck –lost-found 命令

git pack-objects

从标准输入读入对象ID,打包到文件

git pack-redundant

查找多余的 pack 文件

git pack-refs

将引用打包到 .git/packed-refs 文件中

git prune

从对象库删除过期对象

git prune-packed

将已经打包的松散对象删除

git relink

为本地版本库中相同的对象建立硬连接

git repack

将版本库未打包的松散对象打包

git show-index

读取包的索引文件,显示打包文件中的内容

git unpack-objects

从打包文件释放文件

git verify-pack

校验对象库打包文件

 

5、数据传输相关命令

命令

简要说明

git fetch-pack

执行 git fetch 或 git pull 命令时在本地执行此命令,用于从其他版本库获取缺失的对象

git receive-pack

执行 git push 命令时在远程执行的命令,用于接受推送的数据

git send-pack

执行 git push 命令时在本地执行的命令,用于向其他版本库推送数据

git upload-archive

执行 git archive –remote 命令基于远程版本库创建归档时,远程版本库执行此命令传送归档

git upload-pack

执行 git fetch 或 git pull 命令时在远程执行此命令,将对象打包、上传

 

6、邮件相关命令

命令

简要说明

git imap-send

将补丁通过 IMAP 发送

git mailinfo

从邮件导出提交说明和补丁

git mailsplit

将 mbox 或 Maildir 格式邮箱中邮件逐一提取为文件

git request-pull

创建包含提交间差异和执行PULL操作地址的信息

git send-email

发送邮件

 

7、协议相关命令

命令

简要说明

git daemon

实现Git协议

git http-backend

实现HTTP协议的CGI程序,支持智能HTTP协议

git instaweb

即时启动浏览器通过 gitweb 浏览当前版本库

git shell

受限制的shell,提供仅执行Git命令的SSH访问

git update-server-info

更新哑协议需要的辅助文件

git http-fetch

通过HTTP协议获取版本库

git http-push

通过HTTP/DAV协议推送

git remote-ext

由Git命令调用,通过外部命令提供扩展协议支持

git remote-fd

由Git命令调用,使用文件描述符作为协议接口

git remote-ftp

由Git命令调用,提供对FTP协议的支持

git remote-ftps

由Git命令调用,提供对FTPS协议的支持

git remote-http

由Git命令调用,提供对HTTP协议的支持

git remote-https

由Git命令调用,提供对HTTPS协议的支持

git remote-testgit

协议扩展示例脚本

 

8、版本库转换和交互相关命令

命令

简要说明

git archimport

导入Arch版本库到Git

git bundle

提交打包和解包,以便在不同版本库间传递

git cvsexportcommit

将Git的一个提交作为一个CVS检出

git cvsimport

导入CVS版本库到Git。或者使用 cvs2git

git cvsserver

Git的CVS协议模拟器,可供CVS命令访问Git版本库

git fast-export

将提交导出为 git-fast-import 格式

git fast-import

其他版本库迁移至Git的通用工具

git svn

Git 作为前端操作 Subversion

 

9、合并相关的辅助命令

命令

简要说明

git merge-base

供其他脚本调用,找到两个或多个提交最近的共同祖先

git merge-file

针对文件的两个不同版本执行三向文件合并

git merge-index

对index中的冲突文件调用指定的冲突解决工具

git merge-octopus

合并两个以上分支。参见 git merge 的octopus合并策略

git merge-one-file

由 git merge-index 调用的标准辅助程序

git merge-ours

合并使用本地版本,抛弃他人版本。参见 git merge 的ours合并策略

git merge-recursive

针对两个分支的三向合并。参见 git merge 的recursive合并策略

git merge-resolve

针对两个分支的三向合并。参见 git merge 的resolve合并策略

git merge-subtree

子树合并。参见 git merge 的 subtree 合并策略

git merge-tree

显式三向合并结果,不改变暂存区

git fmt-merge-msg

供执行合并操作的脚本调用,用于创建一个合并提交说明

git rerere

重用所记录的冲突解决方案

 

10、 杂项

命令

简要说明

git bisect–helper

由 git bisect 命令调用,确认二分查找进度

git check-attr

显示某个文件是否设置了某个属性

git checkout-index

从暂存区拷贝文件至工作区

git cherry

查找没有合并到上游的提交

git diff-files

比较暂存区和工作区,相当于 git diff –raw

git diff-index

比较暂存区和版本库,相当于 git diff –cached –raw

git diff-tree

比较两个树对象,相当于 git diff –raw A B

git difftool–helper

由 git difftool 命令调用,默认要使用的差异比较工具

git get-tar-commit-id

从 git archive 创建的 tar 包中提取提交ID

git gui–askpass

命令 git gui 的获取用户口令输入界面

git notes

提交评论管理

git patch-id

补丁过滤行号和空白字符后生成补丁唯一ID

git quiltimport

将Quilt补丁列表应用到当前分支

git replace

提交替换

git shortlog

对 git log 的汇总输出,适合于产品发布说明

git stripspace

删除空行,供其他脚本调用

git submodule

子模组管理

git tar-tree

过时命令,请使用 git archive

git var

显示 Git 环境变量

git web–browse

启动浏览器以查看目录或文件

git whatchanged

显示提交历史及每次提交的改动

git-mergetool–lib

包含于其他脚本中,提供合并/差异比较工具的选择和执行

git-parse-remote

包含于其他脚本中,提供操作远程版本库的函数

git-sh-setup

包含于其他脚本中,提供 shell 编程的函数库

附:Git 命令速查表

整理集合:Git 命令学习文档

docker 容器安装与使用

参考书籍

Docker安装

daocloud国内镜像仓库

Docker系统有两个程序:docker服务端和docker客户端。其中docker服务端是一个服务进程,管理着所有的容器。docker客户端则扮演着docker服务端的远程控制器,可以用来控制docker的服务端进程。大部分情况下,docker服务端和客户端运行在一台机器上。

 安装docker

# yum install docker docker-io

查看是否安装成功,启动docker

# docker version
Client version: 1.6.0
Client API version: 1.18
Go version (client): go1.4.2
Git commit (client): 8aae715/1.6.0
OS/Arch (client): linux/amd64
Server version: 1.6.0
Server API version: 1.18
Go version (server): go1.4.2
Git commit (server): 8aae715/1.6.0
OS/Arch (server): linux/amd64

# service docker start

安装镜像

可用的镜像地址

搜索可用镜像

# docker search 镜像名字

下载运行镜像

docker pull library/ubuntu
docker run learn/tutorial apt-get install -y ping #使容器执行指定的命令,要带上-y参数。如果不指定-y参数的话,apt-get命令会进入交互模式,docker无法响应这种交互
docker run -t -i ubuntu /bin/bash  #运行容器的bash 并进入命令行交互

exit退出容器后使用docker ps -l 来获取最后一次修改之后的容器id

修改/保存镜像

exit  #退出当前镜像
#首先使用docker ps -l命令获得安装完nginx命令之后容器的id。然后把这个镜像保存为nginx
docker commit -m "new_action" -a "author_name" f14a647c64e2 new_image_name:tagname
docker images

其中,-m 来指定提交的说明信息,跟我们使用的版本控制工具一样;-a 可以指定更新的用户信息(–author);之后是用来创建镜像的容器的 ID;最后指定目标镜像的仓库名和 tag 信息。创建成功后会返回这个镜像的 ID 信息。

外部访问容器

参考文档

通过 -P-p 参数来指定端口映射。
当使用 -P 标记时,Docker 会随机映射一个 49000~49900 的端口到内部容器开放的网络端口
使用 docker ps 可以看到配置后的映射状态

docker run -d -p 5000:5000 training/webapp #-d 守护进程执行

常用列表

docker images   #显示本地已有的镜像
docker ps #列出当前所有正在运行的container
docker attach CID #进入一个正在运行的容器   exit; 退出并结束.  ctrl+p ctrl+q 返回宿主机
docker ps -a  # 列出所有的container  
docker ps -l  #列出最近一次启动的container
docker rm ID #删除单个容器
docker rm `docker ps -a -q`  #删除所有容器(container)
docker rmi ID  删除images镜像
docker -d #已守护进程运行

说明

image并不等于container只有commit后才会产生一个images

树莓派通过PWM控制航模电机

说明

普通航模电调通过50HZ ,10.6%~4.6%占空比的PWM信号来控制转速,经过测试超过10.6%或低于4.6%都无法正常使用.

控制代码如下:

import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BOARD)
GPIO.setup(12, GPIO.OUT)

# 10.6 最高    4.6最低
p = GPIO.PWM(12, 50)  # 通道为 12 频率为50Hz

p.start(10)  # 最高占空比

input('等待滴滴两声,检测到最大值')

p.ChangeDutyCycle(4)  #检测最小值 继续滴滴两声

input('开始运转')

p.ChangeDutyCycle(5)  #开始低速运转

input('退出')

p.stop()
GPIO.cleanup()

 

由于是用软件生产的PWM,波形受线程的影响比较严重,会出现一些抖动现象,无法直接用于要求较高的场所.

树莓派输出PWM(转载)

使用 RPi.GPIO 模块的脉宽调制(PWM)功能

更新日志:
2013 年 5 月 27 日更新:根据 2013 年 4 月 10 日更新的官方文档完成了初步翻译。
本文会在适当的时间里进行增删改等操作,如果您对该文感兴趣,可以仅收藏本页。
本文链接:使用 RPi.GPIO 模块的脉宽调制功能

创建一个 PWM 实例:

p = GPIO.PWM(channel, frequency)

启用 PWM:

p.start(dc)   # dc 代表占空比(范围:0.0 <= dc <= 100.0)

更改频率:

p.ChangeFrequency(freq)   # freq 为设置的新频率,单位为 Hz

更改占空比:

p.ChangeDutyCycle(dc)  # 范围:0.0 <= dc <= 100.0

停止 PWM:

p.stop()

注意,如果实例中的变量“p”超出范围,也会导致 PWM 停止。

以下为使 LED 每两秒钟闪烁一次的示例:

import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BOARD)
GPIO.setup(12, GPIO.OUT)
 
p = GPIO.PWM(12, 0.5)
p.start(1)
input('点击回车停止:')   # 在 Python 2 中需要使用 raw_input
p.stop()
GPIO.cleanup()

以下为使 LED 在亮/暗之间切换的示例:

import time
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BOARD)
GPIO.setup(12, GPIO.OUT)
 
p = GPIO.PWM(12, 50)  # 通道为 12 频率为 50Hz
p.start(0)
try:
    while 1:
        for dc in range(0, 101, 5):
            p.ChangeDutyCycle(dc)
            time.sleep(0.1)
        for dc in range(100, -1, -5):
            p.ChangeDutyCycle(dc)
            time.sleep(0.1)
except KeyboardInterrupt:
    pass
p.stop()
GPIO.cleanup()

 

相关网站
原文地址:RPi.GPIO module PWM
项目地址:RPi.GPIO

使用树莓派点亮一个发光二极管

简介

如何点亮一个发光二极管是最基础的一件事了,树莓派最大的特色就是拥有26个GPIO口,通过这些GPIO口可以做各种你能想到的东西

开始

首先使用如下命令搭建GPIO控制环境,官方推荐使用python来操作GPIO

apt-get install python-dev python-rpi.gpio

然后编写控制程序

import RPi.GPIO as GPIO
import time

GPIO.setmode(GPIO.BCM)
GPIO.setup(24, GPIO.OUT)


t=0
while t<10:
    GPIO.output(24, 1)
    time.sleep(0.1)
    GPIO.output(24, 0)
    time.sleep(0.1)
    t+=1
pass

GPIO.cleanup()

另存为lcd.py 运行$ python lcd.py  后就可以看到Led闪烁

RPi.GPIO模块函数说明:

RPi.GPIO.setmode(naming_system)

设置将GPIO针的命名方式。naming_system可用的取值有 RPi.GPIO.BCM 和 RPi.GPIO.BOARD,分别代表boardcom命名系统和树莓派板子上的命名系统。而因为使用BCM 的时候(据说)不同的版本BVM针脚定义不一样,所以同一套程序在多个树莓派系统上使用的时候建议用BOARD。

RPi.GPIO.setup(channel, state)

将标号为channel的针设置为state模式。channel取值为1~26,state取值为RPi.GPIO.IN 或者RPi.GPIO.OUT,分别表示输入和输出。例如 RPi.GPIO.setup(1, RPi.GPIO.IN)表示将1号针设置为输入模式;RPi.GPIO.setup(3, RPi.GPIO.OUT)表示将3号针设置为输出模式。具体哪个号是哪根取决于setmode()中设置成什么。

RPi.GPIO.output(channel, state)

将标号为channel的针设置为state指定的电平。channel取值为1~26,state取值为RPi.GPIO.HIGH 和RPi.GPIO.LOW,或者1和0,或者True和False,表示高电平和低电平。例如RPi.GPIO.output(1, 1) 表示把1号针设置为高电平,RPi.GPIO.output(3, Flase) 表示将3号针设置为低电平。具体哪个号是哪根取决于setmode()中设置成什么。

RPi.GPIO.input(channel)

获取将标号为channel的针的电平砖头。channel取值为1~26。例如RPi.GPIO.input(1) 表示获取1号针的状态。

RPi.GPIO.cleanup()

清除掉之前RPi.GPIO.setup()设置的状态。退出程序之前一定要调用,否则下次调用的时候会报错。

rpi-pins-40-0

13120344_KqtC

自己买的扩展板一般使用的是GPIO.BCM模式, 端口18对应的板子上的p1也就是gpio1

使用mkdocs实时发布项目文档

MkDocs


 

MkDocs 是一个用于创建项目文档的 快速, 简单 , 完美华丽 的静态站点生成器. 文档源码使用 Markdown 来撰写, 用一个 YAML 文件作为配置文档。

虽然mkdocs现在还处于开发阶段,但是他所展现出来的特色确实很有吸引力,特别是他的实时发布功能。

官方文档

MkDocs的安装

MkDocs需要python和 Python package manager pip 环境,并且版本2.6以上,但是在2.6.6版本下安装时会提示缺少扩展包,升级到2.10后解决,所以建议尽量使用更新版本的python

#安装依赖
yum install openssl openssl-devel zlib zlib-devel -y

$ wget http://python.org/ftp/python/2.7.3/Python-2.7.3.tar.bz2  
$ tar -jxvf Python-2.7.3.tar.bz2 
$ cd Python-2.7.3
$ make && make install

$ ./Python-2.7.3/python --version
Python 2.7.2
$ wget https://bootstrap.pypa.io/get-pip.py
$ ./Python-2.7.3/python get-pip.py
$ pip --version
pip 1.5.2
$ pip install mkdocs

安装完mkdocs后使用 mkdocs –help 以检查是否正确安装

开始使用

新建项目

$ mkdocs new my-project
$ cd my-project

有一个配置文件 mkdocs.yml, 和一个包含文档源码的 docs 文件夹. 在 docs 文件夹里包含了一个名为 index.md 的文档.

MkDocs 包含了一个内建的服务器以预览当前文档. 控制台切换当前目录到 mkdocs.yml 配置文件相同文件夹, 输入 mkdocs serve 命令以启动内建服务器:

$ mkdocs serve
Running at: http://127.0.0.1:8000/

在浏览器中打开 http://127.0.0.1:8000/ , 可以看到结果页面screenshot

 

如果需要用到时时发布只需把mkdocs serve运行于后台即可,通过–dev-addr来指定ip和端口

nohup mkdocs serve --dev-addr 10.0.18.19:8000

也可以通过mkdocs build 来生成静态html页面

自定义模板

参考官方文档

Mkdocs支持中文搜索

1.下载支持中文的lunr.js替换mkdocs自带的lunr.js

cp ./lunr.js /usr/local/lib/python2.7/site-packages/mkdocs/assets/search/mkdocs/js/lunr-0.5.7.min.js

2.修改search.py ,添加ensure_ascii=False 禁止将中文字符串转为ascii编码,修改完之后,使用python -m py_compile search.py 命令编译一下search文件,然后将新的search.pysearch.pyc(编译文件)替换掉旧的即可

vim /usr/local/lib/python2.7/site-packages/mkdocs/search.py

修改如下一行为:

 return json.dumps(page_dicts, sort_keys=True,ensure_ascii=False, indent=4)

 

 

P.s Linx下如果遇到忘记命令怎么使用或者不熟悉的情况,学会使用 man 或者   –help   常常会用意外收获