一、简述
Linux上的ip命令和ifconfig命令有些类似,相比之下,ip命令的功能更加强大ifconfig命令已经被放弃,并不再维护,建议使用ip命令,特别是在脚本中。
二、使用
1.ip命令
显示或修改Linux主机的路由、网络设备、策略路由和隧道。
1.1)格式
~]# ip [ OPTIONS ] OBJECT { COMMAND | help }
OPTIONS
-s 打印更多信息(如统计信息RX/RX errors)。该选项可多次使用
-f 指定协议族(inet/inet6/bridge/ipx/dnet/link)
link 不涉及任何网络协议
-r 使用系统的名字解析功能打印出DNS名字,而不是主机地址
OBJECT := { link | address | maddress | route |rule }
address 设备上的协议(IP/IPv6)地址
link 网络设备
maddress 多播地址
route 路由表项
rule 路由规则
link OBJECT:
ip link 网络设备配置
ip link set { DEVICE } [ { up | down } ] 激活或禁用指定接口
ip link show
[ DEVICE ] 指定接口
[ up ] 仅显示处于激活状态的接口
address OBJECT:
ip address 协议地址管理
ip addr { add | del } IFADDR dev STRING
[label LABEL]:添加地址时指明网卡别名
[scope {global|link|host}]:指明作用域
global:全局可用
link:仅链接可用
host:本机可用
[broadcast ADDRESS]:指明广播地址
ip address show 查看协议地址
dev IFNAME 查看指定的设备
label PATTERN 查看指定网卡别名的设备
primary and secondary 只列出主要地址(或次要地址)
ip address flush 刷新协议地址
dev IFNAME 查看指定的设备
label PATTERN 查看指定网卡别名的设备
primary and secondary 只列出主要地址(或次要地址)
route OBJECT:
ip route 路由表管理
ip route add 添加一个新路由(格式:ip route add TARGET via GW dev IFACE src SOURCE_IP)
TARGET:
主机路由:IP
网络路由:NETWORK/MASK
添加网关(默认路由):ip route add default via GW dev IFACE
ip route delete 删除路由(格式:ip route del TARGET)
ip route show 查看路由表
ip route flush 刷新路由表
dev IFACE 刷新指定的路由表
via PREFIX 刷新指定前缀的路由表信息
1.2)案例
注:命令行模式下配置的Linux的ip存在于内核上,重启后就会消失,重启会重新加载配置文件。
# 列出当前主机所有网卡设备的概要信息(这里所有的mac地址均是修改后的)
[root@wybaron_host1015 ~]# ip link show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
link/ether 00:0c:29:d8:cf:8e brd ff:ff:ff:ff:ff:ff
3: ens36: <BROADCAST,MULTICAST> mtu 2500 qdisc pfifo_fast state DOWN mode DEFAULT group default qlen 1000
link/ether 00:0c:29:d8:cf:98 brd ff:ff:ff:ff:ff:ff
# 列出当前主机所有网卡设备的详细信息
[root@wybaron_host1015 ~]# ip -s link show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
RX: bytes packets errors dropped overrun mcast
4692 58 0 0 0 0
TX: bytes packets errors dropped carrier collsns
4692 58 0 0 0 0
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
link/ether 00:0c:29:d8:cf:8e brd ff:ff:ff:ff:ff:ff
RX: bytes packets errors dropped overrun mcast
739995994 9438751 0 0 0 0
TX: bytes packets errors dropped carrier collsns
13879375 52791 0 0 0 0
3: ens36: <BROADCAST,MULTICAST> mtu 2500 qdisc pfifo_fast state DOWN mode DEFAULT group default qlen 1000
link/ether 00:0c:29:d8:cf:98 brd ff:ff:ff:ff:ff:ff
RX: bytes packets errors dropped overrun mcast
0 0 0 0 0 0
TX: bytes packets errors dropped carrier collsns
0 0 0 0 0 0
2.ss命令
端口查看工具。
2.1)格式
ss [options]... [ FILTER ]
[options]
-t tcp协议相关
-u udp协议相关
-w RAW套接字相关
-x unix套接字相关
-l listen状态的连接
-a 所有
-n 数字格式
-p 相关程序及PID
-e 扩展的信息
-m 内存用量
-o 计时器信息
-4 只显示ipv4的套接字
-6 只显示ipv6的套接字
[ FILTER ] := [ state TCP-STATE ] [ EXPRESSION ]
TCP-STATE:
LISTEN 监听状态,可以接受连接
ESTABLISHED 已建立的连接
FIN_WAIT_1
FIN_WAIT_2
SYN_SENT 与SYN_RCVD 状态相呼应的状态
SYN_RCVD 服务器端的SOCKET在建立TCP连接时的三次握手会话过程中的一个中间状态,很短暂。基本上使用命令很难看到这个状态
CLOSED 初始状态,关闭状态
EXPRESSION:(案例: '(dport = :ssh or sport = :ssh)' )
dport =
sport =
2.2)案例
# 常用组合
ss -tan 以数字格式显示所有tcp协议的套接字
ss -tanl 以数字格式显示所有tcp协议的监听套接字
ss -tanlp 以数字格式显示所有tcp协议监听的套接字和对应的应用的pid
ss -uan 以数字格式显示所有udp协议的套接字
# 显示tcp套接字
[root@wybaron_host1015 ~]# ss -ta
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 *:sunrpc *:*
LISTEN 0 128 *:ssh *:*
LISTEN 0 100 127.0.0.1:smtp *:*
LISTEN 0 3 *:pptp *:*
ESTAB 0 52 172.16.22.4:ssh 172.16.20.1:55439
LISTEN 0 128 :::sunrpc :::*
LISTEN 0 128 :::http :::*
LISTEN 0 128 :::ssh :::*
LISTEN 0 100 ::1:smtp :::*
# 显示套接字摘要
[root@wybaron_host1015 ~]# ss -s
Total: 590 (kernel 1020)
TCP: 10 (estab 1, closed 1, orphaned 0, synrecv 0, timewait 0/0), ports 0
Transport Total IP IPv6
* 1020 - -
RAW 2 0 2
UDP 6 3 3
TCP 9 5 4
INET 17 8 9
FRAG 0 0 0
# 查看当前被监听的端口
[root@wybaron_host1015 ~]# ss -l
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
nl UNCONN 0 0 rtnl:-1191181655 *
nl UNCONN 0 0 rtnl:kernel *
nl UNCONN 0 0 rtnl:-1191181655 *
nl UNCONN 4352 0 tcpdiag:ss/92795 *
nl UNCONN 768 0 tcpdiag:kernel *
nl UNCONN 0 0 xfrm:kernel *
nl UNCONN 0 0 selinux:kernel *
nl UNCONN 0 0 audit:systemd/1 *
nl UNCONN 0 0 audit:auditd/589 *
nl UNCONN 0 0 audit:kernel *
nl UNCONN 0 0 fiblookup:kernel *
nl UNCONN 0 0 connector:kernel *
...
# 查看进程使用的套接字
[root@wybaron_host1015 ~]# ss -lp
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
...
u_dgr UNCONN 0 0 /var/run/chrony/chronyd.sock 18177 * 0 users:(("chronyd",pid=649,fd=5))
u_dgr UNCONN 0 0 /run/systemd/notify 8711 * 0 users:(("systemd",pid=1,fd=18))
u_dgr UNCONN 0 0 /run/systemd/cgroups-agent 8713 * 0 users:(("systemd",pid=1,fd=20))
u_str LISTEN 0 128 /run/systemd/private 13330 * 0 users:(("systemd",pid=1,fd=12))
u_str LISTEN 0 100 private/proxywrite 22489 * 0 users:(("master",pid=1302,fd=53))
...
# 查看某端口上的进程或某进程的端口与pid
[root@wybaron_host1015 ~]# ss -pnl | grep 3306
tcp LISTEN 0 50 *:3306 *:* users:(("mysqld",pid=93184,fd=13))
[root@wybaron_host1015 ~]# ss -pnl | grep mysqld
u_str LISTEN 0 50 /var/lib/mysql/mysql.sock 240679 * 0 users:(("mysqld",pid=93184,fd=15))
tcp LISTEN 0 50 *:3306 *:* users:(("mysqld",pid=93184,fd=13))
三、补充
TCP的状态
参考
http://www.cnblogs.com/qlee/archive/2011/07/12/2104089.html