Linux中的几个命令–top、free、uniq
- 2019 年 11 月 6 日
- 筆記
关于top命令的详解
Linux top命令用于实时显示 process 的动态,当我们在命令框中敲入top命令然后回车之后,可以看到如下输出:
top - :: up days, :, users, load average: ., ., . Tasks: total, running, sleeping, stopped, zombie Cpu(s): 5.9%us, .%sy, .%ni, 93.7%id, .%wa, .%hi, .%si, .%st Mem: k total, k used, k free, k buffers Swap: k total, k used, k free, k cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND mysql m 1.1g m S 39.8 4.5 : mysqld cassandr m 4.5g m S 4.6 19.2 : java root m m S 3.0 . :40.27 filebeat mysql m m m S 1.3 2.8 : mysqld mysql m m m S . 2.2 :59.41 mysqld dba_mysq m S . . :. sshd dba_mysq R . . :. top mysql m 1.3g m S . 5.4 : mysqld mysql m 1.4g m S . 5.9 : mysqld root S . . :11.38 init root S . . :. kthreadd root RT S . . :56.87 migration/ root S . . :32.83 ksoftirqd/ root RT S . . :. stopper/
它显示的是进程的状态,并且每5s更新一次,类似watch命令一样,对结果会刷新。下面是它的命令参数:
PID: 进程描述符 USER: 进程的拥有者 PRI:进程的优先级 NI: nice level
VIRT:virtual memory usage 虚拟内存 1、进程“需要的”虚拟内存大小,包括进程使用的库、代码、数据等 2、假如进程申请100m的内存,但实际只使用了10m,那么它会增长100m,而不是实际的使用量
RES:resident memory usage 常驻内存 1、进程当前使用的内存大小,但不包括swap out 2、包含其他进程的共享 3、如果申请100m的内存,实际使用10m,它只增长10m,与VIRT相反 4、关于库占用内存的情况,它只统计加载的库文件所占内存大小
SHR:shared memory 共享内存 1、除了自身进程的共享内存,也包括其他进程的共享内存 2、虽然进程只使用了几个共享库的函数,但它包含了整个共享库的大小 3、计算某个进程所占的物理内存大小公式:RES – SHR 4、swap out后,它将会降下来
S:进程的状态,有 S=sleeping,R=running,T=stopped or traced,D=interruptible sleep(不可中断的睡眠状态),Z=zombie。 %CPU: CPU使用率 %MEM: 物理内存的使用 TIME: 进程占用的总共cpu时间 COMMAND:进程的命令
top 运行中可以通过 top 的内部命令对进程的显示方式进行控制。内部命令如下: s – 改变画面更新频率 l – 关闭或开启第一部分第一行 top 信息的表示 t – 关闭或开启第一部分第二行 Tasks 和第三行 Cpus 信息的表示 m – 关闭或开启第一部分第四行 Mem 和 第五行 Swap 信息的表示 N – 以 PID 的大小的顺序排列表示进程列表 P – 以 CPU 占用率大小的顺序排列进程列表 M – 以内存占用率大小的顺序排列进程列表 h – 显示帮助 n – 设置在进程列表所显示进程的数量 q – 退出 top
A: 根据单窗口切换成多窗口,可以看到四个不同的窗口,可以通过a或者w来切换多个窗口。 四个窗口的名字分别为:Def,Job,Mem,Usr
f:进入一个动态配置top的screen中,可以根据自己的喜好配置top
o:对top的现有配置排序(order)
r:使用renice命令
k:使用kill命令
i:使top不显示任何闲置或者僵死进程。
c:显示整个命令行而不只是显示命令名。
top的命令行使用方式
(1) 批量处理模式
$ top -b
加上-b
后,top显示的时候,将每一次显示的结果都打印出来,不会将上一次的结果给冲掉。
(2) 显示某个进程的信息
$ top -p pid
如果是多个进程,只要如下:
$ top -p pid1,pid2,pid3
(3) 显示某个用户的进程信息
$ top -u username
(4) 显示线程的信息,而不是进程的信息
$ top -H
(5) 设置刷屏的时间(单位为s)
$ top -d ntime
02
free命令


1.命令格式:
free [参数]
2.命令功能:
free 命令显示系统使用和空闲的内存情况,包括物理内存、交互区内存(swap)和内核缓冲区内存。共享内存将被忽略
3.命令参数:
-b 以Byte为单位显示内存使用情况。
-k 以KB为单位显示内存使用情况。
-m 以MB为单位显示内存使用情况。
-g 以GB为单位显示内存使用情况。
-o 不显示缓冲区调节列。
-s<间隔秒数> 持续观察内存使用状况。
-t 显示内存总和列。
-V 显示版本信息
下面给出相关示例:
#简单参数介绍 [dba_mysql@tk-dba-mysql-194 ~]$ free -G free: invalid option -- 'G' usage: free [-b|-k|-m|-g|-h] [-l] [-o] [-t] [-s delay] [-c count] [-V] -b,-k,-m,-g show output in bytes, KB, MB, or GB -h human readable output (automatic unit scaling) -l show detailed low and high memory statistics -o use old format (no -/+buffers/cache line) -t display total for RAM + swap -s update every [delay] seconds -c update [count] times -a show available memory if exported by kernel (> characters per line) -V display version information and exit #以b为单位来显示空闲内存情况 [dba_mysql@tk-dba-mysql-194 ~]$ free -b total used free shared buffers cached Mem: -/+ buffers/cache: Swap: #以kb为单位来显示空闲内存情况 [dba_mysql@tk-dba-mysql-194 ~]$ free -k total used free shared buffers cached Mem: -/+ buffers/cache: Swap: #以Mb为单位来显示空闲内存情况 [dba_mysql@tk-dba-mysql-194 ~]$ free -m total used free shared buffers cached Mem: -/+ buffers/cache: Swap: #以GB为单位来显示空闲内存情况 [dba_mysql@tk-dba-mysql-194 ~]$ free -g total used free shared buffers cached Mem: -/+ buffers/cache: Swap: #每3秒显示空闲内存情况 [dba_mysql@tk-dba-mysql-194 ~]$ free -s total used free shared buffers cached Mem: -/+ buffers/cache: Swap: total used free shared buffers cached Mem: -/+ buffers/cache: Swap: ^C #显示total行 [dba_mysql@tk-dba-mysql-194 ~]$ free -mt total used free shared buffers cached Mem: -/+ buffers/cache: Swap: Total:
03
uniq命令
Linux uniq 命令用于检查及删除文本文件中重复出现的行列,一般与 sort 命令结合使用。uniq 可检查文本文件中重复出现的行列。这个命令的用法比较简单,这里只给出相关的实例,相关的注释在例子中有:
#首先我们创建一个文件,文件的内容如下: [dba_mysql ~]$ cat yeyz.lst test 30 test 30 test 30 Hello 95 Hello 95 Hello 95 Hello 95 Linux 85 Linux 85 #使用uniq命令进行处理,我们发现重复的记录被去除了 [dba_mysql ~]$ uniq yeyz.lst test 30 Hello 95 Linux 85 Linux 85 #使用uniq -c参数,我们可以发现每一行记录前面统计出来了具体的重复行数 [dba_mysql ~]$ uniq -c yeyz.lst 3 test 30 4 Hello 95 1 Linux 85 1 Linux 85 [dba_mysql ~]$ #再创建一个文件yeyz.lst2文件,这个文件的不同之处是记录是乱序的。 [dba_mysql ~]$ cat yeyz.lst2 test 30 Hello 95 Linux 85 test 30 Hello 95 Linux 85 test 30 Hello 95 Linux 85 #我们使用uniq命令,发现输出的结果并没有进行去重 [dba_mysql ~]$ uniq yeyz.lst2 test 30 Hello 95 Linux 85 test 30 Hello 95 Linux 85 test 30 Hello 95 Linux 85 #想要进行去重,我们必须使用sort命令对这些记录先进行排序,然后再使用去重的方法 [dba_mysql ~]$ sort yeyz.lst2 Hello 95 Hello 95 Hello 95 Linux 85 Linux 85 Linux 85 test 30 test 30 test 30 #再次去重,我们发现还是不能出现正确的结果,原因是sort并没有改变yeyz.lst2文件本身,只是输出了排序后的结果 [dba_mysql ~]$ uniq yeyz.lst2 test 30 Hello 95 Linux 85 test 30 Hello 95 Linux 85 test 30 Hello 95 Linux 85 #我们看看刚才排序和去冲过后的文件,发现他们并没有发生变化,也就证明了前文所说的。 [dba_mysql ~]$ cat yeyz.lst test 30 test 30 test 30 Hello 95 Hello 95 Hello 95 Hello 95 Linux 85 Linux 85 [dba_mysql ~]$ cat yeyz.lst2 test 30 Hello 95 Linux 85 test 30 Hello 95 Linux 85 test 30 Hello 95 Linux 85 #最后我们通过sort+uniq的命令,对文件中的内容进行了保存。 [dba_mysql ~]$ sort yeyz.lst2|uniq Hello 95 Linux 85 test 30 #当然,uniq照样可以接一个-c参数 [dba_mysql ~]$ sort yeyz.lst2|uniq -c 3 Hello 95 3 Linux 85 3 test 30 #如果想要保存结果,可以把它重定向到一个文件中去 [dba_mysql@tk-dba-mysql-194 ~]$ sort yeyz.lst2|uniq -c > yeyz.lst3 [dba_mysql@tk-dba-mysql-194 ~]$ cat yeyz.lst3 3 Hello 95 3 Linux 85 3 test 30 ##注意>不要写成>>,写成>>就变成了追加。 [dba_mysql@tk-dba-mysql-194 ~]$ sort yeyz.lst2|uniq -c >> yeyz.lst3 [dba_mysql@tk-dba-mysql-194 ~]$ cat yeyz.lst3 3 Hello 95 3 Linux 85 3 test 30 3 Hello 95 3 Linux 85 3 test 30