bash shell命令与监测的那点事(一)

bash shell命令与监测的那点事之ps

  学习LInux,不得不谈谈bash shell命令,介绍Linux命令行与Shell脚本的书有很多很多,bash shell命令也有很多,此次我们只谈谈有关监测的事情。

探查进程

  当程序运行在系统上时,我们称之为进程。想监测这些进程,需要熟悉ps命令的用法,ps命令好比工具的瑞士军刀,它能输出运行在系统上的所有程序的许多信息。

  但是很蛋疼的是,随着它的稳健而来的是复杂性-数不清的参数,这或许让ps命令成为了最难掌握的命令。大多数系统管理员在掌握了能提供他们需要的一组参数后,就一直坚持只使用这组参数。默认情况下,ps命令并不会提供那么多的信息:

1 [[email protected] ~]# ps
2   PID TTY          TIME CMD
3 13918 pts/1    00:00:00 bash
4 14934 pts/1    00:00:00 ps

  没什么特别的是吧?默认情况下,ps命令只会显示运行在当前控制台下的属于当前用户的进程,在此例中,我们只运行了bash shell(注:shell也只是运行在系统上的另一个程序而已),以及ps命令自己。

  上例中的基本输出显示了程序的进程号,(PID)、它们运行在哪个终端,以及进程已用的CPU时间。

  Linux系统中使用的GNU ps命令支持3个不同类型的命令行参数:

  • Unix风格的参数,前面加单破折线
  • BSD风格的参数,前面不加破折线
  • GNU风格的长参数,前面加双破折线

  下面将进一步解析这三种不同的参数类型,并举例演示它们如何工作。

Unix风格的参数

-A    显示所有进程
-N   显示与指定参数不符的所有进程
-a     显示除控制进程和无终端的进程外的所有进程
-d         显示除控制进程外的所有进程
-e   显示所有进程
-f 显示完整格式的输出
-F   显示更多的额外输出
-j 显示任务信息
-l 显示长列表
-H   用层级格式来显示进程(树状、用来显示父进程)

  以上介绍的是常用的Unix风格的参数,下面举几个栗子: 

 1 [[email protected] ~]# ps -ef
 2 UID        PID  PPID  C STIME TTY          TIME CMD
 3 root         1     0  0 Jul22 ?        00:14:42 /sbin/init
 4 root         2     0  0 Jul22 ?        00:00:01 [kthreadd]
 5 root         3     2  0 Jul22 ?        00:04:02 [migration/0]
 6 root         4     2  0 Jul22 ?        00:03:33 [ksoftirqd/0]
 7 root         5     2  0 Jul22 ?        00:00:00 [migration/0]
 8 root         6     2  0 Jul22 ?        00:00:11 [watchdog/0]
 9 root         7     2  0 Jul22 ?        00:04:00 [migration/1]
10 root         8     2  0 Jul22 ?        00:00:00 [migration/1]
11 root         9     2  0 Jul22 ?        00:03:53 [ksoftirqd/1]
12 root        10     2  0 Jul22 ?        00:00:10 [watchdog/1]
13 root        11     2  0 Jul22 ?        00:03:57 [migration/2]
14 root        12     2  0 Jul22 ?        00:00:00 [migration/2]
15 root        13     2  0 Jul22 ?        00:03:53 [ksoftirqd/2]

  这个栗子中包含了两个参数:-e是指定显示所有运行在系统上的进程;-f是扩展了输出,这些扩展包含了以下信息:

  • UID:启动这些进程的用户。
  • PID:进程的进程号。
  • PPID:父进程的进程号。
  • C:进程生命周期中的CPU利用率。
  • STIME:进程启动时的系统时间。
  • TTY:进程启动时的终端设备。
  • TIME:运行进程需要的累计CPU时间。
  • CMD:启动的进程名称。

  如果想获得更多的参数,可以用-l参数,它会产生一个长格式的输出:

1 [[email protected] ~]# ps -l
2 F S   UID   PID  PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
3 4 S     0 13918 13914  0  80   0 - 27118 wait   pts/1    00:00:00 bash
4 4 R     0 19675 13918  8  80   0 - 27034 -      pts/1    00:00:00 ps
5 [[email protected] ~]#

  使用-l后出现的新的参数如下:

  • F:内核分配给进程的系统标记。
  • S:进程的状态:0代表正在运行;S代表在休眠;R代表可运行,正等待运行;Z代表僵化,进程已结束但父进程已不存在;T代表停止。
  • PRI:进程的优先级(数字越大,代表优先级越低)。
  • NI:谦让度值用来参与决定优先级。
  • ADDR:进程的内存地址。
  • SZ:假如进程被换出,所需交换空间的大致大小。
  • WCHAN:进程休眠的内核函数地址。

BSD风格

  了解了Unix风格的参数后,我们一起看一下BSD风格的参数。BSD(伯克利软件发行版)是加州大学伯克利分校开发的一个Unix版本。它和AT&T Unix系统有许多细小的不同。

BSD风格的命令参数

T   显示当前终端关联的所有进程
a   显示跟任意终端关联的所有进程
g 显示所有进程,包括控制进程
r 仅显示运行中的进程
 j  显示任务信息
x 显示所有进程,甚至包括未分配任何终端的进程
l 采用长模式
e 显示命令使用的环境变量
f 用分层格式来显示进程,表明哪些进程启动了哪些进程
h 不显示头信息

  如你所见,Unix和BSD类型的参数有很多重叠的地方,所以大多数情况,你只要选择自己喜欢的格式的参数类型就行了。

  在使用BSD参数时,ps命令会自动改变输出以模仿BSD格式。下面举个栗子:

 1 [[email protected] ~]# ps l
 2 F   UID   PID  PPID PRI  NI    VSZ   RSS WCHAN  STAT TTY        TIME COMMAND
 3 4     0  2683     1  20   0   4064   456 n_tty_ Ss+  tty2       0:00 /sbin/mingetty /dev/tty2
 4 4     0  2685     1  20   0   4064   456 n_tty_ Ss+  tty3       0:00 /sbin/mingetty /dev/tty3
 5 4     0  2694     1  20   0   4064   456 n_tty_ Ss+  tty4       0:00 /sbin/mingetty /dev/tty4
 6 4     0  2705     1  20   0   4064   456 n_tty_ Ss+  tty5       0:00 /sbin/mingetty /dev/tty5
 7 4     0  2707     1  20   0   4064   456 n_tty_ Ss+  tty6       0:00 /sbin/mingetty /dev/tty6
 8 4     0  2724  2715  20   0 199372 23456 poll_s Ss+  tty1       8:29 /usr/bin/Xorg :0 -nr -verbose -audit 4 -auth /var/run/gdm/auth-for-gdm-9L52AZ/database -nolisten tcp vt1
 9 4     0  3058  3054  20   0 195268 34792 poll_s Ss+  tty7      19:52 /usr/bin/Xorg :1 -br -verbose -audit 4 -auth /var/run/gdm/auth-for-gdm-6RkbH9/database -nolisten tcp
10 4     0  3713  3709  20   0 146720  3112 poll_s Ss+  tty8       1:28 /usr/bin/Xorg :2 -br -verbose -audit 4 -auth /var/run/gdm/auth-for-gdm-zqkSTu/database -nolisten tcp
11 4     0  7352 13918  20   0 108136  1004 -      R+   pts/1      0:00 ps l
12 4     0 13918 13914  20   0 108472  1792 wait   Ss   pts/1      0:00 -bash
13 [[email protected] ~]# 

  注意:大部分输出和使用Unix风格一样,但是有一小部分是不同的:

  • VSZ:进程在内存中的大小,以KB为单位。
  • RSS:进程在未换出时占用的物理内存。
  • STAT:代表当前进程状态的双字符状态码。

  在状态码中,BSD比Unix输出的信息更为详尽。第一个参数与Unix输出相同的值,但是第二个参数进一步说明进程的状态:

  • <:该进程运行在高优先级上。
  • N:该进程运行在低优先级上。
  • L:进程有页面锁定在内存中。
  • S:该进程是个控制进程。
  • l:该进程是多线程的。
  • +:该进程是运行在前端。

GNU全字参数

  最后,GNU开发人员在这个新的整合过的ps命令中加入了另外一些参数。一些GNU全字参数复制了现有的Unix或BSD类型的参数,而一些提供了新功能。下面列出了GNU的一些命令参数。

--deselect 显示所有进程,命令行中列出的进程
--contest 显示额外的安全信息
--cols n 将屏幕宽度设置为n列
--columns n 将屏幕宽度设置为n列
--cumulative 包含已停止的进程的信息
--forest 用层级结构显示出进程和父进程之间的关系
--headers 在每页输出中列出列的头
--lines n 将屏幕高设置为n行
 --rows  将屏幕设置为n排
sort order 指定将输出按哪列排序

  你可以将GNU全字参数和Unix或BSD风格混用来定制输出。GNU中最好用的莫过于--forest参数。它会显示进程的层级信息,并用ASCII字符绘出萌萌的图表:

 1 root      3054  2677  0 Aug01 ?        00:00:00  \_ /usr/libexec/gdm-simple-slave --display-id /org/gnome/DisplayManager/Display2
 2 root      3058  3054  0 Aug01 tty7     00:19:52  |   \_ /usr/bin/Xorg :1 -br -verbose -audit 4 -auth /var/run/gdm/auth-for-gdm-6RkbH9/database -nolisten tcp
 3 root      3126  3054  0 Aug01 ?        00:00:00  |   \_ pam: gdm-password
 4 root      3158  3126  0 Aug01 ?        00:00:07  |       \_ gnome-session
 5 root      3259  3158  0 Aug01 ?        00:00:57  |           \_ metacity
 6 root      3261  3158  0 Aug01 ?        00:04:54  |           \_ gnome-panel
 7 root      3262  3158  0 Aug01 ?        00:00:49  |           \_ nautilus
 8 root      3302  3158  0 Aug01 ?        00:00:55  |           \_ gnome-power-manager
 9 root      3308  3158  0 Aug01 ?        00:00:00  |           \_ gnome-volume-control-applet
10 root      3309  3158  0 Aug01 ?        00:00:03  |           \_ abrt-applet
11 root      3310  3158  0 Aug01 ?        00:00:01  |           \_ python /usr/share/system-config-printer/applet.py
12 root      3316  3158  0 Aug01 ?        00:00:00  |           \_ /usr/libexec/polkit-gnome-authentication-agent-1

  PS:本博客欢迎转发,但请注明博客地址及作者~

  博客地址:http://www.cnblogs.com/voidy/

  <。)#)))≦

时间: 2024-11-05 22:45:12

bash shell命令与监测的那点事(一)的相关文章

bash shell命令与监测的那点事(三)

bash shell命令与监测的那点事之df与du 前两篇介绍了bash shell的进程监控指令,但是有时候你需要知道在某个设备上还有多少磁盘空间.首先介绍df命令: df命令 df命令就是用来轻松查看所有已挂载磁盘的使用情况的: 1 [[email protected] ~]# df 2 Filesystem 1K-blocks Used Available Use% Mounted on 3 /dev/sda2 39219648 10728028 26499380 29% / 4 tmpf

bash shell命令与监测的那点事(二)

bash shell命令与监测的那点事之top 上次我们说到了ps命令,ps命令虽然在收集运行在系统上的进程信息很有用,但是也有不足之处,ps命令只能显示某个特定时间点的信息,如果你想观察频繁换进换出内存的进程的趋势,用ps的命令就不方便了. 而top命令刚好适用于这种场景.top命令跟ps命令相似,能够显示进程的信息,但它是实时显示的.下图是top命令输出截图: 1 top - 16:56:13 up 120 days, 23:37, 3 users, load average: 0.00,

基本bash shell命令

以下列举一些常用的bash shell命令,在使用时方便查找. 访问Linux系统上的手册:man 命令.例:man ps      手册是由分页程序来显示的,可以通过点击 空格,回车,向上和向下箭头进行翻页查看. 浏览文件系统:附一张常见Linux文件系统目录图 cd 命令:cd destination,cd命令可接受单个参数destination,用于切换到指定目录. destination参数可以用两种方式表示:1.绝对路径,2.相对路径 绝对路径:绝对路径总是以正斜线(/)作为起始,指明

linux 学习笔记 基本的bash shell命令

/etc/passwd 文件包含了所有系统用户账户列表以及每个用户的基本配置信息 用户名:密码:UID:GID:用户全名:用户默认的工作目录:用户默认的shell程序 默认情况下,bash shell启动时会自动处理用户主目录下.bashrc文件中的命令. 它经常设置各种应用程序中用到的环境变量. “-”是主目录的缩略表示 PS1:控制默认命令行提示符的格式 PS2:控制后续命令行提示符的格式 所有提示符特殊字符都从反斜线(\)开始. man命令用来访问存储在Linux系统上的手册页面. Nam

Linux命令行–基本的bash shell命令

启动shell: /etc/passwd:包含系统用户账户列表以及每个用户的基本配置信息 每个条目有七个字段,每个字段用冒号隔开 用户名 用户密码 用户的系统UID 用户的系统GID 用户的全名 用户的默认主目录 用户的默认shell程序 如:zmcheng:x:501:501:zhangmingcheng:/home/zmcheng:/bin/bash 默认情况下,bash shell启动时会自动处理用户主目录下.bashrc文件中的命令 shell 提示符: PS1:控制默认命令行提示符的格

基本的bash shell命令小结

以下是读<Linux命令行与shell脚本编程大全>第三章后,觉得有用的内容. 1./etc/passwd文件 该文件包含了所有系统用户账户列表及每个用户的基本配置信息,如下图所示: 每个条目有七个字段,字段之间使用冒号分隔,这些字段包括: •用户名 •用户密码(若密码在其他位置,则该位是一个占位符) •用户的系统UID •用户的系统GID •用户的全名 •用户的默认主目录 •用户的默认shell程序 2.shell提示符 默认bash shell提示符为$,提示符可更改,如下所示: [[em

Linux之基础bash shell命令

linux系统构成 linux内核主要负责 系统内存管理 软件程序管理 硬件设备管理 文件系统管理 GNU工具 执行一些标准功能,比如控制文件和程序.又分为核心工具和shell. 大部分Linux发行版的默认shell都是GNU bash shell. 浏览文件目录 常见的linux目录名称: 虚拟的根目录:/  二进制目录:/bin root用户的主目录: /root -等等 遍历目录:cd destination 后面的参数可以使用绝对文件路径,也可以使用相对文件路径 绝对路径输入 输入:

了解基本的bash shell命令

本节内容主要介绍如何使用bash shell提供的基本命令处理Linux文件和目录: 1.启动shell shell是一个可以交互访问的Linux系统程序,它的运行与普通程序相同,系统启动的shell取决于用户ID的配置: bash命令常用的参数: -c string 从字符串读取命令并进行处理 -r 启动受限制shell,将用户限制在默认的目录 -i 启动交互shell,容许用户的输入 -s   从标准输入中读取命令 默认情况下bash会执行用户主目录的.bashrc文件中的命令:该通用文件通

第3章 基本的bash shell命令

启动shell GNU bash shell提供对Linux系统交互式访问.他以常规程序运行,通常在用户登录终端时启动.登录时具体启动那种shell依据用户配置文件/etc/passwd . /etc/passwd 包含所有系统用户账户列表以及每个用户的基本信息.eg:其中一个条目 christine:x:501:501:Christine Bresnahan:/home/christine:/bin/bash 说明: 每个条目有7个字段,字段之间用冒号“:”分隔 用户名 用户密码(如果密码存储