Linux日常管理技巧
作为一个Linux系统工程师,对自己的系统一定要了解,以防出现问题。当系统出现问题时,我们要会借助各种工具排查,最终判定问题所在。
10.1 使用w查看系统负载
w命令:用于显示目前登入系统的用户信息。
第一行分为3段。第一段,显示系统时间及用户登录时长;第二段,显示系统登录用户数量(可以从下面几行看到);第三段,显示1分钟、5分钟、15分钟的系统负载。
w命令中主要的是系统负载项 load average 数值,跟CPU有关,表示单位时间内使用CPU活动的进程数。数值可以是小数,也可以是几十或更大。数值为 “1” 是最理想的。
这样一来每个cpu都在工作中,没有闲置和等待。
cat /proc/cpuinfo 查看cpu数量。
关于cpu信息的内容可以参考下这篇文章。
https://blog.csdn.net/sycflash/article/details/6643492
uptime命令 此命令和w命令的第一行一样。
[root@liang-00 ~]# uptime 15:50:50 up 4:08, 1 user, load average: 0.00, 0.01, 0.05 [root@liang-00 ~]#
10.2 vmstat命令
vmstat命令 显示虚拟内存状态(“Virtual Memory Statistics”),但是它可以报告关于进程、内存、I/O等系统整体运行状态。
“1” 表示每个一分钟打印一次,“5” 表示一共打印5次。
[root@liang-00 ~]# vmstat 1 5 procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st 1 0 0 742520 2108 138444 0 0 4 1 35 30 0 0 100 0 0 0 0 0 742528 2108 138476 0 0 0 0 90 86 0 0 100 0 0 0 0 0 742528 2108 138476 0 0 0 0 94 85 0 0 100 0 0 0 0 0 742528 2108 138476 0 0 0 0 81 77 0 0 100 0 0 0 0 0 742528 2108 138476 0 0 0 0 94 84 0 0 100 0 0
我们主要关心的列:r b swpd si so bi bo us wa
r:运行队列中进程数量(包括正在等待使用的进程),这个值也可以判断是否需要增加CPU;
b:等待IO的进程数量(被阻塞的);
swpd:使用swap大小,它的值或为0或者是某一个数值不变,如果swpd值在不断变化则可能是内存不够用了,如果swpd的值不为0,但是si,so的值长期为0,这种情况不会影响系统性能;如果swpd频繁变动,si、so也会跟着变动的;
si:每秒从交换区写到内存的大小,由磁盘调入内存(KB/S);
so:每秒写入交换区的内存大小,由内存调入磁盘(KB/S);
bi:每秒从磁盘中读取的块数,进入到内存中。
bo:每秒写入磁盘中的块数,从内存中出来。
us:用户进程执行时间百分比
sy:内核系统本身进程执行时间百分比
id:空闲百分比
(其中 us+sy+id=100)
wa:等待io的时间。
10.3 top命令
top命令 可以实时动态地(3秒钟)查看系统的整体运行情况,是一个综合了多方信息监测系统性能和运行信息的实用工具。通过top命令所提供的互动式界面,用热键可以管理。
第一行:和 w命令 显示的数据一样。
第二行:tasks任务;total,总进程数;running,正在运行的进程;sleeping,睡眠进程;stopped,停止的进程数;
zombie,僵尸进程,主进程意外终止,残余的子进程。
第三行:cpu占用百分比,主要关注:us(长时间在%60以上说明cpu负担比较大)、sy、id、wa;st表示被偷走的cpu资源,比如说运行在服务器上的虚拟机。
第四行:内存,total物理内存总量,free空闲内存量,used已使用内存量。
第五行:swap,交换分区,
之后的详细信息,默认会以 %CPU 从高到底来排序。%MEM是内存使用情况,RES为物理内存大小(KB)
按 “M” 可以切换到以 %MEM 大小来排序,按 “P” 切回 %CPU 排序。
按数字 “1” 切换不同 CPU。
%Cpu0 : 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st %Cpu1 : 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
top -c 查看具体完整的命令。
[root@liang-00 ~]# top -c top - 12:11:31 up 1:37, 1 user, load average: 0.00, 0.01, 0.05 Tasks: 107 total, 2 running, 105 sleeping, 0 stopped, 0 zombie %Cpu(s): 0.0 us, 0.2 sy, 0.0 ni, 99.8 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st KiB Mem : 1006944 total, 752080 free, 122260 used, 132604 buff/cache KiB Swap: 2097148 total, 2097148 free, 0 used. 732756 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 467 root 20 0 0 0 0 S 0.3 0.0 0:00.94 [xfsaild/dm-0] 1 root 20 0 43420 3772 2548 S 0.0 0.4 0:02.33 /usr/lib/systemd/systemd --switched-root --system -+ 2 root 20 0 0 0 0 S 0.0 0.0 0:00.01 [kthreadd] 3 root 20 0 0 0 0 S 0.0 0.0 0:00.11 [ksoftirqd/0] 5 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 [kworker/0:0H] 6 root 20 0 0 0 0 S 0.0 0.0 0:00.19 [kworker/u128:0] 7 root rt 0 0 0 0 S 0.0 0.0 0:00.03 [migration/0] 8 root 20 0 0 0 0 S 0.0 0.0 0:00.00 [rcu_bh] 9 root 20 0 0 0 0 S 0.0 0.0 0:02.25 [rcu_sched]
top -bn1 静态的显示完整的信息,适合在写shell脚本时使用。
PID:进程号,在杀死进程时会用到。kill PID
10.4 sar命令
sar命令 是Linux下系统运行状态统计工具,它将指定的操作系统状态计数器显示到标准输出设备。sar工具将对系统当前的状态进行取样,然后通过计算数据和比例来表达系统的当前运行状态。它的特点是可以连续对系统取样,获得大量的取样数据。取样数据和分析的结果都可以存入文件,使用它时消耗的系统资源很小。
sar命令 每10分钟会自动扫描系统状态保存到自己的日志目录里 /var/log/sa/ 。
sar日志文件命令中会生成与sa开头的文件对应的sar开头的文件,sa开头的文件是一个二进制文件用cat 无法查看,sar开头的文件则可以。
[root@liang-00 ~]# ls /var/log/sa sa11 sa12 sa13 sa14 sa15 [root@liang-00 ~]#
用sar命令查看网卡使用情况 sar -n DEV 1 2 。
[root@liang-00 ~]# sar -n DEV 1 2 Linux 3.10.0-862.el7.x86_64 (liang-00) 11/15/2018 _x86_64_ (2 CPU) 12:29:57 PM IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s 12:29:58 PM lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 12:29:58 PM ens33 1.00 1.00 0.06 0.17 0.00 0.00 0.00 12:29:58 PM IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s 12:29:59 PM lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 12:29:59 PM ens33 1.00 1.00 0.06 0.37 0.00 0.00 0.00 Average: IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s Average: lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 Average: ens33 1.00 1.00 0.06 0.27 0.00 0.00 0.00 [root@liang-00 ~]#
可以看到系统有两个网卡:lo、ens33,其中:
IFACE:表示网卡名
rxpck/s:表示每秒接收的数据包,当受到攻击时,它会异常的变得很大,一般正常范围为:几千或以下,如果是上万的话就不太正常了;
txpck/s:表示每秒发送的数据包;
rxkB/s:每秒接收的数据量;
txkB/s:每秒接收的数据量;
sar -n DEV -f /var/log/sa/sa14 提取指定文件的历史数据(历史数据最多保留一个月,且生成的日志文件以日期号结尾)。
[root@liang-00 ~]# sar -n DEV -f /var/log/sa/sa14 Linux 3.10.0-862.el7.x86_64 (liang-00) 11/14/2018 _x86_64_ (2 CPU) 10:42:13 AM LINUX RESTART 10:50:01 AM IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s 11:00:01 AM lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 11:00:01 AM ens33 0.66 0.15 0.04 0.01 0.00 0.00 0.00 11:10:01 AM lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 11:10:01 AM ens33 0.63 0.15 0.04 0.01 0.00 0.00 0.00 11:20:01 AM lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 11:20:01 AM ens33 0.96 0.39 0.07 0.04 0.00 0.00 0.00 11:30:01 AM lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 11:30:01 AM ens33 2.14 1.06 0.18 0.19 0.00 0.00 0.00 11:40:01 AM lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 11:40:01 AM ens33 1.52 0.07 0.11 0.01 0.00 0.00 0.00 11:50:02 AM lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 11:50:02 AM ens33 0.85 0.06 0.06 0.00 0.00 0.00 0.00 12:00:01 PM lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 12:00:01 PM ens33 0.68 0.16 0.05 0.02 0.00 0.00 0.00
sar -q 查看系统的负载,一般查看历史数据的时候比较多(sar -q -f /var/log/sa/)。
[root@liang-00 ~]# sar -q Linux 3.10.0-862.el7.x86_64 (liang-00) 11/15/2018 _x86_64_ (2 CPU) 10:34:28 AM LINUX RESTART 10:40:05 AM runq-sz plist-sz ldavg-1 ldavg-5 ldavg-15 blocked 10:50:01 AM 0 119 0.00 0.01 0.05 0 11:00:01 AM 0 119 0.00 0.01 0.05 0 11:10:01 AM 0 122 0.02 0.02 0.05 0 11:20:01 AM 0 122 0.00 0.01 0.05 0 11:30:01 AM 0 122 0.00 0.05 0.05 0
10.5 nload命令
nload命令 查看网卡实时数据。
用左右方向键可以切换网卡。
一般服务器上 Outgoing 数据量比较大,如果遭受到攻击,Incoming 流量就会变得比较大。
10.6 监控io性能
iostat、iotop监控磁盘状态。
运维工作中,磁盘状况也是一个非常重要的指标。在检查cpu和内存性能时可能发现会出现它们都正常,但是系统依然存在问题,这时我们就要看下磁盘状况了。
iostat -x
[root@liang-00 ~]# iostat -x Linux 3.10.0-862.el7.x86_64 (liang-00) 11/15/2018 _x86_64_ (2 CPU) avg-cpu: %user %nice %system %iowait %steal %idle 0.10 0.00 0.23 0.18 0.00 99.49 Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util sda 0.00 0.01 0.47 0.27 15.13 6.15 57.39 0.02 20.78 18.79 24.24 8.59 0.64 sdb 0.00 0.00 0.03 0.00 0.29 0.00 22.60 0.00 5.45 5.45 0.00 4.23 0.01 dm-0 0.00 0.00 0.30 0.13 14.34 6.00 93.37 0.02 37.18 29.26 55.51 14.21 0.62 dm-1 0.00 0.00 0.01 0.00 0.16 0.00 47.40 0.00 5.38 5.38 0.00 5.13 0.00 dm-2 0.00 0.00 0.00 0.00 0.08 0.00 48.19 0.00 1.91 1.91 0.00 1.72 0.00 [root@liang-00 ~]#
其中 %util 列,比较重要:等待IO的时间百分比,数字比较大的时候表示磁盘很忙。
iotop命令 查看正在读写的进程,主要关注 IO> 列
Total DISK READ : 0.00 B/s | Total DISK WRITE : 0.00 B/s Actual DISK READ: 0.00 B/s | Actual DISK WRITE: 0.00 B/s TID PRIO USER DISK READ DISK WRITE SWAPIN IO> COMMAND 1948 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.07 % [kworker/1:1] 1 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % systemd --switched-root --system --deserialize 22 2 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [kthreadd] 1027 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % python -Es /usr/sbin/firewalld --nofork --nopid [gmain] 5 be/0 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [kworker/0:0H] 6 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [kworker/u128:0] 7 rt/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [migration/0] 8 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [rcu_bh] 9 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [rcu_sched] 10 be/0 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [lru-add-dra
10.7 free命令
free命令 查看内存使用情况。
[root@liang-00 ~]# free -h total used free shared buff/cache available Mem: 983M 120M 565M 7.4M 296M 698M Swap: 2.0G 0B 2.0G [root@liang-00 ~]#
第一行:选项,
第二行:内存使用情况。
第三列:交换分区使用情况。
buffer和cache
cache:当磁盘中有些数据需要cpu处理,需要经过内存再到cpu,而进入到内存中的这一部分数据就叫做cache。
buffer:指的是经过cpu处理过的,准备写入磁盘的数据。
所以内存的 total=used+free+buff/cache。
available就等于free加上buff和cache剩余的部分。一般我们查看内存剩余的时候主要关注 available。
10.8 ps命令
ps 查看系统进程。
用法:ps aux ;ps -elf
ps aux 列出当前的所有进程。
[root@liang-00 ~]# ps aux USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.3 43420 3772 ? Ss 10:34 0:02 /usr/lib/systemd/systemd --switched-root --system --dese root 2 0.0 0.0 0 0 ? S 10:34 0:00 [kthreadd] root 3 0.0 0.0 0 0 ? S 10:34 0:00 [ksoftirqd/0] root 5 0.0 0.0 0 0 ? S< 10:34 0:00 [kworker/0:0H] root 6 0.0 0.0 0 0 ? S 10:34 0:00 [kworker/u128:0] root 7 0.0 0.0 0 0 ? S 10:34 0:00 [migration/0] root 8 0.0 0.0 0 0 ? S 10:34 0:00 [rcu_bh] root 9 0.0 0.0 0 0 ? S 10:34 0:12 [rcu_sched] root 10 0.0 0.0 0 0 ? S< 10:34 0:00 [lru-add-drain] root 11 0.0 0.0 0 0 ? S 10:34 0:00 [watchdog/0] root 12 0.0 0.0 0 0 ? S 10:34 0:00 [watchdog/1] root 13 0.0 0.0 0 0 ? S 10:34 0:00 [migration/1]
PID:进程号,在需要杀死某个进程时可以用 kill+PID ,还可以查看某个进程的具体运行情况,用 ll /proc/PID/;
例如:查看进程为号为696的进程。
[root@liang-00 ~]# ll /proc/696/ total 0 dr-xr-xr-x 2 root root 0 Nov 15 10:34 attr -rw-r--r-- 1 root root 0 Nov 15 15:59 autogroup -r-------- 1 root root 0 Nov 15 15:59 auxv -r--r--r-- 1 root root 0 Nov 15 10:34 cgroup --w------- 1 root root 0 Nov 15 15:59 clear_refs -r--r--r-- 1 root root 0 Nov 15 10:34 cmdline -rw-r--r-- 1 root root 0 Nov 15 10:34 comm -rw-r--r-- 1 root root 0 Nov 15 15:59 coredump_filter -r--r--r-- 1 root root 0 Nov 15 15:59 cpuset lrwxrwxrwx 1 root root 0 Nov 15 15:59 cwd -> / -r-------- 1 root root 0 Nov 15 15:59 environ lrwxrwxrwx 1 root root 0 Nov 15 10:34 exe -> /usr/sbin/auditd dr-x------ 2 root root 0 Nov 15 15:59 fd dr-x------ 2 root root 0 Nov 15 15:59 fdinfo -rw-r--r-- 1 root root 0 Nov 15 15:59 gid_map
VSZ:虚拟内存;
RSS:物理内存;
STAT:状态(重点)
- D 不能中断的进程(它会直接影响系统负载,中断了可能会影响到一些服务)
- R 正在运行,或在队列中的进程
- S 处于休眠状态的进程(vmstat 1 就是一个)
- T 停止或被追踪的进程
- Z 僵尸进程(如果系统中僵尸进程比较多的话,要想办法杀死)
- < 高优先级的进程
- l 多线程进程(需要查些资料学习一下多线程)
- N 低优先级进程
- L 内存中被锁了内存的分页
- s 主进程
- + 前台进程
关于进程和线程,这几篇文章讲的不错:
https://blog.csdn.net/yusiguyuan/article/details/12154823
https://my.oschina.net/cnyinlinux/blog/422207
https://blog.csdn.net/Crazy_Tengt/article/details/73441141
查看是否有某一个进程。
ps aux |grep ‘nginx’
[root@liang-00 ~]# ps aux |grep 'nginx' root 2095 0.0 0.2 120808 2092 ? Ss 15:52 0:00 nginx: master process /usr/sbin/nginx nginx 2096 0.0 0.3 121272 3128 ? S 15:52 0:00 nginx: worker process nginx 2097 0.0 0.3 121272 3128 ? S 15:52 0:00 nginx: worker process root 2231 0.0 0.0 112704 968 pts/0 S+ 15:53 0:00 grep --color=auto nginx
10.9 查看网络状态
netstat命令 用于显示网络状态。利用netstat指令可让你得知整个Linux系统的网络情况。
服务器系统,上面的服务主要是对外通信的,所以要有监听端口
netstat主要参数:
- -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 -lnp 查看监听的端口。
[root@liang-00 ~]# netstat -lnp Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 2095/nginx: master tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1101/sshd tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1231/master tcp6 0 0 :::80 :::* LISTEN 2095/nginx: master tcp6 0 0 :::22 :::* LISTEN 1101/sshd tcp6 0 0 ::1:25 :::* LISTEN 1231/master udp 0 0 127.0.0.1:323 0.0.0.0:* 726/chronyd udp6 0 0 ::1:323 :::* 726/chronyd Active UNIX domain sockets (only servers) Proto RefCnt Flags Type State I-Node PID/Program name Path unix 2 [ ACC ] STREAM LISTENING 13100 1/systemd /run/systemd/private unix 2 [ ACC ] STREAM LISTENING 13149 1/systemd /run/lvm/lvmetad.socket unix 2 [ ACC ] STREAM LISTENING 18974 1231/master private/tlsmgr unix 2 [ ACC ] STREAM LISTENING 18977 1231/master private/rewrite unix 2 [ ACC ] STREAM LISTENING 18980 1231/master private/bounce
netstat -an
[root@liang-00 ~]# netstat -an Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN tcp 0 52 192.168.37.200:22 192.168.37.1:50927 ESTABLISHED tcp6 0 0 :::80 :::* LISTEN tcp6 0 0 :::22 :::* LISTEN tcp6 0 0 ::1:25 :::* LISTEN udp 0 0 127.0.0.1:323 0.0.0.0:* udp6 0 0 ::1:323 :::* Active UNIX domain sockets (servers and established) Proto RefCnt Flags Type State I-Node Path unix 2 [ ACC ] STREAM LISTENING 13100 /run/systemd/private unix 2 [ ] DGRAM 13129 /run/systemd/shutdownd unix 2 [ ACC ] STREAM LISTENING 13149 /run/lvm/lvmetad.socket
TCP/IP 协议和三次握手、四次挥手。
检查所有状态统计,netstat -an |awk '/^tcp/{++sta[$NF]}END{for(key in sta) print key,"\t",sta[key]}'
[root@liang-00 ~]# netstat -an |awk '/^tcp/{++sta[$NF]}END{for(key in sta) print key,"\t",sta[key]}' LISTEN 6 ESTABLISHED 1 [root@liang-00 ~]#
ESTABLISHED:表示正在通信的进程,参数很大,说明服务器很忙。
ss -an 和netstat类似。
[root@liang-00 ~]# ss -an |grep -i 'listen' u_str LISTEN 0 128 /run/systemd/private 13100 * 0 u_str LISTEN 0 128 /run/lvm/lvmetad.socket 13149 * 0 u_str LISTEN 0 100 private/tlsmgr 18974 * 0 u_str LISTEN 0 100 private/rewrite 18977 * 0 u_str LISTEN 0 100 private/bounce 18980 * 0 u_str LISTEN 0 100 private/defer 18983 * 0 u_str LISTEN 0 100 private/trace 18986 * 0 u_str LISTEN 0 100 private/verify 18989 * 0 u_str LISTEN 0 100 private/proxymap 18995 * 0 u_str LISTEN 0 100 private/proxywrite 18998 * 0 u_str LISTEN 0 100 private/smtp 19001 * 0
10.10 Linux下抓包
tcpdump命令 抓取网络接口的数据包。
- -a:尝试将网络和广播地址转换成名称;
- -c<数据包数目>:收到指定的数据包数目后,就停止进行倾倒操作;
- -d:把编译过的数据包编码转换成可阅读的格式,并倾倒到标准输出;
- -dd:把编译过的数据包编码转换成C语言的格式,并倾倒到标准输出;
- -ddd:把编译过的数据包编码转换成十进制数字的格式,并倾倒到标准输出;
- -e:在每列倾倒资料上显示连接层级的文件头;
- -f:用数字显示网际网络地址;
- -F<表达文件>:指定内含表达方式的文件;
- -i<网络界面>:使用指定的网络截面送出数据包;
- -l:使用标准输出列的缓冲区;
- -n:不把主机的网络地址转换成名字;
- -N:不列出域名;
- -O:不将数据包编码最佳化;
- -p:不让网络界面进入混杂模式;
- -q :快速输出,仅列出少数的传输协议信息;
- -r<数据包文件>:从指定的文件读取数据包数据;
- -s<数据包大小>:设置每个数据包的大小;
- -S:用绝对而非相对数值列出TCP关联数;
- -t:在每列倾倒资料上不显示时间戳记;
- -tt: 在每列倾倒资料上显示未经格式化的时间戳记;
- -T<数据包类型>:强制将表达方式所指定的数据包转译成设置的数据包类型;
- -v:详细显示指令执行过程;
- -vv:更详细显示指令执行过程;
- -x:用十六进制字码列出数据包资料;
- -w<数据包文件>:把数据包数据写入指定的文件。
tcpdump -nn -i ens33,抓取ens33网卡的数据包,-nn不解析域名,
22:17:54.495740 IP 192.168.37.200.22 > 192.168.37.1.50927: Flags [P.], seq 566476:566640, ack 105, win 298, length 164 22:17:54.495966 IP 192.168.37.200.22 > 192.168.37.1.50927: Flags [P.], seq 566640:566900, ack 105, win 298, length 260 22:17:54.496211 IP 192.168.37.1.50927 > 192.168.37.200.22: Flags [.], ack 566900, win 213, length 0 22:17:54.496266 IP 192.168.37.200.22 > 192.168.37.1.50927: Flags [P.], seq 566900:567064, ack 105, win 298, length 164 22:17:54.496565 IP 192.168.37.200.22 > 192.168.37.1.50927: Flags [P.], seq 567064:567324, ack 105, win 298, length 260 22:17:54.497015 IP 192.168.37.1.50927 > 192.168.37.200.22: Flags [.], ack 567324, win 211, length 0 22:17:54.497041 IP 192.168.37.200.22 > 192.168.37.1.50927: Flags [P.], seq 567324:567488, ack 105, win 298, length 164 22:17:54.497457 IP 192.168.37.200.22 > 192.168.37.1.50927: Flags [P.], seq 567488:567748, ack 105, win 298, length 260 22:17:54.500421 IP 192.168.37.1.50927 > 192.168.37.200.22: Flags [P.], seq 105:157, ack 567488, win 211, length 52 ^C 3994 packets captured 3995 packets received by filter 0 packets dropped by kernel [root@liang-00 ~]# tcpdump -nn -i ens33
抓取指定端口 tcpdump -nn -i ens33 port 22
22:23:47.680162 IP 192.168.37.1.50927 > 192.168.37.200.22: Flags [.], ack 734584, win 250, length 0 22:23:47.680346 IP 192.168.37.200.22 > 192.168.37.1.50927: Flags [P.], seq 734584:734844, ack 105, win 298, length 260 22:23:47.680669 IP 192.168.37.200.22 > 192.168.37.1.50927: Flags [P.], seq 734844:735008, ack 105, win 298, length 164 22:23:47.680868 IP 192.168.37.1.50927 > 192.168.37.200.22: Flags [.], ack 735008, win 248, length 0 22:23:47.680963 IP 192.168.37.200.22 > 192.168.37.1.50927: Flags [P.], seq 735008:735172, ack 105, win 298, length 164 22:23:47.884306 IP 192.168.37.1.50927 > 192.168.37.200.22: Flags [.], ack 735008, win 256, length 0 22:23:47.884328 IP 192.168.37.1.50927 > 192.168.37.200.22: Flags [P.], seq 105:157, ack 735172, win 256, length 52 ^C 5186 packets captured 5187 packets received by filter 0 packets dropped by kernel [root@liang-00 ~]# tcpdump -nn -i ens33 port 22
抓取指定host的包 tcpdump -nn -i ens33 not port 22 and host 192.168.37.1
[root@liang-00 ~]# tcpdump -nn -i ens33 not port 22 and host 192.168.37.1 tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on ens33, link-type EN10MB (Ethernet), capture size 262144 bytes 22:26:27.795400 ARP, Request who-has 192.168.37.2 tell 192.168.37.1, length 46 22:26:28.595466 ARP, Request who-has 192.168.37.2 tell 192.168.37.1, length 46 22:26:29.595592 ARP, Request who-has 192.168.37.2 tell 192.168.37.1, length 46 22:26:30.795875 ARP, Request who-has 192.168.37.2 tell 192.168.37.1, length 46 22:26:31.594953 ARP, Request who-has 192.168.37.2 tell 192.168.37.1, length 46 22:26:32.595112 ARP, Request who-has 192.168.37.2 tell 192.168.37.1, length 46 22:26:33.796366 ARP, Request who-has 192.168.37.2 tell 192.168.37.1, length 46 22:26:34.595484 ARP, Request who-has 192.168.37.2 tell 192.168.37.1, length 46 22:26:35.595616 ARP, Request who-has 192.168.37.2 tell 192.168.37.1, length 46 22:26:45.798414 ARP, Request who-has 192.168.37.2 tell 192.168.37.1, length 46
指定抓取的数据包个数,并且保存到文件。
[root@liang-00 ~]# tcpdump -nn -i ens33 -c 10 -w /tmp/1.cap tcpdump: listening on ens33, link-type EN10MB (Ethernet), capture size 262144 bytes 10 packets captured 10 packets received by filter 0 packets dropped by kernel [root@liang-00 ~]#
我们可以查看1.cap的文件类型 file 1.cap,无法用cat查看。
[root@liang-00 ~]# file /tmp/1.cap /tmp/1.cap: tcpdump capture file (little-endian) - version 2.4 (Ethernet, capture length 262144) [root@liang-00 ~]#
tcpdump -r /tmp/1.cap 用 -r 选项来查看抓取的数据包。
[root@liang-00 ~]# tcpdump -r /tmp/1.cap reading from file /tmp/1.cap, link-type EN10MB (Ethernet) 22:29:18.669295 IP liang-00.ssh > 192.168.37.1.50927: Flags [P.], seq 2962249662:2962249794, ack 1481587541, win 298, length 132 22:29:18.669875 IP 192.168.37.1.50927 > liang-00.ssh: Flags [.], ack 132, win 254, length 0 22:29:21.819402 ARP, Request who-has gateway tell 192.168.37.1, length 46 22:29:21.933789 IP 192.168.37.1.50927 > liang-00.ssh: Flags [P.], seq 1:37, ack 132, win 254, length 36 22:29:22.002288 IP liang-00.ssh > 192.168.37.1.50927: Flags [.], ack 37, win 298, length 0 22:29:22.615258 ARP, Request who-has gateway tell 192.168.37.1, length 46 22:29:22.953509 IP liang-00.35452 > ntp1.flashdance.cx.ntp: NTPv4, Client, length 48 22:29:23.615538 ARP, Request who-has gateway tell 192.168.37.1, length 46 22:29:24.819875 ARP, Request who-has gateway tell 192.168.37.1, length 46 22:29:25.615883 ARP, Request who-has gateway tell 192.168.37.1, length 46 [root@liang-00 ~]#
wireshark工具中的 tshark命令在线上服务其中可以抓取外部主机访问web网站的详细信息。
tshark -n -t a -R http.request -T fields -e "frame.time" -e "ip.src" -e "http.host" -e "http.request.method" -e "http.request.uri"
10.11 Linux网络相关
ifconfig 查看的ip(yum install -y net-tools)
ifup ens33和ifdown ens33---单独针对特定网卡进行更改时,
可以两个命令一起执行
ifdown ens33 && ifup ens33
设置虚拟网卡ens33:0
[root@liang-00 ~]# cd /etc/sysconfig/network-scripts/ [root@liang-00 network-scripts]# ls ifcfg-ens33 ifdown-ippp ifdown-routes ifup ifup-ipv6 ifup-ppp ifup-tunnel ifcfg-lo ifdown-ipv6 ifdown-sit ifup-aliases ifup-isdn ifup-routes ifup-wireless ifdown ifdown-isdn ifdown-Team ifup-bnep ifup-plip ifup-sit init.ipv6-global ifdown-bnep ifdown-post ifdown-TeamPort ifup-eth ifup-plusb ifup-Team network-functions ifdown-eth ifdown-ppp ifdown-tunnel ifup-ippp ifup-post ifup-TeamPort network-functions-ipv6 [root@liang-00 network-scripts]# cp ifcfg-ens33 ifcfg-ens33\:0 #添加虚拟网卡 [root@liang-00 network-scripts]# ls ifcfg-ens33 ifdown-ippp ifdown-sit ifup-bnep ifup-plusb ifup-TeamPort ifcfg-ens33:0 ifdown-ipv6 ifdown-Team ifup-eth ifup-post ifup-tunnel ifcfg-lo ifdown-isdn ifdown-TeamPort ifup-ippp ifup-ppp ifup-wireless ifdown ifdown-post ifdown-tunnel ifup-ipv6 ifup-routes init.ipv6-global ifdown-bnep ifdown-ppp ifup ifup-isdn ifup-sit network-functions ifdown-eth ifdown-routes ifup-aliases ifup-plip ifup-Team network-functions-ipv6 [root@liang-00 network-scripts]# vi ifcfg-ens33:0
编辑ens33:0
之后就可以用 ifdown ens33 && ifup ens33 来重启更改指定网卡ens33了。
[root@liang-00 network-scripts]# ifdown ens33 && ifup ens33 Determining if ip address 192.168.37.199 is already in use for device ens33... [root@liang-00 network-scripts]# ifconfig ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.37.200 netmask 255.255.255.0 broadcast 192.168.37.255 inet6 fe80::20c:29ff:fef5:8a7f prefixlen 64 scopeid 0x20<link> ether 00:0c:29:f5:8a:7f txqueuelen 1000 (Ethernet) RX packets 168908 bytes 37603116 (35.8 MiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 252738 bytes 71223498 (67.9 MiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 ens33:0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.37.199 netmask 255.255.255.0 broadcast 192.168.37.255 ether 00:0c:29:f5:8a:7f txqueuelen 1000 (Ethernet) lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
mii-tool ens33 查看网卡是否连接。link ok 表名有网线连接。
同样可以用 enstool ens33
[root@liang-00 network-scripts]# mii-tool ens33 ens33: negotiated 1000baseT-FD flow-control, link ok [root@liang-00 network-scripts]#
查看DNS配置文件 cat /etc/resolv.conf,临时更改DNS可以用这个文件更改,之后重启还会被网卡配置文件覆盖。
[root@liang-00 network-scripts]# cat /etc/resolv.conf # Generated by NetworkManager nameserver 119.29.29.29 [root@liang-00 network-scripts]#
/etc/hosts 文件是linux和windows都有的,主机名和ip配置文件。
[root@liang-00 network-scripts]# cat /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 [root@liang-00 network-scripts]#
用户可以自定义ip和域名之间的映射。