1.1 top:
top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况
top命令提供了实时的对系统处理器的状态监视.它将显示系统中CPU最“敏感”的任务列表.该命令可以按CPU使用.内存使用和执行时间对任务进行排序;而且该命令的很多特性都可以通过交互式命令或者在个人定制文件中进行设定.
-
命令与显示结果
[itshare@hadoop201 ~]$ top top - 08:04:45 up 14 min, 2 users, load average: 1.33, 0.37, 0.16 Tasks: 160 total, 1 running, 159 sleeping, 0 stopped, 0 zombie %Cpu(s): 0.1 us, 0.1 sy, 0.0 ni, 99.8 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st KiB Mem : 3861304 total, 2006184 free, 1452708 used, 402412 buff/cache KiB Swap: 4063228 total, 4063228 free, 0 used. 2179892 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 2744 itshare 20 0 2880872 298780 23396 S 1.7 7.7 0:36.89 java 2371 itshare 20 0 2822356 228376 22624 S 0.7 5.9 0:17.38 java 1138 root 20 0 305504 6564 5176 S 0.3 0.2 0:01.10 vmtoolsd 1418 root 20 0 218552 4080 3240 S 0.3 0.1 0:00.22 rsyslogd 1526 mysql 20 0 1122304 190276 6672 S 0.3 4.9 0:02.53 mysqld 2234 itshare 20 0 2841872 314700 22636 S 0.3 8.2 0:16.27 java 2935 itshare 20 0 2827640 315028 22756 S 0.3 8.2 0:24.83 java
-
显示结果说明
-
top
- 08:04:45 当前系统时间
- up 14 min 系统运行的时间,格式:时:分, 刚启动只有分
- 2 user 当前登陆用户数
- load average: 1.33, 0.37, 0.16: 系统负载,即任务队列的平均长度。三个数值分别为 1分钟、5分钟、15分钟前到现在的平均值。
-
Tasks: 161 total, 1 running, 160 sleeping, 0 stopped, 0 zombie
- total 进程总数
- running 正在运行的进程数
- sleeping 睡眠的进程数
- stopped 停止的进程数
- zombie 僵尸进程数
-
%Cpu(s):
- 0.1 us 用户空间占用CPU百分比
- 0.0 sy 内核空间占用CPU百分比
- 0.0 ni 用户进程空间内改变过优先级的进程占用CPU百分比
- 99.9 id 空闲CPU百分比
- 0.0 wa 等待输入输出的CPU时间百分比
- 0.0 hi 硬件CPU中断占用百分比
- 0.0 si 软中断占用百分比
- 0.0 st 虚拟机占用百分比
-
KiB Mem :
- 3861304 total 物理内存总量
- 1976556 free, 空闲内存总量
- 1485068 used 使用的物理内存总量
- 399680 buff/cache 用作内核缓存的内存量
-
KiB Swap:
- 4063228 total 交换区总量
- 4063228 free 空闲交换区总量
- 0 used 使用的交换区总量
- 2179892 avail Mem 缓冲的交换区总量,内存中的内容被换出到交换区,而后又被换入到内存,但使用过的交换区尚未被覆盖,该数值即为这些内容已存在于内存中的交换区的大小,相应的内存再次被换出时可不必再对交换区写入
-
再下面是动态的进程信息列表
序号 列名 含义 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 键可以将当前的排序倒转。
-
-
命令的使用
-
top使用格式
top [-] [d] [p] [q] [c] [C] [S] [s] [n]
-
选项说明
选项 含义 d 指定每两次屏幕信息刷新之间的时间间隔。当然用户可以使用s交互命令来改变之。 p 通过指定监控进程ID来仅仅监控某个进程的状态 q 该选项将使top没有任何延迟的进行刷新。如果调用程序有超级用户权限,那么top将以尽可能高的优先级运行。 S 指定累计模式 s 使top命令在安全模式中运行。这将去除交互命令所带来的潜在危险。 i 使top不显示任何闲置或者僵死进程。 c 显示整个命令行而不只是显示命令名
-
-
-
其他实用命令
下面介绍在top命令执行过程中可以使用的一些交互命令。从使用角度来看,熟练的掌握这些命令比掌握选项还重要一些。这些命令都是单字母的,如果在命令行选项中使用了s选项,则可能其中一些命令会被屏蔽掉。命令 含义 Ctrl+L 擦除并且重写屏幕。 h或者? 显示帮助画面,给出一些简短的命令总结说明。 k 终止一个进程。系统将提示用户输入需要终止的进程PID,以及需要发送给该进程什么样的信号。一般的终止进程可以使用15信号;如果不能正常结束那就使用信号9强制结束该进程。默认值是信号15。在安全模式中此命令被屏蔽。 i 忽略闲置和僵死进程。这是一个开关式命令。 q 退出程序。 r 重新安排一个进程的优先级别。系统提示用户输入需要改变的进程PID以及需要设置的进程优先级值。输入一个正值将使优先级降低,反之则可以使该进程拥有更高的优先权。默认值是10。 S 切换到累计模式。 s 改变两次刷新之间的延迟时间。系统将提示用户输入新的时间,单位为s。如果有小数,就换算成 ms。输入0值则系统将不断刷新,默认值是3s。需要注意的是如果设置太小的时间,很可能会引起不断刷新,从而根本来不及看清显示的情况,而且系统负载也会大大增加。 f/F 从当前显示中添加或者删除项目。 o/O 改变显示项目的顺序。 l 切换显示平均负载和启动时间信息。 m 切换显示内存信息。 t 切换显示进程和CPU状态信息。 c 切换显示命令名称和完整命令行。 M 根据驻留内存大小进行排序。 P 根据CPU使用百分比大小进行排序。 T 根据时间/累计时间进行排序。 W 将当前设置写入~/.toprc文件中。这是写top配置文件的推荐方法。
-
常用操作:
top //每隔3秒显式所有进程的资源占用情况 top -d 5 //每隔5秒显式所有进程的资源占用情况 top -c //每隔5秒显式进程的资源占用情况,并显示进程的命令行选项(默认只有进程名) top -p 2744 -p 2371//每隔5秒显示pid是2744和pid是2371的两个进程的资源占用情况 top -d 2 -c -p 2371//每隔2秒显示pid是12345的进程的资源使用情况,并显式该进程启动的命令行选项
1.2 ps
概述: ps命令用来列出系统中当前运行的那些进程。ps命令列出的是当前那些进程的快照。
格式:ps [options] [--help]
-
ps 的选项非常多, 在此仅列出几个常用的选项
选项 含义 -A 列出所有的进程 -w 显示加宽可以显示较多的资讯 -au 显示较详细的资讯 -aux 显示所有包含其他使用者的行程 -
ps aux 输出格式
[itshare@hadoop201 ~]$ ps -aux USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.1 191428 4380 ? Ss 07:50 0:01 /usr/lib/systemd/systemd --switched-root --system --deserialize 22 root 2 0.0 0.0 0 0 ? S 07:50 0:00 [kthreadd] root 4 0.0 0.0 0 0 ? S< 07:50 0:00 [kworker/0:0H] root 6 0.0 0.0 0 0 ? S 07:50 0:00 [ksoftirqd/0] root 7 0.0 0.0 0 0 ? S 07:50 0:00 [migration/0]xxxxxxxxxx itshare 3228 0.0 0.0 155472 1872 pts/0 R+ 09:20 0:00 ps aux[itshare@hadoop201 ~]$ ps -auxUSER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMANDroot 1 0.0 0.1 191428 4380 ? Ss 07:50 0:01 /usr/lib/systemd/systemd --switched-root --system --deserialize 22root 2 0.0 0.0 0 0 ? S 07:50 0:00 [kthreadd]root 4 0.0 0.0 0 0 ? S< 07:50 0:00 [kworker/0:0H]root 6 0.0 0.0 0 0 ? S 07:50 0:00 [ksoftirqd/0]root 7 0.0 0.0 0 0 ? S 07:50 0:00 [migration/0]USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
-
-
每列含义说明
USER: 行程拥有者 PID: pid %CPU: 占用的 CPU 使用率 %MEM: 占用的记忆体使用率 VSZ: 占用的虚拟记忆体大小 RSS: 占用的记忆体大小 TTY: 终端的次要装置号码 (minor device number of tty) STAT: 该行程的状态: D: 无法中断的休眠状态 (通常 IO 的进程) R: 正在执行中 S: 静止状态 T: 暂停执行 Z: 不存在但暂时无法消除 W: 没有足够的记忆体分页可分配 <: 高优先序的行程 N: 低优先序的行程 L: 有记忆体分页分配并锁在记忆体内 (实时系统或捱A I/O) START: 行程开始时间 TIME: 执行的时间 COMMAND:所执行的指令
-
常见用法
-
根据进程信息查询
-
格式
ps -ef | grep 进程关键字
-
举例
[itshare@hadoop201 ~]$ ps aux|grep mysql mysql 1526 0.1 4.9 1122304 190276 ? Sl 07:50 0:09 /usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid itshare 3264 0.0 0.0 112828 980 pts/0 R+ 09:33 0:00 grep --color=auto mysql
-
-
显示指定用户的进程
[itshare@hadoop201 ~]$ ps -u itshare PID TTY TIME CMD 1976 ? 00:00:01 sshd 1977 pts/0 00:00:00 bash 2007 ? 00:00:00 sshd 2008 pts/1 00:00:00 bash 2234 ? 00:00:36 java 2371 ? 00:00:37 java 2744 ? 00:01:20 java 2935 ? 00:00:39 java 3272 pts/0 00:00:00 ps
-
-
显示所有进程信息,连同命令行
UID PID PPID C STIME TTY TIME CMD root 1 0 0 07:50 ? 00:00:02 /usr/lib/systemd/systemd --switched-root --system --deserialize 22 root 2 0 0 07:50 ? 00:00:00 [kthreadd] root 4 2 0 07:50 ? 00:00:00 [kworker/0:0H] root 6 2 0 07:50 ? 00:00:00 [ksoftirqd/0] root 7 2 0 07:50 ? 00:00:00 [migration/0] ...
1.3 iotop
-
概述:
实时监控磁盘I/O的工具
-
安装
yum -y install iotop
-
使用
-
查看帮助信息
[root@hadoop201 itshare]# iotop -h Usage: /usr/sbin/iotop [OPTIONS] DISK READ and DISK WRITE are the block I/O bandwidth used during the sampling period. SWAPIN and IO are the percentages of time the thread spent respectively while swapping in and waiting on I/O more generally. PRIO is the I/O priority at which the thread is running (set using the ionice command). Controls: left and right arrows to change the sorting column, r to invert the sorting order, o to toggle the --only option, p to toggle the --processes option, a to toggle the --accumulated option, i to change I/O priority, q to quit, any other key to force a refresh. Options: --version show program's version number and exit -h, --help show this help message and exit -o, --only only show processes or threads actually doing I/O -b, --batch non-interactive mode -n NUM, --iter=NUM number of iterations before ending [infinite] -d SEC, --delay=SEC delay between iterations [1 second] -p PID, --pid=PID processes/threads to monitor [all] -u USER, --user=USER users to monitor [all] -P, --processes only show processes, not all threads -a, --accumulated show accumulated I/O instead of bandwidth -k, --kilobytes use kilobytes instead of a human friendly unit -t, --time add a timestamp on each line (implies --batch) -q, --quiet suppress some lines of header (implies --batch)
选项说明
--version 显示程序的版本号并退出 -h, --help 显示帮助信息并退出 -o, --only 只显示正在进行I/O操作的进程或线程 -b, --batch 非交互模式,一般用于记录日志 -n NUM, --iter=NUM 设置监测的次数,默认无限。在非交互模式下很有用。 -d SEC, --delay=SEC 设置每次监测的间隔,默认1秒,接受非整形数据 -p PID, --pid=PID 指定监测的进程/线程。 -u USER, --user=USER 指定监测某个用户产生的I/O -P, --processes 仅显示进程,默认iotop显示所有线程。 -a, --accumulated 显示累积的I/O,而不是带宽。 -k, --kilobytes 使用kB单位,而不是对人友好的单位。在非交互模式下,脚本编程有用。 -t, --time 加上时间戳,非交互非模式。 -q, --quiet 禁止头几行,非交互模式。有三种指定方式。
按键交互
left和right方向键:改变排序。 r:反向排序。 o:切换至选项--only。 p:切换至--processes选项。 a:切换至--accumulated选项。 q:退出。 i:改变线程的优先级。
-
-
举例
-
只显示正在产生I/O的进程或线程。除了传参,可以在运行过程中按o生效。
iotop -o
-
时间刷新间隔3秒,输出5次
iotop -d 3 -n 5
-
-
非交互式,输出5次,间隔5秒,输出到屏幕,也可输出到日志文本,用于监控某时间段的io信息
iotop -botq -n 5 -d 5
-
非交互式,输出pid为2744的进程信息
iotop -botq -p 2744
1.4 iostat
iostat工具将对系统的磁盘操作活动进行监视。它的特点是汇报磁盘活动统计情况,同时也会汇报出CPU使用情况。
-
安装
yum install sysstat
-
使用
显示所有设备负载情况
[root@hadoop201 itshare]# iostat Linux 3.10.0-1127.el7.x86_64 (hadoop201) 2021年02月02日 _x86_64_ (8 CPU) avg-cpu: %user %nice %system %iowait %steal %idle 0.05 0.00 0.07 0.00 0.00 99.88 Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn sda 0.80 23.40 7.18 711490 218382 scd0 0.00 0.03 0.00 1028 0 dm-0 0.75 22.34 7.11 679395 216294 dm-1 0.00 0.07 0.00 2204 0
说明:
cpu属性值说明:
%user:CPU处在用户模式下的时间百分比。
%nice:CPU处在带NICE值的用户模式下的时间百分比。
%system:CPU处在系统模式下的时间百分比。
%iowait:CPU等待输入输出完成时间的百分比。
%steal:管理程序维护另一个虚拟处理器时,虚拟CPU的无意识等待时间百分比。
%idle:CPU空闲时间百分比。
备注:
如果%iowait的值过高,表示硬盘存在I/O瓶颈
如果%idle值高,表示CPU较空闲
如果%idle值高但系统响应慢时,可能是CPU等待分配内存,应加大内存容量。
如果%idle值持续低于10,表明CPU处理能力相对较低,系统中最需要解决的资源是CPU。
cpu属性值说明:
tps:该设备每秒的传输次数
kB_read/s:每秒从设备(drive expressed)读取的数据量;
kB_wrtn/s:每秒向设备(drive expressed)写入的数据量;
kB_read: 读取的总数据量;
kB_wrtn:写入的总数量数据量;
-
举例
定时显示所有信息
# 【每隔2秒刷新显示,且显示3次】 iostat 2 3
显示指定磁盘信息
iostat -d /dev/sda
显示tty和Cpu信息
iostat -t
以M为单位显示所有信息
iostat -m
查看设备使用率(%util)、响应时间(await)
# 【-d 显示磁盘使用情况,-x 显示详细信息】# iostat -d -x -k 1 1
说明:
rrqm/s: 每秒进行 merge 的读操作数目.即 delta(rmerge)/s
wrqm/s: 每秒进行 merge 的写操作数目.即 delta(wmerge)/s
%util: 一秒中有百分之多少的时间用于 I/O
如果%util接近100%,说明产生的I/O请求太多,I/O系统已经满负荷
idle小于70% IO压力就较大了,一般读取速度有较多的wait。
查看cpu状态
[root@hadoop201 itshare]# iostat -c 1 1 Linux 3.10.0-1127.el7.x86_64 (hadoop201) 2021年02月02日 _x86_64_ (8 CPU) avg-cpu: %user %nice %system %iowait %steal %idle 0.05 0.00 0.07 0.00 0.00 99.88
1.5 netstat
Netstat 命令用于显示各种网络相关信息,如网络连接,路由表,接口状态 (Interface Statistics),masquerade 连接,多播成员 (Multicast Memberships) 等等。
-
输出信息含义
[root@hadoop201 itshare]# netstat Active Internet connections (w/o servers) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 hadoop201:43808 hadoop2:intu-ec-svcdisc TIME_WAIT tcp 0 0 hadoop2:intu-ec-svcdisc hadoop203:46252 ESTABLISHED tcp 0 0 hadoop2:intu-ec-svcdisc hadoop202:49768 ESTABLISHED tcp 0 96 hadoop201:ssh 192.168.19.1:64945 ESTABLISHED tcp 0 0 hadoop201:ssh 192.168.19.1:65078 ESTABLISHED tcp 0 0 hadoop201:43456 hadoop2:intu-ec-svcdisc ESTABLISHED tcp 0 0 hadoop201:42906 hadoop202:8031 ESTABLISHED tcp 0 0 hadoop2:intu-ec-svcdisc hadoop201:43456 ESTABLISHED Active UNIX domain sockets (w/o servers) Proto RefCnt Flags Type State I-Node Path unix 3 [ ] DGRAM 30 /run/systemd/notify unix 2 [ ] DGRAM 32 /run/systemd/cgroups-agent
-
执行netstat后,其输出结果为
从整体上看,netstat的输出结果可以分为两个部分:
一个是Active Internet connections,称为有源TCP连接,其中"Recv-Q"和"Send-Q"指%0A的是接收队列和发送队列。这些数字一般都应该是0。如果不是则表示软件包正在队列中堆积。这种情况只能在非常少的情况见到。
另一个是Active UNIX domain sockets,称为有源Unix域套接口(和网络套接字一样,但是只能用于本机通信,性能可以提高一倍)。
Proto显示连接使用的协议,RefCnt表示连接到本套接口上的进程号,Types显示套接口的类型,State显示套接口当前的状态,Path表示连接到套接口的其它进程使用的路径名。
-
常见选项
-a (all)显示所有选项,默认不显示LISTEN相关
-t (tcp)仅显示tcp相关选项
-u (udp)仅显示udp相关选项
-n 拒绝显示别名,能显示数字的全部转化成数字。
-l 仅列出有在 Listen (监听) 的服務状态-p 显示建立相关链接的程序名
-r 显示路由信息,路由表
-e 显示扩展信息,例如uid等
-s 按各个协议进行统计
-c 每隔一个固定时间,执行该netstat命令。提示:LISTEN和LISTENING的状态只有用-a或者-l才能看到
-
实用命令实例
列出所有端口 (包括监听和未监听的)
列出所有端口 netstat -a
``` [root@hadoop201 itshare]# netstat -a|more Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 0.0.0.0:ampify 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:9864 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:fs-agent 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:9866 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:9867 0.0.0.0:* LISTEN tcp 0 0 localhost:33006 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:9870 0.0.0.0:* LISTEN tcp 0 0 hadoop201:19888 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:10033 0.0.0.0:* LISTEN tcp 0 0 hadoop2:intu-ec-svcdisc 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:ssh 0.0.0.0:* LISTEN tcp 0 0 localhost:smtp 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:13562 0.0.0.0:* LISTEN tcp 0 0 hadoop201:10020 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:40807 0.0.0.0:* LISTEN tcp 0 0 hadoop201:43812 hadoop2:intu-ec-svcdisc TIME_WAIT tcp 0 0 hadoop2:intu-ec-svcdisc hadoop203:46252 ESTABLISHED tcp 0 0 hadoop2:intu-ec-svcdisc hadoop202:49768 ESTABLISHED tcp 0 96 hadoop201:ssh 192.168.19.1:64945 ESTABLISHED tcp 0 0 hadoop201:ssh 192.168.19.1:65078 ESTABLISHED tcp 0 0 hadoop201:43456 hadoop2:intu-ec-svcdisc ESTABLISHED tcp 0 0 hadoop201:42906 hadoop202:8031 ESTABLISHED tcp 0 0 hadoop2:intu-ec-svcdisc hadoop201:43456 ESTABLISHED tcp6 0 0 [::]:mysql [::]:* LISTEN tcp6 0 0 [::]:ssh [::]:* LISTEN tcp6 0 0 localhost:smtp [::]:* LISTEN udp 0 0 hadoop201:ntp 0.0.0.0:* udp 0 0 localhost:ntp 0.0.0.0:* udp 0 0 0.0.0.0:ntp 0.0.0.0:* udp6 0 0 hadoop201:ntp [::]:* udp6 0 0 localhost:ntp [::]:* udp6 0 0 [::]:ntp [::]:* Active UNIX domain sockets (servers and established) Proto RefCnt Flags Type State I-Node Path unix 2 [ ACC ] STREAM LISTENING 16647 /run/systemd/private unix 3 [ ] DGRAM 30 /run/systemd/notify unix 2 [ ] DGRAM 32 /run/systemd/cgroups-agent unix 2 [ ACC ] STREAM LISTENING 25818 private/proxymap unix 2 [ ACC ] SEQPACKET LISTENING 16678 /run/udev/control unix 2 [ ACC ] STREAM LISTENING 25821 private/proxywrite unix 2 [ ACC ] STREAM LISTENING 25824 private/smtp unix 2 [ ACC ] STREAM LISTENING 25827 private/relay unix 2 [ ACC ] STREAM LISTENING 16680 /run/lvm/lvmetad.socket unix 2 [ ACC ] STREAM LISTENING 40 /run/systemd/journal/stdout unix 2 [ ACC ] STREAM LISTENING 25833 private/error unix 2 [ ACC ] STREAM LISTENING 25836 private/retry unix 5 [ ] DGRAM 43 /run/systemd/journal/socket unix 2 [ ACC ] STREAM LISTENING 25839 private/discard unix 2 [ ACC ] STREAM LISTENING 25842 private/local unix 15 [ ] DGRAM 45 /dev/log unix 2 [ ACC ] STREAM LISTENING 25845 private/virtual unix 2 [ ACC ] STREAM LISTENING 20792 /var/run/abrt/abrt.socket unix 2 [ ] DGRAM 16698 /run/systemd/shutdownd unix 2 [ ACC ] STREAM LISTENING 16707 /run/lvm/lvmpolld.socket unix 2 [ ACC ] STREAM LISTENING 25854 private/scache unix 2 [ ACC ] STREAM LISTENING 26922 private/defer unix 2 [ ACC ] STREAM LISTENING 26925 private/trace unix 2 [ ACC ] STREAM LISTENING 26902 public/pickup unix 2 [ ACC ] STREAM LISTENING 26906 public/cleanup unix 2 [ ACC ] STREAM LISTENING 26931 public/flush unix 2 [ ACC ] STREAM LISTENING 25830 public/showq unix 2 [ ACC ] STREAM LISTENING 25848 private/lmtp unix 2 [ ACC ] STREAM LISTENING 25851 private/anvil unix 2 [ ACC ] STREAM LISTENING 26909 public/qmgr unix 2 [ ACC ] STREAM LISTENING 26913 private/tlsmgr unix 2 [ ACC ] STREAM LISTENING 26916 private/rewrite unix 2 [ ACC ] STREAM LISTENING 26919 private/bounce unix 2 [ ACC ] STREAM LISTENING 26928 private/verify unix 2 [ ACC ] STREAM LISTENING 20696 /run/dbus/system_bus_socket unix 2 [ ACC ] STREAM LISTENING 25905 /var/lib/mysql/mysql.sock unix 2 [ ACC ] STREAM LISTENING 15096 /var/run/vmware/guestServicePipe unix 3 [ ] STREAM CONNECTED 26900 unix 3 [ ] STREAM CONNECTED 994 unix 3 [ ] STREAM CONNECTED 26926 ```
-
列出所有 tcp 端口 netstat -at
[root@hadoop201 itshare]# netstat Active Internet connections (w/o servers) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 hadoop2:intu-ec-svcdisc hadoop203:46252 ESTABLISHED tcp 0 0 hadoop2:intu-ec-svcdisc hadoop202:49768 ESTABLISHED tcp 0 96 hadoop201:ssh 192.168.19.1:64945 ESTABLISHED tcp 0 0 hadoop201:ssh 192.168.19.1:65078 ESTABLISHED tcp 0 0 hadoop2:intu-ec-svcdisc hadoop203:47112 ESTABLISHED tcp 0 0 hadoop201:43456 hadoop2:intu-ec-svcdisc ESTABLISHED tcp 0 0 hadoop201:42906 hadoop202:8031 ESTABLISHED tcp 0 0 hadoop2:intu-ec-svcdisc hadoop201:43456 ESTABLISHED
3. **列出所有 udp 端口 netstat -au**
```
[root@hadoop201 itshare]# netstat -au
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
udp 0 0 hadoop201:ntp 0.0.0.0:*
udp 0 0 localhost:ntp 0.0.0.0:*
udp 0 0 0.0.0.0:ntp 0.0.0.0:*
udp6 0 0 hadoop201:ntp [::]:*
udp6 0 0 localhost:ntp [::]:*
udp6 0 0 [::]:ntp [::]:*
```
-
列出所有处于监听状态的 Sockets
- 只显示监听端口 netstat -l
- 只列出所有监听 tcp 端口 netstat -lt
- 只列出所有监听 udp 端口 netstat -lu
- 只列出所有监听 UNIX 端口 netstat -lx
-
显示每个协议的统计信息
- 显示所有端口的统计信息 netstat -s
- 显示 TCP 或 UDP 端口的统计信息 netstat -st 或 -su
-
在 netstat 输出中显示 PID 和进程名称 netstat -p
-
netstat -p 可以与其它开关一起使用,就可以添加 “PID/进程名称” 到 netstat 输出中,这样 debugging 的时候可以很方便的发现特定端口运行的程序。
[root@hadoop201 itshare]# netstat -pt Active Internet connections (w/o servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 hadoop201:43818 hadoop2:intu-ec-svcdisc TIME_WAIT - tcp 0 0 hadoop2:intu-ec-svcdisc hadoop203:46252 ESTABLISHED 2234/java tcp 0 0 hadoop2:intu-ec-svcdisc hadoop202:49768 ESTABLISHED 2234/java tcp 0 96 hadoop201:ssh 192.168.19.1:64945 ESTABLISHED 1974/sshd: itshare tcp 0 0 hadoop201:ssh 192.168.19.1:65078 ESTABLISHED 2005/sshd: itshare tcp 0 0 hadoop2:intu-ec-svcdisc hadoop203:47122 ESTABLISHED 2234/java tcp 0 0 hadoop201:43456 hadoop2:intu-ec-svcdisc ESTABLISHED 2371/java tcp 0 0 hadoop201:42906 hadoop202:8031 ESTABLISHED 2744/java tcp 0 0 hadoop2:intu-ec-svcdisc hadoop201:43456 ESTABLISHED 2234/java
-
-
在 netstat 输出中不显示主机,端口和用户名 (host, port or user)
当你不想让主机,端口和用户名显示,使用 netstat -n。将会使用数字代替那些名称。
同样可以加速输出,因为不用进行比对查询。
# netstat -an
如果只是不想让这三个名称中的一个被显示,使用以下命令
# netsat -a --numeric-ports # netsat -a --numeric-hosts # netsat -a --numeric-users
-
持续输出 netstat 信息
netstat 将每隔一秒输出网络信息。
# netstat -c Active Internet connections (w/o servers) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 ramesh-laptop.loc:36130 101-101-181-225.ama:www ESTABLISHED tcp 1 1 ramesh-laptop.loc:52564 101.11.169.230:www CLOSING tcp 0 0 ramesh-laptop.loc:43758 server-101-101-43-2:www ESTABLISHED tcp 1 1 ramesh-laptop.loc:42367 101.101.34.101:www CLOSING
显示系统不支持的地址族 (Address Families)
```
netstat --verbose
```
在输出的末尾,会有如下的信息
```
netstat: no support for `AF IPX' on this system.
netstat: no support for `AF AX25' on this system.
netstat: no support for `AF X25' on this system.
netstat: no support for `AF NETROM' on this system.
```
- 显示核心路由信息 netstat -r
```
[root@hadoop201 itshare]# netstat -r
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
default gateway 0.0.0.0 UG 0 0 0 ens33
192.168.19.0 0.0.0.0 255.255.255.0 U 0 0 0 ens33
```
**注意:** 使用 netstat -rn 显示数字格式,不查询主机名称。
- 找出程序运行的端口
并不是所有的进程都能找到,没有权限的会不显示,使用 root 权限查看所有的信息。
```
# netstat -ap | grep ssh
tcp 1 0 dev-db:ssh 101.174.100.22:39213 CLOSE_WAIT -
tcp 1 0 dev-db:ssh 101.174.100.22:57643 CLOSE_WAIT -
```
**找出运行在指定端口的进程**
```
# netstat -an | grep ':80'
```
10. **显示网络接口列表**
```
# netstat -i
Kernel Interface table
Iface MTU Met RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg
eth0 1500 0 0 0 0 0 0 0 0 0 BMU
eth2 1500 0 26196 0 0 0 26883 6 0 0 BMRU
lo 16436 0 4 0 0 0 4 0 0 0 LRU
```
显示详细信息,像是 ifconfig 使用 netstat -ie:
```
# netstat -ie
Kernel Interface table
eth0 Link encap:Ethernet HWaddr 00:10:40:11:11:11
UP BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
Memory:f6ae0000-f6b00000
```
11. **IP和TCP分析**
**查看连接某服务端口最多的的IP地址**
```
wss8848@ubuntu:~$ netstat -nat | grep "192.168.1.15:22" |awk '{print $5}'|awk -F: '{print $1}'|sort|uniq -c|sort -nr|head -20
18 221.136.168.36
3 154.74.45.242
2 78.173.31.236
2 62.183.207.98
2 192.168.1.14
2 182.48.111.215
2 124.193.219.34
2 119.145.41.2
2 114.255.41.30
1 75.102.11.99
```
**TCP各种状态列表**
```
wss8848@ubuntu:~$ netstat -nat |awk '{print $6}'
established)
Foreign
LISTEN
TIME_WAIT
ESTABLISHED
TIME_WAIT
SYN_SENT
```
- 先把状态全都取出来,然后使用uniq -c统计,之后再进行排序。
```
[root@hadoop201 itshare]# netstat -nat |awk '{print $6}'|sort|uniq -c
1 established)
7 ESTABLISHED
1 Foreign
18 LISTEN
1 TIME_WAIT
[root@hadoop201 itshare]# netstat -nat |awk '{print $6}'|sort|uniq -c|sort -rn
18 LISTEN
7 ESTABLISHED
1 TIME_WAIT
1 Foreign
```
- 分析access.log获得访问前10位的ip地址
```
awk '{print $1}' access.log |sort|uniq -c|sort -nr|head -10
```
1.6 tar
tar 用于压缩和解压缩
-
tar 常见选项
-
必要选项有如下:
-A 新增压缩文件到已存在的压缩 -B 设置区块大小 -c 建立新的压缩文件 -d 记录文件的差别 -r 添加文件到已经压缩的文件 -u 添加改变了和现有的文件到已经存在的压缩文件 -x 从压缩的文件中提取文件 -t 显示压缩文件的内容 -z 支持gzip解压文件 -j 支持bzip2解压文件 -Z 支持compress解压文件 -v 显示操作过程 -l 文件系统边界设置 -k 保留原有文件不覆盖 -m 保留文件不被覆盖 -W 确认压缩文件的正确性
-
可选选项如下:
-b 设置区块数目 -C 切换到指定目录 -f 指定压缩文件 --help 显示帮助信息 --version 显示版本信息
-
-
常用命令展示
tar 解包:tar xvf FileName.tar 打包:tar cvf FileName.tar DirName (注:tar是打包,不是压缩!) .gz 解压1:gunzip FileName.gz 解压2:gzip -d FileName.gz 压缩:gzip FileName .tar.gz 和 .tgz 解压:tar zxvf FileName.tar.gz 压缩:tar zcvf FileName.tar.gz DirName .bz2 解压1:bzip2 -d FileName.bz2 解压2:bunzip2 FileName.bz2 压缩: bzip2 -z FileName .tar.bz2 解压:tar jxvf FileName.tar.bz2 压缩:tar jcvf FileName.tar.bz2 DirName .bz 解压1:bzip2 -d FileName.bz 解压2:bunzip2 FileName.bz 压缩:未知 .tar.bz 解压:tar jxvf FileName.tar.bz 压缩:未知 .Z 解压:uncompress FileName.Z 压缩:compress FileName .tar.Z 解压:tar Zxvf FileName.tar.Z 压缩:tar Zcvf FileName.tar.Z DirName .zip 解压:unzip FileName.zip 压缩:zip FileName.zip DirName .rar 解压:rar x FileName.rar 压缩:rar a FileName.rar DirName
1.7 df -h
Linux df(英文全拼:disk free) 命令用于显示目前在 Linux 系统上的文件系统磁盘使用情况统计。
-
常用选项:
-a, --all 包含所有的具有 0 Blocks 的文件系统 --block-size={SIZE} 使用 {SIZE} 大小的 Blocks -h, --human-readable 使用人类可读的格式(预设值是不加这个选项的...) -H, --si 很像 -h, 但是用 1000 为单位而不是用 1024 -i, --inodes 列出 inode 资讯,不列出已使用 block -k, --kilobytes 就像是 --block-size=1024 -l, --local 限制列出的文件结构 -m, --megabytes 就像 --block-size=104857 --no-sync 取得资讯前不 sync (预设值) -P, --portability 使用 POSIX 输出格式 --sync 在取得资讯前 sync -t, --type=TYPE 限制列出文件系统的 TYPE -T, --print-type 显示文件系统的形式 -x, --exclude-type=TYPE 限制列出文件系统不要显示 TYPE -v (忽略) --help 显示这个帮手并且离开 --version 输出版本资讯并且离开
-
举例
-
显示文件系统的磁盘使用情况统计
[root@hadoop201 itshare]# df 文件系统 1K-块 已用 可用 已用% 挂载点 devtmpfs 1918620 0 1918620 0% /dev tmpfs 1930652 0 1930652 0% /dev/shm tmpfs 1930652 11892 1918760 1% /run tmpfs 1930652 0 1930652 0% /sys/fs/cgroup /dev/mapper/centos-root 47285700 10178564 37107136 22% / /dev/sda1 1038336 153928 884408 15% /boot tmpfs 386132 0 386132 0% /run/user/1000
第一列指定文件系统的名称,
第二列指定一个特定的文件系统1K-块1K是1024字节为单位的总内存。
已用和可用列分别表示正在使用中,空闲的磁盘的总量。
已用%列指定使用的内存的百分比,
而最后一栏"挂载点"指定的文件系统的挂载点。
-
-
-h选项,通过它可以产生可读的格式df命令的输出:
[root@hadoop201 itshare]# df -h 文件系统 容量 已用 可用 已用% 挂载点 devtmpfs 1.9G 0 1.9G 0% /dev tmpfs 1.9G 0 1.9G 0% /dev/shm tmpfs 1.9G 12M 1.9G 1% /run tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup /dev/mapper/centos-root 46G 9.8G 36G 22% / /dev/sda1 1014M 151M 864M 15% /boot tmpfs 378M 0 378M 0% /run/user/1000
我们可以看到输出显示的数字形式的'G'(千兆字节),"M"(兆字节)和"K"(千字节)。
这使输出容易阅读和理解,从而使显示可读的。请注意,第二列的名称也发生了变化,为了使显示可读的"大小"。
1.8 find
find命令用来在指定目录下查找文件。任何位于参数之前的字符串都将被视为欲查找的目录名。如果使用该命令时,不设置任何参数,则 find 命令将在当前目录下查找子目录与文件。并且将查找到的子目录和文件全部进行显示。
-
语法
find path -option [ -print ] [ -exec -ok command ] {} \;
-
参数说明
find 根据下列规则判断 path 和 expression,在命令列上第一个 - ( ) , ! 之前的部份为 path,之后的是 expression。如果 path 是空字串则使用目前路径,如果 expression 是空字串则使用 -print 为预设 expression。
expression 中可使用的选项有二三十个之多,在此只介绍最常用的部份。
-mount, -xdev : 只检查和指定目录在同一个文件系统下的文件,避免列出其它文件系统中的文件
-amin n : 在过去 n 分钟内被读取过
-anewer file : 比文件 file 更晚被读取过的文件
-atime n : 在过去n天内被读取过的文件
-cmin n : 在过去 n 分钟内被修改过
-cnewer file :比文件 file 更新的文件
-ctime n : 在过去n天内被修改过的文件
-empty : 空的文件-gid n or -group name : gid 是 n 或是 group 名称是 name
-ipath p, -path p : 路径名称符合 p 的文件,ipath 会忽略大小写
-name name, -iname name : 文件名称符合 name 的文件。iname 会忽略大小写
-size n : 文件大小 是 n 单位,b 代表 512 位元组的区块,c 表示字元数,k 表示 kilo bytes,w 是二个位元组。
-
-type c : 文件类型是 c 的文件。
d: 目录
c: 字型装置文件
b: 区块装置文件
p: 具名贮列
f: 一般文件
l: 符号连结
s: socket
-pid n : process id 是 n 的文件
-
你可以使用 ( ) 将运算式分隔,并使用下列运算。
exp1 -and exp2
! expr
-not expr
exp1 -or exp2
exp1, exp2
-
实例
-
列出当前目录下所有csv文件
[root@hadoop201 itshare]# find . -name "*.csv" ./partition.csv
-
-
将当前目录及其下子目录中所有文件列出
find . -type f
-
将当前目录及其子目录下所有最近 1 天内更新过的文件列出
[root@hadoop201 module]# find . -ctime -1 ./hadoop-3.1.3/logs/userlogs ./hadoop-3.1.3/logs/hadoop-itshare-historyserver-hadoop201.out ./hadoop-3.1.3/logs/hadoop-itshare-namenode-hadoop201.out ./hadoop-3.1.3/logs/hadoop-itshare-datanode-hadoop201.out ./hadoop-3.1.3/logs/hadoop-itshare-nodemanager-hadoop201.out
-
查找 /var/log 目录中更改时间在 7 日以前的普通文件,并在删除之前询问它们:
[root@hadoop201 module]# find /var/log -type f -mtime +7 -ok rm {} \; < rm ... /var/log/tallylog > ?
-
查找当前目录中文件属主具有读、写权限,并且文件所属组的用户和其他用户具有读权限的文件:
find . -type f -perm 644 -exec ls -l {} \;
-
查找系统中所有文件长度为 0 的普通文件,并列出它们的完整路径:
find / -type f -size 0 -exec ls -l {} \;
1.9 crontab
crontab是用来定期执行程序的命令。
-
语法
crontab [ -u user ] file 或 crontab [ -u user ] { -l | -r | -e }
crontab 是用来让使用者在固定时间或固定间隔执行程序之用,换句话说,也就是类似使用者的时程表。
-u user 是指设定指定 user 的时程表,这个前提是你必须要有其权限(比如说是 root)才能够指定他人的时程表。如果不使用 -u user 的话,就是表示设定自己的时程表。
-
选项
- -e : 执行文字编辑器来设定时程表,内定的文字编辑器是 VI,如果你想用别的文字编辑器,则请先设定 VISUAL 环境变数来指定使用那个文字编辑器(比如说 setenv VISUAL joe)
- -r : 删除目前的时程表
- -l : 列出目前的时程表
-
时间格式
f1 f2 f3 f4 f5 program
- 其中 f1 是表示分钟,f2 表示小时,f3 表示一个月份中的第几日,f4 表示月份,f5 表示一个星期中的第几天。program 表示要执行的程序。
- 当 f1 为 * 时表示每分钟都要执行 program,f2 为 * 时表示每小时都要执行程序,其馀类推
- 当 f1 为 a-b 时表示从第 a 分钟到第 b 分钟这段时间内要执行,f2 为 a-b 时表示从第 a 到第 b 小时都要执行,其馀类推
- 当 f1 为 */n 时表示每 n 分钟个时间间隔执行一次,f2 为 */n 表示每 n 小时个时间间隔执行一次,其馀类推
- 当 f1 为 a, b, c,... 时表示第 a, b, c,... 分钟要执行,f2 为 a, b, c,... 时表示第 a, b, c...个小时要执行,其馀类推
* * * * * - - - - - | | | | | | | | | +----- 星期中星期几 (0 - 7) (星期天 为0) | | | +---------- 月份 (1 - 12) | | +--------------- 一个月中的第几天 (1 - 31) | +-------------------- 小时 (0 - 23) +------------------------- 分钟 (0 - 59)
使用者也可以将所有的设定先存放在文件中,用 crontab file 的方式来设定执行时间
-
-
举例
-
每一分钟执行一次 /bin/ls
* * * * * /bin/ls
-
-
在 12 月内, 每天的早上 6 点到 12 点,每隔 3 个小时 0 分钟执行一次 /usr/bin/backup:
0 6-12/3 * 12 * /usr/bin/backup