Linux中的几个命令–top、free、uniq

  • 2019 年 11 月 6 日
  • 筆記

Linux中的几个命令
01

关于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