码迷,mamicode.com
首页 > 其他好文 > 详细

网络操作命令(9)

时间:2017-12-07 18:49:49      阅读:385      评论:0      收藏:0      [点我收藏+]

标签:网络   网卡   接口   

基础网络命令(17个)

telnet,ssh,sshpass,scp,wget,ping,route,ifconfig,ifup,ifdown,netstat,ss,rsync,ip,ethtool,mii-tool,brctl


深入网络命令(12个)

nmap,lsof,mail,mutt,nslookup,dig,host,traceroute,tcpdump,starce,curl,elinks


9.1.telnet

功能:执行telnet指令开启终端机阶段作业,并登入远端主机

语法格式:telnet[参数][主机]

常用选项:

-8 允许使用8位字符资料,包括输入与输出。

-a 尝试自动登入远端系统。

-b<主机别名> 使用别名指定远端主机名称。

-c 不读取用户专属目录里的.telnetrc文件。

-d 启动排错模式。

-e<脱离字符> 设置脱离字符。

-E 滤除脱离字符。

-f 此参数的效果和指定"-F"参数相同。

-F 使用Kerberos V5认证时,加上此参数可把本地主机的认证数据上传到远端主机。

-k<域名> 使用Kerberos认证时,加上此参数让远端主机采用指定的领域名,而非该主机的域名。

-K 不自动登入远端主机。

-l<用户名称> 指定要登入远端主机的用户名称。

-L 允许输出8位字符资料。

-n<记录文件> 指定文件记录相关信息。

-r 使用类似rlogin指令的用户界面。

-S<服务类型> 设置telnet连线所需的IP TOS信息。

-x 假设主机有支持数据加密的功能,就使用它。

-X<认证形态> 关闭指定的认证形态。

示例:

1)远程服务器无法访问
[root@localhost?~]#?telnet?192.168.19.35
rying?192.168.19.35...
telnet:?connect?to?address?192.168.19.35:?Connection?refused
说明:
处理这种情况方法:
(1)确认ip地址是否正确?
(2)确认ip地址对应的主机是否已经开机?
(3)如果主机已经启动,确认路由设置是否设置正确?(使用route命令查看)
(4)如果主机已经启动,确认主机上是否开启了telnet服务?(使用netstat命令查看,TCP的23端口是否有LISTEN状态的行)
(5)如果主机已经启动telnet服务,确认防火墙是否放开了23端口的访问?(使用iptables-save查看)

2)域名无法解析
[root@localhost?~]#?telnet?www.baidu.com
www.baidu.com/telnet:?Temporary?failure?in?name?resolution
说明:
处理这种情况方法:
(1)确认域名是否正确
(2)确认本机的域名解析有关的设置是否正确(/etc/resolv.conf中nameserver的设置是否正确,如果没有,可以使用nameserver?8.8.8.8)
(3)确认防火墙是否放开了UDP53端口的访问(DNS使用UDP协议,端口53,使用iptables-save查看)

3)其他情况
[root@localhost?~]#?telnet?192.168.120.206
Trying?192.168.120.206...
telnet:?connect?to?address?192.168.120.206:?Connection?refused
telnet:?Unable?to?connect?to?remote?host:?Connection?refused
说明:
处理这种情况:
(1)确认ip地址或者主机名是否正确?
(2)确认端口是否正确,是否默认的23端口

4)启动服务及配置
启动telnet服务
service?xinetd?restart
说明:
配置参数,通常的配置如下:?
service?telnet?
{?
disable?=?no?#启用?
flags?=?REUSE?#socket可重用?
socket_type?=?stream?#连接方式为TCP?
wait?=?no?#为每个请求启动一个进程?
user?=?root?#启动服务的用户为root?
server?=?/usr/sbin/in.telnetd?#要激活的进程?
log_on_failure?+=?USERID?#登录失败时记录登录用户名?
}?
如果要配置允许登录的客户端列表,加入?
only_from?=?192.168.0.2?#只允许192.168.0.2登录?
如果要配置禁止登录的客户端列表,加入?
no_access?=?192.168.0.{2,3,4}?#禁止192.168.0.2、192.168.0.3、192.168.0.4登录?
如果要设置开放时段,加入?
access_times?=?9:00-12:00?13:00-17:00?#?每天只有这两个时段开放服务(我们的上班时间:P)?
如果你有两个IP地址,一个是私网的IP地址如192.168.0.2,一个是公网的IP地址如218.75.74.83,如果你希望用户只能从私网来登录telnet服务,那么加入?
bind?=?192.168.0.2?
各配置项具体的含义和语法可参考xined配置文件属性说明(man?xinetd.conf)?
配置端口,修改services文件:
#?vi?/etc/services?
找到以下两句?
telnet?23/tcp?
telnet?23/udp?
如果前面有#字符,就去掉它。telnet的默认端口是23,这个端口也是黑客端口扫描的主要对象,因此最好将这个端口修改掉,修改的方法很简单,就是将23这个数字修改掉,改成大一点的数字,比如61123。注意,1024以下的端口号是internet保留的端口号,因此最好不要用,还应该注意不要与其它服务的端口冲突。?
启动服务:
service?xinetd?restart?

实例:正常telnet
命令:
telnet?192.168.120.204
输出:

[root@andy?~]#?telnet?192.168.120.204
Trying?192.168.120.204...
Connected?to?192.168.120.204?(192.168.120.204).
Escape?character?is?‘^]‘.

????localhost?(Linux?release?2.6.18-274.18.1.el5?#1?SMP?Thu?Feb?9?12:45:44?EST?2012)?(1)

login:?root
Password:?
Login?incorrect

说明:
一般情况下不允许root从远程登录,可以先用普通账号登录,然后再用su?-切到root用户。


9.2.ssh

功能:SSH客户端

常用选项:

-p 指定远程主机端口

-i 指定认证文件

-L [bind_address:]port:host:hostport

-R [bind_address:]port:host:hostport]

-D [bind_address:]port

-o SSH 选项,有以下几个比较常用的: ConnectionAttempts=NUM 连接失败后重试次数 ConnectTimeout=SEC 连接超时时间 StrictHostKeyChecking=no 自动拉去主机 key 文件 PasswordAuthentication=no 禁止密码认证

示例:

登录到远程主机:
#?ssh?user@192.168.1.120?远程主机执行命令:
#?ssh?user@192.168.1.120?‘ifconfig‘?本地文件内容写到远程主机文件:
#?ssh?user@192.168.1.120?‘cat?>>?file‘?<?/etc/passwd
SSH?还提供了一个非常有用的功能,就是端口转发,能帮你解决一些无法建立的连接。


9.3.sshpass

功能:非交互SSH登录(需要安装)

常用选项:

-f? 从文件中获取密码

-d? 用数字文件描述符获取密码

-p? 密码作为参数

-e? 密码作为环境变量传递,变量名是SSHPASS

示例:

免交互SSH登录:
#?sshpass?-p?123456?ssh?root@192.168.1.10
免交互传输文件:
#?sshpass?-p?123456?scp?a.txt?192.168.1.10:/root
密码传入系统变量:
#?SSHPASS=123456?rsync?-avz?/etc/hosts?-e?"sshpass?-e?ssh"?root@192.168.1.221:/opt


9.4.scp

功能:通货ssh协议进行安全远程服务器的文件复制

语法:scp [OPTIONS] file_source file_target

帮助命令:

scp? --help

man scp

常用选项:

-C 压缩选项

-i? 指定私钥文件

-l? 限制速率,单位Kb/s,1024Kb=1Mb

-P? 指定远程主机SSH端口

-p? 保存修改时间、访问时间和权限

-r? 递归拷贝目录

-o? SSH选项,有以下常用的:

ConnectionAttempts=NUM? 连接失败后重试次数

ConnectTimeout=SEC? ? ? ?连接超时时间

StrictHostKeyChecking=no? 自动拉去主机key文件

PasswordAuthentication=no 禁止密码认证

-v:跟多数命令中-v一样,用来显示详细信息

示例:

[root@localhost?~]#?scp?system.sh?root@192.168.19.51:/root??#本地复制文件到远程,并指定远程以root登录
The?authenticity?of?host?‘192.168.19.51?(192.168.19.51)‘?can‘t?be?established.
RSA?key?fingerprint?is?14:1a:ee:3c:8c:14:6d:4a:fd:d8:c7:c6:ea:87:0c:de.
Are?you?sure?you?want?to?continue?connecting?(yes/no)??yes
Warning:?Permanently?added?‘192.168.19.51‘?(RSA)?to?the?list?of?known?hosts.
root@192.168.19.51‘s?password:
system.sh?????????????????????????????????????100%?7273?????7.1KB/s???00:00
[root@localhost?~]#?scp?dir001?root@192.168.19.51:/root???#复制目录不加参数就会报错
\root@192.168.19.51‘s?password:
dir001:?not?a?regular?file
[root@localhost?~]#?scp?-r?dir001?root@192.168.19.51:/root???#所以加-r目录才会复制过去
root@192.168.19.51‘s?password:
[root@localhost?~]#

说明:举几个常用的例子,其他参数后续再完善


9.5.wget

功能:非交互式网络下载

语法:wget [option]... [URL]...

常用选项:

启动:

-b,? --background? ? ? ? ?转入 后台运行

-V, –version? ? ? ? ? ? ? ? ? 打印wget版本

-h,help? ? ? ? ? ? ? ? ? ? ? ? 打印语法帮助

e, –execute=COMMAND? ?执行`.wgetrc’格式的命令


日志记录和输入文件:

-o,? --output-file=FILE? ? ? 把记录写到FILE文件

-a, --append-output=FILE? ? 把记录追加到FILE文件中

-d,? --debug? ? ? ? ? ? ? 打印调试输出,会包含头信息

-v, –verbose? ? ? ? ? ? ? 冗长模式(这是缺省设置)

-nv, –non-verbose? ? ? ? ? 关掉冗长模式,但不是安静模式

-F, –force-html? ? ? ? ? ?把输入文件当作HTML格式文件对待

-B, –base=URL? ? ? ? ? ? ?将URL作为在-F -i参数指定的文件中出现的相对链接的前缀

-q,? --quiet? ? ? ? ? ? ? 退出

-i,? --input-file=FILE? ? ? 从文件中读取URL下载

–sslcertfile=FILE? ? ?可选客户端证书

–sslcertkey=KEYFILE? ?可选客户端证书的KEYFILE

–egd-file=FILE? ? ? ? 指定EGD socket的文件名


下载:

--bind-address=ADDRESS? ? ? 设置绑定地址(主机名或IP,当本地有多个IP或名字时使用)

-t,? --tries=NUMBER? ? ? ? ? ? ? ? ?设置链接重试次数(0 表示无限制)

-O, --output-document=FILE? ? ?把文档写到FILE文件中

-nc, --no-clobber? ? ? ? ? ? ? ? ? ? ? ? 跳过下载现有的文件

-c,? --continue? ? ? ? ? ? ? ? ? ? ? ? ? ? 断点续传

--progress=TYPE? ? ? ? ? ? ? ? ? ? ? 设置进度条(dot和bar)

-N, –timestamping? ? ? ? ? ? ? ? ? ? ?不要重新下载文件除非比本地文件新

-S,? --server-response? ? ? ? ? ? ? 打印服务器响应

--spider? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 不下载任何内容

-T, --timeout=SECONDS? ? 设置相应超时时间(还有--dns-timeout、--connect-timeout和--read-timeout)

-w,? --wait=SECONDS? ? ?两次重试间隔等待时间

–random-wait? ? ? ? ? ? 在下载之间等待0…2*WAIT秒

-Y, –proxy=on/off? ? ? ? ? ?打开或关闭代理

-Q, –quota=NUMBER? ? ? ? ? ?设置下载的容量限制

--limit-rate=RATE? ? ? 限制下载速度

--user=USER? ? ? ? ?设置ftp和http用户名

--password=PASS? ? ? ?设置ftp和http密码


目录:

-nd –no-directories? ? ? ? ? ? 不创建目录

-x, –force-directories? ? ? ? ?强制创建目录

-nH, –no-host-directories? ? ? ?不创建主机目录

-P, --directory-prefix=PREFIX? 保存文件目录

–cut-dirs=NUMBER? ? ? ? ? ?忽略 NUMBER层远程目录


HTTP选项:

--http-user=USER? ? ? ? ?设置http用户名

--http-password=PASS? ?设置http密码

-C, –cache=on/off? ? ? ? 允许/不允许服务器端的数据缓存 (一般情况下允许)

-E, –html-extension? ? ? 将所有text/html文档以.html扩展名保存

–ignore-length? ? ? ? ? ?忽略 `Content-Length’头域

--proxy-user=USER? ? ?设置代理用户名

--proxy-password=PASS? 设置代理密码

--referer=URL? ? ? ?设置Referer

-s,--save-headers? ? ? 保存头到文件

--default-page=NAME? ? 改变默认页面名字,默认index.html

-U,--user-agent=AGENT? 设置客户端信息

--no-http-keep-alive? ?禁用HTTP keep-alive(长连接)

--load-cookies=FILE? ? 从文件加载cookies

--save-cookies=FILE? ? 保存cookies到文件

--post-data=STRING? ? ?使用POST方法,发送数据


FTP选项:

--ftp-user=USER? ? ? 设置ftp用户名

--ftp-password=PASS? ? 设置ftp密码

--no-passive-ftp? ? ? 禁用被动传输模式

-nr, –dont-remove-listing? ?不移走 `.listing’文件

-g, –glob=on/off? ? ? ? ? ?打开或关闭文件名的 globbing机制

–passive-ftp? ? ? ? ? ?使用被动传输模式 (缺省值).

–active-ftp? ? ? ? ? ? 使用主动传输模式

–retr-symlinks? ? ? ? ?在递归的时候,将链接指向文件(而不是目录)


递归下载:

-r, --recursive? ? ? ?指定递归下载,慎用!

-l, --level=NUMBER? ? ?最大递归深度, (inf 或 0 代表无穷).

–delete-after? ? ? ?在现在完毕后局部删除文件

-k, –convert-links? ? ? 转换非相对链接为相对链接

-K, –backup-converted? ?在转换文件X之前,将之备份为 X.orig

-m, –mirror? ? ? ? ? ? ?等价于 -r -N -l inf -nr.

-p, –page-requisites? ? 下载显示HTML文件的所有图片


递归下载中的包含和不包含(accept/reject)

-A, --accept=LIST? ? ? 逗号分隔下载的扩展列表

-R, --reject=LIST? ? ? 逗号分隔不被下载的扩展列表

-D, --domains=LIST? ? ?逗号分隔被下载域的列表

--exclude-domains=LIST? ?排除不被下载域的列表

–follow-ftp? ? ? ? ? ? ? ? ?跟踪HTML文档中的FTP链接

–follow-tags=LIST? ? ? ? ? ?分号分隔的被跟踪的HTML标签的列表

-G, –ignore-tags=LIST? ? ? ? ? ?分号分隔的被忽略的HTML标签的列表

-H, –span-hosts? ? ? ? ? ? ? ? ?当递归时转到外部主机

-L, –relative? ? ? ? ? ? ? ? ? ?仅仅跟踪相对链接

-I, –include-directories=LIST? ?允许目录的列表

-X, –exclude-directories=LIST? ?不被包含目录的列表

-np, –no-parent? ? ? ? ? ? ? ? ? 不要追溯到父目录

示例:

[root@localhost?~]#?wget?http://nginx.org/download/nginx-1.9.9.tar.gz??#下载单个文件到当前路径
[root@localhost?~]#wget?-b??http://nginx.org/download/nginx-1.9.9.tar.gz????#放在后台下载
对于网络不稳定的用户使用-c和--tries参数,保证下载完成,并下载到指定目录:
[root@localhost?~]#?wget?-t?3?-c?http://nginx.org/download/nginx-1.9.9.tar.gz?-P?down??##对于网络不稳或者其他原因,使用-c?和--tries,保证下载完成,并下载到指定的路径
[root@localhost?scripts]#??wget?http://www.baidu.com/index.html?-O?index.html??#下载内容到文件
[root@localhost?scripts]#?ls?index.html?
index.html
[root@localhost?scripts]#?cat?>?url
https://www.baidu.com/index.html
^C
[root@localhost?scripts]#?wget?-i?url??#从文件读取url下载


9.6.ping

功能:发送目标主机ICMP的网络请求

常用选项:

-b:允许ping广播地址

-c:次数

-i:指定收发信息的间隔时间

-s:字节数:指定发送的数据字节数,预设值是56,加上8字节的ICMP头,一共是64ICMP数据字节

-t: 设置存活数值ttl的大小


示例:

#ping通情况
[root@localhost?~]#?ping?192.168.19.1
PING?192.168.19.1?(192.168.19.1)?56(84)?bytes?of?data.
64?bytes?from?192.168.19.1:?icmp_seq=1?ttl=128?time=0.120?ms
#ping不通情况
[root@localhost?~]#?ping?192.168.19.3
PING?192.168.19.3?(192.168.19.3)?56(84)?bytes?of?data.
From?192.168.19.20?icmp_seq=1?Destination?Host?Unreachable
#ping网关
[root@localhost?~]#?ping?-b?192.168.19.2
PING?192.168.19.2?(192.168.19.2)?56(84)?bytes?of?data.
64?bytes?from?192.168.19.2:?icmp_seq=1?ttl=128?time=0.131?ms
#ping指定次数
[root@localhost?~]#?ping?-c?3?192.168.19.1??#不加-c会一直ping下去
PING?192.168.19.1?(192.168.19.1)?56(84)?bytes?of?data.
64?bytes?from?192.168.19.1:?icmp_seq=1?ttl=128?time=0.125?ms
64?bytes?from?192.168.19.1:?icmp_seq=1?ttl=128?time=0.125?ms
64?bytes?from?192.168.19.1:?icmp_seq=1?ttl=128?time=0.125?ms
#ping指定时间跟次数
[root@localhost?~]#?ping?-c?3?-i?0.2?192.168.19.2
PING?192.168.19.2?(192.168.19.2)?56(84)?bytes?of?data.
64?bytes?from?192.168.19.2:?icmp_seq=1?ttl=128?time=0.054?ms
#ping域名
[root@localhost?~]#?ping?www.baidu.com
PING?www.a.shifen.com?(14.215.177.38)?56(84)?bytes?of?data.
64?bytes?from?14.215.177.38:?icmp_seq=1?ttl=128?time=8.71?ms
#-s?-t参数使用
[root@localhost?~]#?ping??-i?0.2?-s?1024?-t?255??192.168.19.2
PING?192.168.19.2?(192.168.19.2)?1024(1052)?bytes?of?data.
1032?bytes?from?192.168.19.2:?icmp_seq=1?ttl=128?time=0.078?ms
说明:-i?0.2?发送周期为0.2秒?-s?设置发送包的大小为1024?-t?设置TTL值为?255


9.7.route

功能:打印设置路由表

常用选项:

-n:不使用通讯协定或主机名称,直接使用 IP 或 port number;

-ee:显示更详细的信息

增加 (add) 与删除 (del) 路由的相关参数:

? ?-net? ? :添加到网络的路由

? ?-host? ?:添加到主机的路由

? ?netmask :子网掩码设置

? ?gw? ? ? :下一跳地址

? ?dev? ? ?:下一跳网络接口,后面接 eth0 等

示例:

#查看本机路由表
[root@localhost?~]#?netstat?-rn
Kernel?IP?routing?table
Destination?????Gateway?????????Genmask?????????Flags???MSS?Window??irtt?Iface
192.168.19.0????0.0.0.0?????????255.255.255.0???U?????????0?0??????????0?eth1
169.254.0.0?????0.0.0.0?????????255.255.0.0?????U?????????0?0??????????0?eth1
0.0.0.0?????????192.168.19.2????0.0.0.0?????????UG????????0?0??????????0?eth1
[root@localhost?~]#?route?-n
Destination????Gateway????????Genmask????????Flags?Metric?Ref????Use?Iface
192.168.19.0????0.0.0.0????????255.255.255.0??U????0??????0????????0?eth0
169.254.0.0????0.0.0.0????????255.255.0.0????U????1002??0????????0?eth0
0.0.0.0????????192.168.19.2????0.0.0.0????????UG????0??????0????????0?eth0
#添加到主机的路由
[root@localhost?~]#?route?add?-host?192.168.6.1?dev?eth0
[root@localhost?~]#?route?add?-host?192.168.6.12?gw?192.168.6.1
#添加到网络的路由
[root@localhost?~]#?route?add?-net?192.168.6.1?netmask?255.255.255.0?eth0
[root@localhost?~]#?route?add?-net?192.168.6.1?netmask?255.255.255.0?eth0?gw?192.168.6.2
[root@localhost?~]#?route?add?-net?192.168.6.1/24
#添加默认网关
[root@localhost?~]#?route?add?default?gw?1.1.1.2
#删除路由
[root@localhost?~]#?route?del?-host?192.168.6.1?dev?eth0
[root@localhost?~]#?route?del?-net??192.168.6.1?netmask?255.255.255.0?eth0
[root@localhost?~]#?route?del??default?gw?1.1.1.2


9.8.ifconfig

功能:配置网络接口

语法:ifconfig [interface]

? ? ? ? ? ?ifconfig interface [aftype] options | address ...

常用选项:

up:启用网卡

down:停用网卡

-a:显示所有网卡信息

示例:

[root@localhost?~]#?ifconfig?eth0??#显示指定网卡信息
[root@localhost?~]#?ifconfig?eth0?down?#停用网卡,eth0信息不显示了

技术分享图片技术分享图片

技术分享图片


#eth0启用又显示了
[root@localhost?~]#?ifconfig?-a??#显示所有网卡信息
[root@localhost?~]#?ifconfig?eth0:0?192.168.10.1/24?设置临时网卡


9.9.ifup/ifdown(慎用)

功能:启动和关闭网卡

语法格式:

ifupIFACE [boot]

ifdownIFACE

示例:

重启指定网卡服务
[root@oldboy?~]#?ifdown????#?需要指定网卡??
usage:?ifdown?<device?name>??
[root@oldboy?~]#?ifdown?eth0?&&?ifup?eth0??????#?一定要连在一起使用!!切记啊??
Determining?if?ip?address?192.168.91.130?is?already?in?use?for?device?eth0...??
注意:以上命令尽量少用,如果一定要使用请将两者连在一起使用,不能单独使用。
原因:生产环境中,我们的服务器都是放在机房,没有在办公室;如果关闭了网卡,那就可能不能连接服务器了。到时你就麻烦了………………。
重启所有网卡服务
[root@oldboy?~]#?/etc/init.d/network?restart????#?重启网卡服务??
这个是重启所有网卡服务,不能操作指定网卡
命令所在位置和类型
[root@oldboy?~]#?which?ifup??
/sbin/ifup??
[root@oldboy?~]#?which?ifdown??
/sbin/ifdown??
[root@oldboy?~]#?type?ifup????
ifup?is?hashed?(/sbin/ifup)??
[root@oldboy?~]#?type?ifdown??
ifdown?is?hashed?(/sbin/ifdown)


9.10.netstat

功能:打印网络连接、路由表、接口统计信息、伪装连接和多播成员

常用选项:

-r? 显示路由表

-i? 显示接口表

-n? 不解析名字

-p? 显示程序名 PID/Program

-l? 显示监听的socket

-a? 显示所有socket

-o? 显示计时器

-Z? 显示上下文

-t? 只显示tcp连接

-u? 只显示udp连接

-s? 显示每个协议统计信息

示例:

[root@localhost?~]#?netstat?-tlunap??#显示所有监听端口
Active?Internet?connections?(servers?and?established)
Proto?Recv-Q?Send-Q?Local?Address???????????????Foreign?Address?????????????State???????PID/Program?name???
tcp????????0??????0?0.0.0.0:22??????????????????0.0.0.0:*???????????????????LISTEN??????897/sshd????????????
tcp????????0?????96?192.168.19.54:22????????????192.168.19.1:7024???????????ESTABLISHED?15148/sshd??????????
tcp????????0??????0?192.168.19.54:22????????????192.168.19.1:7023???????????ESTABLISHED?15129/sshd??????????
tcp????????0??????0?:::22???????????????????????:::*????????????????????????LISTEN??????897/sshd????????????
tcp????????0??????0?:::80???????????????????????:::*????????????????????????LISTEN??????13764/httpd??
[root@localhost?~]#?netstat?-tlnap???#显示所有tcp连接
Active?Internet?connections?(servers?and?established)
Proto?Recv-Q?Send-Q?Local?Address???????????????Foreign?Address?????????????State???????PID/Program?name???
tcp????????0??????0?0.0.0.0:22??????????????????0.0.0.0:*???????????????????LISTEN??????897/sshd????????????
tcp????????0??????0?192.168.19.54:22????????????192.168.19.1:7024???????????ESTABLISHED?15148/sshd??????????
tcp????????0??????0?192.168.19.54:22????????????192.168.19.1:7023???????????ESTABLISHED?15129/sshd??????????
tcp????????0??????0?:::22???????????????????????:::*????????????????????????LISTEN??????897/sshd????????????
tcp????????0??????0?:::80???
[root@localhost?~]#?netstat?-ulnap????#显示所有udp连接,目前没有udp连接,所以为空
Active?Internet?connections?(servers?and?established)
Proto?Recv-Q?Send-Q?Local?Address???????????????Foreign?Address?????????????State???????PID/Program?name
[root@localhost?~]#?netstat?-tlunp?|grep?22??#过滤22监听端口
tcp????????0??????0?0.0.0.0:22??????????????????0.0.0.0:*???????????????????LISTEN??????965/sshd????????????
tcp????????0??????0?:::22???????????????????????:::*????????????????????????LISTEN??????965/sshd?
[root@localhost?~]#?netstat?-rn??#可以显示路由表信息
Kernel?IP?routing?table
Destination?????Gateway?????????Genmask?????????Flags???MSS?Window??irtt?Iface
192.168.6.12????192.168.6.1?????255.255.255.255?UGH???????0?0??????????0?eth1
192.168.6.1?????0.0.0.0?????????255.255.255.255?UH????????0?0??????????0?eth1
192.168.19.0????0.0.0.0?????????255.255.255.0???U?????????0?0??????????0?eth1
169.254.0.0?????0.0.0.0?????????255.255.0.0?????U?????????0?0??????????0?eth1
0.0.0.0?????????192.168.19.2????0.0.0.0?????????UG????????0?0??????????0?eth1


9.11.ss

功能:ss是socket stawtistics的缩写,获取socket统计信息,可以显示和netstat类似的内容,但ss的优势在于它能够显示更多更详细的有关TCP和连接状态的信息,而且比netstat更快速更高效。

比netstat优势在于:

当服务器的socket连接数量变得非常大时,无论是netstat命令还是cat /proc/net/tcp,执行速度都会很慢。当服务器维持的连接达到上万个的时候,使用netstat等于浪费生命,而用ss才是节省时间。

ss的秘诀在于:

利用了TCP协议栈中tcp_diag。tcp_diag是一个用于分析统计的模块,使得ss的快捷高效。系统如果没有tcp_diag,ss也可以正常运行,效率会变得稍慢,还是比netstat快。

语法:ss [options] [ FILTER ]

常用选项:

-n? 不解析名字

-a? 显示所有socket

-l? 显示所有监听的socket

-o? 显示计时器

-e? 显示socket详细信息

-m? 显示socket内存使用

-p? 显示进程使用的socket

-i? 显示内部TCP信息

-s? 显示socket使用汇总

-4? 只显示IPV4的socket

-0? 显示包socket

-t? 只显示TCP socket

-u? 只显示UDP socket

-d? 只显示DCCP socket

-w? 只显示RAW socket

-x? 只显示Unix域socket

-f? FAMILY 只显示socket族类型( unix, inet,inet6, link, netlink)

-A? 查询socket{all|inet|tcp|udp|raw|unix|packet|netlink}[,QUERY]

-D? 将原始的TCP socket转储到文件

-F? 从文件中读取过滤信息

过滤:

-o? state? 显示TCP连接状态信息

两种的命令延伸到的两种工具集比较:

用途net-tooliproute2
地址和链路配置ifconfigip addr, ip link
路由表routeip route
邻居arpip neigh
VLANvconfigip link
隧道iptunnelip tunnel
组播ipmaddrip maddr
统计netstatss

示例:

#看看耗时
netstat?-at?耗时15秒
ss?-atr??没有tcp_diag耗时5秒
ss?-atr??有tcp_diag耗时0.5秒
#netstat是net-tools工具中的一员
[root@localhost?~]#?rpm?-q?net-tools
net-tools-1.60-110.el6_2.x86_64
#ss是iproute工具中的一员
[root@localhost?~]#?rpm?-q?iproute
iproute-2.6.32-32.el6_5.x86_64
[root@localhost?~]#?rpm?-qf?/usr/sbin/ss
iproute-2.6.32-32.el6_5.x86_64
#安装iproute
[root@localhost?~]#yum?install?iproute?iproute-doc

[root@localhost?~]#?ss?-t?-a?#显示所有tcp连接
State??????Recv-Q?Send-Q??????Local?Address:Port??????????Peer?Address:Port??
LISTEN????0??????128????????????????????:::ssh????????????????????:::*??????
LISTEN????0??????128????????????????????*:ssh??????????????????????*:*??????
LISTEN????0??????511????????????????????:::http????????????????????:::*??????
ESTAB??????0??????0??????????192.168.19.54:ssh??????????192.168.19.1:7024????
ESTAB??????0??????0??????????192.168.19.54:ssh??????????192.168.19.1:7023
[root@localhost?~]#?ss?-u?-a??#显示所有udp连接
State??????Recv-Q?Send-Q??????Local?Address:Port??????????Peer?Address:Port
[root@localhost?~]#?ss?-s??#显示所有socket
Total:?287?(kernel?295)
TCP:??6?(estab?2,?closed?1,?orphaned?0,?synrecv?0,?timewait?0/0),?ports?2

Transport?Total????IP????????IPv6
*????????295??????-????????-????????
RAW??????0????????0????????0????????
UDP??????0????????0????????0????????
TCP??????5????????3????????2????????
INET??????5????????3????????2????????
FRAG??????0????????0????????0????????

[root@localhost?~]#?ss?-o?state?established??#显示已经建立的连接
Recv-Q?Send-Q??????????Local?Address:Port??????????????Peer?Address:Port??
0??????0????????????????192.168.19.54:ssh????????????????192.168.19.1:7024????timer:(keepalive,25min,0)
0??????96??????????????192.168.19.54:ssh????????????????192.168.19.1:7023????timer:(on,248ms,0)
[root@localhost?~]#?ss?-o?state?TIME_WAIT?#显示所有的timeout,这里没有的
ss:?no?socket?states?to?show?with?such?filter.
#当前服务器的网络连接统计
[root@localhost?~]#?ss?-s
Total:?283?(kernel?285)
TCP:???3?(estab?1,?closed?0,?orphaned?0,?synrecv?0,?timewait?0/0),?ports?1

Transport?Total?????IP????????IPv6
*	??285???????-?????????-????????
RAW	??0?????????0?????????0????????
UDP	??0?????????0?????????0????????
TCP	??3?????????2?????????1????????
INET	??3?????????2?????????1????????
FRAG	??0?????????0?????????0??
说明:在服务器有大量socket连接时,使用这个命令做统计

#查看所有打开的网络端口
[root@localhost?~]#?ss?-l
State??????Recv-Q?Send-Q??????????????????Local?Address:Port??????????????????????Peer?Address:Port???
LISTEN?????0??????128????????????????????????????????:::ssh?????????????????????????????????:::*???????
LISTEN?????0??????128?????????????????????????????????*:ssh??????????????????????????????????*:*???
说明:使用pl参数,列出具体的程序名称
[root@localhost?~]#?ss?-pl
State??????Recv-Q?Send-Q??????????????????Local?Address:Port??????????????????????Peer?Address:Port???
LISTEN?????0??????128????????????????????????????????:::ssh?????????????????????????????????:::*????????users:(("sshd",965,4))
LISTEN?????0??????128?????????????????????????????????*:ssh??????????????????????????????????*:*????????users:(("sshd",965,3))
说明:socket连接属于sshd程序,sshd程序的PID是965

#查看所有的socket连接
[root@localhost?~]#?ss?-a
State??????Recv-Q?Send-Q??????????????????Local?Address:Port??????????????????????Peer?Address:Port???
LISTEN?????0??????128????????????????????????????????:::ssh?????????????????????????????????:::*???????
LISTEN?????0??????128?????????????????????????????????*:ssh??????????????????????????????????*:*???????
ESTAB??????0??????64??????????????????????192.168.19.20:ssh???????????????????????192.168.19.1:13342?
tcp的sockets,用-ta
udp的sockets,用-ua
raw的sockets,用-wa
unix的sockets,用-xa


9.12.rsync

功能:一种快速的、通用的、远程的(本地)文件复制工具,据说是scp速度的20倍

常用选项:

-v? 显示复制信息

-q? 不输出错误信息

-c? 跳过基础效验,不判断修改时间和大小

-a? 归档模式,等效-rlptgoD,保留权限、属组等

-r? 递归目录

-l? 拷贝软连接

-z? 压缩传输数据

-e? 指定远程shell,比如ssh、rsh

--progress? ? ? ? ? ?进度条,等同-P

--bwlimit=KB/s? ? ? ?限制速率,0为没有限制

--delete? ? ? ? ? ? 删除那些DST中SRC没有的文件

--exclude=PATTERN? ? ? 排除匹配的文件或目录

--exclude-from=FILE? ? 从文件中读取要排除的文件或目录

--password-file=FILE? ? 从文件读取远程主机密码

--port=PORT? ? ? ? ? 监听端口

示例:

[root@localhost?~]#?ls?.?/opt
.:
anaconda-ks.cfg??dir003??dir006??dir009???????install.log.syslog
dir001???????????dir004??dir007??dir010???????system.sh
dir002???????????dir005??dir008??install.log
/opt:??????#这个目录没有文件
[root@localhost?~]#?rsync?-av?*?/opt???#把当前目录所有文件同步到opt目录下
sending?incremental?file?list
anaconda-ks.cfg
install.log
install.log.syslog
system.sh
dir001/
dir002/
dir003/
dir004/
dir005/
dir006/
dir007/
dir008/
dir009/
dir010/
?
sent?31002?bytes??received?128?bytes??62260.00?bytes/sec
total?size?is?30574??speedup?is?0.98
[root@localhost?~]#?ls?/opt???#现在有文件了
anaconda-ks.cfg??dir003??dir006??dir009???????install.log.syslog
dir001???????????dir004??dir007??dir010???????system.sh
dir002???????????dir005??dir008??install.log
[root@localhost?~]#?rsync?-av?*?192.168.19.51:/opt????#本地目录所有文件同步到远端
[root@localhost?~]#?rsync?-av?--delete?*?192.168.19.51:/opt??#保持远程主机目录与本地一样


9.13.ip

功能:打印并设置路由、设备、策略路由和隧道配置信息

语法:语法十分复杂,这里不一一列举

通过ip组合衍生出好多命令

ip link 网络设备配置命令

ip addr 管理网络设备与协议,相对ip link,增加了对ip地址的管理

ip addrlabel ipv6的地址标签

ip route 管理路由

ip rule 管理路由策略

ip tunnel 隧道配置

ip maddr 多播地址管理

ip mroute 多播路由管理

ip monitor 状态监控

ip xfrm 设置xfrm,xfrm是一个ip框架

示例:

[root@localhost?~]#?ip?link?show?#查看默认网卡信息
1:?lo:?<LOOPBACK,UP,LOWER_UP>?mtu?65536?qdisc?noqueue?state?UNKNOWN
????link/loopback?00:00:00:00:00:00?brd?00:00:00:00:00:00
2:?eth0:?<BROADCAST,MULTICAST,UP,LOWER_UP>?mtu?1500?qdisc?pfifo_fast?state?UP?qlen?1000
????link/ether?00:0c:29:a0:3f:29?brd?ff:ff:ff:ff:ff:ff
[root@localhost?~]#?ip?addr
1:?lo:?<LOOPBACK,UP,LOWER_UP>?mtu?65536?qdisc?noqueue?state?UNKNOWN
????link/loopback?00:00:00:00:00:00?brd?00:00:00:00:00:00
????inet?127.0.0.1/8?scope?host?lo
????inet6?::1/128?scope?host
??????valid_lft?forever?preferred_lft?forever
2:?eth0:?<BROADCAST,MULTICAST,UP,LOWER_UP>?mtu?1500?qdisc?pfifo_fast?state?UP?qlen?1000
????link/ether?00:0c:29:a0:3f:29?brd?ff:ff:ff:ff:ff:ff
????inet?192.168.19.54/24?brd?192.168.19.255?scope?global?eth0
????inet6?fe80::20c:29ff:fea0:3f29/64?scope?link
??????valid_lft?forever?preferred_lft?forever
[root@localhost?~]#?ip?addr?show??跟ip?addr显示没有什么区别
1:?lo:?<LOOPBACK,UP,LOWER_UP>?mtu?65536?qdisc?noqueue?state?UNKNOWN
????link/loopback?00:00:00:00:00:00?brd?00:00:00:00:00:00
????inet?127.0.0.1/8?scope?host?lo
????inet6?::1/128?scope?host
??????valid_lft?forever?preferred_lft?forever
2:?eth0:?<BROADCAST,MULTICAST,UP,LOWER_UP>?mtu?1500?qdisc?pfifo_fast?state?UP?qlen?1000
????link/ether?00:0c:29:a0:3f:29?brd?ff:ff:ff:ff:ff:ff
????inet?192.168.19.54/24?brd?192.168.19.255?scope?global?eth0
????inet6?fe80::20c:29ff:fea0:3f29/64?scope?link
??????valid_lft?forever?preferred_lft?forever
[root@localhost?~]#?ip?addr?add?dev?eth0?192.168.11.1/24?label?eth0:1
[root@localhost?~]#?ip?addr
1:?lo:?<LOOPBACK,UP,LOWER_UP>?mtu?65536?qdisc?noqueue?state?UNKNOWN
????link/loopback?00:00:00:00:00:00?brd?00:00:00:00:00:00
????inet?127.0.0.1/8?scope?host?lo
????inet6?::1/128?scope?host
??????valid_lft?forever?preferred_lft?forever
2:?eth0:?<BROADCAST,MULTICAST,UP,LOWER_UP>?mtu?1500?qdisc?pfifo_fast?state?UP?qlen?1000
????link/ether?00:0c:29:a0:3f:29?brd?ff:ff:ff:ff:ff:ff
????inet?192.168.19.54/24?brd?192.168.19.255?scope?global?eth0
????inet?192.168.10.1/24?brd?192.168.10.255?scope?global?eth0:0
????inet?192.168.11.1/24?scope?global?eth0:1??添加临时网卡及ip,这里已经有显示
????inet6?fe80::20c:29ff:fea0:3f29/64?scope?link
??????valid_lft?forever?preferred_lft?forever
[root@localhost?~]#?ip?addr?del?dev?eth0?192.168.10.1??#删除临时及网卡
[root@localhost?~]#?ip?addr?flush?eth0??#刷新网络设备

说明:ip地址也被清除了
?
[root@localhost?~]#?ip?route?add?192.168.20.0/24?via?192.168.19.54??#设置一条静态路由
[root@localhost?~]#?ip?route?show??#查看已经生效了
192.168.20.0/24?via?192.168.19.54?dev?eth0
192.168.19.0/24?dev?eth0??proto?kernel??scope?link??src?192.168.19.54
169.254.0.0/16?dev?eth0??scope?link??metric?1002
default?via?192.168.19.2?dev?eth0
[root@localhost?~]#?ip?route?del?192.168.20.0/24????#删除刚刚设置的路由
[root@localhost?~]#?ip?route
192.168.19.0/24?dev?eth0??proto?kernel??scope?link??src?192.168.19.54
169.254.0.0/16?dev?eth0??scope?link??metric?1002
default?via?192.168.19.2?dev?eth0


9.14.ethtool

功能:查询和设置网络硬件信息

示例:

[root@localhost?~]#?ethtool?eth0??#查看网卡的工作模式等信息
Settings?for?eth0:
????????Supported?ports:?[?TP?]
????????Supported?link?modes:??10baseT/Half?10baseT/Full
????????????????????????????????100baseT/Half?100baseT/Full
????????????????????????????????1000baseT/Full
????????Supported?pause?frame?use:?No
????????Supports?auto-negotiation:?Yes
????????Advertised?link?modes:??10baseT/Half?10baseT/Full
????????????????????????????????100baseT/Half?100baseT/Full
????????????????????????????????1000baseT/Full
????????Advertised?pause?frame?use:?No
????????Advertised?auto-negotiation:?Yes
????????Speed:?1000Mb/s
#?ethtool?-s?eth0?speed?10?duplex?half?autoneg?off????#改成10M/s的速率,半双工,关闭自动协商
#?ethtool?-s?eth0?speed?100?duplex?full?autoneg?on????#再改回来


9.15.mii-tool

功能:查看操作接口状态

示例:

[root@localhost?~]#?mii-tool?eth0??#查看网卡状态,以前的虚拟机里不支持,现在vmware的版本里是支持的
eth0:?negotiated?100baseTx-FD,?link?ok??#网卡连接ok
#?mii-tool?eth0
eth0:?no?link????????--代表网线和网卡没连

9.16.brctl

功能:网桥工具

示例:

查看已有网桥
你也可以为?br0?设置一个IP,已访问这台机器。
[inbi@debian~]#ifconfig?br0?10.10.1.1?netmask?255.255.0.0?up
删除网桥
[inbi@debian~]#brctl?delif?br0?eth0?eth1
#增加网桥中的接口
[inbi@debian~]#brctl?delbr?br0
#删除网桥
关闭生成树
[inbi@debian~]#brctl?stp?br0?off
#关闭生成树协议,减少数据包污染,因为我这里只有一个路由器哦!
配置桥开机激活
[inbi@debian~]#echo?"modprobe?bridge">>/etc/rc.local
#开机加载?bridge?模块,或者echo?"bridge">>/etc/modules
[inbi@debian~]#cp?/etc/network/interfaces?/etc/network/interfaces.default
#备份下,方便以后使用啊!
[inbi@debian~]#vim?/etc/network/interfaces
auto?lo?eth0?eth1?br0
iface?lo?inet?loopback
iface?br0?inet?static
address?10.10.10.1
netmask?255.255.0.0
gateway?10.10.10.254
pre-up?ip?link?set?eth0?promisc?on
pre-up?ip?link?set?eth1?promisc?on
pre-up?echo?"1">/proc/sys/net/ipv4/ip_forward
bridge_ports?eth0?eth1
#配置eth0?eth1?br0开机启动,eth0,eth1未设置IP信息,在启动br0网卡时,开启了eth0,eth1的混杂模式,并桥接了它们。
centos?6配置网桥

1)在宿主机上创建一个桥接网络
#?/etc/init.d/NetworkManager?stop
#?chkconfig?NetworkManager?off

#?vim?/etc/sysconfig/network-scripts/ifcfg-br0??--此文件不存在,br0这个名字是自定义的
DEVICE=br0??????--名字对应好
TYPE=Bridge?????--这里的Birdge,B要大写,后面的irdge要小写
BOOTPROTO=static
IPADDR=172.16.2.9
NETMASK=255.255.0.0
GATEWAY=172.16.1.1
ONBOOT=yes

2)把一个物理网卡加到一个桥接网络里,我这里是把eth0加到br0
#?vim?/etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
BRIDGE=br0??????????--这句就是把eth0桥接到br0
NM_CONTROLLED=no????????--这句就是让eth0不受networkmanager的控制
ONBOOT=YES

[root@li?~]#?brctl?show???--重启网络前的情况
bridge?name?bridge?id???????STP?enabled?interfaces
virbr0??????8000.5254004e4c3f???yes?????virbr0-nic
virbr1??????8000.5254004cf4e4???yes?????virbr1-nic

3)重启网络??/etc/init.d/network?restart
#?brctl?show????????--重启网络后查看的情况
bridge?name?bridge?id???????STP?enabled?interfaces
br0?????8000.0030677653f7???no??????eth0
virbr0??????8000.5254004e4c3f???yes?????virbr0-nic
virbr1??????8000.5254004cf4e4???yes?????virbr1-nic


9.17.nmap

功能:网络探测工具,安全及端口扫描器

其基本功能有三个:

(1)是扫描主机端口,嗅探所提供的网络服务

(2)是探测一组主机是否在线

(3)还可以推断主机所用的操作系统,到达主机经过的路由,系统已开放端口的软件版本

nmap有windows和linux

从下面官网可以下载exe程序包和zip包

https://nmap.org/download.html#windows

示例:

主机名扫描
[root@localhost?~]#?nmap?k8s-master
ip地址扫描
[root@localhost?~]#?nmap?192.168.19.35
使用-v选项
[root@localhost?~]#?nmap?-v?k8s-master
使用“?-v?“选项后给出了远程机器更详细的信息
扫描多台主机
[root@localhost?~]#?nmap?192.168.19.2?192.168.19.20?192.168.19.35
扫描整个子网
[root@localhost?~]#?nmap?192.168.19.*
nmap扫描了整个子网,给出了网络中当前网络中在线主机的信息
使用IP地址的最后一个字节扫描多台服务器
[root@localhost?~]#?nmap?192.168.19.20,35,2
从一个文件中扫描主机列表
[root@localhost?~]#?cat?>?nmaptest.txt
localhost
server2.tecmint.com
192.168.0.101
带“iL”?选项的nmap命令来扫描文件中列出的所有IP地址
[root@localhost?~]#?nmap??-iL?nmaptest.txt
扫描一个IP地址范围
[root@localhost?~]#?nmap?192.168.19.0-3
排除一些远程主机后再扫描
[root@server1?~]#?nmap?192.168.0.*?--exclude?192.168.0.100
扫描操作系统信息和路由跟踪,使用-A选项
[root@localhost?~]#?nmap?-A?192.168.19.35
启用Nmap的操作系统探测功能,使用选项“-O”和“-osscan-guess”也帮助探测操作系统信息
[root@server1?~]#?nmap?-O?server2.tecmint.com
扫描主机侦测防火墙
[root@server1?~]#?nmap?-sA?192.168.0.101
扫描主机检测是否有防火墙保护
[root@server1?~]#?nmap?-PN?192.168.0.101
找出网络中的在线主机
[root@server1?~]#?nmap?-sP?192.168.0.*
执行快速扫描
使用“-F”选项执行一次快速扫描
[root@server1?~]#?nmap?-F?192.168.0.101
查看Nmap的版本
[root@server1?~]#?nmap?-V
顺序扫描端口,使用“-r”选项表示不会随机的选择端口扫描
[root@server1?~]#?nmap?-r?192.168.0.101
打印主机接口和路由,使用nmap的“–iflist”选项检测主机接口和路由信息
[root@localhost?~]#?nmap?--iflist
扫描特定的端口,使用-P选项
[root@server1?~]#?nmap?-p?80?server2.tecmint.com
扫描TCP端口
[root@server1?~]#?nmap?-p?T:8888,80?server2.tecmint.com
扫描UDP端口
[root@server1?~]#?nmap?-sU?53?server2.tecmint.com
扫描多个端口
[root@server1?~]#?nmap?-p?80,443?192.168.0.101
扫描指定范围内的端口
[root@server1?~]#??nmap?-p?80-160?192.168.0.101
查找主机服务版本号
[root@server1?~]#?nmap?-sV?192.168.0.101
使用TCP?ACK?(PA)和TCP?Syn?(PS)扫描远程主机
[root@server1?~]#?nmap?-PS?192.168.0.101
使用TCP?ACK扫描远程主机上特定的端口
[root@server1?~]#?nmap?-PA?-p?22,80?192.168.0.101
使用TCP?Syn扫描远程主机上特定的端口
root@server1?~]#?nmap?-PS?-p?22,80?192.168.0.101
执行一次隐蔽的扫描
[root@server1?~]#?nmap?-sS?192.168.0.101
使用TCP?Syn扫描最常用的端口
[root@server1?~]#?nmap?-sT?192.168.0.101
执行TCP空扫描以骗过防火墙
root@server1?~]#?nmap?-sN?192.168.0.10


9.18.lsof

功能:(list open files)是一个列出当前系统打开文件的工具

常用选项:

-i:监听网络地址,不指定,列出所有。如果指定,有这些选项[protocol][@hostname|hostaddr][:service|port]

-U? 列出Unix域socket文件

-p? 指定PID

-u? 指定用户名或UID所有打开的文件

示例:

[root@localhost?scripts]#?lsof?-i:22??#列出22端口监听进程
COMMAND???PID?USER???FD???TYPE?DEVICE?SIZE/OFF?NODE?NAME
sshd??????904?root????3u??IPv4???9105??????0t0??TCP?*:ssh?(LISTEN)
sshd??????904?root????4u??IPv6???9109??????0t0??TCP?*:ssh?(LISTEN)
sshd????10458?root????3r??IPv4??42798??????0t0??TCP?192.168.19.20:ssh->192.168.19.1:61752?(ESTABLISHED)
sshd????10770?root????3r??IPv4??43930??????0t0??TCP?192.168.19.20:ssh->192.168.19.1:63426?(ESTABLISHED)
[root@localhost?scripts]#?lsof???????#列出所有选项

lsof工具详解:

简介

lsof是英文单词是”list open files”的缩写,见名知义,即是一个列出当前系统打开文件的工具。如果说 netcat 是进行网络诊断的最好工具,那么lsof 就是 Unix 调试的最好工具。

lsof 遵从 Unix 哲学的典范,它只做一件事情,并且做的相当完美。它打开的文件可能是普通的文件,目录,NFS 文件,块文件,字符文件,共享库,常规管道,符号链接,Socket 流,网络 Socket,UNIX 域Socket,以及其它更多。lsof的输出除了生成单个输出列表外,lsof还能以重复模式运行,在重复模式下,它将产生输出,延迟,然后重复输出操作,直到中断或退出信号停止。

文件描述目可使用stat命令来查看,如下?

技术分享图片

安装

许多 Unix 系统和Linux系统都内置了 lsof,提供lsof服务的包名就叫做lsof。如果你的系统没有安装,你可以从下面地址直接下载源代码。https://people.freebsd.org/~abe/

BSD 系统有一个类似的工具也可以做同样的事情,叫做 fstat。本文主要以Unix或Linux为例

[root@vin ~]# yum install lsof -y


高频用法

#?查询帮助
[root@localhost?~]#?man?lsof
[root@localhost?~]#?lsof?-h

#?列出所有打开的文件;不带任何参数运行?lsof?会列出所有进程打开的所有文件。
[root@localhost?~]#?lsof

#?找出谁在使用某个文件
lsof?/path/to/file????只需要执行文件的路径,lsof?就会列出所有使用这个文件的进程.
lsof?/path/to/file1?/path/to/file2????指定多个文件,lsof?会列出所有使用这些文件的进程

#?递归查找某个目录中所有打开的文件
lsof?+D?/usr/lib
lsof?|?grep?‘/usr/lib‘
加上?+D?参数,lsof?会对指定目录进行递归查找,注意这个参数要比?grep?版本慢?。
之所以慢是因为?+D?首先查找所有的文件,然后一次性输出。

#?列出某个用户打开的所有文件
lsof?-u?python
lsof?-u?tom,root
lsof?-u?tom?-u?root
-u?选项限定只列出所有被用户?python?打开的文件,你可以通过逗号指定多个用户?。
你也可以像第三条命令那样使用多个?-u?做同样的事情。

#?查找某个程序打开的所有文件
lsof?-c?apache
lsof?-c?apa
lsof?-c?apache?-c?python
-c?选项限定只列出以某进程开头的进程打开的文件;所以你可以不用像这样写?"lsof?|?grep?jerry"而使用"lsof?-c?jerry"
????你可以只制定进程名称的开头,上面第二条
????同样可以制定多个?-c?参数,例如上面第三条

#?列出所有由某个用户或某个进程打开的文件
lsof?-u?vinsent?-c?apache
你也可以组合使用多个选项,这些选项默认进行或关联,也就是说上面的命令会输入由?vinsent?用户或是?apache?进程打开的文件。
??
#?列出所有由一个用户与某个进程打开的文件
lsof?-a?-u?vinsent?-c?bash
-a?参数可以将多个选项的组合条件由或变为与,上面的命令会显示所有由?vinsent?用户以及?bash?进程打开的文件。

#?列出除?root?用户外的所有用户打开的文件
lsof?-u?^root
root?前面的?^?符号,它执行取反操作,因此lsof?会列出所有?root?用户之外的用户打开的文件。
#?列出所有由某个?PID?对应的进程打开的文件
lsof?-p?1
lsof?-p?450,980,333
-p?选项让你可以使用进程?id?来过滤输出。记住你也可以用逗号来分离多个?pid。

#?列出所有进程打开的文件除了某个?pid?的
lsof?-p?^1
同前面的用户一样,你也可以对?-p?选项使用?^?来进行取反。

#?列出所有网络连接
lsof?-i
lsof?的?-i?选项可以列出所有打开了网络套接字(TCP?和?UDP)的进程。

#?列出所有?TCP?网络连接
?lsof?-i?tcp
也可以为?-i?选项加上参数,比如?tcp,tcp?选项会强制?lsof?只列出打开?TCP?sockets?的进程。

#?列出所有?UDP?网络连接
?lsof?-i?udp
同样?udp?让?lsof?只列出使用?UDP?socket?的进程。

#?找到使用某个端口的进程
lsof?-i?:25
lsof?-i?:smtp
:25?和?-i?选项组合可以让?lsof?列出占用?TCP?或UDP?的?25?端口的进程。
你也可以使用?/etc/services?中制定的端口名称来代替端口号,比如上面第二条。

#?找到使用某个?udp?端口号或者某个?tcp?端口的进程
lsof?-i?udp:53
lsof?-i?tcp:80

#?找到某个用户的所有网络连接
lsof?-a?-u?hacker?-i
使用?-a?将?-u?和?-i?选项组合可以让?lsof?列出某个用户的所有网络行为。
????
#?列出所有?NFS(网络文件系统)文件
lsof?-N
这个参数很好记,-N?就对应?NFS。

#?列出所有?UNIX?域?Socket?文件
lsof?-U
这个选项也很好记,-U?就对应?UNIX。
????
#?列出所有对应某个组?id?的进程
lsof?-g?1234
进程组用来逻辑上对进程进行分组,这个例子查找所有?PGID?为?1234?的进程打开的文件。

#?列出所有与某个描述符关联的文件
lsof?-d?2
lsof?-d?0-2
这个命令会列出所有以描述符?2?打开的文件;你也可以为描述符指定一个范围。
上述第二条命令会列出所有描述符为?0,1,2?的文件。

#?查看所有内存映射文件
lsof?-d?mem
????
#?所有加载在内存中并正在执行的进程
lsof?-d?txt

#?输出使用某些资源的进程?pid
lsof?-t?-i
-t?选项输出进程的?PID,你可以将它和?-i?选项组合输出使用某个端口的进程的?PID,

#?kill所有使用网络的进程
kill?-9?`lsof?-t?-i`
???
#?循环列出文件
lsof?-r?1
-r?选项让?lsof?可以循环列出文件直到被中断,参数?1?的意思是每秒钟重复打印一次,
这个选项最好同某个范围比较小的查询组合使用。例如下面的例子。
??
#?监测网络活动
lsof?-r?1?-u?tom?-i?-a


9.19.mail

功能:发送和接收网络邮件

示例:

[root@36?~]#?mail?-s?‘hello‘?root??--s参数是定义主题
1111111111111111????????--邮件正文
.????????????????--点号表示结束
Cc:????????????????--抄送,这里我直接回车表示结束

[root@li?~]#?mail?a????????--也是调用mail命令
Subject:?hello?a
i?am?root
.
Cc:?b

[root@36?~]#?mail?-s?‘hello2‘?root?<?/etc/fstab
--把/etc/fstab的内容做为邮件的正文来发

#?echo?"2222222"?|?mail?-s?"11111"?mail1
#?cat?/etc/rc.local?|?mail?-s?"333333"?mail1

alt+f4?切换用户,然后mail查看??d?1删除,p继续打印,q推出
mail?-s?“主题”?user01@localhost
mail?-s?“test”?user01?a?“/etc/hosts”?</etc/passwd
-s:定义主题
-a:添加附件

查看邮件:
cat?/var/spool/mail/root
cat?/var/mail/root

#?tail?/var/spool/mail/user01
User-Agent:?Heirloom?mailx?12.4?7/29/08
MIME-Version:?1.0
Content-Type:?text/plain;?charset=us-ascii
Content-Transfer-Encoding:?7bit
Message-Id:?<20160421024307.D504B82081@node1.uplook.com>
From:?root@node1.uplook.com?(root)

hello?user01
I?am?root

[root@node1?postfix]#?tail?-f?/var/log/maillog
Apr?21?10:42:01?node1?postfix/pickup[3986]:?4E4C982081:?uid=0?from=<root>
Apr?21?10:42:01?node1?postfix/cleanup[3987]:?4E4C982081:?message-id=<20160421024201.4E4C982081@node1.uplook.com>
Apr?21?10:42:01?node1?postfix/qmgr[2044]:?4E4C982081:?from=<root@node1.uplook.com>,?size=655,?nrcpt=1?(queue?active)
Apr?21?10:42:01?node1?postfix/local[3989]:?4E4C982081:?to=<root@node1.uplook.com>,?orig_to=<root>,?relay=local,?delay=0.03,?delays=0.02/0/0/0,?dsn=2.0.0,?status=sent?(delivered?to?mailbox)
Apr?21?10:42:01?node1?postfix/qmgr[2044]:?4E4C982081:?removed
Apr?21?10:43:07?node1?postfix/pickup[3986]:?D504B82081:?uid=0?from=<root>
Apr?21?10:43:07?node1?postfix/cleanup[3987]:?D504B82081:?message-id=<20160421024307.D504B82081@node1.uplook.com>

9.20.mutt

功能:一个linux下文本的MUA工具

常用选项:

m:写邮件

y:发送

r:回复

d:删除

a:添加附件

su - user1

mutt去查看

示例:

[root@36?~]#?mutt?user1@36.web.com??--使用root用户给user1用户发送邮件,并且有发送附件等功能
mutt?-s?“mutt”?redhat
#?echo?hello?world?|mutt?-s?"test?mutt"?user02?-a?"/etc/inittab"?-a?"/etc/hosts"


9.21.nslookup

功能:交互式查询Internet名称服务器,也就是查询DNS信息

语法:nslookup [-option] [name | -] [server]

示例:

[root@localhost?~]#?nslookup
>?www.baidu.com
Server:?????????114.114.114.114????#默认配置dns服务器
Address:????????114.114.114.114#53
?
Non-authoritative?answer:
www.baidu.com???canonical?name?=?www.a.shifen.com.
Name:???www.a.shifen.com????#对应的百度dns
Address:?163.177.151.110
Name:???www.a.shifen.com
Address:?163.177.151.109

9.22.dig

功能:dns查询工具

dig设置灵活、输出清晰、功能强大的特点。

常用选项:

-c ?可以设置协议类型(class),包括IN(默认)、CH和HS。

-f ? dig支持从一个文件里读取内容进行批量查询

-4和-6 ?用于设置仅适用哪一种作为查询包传输协议,分别对应着IPv4和IPv6。

-t ?用来设置查询类型,默认情况下是A,也可以设置MX等类型

-q 其实它本身是一个多余的选项,但是它在复杂的dig命令中又是那么的有用。-q选项可以显式设置你要查询的域名,这样可以避免和其他众多的参数、选项相混淆,提高了命令的可读性,

-x 是逆向查询选项。可以查询IP地址到域名的映射关系。

示例:

[root@localhost?~]#?dig
;?<<>>?DiG?9.8.2rc1-RedHat-9.8.2-0.62.rc1.el6_9.4?<<>>
;;?global?options:?+cmd
;;?Got?answer:
;;?->>HEADER<<-?opcode:?QUERY,?status:?NOERROR,?id:?59450
;;?flags:?qr?rd?ra;?QUERY:?1,?ANSWER:?13,?AUTHORITY:?0,?ADDITIONAL:?0
说明:不加任何参数及选项,默认上连DNS服务器查询“.”(根域)的NS记录

[root@localhost?~]#?dig?.
;?<<>>?DiG?9.8.2rc1-RedHat-9.8.2-0.62.rc1.el6_9.4?<<>>?.
;;?global?options:?+cmd
;;?Got?answer:
;;?->>HEADER<<-?opcode:?QUERY,?status:?NOERROR,?id:?44635
;;?flags:?qr?rd?ra;?QUERY:?1,?ANSWER:?0,?AUTHORITY:?1,?ADDITIONAL:?0
说明:加点应该是查本机的
用google-DNS来查baidu.com的A记录
[root@localhost?~]#?dig?@8.8.8.8?www.baidu.com?A
dig的基本的命令格式
dig?@dnsserver?name?querytype
[root@localhost?~]#?cat?querylist
www.baidu.com
www.sohu.com
[root@localhost?~]#?dig?-f?querylist?-c?IN?-t?A
[root@localhost?~]#?dig?roclinux.cn?-t?MX
[root@localhost?~]#?dig?-q?www.roclinux.cn
[root@localhost?~]#?dig?-x?193.0.14.129
[root@localhost?~]#?dig?+tcp?www.baidu.com??#?DNS查询过程中的交互是采用UDP的。如果你希望采用TCP方式,需要这样
[root@localhost?~]#?dig?+domain=baidu.com?image????#默认追加域
[root@localhost?~]#?dig?+trace?roclinux.cn??#dig会从根域查询一直跟踪直到查询到最终结果,并将整个过程信息输出出来
[root@localhost?~]#?dig?+short?www.baidu.com??#精简输出
[root@localhost?~]#?dig?+nocmd?+nocomment?+nostat?www.baidu.com
;www.baidu.com.????????????IN????A
www.baidu.com.????????342????IN????CNAME????www.a.shifen.com.
www.a.shifen.com.????34????IN????A????14.215.177.38
www.a.shifen.com.????34????IN????A????14.215.177.39


9.23.host

功能:测试域名工作是否正常

常用选项:

-a:显示详细的DNS信息;

-c<类型>:指定查询类型,默认值为“IN“;

-C:查询指定主机的完整的SOA记录;

-r:在查询域名时,不使用递归的查询方式;

-t<类型>:指定查询的域名信息类型;

-v:显示指令执行的详细信息;

-w:如果域名服务器没有给出应答信息,则总是等待,直到域名服务器给出应答;

-W<时间>:指定域名查询的最长时间,如果在指定时间内域名服务器没有给出应答信息,则退出指令;

-4:使用IPv4;

-6:使用IPv6.

示例:

[root@localhost?~]#?host?www.baidu.com
www.baidu.com?is?an?alias?for?www.a.shifen.com.
www.a.shifen.com?has?address?14.215.177.39
www.a.shifen.com?has?address?14.215.177.38
[root@localhost?~]#?host?-a?www.baidu.com
Trying?"www.baidu.com"
;;?->>HEADER<<-?opcode:?QUERY,?status:?NOERROR,?id:?47657
;;?flags:?qr?rd?ra;?QUERY:?1,?ANSWER:?1,?AUTHORITY:?0,?ADDITIONAL:?0

;;?QUESTION?SECTION:
;www.baidu.com.?????????IN??ANY

;;?ANSWER?SECTION:
www.baidu.com.??????914?IN??CNAME???www.a.shifen.com.

Received?58?bytes?from?114.114.114.114#53?in?199?ms


9.24.traceroute

功能:将路由包跟踪打印到网络主机上

常用选项:

-I? --icmp? ? ?Use ICMP ECHO for tracerouting? #ICMP协议请求路由包

-T? --tcp? ? ? ?Use TCP SYN for tracerouting? ? #tcp协议请求路由包

-p port? --port=port? #端口请求


示例:

root@localhost?~]#?traceroute?baidu.com
traceroute?to?baidu.com?(180.149.132.47),?30?hops?max,?60?byte?packets
?1??192.168.19.2?(192.168.19.2)??0.086?ms??0.037?ms??0.041?ms
?2??*?*?*
?3??*?*?*
?4??*?*?*
?5??*?*?*
?6??*?*?*
说明:*号主要是服务器把udp数据包屏蔽了,所有没有返回ICMP
[root@localhost?~]#?traceroute?-T?-p?80?baidu.com
traceroute?to?baidu.com?(180.149.132.47),?30?hops?max,?52?byte?packets
?1??192.168.19.2?(192.168.19.2)??0.168?ms??0.072?ms??0.101?ms
?2??180.149.132.47?(180.149.132.47)??42.414?ms??37.795?ms??38.718?ms


9.25.tcpdump

功能:抓包工具

常用选项:

-A:文本形式显示抓包数据

-X:显示16进制的报文数据

-w:输出结果到文件中,如- w 1.cap 将报文输出到 1.cap 文件,此文件可用 wireshark 查看

示例:

过滤主机和端口号 如 host 11.11.11.11 and port 12345 过滤主机 ip 为 11.11.11.11,端口号为 12345 的 tcp 报文

抓取eth0网卡上的包,使用:
[root@localhost?scripts]#?tcpdump?-i?eth0
抓取?80?端口的?HTTP?报文,以文本形式展示:
[root@localhost?scripts]#?tcpdump?-i?any?port?80?-A

9.26.starce

功能:跟踪系统调用和信号

常用选项:

-f:跟踪进程内的线程

-C: 统计时间段内的各个系统调用次数分布

-e trace: 过滤某些系统调用

如 - e trace=network 只显示网络相关的系统调用,-e trace=open,close,read,write 只显示这 4 个系统调用,常用于只获取某些特定的系统调用

-ttt: 显示系统调用的时间

- s: 加大字符串的长度限制,如:-s 1024

示例:

跟踪?pid?为?12345?的进程中所有线程的?read?和?write?系统调用,输出字符串的长度限制为?1024:
strace?-s?1024?-f?-e?trace=read,write?-p?12345
跟踪test进程:
strace?-p?[test_pid]?或直接strace?./test

9.27.elinks

功能:实现纯文本界面访问网页

语法:elinks(选项)(参数)

常用选项:

-anonymous:是否使用匿名帐号方式;

-auto-submit:遇到的第一个表单是否自动提交;

-config-dir:指定elinks指令运行时读取和写入自身的配置和运行状态的存放目录;

-dump:将HTML文档以纯文本的方式打印到标准输出设备;

-version:打印指令的版本信息;

-h:打印帮助信息。

示例:

[root@localhost?~]#?elinks?-dump?www.baidu.com
???Refresh:?[1]/baidu.html?from=noscript
???Link:?[2]百度搜索?(search)
???Link:?[3]dns-prefetch
???Link:?[4]dns-prefetch
???Link:?[5]dns-prefetch
???Link:?[6]dns-prefetch
???Link:?[7]dns-prefetch
???Link:?[8]dns-prefetch
???Link:?[9]dns-prefetch
???Link:?[10]dns-prefetch
???[11]到百度首页
???[12]_____________________?[13][?百度一下?]
???输入法
?
?????*?[14]手写
?????*?[15]拼音
?????*
?????*?[16]关闭

9.28.curl

功能:传递一个url

语法:curl [options] [URL...]

常用选项:

-a/--append ?
? 上传文件时,附加到目标文件
-A/--user-agent <agent string>
指定客户端信息
-anyauth
可以使用“任何”身份验证方法
-b/--cookie <name=data>
从文件中读取cookie
--basic
使用HTTP基本验证
-B/--use-ascii
使用ASCII /文本传输
-c/--cookie-jar
操作结束后把cookie写入到这个文件中
-C/--continue-at <offset>
断点续传
-c/--cookie-jar <file name>
把cookie保存到文件
-d/--data <data>
使用POST方式发送数据
--data-ascii<data>以ascii的方式post数据
--data-binary<data>以二进制的方式post数据
--negotiate
使用HTTP身份验证
--digest
使用数字身份验证
--disable-eprt
禁止使用EPRT或LPRT
--disable-epsv
禁止使用EPSV
-D/--dump-header <file>
保存头信息到文件
--data-urlencode <data>
POST的数据URL编码
--egd-file
为随机数据(SSL)设置EGD socket路径
--tcp-nodelay ? ?
使用TCP_NODELAY选项
-e/--referer <URL>?
来源网址
-E/--cert?
客户端证书文件和密码 (SSL)
--cert-type
证书文件类型 (DER/PEM/ENG) (SSL)
--key<key> ? ? ?
私钥文件名 (SSL)
--key-type<type>
私钥文件类型 (DER/PEM/ENG) (SSL) ? ?
--pass<pass>
私钥密码 (SSL)
--engine<eng>
加密引擎使用 (SSL). "--engine list" for list
--cacert<file>
CA证书 (SSL)
--capath<directory>
CA目录 (made using c_rehash) to verify peer against (SSL)
--ciphers<list>
SSL密码
--compressed
要求返回是压缩的形势 (using deflate or gzip)
--connect-timeout<seconds>
设置最大请求时间
--create-dirs
建立本地目录的目录层次结构
--crlf
上传是把LF转变成CRLF
-f/--fail?
连接失败时不显示http错误
--ftp-create-dirs
如果远程目录不存在,创建远程目录
--ftp-method [multicwd/nocwd/singlecwd]
控制CWD的使用
--ftp-pasv
指定FTP连接模式PASV/EPSV
--ftp-skip-pasv-ip
使用PASV的时候,忽略该IP地址
--ftp-ssl
尝试用 SSL/TLS 来进行ftp数据传输
--ftp-ssl-reqd
要求用 SSL/TLS 来进行ftp数据传输
-F/--form <name=content>
指定POST数据的表单
--form-string<name=string>
模拟http表单提交数据
-g/--globoff
禁用网址序列和范围使用{}和[]
-G/--get
以get的方式来发送数据
-H/--header <header>
自定义头信息发送给服务器
--ignore-content-length
忽略的HTTP头信息的长度
-i/--include
输出时包括protocol头信息
-L/--location ?
遵循URL重定向,默认不处理
-I/--head ?
查看HTTP头信息
-j/--junk-session-cookies
读取文件进忽略session cookie
--interface <interface>
使用指定网络接口/地址
--krb4 <level>
使用指定安全级别的krb4
-k/--insecure ? ?
允许不使用证书到SSL站点
-K/--config ? ?
指定的配置文件读取
-l/--list-only ? ? ? ???
列出ftp目录下的文件名称
--limit-rate
设置传输速度
--local-port
强制使用本地端口号
-M/--manual ? ?
显示全手动
-n/--netrc ? ?
从netrc文件中读取用户名和密码
--netrc-optional
使用 .netrc 或者 URL来覆盖-n
--ntlm? ?
使用 HTTP NTLM 身份验证
-N/--no-buffer
禁用缓冲输出
-O/--remote-name
使用远程服务器上名字写到本地
-p/--proxytunnel ? ?
使用HTTP代理
--proxy-anyauth ? ?
选择任一代理身份验证方法
--proxy-basic ? ?
在代理上使用基本身份验证
--proxy-digest
在代理上使用数字身份验证
--proxy-ntlm
在代理上使用ntlm身份验证
-q ? ?
作为第一个参数,关闭 .curlrc
-Q/--quote?
文件传输前,发送命令到服务器
-P/--ftp-port <address>
指定FTP端口
-r/--range?
检索来自HTTP/1.1或FTP服务器字节范围
--range-file
读取(SSL)的随机文件
-R/--remote-time
在本地生成文件时,保留远程文件时间
--retry<num>?
连接重试次数
--retry-delay<seconds>
两次重试间隔等待时间
--retry-max-time
传输出现问题时,设置最大重试时间
-#/--progress-bar
显示bar进度条
-x,/--proxy[PROTOCOL://]HOST[:PORT]
使用代理
-o/--output <file>

输出到文件

-U/--proxy-user <user:password>
代理用户名和密码
--connect-timeout
连接超时时间,单位秒
-t/--telnet-option <OPT=val>
Telnet选项设置
--trace <file>
对指定文件进行debug
--trace-ascii <file>
Like --跟踪但没有hex输出
--trace-time ? ?
跟踪/详细输出时,添加时间戳
-x/--proxy?
在给定的端口上使用HTTP代理
-X/--request?
指定什么命令
-s/--silent
静默模式,不输出任何东西
-S/--show-error ? ?
显示错误
--socks4?<host[port]>
用socks4代理给定主机和端口
--socks5?<host[port]>用socks5代理给定主机和端口
--stderr <file>

-y/--speed-time ? ?
放弃限速所要的时间,默认为30
-Y/--speed-limit
限制下载速率
-u/--user <user:password>
指定http和ftp用户名和密码
-U/--proxy-user?
设置代理用户名和密码
-T/ --upload-file
上传文件
--url <URL>
Spet URL to work with
-m/--max-time <seconds>
指定处理的最大时长
--max-redirs <num> ?
设置最大读取的目录数
--max-filesize <bytes>
设置最大下载的文件总量
w/--write-out [format]
什么输出完成后

示例:

[root@localhost?scripts]#?curl?www.baidu.com????#百度字符页面就展示在命令行上
<!DOCTYPE?html>
[root@localhost?scripts]#?curl?-o?baidu.html?www.baidu.com??#保存页面
??%?Total????%?Received?%?Xferd??Average?Speed??Time????Time????Time??Current
????????????????????????????????Dload??Upload??Total??Spent????Left??Speed
103??2381??103??2381????0????0??41981??????0?--:--:--?--:--:--?--:--:--??211k
[root@localhost?scripts]#?ls?baidu.html
baidu.html
[root@localhost?scripts]#?curl?-s?-o?baidu.html?www.baidu.com??#不输出下载信息
[root@localhost?scripts]#
[root@localhost?scripts]#?curl?-b?cookies?www.baidu.com??????????????#使用cookie访问
#?curl?-u?user:pass?http://www.example.com???????????????????????????#访问HTTP认证页面
?1.当我们不加任何选项使用?curl?时,默认会发送?GET?请求来获取链接内容到标准输出。
curl?http://www.codebelief.com
显示?HTTP?主页内容
2.如果我们只想要显示?HTTP?头,而不显示文件内容,可以使用?-I?选项:
curl?-I?http://www.codebelief.com
输出为:
HTTP/1.1?200?OK
Server:?nginx/1.10.3
Date:?Thu,?11?May?2017?08:24:45?GMT
Content-Type:?text/html;?charset=utf-8
Content-Length:?24206
Connection:?keep-alive
X-Powered-By:?Express
Cache-Control:?public,?max-age=0
ETag:?W/"5e8e-Yw5ZdnVVly9/aEnMX7fVXQ"
Vary:?Accept-Encoding

3.也可以同时显示?HTTP?头和文件内容,使用?-i?选项:
curl?-i?http://www.codebelief.com
输出为:
HTTP/1.1?200?OK
Server:?nginx/1.10.3
Date:?Thu,?11?May?2017?08:25:46?GMT
Content-Type:?text/html;?charset=utf-8???Content-Length:?24206
Connection:?keep-alive
X-Powered-By:?Express
Cache-Control:?public,?max-age=0
ETag:?W/"5e8e-Yw5ZdnVVly9/aEnMX7fVXQ"
Vary:?Accept-Encoding

<!DOCTYPE?html>
<html>
......
</html>

??4.将链接保存到文件
我们可以使用?>?符号将输出重定向到本地文件中。

curl?http://www.codebelief.com?>?index.html
也可以通过?curl?自带的?-o/-O?选项将内容保存到文件中。

-o(小写的?o):结果会被保存到命令行中提供的文件名
-O(大写的?O):URL?中的文件名会被用作保存输出的文件名

curl?-o?index.html?http://www.codebelief.com
curl?-O?http://www.codebelief.com/page/2/
注意:使用?-O?选项时,必须确保链接末尾包含文件名,否则?curl?无法正确保存文件。如果遇到链接中无文件名的情况,应该使用?-o?选项手动指定文件名,或使用重定向符号。
?
5.同时下载多个文件
我们可以使用?-o?或?-O?选项来同时指定多个链接,按照以下格式编写命令:
curl?-O?http://www.codebelief.com/page/2/?-O?http://www.codebelief.com/page/3/
或者:
curl?-o?page1.html?http://www.codebelief.com/page/1/?-o?page2.html
http://www.codebelief.com/page/2/

??6.使用?-L?跟随链接重定向
如果直接使用?curl?打开某些被重定向后的链接,这种情况下就无法获取我们想要的网页内容。例如:

curl?http://codebelief.com
会得到如下提示:

<html>
<head><title>301?Moved?Permanently</title></head>
<body?bgcolor="white">
<center><h1>301?Moved?Permanently</h1></center>
<hr><center>nginx/1.10.3</center>
</body>
</html>
而当我们通过浏览器打开该链接时,会自动跳转到?http://www.codebelief.com。此时我们想要?curl?做的,就是像浏览器一样跟随链接的跳转,获取最终的网页内容。我们可以在命令中添加?-L选项来跟随链接重定向:

curl?-L?http://codebelief.com
这样我们就能获取到经过重定向后的网页内容了。

?
7.使用?-A?自定义?User-Agent
我们可以使用?-A?来自定义用户代理,例如下面的命令将伪装成安卓火狐浏览器对网页进行请求:

curl?-A?"Mozilla/5.0?(Android;?Mobile;?rv:35.0)?Gecko/35.0?Firefox/35.0"?http://www.baidu.com
下面我们会使用?-H?来实现同样的目的。

8.使用?-H?自定义?header
当我们需要传递特定的?header?的时候,可以仿照以下命令来写:

curl?-H?"Referer:?www.example.com"?-H?"User-Agent:?Custom-User-Agent"?http://www.baidu.com
可以看到,当我们使用?-H?来自定义?User-Agent?时,需要使用?"User-Agent:?xxx"?的格式。

我们能够直接在?header?中传递?Cookie,格式与上面的例子一样:

curl?-H?"Cookie:?JSESSIONID=D0112A5063D938586B659EF8F939BE24"?http://www.example.com
另一种方式会在下面介绍
?
9.使用?-c?保存?Cookie
当我们使用?cURL?访问页面的时候,默认是不会保存?Cookie?的。有些情况下我们希望保存?Cookie?以便下次访问时使用。例如登陆了某个网站,我们希望再次访问该网站时保持登陆的状态,这时就可以现将登陆时的?Cookie?保存起来,下次访问时再读取。

-c?后面跟上要保存的文件名。

curl?-c?"cookie-example"?http://www.example.com
?
10.使用?-b?读取?Cookie
前面讲到了使用?-H?来发送?Cookie?的方法,这种方式是直接将?Cookie?字符串写在命令中。如果使用?-b?来自定义?Cookie,命令如下:

curl?-b?"JSESSIONID=D0112A5063D938586B659EF8F939BE24"?http://www.example.com
如果要从文件中读取?Cookie,-H?就无能为力了,此时可以使用?-b?来达到这一目的:

curl?-b?"cookie-example"?http://www.example.com
即?-b?后面既可以是?Cookie?字符串,也可以是保存了?Cookie?的文件名。

?
11.使用?-d?发送?POST?请求
我们以登陆网页为例来进行说明使用?cURL?发送?POST?请求的方法。假设有一个登录页面?www.example.com/login,只需要提交用户名和密码便可登录。我们可以使用?cURL?来完成这一?POST?请求,-d?用于指定发送的数据,-X?用于指定发送数据的方式:

curl?-d?"userName=tom&passwd=123456"?-X?POST?http://www.example.com/login
curl?-d?"userName=tom&passwd=123456"?-X?POST?http://www.example.com/login

curl?-d?"userName=tom&passwd=123456"?http://www.example.com/login

12.强制使用?GET?方式
发送数据时,不仅可以使用?POST?方式,也可以使用?GET?方式,例如:
curl?-d?"somedata"?-X?GET?http://www.example.com/api
或者使用?-G?选项:
curl?-d?"somedata"?-G?http://www.example.com/api

13.从文件中读取?data
curl?-d?"@data.txt"?http://www.example.com/login

14.带?Cookie?登录
当然,如果我们再次访问该网站,仍然会变成未登录的状态。我们可以用之前提到的方法保存?Cookie,在每次访问网站时都带上该?Cookie?以保持登录状态。
curl?-c?"cookie-login"?-d?"userName=tom&passwd=123456"?http://www.example.com/login
再次访问该网站时,使用以下命令:

curl?-b?"cookie-login"?http://www.example.com/login
这样,就能保持访问的是登录后的页面了。
15.获取状态码
通过curl的-w参数我们可以自定义curl的输出,%{http_code}代表http状态码
[root@localhost?html]#?curl?-I?-m?10?-o?/dev/null?-s?-w?%{http_code}?192.168.19.20
200[root@localhost?html]#
[root@localhost?~]#?curl?-I?-m?10?-o?/dev/null?-s?-w?%{http_code}"\n"?192.168.19.20
200
-I/--head?只显示头文件信息
-m?指定处理的最大时长
-s?静默模式,不输出任何长度
-w?什么输入完成后
-o?输出到文件


网络操作命令(9)

标签:网络   网卡   接口   

原文地址:http://blog.51cto.com/lanbitou/2048423

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!