基础网络命令(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 [email protected] 远程主机执行命令:
# ssh [email protected] 'ifconfig' 本地文件内容写到远程主机文件:
# ssh [email protected] 'cat >> file' < /etc/passwd
SSH 还提供了一个非常有用的功能,就是端口转发,能帮你解决一些无法建立的连接。


9.3.sshpass

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

常用选项:

-f  从文件中获取密码

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

-p  密码作为参数

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

示例:

免交互SSH登录:
# sshpass -p 123456 ssh [email protected]
免交互传输文件:
# sshpass -p 123456 scp a.txt 192.168.1.10:/root
密码传入系统变量:
# SSHPASS=123456 rsync -avz /etc/hosts -e "sshpass -e ssh" [email protected]:/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 [email protected]:/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.
[email protected]'s password:
system.sh                                     100% 7273     7.1KB/s   00:00
[root@localhost ~]# scp dir001 [email protected]:/root   #复制目录不加参数就会报错
\[email protected]'s password:
dir001: not a regular file
[root@localhost ~]# scp -r dir001 [email protected]:/root   #所以加-r目录才会复制过去
[email protected]'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信息不显示了

网络操作命令(9)_第1张图片

网络操作命令(9)_第2张图片


#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   
[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-tool iproute2
地址和链路配置 ifconfig ip addr, ip link
路由表 route ip route
邻居 arp ip neigh
VLAN vconfig ip link
隧道 iptunnel ip tunnel
组播 ipmaddr ip maddr
统计 netstat ss

示例:

#看看耗时
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:  mtu 65536 qdisc noqueue state UNKNOWN
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth0:  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:  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:  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:  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:  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:  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:  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” 
From: [email protected] (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=
Apr 21 10:42:01 node1 postfix/cleanup[3987]: 4E4C982081: message-id=<[email protected]>
Apr 21 10:42:01 node1 postfix/qmgr[2044]: 4E4C982081: from=, size=655, nrcpt=1 (queue active)
Apr 21 10:42:01 node1 postfix/local[3989]: 4E4C982081: to=, orig_to=, 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=
Apr 21 10:43:07 node1 postfix/cleanup[3987]: D504B82081: message-id=<[email protected]>

9.20.mutt

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

常用选项:

m:写邮件

y:发送

r:回复

d:删除

a:添加附件

su - user1

mutt去查看

示例:

[root@36 ~]# mutt [email protected]  --使用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
指定客户端信息
-anyauth
可以使用“任何”身份验证方法
-b/--cookie
从文件中读取cookie
--basic
使用HTTP基本验证
-B/--use-ascii
使用ASCII /文本传输
-c/--cookie-jar
操作结束后把cookie写入到这个文件中
-C/--continue-at
断点续传
-c/--cookie-jar
把cookie保存到文件
-d/--data
使用POST方式发送数据
--data-ascii 以ascii的方式post数据
--data-binary 以二进制的方式post数据
--negotiate
使用HTTP身份验证
--digest
使用数字身份验证
--disable-eprt
禁止使用EPRT或LPRT
--disable-epsv
禁止使用EPSV
-D/--dump-header
保存头信息到文件
--data-urlencode
POST的数据URL编码
--egd-file
为随机数据(SSL)设置EGD socket路径
--tcp-nodelay    
使用TCP_NODELAY选项
-e/--referer  
来源网址
-E/--cert 
客户端证书文件和密码 (SSL)
--cert-type
证书文件类型 (DER/PEM/ENG) (SSL)
--key      
私钥文件名 (SSL)
--key-type
私钥文件类型 (DER/PEM/ENG) (SSL)    
--pass
私钥密码 (SSL)
--engine
加密引擎使用 (SSL). "--engine list" for list
--cacert
CA证书 (SSL)
--capath
CA目录 (made using c_rehash) to verify peer against (SSL)
--ciphers
SSL密码
--compressed
要求返回是压缩的形势 (using deflate or gzip)
--connect-timeout
设置最大请求时间
--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
指定POST数据的表单
--form-string
模拟http表单提交数据
-g/--globoff
禁用网址序列和范围使用{}和[]
-G/--get
以get的方式来发送数据
-H/--header

自定义头信息发送给服务器
--ignore-content-length
忽略的HTTP头信息的长度
-i/--include
输出时包括protocol头信息
-L/--location  
遵循URL重定向,默认不处理
-I/--head  
查看HTTP头信息
-j/--junk-session-cookies
读取文件进忽略session cookie
--interface
使用指定网络接口/地址
--krb4
使用指定安全级别的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

指定FTP端口
-r/--range 
检索来自HTTP/1.1或FTP服务器字节范围
--range-file
读取(SSL)的随机文件
-R/--remote-time
在本地生成文件时,保留远程文件时间
--retry 
连接重试次数
--retry-delay
两次重试间隔等待时间
--retry-max-time
传输出现问题时,设置最大重试时间
-#/--progress-bar
显示bar进度条
-x,/--proxy[PROTOCOL://]HOST[:PORT]
使用代理
-o/--output

输出到文件

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

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

示例:

[root@localhost scripts]# curl www.baidu.com    #百度字符页面就展示在命令行上

[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



......


 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
会得到如下提示:


301 Moved Permanently

301 Moved Permanently


nginx/1.10.3
而当我们通过浏览器打开该链接时,会自动跳转到 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 输出到文件