分类 闲杂记事 下的文章

命令行下的json解析工具jq

今天想给寝室里做服务器的那台电脑做一个动态解析,恰好Dnspod提供了API,好吧就用它了。看了其官方文档发现它的返回结果是用的json格式,那么我想在Linux开机的时候自动将某个域名记录的值设置为本机IP,就得做一个shell脚本放在Linux开机启动项里面(虽然说写一个程序也可以,但那样太麻烦了,而且维护也不方便)。

DNSPOD的API的调用方法和我想象的不一样啊,我原本以为修改某个记录只需要类似下面的命令:

curl https://dnsapi.cn/?email=xxx@xxx.com&password=xxx&record=www.xxx.com&recordtype=A&value=1.2.3.4

结果事实上是这样的:

1.通过Dnspod API获得域名ID;
2.通过Dnspod API,提供域名ID作为参数,获得域名的记录的ID;
3.通过DNSpod API,提供域名ID、记录ID作为参数,更新该记录的值。

好繁琐,如果前两步返回的是纯ID倒还好,但实际上是返回的json格式的信息,还得把里面的域名ID或者记录ID解析出来才行。

网上找了一下,发现了jq这个软件,是专门用来在命令行下解析json格式的信息的。

因为使用很灵活,官网上也提供了一大堆示例,我就懒得写例子了,反正用起来挺方便的。

官网实例:http://stedolan.github.io/jq/manual/

下载地址:http://stedolan.github.io/jq/download/

被移动奇葩的网络坑后的小记

我在学校用的校园网,出口是教育网/移动切换。
访问电信、联通、教育网走的是教育网出口
访问移动、小运营商、国外是走的移动出口


大家可能知道libiconv-1.14的一个BUG,就是那个'gets' undeclared here,编译PHP之前必须先编译libiconv
于是我把源码fix以后重新打包了一个libiconv-1.14.tar.gz放在我的国外网站上。

我在宿舍给一台以前的电脑安装CentOS 7,安装CentOS 7以后我开始安装AMH(这个AMH安装脚本是我自己DIY过的,能支持CentOS 7)
结果竟然出现了那个'gets' undeclared here错误,我查看下载下来的源码,发现竟然没有fix?然后我重新检查了服务器上的压缩包,里面确确实实修复了BUG的啊,为什么下载下来的文件和服务器上的文件不一样?

然后我重新从我的服务器上wget了一下我那个修改过的libiconv-1.14.tar.gz

发现问题了:


20140918015041


怎么突然来了个302跳转?我服务器上没设置这个跳转规则啊!


开始我没留意这串地址的问题,我使用站长之家的HTTP状态查询工具查询我那个URL地址,返回的是正常的200状态码,于是我开始怀疑是wget自带的校验,因为这个libiconv-1.14.tar.gz是被我修改过的,所以可能wget发现有问题就自动跳转到ftp.qnu.org上去下载官方版本了,但不管我URL地址的后半部分怎么填,即便是一个不存在的URL地址,只要最后的文件名是libiconv-1.14.tar.gz ,他都会302跳转到下面那一串地址。

折腾了十多分钟,才想起仔细观察这个302后的地址,查了一下那个211.136.8.30的IP地址,卧槽,北京移动!!!!!!我瞬间知道原因了——移动大缓存服务器!!

关于“移动大缓存服务器”我不想多讲,简单来说就是,移动的网络就是很多NAT+很多缓存服务器构成的,使用移动宽带(包括我们学校的移动出口)的时候,我们发出去的HTTP请求很多都被移动重定向到了它的缓存服务器上了,这样移动公司就可以节省很多网间结算的费用,因为如果直接访问国外服务器或者国内的电信、联通服务器,移动公司是要给国外的网络运营商或者电信公司、联通公司付钱的,所以它用了一大堆缓存服务器来缓存其它运营商的内容,这样就能省下很多钱!!!

移动这个大奇葩网络,处处都是访问缓存,它重定向之前检查一下文件内容或者对比一下文件的修改时间也好啊,只要文件名一致就直接匹配到他的缓存上面去了!我在自己的网站上放了一个空白记事本,改名为libiconv-1.14.tar.gz,然后访问这个空白文件,它照样302跳转!!这尼玛。。。

Linux下禁止删除某文件

由于某种特殊要求,某个程序必须以root权限运行,但我又不想让它修改或者删除某个文件,怎么办呢?
之前一直折腾chmod和chown,但root权力太大了,不管怎么设置权限,root都能改。
在网上搜索了一下才知道Linux下有个命令chattr,它是修改文件在磁盘上的属性。通过-i可以实现我想要的功能。

chattr [-RV][-v<版本编号>][+/-/=<属性>][文件或目录...]

属性值:
A:即Atime,告诉系统不要修改对这个文件的最后访问时间。
S:即Sync,一旦应用程序对这个文件执行了写操作,使系统立刻把修改的结果写到磁盘。
a:即Append Only,系统只允许在这个文件之后追加数据,不允许任何进程覆盖或截断这个文件。如果目录具有这个属性,系统将只允许在这个目录下建立和修改文件,而不允许删除任何文件。
b:不更新文件或目录的最后存取时间。
c:将文件或目录压缩后存放。
d:当dump程序执行时,该文件或目录不会被dump备份。
D:检查压缩文件中的错误。
i:即Immutable,系统不允许对这个文件进行任何的修改。如果目录具有这个属性,那么任何的进程只能修改目录之下的文件,不允许建立和删除文件。
s:彻底删除文件,不可恢复,因为是从磁盘上删除,然后用0填充文件所在区域。
u:当一个应用程序请求删除这个文件,系统会保留其数据块以便以后能够恢复删除这个文件,用来防止意外删除文件或目录。
t:文件系统支持尾部合并(tail-merging)。
X:可以直接访问压缩文件的内容。

参数:
-R 递归处理,将指定目录下的所有文件及子目录一并处理。
-v<版本编号> 设置文件或目录版本。
-V 显示指令执行过程。
+<属性> 开启文件或目录的该项属性。
-<属性> 关闭文件或目录的该项属性。
=<属性> 指定文件或目录的该项属性。

Linux流量监控工具iftop

介绍

iftop是一款实时流量监控工具,监控TCP/IP连接等,缺点就是无报表功能。必须以root身份才能运行。

安装

wget http://linux.linzhihao.cn/shell/iftop.sh
sh iftop.sh

实例

默认是监控第一块网卡的流量

iftop

监控eth1

iftop -i eth1

直接显示IP, 不进行DNS反解析

iftop -n 

直接显示连接埠编号, 不显示服务名称:

iftop -N

显示某个网段进出封包流量

iftop -F 192.168.1.0/24 or 192.168.1.0/255.255.255.0

进入iftop的命令
进入iftop画面后的一些操作命令(注意大小写)
按h切换是否显示帮助;
按n切换显示本机的IP或主机名;
按s切换是否显示本机的host信息;
按d切换是否显示远端目标主机的host信息;
按t切换显示格式为2行/1行/只显示发送流量/只显示接收流量;
按N切换显示端口号或端口服务名称;
按S切换是否显示本机的端口信息;
按D切换是否显示远端目标主机的端口信息;
按p切换是否显示端口信息;
按P切换暂停/继续显示;
按b切换是否显示平均流量图形条;
按B切换计算2秒或10秒或40秒内的平均流量;
按T切换是否显示每个连接的总流量;
按l打开屏幕过滤功能,输入要过滤的字符,比如ip,按回车后,屏幕就只显示这个IP相关的流量信息;
按L切换显示画面上边的刻度;刻度不同,流量图形条会有变化;
按j或按k可以向上或向下滚动屏幕显示的连接记录;
按1或2或3可以根据右侧显示的三列流量数据进行排序;
按<根据左边的本机名或IP排序;
按>根据远端目标主机的主机名或IP排序;
按o切换是否固定只显示当前的连接;
按f可以编辑过滤代码,这是翻译过来的说法,我还没用过这个!
按!可以使用shell命令,这个没用过!没搞明白啥命令在这好用呢!
按q退出监控。

随记(一)

尼古拉·特斯拉,今天无意中因为一部电影再次想起这个名字,这个谜一样的人,每次提到这个人,我都无法用语言描述那种感受,只能说我从他身上感受到了不一样的科学。有的时候,总有个念头出现在我脑海中,跳出一个圈子,用另一种方式来认知某些事物,看到的是另一番景象。又让我想到了《桃花源记》里面那句话:初极狭,才通人。复行数十步,豁然开朗。