XieJava's blog

记录最好的自己


  • 首页

  • 分类

  • 标签

  • 归档

  • 关于

解决Hexo博客模板hexo-theme-next的翻页按钮不正常显示问题

发表于 2020-03-10 | 更新于: 2021-08-22 | 分类于 技术 , 开发 | | 阅读次数:
字数统计: 347 | 阅读时长 ≈ 1

用Hexo搭了个Gitpage的博客,兴冲冲的发了11篇博文后发现翻页按钮不正常显示,显示为<i class="fa fa-angle-right"></i>的HTML编码。如下图:
HTML编码
<i class="fa fa-angle-right"></i>这是个什么鬼?
这是一个Font Awesome的字体图标,按道理来说这个图标应该可以正常显示的,现在这个图标不能显示了显示成了html源码。
Font Awesone图标
解决办法:
最简单的办法就是将<i class="fa fa-angle-right"></i>这个不能正常显示的字体图标改成一般的字符,我这里就是改成正常的一般左右键字符“>”,“<”。
在 themes\hexo-theme-next\layout_partials 下找到hexo-theme-next的翻页组件,就是pagination.swig
将

1
2
3
4
5
6
7
8
9
10
11
{% if page.prev or page.next %}
<nav class="pagination">
{{
paginator({
prev_text: '<i class="fa fa-angle-left"></i>',
next_text: '<i class="fa fa-angle-right"></i>',
mid_size: 1
})
}}
</nav>
{% endif %}

改成

1
2
3
4
5
6
7
8
9
10
11
{% if page.prev or page.next %}
<nav class="pagination">
{{
paginator({
prev_text: '<',
next_text: '>',
mid_size: 1
})
}}
</nav>
{% endif %}

重新发布以后可以看到翻页按钮可以正常显示了
正常显示箭头


作者博客:http://xiejava.gitee.io

通过filebeat、logstash、rsyslog采集nginx日志的几种方式

发表于 2020-03-09 | 更新于: 2021-08-22 | 分类于 技术 , 开发 | | 阅读次数:
字数统计: 1.7k | 阅读时长 ≈ 6

由于nginx功能强大,性能突出,越来越多的web应用采用nginx作为http和反向代理的web服务器。而nginx的访问日志不管是做用户行为分析还是安全分析都是非常重要的数据源之一。如何有效便捷的采集nginx的日志进行有效的分析成为大家关注的问题。本文通过几个实例来介绍如何通过filebeat、logstash、rsyslog采集nginx的访问日志和错误日志。

大家都知道ELK技术栈是采集、分析日志的利器。所以这里介绍的是从nginx采集日志到ES。当然至于日志采集以后存到看大家的需要。通过logstash可以方便的配置日志输出存储的方式。

一般来说nginx默认安装后,日志文件在 /usr/local/nginx/logs 目录下。分别有 access.log和error.log 访问日志和错误日志。
这次示例Elasitcsearch是三个节点组成的集群172.28.65.22、172.28.65.23、172.28.65.24,172.28.65.30 是kibana的地址,172.28.65.32是数据采集服务器,上面装有logstash、nginx、 filebeat。一般来说采集服务器上有logstash,而nginx、 filebeat应该是装在采集目标上。

一、直接通过filebeat采集日志到ES

filebeat到ES
在filebeat的安装目录找到filebeat.yml 配置获取日志文件的路径及输出到ES的配置。
具体:

1
2
3
4
5
6
7
8
- type: log
# Change to true to enable this input configuration.
enabled: true
# Paths that should be crawled and fetched. Glob based paths.
paths:
#- /var/log/*.log
- /usr/local/nginx/logs/*.log
#- c:\programdata\elasticsearch\logs\*

filebeat.yml配置
如果需要在kibana中友好显示的化,可进行kibana配置
kibana配置
输出到es中,在hosts中配置好你的ES服务地址。如果单机只有一个节点,就可以只配一个ip和端口。
filebeat.yml配置中配置es
启动filebeat 进行日志数据采集

1
./filebeat -e -c filebeat.yml -d "publish"

通过elasticsearch-head插件查看es索引中的日志信息
elasticsearch-head插件查看es索引
可以看到nginx中的access.log和error.log的日志都已经上来了。
在kibana中通过filebeat-*过滤看filebeat的索引,可以看到通过filebeat采过来的数据。

kibana中通过filebeat-*过滤看filebeat的索引
这种直接通过filebeat直接对接ES采日志的方式简单直接,但是无法对采集的日志进行预处理和其他一些操作,也不够灵活。
可以在filebeat 和 ES之间加一层Logstash,可以将filebeat于ES解耦,通过Logstash可以做一些预处理,也可以通过Logstash采集到除ES以外的其他数据存储上。

二、通过filebeat采集日志到logstash再送到ES

通过filebeat采集日志到logstash再送到ES
首先得安装 logstash ,安装完后在logstash的安装目录下新建vi filebeat-pipeline.conf
filebeat-pipeline.conf的具体配置如下:

1
2
3
4
5
6
7
8
9
input {
beats {
port => "5044"
}
}
output {
elasticsearch { hosts => ["172.28.65.24:9200"] }
stdout { codec => rubydebug}
}

input配置表示通过5044端口接收beats的数据
output配置表示输出到elasticsearch,并且同时输出到标准输出也就是控制台。
然后通过命令

1
bin/logstash -f filebeat-pipeline.conf --config.reload.automatic

应用filebeat-pipeline.conf启动logstash。
应用filebeat-pipeline.conf启动logstash
启动以后可以看到logstash的启动日志5044端口的服务已经起了,可以接受通过filebeat通过5044端口传过来的数据了。
接下来配置filebeat
在filebeat的安装目录找到filebeat.yml 配置获取日志文件的路径及输出到logstash的配置。不直接输出到ES了。
具体配置如下:
将output.elasticsearch的配置屏蔽
配置output.logstash,配置正确的logstash的服务主机和端口
配置output.logstash
启动filebeat 进行日志数据采集

1
./filebeat -e -c filebeat.yml -d "publish"

我们访问nginx服务提供的web服务http://172.28.65.32/
在logstash的控制台 可以看到相应的访问access.log 日志
logstash的控制台 可以看到相应的访问access.log 日志
同时在ES 中也可以看到有相应的日志数据
在ES 中也可以看到有相应的日志数据

三、直接通过rsyslog采集日志到logstash在送到ES

在很多情况下你需要采集的web服务器并不是自己能够控制的,不是说你想装filebeat就可以让你装的,这时候就可以要求目标数据源通过 syslog 的方式将日志发出来。我们可以再通过 logstash送到ES或其他的日志存储处理平台。
直接通过rsyslog采集日志到logstash在送到ES
通过syslog往日志服务器上发nginx的日志有两种方式,一种就是利用nginx的配置往外发日志,一种就是通过配置linux的rsyslog的配置往外发日志。

通过nginx配置发送syslog到logstash

参考见nginx官方文档:http://nginx.org/en/docs/syslog.html
具体配置如下:
在nginx的配置文件nginx.conf中
在server下配置access_log和error_log的输出方式

1
2
access_log syslog:server=172.28.65.32:514,facility=local7,tag=nginx_access_log,severity=info;
error_log syslog:server=172.28.65.32:514,facility=local7,tag=nginx_error_log,severity=info;

nginx.conf配置
配置完成后执行 ./nginx -s reload 使配置生效。这样就通过linux的rsyslog服务将nginx的日志往外发了。
接着来配置logstash的syslog的服务接收配置 。在logstash的安装目录下新建vi syslog-pipeline.conf
syslog-pipeline.conf的具体配置如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
input {
syslog{
type => "system-syslog"
port => 514
}
}
output {
elasticsearch {
hosts => ["172.28.65.24:9200"]
index => "system-syslog-%{+YYYY.MM}"
}
stdout { codec => rubydebug}
}

input配置表示通过514端口接收syslog的数据
output配置表示输出到elasticsearch,并且同时输出到标准输出也就是控制台。
通过执行 bin/logstash -f syslog-pipeline.conf --config.reload.automatic 启动logstash
可以看到logstash启动以后开启了514端口的tcp和upd协议的侦听
可以看到logstash启动以后开启了514端口的tcp和upd协议的侦听。
我们访问nginx服务提供的web服务http://172.28.65.32/
在logstash的控制台 可以看到相应的nginx访问access和error的日志
logstash的控制台可以看到相应的nginx访问access和error的日志
同样通过Elasticsearch-head在ES 中也可以看到有相应的日志数据
通过Elasticsearch-head在ES 中也可以看到有相应的日志

通过配置rsyslog发送syslog日志到logstash

有些老版本的nginx不支持配置syslog输出日志,或者说我想输出其他不是nginx的日志该怎么办呢?可以通过直接配置rsyslog的方式来往外发送日志。
在/etc/rsyslog.conf 中配置

1
$IncludeConfig /etc/rsyslog.d/*.conf

/etc/rsyslog.conf
意思是可以引用外部的配置文件,引用外部的配置文件一方面可以不影响主配置文件,另一方面也比较好管理
在/etc/rsyslog.d目录下新建nginx-log.conf
配置如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
$ModLoad imfile
$InputFilePollInterval 1
$WorkDirectory /var/spool/rsyslog
$PrivDropToGroup adm

##Nginx访问日志文件路径,根据实际情况修改:
$InputFileName /usr/local/nginx/logs/access.log
$InputFileTag nginx-access:
$InputFileStateFile stat-nginx-access
$InputFileSeverity info
$InputFilePersistStateInterval 25000
$InputRunFileMonitor

##Nginx错误日志文件路径,根据实际情况修改:
$InputFileName /usr/local/nginx/logs/error.log
$InputFileTag nginx-error:
$InputFileStateFile stat-nginx-error
$InputFileSeverity error
$InputFilePersistStateInterval 25000
$InputRunFileMonitor

*.* @172.28.65:514

配置好了以后,重启rsyslog服务

1
systemctl restart rsyslog

我们访问nginx服务提供的web服务http://172.28.65.32/
在logstash的控制台 可以看到同样的效果。
logstash的控制台

本文介绍了如何通过filebeat、logstash、rsyslog采集nginx的访问日志和错误日志的几种方式,具体需要根据实际情况灵活的运用。


作者博客:http://xiejava.gitee.io

浅析SIEM、态势感知平台、安全运营中心

发表于 2020-03-02 | 更新于: 2021-08-22 | 分类于 技术 , 网络安全 | | 阅读次数:
字数统计: 3.6k | 阅读时长 ≈ 12

近年来SIEM、态势感知平台、安全运营中心等概念炒的火热,有的人认为这都是安全管理产品,这些产品就是一回事,有人认为还是有所区分。那么到底什么是SIEM、什么是态势感知平台、什么是安全运营中心,他们之间有什么联系和区别呢?

一、SIEM

SIEM英文是security information and event managemen安全信息和事件管理
SIEM是一个由多个监视和分析组件组成的安全系统,旨在帮助组织检测和减轻威胁
一款典型的SIEM产品是将许多其他安全规则和工具结合在一个综合的框架下形成的一个合集。
典型的包括以下模块
日志管理(LMS)——用于传统日志收集和存储的工具。
安全信息管理(SIM)——集中于从多个数据源收集和管理与安全相关的数据的工具或系统。例如,这些数据源可以是防火墙、DNS服务器、路由器和防病毒应用程序。
安全事件管理(SEM)——基于主动监视和分析的系统,包括数据可视化、事件相关性和警报
大多数的SIEM包括以下元素
1、安全数据采集
主要是基于安全日志数据,日志表示在数字环境中运行的进程的原始输出,是提供实时发生的事情的准确图像的最佳来源,因此是SIEM系统的主要数据源。无论是防火墙日志、服务器日志、数据库日志,还是在实际网络环境中生成的任何其他类型的日志,SIEM系统都能够收集这些数据并将其存储在一个中心位置以进行扩展的保留。此采集过程通常由代理或应用程序执行,部署在监视的系统上,并配置为将数据转发到SIEM系统的中央数据存储。
2、安全数据解析处理和标准化
为了能够跨不同源和事件相关性高效地解释数据,SIEM系统能够规范化日志。这个规范化过程包括将日志处理为可读的结构化格式,从日志中提取重要数据,并映射日志中包含的不同字段。
3、安全数据集中存储
安全信息数据存储的目地当然是为了利用数据进行管理分析发现安全事件。
4、安全数据分析
一旦收集、解析和存储,SIEM系统中的下一步将负责连接这些点并关联来自不同数据源的事件。这种关联工作基于各种SIEM工具提供的规则、为不同的攻击场景预定义的规则,或者由分析人员创建和调整的规则。大多数SIEM系统还提供生成报告的内置机制。这些报告可以用于管理、审计或合规性原因。例如,可以将详细描述触发警报或规则的每日报告嵌入到仪表板中。
5、安全数据呈现
可视化数据和事件的能力是SIEM系统中的另一个关键组件,因为它允许分析人员方便地查看数据。包含多个可视化或视图的仪表板有助于识别趋势、异常情况,并监控环境的总体健康或安全状态。一些SIEM工具将附带预先制作的仪表板,而另一些工具将允许用户创建和调整自己的仪表板。
基于目前海量的安全信息数据,大数据架构已经成为主流。并不是说SIEM必须使用大数据架构,因为这是一个应用场景问题而非技术问题。但面对大量数据需要处理的场景时,基于大数据架构的SIEM则必不可少。所以有些厂商提出了SDC(security data center)安全大数据中心的概念就是把所有的安全数据集中管理起来,在SDC的基础上构建安全数据分析和展现能力,形成SIEM平台。

目前成熟的SIEM产品有很多,开源的有OSSIM、Elastic SIEM、Opensoc
OSSIM是SIEM的代表性产品,在产品形式上和Kali类似是一个基于Debain进行二次开发的Linux发行版,当前5.6.5版本基于Dibian 8(jessie)。
OSSIM使用Nmap等实现资产发现、使用Nessus等实现漏洞扫描、使用Snort等实现入侵检测、使用MySQL等进行数据存储,自己实现的部分主要是工具、数据整合和可视化展示。ossim存储架构是mysql,支持多种日志格式,包括鼎鼎大名的Snort、Nmap、 Nessus以及Ntop等,对于数据规模不大的情况是个不错的选择,新版界面很酷炫
从架构上来看,OSSIM系统是一个开放的框架,它的核心价值在于创新的集成各开源软件之所长,它里面的模块既有C/S架构,又有B/S架构,但作为最终用户主要掌握OSSIM WebUI主要采用B/S架构,Web服务器使用Apache。OSSIM系统结构示意图如下图所示。
在这里插入图片描述
第1层,属于数据采集层,使用各种采集技术采集流量信息、日志、各种资产信息,经过归一化处理后传入核心层。改层体现安全事件来源,入侵检测、防火墙、重要主机发出的日志都是安全事件来源,它们按发出机制分为两类:模式侦查器和异常监控(两者都采集警告信息,功能互补)由它们采集的安全事件,再被Agent转换为统一的格式发到OSSIM服务器,这一层就是Sensor要完成的内容。
第2层,属于核心处理层,主要实现对各种数据的深入加工处理,包括运行监控、安全分析、策略管理、风险评估、关联分析、安全对象管理、脆弱性管理、事件管理、报表管理等。该层中OSSIM Server是主角,OSSIM服务器,主要功能是安全事件的集中并对集中后的事件进行关联分析、风险评估及严重性标注等。所谓的集中就是以一种统一格式组织所有系统产生的安全事件告警信息(Alarms)并将所有的网络安全事件告警存储到数据库,这样就完成了对网络中所产生事件的一个庞大视图。系统通过事件序列关联和启发式算法关联来更好的识别误报和侦查攻击的能力。
OSSIM本质上通过对各种探测器和监控产生的告警进行格式化处理,再进行关联分析,通过后期这些处理能提高检测性能,即减少告警数量,减小关联引擎的压力,从整体上提高告警质量。
第3层,属于数据展现层,主要负责完成与用户之间的交互,达到安全预警和事件监控、安全运行监控、综合分析的统一展示,形式上以图形化方式展示给用户。Web框架(Framework)控制台界面即OSSIM的Web UI(Web User Interface,Web用户界面),其实就是OSSIM系统对外的门户站点,它主要由仪表盘、SIEM控制台、Alarm控制台、资产漏洞扫描管理、可靠性监控、报表及系统策略等部分组成。
OSSIM主要模块的关系
OSSIM系统主要使用了PHP、Python、Perl和C等四种编程语言,从软件层面上看OSSIM框架系统包括五大模块:Agent模块、Server模块、Database数据库模块、Frameworkd模块以及Framework模块,逻辑结构如图所示。
在这里插入图片描述
Elastic SIEM 的核心是全新的 SIEM 应用,此应用是安全团队的交互式工作空间,可允许他们对事件进行分类并开展初期调查。其中包括的时间线事件查看器 (Timeline Event Viewer) 能够允许分析师收集和存储攻击证据,固定相关活动并添加注释,以及添加评论并分享他们的发现,而且这一切在 Kibana 中即可完成;这样一来,您便能够轻松处理符合 ECS 格式的任何数据了。
在这里插入图片描述Opensoc是思科2014年在BroCon大会上公布的开源项目,但是没有真正开源其源代码,只是发布了其技术框架。可以参考Opensoc发布的架构,结合实际落地SIEM的方案。Opensoc完全基于开源的大数据框架kafka、storm、spark和es等,天生具有强大的横向扩展能力
在这里插入图片描述
所以从SIEM的定义和功能来看有两个核心能力,一个是安全信息数据的采集汇聚能力,一个就是安全事件的分析能力。

二、安全态势感知平台

“态势感知”早在 20 世纪 80 年代由美国空军提出,其包含感知、理解和预测三个层次。截止目前,业界对网络安全态势感知还没有一个统一全面的定义,基于美国Endsley 博士的理论对网络安全态势感知做出的定义:“网络安全态势感知是综合分析网络安全要素,评估网络安全状况,预测其发展趋势,并以可视化的方式展现给用户,并给出相应的报表和应对措施。”
什么是态势感知平台,大家都认为应该是利用大数据、机器学习等技术对态势感知态势海量数据进行提取,进行多维度的关联分析。能够提供对安全风险保持报警、趋势预测等,海量数据、关联分析、大屏展示和趋势预测是四个重点。而趋势预测最核心,目前做起来也比较难。
个人理解,SIEM重点在于对安全事件的感知和理解,态势感知重点在于通过大数据、机器学习等技术加深了对安全趋势的预测。国外一般不提态势感知系统,而国内,很多厂商都推出了态势感知系统。
目前国内安全厂商提供的“态势感知产品”包含的功能模块有:资产管理、漏洞管理、大数据平台、日志分析平台、威胁情报、沙箱、用户行为分析、网络流量分析、取证溯源、威胁捕捉等能力。
几个关键点:
1、 大数据平台。随着监测范围的扩大,数据量也在扩大,需要一个具备大数据处理和计算能力的平台,这是整个态势感知平台建设很重要的基础。
2、 基于威胁情报的监测。威胁情报对于降低大量数据和报警中的垃圾数据或者报警噪声,帮助更快速、更高效的发现攻击行为和攻击者非常关键,威胁情报的质量是检验态势感知平台能力的很重要的方面。
3、 全要素数据的采集。利用态势感知这样的平台能力的核心目的,是要监测到复杂的、高级的攻击,就需要态势感知平台首先要捕获到微观的状态,低成本、高效率的全要素数据采集能力是基础。
4、 基于攻击场景的分析研判。攻击不再是基于特征的监测,需要运用威胁情报、运用一些专家的经验,来构建基于场景的分析系统,它不是一个静态的东西,是一个与时俱进的攻防对抗过程中不断学习、学习参考的过程,需要持续运营这样的分析管理,需要更多的专家的经验和安全运营人员的参与。

三、安全运营中心

SOC(安全运营中心)来源于NOC(网络运营中心)。
随着信息安全问题的日益突出,安全管理理论与技术的不断发展,需要从安全的角度去管理整个网络和系统,而传统的NOC在这方面缺少技术支撑,于是,出现了SOC的概念。
以前大家所说的SOC是SOC 1.0阶段,只是在SOC的核心部件SIEM的买卖,国外所说的SOC是一个复杂的系统,它使用SIEM产品进行运维又以此向客户提供服务,也就是我们所说的SOC 2.0
SOC(安全运营中心)是以资产为核心,以安全事件管理为关键流程,采用安全域划分的思想,建立一套实时的资产风险模型,协助管理员进行事件及风险分析,预警管理,应急响应的集中安全管理系统。
SOC是一个复杂的系统,它既有产品,又有服务,还有运维,SOC是技术、流程和人的有机结合。
随着安全态势感知平台的兴起,安全运营中心将以态势感知平台作为智能安全运营的载体,在风险监测、分析研判、通知协作、响应处置、溯源取证等各方面进行了增强,同时融入了当前流行的技术和平台作为支撑,如大数据技术、东西向流量采集技术,EDR 终端检测响应技术、机器学习、欺骗攻击技术等。同时态势感知平台与 ITIL(Information Technology Infrastructure Library,ITIL)理念与信息安全管理标准相融合,将安全运营划分为不同角色,如安全管理人员、安全专家、安全运维、安全分析师、安全应急响应人员、安全研究人员等,在集成了安全事件管理全生命周期的流程中,通过工作流程将其串联起来,使安全运营流程更加规范和有序。

所以个人认为SDC<SIEM<态势感知<安全运营中心

通过Git Pages+Hexo搭建自己的博客

发表于 2020-02-12 | 更新于: 2021-08-22 | 分类于 技术 , 开发 | | 阅读次数:
字数统计: 1.2k | 阅读时长 ≈ 4

一、申请并配置Github Pages

step1 在github上创建一个git库

用github账号登录https://github.com/ ,如没有github账号则申请一个github账号。登录后点击“New repository”新建一个名为username.github.io(username是你的github用户名)如我的是:xiejava1018.github.io ,如果库名以及存在则会报库名已经存在的错误。
新建库

step2 绑定自己的域名(如果没有自己的域名也可以不绑)

访问刚申请的git库,点击Settings
Settings
如果库名不是username.github.io(username是你的github用户名)在这里可以修改成username.github.io
修改库名
拖到下面可以看到GitHub Pages的信息,如果不绑定自己的域名实际可以通过https://username.github.io/来访问你的站点了。
站点地址
如果有申请自己的域名,可以将域名解析到你的GithubPages username.github.io 如我的是xiejava1018.github.io
解析自定义域名
在GitHub Pages的自定义域名Custom domain中输入刚解析的域名保存后就可以看到你的站点被发布到你的域名上了,如https://xiejavablog.ishareread.com/
绑定自定义域名
这时候你就可以用自己的域名来访问GitHub Pages的网站了,不过现在什么都没有,只有个空白页面。这就需要我们借助Hexo这个静态站点生成工具来生我们站点的内容了。

二、安装Hexo并生成站点

安装Hexo并生成站点可以参考官方的文档 https://hexo.io/zh-cn/docs/

1、安装前的准备

安装 Hexo 相当简单,只需要先安装下列应用程序即可:
Node.js (Node.js 版本需不低于 8.10,建议使用 Node.js 10.0 及以上版本)
Git

2、安装Hexo

所有必备的应用程序安装完成后,即可使用 npm 安装 Hexo。

1
$ npm install -g hexo-cli

安装完了以后可以通过hexo version 查看相应的版本
版本信息

3、生成站点

安装 Hexo 完成后,执行下列命令,Hexo 将会在指定文件夹中新建所需要的文件。

1
2
3
$ hexo init <folder>
$ cd <folder>
$ npm install

新建完成后,指定文件夹的目录如下:
目录
其中_config.yml 文件是网站的配置文件
package.json 是应用程序的信息
scaffolds
模版文件夹。当新建文章时,Hexo 会根据 scaffold 来建立文件。
Hexo的模板是指在新建的文章文件中默认填充的内容。例如,如果您修改scaffold/post.md中的Front-matter内容,那么每次新建一篇文章时都会包含这个修改。
source
资源文件夹是存放用户资源的地方。除 _posts 文件夹之外,开头命名为 _ (下划线)的文件 / 文件夹和隐藏的文件将会被忽略。Markdown 和 HTML 文件会被解析并放到 public 文件夹,而其他文件会被拷贝过去。
themes
主题 文件夹。Hexo 会根据主题来生成静态页面。

4、安装主题

Hexo提供了很多主题,我用的是hexo-theme-next主题,大家可以直接克隆我的主题https://github.com/xiejava1018/hexo-theme-next.git 这里修复了一些bug如乱码问题等。
cd 切换到站点目录下

1
$ git clone https://github.com/xiejava1018/hexo-theme-next.git themes/hexo-theme-next

也可以用其他git客户端工具将主题拉取到themes目录下
修改_config.yml文件的theme改为

1
theme : hexo-theme-next

5、写作

可以执行下列命令来创建一篇新文章或者新的页面。

1
$ hexo new [layout] <title>

可以在命令中指定文章的布局(layout),默认为 post,可以通过修改 _config.yml 中的 default_layout 参数来指定默认布局。
如执行:

1
hexo new 2020-02-11-2020-02-11-看完全套149本《书虫》是种什么样的体验

执行该命令后就会在响应的站点目录的source_posts下生成2020-02-11-看完全套149本《书虫》是种什么样的体验.md文件。
文件
用任何喜欢的编辑器编辑这个.md文件即可,排版是支持MarkDown的。

6、生成和发布

编辑好需要发表的内容后。执行

1
$ hexo generate

就会生成相应的静态文件。改命令也可以简写成

1
$ hexo g

执行

1
$ hexo server

启动服务器。默认情况下,访问网址为: http://localhost:4000/ 就可以通过该地址访问本地的站点。
在本地检查没有问题以后就可以发布到Github Pages上通过互联网上访问了。
首先在配置_config.yml文件配置需要发布的地址。这个地址就是你在github上申请的Github Pages库的git地址
发布地址配置
然后就可以通过命令

1
$ hexo deploy

进行发布了。发布以后就可以通过https://xiejava1018.github.io 或者自定义的域名 https://xiejavablog.ishareread.com 来访问了。需要注意的是,每次重新发布以后,需要重新设置域名绑定才能正确访问,否则会报404的错误。

欢迎大家访问我的BLOG https://xiejavablog.ishareread.com/

看完全套149本《书虫》是种什么样的体验

发表于 2020-02-11 | 更新于: 2021-08-22 | 分类于 读书 | | 阅读次数:
字数统计: 1.9k | 阅读时长 ≈ 6

English

一直想学好英语,可惜一直在陷入”从入门到放弃”的怪圈,这么多年来一直尝试各种方式方法来学英语始终未成正果。当然这一切都归因于自己没有恒心没有毅力。有过坚持了330天终于放弃了背单词的经历,也找了很多如何学好英语的书籍和方法。受了李笑来老师的《人人都能用英语》及伍君仪的《把你的词汇用起来》的影响。经过自己仔细思考认为确实如果要把英语学好必须要用起来。考虑到自己的实际情况,没有相应的语言环境,从听说开始用起来可能也不太现实,最现实的方式就是从大量的阅读开始将英语用起来。即学了知识又学了英语,还没有那么枯燥。

如何开始阅读,读什么东西呢?自己的水平还没有达到能够读懂英文原版书的程度,望着满片英文的原版书还是心生畏惧。也是在网上看大家学习英语的经验,有人就介绍了阅读的方式方法。初学者一开始就不要挑战太高难度了,容易打击自己的自信心。最好的方式是采取分级阅读的方式,阅读i+1的英语材料。也就是阅读比自己能力稍微高一点的英语材料。在找英语阅读的材料过程中发现了很多人推荐了《书虫》,也就是”书虫·牛津英汉双语读物”,这套读物是外语教学与研究出版社和牛津大学出版社联袂奉献给英语学习者的一大分级阅读精品书系,提供了从小学高年级至大学的全套阅读方案。图书按照词汇量和语言难度进行科学分级。共分了七个级别,15套,共149本书。

《书虫》系列

我觉得这套读物比较适合像我这样的初学者。离开学校多年了,也不知道自己的英语水平究竟是属于什么级别,抱着空杯的心态,干脆就从最低级的开始看起(想想还可以给小孩看)。我是2019年6月18日购买的全套,从快递点搬回来的时候一大箱子很重。看着这满满一箱足足149本,比较兴奋又比较忐忑。兴奋的是我终于可以开始我的英语阅读之旅了,忐忑的是这也149本也忒多了吧?从来没有尝试过一次性读过这么多的书,即使是中文书也没有挑战过。

很欣赏伍君仪在《把你的词汇用起来》中的一句话,就是“学英语既然开始了,就一定要把它学好!”。反反复复从”从入门到放弃”浪费时间精力又没有什么效果。于是从2019年7月正式从书虫第一套入门级的第一本《 Survive!》生存游戏开始。入门级相当于小学高年级的水平,当然读起来很流畅很爽。有时候可以一口气看三、四本。入门级每一本都比较薄只有几十页,而且有一半还是中文解释。基本上没有什么挑战。毕竟有近150本怎么才能全部读完呢?我做了个计划给自己规定每天看40页或以上,准备用大半年的时间将这套书全部看完。书虫这套书可读性还是比较强,内容非常丰富,主题多样,包括悬疑、侦探、间谍等多种题材,大部分都是世界名著。小时候读名著读得比较少,这下可以过一下名著的瘾了,虽然是简写版的。尽管是简写版的但是改编得故事性挺强的,非常吸引人,很能提高阅读兴趣。为了让自己能够坚持下去,我每读一本都会在豆瓣上进行标记,并加入到自己的已读英文读本的豆列里。每读完一本就感觉到离胜利越近了一点。前面1至5级读得还很顺利,几乎都可以不用看中文翻译,后面到了第6级以后就有点磕磕绊绊了,有时候需要借助中文翻译才能看懂。不管怎么样,终于在2020年2月9日将全套书虫的最后一本《印度之行》全部读完,历时半年。除了其中11月底有段时间公司加班很厉害确实没有读以外,基本上每天都有阅读。看着满满的一箱书,这一本本标记已读的书,心里还是满满的成就感。

通过阅读全套书虫的经历,让我建立了学好英语的信心,培养了我阅读英语的兴趣。我想我再也不会“从入门到放弃”了。我花了半年的时间和精力把全套《书虫》都看完了,你要我放弃,那不这半年的努力都白费了吗?

但是有人可能会问我,看完全套书虫以后你的英语水平达到了什么程度。我想我会很遗憾的告诉你,“革命尚未成功,同志仍需努力”。我也曾经报有幻想,以为看完全套《书虫》自己的英语水平就很牛B了。但是越看到后面越清晰的认识到《书虫》这套书有它的局限性。整套书下来,最高级别的单词量才3000。也是高中毕业大学低年级的水平。也使我清晰的认识到自己目前的英语水平也就是高中毕业大学低年级的水平。一个意外的收获就是通过阅读《书虫》全套,大致的了解了英语的小说文学史,相当于给了我一个目录和一个指引。有哪些好的小说有兴趣可以更加深入的读下去。比如通过阅读书虫对英国文学史上著名的勃朗特三姐妹有了深刻的了解,因为里面有本书是写《勃朗特一家的故事》。这套书里还有《呼啸山庄》和《简·爱》,分别是勃朗特三姐妹中的艾米莉·勃朗特和夏洛蒂·勃朗特的名著,看了他们的简介再读了她们的作品理解更加全面和深刻了。让我有进一步看这两部名著的英文原版的欲望了。还有英国侦探小说女王阿加莎·克里斯蒂有本书《神秘女人——阿加莎•克里斯蒂》就是介绍她的经历和作品,看完以后我立马找了她的中文版的《东方快车谋杀案》看了觉得很有意思。还有狄更斯、哈代等的名作都让人看了还想看。通过这样大量的阅读体验以后,我对名著产生了浓厚的兴趣,我觉得我应该具备了阅读英文原版书的能力。下一个阶段我有信心准备开始我的英文原版书阅读了。今年我的计划是挑战看完十本英文原版书。

我读过的英文读本豆列: https://www.douban.com/doulist/118432400/

爱分享读书豆瓣小组: https://www.douban.com/group/655112/


关注:“爱分享读书”微信公众号

“爱分享读书”微信公众号

读书我们是认真的

坚持了330天,我终于放弃了背单词

发表于 2020-02-11 | 更新于: 2021-08-22 | 分类于 读书 | | 阅读次数:
字数统计: 1.6k | 阅读时长 ≈ 5

不背单词,能学好英语吗?
不背单词,能学好英语吗?
学习英语是我永远的痛,读书的时候没有把英语学好,工作后觉得英语很重要,经历了N多次从坚持到放弃。这一次,我是来真的,发誓不把英语学好不罢休,为此我下载了百词斩。为了有人监督我加入了打卡群,每天坚持英语背单词打卡,这是我坚持做得最好的一件事情,每天早上起床第一件事情就是背单词,每天20-30个,几乎从来没有中断过。但是我坚持到330天后,我还是决定放弃背单词了。为什么呢?因为没效果!!!我已经背完了从小学到大学以及新概念1-2册的单词,APP上显示我的词汇量已经达到7000,超过了80%的网友。可是我看英语文章还是一脸懵逼,即使是最浅的英语读物也有单词不认识。听不懂,更别奢望能说了。英语单词背了忘、忘了背,严重怀疑这个APP上显示7000多的单词量是哄我开心的,要不背了这么久的单词,英语水平还这么菜,依旧啥也看不懂……

学英语是会呼吸的痛

放弃背单词,并不代表我放弃了英语,因为我找了一本书–《人人都能用英语》。经过傻傻的认为打卡背单词就可以学好英语沉痛而失败的教训后,越发认为这本书相见恨晚。学英语就是要用,要不学英语干啥?坚持非常重要,但是坚持的方向错了一切都是白搭!

这不是一本英语的单词书、语法书。是一本教你如何学英语,不,应该是如何“用”英语的书。作者是我们都很熟悉的曾经是新东方专业英语老师,现在是比特币首富的–李笑来老师,《把时间当做朋友》的作者。虽然是专业的英语老师,在书中他没有卖弄自己的专业,而是非常真诚的讲述了自己学习英语的过程。整本书解决了我所有学英语的疑惑。

《人人都能用英语》

经历了N多次从坚持到放弃,我曾经就差点相信学习英语要有天赋才能学好,自己不是学英语的那块料。在书中作者花了很大量的篇幅来告诉我们,人人都可以学好英语!书中举了个例子,大约在1988年前后,他父亲的同事一位教英语的副教授去考了一次托福,成绩是570(满分677分),一个专职的英语教授考托福才考570分,想想这是个多么难的考试。当年,甚至若干年作者都不敢想象自己能够去考托福。直到2000年底,他急需要一份稳定的工作,想去新东方应聘,他花了4个月的时间专注学习,考了托福,考了GRE,拿了变态的成绩去应聘了新东方成为了那里的英语教师。他以亲身经历说明了一个问题,你学不好,是因为你不信,只有你相信你能做好,你才能真正做好。哪里有那么多天才呢?所谓的天才,只不过是反复练习,持之以恒的结果。

不要再“学”英语,你就应该“用”英语!这是最触动我的一句话,也是整本书的核心。大部分的人,包括我都是从初中、高中、大学,“学”了近十来年的英语,真正学会的人又有几个呢?只“学”不“用”的下场就是在十几年之后依然在学依然无用。依旧陷入从坚持到放弃的怪圈。学英语的核心其实是在用。只有不断地“用”,才能真正地学到,要不就会一直停留在“学”的阶段。既然不“用”就“学”不好,那不如从一开始就直接“用”。无论如何,一定要想明白对自己来说,英语真正的用处在哪儿?对于很多人来说,其实只要能够流利阅读英语或许已经足够了,至少对我来说已经够了。既然想要流利的阅读英语,那就直接从“用”英语阅读开始,抛开所谓的单词量、语法、语音、语调。不会的单词查字典,看不懂的句子查语法书。不管你是想流利的阅读,还是用英语交流,反正,用就是了。回想一下,也是哦,想想自己小学语文的经历,小学一年级还学下生字,二年级就开始学用字典查生字,以后慢慢的抛开字典可以自由的读写了。

其实如何通过“用”来学习外语,国学大师、学界泰斗季羡林,季老先生在自己的言传身教中已经说的非常清楚,并且可操作性非常强。他说到:“我想斗胆提出一个,‘无师自通’的办法,供胡同志和其他读者参考。你只需要找一位通德语的人,用上二三个小时,把字母读音学好。从此你就可以丢掉老师这个拐棍,自己行走了。你找一本有可靠的汉文译文的德文科技图书,伴之以一本浅易的德文语法。先把语法了解个大概的情况,不必太深入,就立即读德文原文,字典反正不能离手,语法也放在手边。一开始必然如堕入五里雾中。读不懂,再读,也许不止一遍两遍。等到你认为对原文已经有了一个大概的了解,为了验证自己了解的正确程度,只是到了此时,才把那一本可靠的译本拿过来,看看自己了解得究竟如何。就这样一页页读下去,一本原文读完了,再加以努力,你慢慢就能够读没有汉译本的德文原文了。”

嗯,我想我可以放心的放弃背单词,拿起我的那本英文版的《Spring in Action》开始慢慢啃了……


关注:“爱分享读书”微信公众号

“爱分享读书”微信公众号

读书我们是认真的

把时间当作朋友,相信我,你并不孤独

发表于 2020-01-05 | 更新于: 2021-08-22 | 分类于 读书 | | 阅读次数:
字数统计: 1.4k | 阅读时长 ≈ 4

把时间当做朋友
相信我,你并不孤独!自卑、对任何事情都没有兴趣、在工作多年后,对未来还是很迷茫,对自己的效率不满,对自己的能力怀疑。相信在此世间,此时此刻,困恼的不是我一个。

《把时间当作朋友》这本书2009年出版,现在这本书已经是第三版了,并且还推出了逻辑思维独家定制版。该书长期在豆瓣上评分都是在8.3分以上,无数人看了以后都感觉到相见恨晚,受益匪浅。作者李笑来原来是新东方的老师,现在号称是投资人,比特币首富。新东方的老师像创始人俞敏洪、锤子手机的老罗、古典等都有个特点,都很都善于灌鸡汤,兜售所谓的成功学,很有煽动性。可以理解像英语那么枯燥有难度的学习过程,如果没有成功学的激励被放弃的几率还是蛮大的。成功离不开鸡血,也少不了鸡汤。

《把时间当做朋友》
《把时间当作朋友》这本书从心智成长的角度来谈时间管理、学习方法、兴趣、人脉等成功的关键所在。虽然书中有个章节是”小心所谓的成功学”。但不可否认,这本书就是告诉大家如何了解时间,和时间做朋友,用心智成长开启自己的人生成功之旅的“成功学”。其中的某些观点和做法我觉得很有道理并值得付之于行动。

首先是对时间管理的认识,有很多书都在谈时间管理,而时间每天每个人都只有24小时,都在静静的不以人的意识为转移地流逝。时间它是不会听从任何人的管理,我们无法管理时间,我们真正能够管理的是我们自己。而管理好自己就是需要通过自己的大脑控制自己的大脑,需要有很强的意志力和成熟的心智。

管理好自己利用好时间,需要对自己的时间有个清楚的了解,知道自己的时间都花到哪里去了。最有效的办法就是《奇特的一生》的作者,苏联生物学家柳比歇夫的事件-事件日志记录方法。将自己每天做的每件事情都花的多少时间详细的记录下来。想尽一切办法真正了解自己,真正了解时间,精确地感知时间,而后再想办法使自己的行为与时间”合拍”,与时间做朋友。

学会了如何利用好自己的时间,接下来的就是行动。什么时候开始行动呢?如果要打算做某件事情,并且想做成的话,应该是立刻、马上、立即、now就开始行动!

开始行动后就要学会坚持。所有学习上的成功,都只靠两件事:策略和坚持,而坚持本身就是最重要的策略,坚持其实就是重复,而重复说到底就是时间的投入,任何领域想要取得卓越的成就都必须用一生的努力才能取得,想要出类拔萃,就要努力至少一万小时。

关于学习方法:

除了“试错”、“观察”、“阅读”之外,“思考”准确的说是“正确地思考”才是获得真正意义上的知识的主要手段。
提高自学能力

  1. 自学能力的基础技能是阅读理解能力。
  2. 检索能力是建立在相当熟练的阅读能力之上的能力。
  3. 写作能力在自学能力中占据着重要的地位。
  4. 实践能力是自学能力最终能够转换为真正价值的根本。
    教是最好的学习方法。

关于兴趣:

很多人,包括我自己,不知道自己的兴趣在哪里?或试图要培养自己的兴趣。书中的一段话给我很大的启示,只要一件事你能做好,并且做得比谁都好,或者至少比大多数人好,你就不会对那件事情没兴趣。往往并不是有兴趣才能做好,而是做好了才有兴趣。

大多数事情都需要孰能生巧,做得多了,自然就擅长了,擅长了,就自然比别人做得好,做得比别人好,兴趣就大起来了,而后就更加喜欢做,更擅长,更……良性循环。但同样做得多久需要大量的时间投入,没兴趣,往往只不过是结果而已,如果被当做不去做好的理由,最终的惩罚就是大量的时间白白的流逝。

关于人脉:

打造人脉不如打造自己,只有优秀的人才拥有有效的人脉。

关于书中讲到了通过自己的大脑控制自己的大脑。其实就是个人意志力的问题,只是书中换了个说法。个人的成功很大程度都是取决于个人意志力。通过意志力控制心智成长,让人成熟,成功。

如果你现在还在迷茫,相信我,你并不孤独。把这本书看完吧。再牛逼的人都有段苦逼的经历,如果你还在苦逼的过程中,请把时间当做朋友,沉下心来慢慢学习积累,收获成长,笃性自己能够成功!大家一起共勉。


关注:“爱分享读书”微信公众号

“爱分享读书”微信公众号

读书我们是认真的

终身学习时代,阅读是你大脑的磨刀石

发表于 2020-01-05 | 更新于: 2021-08-22 | 分类于 读书 | | 阅读次数:
字数统计: 1.7k | 阅读时长 ≈ 5

图书馆
在这个互联网信息知识大爆炸的时代,学习能力是每个人的核心能力,如何通过学习把知识转化为自己的能力,拓宽人生的可能性,是每个人孜孜不倦渴求的。而阅读,尤其是高效的阅读是掌握知识最简单、成本最低、也是最高效的学习方式。阅读能力是学习能力的根本,会阅读的人才会具备快速学习的能力和良好思维以及应变能力。认识到这一点,所以想读书的人越来越多,爱读书的人越来越多。但是很多人在阅读或培养阅读的过程中碰到了各种各样的困难和问题。如:知道阅读很重要,但是拿起书就想睡觉根本看不进书;没有时间阅读;读不懂,记不住,用不上等等。市面上也涌现了不少教大家阅读的书籍,如被誉为阅读圣经的《如何阅读一本书》、《越读者》、《书都不会读,你还想成功》、《如何高效读懂一本书》等等。

好脑筋需要书本,就如同宝剑需要磨刀石。

好脑筋需要书本,就如同宝剑需要磨刀石

通过阅读我们可以系统性地获取知识,但很多人在阅读习惯养成的前期也会面临很多问题,很多人对阅读有障碍、有困难,实际上是我们对阅读这件事的理解并不清晰透彻,我们应该了解阅读的本质。阅读的本质就是在可以利用的时间里,以你自己能理解的程度去学习。有些初学者了解到阅读的重要性以后,心情非常迫切,一上来就捧起大部头的书,或者比较深奥烧脑的书看,结果要不就是看几页昏昏入睡,要不就是看了几天都看不完,渐渐的失去了耐心,阅读兴趣和想培养的阅读习惯也就在屡次的打击中放弃了。其实要想开始阅读或培养阅读习惯,最有效的办法就是根据自己的能力先从一些入门级的自己感兴趣的书籍着手。在《书都不会读,你还想成功》的书中,就是建议先给自己定个计划读100本书开始,这100本书先抛开任何功利性的想法,不管什么书,只要是自己感兴趣的或者能够看得下去的书就可以,看不下去的书先放一边,通过100本书慢慢培养自己的阅读兴趣和习惯。先有了阅读兴趣和习惯,想看了愿意看了。再来谈阅读方法的问题,通过阅读方法解决看得快,记得牢的问题。再来逐渐选择高于自己目前能力的书籍进行有目的性的阅读。

其实阅读方法正如《洋葱阅读法》里所述,无非就是碎片化阅读、快速阅读、主题阅读。不管是那种阅读方法,都是需要带有强烈目的性的阅读,只有有目的的阅读,然后学以致用才能看得快,记得牢,用得上。

碎片阅读实际就是利用碎片化的时间,学习碎片化的内容。如何取得碎片化阅读的效果呢?有人每天都碎片化的阅读一些微信文章啥的,但是长期以来除了感觉有些文章写得不错每天点赞外,对自己并没有什么提高呢。其中最关键的就是要建立自己的知识体系。在基于自己的知识体系的基础上将阅读到的碎片化的内容补充到自己的知识体系中建立相应的联系。要不然阅读到的碎片还是碎片,不和已有的知识进行关联,永远都是碎片,久而久之久会忘记掉。没有自己的知识体系就相当于没有建立自己的银行账户,碎片化阅读看到的内容相当于打零工赚回来的钱没有地方放。东放一点,西放一点时间久了自然就忘记了。有了自己的知识体系就相当于建立自己的知识银行账户,打零工赚的钱可以零存整取,不断的往自己的知识体系中填砖加瓦,让自己的知识银行账户余额越存越多。

如何构建自己的知识体系呢,就要通过快速阅读和主题阅读。一本书本身的就是某个知识系统化的描述。所以要想系统的构建自己的知识体系,系统的看书是必经之路。

快速阅读的本质就是提升阅读的速度,快速掌握书中的知识。核心就是带着问题来阅读。在阅读之前,先了解一下自己读这本书的目的,梳理一下问题,为什么要读这本书,这本书能够解决我什么问题,自己以前有没有读过类似的书等等。通过快速的阅读,在书中找这些问题。有些无关紧要的描述就可以快速略看,与问题相关的仔细阅读。通过变速阅读达到快速了解一本书掌握关键知识点的目的。

主题阅读则更是为了构建自己的知识体系,在某个知识主题领域,通过广泛的阅读,同时阅读多本相同主题书的方式来深入对某个知识主题领域学习的过程。其主要目的是搞懂某个主题领域的知识。

当然不管是碎片化阅读、快速阅读、主题阅读,要想通过阅读来提高自己的能力,首先要有构建自己知识体系的意识;其次是通过某种方式彻底的搞懂自己没有懂的知识如通过反复阅读,一本书重复多读几遍或通过读同一知识点不同作者写的书来搞懂,或者通过费曼读书法将阅读的知识通过自己的理解用自己的方式讲述给懂的人;最后就是要学以制用,将通过阅读学到的知识在平时的工作、生活、学习等各个方面用起来。只有这样才能真正的通过阅读不断的提高自己的能力,真正找到阅读的乐趣,越读越有味,越读越想读!


关注:“爱分享读书”微信公众号

“爱分享读书”微信公众号

读书我们是认真的

用系统方式思考,高效的工作

发表于 2020-01-05 | 更新于: 2021-08-22 | 分类于 读书 | | 阅读次数:
字数统计: 827 | 阅读时长 ≈ 2

  用系统方式工作的思想是萨姆·卡彭特在《用系统来工作》的书中提到的。大家可以想想华为、富士康等公司为什么效率高?因为有一套系统化的流程让各个环节高效的运作。所以咱们也可以参考,运用到我们的工作、学习、生活中来,让我们更高效。

  所有工作都可以用系统的视角的思考。如管理公司、上班的日常工作、学一门技能、健身等等。
  首先我们要明确目标,比如管理公司我要达到什么经营目标,学习我要学到什么东西达到什么程度,减肥健身要达到什么效果,一定要有非常清晰的目标,最好是能够写下来,放在显眼的地方,时时关注。
  其次我们要制定准则,即达到实现目标的大的方针,比如减肥健身,准则可以定义为控制饮食、加强锻炼等。
  最后我们要明确做事的流程,如何明确流程?可以按照以下几点整理。
  1、分解每个工作的任务项。
   将一个工作分解成一个个可以操作的具体任务项。如开会可以分解为确定会议室、准备会议材料、通知会议参与人、做会议纪要、跟踪会议结论执行情况等等。
   如减肥健身可以分解为:合理饮食、准备活动、有氧运动、肌肉强化运动、睡眠休息等等。
  2、将每个工作任务项按依赖顺序整理形成固化的流程
   有些工作项是有依赖关系的,所以我们要按照依赖关系顺序整理成流程。先干什么,后干什么,这样做事才会更有条理,减少等待的时间更高效。
  3、给每个工作任务项提供说明指导
   就是将每个细化的工作项做到最好。在华为,所有的岗位,每项工作都有具体的作业指导书。在作业指导书中详细定义了这个环节需要做什么,具体怎么做,完成后如何检查反馈。这个作业指导书是不断总结完善的。所以不管是老手,还是新来的菜鸟,都可以很好并高效的完成。
  4、在实践的工作中不断完善流程
   一开始可能流程并不完善,我们可以在实际实施的过程中不断的优化调整,去掉一些不必要的环节,优化一些效率低下的环节,一切优化都是遵循我们开始定义的目标。

  通过系统方式思考做事情可以用到工作、学习、生活的各个方面,总的来说,就是明确目标、制定准则、定义流程,不断完善流程。将事情高效的做好。作为领导者,有了流程后,你还可以将这个流程交给任何一个人都可以做好。将自己释放出来。有更多的时间平衡工作、学习、生活。这就是系统的力量。


关注:“爱分享读书”微信公众号

“爱分享读书”微信公众号

读书我们是认真的

解决Hexo博客导航栏链接URL乱码问题

发表于 2020-01-04 | 更新于: 2021-08-22 | 分类于 技术 , 开发 | | 阅读次数:
字数统计: 728 | 阅读时长 ≈ 3

今年的计划之一是搭建一个博客,开始写博客。于是在网上找了一些博客程序发现用Hexo在gitHub上搭建自己的个人博客是比较简单而且易于维护的做法。
在网上找了一些教程后开始搭建,用自己比较中意的hexo-theme-next模板,发现搭建成功后导航栏链接不对,出现了URL乱码的问题。在网上搜索了一把发现有些网友也碰到了类似的问题不过都还没有解决。
我是从 https://github.com/Doublemine/hexo-theme-next.git 这里Fork下来的。仔细看了一下Fork下来的hexo-theme-next模板代码,尝试自己解决。

问题现象:

URL乱码出现在两个地方,一个是上面的导航栏,一个是右边栏的“日志”菜单部分。
导航栏链接乱码问题
乱码
右边栏的“日志”菜单部分链接乱码问题
乱码
发现链接后面都有乱码
乱码

解决方法:

1.解决导航栏URL乱码

查看themes\hexo-theme-next\layout_partials 下面的 header.swig 代码和模板的配置文件 \themes\hexo-theme-next_config.yml,发现导航栏链接乱码是因为菜单配置是有空格造成的。

1
2
3
4
5
6
7
8
<li class="menu-item menu-item-{{ itemName | replace(' ', '-') }}">
<a href="{{ url_for(path.split('||')[0]) | trim }}" rel="section">
{% if theme.menu_icons.enable %}
<i class="menu-item-icon fa fa-fw fa-{{ path.split('||')[1] | trim | default('question-circle') }}"></i> <br />
{% endif %}
{{ __('menu.' + name) | replace('menu.', '') }}
</a>
</li>

因为url_for函数会将字符串转码,碰到空格或其他特殊字符会进行转意,就会出现乱码。
解决的办法是修改模板的配置文件 \themes\hexo-theme-next_config.yml文件去掉空格就是的。
原始配置文件配置如下:
原始配置文件
去掉链接字符串的空格
去掉空格后的配置文件

2.解决右边栏的“日志”菜单部分URL的乱码

在 themes\hexo-theme-next\layout_macro 找到sidebar.swig 文件 找到如下代码

1
2
3
4
5
6
7
8
9
10
11
12
{% if config.archive_dir != '/' and site.posts.length > 0 %}
<div class="site-state-item site-state-posts">
{% if theme.menu.archives %}
<a href="{{ url_for(theme.menu.archives).split('||')[0] | trim }}">
{% else %}
<a href="{{ url_for(config.archive_dir) }}">
{% endif %}
<span class="site-state-item-count">{{ site.posts.length }}</span>
<span class="site-state-item-name">{{ __('state.posts') }}</span>
</a>
</div>
{% endif %}

将

1
<a href="{{ url_for(theme.menu.archives).split('||')[0] | trim }}">

修改成

1
<a href="{{ url_for(theme.menu.archives.split('||')[0]) | trim }}">

即可解决。

<1…91011>
XieJava

XieJava

102 日志
5 分类
18 标签
RSS
GitHub
友情链接
  • 爱分享读书
  • CSDN
  • 豆瓣
© 2023 XieJava | Site words total count: 191.3k

主题 — NexT.Muse
0%