匿名

爱自由、爱爬墙


  • 首页

  • 归档

  • 标签

Ubuntu安装net-speeder

发表于 2016-05-26

介绍

目前个人最主要的科学上网工具,就是部署在搬瓦工上的Shadowsocks了,一直能稳定使用,唯一的缺点是速度不够快,看youtube时经常需要中断缓冲一会,不是很爽。

最近把搬瓦工上的系统更换了一下,重装了Shadowsocks,顺便研究了一下如何加速。

目前在VPS上,比较常用的加速软件有3钟:锐速、FinalSpeed、net-speeder

  1. 锐速是国内某公司出的商业软件,不开源,网上流传有破解版可用,但是,它只支持KVM架构的VPS,而我的廉价搬瓦工是OpenVZ架构的,不支持。
  2. FinalSpeed是开源的,项目地址:FinalSpeed,这个工具在使用时还需要装个客户端,否则没有任何加速效果,使用上不太方便。更关键的是,跑起来据说占用内存较大(可能因为是用JAVA开发的),作者特别提示搬瓦工至少需要256内存以上,而我的小VPS只有128M内存。
  3. net-speeder也是开源的,项目地址:net-speeder,这个项目是用C写的,代码非常简单,只有100多行,加速的原理简单粗暴,就是所有满足条件的包全部发2遍,这种做法有点损人利己,会占用更多带宽并使得流量翻倍,不过在高丢包高延迟环境下会比较有效。

受VPS的限制,可选的加速工具只有net-speeder。

安装

目前在VPS上装的系统是Ubuntu 15.10,在Ubuntu下安装net-speeder还是比较简单的。

首先下载net-speeder的源码并解压,解压后有个路径net-speeder-master

1
2
3
# wget https://github.com/snooda/net-speeder/archive/master.zip
# unzip master.zip
# cd net-speeder-master

如果解压时提示unzip命令没找到,需要先安装unzip

1
# apt-get install unzip

准备编译的环境,安装几个依赖的包

1
2
# apt-get install libnet1-dev
# apt-get install libpcap0.8-dev

编译,因为VPS是OpenVZ架构的,需要加-DCOOKED参数,KVM的不用加

1
# sh build.sh -DCOOKED

编译后,当前目录下会有个net_speeder的可执行文件。

使用

执行net-speeder的命令格式:./net_speeder 网卡名 加速规则(bpf规则)

网卡名可以用ifconfig命令看到,我的VPS上显示有2个网卡名:venet0 和 venet0:0,从IP地址看,后面一个绑定的是实际的VPS外网IP。

加速规则实际是个bpf规则,用来过滤哪些包需要发2遍,要了解更详细的bpf规则可以google一下。

项目的作者推荐的加速规则如下,重发所有的ip包:

1
# ./net_speeder venet0:0 "ip"

网上很多人推荐的加速规则如下,重发所有的tcp包:

1
# ./net_speeder venet0:0 "tcp"

但这两种规则范围还是太大了,尤其是作者推荐的,把所有的ip包全部发2遍,这么玩感觉有点耍流氓了。

而我的目的只需要给Shadowsocks加速,可以设定只加速Shadowsocks监听的端口,假设端口是8388,只加速这个端口的命令如下:

1
# ./net_speeder venet0:0 "tcp src port 8388"

假如需要给多个端口加速,命令可以写成:

1
# ./net_speeder venet0:0 "tcp src port 8388 or port 8389"

以后台方式执行:

1
# nohup ./net_speeder venet0:0 "tcp src port 8388" >/dev/null 2>&1 &

关闭net-speeder

1
# killall net_speeder

把这个工具加入开机启动,先拷贝到/usr/bin目录下

1
2
# cp ./net_speeder /usr/bin
echo 'nohup /usr/bin/net_speeder venet0:0 "tcp src port 8388" >/dev/null 2>&1 &' >> /etc/rc.local

效果

没详细测试加速前后下载等速度的差异,从youtube来看,效果还是非常明显的,youtube统计信息里的速度有了非常大的提升,缓存进度条跑的快了很多,一般视频都不会中断了。

在Markdown的正文中使用尖括号

发表于 2016-05-13

今天用Markdown写一篇文章,里面用了一对尖括号,但在生成的网页中,却发现尖括号以及其中的内容均消失了,在尖括号前加反斜杠也无效,除非左尖括号后面跟的是中文。
以下是几种示例:

1
2
3
例1:<not display>
例2:\<not display\>
例3:<中文可以显示>

显示为:
例1:
例2:\
例3:<中文可以显示>

在网上查了一下,原来Markdown为了兼容HTML,将尖括号都认为是HTML的语法来处理了,即便加反斜杠也没用。

为解决这个问题,在正文中正常显示尖括号,可以用下面两种方式:

一种是作为行内代码处理,在尖括号对前后各加一个反引号 “`”,如这样写:

1
例3:`<display>`

显示为:
例3:<display>

另一种是用转义字符来代替尖括号,左尖括号写&lt;,右尖括号写&gt;,如:

1
例4:&lt;display&gt;

显示为:
例4:<display>

Debian安装sudo

发表于 2016-05-13

以前用Ubuntu时,sudo可以说是一个非常常用的命令,最近试用Debian,用非root用户登录,执行sudo apt-get install ...时,居然提示:sudo: command not found

然后用dpkg -l|grep sudo查看,发现默认就没有安装sudo,只能自己装了:

先su到root用户,然后执行 apt-get install sudo

安装好后,执行 visudo,编辑允许使用sudo的用户,找到如下内容

1
2
# User privilege specification
root ALL=(ALL:ALL) ALL

在下面新增一行,允许其他用户使用sudo,<user>是实际的用户名:

1
<user>   ALL=(ALL:ALL) ALL

按Ctrl-O保存文件,注意默认保存的文件名是/etc/sudoers.tmp,需要把.tmp删除,直接保存为/etc/sudoers,会提示是否覆盖,选择Yes。
然后按Ctrl-X退出编辑。

也可以用vi直接编辑/etc/sudoers文件,这个文件是只读的,保存时需要用 :wq!

修改后,退出su,这样,其他用户就能使用sudo了。

Git只获取部分目录的内容(稀疏检出)

发表于 2016-05-11

公司的开发从SVN切换到Git,在SVN下,可以很方便的只获取版本库中一个或多个目录的内容,但是Git的克隆,默认是直接拉取整个远程仓库,如果项目比较大,大量和自己无关的内容也会拉到本地,占用很多硬盘空间。

在网上搜了一下,Git在1.7版本后,已经支持只Checkout部分内容,这个功能叫做 sparse checkout(稀疏检出)。

打开 sparse checkout 功能

如果本地还没有建版本库,要用这个功能,先进入要放版本库的目录,在命令行执行几条命令:

1
2
3
4
5
6
7
$ git init <project>
$ cd <project>
$ git remote add origin ssh://<user>@<repository's url>
$ git config core.sparsecheckout true
$ echo "path1/" >> .git/info/sparse-checkout
$ echo "path2/" >> .git/info/sparse-checkout
$ git pull origin master

第一条命令git init <project>,先建立一个空的版本库,用实际的目录名替代。
第二条命令cd <project>,进入创建的新的版本库的目录。
第三条命令git remote add origin ssh://<user>@<repository's url>,添加远程库的地址。
第四条命令git config core.sparsecheckout true,打开sparse checkout功能。
第五第六条命令echo "path1/" >> .git/info/sparse-checkout,添加2个目录到checkout的列表。路径是版本库下的相对路径,也可以用文本编辑器编辑这个文件。
第七条命令git pull origin master,拉取远程的 master 分支,也可以拉其他分支。

如果只拉取最近一次的变更,忽略以前的变更记录,在拉取时可以加参数depth,如git pull --depth=1 origin master (浅克隆)

如果以后修改了 .git/info/sparse-checkout,增加或删除部分目录,可以执行如下命令重新Checkout

1
$ git checkout master

或执行以下命令:

1
$ git read-tree -mu HEAD

如果本地已经建了版本库,要使用这个功能,可以进入版本库的目录,执行以下命令

1
2
3
4
$ git config core.sparsecheckout true
$ echo "path1/" >> .git/info/sparse-checkout
$ echo "path2/" >> .git/info/sparse-checkout
$ git checkout master

要关闭 sparse checkout功 能,仅仅修改设置,将core.sparsecheckout设为false是不生效的,需要修改 .git/info/sparse-checkout 文件,用一个”*“号替代其中的内容,然后执行 checkout 或 read-tree 命令。

sparse-checkout 文件设置

子目录的匹配
在 sparse-checkout 文件中,如果目录名称前带斜杠,如/docs/,将只匹配项目根目录下的docs目录,如果目录名称前不带斜杠,如docs/,其他目录下如果也有这个名称的目录,如test/docs/也能被匹配。
而如果写了多级目录,如docs/05/,则不管前面是否带有斜杠,都只匹配项目根目录下的目录,如test/docs/05/不能被匹配。

通配符 “*“ (星号)
在 sparse-checkout 文件中,支持通配符 “*“,如可以写成以下格式:

1
2
3
*docs/
index.*
*.gif

排除项 “!” (感叹号)
在 sparse-checkout 文件中,也支持排除项 “!”,如只想排除排除项目下的 “docs” 目录,可以按如下格式写:

1
2
/*
!/docs/

要注意一点:如果要关闭sparsecheckout功能,全取整个项目库,可以写一个”*“号,但如果有排除项,必须写”/*“,同时排除项要写在通配符后面。

Ubuntu安装Shadowsocks

发表于 2016-05-10

Shadowsocks可以说是我目前用过的最好的科学上网工具了,没有之一,从大约一年半前在搬瓦工上安装好Shadowsocks以来,这么长时间一直能稳定使用。

搬瓦工上默认的系统是CentOS,以前在这上面装的Shadowsocks,最近计划把系统换成Ubuntu,先学习了解一下Ubuntu下如何安装Shadowsocks。

Shadowsocks有多个版本,常用的有Libev、Python、Go等,以前在CentOS上装的是Libev版本,这次想试试Python版,Python版本可以通过配置文件同时打开多个端口。

注意以下几乎所有的命令都需要在root用户下执行,如果非root用户,需要在每条命令前加上sudo。

安装

Ununtu下安装Python版本的Shadowsocks其实挺简单,先执行如下命令安装pip和几个依赖的包:

1
# apt-get install python-pip python-gevent python-m2crypto

可能会顺带安装其他的一堆依赖的包,等全部安装完成后,就可以用pip来安装Shadowsocks:

1
# pip install shadowsocks

注意非root用户在命令前一定要加sudo,否则只会安装在用户的home目录下。

安装成功的结果显示如下:

1
2
3
4
5
6
7
8
9
10
11
Downloading/unpacking shadowsocks
Downloading shadowsocks-2.8.2.tar.gz
Running setup.py (path:/tmp/pip-build-4KPgyg/shadowsocks/setup.py) egg_info for package shadowsocks

Installing collected packages: shadowsocks
Running setup.py install for shadowsocks

Installing sslocal script to /usr/local/bin
Installing ssserver script to /usr/local/bin
Successfully installed shadowsocks
Cleaning up...

可以看到,默认ssserver和sslocal这两个程序安装到了/usr/local/bin目录

设置

执行下面命令在/etc目录下建立一个新目录:shadowsocks,并在其下创建一个文件:config.json:

1
2
# mkdir /etc/shadowsocks
# vim /etc/shadowsocks/config.json

config.json的内容如下:

1
2
3
4
5
6
7
8
{
"server":"0.0.0.0",
"server_port":8388,
"password":"your_password",
"timeout":600,
"method":"aes-256-cfb",
"fast_open": false
}

“server_port”和”password”可以根据自己的要求设定。

如果需要同时开多个端口,config.json的内容可以设置如下:

1
2
3
4
5
6
7
8
9
10
{
"server":"0.0.0.0",
"port_password": {
"8388": "your_password1",
"8389": "your_password2"
},
"timeout":600,
"method":"aes-256-cfb",
"fast_open": false
}

运行

执行以下命令启动Shadowsocks服务器:

1
2
3
4
# ssserver -c /etc/shadowsocks/config.json -d start 
INFO: loading config from /etc/shadowsocks/config.json
2016-04-19 03:48:17 INFO loading libcrypto from libcrypto.so.1.0.0
started

命令中的-d start参数表示Shadowsocks以后台方式运行,所以需要root权限

然后运行netstat -anp可以查看到Shadowsocks正监听在设置的端口。

停止Shadowsocks执行如下命令:

1
# ssserver -c /etc/shadowsocks/config.json -d stop

设置为服务随系统启动

执行下面的命令,创建shadowsocks.service文件:

1
# vim /etc/systemd/system/shadowsocks.service

文件的内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
[Unit]
Description=Shadowsocks
After=network.target

[Service]
Type=forking
PIDFile=/run/shadowsocks/server.pid
PermissionsStartOnly=true
ExecStartPre=/bin/mkdir -p /run/shadowsocks
ExecStartPre=/bin/chown root:root /run/shadowsocks
ExecStart=/usr/local/bin/ssserver --pid-file /var/run/shadowsocks/server.pid -c /etc/shadowsocks/config.json -d start
Restart=on-abort
User=root
Group=root
UMask=0027

[Install]
WantedBy=multi-user.target

设置文件权限:

1
# chmod 755 /etc/systemd/system/shadowsocks.service

启动服务,enable是将服务设为自动启动。

1
2
# systemctl start shadowsocks
# systemctl enable shadowsocks

查看服务状态:

1
# systemctl status shadowsocks

Markdown简单语法介绍

发表于 2016-05-04

Hexo搭建的论坛是用Markdown来写文档的,这是一种轻量级的「标记语言」,一般写个文档,了解下常用的几个语法就可以了。

标题

标题可以用2钟方式,一钟是用”#“(井号),总共六级标题,分别在文字前用1到6个“#”号表示。
语法参考如下:

1
2
3
4
5
6
# 一级标题
## 二级标题
### 三级标题
#### 四级标题
##### 五级标题
###### 六级标题

另一种是在文字的下面加”=”(等号)或”-“(减号),分别表示一级和二级标题。
语法参考如下:

1
2
3
4
5
一级标题
========

二级标题
--------

粗体和斜体

斜体前后,各加一个”*“(星号)或”_“(下划线)表示,粗体前后,各加两个”*“(星号)或”_“(下划线)表示。
语法参考如下:

1
2
3
4
*斜体*
**粗体**
_斜体_
__粗体__

显示如下:
斜体
粗体
斜体
粗体

链接

链接分为行内式和参考式两种。

行内式用一对方括号包含显示的文字,紧接着一对圆括号放链接的地址和提示。
语法参考如下:

1
访问[GitHub](https://github.com/ "Link to GitHub")

显示如下:
访问GitHub

参考式用两对紧挨的方括号,第二个方括号放链接的ID,并在文章的其他地方定义这个ID的内容。
语法参考如下:

1
2
3
访问[GitHub][link1]

[link1]: https://github.com/ "Link to GitHub"

显示如下:
访问GitHub

链接的地址可以是站内的相对地址。

自动链接

包括在一对尖括号里的地址或邮箱,也会被Markdown自动处理为链接。
语法参考如下:

1
2
访问<https://github.com/>
mailto: <address@example.com>

显示效果如下:
访问https://github.com/
mailto: address@example.com

区块引用

在要引用文字的每行开头增加一个”> “(大于号),注意和后面的内容要有空格,多个”> “还可以实现嵌套引用。
语法参考如下:

1
2
3
普通内容
> 引用内容
> > 嵌套引用内容

显示效果如下:
普通内容

引用内容

嵌套引用内容

代码

行内的代码,可以在前后各加一个”`“(反引号)来表示。
语法参考如下:

1
使用命令 `pip install -U pip` 来更新pip。

显示效果如下:
使用命令 pip install -U pip 来更新pip。

大段的代码,可以是在每行的开头增加4个空格或一个制表符。
语法参考如下:

1
2
3
普通内容
#!/usr/bin/python
print('hello world!')

显示效果如下:
普通内容

#!/usr/bin/python
print('hello world!')    

或者在代码前后各加一行,写三个”`“(反引号),如” ``` “。
在开头的三个反引号后面,还可以写代码的类型,实现语法高亮,如” ``` python “。

语法参考如下:

``` python

#!/usr/bin/python
print(‘hello world!’)
```

显示效果如下:

1
2
#!/usr/bin/python
print('hello world!')

图片

在文档中添加图片的语法和链接的语法很像,也分为行内式和参考式,和链接的区别是在前面增加了一个”!”(惊叹号)。
语法参考如下:

1
2
3
4
这是一个行内式添加的图片:![64 fire](/images/64_fire.jpg "64 fire")
这是一个链接式添加的图片:![64 fire][pic-1]

[pic-1]: /images/64_fire.jpg "64 fire"

显示效果如下:
这是一个行内式添加的图片:64 fire
这是一个链接式添加的图片:64 fire

分隔线

在一行中用三个以上的星号、减号、底线来建立一个分隔线,行内不能有其他东西,中间可以插入空格
语法参考如下:

1
2
3
4
5
***
* * *
*********
- - -
_________

上面几种显示效果均一样,如下:


列表

Markdown 支持有序列表和无序列表。

无序列表使用星号、加号或是减号作为列表标记
语法参考如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
* 项目1
* 项目2
* 项目3

或

+ 项目1
+ 项目2
+ 项目3

或

- 项目1
- 项目2
- 项目3

上面三种,显示效果均一样,如下:

  • 项目1
  • 项目2
  • 项目3

有序列表使用数字加一个英文句点作为列表标记。
语法参考如下:

1
2
3
1. 项目1
2. 项目2
3. 项目3

显示效果如下:

  1. 项目1
  2. 项目2
  3. 项目3

事实上,数字的值并不重要,如以下2种写法,显示效果均和前面一样,序号都从1开始顺序排列。

1
2
3
4
5
6
7
8
9
1. 项目1
1. 项目2
1. 项目3

或

3. 项目1
9. 项目2
6. 项目3

不过第一个项目的序号最好是1,因为Markdown以后可能会支持有序列表的start属性。

如果项目的信息有多行文字,为了美观可以在前面最多加3个空格保持缩进,也可以偷懒不加空格,如以下写法均可:

1
2
3
4
5
* 项目1
项目1-1
* 项目2
项目2-1
* 项目3

如果一段文字以数字加一个点开头,但不想让其变成一个有序列表,可以在点前加个反斜杠,无序列表的符号也是如此,如:

1
2
1989\. this is s ...
\* this is s ...

表格

Markdown使用管线图的方式实现表格,如下表示一个简单的表格,注意表格的开头要空一行。
语法参考如下:

1
2
3
4
5

标题1 | 标题2 | 标题3
:-----|-----:|:-----:
行1-内容1 | 行1-内容2 | 行1-内容3
行2-内容1 | 行2-内容2 | 行2-内容3

显示效果如下:

标题1 标题2 标题3
行1-内容1 行1-内容2 行1-内容3
行2-内容1 行2-内容2 行2-内容3

注意上面第二行中的冒号,表示几种不同的对齐方式

为了美观,写的时候也可以尽量对齐,并在前后各加个”|”(下划线),如下面的写法,显示效果和前面一样

1
2
3
4
5

| 标题1 | 标题2 | 标题3 |
|:----------|----------:|:---------:|
| 行1-内容1 | 行1-内容2 | 行1-内容3 |
| 行2-内容1 | 行2-内容2 | 行2-内容3 |

反斜杠

如果需要在文档中显示一下Markdown语法相关的字符,不希望Markdown将其按语法字符处理,可以在前面增加一个反斜杠,在前面的介绍列表时已经有这样的用法。

python pip的简单用法

发表于 2016-05-03

pip是一个以Python 语言写成的软件包管理系统,可以安装和管理软件包。

安装pip

Windows环境下,Python2.7.9以及3.4以后的版本,已经自带pip,默认在安装Python时就会自动安装。

在Ubuntu15下,默认安装的是Python3,如果要安装对应版本的pip,执行如下命令:

1
$ sudo apt-get install python3-pip

如果执行如下命令,会连带安装Python2.7版本:

1
$ sudo apt-get install python-pip

查看帮助

命令help,格式如下:

1
>pip help

查看某条命令的帮助,如:

1
>pip help install

安装软件包

命令install,格式如下:

1
>pip install xlwt

更新某个软件包,如更新pip自身:

1
>pip install --upgrade pip

–upgrade 可以简化写为 -U

如果要通过代理才能访问网络,pip命令可以加参数--proxy=http://<proxy_address>:<proxy_port>

卸载已安装的软件包

命令uninstall,格式如下:

1
>pip uninstall xlwt

查看已经安装的包

命令list,格式如下:

1
>pip list

结果显示如下:

1
2
3
4
C:\Users\admin>pip list
xlrd (0.9.4)
xlutils (1.7.1)
xlwt (1.0.0)

检查哪些包需要更新,如:

1
>pip list --outdated

–outdated 可以简化写为 -o

显示包的详细信息

命令show,格式如下:

1
>pip show xlwt

结果显示如下:

1
2
3
4
5
6
C:\Users\admin>pip show xlwt
---
Metadata-Version: 2.0
Name: xlwt
Version: 1.0.0
......

可以带个 –files 参数,显示包里的文件

1
>pip show --files xlwt

–files 可以简化写为 -f

搜索

命令search,格式如下:

1
>pip search xlwt

结果显示如下,:

1
2
3
4
5
C:\Users\admin>pip search xlwt
xlutils (1.7.1) - Utilities for working with Excel files that require
both xlrd and xlwt
INSTALLED: 1.7.1 (latest)
......

显示内容包含了符合搜索条件的包的名称、版本和简要介绍,如果搜索的包已经安装,会显示当前安装的版本。

Ubuntu安装BTSync

发表于 2016-04-30

BTSync是多台电脑之间同步文件的利器,很好用。

在Ubuntu上安装BTSync的步骤:

添加btsync官方的Repository

以下命令新建一个 /etc/apt/sources.list.d/btsync.list 文件。

1
sudo sh -c 'echo "deb http://linux-packages.getsync.com/btsync/deb btsync non-free" > /etc/apt/sources.list.d/btsync.list'

安装BTSync的Public key

使Ubuntu信任此BTSync提供的Repository。

1
wget -qO - http://linux-packages.getsync.com/btsync/key.asc | sudo apt-key add -

安装

接下来就能用apt-get安装BTSync了,需要先update一下。

1
2
sudo apt-get update
sudo apt-get install btsync

创建用于同步的目录

安装默认创建了一个btsync用户,可以创建一个新目录并授权给btsync用户,以后同步的内容就放在这个目录下。

1
2
sudo mkdir /home/btsync
sudo chown btsync /home/btsync

使BTSync自动启动

默认启动服务的用户是btsync

1
sudo systemctl enable btsync

除了enable,systemctl命令还可以带disable、start、stop、status等参数。

通过web设置BTSync

在本地用浏览器访问localhost:8888即可。

如果是VPS或Ubuntu server等没有图形界面的系统,可以编辑BTSync的配置文件。

1
sudo vi /etc/btsync/config.json

找到下面内容:

1
2
3
4
"webui" :
{
"listen" : "127.0.0.1:8888"
}

将 “127.0.0.1:8888” 修改为 “0.0.0.0:8888” ,保存退出。重启BTSync。
然后就能用其他机器的浏览器访问 “Ubuntu_IP:8888” 来设置BTSync。

参考链接

Installing Sync On Linux

创建Tags页面

发表于 2016-04-22

默认用Hexo创建的博客有个Tags链接,但点进去却显示404,我讨厌这个页面。

在网上搜了下,需要自己创建一个tags页面,在Hexo目录下,运行:

1
>hexo new page tags

会在sources目录下创建一个tags目录,里面有个index.md文件,用文本编辑器打开文件,里面的内容:

1
2
3
4
--- 
title: tags
date: 2016-04-22 10:42:13
---

在date后面增加一行:

1
type: "tags"

保存

然后顺序执行

1
2
3
>hexo clean
>hexo g
>hexo s

用浏览器访问:127.0.0.1:4000,点Tags,就不会显示404了。

把博客的主题切换为NexT

发表于 2016-04-21

Hexo默认安装的主题是landscape,从网上看到NexT的主题挺简洁漂亮的,就改用它了。

下载NexT

先把Next主题下载下来,可以用两种方式:
1、用Git克隆下来

1
2
>cd your-hexo-site
>git clone https://github.com/iissnan/hexo-theme-next themes/next

2、直接下载稳定版本,前往 NexT 版本 发布页面。
选择你所需要的版本,下载 Download 下的 Source Code (zip) 到本地。目前最新的是5.0.1版本。

将下载下来的文件解压到 themes 目录,并将创建的文件夹更名为next。

设置Hexo使用NexT主题

用文本编辑器打开Hexo目录下的_config.yml文件,修改theme

1
theme: next

在命令行顺序执行

1
2
3
>hexo clean
>hexo g
>hexo s

用浏览器访问:127.0.0.1:4000,就能看到新的主题样子了。

更多信息请看开始使用NexT。

123
匿名

匿名

没有什么能够阻挡,你对自由的向往!

21 日志
21 标签
© 2016 匿名
由 Hexo 强力驱动
主题 - NexT.Muse