Linux的核心,网络相关

很多工具也是通过分析加工 /proc、/sys 下的数据来工作的,而那些更加细致、专业的性能监测和调优,可能还需要更加专业的工具(perf、systemtap等)和技术才能完成。

Linux学习之网络相关命令_服务器


目录:

  • strace
  • traceroute
  • tracert
  • sar
  • ifconfig
  • ip
  • nc
  • lsof
  • stat
  • netstat
  • ps
  • pstree
  • ss
  • telnet
  • top
  • Htop
  • iotop
  • powertop
  • iftop
  • dstat
  • nethogs
  • Nmon
  • vnstat
  • host
  • dig
  • route
  • tcpdump

strace

用于跟踪程序执行过程中的系统调用,如跟踪test进程:
strace -p [test_pid] 或直接strace ./test
跟踪进程内的线程: -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​

traceroute

通过traceroute,可以知道信息从你的计算机到互联网另一端的主机是走的什么路径。当然每次数据包由某一同样的出发点source到达某一目的地(destination)走的路径可能会不一样,但基本上来说大部分时候所走的路由是相同的。Linux系统中traceroute,在MS Windows中为tracert。traceroute通过发送小的数据包(预设数据包大小是40Bytes)到目的设备直到其返回,来测量其需要多长时间。一条路径上的每个设备traceroute要测3次。输出结果中包括每次测试的时间(ms)和设备的名称(如有的话)及其IP地址。

# 跳数设置
traceroute -m 10 www.baidu.com
# 默认30跳
# 显示IP地址,不查主机名
traceroute -n www.baidu.com
# 探测包使用的基本UDP端口设置6888
traceroute -p 6888 www.baidu.com
# 把探测包的个数设置为值4,默认3个
traceroute -q 4 www.baidu.com
# 绕过正常的路由表,直接发送到网络相连的主机
traceroute -r www.baidu.com
traceroute to www.baidu.com (61.135.169.125), 30 hops max, 40 byte packets
connect: 网络不可达
# 把对外发探测包的等待响应时间设置为3秒
traceroute -w 3 www.baidu.com

tracert

有必要指出tracert是Windows系统下的命令,功能和traceroute类似。
语法:
​​​tracert [-d] [-h maximum_hops] [-j host-list] [-w timeout] target_name​

sar

Sysstat 工具列表

  • sar - 收集和展示系统的所有活动数据统计。
  • sadc - 代表“系统活动数据收集器”。 这个是 sar 用于数据收集的后台工具。
  • sa1 - 存储系统活动数据在二进制文件中。sa1 依赖于 sadc。sa1 运行在定时任务中。
  • sa2 - 创建收集的日总结报告。sa2 在定时任务中运行。
  • sadf - 可以以 CSV,XML,和其他各种格式生成 sar 报告。
  • iostat - 生成 CPU,I/O 统计数据。
  • mpstat - 展示 CPU 统计数据。
  • pidstat - 基于线程 PID 报告统计数据。
  • nfsiostat - 展示 NFS I/O 统计数据。
  • cifsiostat - 生成 CIFS 统计数据。

源码安装

wget http://pagesperso-orange.fr/sebastien.godard/sysstat-10.0.0.tar.bz2
tar xvfj sysstat-10.0.0.tar.bz2
cd sysstat-10.0.0
./configure --enable-install-cron
编译时使用--enable-install-cron 选项,自动完成以下事情:
创建 /etc/rc.d/init.d/sysstat
从 /etc/rc.d/rc*.d/ 目录创建软连接到 /etc/rc.d/init.d/sysstat 以便 linux 启动的时候自动启动 sysstat
比如,/etc/rc.d/rc3.d/S01sysstat 被自动链接到 /etc/rc.d/init.d/sysstat
make
make install

这将把 sar 以及其他的 systat 工具放在/usr/local/bin目录下。如果通过源码安装,sa1 和 sa2 的默认位置为 /usr/local/lib/sa。如果你使用包管理器安装(如 yum或者 apt-get),可能位于 /usr/lib/sa/sa1 和 /usr/lib/sa/sa2。
​​​sar -V​​命令查看 sar 版本。

使用定时任务收集 sar 统计数据,在 /etc/cron.d 目录创建 sysstat 文件来收集和归档 sar 数据

# vi /etc/cron.d/sysstat
*/10 * * * * root /usr/local/lib/sa/sa1 1 1
53 23 * * * root /usr/local/lib/sa/sa2 -A

/usr/local/lib/sa/sa1
This runs every 10 minutes and collects sar data for historical reference.
If you want to collect sar statistics every 5 minutes, change /10 to /5 in the above /etc/cron.d/sysstat file.
This writes the data to /var/log/sa/saXX file. XX is the day of the month. saXX file is a binary file. You cannot view its content by opening it in a text editor.
For example, If today is 26th day of the month, sa1 writes the sar data to /var/log/sa/sa26
You can pass two parameters to sa1: interval (in seconds) and count.
In the above crontab example: sa1 1 1 means that sa1 collects sar data 1 time with 1 second interval (for every 10 mins).

/usr/local/lib/sa/sa2
This runs close to midnight (at 23:53) to create the daily summary report of the sar data.
sa2 creates /var/log/sa/sarXX file (Note that this is different than saXX file that is created by sa1). This sarXX file created by sa2 is an ascii file that you can view it in a text editor.
This will also remove saXX files that are older than a week. So, write a quick shell script that runs every week to copy the /var/log/sa/* files to some other directory to do historical sar data analysis.

命令行实例

# 系统 CPU 统计数据 3 次(1 秒一次)
sar -u 1 3
# 独立 CPU 的 CPU 利用率,CPU编号为0~n,以及ALL
sar -P ALL 1 1
sar -P 1 1 1
# 内存空闲和使用率
sar -r 1 3
# 已使用的 Swap 空间,-f 指定文件
sar -S -f /var/log/sa/sa10
# 综合 I/O 活动数据
sar -b 1 3
sar -b -f /var/log/sa/sa10
# 独立的块设备 I/O 活动数据,-p 选项显示实际的设备名字
sar -d 1 1
sar -d -f /var/log/sa/sa10
sar -p -d 1 1
# 展示每秒上下文切换
sar -w 1 3
sar -w -f /var/log/sa/sa10
# 运行队列和系统负载报告
sar -q 1 3
# 网络统计报告,KEYWORD见**附**
sar -n KEYWORD
sar -n DEV 1 1
# 使用开始时间展示 sar 数据
sar -q -f /var/log/sa/sa23 -s 10:00:01


KEYWORD 说明:
DEV – Displays network devices vital statistics for eth0, eth1, etc.,
EDEV – Display network device failure statistics
NFS – Displays NFS client activities
NFSD – Displays NFS server activities
SOCK – Displays sockets in use for IPv4
IP – Displays IPv4 network traffic
EIP – Displays IPv4 network errors
ICMP – Displays ICMPv4 network traffic
EICMP – Displays ICMPv4 network errors
TCP – Displays TCPv4 network traffic
ETCP – Displays TCPv4 network errors
UDP – Displays UDPv4 network traffic
SOCK6, IP6, EIP6, ICMP6, UDP6 are for IPv6
ALL – This displays all of the above information. The output will be very long.

ifconfig

windows下有ipconfig命令行工具,用来获取网络接口配置信息并对此进行修改。Linux系统下类似的命令行工具是:ifconfig(interfaces config)。通常需要以root身份登录或使用sudo方式使用。

# 最简单的一条 ifconfig 命令,显示网络设备信息(激活状态的)
eth0 Link encap:Ethernet HWaddr 00:50:56:BF:26:20
inet addr:192.168.120.204 Bcast:192.168.120.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:8700857 errors:0 dropped:0 overruns:0 frame:0
TX packets:31533 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:596390239 (568.7 MiB) TX bytes:2886956 (2.7 MiB)

lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:68 errors:0 dropped:0 overruns:0 frame:0
TX packets:68 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:2856 (2.7 KiB) TX bytes:2856 (2.7 KiB)
eth0 表示第一块网卡,HWaddr 表示网卡的物理地址,可以看到目前这个网卡的物理地址(MAC地址)是 00:50:56:BF:26:20
inet addr 用来表示网卡的IP地址,此网卡的 IP地址是 192.168.120.204,广播地址, Bcast:192.168.120.255,掩码地址Mask:255.255.255.0

lo 是表示主机的回坏地址,这个一般是用来测试一个网络程序,但又不想让局域网或外网的用户能够查看,只能在此台主机上运行和查看所用的网络接口。比如把 HTTPD服务器的指定到回坏地址,在浏览器输入 127.0.0.1 就能看到你所架WEB网站了。但只是您能看得到,局域网的其它主机或用户无从知道。

第一行:连接类型:Ethernet(以太网)HWaddr(硬件mac地址)
第二行:网卡的IP地址、子网、掩码
第三行:UP(代表网卡开启状态)RUNNING(代表网卡的网线被接上)MULTICAST(支持组播)MTU:1500(最大传输单元):1500字节
第四、五行:接收、发送数据包情况统计
第七行:接收、发送数据字节数统计信息。

# 用ifconfig修改MAC地址;ssh登陆linux服务器操作要小心,关闭则不能开启,除非你有多网卡。
ifconfig eth0 down #关闭网卡eth0
ifconfig eth0 hw ether 00:AA:BB:CC:DD:EE //修改MAC地址
ifconfig eth0 up #启动网卡eth0

# 为网卡配置和删除IPv6地址
ifconfig eth0 add 33ffe:3240:800:1005::2/64 为网卡eth0配置IPv6地址;
ifconfig eth0 del 33ffe:3240:800:1005::2/64 为网卡eth0删除IPv6地址;

# 配置IP地址
# 给eth0网卡配置IP地:192.168.120.56
ifconfig eth0 192.168.120.56
# 给eth0网卡配置IP地址:192.168.120.56 ,并加上子掩码:255.255.255.0
ifconfig eth0 192.168.120.56 netmask 255.255.255.0
# 给eth0网卡配置IP地址:192.168.120.56,加上子掩码:255.255.255.0,加上个广播地址: 192.168.120.255
ifconfig eth0 192.168.120.56 netmask 255.255.255.0 broadcast 192.168.120.255

# 启用和关闭ARP协议
ifconfig eth0 arp #开启网卡eth0 的arp协议;
ifconfig eth0 -arp #关闭网卡eth0 的arp协议;

# 设置最大传输单元,最大数据包大小为 1500 bytes;用ifconfig命令配置的网卡信息,在网卡重启后机器重启后,配置就不存在。要想将上述的配置信息永远的存的电脑里,那就要修改网卡的配置文件。
ifconfig eth0 mtu 1500

ip

Linux的ip命令和ifconfig类似,但功能更强大,并旨在取代后者。使用ip一个命令,就能很轻松地执行一些网络管理任务。ifconfig是net-tools中已被废弃使用的一个命令。iproute2套件里提供许多增强功能的命令。

Linux学习之网络相关命令_服务器_02


大多数Linux发行版已经预装iproute2工具。

# 设置和删除Ip地址,IP地址要有一个后缀,比如/24。这种用法用于在无类域内路由选择(CIDR)中来显示所用的子网掩码。
sudo ip addr add 192.168.0.193/24 dev wlan0
sudo ip addr del 192.168.0.193/24 dev wlan0
# 查看是否已经生效
ip addr show wlan0
# 更改默认路由
sudo ip route add default via 192.168.0.196
# 显示网络统计数据,当你需要获取一个特定网络接口的信息时,在网络接口名字后面添加选项ls即可。使用多个-s选项会给你这个特定接口更详细的信息。特别是在排除网络连接故障时
ip -s link
ip -s -s link ls p2p1
# 地址解析协议(ARP)用于将一个IP地址转换成它对应的物理地址,也就是通常所说的MAC地址。使用neigh或者neighbour选项查看接入你所在的局域网的设备的MAC地址
ip neighbour
# 监控netlink消息
monitor选项允许你查看网络设备的状态。比如,所在局域网的一台电脑根据它的状态可以被分类成REACHABLE或者STALE
ip monitor all
# 激活和停止网络接口
当ppp0接口被激活和在它被停止和再次激活之后,你可以看到相应的路由表条目。这个接口可能是wlan0或者eth0。将ppp0更改为你可用的任意接口即可
sudo ip link set ppp0 down
sudo ip link set ppp0 up
# 列出路由表条目
ip命令的路由对象的参数还可以帮助你查看网络中的路由数据,并设置你的路由表。第一个条目是默认的路由条目,你可以随意改动它。
这个结果显示有几个设备通过不同的网络接口连接起来。它们包括WIFI、以太网和一个点对点连接
ip route show
假设现在你有一个IP地址,你需要知道路由包从哪里来。可以使用下面的路由选项(译注:列出了路由所使用的接口等)
ip route get 10.42.0.47

nc

ncat/nc,一款功能类似 cat 的工具。一款拥有多种功能的 CLI 工具,可以用来在网络上读、写以及重定向数据。它被设计成可以被脚本或其他程序调用的可靠的后端工具。同时由于它能创建任意所需的连接,因此也是一个很好的网络调试工具。
ncat/nc用于端口扫描/监测,可以做为一个简单的 TCP 代理。安装:​​​yum install nmap-ncat -y​​。系统管理员可以用它来审计系统安全,用它来找出开放的端口然后保护这些端口。管理员还能用它作为客户端来审计 Web 服务器、telnet 服务器、邮件服务器等, 通过 nc 可以控制发送的每个字符,也可以查看对方的回应。捕获客户端发送的数据以此来了解这些客户端是做什么的。

# 监听入站连接,-l 选项,ncat 可以进入监听模式,在指定端口监听入站连接:
ncat -l 8080
# 连接远程系统:创建一个连接到 IP 为 192.168.1.100 的服务器上的 80 端口,然后可以向服务器发送指令
ncat 192.168.1.100 80
比如可以输入下面内容来获取完整的网页内容
GET / HTTP/1.1
或者可以通过以下方式获得操作系统指纹标识,
GET / HTTP/1.1
这会告诉我们使用的是什么软件来运行这个 web 服务器的。

# 连接 UDP 端口,默认情况下,nc 创建连接时只会连接 TCP 端口。-u 选项来连接到 UDP 端口
ncat -l -u 1234
# 发送或者说测试某个远程主机 UDP 端口的连通性,我们可以使用下面命令,
ncat -v -u 192.168.105.150 53
# nc 也可以作为聊天工具来用,可以配置服务器监听某个端口,然后从远程主机上连接到服务器的这个端口,就可以开始发送消息。 在服务器这端运行:
$ ncat -l 8080
在远程客户端主机上运行:$ ncat 192.168.1.100 8080
之后开始发送消息,这些消息会在服务器终端上显示出来。

nc 也可以用来做代理$ ncat -l 8080 | ncat 192.168.1.200 80
所有发往服务器 8080 端口的连接都会自动转发到 192.168.1.200 上的 80 端口。由于使用管道,数据只能被单向传输。要同时能够接受返回的数据,需要创建一个双向管道:
$ mkfifo 2way
$ ncat -l 8080 0<2way | ncat 192.168.1.200 80 1>2way
现在你可以通过 nc 代理来收发数据。

nc 还能用来在系统间拷贝文件,因为绝大多数系统默认都安装 ssh/scp。不过如果你恰好遇见个没有 ssh/scp 的系统的话,你可以用 nc 来作最后的努力。

在要接受数据的机器上启动 nc 并让它进入监听模式:$ ncat -l 8080 > file.txt

现在去要被拷贝数据的机器上运行下面命令:$ ncat 192.168.1.100 8080 --send-only < data.txt
这里,data.txt 是要发送的文件。 -–send-only 选项会在文件拷贝完后立即关闭连接。 如果不加该选项, 我们需要手工按下 ctrl+c 来关闭连接。
我们也可以用这种方法拷贝整个磁盘分区,不过请一定要小心。

# 通过 nc 创建后门,这种技术也确实被黑客大量使用,-e选项将一个 bash 与端口 10000 相连
ncat -l 10000 -e /bin/bash
然后客户端只要连接到服务器上的 10000 端口就能通过 bash 获取系统的完整访问权限
ncat 192.168.1.100 10000
# -c 来用 nc 进行端口转发,所有连接到 80 端口的连接都会转发到 8080 端口
ncat -u -l 80 -c 'ncat -u -l 8080'

# 设置连接超时,nc 的监听模式会一直运行,直到手工终止。-w 设置超时时间,达到超时时间后终止,只能用于客户端而不是服务端。
ncat -w 10 192.168.1.100 8080

# 使用 -k 选项强制 nc 待命
当客户端从服务端断开连接后,过一段时间服务端也会停止监听,选项 -k 强制服务器保持连接并继续监听端口
ncat -l -k 8080

# 检查 80 端口是否被打开/可连通
nc -zv localhost 80
# nc可在Linux上开启TCP Server、TCP Client、UDP Server、UDP Client。
# 如在端口号12345上开启TCP Server和Client模拟TCP通信
Server: nc -l 127.0.0.1 12345
Client: nc 127.0.0.1 12345
# 在端口号12345上开启UDP Server和Client模拟TCP通信:
Server: nc -ul 127.0.0.1 12345
Client: nc -u 127.0.0.1 12345
# Unix Socket通信示例:
Server: nc -Ul /tmp/1.sock
Client: nc -U /tmp/1.sock

lsof

list open files,列出当前系统打开文件的工具。Linux环境下,任何事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件。所以如TCP和UDP套接字等,系统在后台都为该应用程序分配一个文件描述符,无论这个文件的本质如何,该文件描述符为应用程序与基础操作系统之间的交互提供通用接口。因为应用程序打开文件的描述符列表提供大量关于这个应用程序本身的信息,因此 lsof 工具能够用于系统监测以及排错。需要root权限。
lsof打开的文件包括:

  1. 普通文件
  2. 目录
  3. 网络文件系统的文件
  4. 字符或设备文件
  5. (函数)共享库
  6. 管道,命名管道
  7. 符号链接
  8. 网络文件(例如:NFS file、网络socket,unix域名socket)
  9. 其它类型的文件等
# 递归查看某个目录的文件信息
lsof usr/etc/
# 列出某(几)个程序进程所打开的文件信息,一个-c等价于lsof | grep mysql,-u列出某个用户打开的文件信息,lsof -u ^root排除root用户打开的文件信息
lsof -u root -c mysql -c apache
# 输出所用正在使用 80 端口的 进程/服务 的名称,输出信息:COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME,找到进程的 pid,然后可以使用命令 kill 杀掉进程。
lsof -iTCP:80 -sTCP:LISTEN
# 查看端口占用进程信息,经常用于端口绑定失败时确认端口被哪个进程占用
lsof -i:8080
# 查看进程打开了哪些文件或套接字
sudo lsof -p [pid]

stat

用来显示文件或文件系统的状态信息。当用文件名作为参数时,stat将会展示文件的全部信息。状态信息包括文件 大小、块、权限、访问时间、修改时间、状态改变时间等。用法:​​stat <file_name>​

netstat

netstat命令用于显示与IP、TCP、UDP和ICMP协议相关的统计数据,一般用于检验本机各端口的网络连接情况。netstat是在内核中访问网络及相关信息的程序,它能提供TCP连接,TCP和UDP监听,进程内存管理的相关报告。
用于列出系统上所有的网络套接字连接情况,包括 tcp, udp 以及 unix 套接字,以及处于监听状态(即等待接入请求)的套接字。如果你想确认系统上的 Web 服务有没有起来,你可以查看80端口有没有打开。可用于打印网络连接、路由表、连接的数据统计、伪装连接以及广播域成员。
命令格式:​​​netstat [-acCeFghilMnNoprstuvVwx][-A<网络类型>][--ip]​​​ 命令选项:
-a或–all 显示所有连线中的Socket。
-A<网络类型>或–<网络类型> 列出该网络类型连线中的相关地址。
-c或–continuous 持续列出网络状态。
-C或–cache 显示路由器配置的快取信息。
-e或–extend 显示网络其他相关信息。
-F或–fib 显示FIB。
-g或–groups 显示多重广播功能群组组员名单。
-h或–help 在线帮助。
-i或–interfaces 显示网络界面信息表单。
-l或–listening 显示监控中的服务器的Socket。
-M或–masquerade 显示伪装的网络连线。
-n或–numeric 直接使用IP地址,而不通过域名服务器。
-N或–netlink或–symbolic 显示网络硬件外围设备的符号连接名称。
-o或–timers 显示计时器。
-p或–programs 显示正在使用Socket的程序识别码和程序名称。
-r或–route 显示Routing Table。
-s或–statistice 显示网络工作信息统计表。
-t或–tcp 显示TCP传输协议的连线状况。
-u或–udp 显示UDP传输协议的连线状况。
-v或–verbose 显示指令执行过程。
-V或–version 显示版本信息。
-w或–raw 显示RAW传输协议的连线状况。
-x或–unix 此参数的效果和指定”-A unix”参数相同。
–ip或–inet 此参数的效果和指定”-A inet”参数相同。

从整体上看,netstat的输出结果可以分为两个部分:
一个是Active Internet connections,称为有源TCP连接,其中"Recv-Q"和"Send-Q"指的是接收队列和发送队列。这些数字一般都应该是0。如果不是则表示软件包正在队列中堆积。这种情况只能在非常少的情况见到。

另一个是Active UNIX domain sockets,称为有源Unix域套接口(和网络套接字一样,但是只能用于本机通信,性能可以提高一倍)。

Proto显示连接使用的协议,RefCnt表示连接到本套接口上的进程号,Types显示套接口的类型,State显示套接口当前的状态,Path表示连接到套接口的其它进程使用的路径名。

套接口类型:
-t :TCP
-u :UDP
-raw :RAW类型
–unix :UNIX域类型
–ax25 :AX25类型
–ipx :ipx类型
–netrom :netrom类型

状态说明:
LISTEN:侦听来自远方的TCP端口的连接请求
SYN-SENT:再发送连接请求后等待匹配的连接请求(如果有大量这样的状态包,检查是否中招了)
SYN-RECEIVED:再收到和发送一个连接请求后等待对方对连接请求的确认(如有大量此状态,估计被flood攻击了)
ESTABLISHED:代表一个打开的连接
FIN-WAIT-1:等待远程TCP连接中断请求,或先前的连接中断请求的确认
FIN-WAIT-2:从远程TCP等待连接中断请求
CLOSE-WAIT:等待从本地用户发来的连接中断请求
CLOSING:等待远程TCP对连接中断的确认
LAST-ACK:等待原来的发向远程TCP的连接中断请求的确认(不是什么好东西,此项出现,检查是否被攻击)
TIME-WAIT:等待足够的时间以确保远程TCP接收到连接中断请求的确认
CLOSED:没有任何连接状态
详细实例:

# -a 列出所有有效连接信息,包括tcp,udp 和 unix 协议下所有套接字的所有连接。包括已建立(ESTABLISHED),监听中(LISTENING)
# -t 列出 TCP 协议连接,-u列出 UDP。上面同时显示 IPv4 和 IPv6 的连接。
# -n 禁用域名解析,加快查询速度。默认情况下 netstat 会通过反向域名解析技术查找每个 IP 地址对应的主机名。这会降低查找速度。显示所有已建立的有效连接
netstat -ant
# -l只列出监听中的连接。任何网络服务的后台进程都会打开一个端口,用于监听接入的请求。这些正在监听的套接字也和连接的套接字一样,也能被 netstat 列出来。如果你查看所有监听端口,去掉 -t 选项。不要使用 -a 选项,否则 netstat 会列出所有连接,而不仅仅是监听端口。
netstat -tnl
# -s 按照各个协议分别显示其网络统计数据,包括收发包数量,协议:IP,Icmp,IcmpMsg,TCP,UDP,TcpExt,IpExt
netstat -s/netstat -su
# -r 打印内核路由信息。与 route 命令输出的信息一样
# -i 打印网络接口(网卡)信息,加上-e选项搭配输出用户友好的信息,与 ifconfig 输出的信息一样
# -c 选项持续输出信息
# -g 会输出 IPv4 和 IPv6 的多播组信息
# 获取进程名、进程号以及用户 ID
# -p 选项查看进程信息(进程名和进程号),需要root 权限,很多服务都运行在 root 权限之下
netstat -nlpt
# -e 显示关于以太网的统计数据,列出的项目包括传送的数据报的总字节数、错误数、删除数、数据报的数量和广播的数量。这些统计数据既有发送的数据报数量,也有接收的数据报数量。这个选项可以用来统计一些基本的网络流量
# -ep 选项可以同时查看进程名和用户名,相比进程名和进程号而言,查看进程的拥有者会更有用。这些额外的信息包括用户名和进程的索引节点号。将 -n 和 -e 选项一起使用,User 列的属性就是用户的 ID 号,而不是用户名。
netstat -ltpe
# active 状态的套接字连接用 “ESTABLISHED” 字段表示,使用 grep 命令获得 active 状态的连接
netstat -atnp | grep ESTA
# 配合 watch 监视 active 状态的连接
watch -d -n0 "netstat -atnp | grep ESTA"
# 结合grep查看 http,smtp 或 ntp 服务是否在运行
sudo netstat -aple | grep ntp

# 统计机器中网络连接各个状态个数
netstat -a | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
ESTABLISHED 1
LISTEN 3
# 把状态全都取出来后使用uniq -c统计后再进行排序
netstat -nat |awk '{print $6}'|sort|uniq -c (仅仅统计)
netstat -nat |awk '{print $6}'|sort|uniq -c|sort -rn (排序)
# 查看连接某服务端口最多的的IP地址
netstat -nat | grep "192.168.120.20:16067" |awk '{print $5}'|awk -F: '{print $4}'|sort|uniq -c|sort -nr|head -20
# 找出程序运行的端口
netstat -ap | grep ssh
# 显示 PID 和进程名称
netstat -pt
netstat -p 可以与其它开关一起使用,就可以添加 “PID/进程名称” 到 netstat 输出中,这样 debugging 的时候可以很方便的发现特定端口运行的程序。

# 找出运行在指定端口的进程
netstat -anpt | grep ':16064'
运行在端口16064的进程id为24596,再通过ps命令就可以找到具体的应用程序。

ps

Process Status,用来列出系统中当前运行的进程的快照,即执行ps命令的那个时刻的那些进程。想要动态的显示进程信息,得使用top命令。
要对进程进行监测和控制,首先必须要了解当前进程的情况,也就是需要查看当前进程。使用该命令可以确定有哪些进程正在运行和运行的状态、进程是否结束、进程有没有僵死、哪些进程占用过多资源等。总之大部分信息都是可以通过执行该命令得到的。kill 命令用于杀死进程。
linux上进程有5种状态:

  1. 运行(正在运行或在运行队列中等待)
  2. 中断(休眠中, 受阻, 在等待某个条件的形成或接受到信号)
  3. 不可中断(收到信号不唤醒和不可运行, 进程必须等待直到有中断发生)
  4. 僵死(进程已终止, 但进程描述符存在, 直到父进程调用wait4()系统调用后释放)
  5. 停止(进程收到SIGSTOP, SIGSTP, SIGTIN, SIGTOU信号后停止运行运行)

ps工具标识进程的5种状态码:
D 不可中断 uninterruptible sleep (usually IO)
R 运行 runnable (on run queue)
S 中断 sleeping
T 停止 traced or stopped
Z 僵死 a defunct (”zombie”) process

命令​​ps -l​​​输出:
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
4 S 0 2448 2320 0 80 0 - 14082 wait pts/2 00:00:00 su
4 S 0 2449 2448 0 80 0 - 6330 wait pts/2 00:00:00 bash
0 R 0 2461 2449 0 80 0 - 3561 - pts/2 00:00:00 ps
解读
F,代表这个程序的旗标 (flag), 4 代表使用者为 super user
S,进程状态STAT:
R :该程序目前正在运作,或者是可被运作
S :该程序目前正在睡眠当中 (可说是 idle 状态),但可被某些讯号 (signal) 唤醒。
T :该程序目前正在侦测或者是停止了
Z :该程序应该已经终止,但是其父程序却无法正常的终止他,造成 zombie (疆尸) 程序的状态
UID,进程的拥有者uid
PID,进程id
PPID,父进程id
C,CPU 使用的资源百分比
PRI,优先级Priority
NI,这个是 Nice 值
ADDR,kernel function,指出该程序在内存的那个部分。如果是个 running的程序,一般就是 “-”
SZ,使用掉的内存大小
WCHAN,目前这个进程是否正在运作当中,若为 - 表示正在运作
TTY,登入者的终端机位置,若与终端机无关,则显示 ?,tty1-tty6 是本机上面的登入者程序,若为 pts/0 等,则表示为由网络连接进主机的程序
TIME,使用掉的 CPU 时间
CMD,指令
在预设的情况下, ps 仅会列出与目前所在的 bash shell 有关的 PID 而已,所以, 当我使用 ps -l 的时候,只有三个 PID。

另​​ps aux​​​命令的输出和命令​​ps -l​​​的输出有部分字段相同,意义也一样,不同的字段如下:
VSZ :该 process 使用掉的虚拟内存量 (Kbytes)
RSS :该 process 占用的固定的内存量 (Kbytes)
START:该 process 被触发启动的时间

# 显示所有进程信息
ps -A
# 输出指定用户的进程和线程。L列出线程,-F完整格式化
ps -LF -u root
# 列出类似程序树的程序显示
ps -axjf
找出与 cron 与 syslog 这两个服务有关的 PID 号码
ps aux | egrep '(cron|syslog)'
# 用 | 管道符和 more 连接起来分页查看
ps -aux |more
# 把所有进程显示出来,并输出到ps001.txt文件
ps -aux > ps001.txt
# 输出指定的字段信息
ps -o pid,ppid,pgrp,session,tpgid,comm
# 显示所有进程信息,连同命令行
ps -ef
# 与grep组合查找特定进程
ps -ef|grep ssh

pstree

显示当前运行的所有进程及其相关的子进程,输出的是类似‘tree’命令的树状格式。

ss

Socket Statistics,是iproute2包附带的一个工具,可以比其他工具显示更多的TCP和状态信息,而且比netstat更快速更高效。安装 iproute2-doc 包, 通过 /usr/share/doc/iproute2-doc/ss.html获得完整文档。不带选项显示类似netstat命令的信息,输入类似的参数可以获取想要的类似输出。
当服务器的socket连接数量变得非常大时,无论是使用netstat命令(netstat遍历/proc下的每个PID目录来工作)还是直接cat /proc/net,执行速度都会很慢。ss快的秘诀在于,利用到TCP协议栈中tcp_diag。tcp_diag是一个用于分析统计的模块,可以获得Linux 内核中第一手的信息。当然,如果你的系统中没有tcp_diag,ss也可以正常运行,只是效率会变得稍慢,但仍然比netstat要快。-K 强制关闭 socket。
ss与 iptables 的语法非常相同。

# -t显示TCP连接,-u显示UDP Sockets,-a表示所有
ss -t -a
# 显示连接到/tmp/a.sock的进程
ss -x src /tmp/a.sock
# 显示 Sockets 摘要,列出当前的established, closed, orphaned and waiting TCP sockets
ss -s
# 列出所有打开的网络连接端口
ss -l
# 找出打开套接字/端口应用程序
ss -lp | grep 3306
# 显示所有状态为established的SMTP连接
ss -o state established '( dport = :smtp or sport = :smtp )'
# 显示所有状态为Established的HTTP连接
ss -o state established '( dport = :http or sport = :http )'
# 列举出处于 FIN-WAIT-1状态的源端口为 80或者 443,目标网络为 193.233.7/24所有 tcp套接字
ss -o state fin-wait-1 '( sport = :http or sport = :https )' dst 193.233.7/24
# 用TCP 状态过滤Sockets:
ss -4/6 state FILTER-NAME可选项:established、syn-sent、syn-recv、fin-wait-1、fin-wait-2、time-wait、closed、close-wait、last-ack、listen、closing、all(所有以上状态)、connected(除了listen and closed的所有状态)、synchronized(所有已连接的状态除syn-sent)、bucket(显示状态为maintained as inisockets,如time-wait和syn-recv)、big(和bucket相反)
ss -4 state closing
# 匹配远程地址和端口号
ss dst ADDRESS_PATTERN
ss dst 192.168.1.5
ss dst 192.168.119.113:http
ss dst 192.168.119.113:smtp
ss dst 192.168.119.113:443
# 内置过滤能力,列出所有端口为 22(ssh)的连接
ss state all sport = :ssh
# 只看已建立的 socket(排除listening 和 closed)
ss state connected sport = :ssh
# 列出指定的 host 或者 ip 段,列出到达 74.125.0.0/16 子网的连接
ss state all dst 74.125.0.0/16

# 匹配本地地址和端口号
ss src ADDRESS_PATTERN
ss src 192.168.119.103
ss src 192.168.119.103:http
ss src 192.168.119.103:80
ss src 192.168.119.103:smtp
ss src 192.168.119.103:25
# 将本地或者远程端口和一个数比较
ss dport OP PORT
ss sport OP PORT
ss dport OP PORT 远程端口和一个数比较;ss sport OP PORT 本地端口和一个数比较。
OP 可以代表以下任意一个:
<= or le : 小于或等于端口号
>= or ge : 大于或等于端口号
== or eq : 等于端口号
!= or ne : 不等于端口号
< or gt : 小于端口号
> or lt : 大于端口号

# ss 和 netstat 效率对比
time netstat -at
time ss
用time 命令分别获取通过netstat和ss命令获取程序和概要占用资源所使用的时间。在服务器连接数比较多的时候,netstat的效率完全没法和ss比。

telnet

telnet命令通常用来远程登录,基于TELNET协议的远程登录客户端程序,TCP/IP协议族中的一员,是Internet远程登陆服务的标准协议和主要方式。在终端使用者的电脑上使用telnet程序,用它连接到服务器。终端使用者可以在telnet程序中输入命令,这些命令会在服务器上运行,就像直接在服务器的控制台上输入一样。可以在本地就能控制服务器。要开始一个 telnet会话,必须输入用户名和密码来登录服务器。
因为telnet采用明文传送报文,安全性不好,很多Linux服务器都不开放telnet服务,而改用更安全的ssh方式。但仍然有很多别的系统可能采用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<认证形态> 关闭指定的认证形态。

top

常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器。显示系统当前的进程和其他状况;top是一个动态显示过程,即可以通过用户按键来不断刷新当前状态。默认情况下在前台执行,将独占前台,直到用户终止该程序为止。top命令提供了实时的对系统处理器的状态监视.它将显示系统中CPU最“敏感”的任务列表.该命令可以按CPU使用.内存使用和执行时间对任务进行排序;很多特性都可以通过交互式命令或者在个人定制文件中进行设定。

top - 02:05:04 up 10:10,  3 users,  load average: 0.05, 0.02, 0.00
Tasks: 175 total, 1 running, 174 sleeping, 0 stopped, 0 zombie
Cpu(s): 2.0%us, 0.7%sy, 0.0%ni, 97.3%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 2071588k total, 1752664k used, 318924k free, 43712k buffers
Swap: 4161528k total, 0k used, 4161528k free, 1456840k cached

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
10515 root 20 0 69592 24m 8536 S 2.0 1.2 0:15.98 Xorg
10841 johnny 20 0 42864 11m 9512 S 0.3 0.6 0:00.51 wnck-applet

统计信息区
前五行是系统整体的统计信息。第一行是任务队列信息,同 uptime 命令的执行结果。其内容如下:
02:05:04 当前时间
up 10:10 系统运行时间,格式为时:分
3 user 当前登录用户数
load average: 0.05, 0.02, 0.00 系统负载,即任务队列的平均长度。
三个数值分别为 1分钟、5分钟、15分钟前到现在的平均值。
第二、三行为进程和CPU的信息。当有多个CPU时,这些内容可能会超过两行。内容如下:
Tasks: 175 total 进程总数
1 running 正在运行的进程数
174 sleeping 睡眠的进程数
0 stopped 停止的进程数
0 zombie 僵尸进程数
Cpu(s): 0.3% us 用户空间占用CPU百分比
1.0% sy 内核空间占用CPU百分比
0.0% ni 用户进程空间内改变过优先级的进程占用CPU百分比
98.7% id 空闲CPU百分比
0.0% wa 等待输入输出的CPU时间百分比
0.0% hi
0.0% si
最后两行为内存信息。内容如下:
Mem: 191272k total 物理内存总量
173656k used 使用的物理内存总量
17616k free 空闲内存总量
22052k buffers 用作内核缓存的内存量
Swap: 192772k total 交换区总量
0k used 使用的交换区总量
192772k free 空闲交换区总量
123988k cached 缓冲的交换区总量。
内存中的内容被换出到交换区,而后又被换入到内存,但使用过的交换区尚未被覆盖,
该数值即为这些内容已存在于内存中的交换区的大小。
相应的内存再次被换出时可不必再对交换区写入。
进程信息区
统计信息区域的下方显示了各个进程的详细信息。首先来认识一下各列的含义。
序号 列名 含义
a PID 进程id
b PPID 父进程id
c RUSER Real user name
d UID 进程所有者的用户id
e USER 进程所有者的用户名
f GROUP 进程所有者的组名
g TTY 启动进程的终端名。不是从终端启动的进程则显示为 ?
h PR 优先级
i NI nice值。负值表示高优先级,正值表示低优先级
j P 最后使用的CPU,仅在多CPU环境下有意义
k %CPU 上次更新到现在的CPU时间占用百分比
l TIME 进程使用的CPU时间总计,单位秒
m TIME+ 进程使用的CPU时间总计,单位1/100秒
n %MEM 进程使用的物理内存百分比
o VIRT 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
p SWAP 进程使用的虚拟内存中,被换出的大小,单位kb。
q RES 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA
r CODE 可执行代码占用的物理内存大小,单位kb
s DATA 可执行代码以外的部分(数据段+栈)占用的物理内存大小,单位kb
t SHR 共享内存大小,单位kb
u nFLT 页面错误次数
v nDRT 最后一次写入到现在,被修改过的页面数。
w S 进程状态。
D=不可中断的睡眠状态
R=运行
S=睡眠
T=跟踪/停止
Z=僵尸进程
x COMMAND 命令名/命令行
y WCHAN 若该进程在睡眠,则显示睡眠中的系统函数名
z Flags 任务标志,参考 sched.h
默认情况下仅显示比较重要的 PID、USER、PR、NI、VIRT、RES、SHR、S、%CPU、%MEM、TIME+、COMMAND 列。可以通过下面的快捷键来更改显示内容。
更改显示内容
通过 f 键可以选择显示的内容。按 f 键之后会显示列的列表,按 a-z 即可显示或隐藏对应的列,最后按回车键确定。
按 o 键可以改变列的显示顺序。按小写的 a-z 可以将相应的列向右移动,而大写的 A-Z 可以将相应的列向左移动。最后按回车键确定。
按大写的 F 或 O 键,然后按 a-z 可以将进程按照相应的列进行排序。而大写的 R 键可以将当前的排序倒转。
4.1使用格式
​​​top [-] [d] [p] [q] [c] [C] [S] [s] [n]​​​ 4.2参数说明
d 指定每两次屏幕信息刷新之间的时间间隔。当然用户可以使用s交互命令来改变之。
p 通过指定监控进程ID来仅仅监控某个进程的状态。
q该选项将使top没有任何延迟的进行刷新。如果调用程序有超级用户权限,那么top将以尽可能高的优先级运行。
S 指定累计模式
s 使top命令在安全模式中运行。这将去除交互命令所带来的潜在危险。
i 使top不显示任何闲置或者僵死进程。
c 显示整个命令行而不只是显示命令名
4.3其他
  下面介绍在top命令执行过程中可以使用的一些交互命令。这些命令都是单字母的,如果在命令行选项中使用了s选项,则可能其中一些命令会被屏蔽掉。
  Ctrl+L 擦除并且重写屏幕。
  h或者? 显示帮助画面,给出一些简短的命令总结说明。
  k 终止一个进程。系统将提示用户输入需要终止的进程PID,以及需要发送给该进程什么样的信号。一般的终止进程可以使用15信号;如果不能正常结束那就使用信号9强制结束该进程。默认值是信号15。在安全模式中此命令被屏蔽。
  i 忽略闲置和僵死进程。这是一个开关式命令。
  q 退出程序。
  r 重新安排一个进程的优先级别。系统提示用户输入需要改变的进程PID以及需要设置的进程优先级值。输入一个正值将使优先级降低,反之则可以使该进程拥有更高的优先权。默认值是10。
  S 切换到累计模式。
  s 改变两次刷新之间的延迟时间。系统将提示用户输入新的时间,单位为s。如果有小数,就换算成m s。输入0值则系统将不断刷新,默认值是5 s。需要注意的是如果设置太小的时间,很可能会引起不断刷新,从而根本来不及看清显示的情况,而且系统负载也会大大增加。
  f或者F 从当前显示中添加或者删除项目。
  o或者O 改变显示项目的顺序。
  l 切换显示平均负载和启动时间信息。
  m 切换显示内存信息。
  t 切换显示进程和CPU状态信息。
  c 切换显示命令名称和完整命令行。
  M 根据驻留内存大小进行排序。
  P 根据CPU使用百分比大小进行排序。
  T 根据时间/累计时间进行排序。
W 将当前设置写入~/.toprc文件中。这是写top配置文件的推荐方法。

Htop

比内置的 top 任务管理更强大的工具,提供带有诸多选项的高级接口用于监控系统进程。支持鼠标操作,可以使用菜单导航、选择进程,以及通过排序和过滤来管理任务。
部分快捷键
\过滤器
/搜索
,选择排序条件
k发送杀死信号
u用户过滤结果
t打开/关闭树模式
-和+ 折叠 / 展开选定的流程树
H关闭显示线程

iotop

通过磁盘写入对进程进行排序,并显示程序写入磁盘的次数和频率。

powertop

通过能量消耗列出流程。当你在外面,在某个地方你不能为笔记本电脑充电的地方时,这是一个至关重要的命令。

iftop

显而易见,输出和top命令的输出非常相似。可以用于找出网络拥塞,测速和维持网络流量总量。只有一个网络接口,直接运行 iftop 即可;如果有多个网络接口,需要指定要监控的接口:​​sudo iftop -i wlan0​​​。
使用实例:

# 查看某视频类网站的网络流量
# 得到ip4地址208.85.40.20
dig A pandora.com
# 得到子网掩码24
ipcalc -b 208.85.40.20
# 查看流量
sudo iftop -F 208.85.40.20/24 -i wlan0
-G选项查看 IPv6 地址的网络流量

nethogs

通过网络流量列出进程。需要root权限以显示尽可能全面的信息;指定要监听的接口,会显示大量的应用程序及其进程号;常用于检测哪些进程占用带宽。

dstat

会依据系统资源生成统计,以彩色可视化输出。

Nmon

Nmon,得名于 Nigel 的监控器,性能系统监控工具。Nmon 可以把操作系统的统计数据展示在屏幕上或者存储到一份数据文件里,来帮助了解计算机资源的使用情况、调整方向和系统瓶颈。这个系统基准测试工具只需要使用一条命令就能得到大量重要的性能数据。使用 Nmon 可以很轻松的监控系统的 CPU、内存、网络、硬盘、文件系统、NFS、高耗进程、资源和 IBM Power 系统的微分区的信息。
Nmon 默认是存在于 Ubuntu 仓库中。安装:​​​sudo apt-get install nmon​​​;启动:​​nmon​​​。
nmon 命令行工具完全是交互式运行的,可以使用快捷键来轻松查看对应的统计数据:
q : 停止并退出 Nmon
h : 查看帮助
c : 查看 CPU 统计数据
m : 查看内存统计数据
d : 查看硬盘统计数据
k : 查看内核统计数据
n : 查看网络统计数据
N : 查看 NFS 统计数据
j : 查看文件系统统计数据
t : 查看高耗进程
V : 查看虚拟内存统计数据
v : 详细模式
r:显示计算机的系统结构、操作系统版本号和 CPU 等不同资源的信息。

vnstat

网络数据收集工具,十分轻量并且不需要 root 权限,以守护进程在后台运行,可以实时地记录网络数据。单个 vnstat 命令就可以显示所累计的数据。默认情况下它会显示所有的网络接口。使用 -i 选项来选择某个接口。合并多个接口的数据:​​vnstat -i wlan0+eth0+eth1​​​。
通过这几种方式过滤数据显示:
-h 按小时显示统计信息。
-d 按天显示统计信息。
-w 和 -m 分别按周和月份来显示统计信息。
-l 选项查看实时更新。
删除 wlan1 的数据库并不再监视它:​​​vnstat -i wlan1 --delete​​​ 为网络接口创建一个别名:​​vnstat -u -i enp0s25 --nick eth0​​ 默认情况下,vnstat 会监视 eth0。你可以在 /etc/vnstat.conf 对它进行修改,或者在你的家目录下创建你自己的个人配置文件。
安装 vnstati 来创建简单的彩图:​​vnstati -s -i wlx7cdd90a0a1c2 -o vnstat.png​

host

DNS查询工具:​​host www.google.com​​;

dig

同为DNS查询工具,更专业,​​dig www.google.com​​;

route

route命令(Linux和win系统都自带)用于显示和操作IP路由表。要实现两个不同的子网之间的通信,需要一台连接两个网络的路由器,或者同时位于两个网络的网关来实现。
在Linux系统中,设置路由通常是为了解决以下问题:该Linux系统在一个局域网中,局域网中有一个网关,能够让机器访问Internet,那么就需要将这台机器的IP地址设置为Linux机器的默认路由。要注意的是,直接在命令行下执行route命令来添加路由,不会永久保存,当网卡重启或者机器重启之后,该路由就失效了;可以在/etc/rc.local中添加route命令来保证该路由设置永久有效。
Route命令是用于操作基于内核ip路由表,它的主要作用是创建一个静态路由让指定一个主机或者一个网络通过一个网络接口,如eth0。当使用"add"或者"del"参数时,路由表被修改,如果没有参数,则显示路由表当前的内容。

# 显示当前路由
route print/route -n
# 添加网关/设置网关
route add -net 224.0.0.0 netmask 240.0.0.0 dev eth0
# 屏蔽一条路由
route add -net 224.0.0.0 netmask 240.0.0.0 reject
# 删除路由记录
route del -net 224.0.0.0 netmask 240.0.0.0
route del -net 224.0.0.0 netmask 240.0.0.0 reject
# 删除和添加设置默认网关
route del default gw 192.168.120.240
route add default gw 192.168.120.240

tcpdump

tcpdump,网络包分析工具,可以用来显示通过网络传输到本系统的 TCP/IP 以及其他网络的数据包。tcpdump 使用 libpcap 库来抓取网络报,这个库在几乎在所有的 Linux/Unix 中都有。tcpdump 可以从网卡或之前创建的数据包文件中读取内容,也可以将包写入文件中以供后续使用。必须是 root 用户或者使用 sudo 特权来运行 tcpdump。

# 从所有网卡中捕获数据包
tcpdump -i any
# 从指定网卡中捕获数据包
tcpdump -i eth0
# 使用 -w 选项将所有捕获的包写入文件,此文件可用wireshark查看
tcpdump -i eth1 -w packets_file
# 读取 tcpdump 文件
tcpdump -r packets_file
# 获取更多的包信息,并且以可读的形式显示时间戳
tcpdump -ttttnnvvS
# 查看整个网络的数据包
tcpdump net 192.168.1.0/24
# 根据 IP 地址查看报文,不管是作为源地址还是目的地址
tcpdump host 192.168.1.100
# 指定 IP 地址是源地址或是目的地址则使用
tcpdump src 192.168.1.100
tcpdump dst 192.168.1.100
# 查看某个协议或端口号的数据包
tcpdump ssh
# 要捕获某个端口或一个范围的数据包
tcpdump port 22
tcpdump portrange 22-125
# 也可以与 src 和 dst 选项连用来捕获指定源端口或指定目的端口的报文。使用“与” (and,&&)、“或” (or,|| ) 和“非”(not,!) 来将两个条件组合起来
# 与
tcpdump src 192.168.1.100 && port 22 -w ssh_packets
# 或
tcpdump src 192.168.1.100 or dst 192.168.1.50 && port 22 -w ssh_packets
tcpdump port 443 or 80 -w http_packets
# 非:捕获 eth0 上除 22 号端口的所有通讯
tcpdump -i eth0 src port not 22

文本形式显示抓包数据:-A选项;显示16进制的报文数据:-X选项;
抓取80端口的HTTP报文,以文本形式展示:`sudo tcpdump -i any port 80 -A`

参考

​30 个实例详解 TOP 命令​​​​试试Linux下的ip命令,ifconfig已经过时了​​2017 年最佳开源网络监控工具
​通过实例学习 tcpdump 命令​​traceroute命令