通过 curl 检测网站是否开启了 gzip 压缩

curl -H "Accept-Encoding: gzip" -I https://www.guohuawei.com

返回结果:

HTTP/2 200
date: Thu, 30 May 2019 10:22:26 GMT
content-type: text/html; charset=UTF-8
set-cookie: __cfduid=da62a867e8f6cabdd6cfc5b8c606145001559211746; expires=Fri, 29-May-20 10:22:26 GMT; path=/; domain=.guohuawei.com; HttpOnly
x-pingback: http://www.guohuawei.com/action/xmlrpc
expect-ct: max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"
server: cloudflare
cf-ray: 4deffca51a00962f-SJC
content-encoding: gzip

通过 curl 查看请求响应时间

# curl -o /dev/null -s -w %{time_namelookup}::%{time_connect}::%{time_starttransfer}::%{time_total}::%{speed_download}"\n" http://www.guohuawei.com

0.014::0.015::0.018::0.019::1516256.00

-o:把curl 返回的html、js 写到垃圾回收站[ /dev/null]
-s:去掉所有状态
-w:按照后面的格式写出rt

time_namelookup:DNS 解析域名 www.guohuawei.com 的时间
time_commect:client和server端建立TCP 连接的时间
time_starttransfer:从client发出请求;到web的server 响应第一个字节的时间
time_total:client发出请求;到web的server发送会所有的相应数据的时间
speed_download:下周速度 单位 byte/s

上面这条命令及返回结果可以这么理解:

0.014: DNS 服务器解析 www.guohuawei.com 的时间单位是s
0.015: client发出请求,到c/s 建立TCP 的时间;里面包括DNS解析的时间
0.018: client发出请求;到s响应发出第一个字节开始的时间;包括前面的2个时间
0.019: client发出请求;到s把响应的数据全部发送给client;并关闭connect的时间

1516256.00 :下载数据的速度

建立TCP连接到server返回client第一个字节的时间:0.018s - 0.015s = 0.003s
server把响应数据发送给client的时间:0.019s - 0.018 = 0.01s

在服务器上跑脚本,经常需要长时间运行,这种时候如果 shell 窗口关闭,或者遇到网络连接问题导致客户端 shell 连接问题,都会影响服务器端的脚本执行,此时就需要将进程挂起到后台执行。

nohup 是常用的命令,简单易用。

一、nohup

用途:不挂断地运行命令。

语法:nohup Command [ Arg … ] [ & ]

  无论是否将 nohup 命令的输出重定向到终端,输出都将附加到当前目录的 nohup.out 文件中。

  如果当前目录的 nohup.out 文件不可写,输出重定向到 $HOME/nohup.out 文件中。

  如果没有文件能创建或打开以用于追加,那么 Command 参数指定的命令不可调用。

退出状态:该命令返回下列出口值:
  
  126 可以查找但不能调用 Command 参数指定的命令。   
  127 nohup 命令发生错误或不能查找由 Command 参数指定的命令。   
  否则,nohup 命令的退出状态是 Command 参数指定命令的退出状态。

二、&

用途:在后台运行

一般两个一起用

nohup command &

eg:

nohup command >> /path/to/nohup.log 2>&1 &

三、查看运行的后台进程

(1)jobs -l

jobs命令只看当前终端生效的,关闭终端后,在另一个终端jobs已经无法看到后台跑得程序了,此时利用ps(进程查看命令)

(2)ps -ef

ps -aux |grep command

a:显示所有程序
u:以用户为主的格式来显示
x:显示所有程序,不以终端机来区分

注:

用 ps -def | grep查找进程很方便,最后一行总是会 grep 自己

用 grep -v 参数可以将 grep 命令排除掉

ps -aux|grep command | grep -v grep

四、用 awk 提取进程 ID 

ps -aux|grep command | grep -v grep | awk '{print $2}'

五、终止后台运行的进程

kill -9  进程号

dig 用于在 linux 下查询域名解析的信息。

一、基础命令

dig www.guohuawei.com

即查询域名的A记录,查询的 dns 服务器将采用系统配置的服务器,即/etc/resovle.conf 中的。

二、查询其他类型记录

如果要查询其他类型的记录,比如 MX,CNAME,NS,PTR 等,只需将类型加在命令后面即可。

dig www.guohuawei.com mx
dig www.guohuawei.com ns

三、查询指定 dns 服务器的解析

如果你是一个系统管理员,部署好了一台 dns 服务器之后想对它进行解析测试,就必须要显式指定待测试的 dns 服务器地址了,例如:

dig @202.106.0.20 www.guohuawei.com a

四、输出逐级查询的过程

另外一个重要的功能是 +trace 参数,使用这个参数之后将显示从根域逐级查询的过程:

dig www.guohuawei.com a +trace

比如,对域名 www.guohuawei.com A 记录的 trace 查询可以看到根域.,顶级域 .com,以及 guohuawei.com 的域名权威服务器的地址及其各自的返回结果,这样对于追踪 dns 解析中的问题有很大的帮助。

; <<>> DiG 9.10.6 <<>> guohuawei.com +trace
;; global options: +cmd
.            61341    IN    NS    m.root-servers.net.
.            61341    IN    NS    i.root-servers.net.
.            61341    IN    NS    e.root-servers.net.
.            61341    IN    NS    l.root-servers.net.
.            61341    IN    NS    d.root-servers.net.
.            61341    IN    NS    a.root-servers.net.
.            61341    IN    NS    g.root-servers.net.
.            61341    IN    NS    b.root-servers.net.
.            61341    IN    NS    f.root-servers.net.
.            61341    IN    NS    j.root-servers.net.
.            61341    IN    NS    c.root-servers.net.
.            61341    IN    NS    k.root-servers.net.
.            61341    IN    NS    h.root-servers.net.
;; Received 228 bytes from 192.168.1.1#53(192.168.1.1) in 8 ms

com.            172800    IN    NS    a.gtld-servers.net.
com.            172800    IN    NS    b.gtld-servers.net.
com.            172800    IN    NS    c.gtld-servers.net.
com.            172800    IN    NS    d.gtld-servers.net.
com.            172800    IN    NS    e.gtld-servers.net.
com.            172800    IN    NS    f.gtld-servers.net.
com.            172800    IN    NS    g.gtld-servers.net.
com.            172800    IN    NS    h.gtld-servers.net.
com.            172800    IN    NS    i.gtld-servers.net.
com.            172800    IN    NS    j.gtld-servers.net.
com.            172800    IN    NS    k.gtld-servers.net.
com.            172800    IN    NS    l.gtld-servers.net.
com.            172800    IN    NS    m.gtld-servers.net.
com.            86400    IN    DS    30909 8 2 E2D3C916F6DEEAC73294E8268FB5885044A833FC5459588F4A9184CF C41A5766
com.            86400    IN    RRSIG    DS 8 1 86400 20190611050000 20190529040000 25266 . Eigc8QOV/Nr0YjVSd8IbNk7RnAuNean6e4qpXej/V09bcPtnOGu8i7zl 4V5tuaBAqbPKed9LTxcyqhTgBqXPMAU2vBqtBj48voFsUKzhlQp5HMwN CgGqpc2vTF0UoZ/omPOYw0P+++1gjXvyLJuqAmOrnxBoMXX09QaN4lSg loX8T8NU/dbpKO/WHsUYkOpHSzLYcxm4eqSbbakcc915VjAwhwY4pSBs ohLmTNnCtma0mPfZPAE8KjoF1I52TFOfwh4BlBvKnFVJXE1LwDn4b3h6 jS681KZQOm+JjHK4lu0Oo+UarWvtdJm4EFw2kYribsRCcnJcfVKLa9uv SQIJ8g==
;; Received 1173 bytes from 199.7.91.13#53(d.root-servers.net) in 233 ms

guohuawei.com.        172800    IN    NS    dan.ns.cloudflare.com.
guohuawei.com.        172800    IN    NS    zara.ns.cloudflare.com.
CK0POJMG874LJREF7EFN8430QVIT8BSM.com. 86400 IN NSEC3 1 1 0 - CK0Q1GIN43N1ARRC9OSM6QPQR81H5M9A  NS SOA RRSIG DNSKEY NSEC3PARAM
CK0POJMG874LJREF7EFN8430QVIT8BSM.com. 86400 IN RRSIG NSEC3 8 2 86400 20190604044533 20190528033533 3800 com. YQdumHEEUmzxuBxPBgehzu4J2IUp49V8I/9jmOCeLkaXkjaIBpU6eEFg dS5HTiEjHIzJaQeCvih3VmXTdYlUj9exoNz5anezyE913cr9EAczipcN wM18pVhvJMAwNyc+vpKKquwEKb13smt8hVaezr+KRyVxG0cZSxb1IX/6 IO4=
RM7TI8631VFRPOU55KFMOFT3D91LITIP.com. 86400 IN NSEC3 1 1 0 - RM7TUTM87U3I48029OCNGJ1SF3U2LHLJ  NS DS RRSIG
RM7TI8631VFRPOU55KFMOFT3D91LITIP.com. 86400 IN RRSIG NSEC3 8 2 86400 20190603043659 20190527032659 3800 com. AiI4JLNemP1Lexi9c5fSvZCCRAKyT2v/qs703F9ToWC1NVGYvYGR/Jrg asfAFJFd/lFMHQ5zPAqY4ecUN+5GoBRnWqjc5G8j+tH0Bd+YAjasR6uB m1C6CWS5HkNeQgKCrE03Ju+nfHnSfsvtBZvYm4MZoUb9UHAWMK/Eg+z8 XAk=
;; Received 666 bytes from 192.52.178.30#53(k.gtld-servers.net) in 192 ms

guohuawei.com.        300    IN    A    104.31.79.160
guohuawei.com.        300    IN    A    104.31.78.160
;; Received 74 bytes from 173.245.59.108#53(dan.ns.cloudflare.com) in 193 ms

五、域名不存在时

比如解析 bucunzaiba.com 这个域名, 整个过程如下:

  1. 由根域名返回.com顶级域的服务器地址
  2. 由.com顶级域查到二级域名不存在,返回一条SOA记录

如:

dig bucunzaiba.com +trace

; <<>> DiG 9.10.6 <<>> bucunzaiba.com +trace
;; global options: +cmd
.            61015    IN    NS    m.root-servers.net.
.            61015    IN    NS    i.root-servers.net.
......

com.            900    IN    SOA    a.gtld-servers.net. nstld.verisign-grs.com. 1559124593 1800 900 604800 86400
com.            900    IN    RRSIG    SOA 8 1 900 20190605100953 20190529085953 3800

一、背景

Ubuntu16下,使用 apt-get 下载的 nodejs 最新版本需要升级。

二、解决方法

用 npm 安装了 Node 工具包 n ,使用该工具包将 node 升级到最新版本:

sudo npm install n -g
sudo n stable

三、n 工具包说明

n 是一个Node工具包,它提供了几个升级命令参数:

n 显示已安装的Node版本
n latest 安装最新版本Node
n stable 安装最新稳定版Node
n lts 安装最新长期维护版(lts)Node
n version 根据提供的版本号安装Node

一、创建 swapfile

sudo fallocate -l 4G /swapfile

二、启用 swap 分区

1、首先,我们需要使用如下命令更改下swapfile文件的权限:

sudo chmod 600 /swapfile

2、然后,我们需要用如下将swapfile初始化为交换文件:

sudo mkswap /swapfile

3、最后,还需要使用如下命令来启用交换文件:

sudo swapon /swapfile

4、查看结果

free -m

三、配置启用时挂载 Swap 分区文件

Swap交换文件虽然已经配置好并已经启用了,但Ubuntu在重启后是不会挂载我们刚创建的交换分区文件的,因此我们还需要对/etc/fstab文件进行更改,让其在系统启动时就自动挂载我们创建的/swapfile文件。

sudo vim /etc/fstab

添加如下内容:

/swapfile none swap sw 0 0

提示:按【Esc】后输入:":wq!"退出。

四、卸载Swap分区

sudo swapoff /swapfile