linux命令学习(十一):lsof, vnstat, fuser, host, at, cron


这次介绍一些系统使用和状态方面的一些命令,继续学习Linux命令

1. lsof: list open file


使用实例如下:

# lsof -c <process-name>  // 查看某个进程打开的文件  
# lsof /var/log/message   // 查看massage文件当前在被谁使用  
# lsof -u ^root           // 查看当前非root用户打开的文件信息  
# lsof -p 1               // 查看1号进程打开的文件  
# lsof -p `pidof vim`     // 查看vim进程打开的文件,效果如同第一条  
# lsof -i                 // 显示所有网络连接信息  
# lsof -i tcp             // 列出所有TCP网络连接信息  
# lsof -i :22             // 查看22端口现在运行的情况  

2. vnstat: a console-based network traffic monitor


安装时候后才发现,vnstat并不能算一个实时的命令,更多的像是个制作历史报告的工具。
所以暂时就不学了,有需求再来看。
PS:如果想实时使用的话,可是使用—l选项。

3. fuser: identify processing using files or sockets


基本上能用lsof替代,暂时忽略。

4. host: DNS lookup utility


使用实例如下:

# host www.baidu.com      // 查看百度的IP地址  
# host -a www.baidu.com   // 显示详细的DNS查询消息  

5. dig: DNS lookup utility


dig同样也是一个DNS查询的工具,和host互为补充吧。

# dig www.baidu.com         // 对百度网址进行DNS查询  
# dig +trace www.baidu.com  // 从根域开始跟踪查询结果  
# dig +vc www.baidu.com     // 使用TCP协议查询  

说道DNS,就想吐槽,大家都懂的.有兴趣的话大家可以对比下面两个命令的输出差异,对G.F.W.有一个大致的了解。

# dig +vc +trace www.baidu.com  
# dig +vc +trace www.facebook.com  

6. ss: another utility to invertigate sockets


ss是socket statistics的缩写,相比于netstat能够显示过多关于socket细节的信息。
同时netstat略慢,而ss更快。

# ss -a -t       // a == all, t == tcp  
# ss -s          // s == summary, 显示socket信息摘要  
# ss -l          // l == listenning  
# ss -p          // p == processes, 显示哪些进程在用哪些socket  
# ss -pl         // 查看哪些进程在使用listening状态的socket  

7. 关于环境变量LD_PRELOAD


环境变量LD_PRELOAD指定程序运行时优先加载的动态链接库,且其中的符号优先级是最高的。所以在使用LD_PRELOAD环境变量后,可以替换掉标准C中的函数(默认放在libc.so.6文件中)。
比如想替换掉系统默认的malloc函数,则将LD_PRELOAD设置为新的malloc函数链接库。

# LD_PRELOAD="/home/user/mymalloc.so"  

关于LD_PRELOAD环境变量,这篇文章或许能让你脑洞大开。

8. at: executes commands at a specified time


与cron配置一个周期性的服务不同,at命令主要是用于一次性的任务需求中。

# at -f myscript.sh -v 10:30       // 在10:30时刻,开始执行脚本  
# timer=`date +%k:%M -d '5 min'`   // 得到距离当前时刻5min的时间  
# at -f myscript.sh -v ${timer}    // 在timer对应的时刻开始执行脚本  
# atq                              // 查看还未执行的任务  
# atrm 7                           // 使用任务编号进行删除  
# at -c 8                          // 查看某任务编号对应的具体内容