查看进程情况: ps
显示所有进程信息
1 2 3 4 5 6 7 8 9
| $ ps -A PID TTY TIME CMD 1 ? 00:00:00 init 2 ? 00:00:01 migration/0 3 ? 00:00:00 ksoftirqd/0 4 ? 00:00:01 migration/1 5 ? 00:00:00 ksoftirqd/1 6 ? 00:29:57 events/0 ...
|
显示指定用户
1 2 3 4 5 6 7 8 9 10
| $ ps -u root PID TTY TIME CMD 1 ? 00:00:00 init 2 ? 00:00:01 migration/0 3 ? 00:00:00 ksoftirqd/0 4 ? 00:00:01 migration/1 5 ? 00:00:00 ksoftirqd/1 6 ? 00:29:57 events/0 7 ? 00:00:00 events/1 ...
|
ps 与grep 组合使用,查找特定进程 (常用)
1 2 3 4
| $ ps -ef|grep ssh root 2720 1 0 Nov02 ? 00:00:00 /usr/sbin/sshd root 17394 2720 0 14:58 ? 00:00:00 sshd: root@pts/0 root 17465 17398 0 15:57 pts/0 00:00:00 grep ssh
|
列出目前所有的正在内存中的程序 (常用)
1 2 3 4 5 6 7
| $ ps aux USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.0 10368 676 ? Ss Nov02 0:00 init [3] root 2 0.0 0.0 0 0 ? S< Nov02 0:01 [migration/0] root 3 0.0 0.0 0 0 ? SN Nov02 0:00 [ksoftirqd/0] root 4 0.0 0.0 0 0 ? S< Nov02 0:01 [migration/1] root 5 0.0 0.0 0 0 ? SN Nov02 0:00 [ksoftirqd/1]
|
输出含义:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| USER:该 process 属于那个使用者账号的 PID :该 process 的号码 %CPU:该 process 使用掉的 CPU 资源百分比 %MEM:该 process 所占用的物理内存百分比 VSZ :该 process 使用掉的虚拟内存量 (Kbytes) RSS :该 process 占用的固定的内存量 (Kbytes) TTY :该 process 是在那个终端机上面运作,若与终端机无关,则显示 ?,另外, tty1-tty6 是本机上面的登入者程序,若为 pts/0 等等的,则表示为由网络连接进主机的程序。 STAT:该程序目前的状态,主要的状态有 R :该程序目前正在运作,或者是可被运作 S :该程序目前正在睡眠当中 (可说是 idle 状态),但可被某些讯号 (signal) 唤醒。 T :该程序目前正在侦测或者是停止了 Z :该程序应该已经终止,但是其父程序却无法正常的终止他,造成 zombie (疆尸) 程序的状态 START:该 process 被触发启动的时间 TIME :该 process 实际使用 CPU 运作的时间 COMMAND:该程序的实际指令
|
ps -ef与 ps aux的区别
ps aux
最初用到Unix Style中,而ps -ef
被用在System V Style中,两者输出略有不同。现在的大部分Linux系统都是可以同时使用这两种方式的。
ps aux
中与ps -ef
不同的列有:
1 2 3 4 5 6 7 8
| USER %CPU %MEM VSZ RSS STAT START TIME
|
其中STAT
状态为的常见字符有:
1 2 3 4 5 6 7 8 9 10 11 12 13
| D R S T W X Z < N L s l +
|
查看端口情况 netstat
列出所有连接
1 2 3 4 5 6 7 8 9
| $ netstat -a Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 enlightened:domain *:* LISTEN tcp 0 0 localhost:ipp *:* LISTEN tcp 0 0 enlightened.local:54750 li240-5.members.li:http ESTABLISHED tcp 0 0 enlightened.local:49980 del01s07-in-f14.1:https ESTABLISHED tcp6 0 0 ip6-localhost:ipp [::]:* LISTEN ...
|
列出tcp/udp连接 -u
和-t
1 2
| $ netstat -at $ netstat -au
|
禁用反向域名解析,加快查询速度 -n
没有必要知道主机名,就使用 -n 选项禁用域名解析功能
只列出监听中的端口 -l
1 2 3 4 5 6
| $ netstat -tnl Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 127.0.1.1:53 0.0.0.0:* LISTEN tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN tcp6 0 0 ::1:631 :::* LISTEN
|
不要使用-a
,否则linux会列出所有端口,而不只是监听(LISTEN)端口
只列出active端口
1 2 3 4 5
| $ netstat -atnp | grep ESTA (Not all processes could be identified, non-owned process info will not be shown, you would have to be root to see it all.) tcp 0 0 192.168.1.2:49156 173.255.230.5:80 ESTABLISHED 1691/chrome tcp 0 0 192.168.1.2:33324 173.194.36.117:443 ESTABLISHED 1691/chrome
|
active 状态的套接字连接用 “ESTABLISHED” 字段表示
列出进程名,进程号和用户ID -p
1 2 3 4 5 6
| ~$ sudo netstat -nlpt Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 127.0.1.1:53 0.0.0.0:* LISTEN 1144/dnsmasq tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 661/cupsd tcp6 0 0 ::1:631 :::* LISTEN 661/cupsd
|
必须要root权限才能显示!如果没有root需要查看端口对应的进程,请参考lsof
-ep
选项可以同时查看进程名和用户名
实战
- 查看服务是否运行
1 2 3 4 5
| $ sudo netstat -aple | grep ntp udp 0 0 enlightened.local:ntp *:* root 17430 1789/ntpd udp 0 0 localhost:ntp *:* root 17429 1789/ntpd udp 0 0 *:ntp *:* root 17422 1789/ntpd udp6 0 0 fe80::216:36ff:fef8:ntp [::] root 17432 1789/ntpd
|
查看端口号的占用情况
1
| $ netstat -an | grep 12000
|
结合watch
监控active状态的连接
1
| $ watch -d -n0 "netstat -atnp | grep ESTA"
|
附:watch命令
watch可以帮助使用者监测一个命令的运行结果,避免重复手动运行。watch命令会周期执行
参数:
- -n 时间间隔,缺省值为2s
- -d 高亮显示变化区域
- -t 关闭watch命令在顶部的时间间隔
实例:
1 2 3 4 5
| 每隔一秒高亮显示http链接数的变化情况 $ watch -n 1 -d 'pstree|grep http' 10秒一次输出系统的平均负载 $ watch -n 10 'cat /proc/loadavg'
|
查看使用CPU\MEM最多的进程
参考文献
ps
netstat
watch