python3 安装 FastDFS客户端

首先安装mutagen: pip install mutagen 时会报如下错误: ERROR: Could not install packages due to an EnvironmentError: HTTPSConnectionPool(host=’files.pythonhosted.org’, port=443): Max retries exceeded with url: /packages/30/4c/5ad1a6e1ccbcfaf6462db727989c302d9d721beedd9b09c11e6f0c7065b0/mutagen-1.42.0.tar.gz (Caused by SSLError(SSLError(1, ‘[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:852)’),)) 解决办法: 加入信任, 可加入多个: pip –trusted-host pypi.python.org –trusted-host pypi.org install –trusted-host files.pythonhosted.org mutagen 安装fdfs_client-py, 源码安装, 首先下载源码:

安装时会报如下错误: fdfs_client/sendfilemodule.c:43:20: fatal Read more…

CentOS 7 安装 Mysql5.5 或自定义版本 RPM 方式 

1. 下载 rpm 源 官网下载地址 因为是 CentOS7 我选择的是Red Hat Enterprise Linux 7 / Oracle Linux 7 (Architecture Independent), RPM Package 点击“download” 弹出的下载页面,右键 “ No thanks, just start my download.” 复制链接 比如我复制下来是 :https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm

2. 添加 yum mysql 的仓库 以下命名在 /home/mysql 目录下执行,或者加上目录路径执行也可

如果没有权限,用 sudo 执行 3. 自定义 mysql 安装的版本 3.1 Read more…

Python3: No module named ‘_tkinter’解决

2019-09-12更新: 参考: https://www.z1987.com/blog/detail/c1570f5604fbcee5020dd8a5fabf01d0 发现个更简单的做法:

我的是Python7.6, 故安装:

  旧: 在实验用networkx画图时, 在执行如下命令时报错:

环境介绍 centos: 7.6.1810 Python: 3.7.4 基于virutalenv来切换不同的Python环境 什么是tkinter, tcl ,tk The tkinter package (“Tk interface”) is the standard Python interface to the Tk GUI toolkit. Both Tk and tkinter are available on most Unix platforms, as well Read more…

Nginx配置文件nginx.conf中文详解

 

自动检测nginx日志,并自动更新iptables

inotify-tools 是一个用C语言库,一个为Linux提供简单inotify接口的命令行程序。这些程序可以用于监视文件系统事件并执行相应操作。这些程序是用C语言来写的,除了需要Linux内核的inotify支持外,没有其他的依赖。inotify-tools 3.14是目前最新版本,其于2010年3月7日发布。 那么什么inotify又是什么? inotify,它是Linux在内核 2.6.13 (June 18, 2005)版本中引入的一个新功能,它为用户态监视文件系统的变化提供了强大的支持,允许监控程序打开一个独立文件描述符,并针对事件集监控一个或者多个文件,例如打开、关闭、移动/重命名、删除、创建或者改变属性。 下面脚本目的是: 实时检测nginx访问日志, 提取remote_addr, 并对比iptables配置文件,  如果没有的话就自动更新iptables 安装inotify: yum install inotify-tools # 2019-08-17更新: 坑点1: 可以自动修复iptables报错, 方法是查出报错行, 然后递归删除, 之所以要递归删除, 是因为journalctl报错只能看到执行到哪一行报的, 不能显示全部报错行, 只能是依次reload iptables才能找到所有报错行. 坑点2:  之前用journalctl -n 50 -u iptables 去查找最后50行日志, 导致iptables被误删了好多规则, 观察报错, 一般是最后8行是最近一次reload的日志, 所以改成了journalctl -n 7 -u iptables. monitor.sh:

启动:

加入开机启动:

Read more…

TCP/IP三次握手、四次挥手、11种状态知识点整理

TCP三次握手建立连接 Tcp头部:   六个标志位中,我们要用到三个: SYN:SYNchronous,SYN= 1 表示这是一个连接请求或连接接受报文。在建立连接时用来进行同步序号(个人理解是,在建立连接的时候,提醒对方记录本方的起始序号)。当SYN=1而ACK=0时,表明这是一个连接请求报文段。对方若是同意建立连接,则应响应的报文段中使SYN=1、ACK=1。因此SYN=1表示该报文是一个连接请求报文或者是一个连接请求接收报文。 ACK:ACKnowledgment,确认号只有在该位设置为1的时候才生效,当该位为0是表示确认号无效。TCP规定,在TCP连接建立后所有传送的数据报文段ACK都必须设置为1。 FIN:FINish,当 FIN = 1 时,表明此报文段的发送方的数据已经发送完毕,并要求释放连接。   此外我们还需要用到序号和确认号: 序号:占4个字节,它的范围在0-2^32-1,序号随着通信的进行不断的递增,当达到最大值的时候重新回到0在开始递增。TCP是面向字节流的,在一个TCP连接中传送的字节流中的每一个字节都按照顺序编号。整个要传送的字节流的起始号必须在连接建立时设置。首部中的序列号字段指的是本报文段所发送的数据的第一个字节的序号。例如,一个报文序号是301,而携带的数据共有100字节。则表示本次报文中的序号是301,下一个报文的序号是401.重复一下,每一个报文的序号是该报文包含的字节中第一个字节的编号。 确认号:占4个字节,确认号,是对下一个想要接受的字节的期望,这里隐式确认了对上一个数据包的成功接收。如上例,在成功接收了序号为301的数据包,想要接收下一个数据包因为上个数据包包含100字节,所以此时的确认号应该是401,表示希望接收下一个序号是401的数据包。 三次握手过程:   过程描述: 首先由Client发出请求连接即 SYN=1 ACK=0  (请看头字段的介绍),TCP规定SYN=1时不能携带数据,但要消耗一个序号,因此声明自己的序号是 seq=x。 然后 Server 进行回复确认,即 SYN=1 ACK=1 seq=y,ack=x + 1。 再然后 Client 再进行一次确认,但不用SYN 了,这时即为 ACK=1,seq=x + 1,ack=y + 1。 为什么要进行三次握手(两次确认): 为什么A还要发送一侧确认呢?这主要是为了防止已失效的连接请求报文突然又传送到了B,因而产生错误。 所谓“已失效的连接请求报文段”是这样产生的。考虑一种正常情况。A发出连接请求,但因连接请求丢失而未收到确认。于是A再次重传一次连接请求。后来收到了确认建立了连接。数据传输完毕后,就释放了连接。A共发送了两个连接请求的报文段,其中第一个丢失,第二个到达了B。没有“已失效的连接请求报文段”。 现假定出现一种异常情况,即A发出的第一个连接请求报文段并没有丢失,而是在某些网络节点长时间滞留了,以致延误到连接释放以后的某个时间才到B。本来这是一个已失效的报文段。但是B收到此失效的连接请求报文段后,就误认为是A有发出一次新的连接请求。于是就向A发出确认报文段,同意建立连接。假定不采用三次握手,那么只要B发出确认,新的连接就建立了。 由于现在A并没有发出建立连接的请求,因此不会理睬B的确认,也不会向B发送数据。但B却以为新的运输连接已经建立了,并一直等待A发来数据。B的许多资源就这样白白浪费了。 采用三次握手的办法可以防止上述现象的发生。例如在刚才的情况下,A不会向B的确认发出确认。B由于收不到确认,就知道A并没有要求建立连接。 另一种解释: 这个问题的本质是, 信道不可靠, Read more…

Docker镜像存储结构与原理

Docker容器镜像存在哪儿,怎么存放? Docker容器在运行的过程中,只有小部分的数据可能需要写到容器可写层,因为大部分场景下,我们可以通过Docker volumes来写数据, 但是某些场景下,就是需要往容器可写层写数据,这就是Docker存储驱动Storage Driver出现的原因,这些存储驱动必须是采用层堆叠以及copy-on-write策略。 Docker采用可插拔的方式支持一些不同的存储驱动,存储驱动控制了镜像和容器在宿主机上如何管理以及存储。如果系统内核支持多种存储驱动,在没有明确设置 存储驱动时,Docker会根据优先级(btrfs,zfs,overlay2,aufs,overlay,devicemapper,vfs)顺序进行选择,排在前面的储存驱动并不总是会被Docker采用, 因为有些存储驱动对文件系统或者内核有硬性要求。 Docker支持如下storage driver: overlay2 Docker优先采用的存储驱动,对于已支持该驱动的Linux发行版,不需要任何进行任何额外的配置。 aufs Docker 18.06以下版本运行在Ubuntu 14.04以及kernel 3.13上,不支持overlay2,首选aufs。 devicemapper 默认的配置模式是loopback-lvm,但是在生产环境时Docker不推荐这种模式,它的性能非常差,我们需要将其配置成direct-lvm。 对于早期的CentOS和RHEL,devicemapper是推荐的存储驱动,因为它们对应的内核版本不支持overlay2,不过,我们现在版本的CentOS与RHEL均已支持overlay2。 btrfs and zfs Docker安装所在的宿主机文件系统是btrfs或者zfs,则Docker优先使用它们作为存储驱动,这些文件系统具有一些高级的选项配置,比如创建快照(snapshots)等。 vfs Docker不推荐用于生产环境,只用于测试,性能比较差,可能无法支持copy-on-write策略。 注意一些存储驱动要求使用特殊版本的文件系统,比如aufs仅在Ubuntu或者Debian系统被支持, 并且需要安装一些额外的依赖包,而btrfs仅在SLES被支持。 我们大多数人使用的应该都是Docker社区版本,下面列举了社区版Docker引擎在各Linux发行版中推荐的存储驱动。 Linux发行版 推荐的存储驱动 备选存储驱动 Ubuntu overlay2、 aufs(运行在内核3.13上的Ubuntu 14.04) overlay、devicemapper、 zfs、vfs Debian overlay2(Debian扩展版本)、 aufs、devicemapper(老版本) overlay、vfs CentOS overlay2 overlay、devicemapper、 zfs、vfs Fedora overlay2 overlay、devicemapper、 zfs、vfs Read more…

修改PAC文件及user-rule文件可实现自动代理

使用Shadowsocks打不开网站,修改PAC文件及user-rule文件可实现自动代理 Shadowsocks作为现在一种很流行的穿墙工具,以其轻量级、速度感人等优点深受广大网友热捧。与VP_N相比,他就像一把锋利的”瑞士军刀”,不用受制于“系统全局代理”模式的困扰,控制更加便捷,基于Socks5安全加密协议,防止GF*W通过分析流量特征从而干扰的问题。而又不像GoAgent这种集中式爬墙模式,一般不会出现全局封锁等现象。不管你是因为什么原因喜欢上Shadowsocks,我相信她一定有给你带来好的体验的方面。 在Shadowsocks里面,系统代理模式有两种,一种是“全局模式”,另一种是“PAC模式”,通常情况下我们会选择PAC模式,今天这里给大家解析一下PAC模式的原理以及如何修改PAC文件、user-rule文件实现自动代理,希望大家可以通过本文更的“科学上网”。 什么是PAC 代理自动配置(英语:Proxy auto-config,简称PAC)是一种网页浏览器技术,用于定义浏览器该如何自动选择适当的代理服务器来访问一个网址。 一个PAC文件包含一个JavaScript形式的函数“FindProxyForURL(url, host)”。这个函数返回一个包含一个或多个访问规则的字符串。用户代理根据这些规则适用一个特定的代理其或者直接访问。当一个代理服务器无法响应的时候,多个访问规则提供了其他的后备访问方法。浏览器在访问其他页面以前,首先访问这个PAC文件。PAC文件中的URL可能是手工配置的,也可能是是通过网页的网络代理自发现协议(Web Proxy Autodiscovery Protocol)自动配置的。 上面是从维基百科摘录的关于PAC的解释,我做了一个简单的图片解释什么是PAC: 简单的讲,PAC就是一种配置,使用Shadowsock发送网址浏览请求时,通过PAC里面的的逻辑函数判断让你的浏览器智能的选择哪些网站走代理,哪些不需要走代理。 用过Shadowsocks的朋友应该会知道, shadowsocks.exe 同级目录下有一个 pac.txt 文件,这正是我们本文刚刚所说的pac配置文件。 打开 pac.txt 文件(建议使用Notepad软件打开,自带文本文档打开修改后可能无效),可以看到如下内容: 可以看到pac配置文件是用的JavaScript语法,里面有一个变量 rules ,是一个JSon数组格式的数据类型,数组里面存放的是各种URL的通配符,那么在pac模式下,如果当访问符合这个数组里面任意一个URL通配符的网址时,系统会走代理,反之直连。比如图中pac配置,如果访问 http://www.google.com 时,会走代理,而访问百度、新浪等国内网站则会选择直连方式。 PAC的优势 PAC自动代理属于智能判断模式,相比全局代理,它的优点有: 不影响国内网站的访问速度,防止无意义的绕路 节省Shadowsocks服务的流量,节省服务器资源 控制方便 PAC文件及user-rule文件的语法规则 在使用Shadowsocks时,发现无法访问自己想浏览的网站了,这时候需要我们手动添加网址到PAC文件里实现翻墙浏览。在Shadowsocks根目录里面有pac.txt文件和user-rule.txt两个文件,添加到这两个任何中的一个文件里面都可以实现翻墙浏览。如何添加请看下面: 1. 添加到 pac.txt 文件中 编辑 pac.txt 文件,模仿里面的一些URL通配符,再添加一个,例如”||ip138.com”, ,注意不要忘记了 , 半角逗号,那么意思就是所有 ip138.com域名下的网址都将走Shadowsocks代理,打开ip138可以看到IP已经变成Shadowsocks所用的国外代理了。 2. 添加到 user-rule.txt 文件中 编辑 user-rule.txt 文件,这里和 pac.txt 文件语法不完全相同,user-rule文件中,每一行表示一个URL通配符,但是通配符语法类似。例如添加一行||ip138.com^ ,然后记得右键小飞机-PAC-从GFWList更新本地PAC,打开ip138可以看到IP已经变成Shadowsocks所用的国外代理了。 注意末尾不要忘记 ^ 符号,意思是要么在这个符号的地方结束,要么后面跟着?,/等符号。 自定义代理规则的设置语法与GFWlist相同,语法规则如下: 通配符支持。比如 *.example.com/* 实际书写时可省略 * , 如.example.com/ , 和 *.example.com/* 效果一样 正则表达式支持。以 \ 开始和结束, 如 \[\w]+:\/\/example.com\ 例外规则 @@ ,如 @@*.example.com/* 满足 @@ 后规则的地址不使用代理 匹配地址开始和结尾 | ,如 |http://example.com 、 example.com| 分别表示以 http://example.com 开始和以 example.com 结束的地址 || 标记,如 ||example.com 则 http://example.com 、https://example.com 、 ftp://example.com 等地址均满足条件 注释 ! 。 如 !我是注释 更多user-rule.txt语法规则,可以参考AdBlockPlus过滤规则https://adblockplus.org/en/filter-cheatsheet 备注:建议直接使用方法2,在user-rule.txt文件里面添加。因为Pac.txt文件可能会因为更新的问题把原先添加进去的网址给覆盖掉。

shell中,使用sed 替换单引号和双引号的几种写法

在shell中, 使用sed进行替换的时候,因为替换命令本身就是在引号中的,所以书写的时候,就需要注意书写的格式,这里总结几种写法。最简单的是 echo “this is”’ test\” string” | sed $’s/\’//g’

 

hexo博客开机自启动

vps机器重启后, hexo博客502了, 发现没有做开机自启动. npm用pm2做托管: 创建hexo-backrun.js:

创建pm2-config.json:

创建hexo.service:

systemctl deamon-reload && systemctl start hexo && systemctl enable hexo