秉着将白嫖进行到底的宗旨,决定不再续费 VPS,博客从转移到 Github,使用 Hexo。

第一步:将 Typecho 文章转为 Hexo 文章格式

Hexo 的文章在网站\source\_posts\目录下,Markdown 格式,内容包含了文章标题、发布时间、更新时间、分类、标签、固定连接、文章内容等信息,所以流程就是从 Typecho 数据库中查询出这些数据,拼接成 Hexo 文章的格式,写入.md文件。

查询文章 SQL:

select title,slug,text,created,modified,category,tags from typecho_contents c,(select cid,group_concat(m.name) tags from typecho_metas m,typecho_relationships r where m.mid=r.mid and m.type='tag' group by cid ) t1,(select cid,m.name category from typecho_metas m,typecho_relationships r where m.mid=r.mid and m.type='category') t2 where t1.cid=t2.cid and c.cid=t1.cid

结果入下:
Typecho 数据库

  • slug为固定链接,需要将文件名设置为此;
  • text为文章内容,由于我Typecho文章设置的是 Markdown 格式,所以只需要将 <!--markdown-->这段内容替换为空即可;
  • createdmodified为发布时间和更新时间,需要转换为字符串,moment.unix(post.created).format("YYYY-MM-DD HH:mm:ss")
  • categorytags可能有多个,"tags:\n- " + tags.replace(',',"\n- ") + "\n"

    - 阅读剩余部分 -

PowerShell 中使用Copy-Item将一个项目从一个位置复制到另一个位置,可以是复制单个文件、也可以复制文件夹。

复制文件和文件夹

最简单的复制一个文件到另一个文件夹内,如果目标文件夹不存在会自动创建。

Copy-Item "E:\PowerShell\form\1.txt" -Destination "E:\PowerShell\to\"

如果-Destination参数是文件名,就会重命名文件。

Copy-Item "E:\PowerShell\form\1.txt" -Destination "E:\PowerShell\to\2.txt"

使用通配符可以复制文件夹内所有文件到另一个文件内,加上-Recurse就能复制所有的文件和子文件夹的内容。

Copy-Item "E:\PowerShell\form\*" -Destination "E:\PowerShell\to\" -Recurse

- 阅读剩余部分 -

为了第一时间收到服务器的状态信息,例如故障信息,Zabbix 提供了很多报警方式,自动发送邮件、短信,自定义脚本等等。
当服务器触发了某些事件,这些事件满足一定条件时,Zabbix 会通过“报警媒介”通知“用户”,例如某个服务器的 Zabbix Agent 服务无法连接,就通过发送邮件通知 Admin 用户。

第一步,设置报警媒介(配置邮箱账号)

在“管理-报警媒介类型”页面选择 Email,设置好发件服务器、邮箱账号、密码等信息,以后所有报警邮件将都通过这个邮箱发出。
zabbix-email.png

- 阅读剩余部分 -

Debian 10 安装 Zabbix 5.4文中介绍了如何安装 Zabbix,本文将详细介绍 Zabbix 的功能、使用、常见问题。

Zabbix 是什么

根据官方文档介绍,Zabbix 是一种企业级的分布式开源监控解决方案,Zabbix 是一款能够监控众多网络参数和服务器的健康度和完整性的软件……说人话,通过 zabbix 可以搭建一个监控平台,查看各个被监控设备的各种状态,例如网络流量,网络延迟,CPU 使用情况,内存使用情况,等等等等。

Zabbix 主要包括三个部分,服务端(Zabbix Server),客户端(Zabbix Agent),网站。客户端安装在要监控的设备上,收集数据发送给服务端,服务端经过处理将数据存储到数据库,最终用户通过网站来管理查看这些数据。

Zabbix 添加主机

在“配置-主机”页面可以添加主机,设置主机名称、群组,interfaces 接口是设置通过什么方式来收集被监控主机的数据,这里选择客户端,也就是 Zabbix Agent,填好被监控主机的 IP,端口默认为 10050。
zabbix-host.png

- 阅读剩余部分 -

本文以腾讯云轻量服务器 Debian 10 为例,采用 Zabbix 5.4+MySQL+Nginx 的组合。

安装和配置 Zabbix Server

第一步,下载和安装 Zabbix 软件包

wget https://repo.zabbix.com/zabbix/5.4/debian/pool/main/z/zabbix-release/zabbix-release_5.4-1+debian10_all.deb
dpkg -i zabbix-release_5.4-1+debian10_all.deb
apt update

第二步,安装 Zabbix server,frontend,agent

apt install zabbix-server-mysql zabbix-frontend-php zabbix-nginx-conf zabbix-sql-scripts zabbix-agent

安装和配置 Zabbix 的数据库

第一步,下载和安装 MySQL 5.7

wget http://repo.mysql.com/mysql-apt-config_0.8.13-1_all.deb
dpkg -i mysql-apt-config_0.8.13-1_all.deb

如果提示gnupg is not installed则需要安装 gnupg:apt install gnupg

- 阅读剩余部分 -

“下面播报一条广播室刚收到的消息,苹果公司 CEO 将于本周三到我校访问,请各位同学统一着装,穿好校服……”

“怎么厨子又要来,不知道这次是哪个班级倒霉”,莫姐一边摆弄着新买的 iPhone 一边自言自语。

这已经是他们第三次来学校了,每次主题都有不同,唯一相同的就是都需要考试,有几个学生会喜欢考试呢。

- 1 -

库克走到讲台,示意助手发卷, “感谢各位同学参加这场特殊的考试,考试结果并不会记入档案,请大家任意发挥”,除了试卷女助手另外还发了铅笔、圆珠笔、钢笔各一只,“为了答谢大家,我们还准备了公司 100% 自主研发的菜品,健康环保,考试结束后就能品尝。”

“不愧是大公司呀,连文具都这么精致”,“这女秘书真漂亮”……这不是 W 吗,多年不见,混这么好了……

- 阅读剩余部分 -

“自打我做了开颅手术以后吧,我就总能梦见一片湖。那湖边呢,还站着一个姑娘。然后吧我就特别想看清她的脸,就是阳光太刺眼,不太看得清。”

- 1 -

终于赶在下映前和莫姐一起去看《送你一朵小红花》,又是下雨,似乎总是和莫姐在雨中前行。

“Hi,老同学”,我看到前面一个熟悉的背影。

她转过身,笑了笑,和同行的男生细声说:“那是我以前的高中同学,毕业后我们遇到过几次,你别多想,我们没留联系方式。”

想想确实如此,和老同学 W 其实只同班过一学期,那时手机和 QQ 都还没流行,毕业后一次是在公交车上看到她在站台,一次是在高铁上看到她在站台。

进场后 W 坐我们后面一排,我还看到 B 一家三口也来了,坐在 W 后面一排,我挥挥手打招呼,她 5 岁的儿子高兴的尖叫一声,B 捂住他的嘴,W 翻了一个白眼。

- 阅读剩余部分 -

B 站刷到一个榨干光猫所有能力的视频,解决了客厅没法同时使用千兆网络和 IPTV 的问题。

光猫在家门口弱电箱,只有一条网线到客厅,客厅放路由器和电信 iTV 机顶盒,几年前通网的时候电信师傅直接把网线分成两股,一个接路由器一个接机顶盒,带来的问题就是连路由器最高速率只有 100Mbps,后来网络升级后只好放弃 iTV 把网线又合并回去,看电视直播改用软件。

路由器为华为 TC7102,后台设置可设置绑定 IPTV 的参数,网口4 连接机顶盒用,VLAN ID802.1p 的值需要去去光猫后台里查看。
Huawei-TC7102.png

- 阅读剩余部分 -

意外发现一个获取电信光猫 TEWA-500 超级密码的工具,于是有了这次折腾之旅,最终达到的效果是可以在公网访问家里的群晖设备。

获取公网 IP

首先,你家的网络获取到的必须是公网 IP,可以直接找运营商客服设置。

开启光猫的 DMZ 功能

获取到密码后进入光猫后台,如下图开启 DMZ 功能,主机的地址根据情况填写,我这里是光猫下的路由器地址。
synology1.jpg

- 阅读剩余部分 -

Google App Script 中的 SpreadsheetApp 服务可以读取、创建、修改 Google Sheet。
例如下方代码,SpreadsheetApp.getActiveSpreadsheet()方法得到当前表格文件对象(Spreadsheet),currentSpreadsheet.getActiveSheet()方法得到当前工作表对象(Sheet),currentSheet.getCurrentCell()得到当前活动单元格对象(Range),再通过单元格对象的getValue方法获取到活动单元格的值。

function logCurrent() {
  let currentSpreadsheet = SpreadsheetApp.getActiveSpreadsheet()
  let currentSheet = currentSpreadsheet.getActiveSheet();
  let currentRange = currentSheet.getCurrentCell();
  console.log(currentRange.getValue());
}

由小到大,可以把 Google Sheet 分为 Range、RangeList、Sheet、Spreadsheet。

Range

Range 是 Google Sheet 里的最小元素,表示单元格的区域,可以是一个单元格或者是一组单元格
当是一个单元格时可以用getValue()方法获取单元格显示的值,返回字符串;当是一组单元格则需要用getValues()来获取值,返回一个二维数组,第一层为行,第二层为列。

如下图,data最终的值为[[1,2],[3,4]]
spreadsheetapp1.JPG

function logData() {
  let sheet = SpreadsheetApp.getActiveSheet();
  let range = sheet.getDataRange()
  let data = range.getValues();
  console.log(data);
}

- 阅读剩余部分 -