一、监控系统的状态
1.w查看当前系统的负载
15:03:38 up 2:48, 1 user, load average: 0.38, 0.65, 0.61
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
sunh :0 :0 12:27 ?xdm? 31:23 0.61s /usr/bin/startdde
第一行的信息:时间、系统运行时间、登陆用户数、平均负载。
第二行以后的信息:当前登陆的用户名及其登陆地址。
load average的后面三个参数:1分钟内、5分钟内、15分钟内系统的平均负载。
查看cpu信息:
cat /proc/cpuinfo
processor : 0
vendor_id : GenuineIntel
cpu family : 6
model : 58
model name : Intel(R) Core(TM) i3-3110M CPU @ 2.40GHz
stepping : 9
microcode : 0x15
cpu MHz : 1200.000
cache size : 3072 KB
physical id : 0
siblings : 4
core id : 0
cpu cores : 2
apicid : 0
initial apicid : 0
fpu : yes
fpu_exception : yes
cpuid level : 13
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf eagerfpu pni pclmulqdq dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer xsave avx f16c lahf_lm arat epb xsaveopt pln pts dtherm tpr_shadow vnmi flexpriority ept vpid fsgsbase smep erms
bogomips : 4788.68
clflush size : 64
cache_alignment : 64
address sizes : 36 bits physical, 48 bits virtual
power management:
查看有几个cpu
➜ ~ grep -c 'processor' /proc/cpuinfo
4
2.vmstate监控系统的状态
➜ ~ vmstat
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 1000 656244 57412 4363404 0 0 221 192 338 176 8 7 83 3 0
命令w是查看系统整体上的负载,但是无法查看具体的压力,vmstat命令打印的结果分为六个
1)procs 显示进程相关信息
r :表示运行和等待cpu时间片的进程数,如果长期大于服务器cpu的个数,则说明cpu不够用了;
b :表示等待资源的进程数,比如等待I/O, 内存等,这列的值如果长时间大于1,则需要关注一下了;
2)memory 内存相关信息
swpd :表示切换到交换分区中的内存数量 ;
free :当前空闲的内存数量;
buff :缓冲大小,(即将写入磁盘的);
cache :缓存大小,(从磁盘中读取的);
3)swap 内存交换情况
si :由交换区写入到内存的数据量;
so :由内存写入到交换区的数据量;
4)io 磁盘使用情况
bi :从块设备读取数据的量(读磁盘);
bo: 从块设备写入数据的量(写磁盘);
5)system 显示采集间隔内发生的中断次数
in :表示在某一时间间隔中观测到的每秒设备中断数;
cs :表示每秒产生的上下文切换次数;
6)CPU 显示cpu的使用状态
us :显示了用户下所花费 cpu 时间的百分比;
sy :显示系统花费cpu时间百分比;
id :表示cpu处于空闲状态的时间百分比;
wa :表示I/O等待所占用cpu时间百分比;
st :表示被偷走的cpu所占百分比(一般都为0,不用关注);
通常都是这么使用的 :vmstat 1 5 表示每隔1秒打印一次。打印5此结束
或者 vmstat 1 表示每隔1秒打印一次知道ctrl+c
3.top显示进程所占的系统资源
➜ ~ top
top - 15:29:35 up 3:14, 1 user, load average: 0.19, 0.24, 0.34
Tasks: 232 total, 5 running, 226 sleeping, 0 stopped, 1 zombie
%Cpu(s): 9.3 us, 5.1 sy, 0.0 ni, 85.6 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem: 7721620 total, 6430512 used, 1291108 free, 59624 buffers
KiB Swap: 7925756 total, 1000 used, 7924756 free. 4369264 cached Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
11432 sunh 20 0 884856 128788 22428 S 5.3 1.7 0:32.49 deepin-terminal
2651 sunh 20 0 235776 7676 2912 S 3.7 0.1 2:34.44 mousearea
2747 sunh 20 0 2275936 126948 18324 R 3.7 1.6 4:36.43 dde-dock
2759 sunh 20 0 1170560 103816 44484 S 2.0 1.3 1:41.37 dde-dock-applet
2465 sunh 20 0 42144 4124 800 R 1.3 0.1 0:59.56 dbus-daemon
top命令用户动态监视进程所占的系统资源,每隔3秒执行一次
另外 常用的命令 top-bn1,他表示非动态打印系统资源的使用情况,可以用在shell脚本中
4.sar监控系统状态(这个命令是centos系统的命令,ubuntu 没有)
查看网卡流量 :sar -n DEV
[root@localhost ~]# sar -n DEV
Linux 2.6.32-504.3.3.el6.x86_64 (localhost.localdomain) 02/03/2015 _x86_64_ (1 CPU)
10:13:15 PM LINUX RESTART
10:20:01 PM IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s
10:30:02 PM lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00
10:30:02 PM eth0 27.00 13.06 37.38 0.71 0.00 0.00 0.00
10:40:01 PM lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00
10:40:01 PM eth0 2.86 1.15 2.74 0.06 0.00 0.00 0.00
Average: lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Average: eth0 14.91 7.09 20.03 0.39 0.00 0.00 0.00
rxpck/s表示每秒进入收取的包的数量
txpck/s表示每秒发送出去的包的数量
rskB/s表示每秒收取的数据量。
txkB/s表示每秒发送的数据量。
查看实时网卡流量:sar -n DEV 1 5
[root@localhost ~]# sar -n DEV 1 5
Linux 2.6.32-504.3.3.el6.x86_64 (localhost.localdomain) 02/03/2015 _x86_64_ (1 CPU)
04:19:30 PM IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s
04:19:31 PM lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00
04:19:31 PM eth0 1.01 0.00 0.06 0.00 0.00 0.00 0.00
04:19:31 PM IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s
04:19:32 PM lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00
04:19:32 PM eth0 1.98 0.99 0.12 0.37 0.00 0.00 0.00
04:19:32 PM IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s
04:19:33 PM lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00
04:19:33 PM eth0 2.02 1.01 0.12 0.38 0.00 0.00 0.00
04:19:33 PM IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s
04:19:34 PM lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00
04:19:34 PM eth0 2.00 1.00 0.12 0.38 0.00 0.00 0.00
04:19:34 PM IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s
04:19:35 PM lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00
04:19:35 PM eth0 2.00 1.00 0.12 0.38 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: eth0 1.80 0.80 0.11 0.30 0.00 0.00 0.00
查看某一天网卡流量历史:sar -n DEV -f /var/log/sa/sa03
这边的好多文件,都代表这什么意思
[root@localhost ~]# sar -n DEV -f /var/log/sa/sa03
Linux 2.6.32-504.3.3.el6.x86_64 (localhost.localdomain) 02/03/2015 _x86_64_ (1 CPU)
10:13:15 PM LINUX RESTART
10:20:01 PM IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s
10:30:02 PM lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00
10:30:02 PM eth0 27.00 13.06 37.38 0.71 0.00 0.00 0.00
10:40:01 PM lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00
10:40:01 PM eth0 2.86 1.15 2.74 0.06 0.00 0.00 0.00
Average: lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Average: eth0 14.91 7.09 20.03 0.39 0.00 0.00 0.00
04:12:44 PM LINUX RESTART
查看历史负载:sar-q
[root@localhost ~]# sar -q
Linux 2.6.32-504.3.3.el6.x86_64 (localhost.localdomain) 02/03/2015 _x86_64_ (1 CPU)
10:13:15 PM LINUX RESTART
10:20:01 PM runq-sz plist-sz ldavg-1 ldavg-5 ldavg-15
10:30:02 PM 0 249 0.00 0.04 0.07
10:40:01 PM 0 249 0.00 0.00 0.01
Average: 0 249 0.00 0.02 0.04
04:12:44 PM LINUX RESTART<strong>
</strong>
如果感兴趣可以man一下,sar的功能有很多,在这儿不一一列举
5.free查看内存使用情况
➜ ~ free
total used free shared buffers cached
Mem: 7721620 7576584 145036 1125092 61996 5424080
-/+ buffers/cache: 2090508 5631112
Swap: 7925756 1000 7924756
其实剩余大小并不是第一行的145036,而是第二行的5631112,因为系统初始化是,就已经分配出很大一部分内存给缓存,这部分缓存用来随时提供给程序使用,如果程序不占用,那么这部分内存就空闲
6.ps查看系统进程
➜ ~ ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.0 33908 2936 ? Ss 12:14 0:01 /sbin/init
root 2 0.0 0.0 0 0 ? S 12:14 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? S 12:14 0:00 [ksoftirqd/0]
root 5 0.0 0.0 0 0 ? S< 12:14 0:00 [kworker/0:0H]
root 7 0.0 0.0 0 0 ? S 12:14 0:08 [rcu_sched]
root 8 0.0 0.0 0 0 ? S 12:14 0:03 [rcuos/0]
了解一下:
PID :进程的id,这个id很有用,在linux中内核管理进程就得靠pid来识别和管理某一个程,比如我想终止某一个进程,则用 ‘kill 进程的pid 有时并不能杀掉,则需要加一个-9选项了 kill -9 进程pid
STAT :表示进程的状态,进程状态分为以下几种(不要求记住,但要了解)
D 不能中断的进程(通常为IO)
R 正在运行中的进程
S 已经中断的进程,通常情况下,系统中大部分进程都是这个状态
T 已经停止或者暂停的进程,如果我们正在运行一个命令,比如说 sleep 10 如果我们按一下ctrl -z 让他暂停,那么我们用ps查看就会显示T这个状态
W 这个好像是说,从内核2.6xx 以后,表示为没有足够的内存页分配
X 已经死掉的进程(这个好像从来不会出现)
Z 僵尸进程,杀不掉,打不死的垃圾进程,占系统一小点资源,不过没有关系。如果太多,就有问题了。一般不会出现。
< 高优先级进程
N 低优先级进程
L 在内存中被锁了内存分页
s 主进程
l 多线程进程
+ 代表在前台运行的进程
通常用法,加上管道符,查看指定进程:
➜ ~ ps aux |grep -c mingetty
1
➜ ~ ps aux |grep mingetty
sunh 15352 0.0 0.0 13424 936 pts/1 S+ 16:05 0:00 grep mingetty
7.netstat 查看网络状况
➜ ~ netstat
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 192.168.0.107:41507 203.208.48.153:https CLOSE_WAIT
tcp 0 0 192.168.0.107:39932 li882-189.memb:http-alt ESTABLISHED
tcp 0 0 192.168.0.107:33470 203.208.48.153:https CLOSE_WAIT
tcp 0 0 192.168.0.107:55571 203.208.48.153:http CLOSE_WAIT
tcp 0 0 192.168.0.107:56465 203.208.48.153:https CLOSE_WAIT
tcp 0 0 192.168.0.107:47044 203.208.40.148:http CLOSE_WAIT
udp 0 0 localhost:54738 localhost:54738 ESTABLISHED
Active UNIX domain sockets (w/o servers)
Proto RefCnt Flags Type State I-Node Path
unix 2 [ ] DGRAM 11528 /var/run/wpa_supplicant/wlan0
unix 2 [ ] STREAM 14056 @launcher.app.deepin1000
netstat命令用来打印网络连接状况,系统所开放的端口,路由表等信息,常用的是netstat -lnp (打印当前系统启动那些端口) netsatat -an 打印网络连接状况
二、抓包工具
1.tcpdump(ubuntu安装:sudo apt-get install tcpdump, centos安装:yum install -y tcpdump)
运行这个命令要root权限
tcpdump -nn -i eth0
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
16:52:52.972839 IP 172.16.174.130.22 > 172.16.174.1.52857: Flags [P.], seq 1865820739:1865820931, ack 1540583941, win 498, options [nop,nop,TS val 2119174 ecr 3631036], length 192
16:52:52.973003 IP 172.16.174.1.52857 > 172.16.174.130.22: Flags [.], ack 192, win 1444, options [nop,nop,TS val 3631038 ecr 2119174], length 0
16:52:52.973794 IP 172.16.174.130.22 > 172.16.174.1.52857: Flags [P.], seq 192:560, ack 1, win 498, options [nop,nop,TS val 2119175 ecr 3631038], length 368
16:52:52.973918 IP 172.16.174.1.52857 > 172.16.174.130.22: Flags [.], ack 560, win 1444, options [nop,nop,TS val 3631038 ecr 2119175], length 0
16:52:52.974863 IP 172.16.174.130.22 > 172.16.174.1.52857: Flags [P.], seq 560:912, ack 1, win 498, options [nop,nop,TS val 2119176 ecr 3631038], length 352
16:52:52.975095 IP 172.16.174.1.52857 > 172.16.174.130.22: Flags [.], ack 912, win 1444, options [nop,nop,TS val 3631039 ecr 2119176], length 0
16:52:52.975800 IP 172.16.174.130.22 > 172.16.174.1.52857: Flags [P.], seq 912:1264, ack 1, win 498, options [nop,nop,TS val 2119177 ecr 3631039], length 352
-nn 作用是让第三类和第四列显示成ip+端口号,如果不加则是主机名+服务名称
三、linux 网络相关
1. ifconfig 查看网卡IP
修改网卡信息,配置文件地址:/etc/sysconfig/network-scripts/
ifdown 即停掉网卡,ifup即启动网卡。
ifdown eth0; ifup eth0
2. 给一个网卡设定多个IP
就是把配置文件多复制几份就好了
3. 查看网卡连接状态
➜ ~ sudo mii-tool eth0
[sudo] password for sunh:
eth0: no link
只要看到 “link ok” 就说明网卡为连接状态,如果显示 “no link” 说明网卡坏掉了或者没有连接网线
4.更改主机名
➜ ~ hostname suuuuu
hostname: you must be root to change the host name
➜ ~ sudo hostname suuuuu
➜ ~ hostname
suuuuu
这个只是修改在内存中,如果要永久修改,那就要修改配置文件了
[root@localhost ~]# vim /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=suuu.localdomain
5. 设置DNS
DNS是用来解析域名用的,平时我们访问网站都是直接输入一个网址,而dns把这个网址解析到一个IP。通过修改配置文件/etc/hosts
/etc/hosts 的格式很简单,每一行作为一条记录,分成两部分,第一部分是IP,第二部分是域名。关于hosts文件,有几点需要你注意:
1)一个IP后面可以跟多个域名,可以是几十个甚至上百个;
2)每行只能有一个IP,也就是说一个域名不能对应多个IP;
3)如果有多行中出现相同的域名(前面IP不一样),会按最前面出现的记录来解析。
四、linux防火墙
1.iptables
➜ ~ sudo iptables -nvL
sudo: unable to resolve host suuuuu
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
[root@localhost ~]# iptables -F; /etc/init.d/iptables save
iptables: Saving firewall rules to /etc/sysconfig/iptables:[ OK ]
-nvL 就是查看规则, -F 是把当前规则清除,但这个只是临时的,重启系统或者重启 iptalbes 服务后还会加载已经保存的规则,所以需要使用 /etc/init.d/iptables save 保存一下规则,通过上边的命令输出我们也可以看到,防火墙规则保存在了/etc/sysconfig/iptables 你可以查看一下这个文件。
iptables有三个表 filter,nat,mangle