CentOS学习笔记--程序管理

程序管理

一个程序被加载到内存当中运行,那么在内存内的那个数据就被称为程序(process)。程序是操作系统上非常重要的概念, 所有系统上面跑的数据都会以程序的型态存在。那么系统的程序有哪些状态?不同的状态会如何影响系统的运行? 程序之间是否可以互相控管等等的,这些都是我们所必须要知道的项目。本节节选自鸟哥的 Linux 私房菜 -- 基础学习篇目录 第十七章、程序管理与 SELinux 初探

什么是程序 (process)

  • 程序 (program):通常为 binary program ,放置在储存媒体中 (如硬盘、光盘、软盘、磁带等), 为实体文件的型态存在;
  • 程序 (process):程序被触发后,运行者的权限与属性、程序的程序码与所需数据等都会被加载内存中, 操作系统并给予这个内存内的单元一个识别码 (PID),可以说,程序就是一个正在运行中的程序。

子程序与父程序:

当我们登陆系统后,会取得一个 bash 的 shell ,然后,我们用这个 bash 提供的介面去运行另一个命令,例如 /usr/bin/passwd 或者是 touch 等等,那些另外运行的命令也会被触发成为 PID ,呵呵!那个后来运行命令才产生的 PID 就是『子程序』了,而在我们原本的 bash 环境下,就称为『父程序』了!

例题:

请在目前的 bash 环境下,再触发一次 bash ,并以『 ps -l 』这个命令观察程序相关的输出资讯。

答:

直接运行 bash ,会进入到子程序的环境中,然后输入 ps -l 后,出现:

F S   UID   PID  PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
4 S     0  8074  8072  2  76   0 -  1287 wait   pts/1    00:00:00 bash
0 S     0  8102  8074  4  76   0 -  1287 wait   pts/1    00:00:00 bash
4 R     0  8118  8102  0  78   0 -  1101 -      pts/1    00:00:00 ps

有看到那个 PID 与 PPID 吗?第一个 bash 的 PID 与第二个 bash 的 PPID 都是 8074 啊, 因为第二个 bash 是来自於第一个所产生的嘛!另外,每部主机的程序启动状态都不一样, 所以在你的系统上面看到的 PID 与我这里的显示一定不同!那是正常的!详细的 ps 命令我们会在本章稍后介绍, 这里你只要知道 ps -l 可以查阅到相关的程序资讯即可。

很多朋友常常会发现:『咦!明明我将有问题的程序关闭了,怎么过一阵子他又自动的产生? 而且新产生的那个程序的 PID 与原先的还不一样,这是怎么回事呢?』不要怀疑,如果不是 crontab 工作排程的影响,肯定有一支父程序存在,所以你杀掉子程序后, 父程序就会主动再生一支!那怎么办?正所谓这:『擒贼先擒王』,找出那支父程序,然后将他删除就对啦!

程序的观察

既然程序这么重要,那么我们如何查阅系统上面正在运行当中的程序呢?很简单啊! 利用静态的 ps 或者是动态的 top,还能以 pstree 来查阅程序树之间的关系喔!

  • ps :将某个时间点的程序运行情况撷取下来
    [root@www ~]# ps aux  <==观察系统所有的程序数据
    [root@www ~]# ps -lA  <==也是能够观察所有系统的数据
    [root@www ~]# ps axjf <==连同部分程序树状态
    选项与参数:
    -A  :所有的 process 均显示出来,与 -e 具有同样的效用;
    -a  :不与 terminal 有关的所有 process-u  :有效使用者 (effective user) 相关的 process ;
    x   :通常与 a 这个参数一起使用,可列出较完整资讯。
    输出格式规划:
    l   :较长、较详细的将该 PID 的的资讯列出;
    j   :工作的格式 (jobs format)
    -f  :做一个更为完整的输出。
    • 仅观察自己的 bash 相关程序: ps -l
      范例一:将目前属於您自己这次登陆的 PID 与相关资讯列示出来(只与自己的 bash 有关)
      [root@www ~]# ps -l
      F S   UID   PID  PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
      4 S     0 13639 13637  0  75   0 -  1287 wait   pts/1    00:00:00 bash
      4 R     0 13700 13639  0  77   0 -  1101 -      pts/1    00:00:00 ps

系统整体的程序运行是非常多的,但如果使用 ps -l 则仅列出与你的操作环境 (bash) 有关的程序而已, 亦即最上一级的父程序会是你自己的 bash 而没有延伸到 init 这支程序去!那么 ps -l 秀出来的数据有哪些呢? 我们就来观察看看:

  • F:代表这个程序旗标 (process flags),说明这个程序的总结权限,常见号码有:
    • 若为 4 表示此程序的权限为 root ;
    • 若为 1 则表示此子程序仅进行复制(fork)而没有实际运行(exec)。
  • S:代表这个程序的状态 (STAT),主要的状态有:
    • R (Running):该程序正在运行中;
    • S (Sleep):该程序目前正在睡眠状态(idle),但可以被唤醒(signal)。
    • D :不可被唤醒的睡眠状态,通常这支程序可能在等待 I/O 的情况(ex>列印)
    • T :停止状态(stop),可能是在工作控制(背景暂停)或除错 (traced) 状态;
    • Z (Zombie):僵尸状态,程序已经终止但却无法被移除至内存外。
  • UID/PID/PPID:代表『此程序被该 UID 所拥有/程序的 PID 号码/此程序的父程序 PID 号码』
  • C:代表 CPU 使用率,单位为百分比;
  • PRI/NI:Priority/Nice 的缩写,代表此程序被 CPU 所运行的优先顺序,数值越小代表该程序越快被 CPU 运行。详细的 PRI 与 NI 将在下一小节说明。
  • ADDR/SZ/WCHAN:都与内存有关,ADDR 是 kernel function,指出该程序在内存的哪个部分,如果是个 running 的程序,一般就会显示『 - 』 / SZ 代表此程序用掉多少内存 / WCHAN 表示目前程序是否运行中,同样的, 若为 - 表示正在运行中。
  • TTY:登陆者的终端机位置,若为远程登陆则使用动态终端介面 (pts/n);
  • TIME:使用掉的 CPU 时间,注意,是此程序实际花费 CPU 运行的时间,而不是系统时间;
  • CMD:就是 command 的缩写,造成此程序的触发程序之命令为何。

所以你看到的 ps -l 输出信息中,他说明的是:『bash 的程序属於 UID 为 0 的使用者,状态为睡眠 (sleep), 之所以为睡眠因为他触发了 ps (状态为 run) 之故。此程序的 PID 为 13639,优先运行顺序为 75 , 下达 bash 所取得的终端介面为 pts/1 ,运行状态为等待 (wait) 。』这样已经够清楚了吧? 您自己尝试解析一下那么 ps 那一行代表的意义为何呢? ^_^

接下来让我们使用 ps 来观察一下系统内所有的程序状态吧!

观察系统所有程序: ps aux
范例二:列出目前所有的正在内存当中的程序:
[root@www ~]# ps aux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.0   2064   616 ?        Ss   Mar11   0:01 init [5]
root         2  0.0  0.0      0     0 ?        S<   Mar11   0:00 [migration/0]
root         3  0.0  0.0      0     0 ?        SN   Mar11   0:00 [ksoftirqd/0]
.....(中间省略).....
root     13639  0.0  0.2   5148  1508 pts/1    Ss   11:44   0:00 -bash
root     14232  0.0  0.1   4452   876 pts/1    R+   15:52   0:00 ps aux
root     18593  0.0  0.0   2240   476 ?        Ss   Mar14   0:00 /usr/sbin/atd

你会发现 ps -l 与 ps aux 显示的项目并不相同!在 ps aux 显示的项目中,各栏位的意义为:

  • USER:该 process 属於那个使用者帐号的?
  • PID :该 process 的程序识别码。
  • %CPU:该 process 使用掉的 CPU 资源百分比;
  • %MEM:该 process 所占用的实体内存百分比;
  • VSZ :该 process 使用掉的虚拟内存量 (Kbytes)
  • RSS :该 process 占用的固定的内存量 (Kbytes)
  • TTY :该 process 是在那个终端机上面运行,若与终端机无关则显示 ?,另外, tty1-tty6 是本机上面的登陆者程序,若为 pts/0 等等的,则表示为由网络连接进主机的程序。
  • STAT:该程序目前的状态,状态显示与 ps -l 的 S 旗标相同 (R/S/T/Z)
  • START:该 process 被触发启动的时间;
  • TIME :该 process 实际使用 CPU 运行的时间。
  • COMMAND:该程序的实际命令为何?

一般来说,ps aux 会依照 PID 的顺序来排序显示,我们还是以 13639 那个 PID 那行来说明!该行的意义为『 root 运行的 bash PID 为 13639,占用了 0.2% 的内存容量百分比,状态为休眠 (S),该程序启动的时间为 11:44 , 且取得的终端机环境为 pts/1 。』与 ps aux 看到的其实是同一个程序啦!这样可以理解吗? 让我们继续使用 ps 来观察一下其他的资讯吧!

范例三:以范例一的显示内容,显示出所有的程序:
[root@www ~]# ps -lA
F S   UID   PID  PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
4 S     0     1     0  0  76   0 -   435 -      ?        00:00:01 init
1 S     0     2     1  0  94  19 -     0 ksofti ?        00:00:00 ksoftirqd/0
1 S     0     3     1  0  70  -5 -     0 worker ?        00:00:00 events/0
....(以下省略)....
# 你会发现每个栏位与 ps -l 的输出情况相同,但显示的程序则包括系统所有的程序。

范例四:列出类似程序树的程序显示:
[root@www ~]# ps axjf
 PPID   PID  PGID   SID TTY      TPGID STAT   UID   TIME COMMAND0     1     1     1 ?           -1 Ss       0   0:01 init [5]
.....(中间省略).....1  4586  4586  4586 ?           -1 Ss       0   0:00 /usr/sbin/sshd4586 13637 13637 13637 ?           -1 Ss       0   0:00  \_ sshd: root@pts/1
13637 13639 13639 13639 pts/1    14266 Ss       0   0:00      \_ -bash
13639 14266 14266 13639 pts/1    14266 R+       0   0:00          \_ ps axjf
.....(后面省略).....
看出来了吧?其实鸟哥在进行一些测试时,都是以网络连线进主机来测试的,所以罗,你会发现其实程序之间是有相关性的啦! 不过,其实还可以使用 pstree 来达成这个程序树喔!以上面的例子来看,鸟哥是透过 sshd 提供的网络服务取得一个程序, 该程序提供 bash 给我使用,而我透过 bash 再去运行 ps axjf !
范例五:找出与 cron 与 syslog 这两个服务有关的 PID 号码?
[root@www ~]# ps aux | egrep '(cron|syslog)'
root   4286  0.0  0.0  1720   572 ?      Ss  Mar11   0:00 syslogd -m 0
root   4661  0.0  0.1  5500  1192 ?      Ss  Mar11   0:00 crond
root  14286  0.0  0.0  4116   592 pts/1  R+  16:15   0:00 egrep (cron|syslog)
# 所以号码是 4286 及 4661 这两个罗!就是这样找的啦!
除此之外,我们必须要知道的是『僵尸 (zombie) 』程序是什么? 通常,造成僵尸程序的成因是因为该程序应该已经运行完毕,或者是因故应该要终止了, 但是该程序的父程序却无法完整的将该程序结束掉,而造成那个程序一直存在内存当中。 如果你发现在某个程序的 CMD 后面还接上 <defunct> 时,就代表该程序是僵尸程序啦,例如:
apache  8683  0.0  0.9 83384 9992 ?   Z  14:33   0:00 /usr/sbin/httpd <defunct>
当系统不稳定的时候就容易造成所谓的僵尸程序,可能是因为程序写的不好啦,或者是使用者的操作习惯不良等等所造成。 如果你发现系统中很多僵尸程序时,记得啊!要找出该程序的父程序,然后好好的做个追踪,好好的进行主机的环境最佳化啊! 看看有什么地方需要改善的,不要只是直接将他 kill 掉而已呢!不然的话,万一他一直产生,那可就麻烦了!事实上,通常僵尸程序都已经无法控管,而直接是交给 init 这支程序来负责了,偏偏 init 是系统第一支运行的程序, 他是所有程序的父程序!我们无法杀掉该程序的 (杀掉他,系统就死掉了!),所以罗,如果产生僵尸程序, 而系统过一阵子还没有办法透过核心非经常性的特殊处理来将该程序删除时,那你只好透过 reboot 的方式来将该程序抹去了! top:动态观察程序的变化

相对於 ps 是撷取一个时间点的程序状态, top 则可以持续侦测程序运行的状态!使用方式如下:

[root@www ~]# top [-d 数字] | top [-bnp]
选项与参数:
-d  :后面可以接秒数,就是整个程序画面升级的秒数。默认是 5 秒;
-b  :以批量的方式运行 top ,还有更多的参数可以使用喔!通常会搭配数据流重导向来将批量的结果输出成为文件。
-n  :与 -b 搭配,意义是,需要进行几次 top 的输出结果。
-p  :指定某些个 PID 来进行观察监测而已。
在 top 运行过程当中可以使用的按键命令:? :显示在 top 当中可以输入的按键命令;P :以 CPU 的使用资源排序显示;M :以 Memory 的使用资源排序显示;N :以 PID 来排序喔!T :由该 Process 使用的 CPU 时间累积 (TIME+) 排序。k :给予某个 PID 一个讯号  (signal)r :给予某个 PID 重新制订一个 nice 值。q :离开 top 软件的按键。
接下来让我们实际观察一下如何使用 top 与 top 的画面吧!
范例一:每两秒钟升级一次 top ,观察整体资讯:
[root@www ~]# top -d 2
top - 17:03:09 up 7 days, 16:16,  1 user,  load average: 0.00, 0.00, 0.00
Tasks:  80 total,   1 running,  79 sleeping,   0 stopped,   0 zombie
Cpu(s):  0.5%us,  0.5%sy,  0.0%ni, 99.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:    742664k total,   681672k used,    60992k free,   125336k buffers
Swap:  1020088k total,       28k used,  1020060k free,   311156k cached<==如果加入 k 或 r 时,就会有相关的字样出现在这里喔!PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND     
14398 root      15   0  2188 1012  816 R  0.5  0.1   0:00.05 top1 root      15   0  2064  616  528 S  0.0  0.1   0:01.38 init2 root      RT  -5     0    0    0 S  0.0  0.0   0:00.00 migration/03 root      34  19     0    0    0 S  0.0  0.0   0:00.00 ksoftirqd/0

top 也是个挺不错的程序观察工具!但不同於 ps 是静态的结果输出, top 这个程序可以持续的监测整个系统的程序工作状态。 在默认的情况下,每次升级程序资源的时间为 5 秒,不过,可以使用 -d 来进行修改。 top 主要分为两个画面,上面的画面为整个系统的资源使用状态,基本上总共有六行,显示的内容依序是:

  • 第一行(top...):这一行显示的资讯分别为:
    • 目前的时间,亦即是 17:03:09 那个项目;
    • 启动到目前为止所经过的时间,亦即是 up 7days, 16:16 那个项目;
    • 已经登陆系统的使用者人数,亦即是 1 user项目;
    • 系统在 1, 5, 15 分钟的平均工作负载。我们在第十六章谈到的 batch 工作方式为负载小於 0.8 就是这个负载罗!代表的是 1, 5, 15 分钟,系统平均要负责运行几个程序(工作)的意思。 越小代表系统越闲置,若高於 1 得要注意你的系统程序是否太过繁复了!
  • 第二行(Tasks...):显示的是目前程序的总量与个别程序在什么状态(running, sleeping, stopped, zombie)。 比较需要注意的是最后的 zombie 那个数值,如果不是 0 !好好看看到底是那个 process 变成僵尸了吧?
  • 第三行(Cpus...):显示的是 CPU 的整体负载,每个项目可使用 ? 查阅。需要特别注意的是 %wa ,那个项目代表的是 I/O wait, 通常你的系统会变慢都是 I/O 产生的问题比较大!因此这里得要注意这个项目耗用 CPU 的资源喔! 另外,如果是多核心的设备,可以按下数字键『1』来切换成不同 CPU 的负载率。
  • 第四行与第五行:表示目前的实体内存与虚拟内存 (Mem/Swap) 的使用情况。 再次重申,要注意的是 swap 的使用量要尽量的少!如果 swap 被用的很大量,表示系统的实体内存实在不足!
  • 第六行:这个是当在 top 程序当中输入命令时,显示状态的地方。

至於 top 下半部分的画面,则是每个 process 使用的资源情况。比较需要注意的是:

  • PID :每个 process 的 ID 啦!
  • USER:该 process 所属的使用者;
  • PR :Priority 的简写,程序的优先运行顺序,越小越早被运行;
  • NI :Nice 的简写,与 Priority 有关,也是越小越早被运行;
  • %CPU:CPU 的使用率;
  • %MEM:内存的使用率;
  • TIME+:CPU 使用时间的累加;

top 默认使用 CPU 使用率 (%CPU) 作为排序的重点,如果你想要使用内存使用率排序,则可以按下『M』, 若要回复则按下『P』即可。如果想要离开 top 则按下『 q 』吧!如果你想要将 top 的结果输出成为文件时, 可以这样做:

范例二:将 top 的资讯进行 2 次,然后将结果输出到 /tmp/top.txt
[root@www ~]# top -b -n 2 > /tmp/top.txt
# 这样一来,嘿嘿!就可以将 top 的资讯存到 /tmp/top.txt 文件中了。
  • pstree
[root@www ~]# pstree [-A|U] [-up]
选项与参数:
-A  :各程序树之间的连接以 ASCII 字节来连接;
-U  :各程序树之间的连接以万国码的字节来连接。在某些终端介面下可能会有错误;
-p  :并同时列出每个 process 的 PID;
-u  :并同时列出每个 process 的所属帐号名称。范例一:列出目前系统上面所有的程序树的相关性:
[root@www ~]# pstree -A
init-+-acpid|-atd|-auditd-+-audispd---{audispd}  <==这行与底下一行为 auditd 分出来的子程序|        `-{auditd}|-automount---4*[{automount}]   <==默认情况下,相似的程序会以数字显示
....(中间省略)....|-sshd---sshd---bash---pstree   <==就是我们命令运行的那个相依性!
....(底下省略)....
# 注意一下,为了节省版面,所以鸟哥已经删去很多程序了!

范例二:承上题,同时秀出 PID 与 users 
[root@www ~]# pstree -Aup
init(1)-+-acpid(4555)|-atd(18593)|-auditd(4256)-+-audispd(4258)---{audispd}(4261)|              `-{auditd}(4257)|-automount(4536)-+-{automount}(4537) <==程序相似但 PID 不同!|                 |-{automount}(4538)|                 |-{automount}(4541)|                 `-{automount}(4544)
....(中间省略)....|-sshd(4586)---sshd(16903)---bash(16905)---pstree(16967)
....(中间省略)....|-xfs(4692,xfs)   <==因为此程序拥有者并非运行 pstree 者!所以列出帐号
....(底下省略)....
# 在括号 () 内的即是 PID 以及该程序的 owner 喔!不过,由於我是使用 
# root 的身份运行此一命令,所以属於 root 的程序就不会显示出来啦!

如果要找程序之间的相关性,这个 pstree 真是好用到不行!直接输入 pstree 可以查到程序相关性,如上表所示,还会使用线段将相关性程序连结起来哩! 一般连结符号可以使用 ASCII 码即可,但有时因为语系问题会主动的以 Unicode 的符号来连结, 但因为可能终端机无法支持该编码,或许会造成乱码问题。因此可以加上 -A 选项来克服此类线段乱码问题。

程序的管理

  • kill -signal PID

kill 可以帮我们将这个 signal 传送给某个工作 (%jobnumber) 或者是某个 PID (直接输入数字)。 要再次强调的是: kill 后面直接加数字与加上 %number 的情况是不同的! 这个很重要喔!因为工作控制中有 1 号工作,但是 PID 1 号则是专指『 init 』这支程序!你怎么可以将 init 关闭呢? 关闭 init ,你的系统就当掉了啊!所以记得那个 % 是专门用在工作控制的喔! 我们就活用一下 kill 与刚刚上面提到的 ps 来做个简单的练习吧!

例题:
以 ps 找出 syslog 这个程序的 PID 后,再使用 kill 传送信息,使得 syslog 可以重新读取配置档。
答:
由於需要重新读取配置档,因此 signal 是 1 号。至於找出 syslog 的 PID 可以是这样做:
ps aux | grep 'syslog' | grep -v 'grep'| awk '{print $2}'
接下来则是实际使用 kill -1 PID,因此,整串命令会是这样:
kill -SIGHUP $(ps aux|grep 'syslog'|grep -v 'grep'|awk '{print $2}')
如果要确认有没有重新启动 syslog ,可以参考登录档的内容,使用如下命令查阅:
tail -5 /var/log/messages
如果你有看到类似『Mar 19 15:08:20 www syslogd 1.4.1: restart』之类的字样,就是表示 syslogd 在 3/19 有重新启动 (restart) 过了!
  • killall -signal 命令名称

由於 kill 后面必须要加上 PID (或者是 job number),所以,通常 kill 都会配合 ps, pstree 等命令,因为我们必须要找到相对应的那个程序的 ID 嘛!但是,如此一来,很麻烦~有没有可以利用『下达命令的名称』来给予讯号的?举例来说,能不能直接将 syslog 这个程序给予一个 SIGHUP 的讯号呢?可以的!用 killall 吧!

[root@www ~]# killall [-iIe] [command name]
选项与参数:
-i  :interactive 的意思,互动式的,若需要删除时,会出现提示字节给使用者;
-e  :exact 的意思,表示『后面接的 command name 要一致』,但整个完整的命令不能超过 15 个字节。
-I  :命令名称(可能含参数)忽略大小写。范例一:给予 syslogd 这个命令启动的 PID 一个 SIGHUP 的讯号
[root@www ~]# killall -1 syslogd
# 如果用 ps aux 仔细看一下,syslogd 才是完整的命令名称。但若包含整个参数,
# 则 syslogd -m 0 才是完整的呢!

范例二:强制终止所有以 httpd 启动的程序
[root@www ~]# killall -9 httpd

范例三:依次询问每个 bash 程序是否需要被终止运行!
[root@www ~]# killall -i -9 bash
Kill bash(16905) ? (y/N) n <==这个不杀!
Kill bash(17351) ? (y/N) y <==这个杀掉!
# 具有互动的功能!可以询问你是否要删除 bash 这个程序。要注意,若没有 -i 的参数,
# 所有的 bash 都会被这个 root 给杀掉!包括 root 自己的 bash 喔! ^_^

总之,要删除某个程序,我们可以使用 PID 或者是启动该程序的命令名称, 而如果要删除某个服务呢?呵呵!最简单的方法就是利用 killall , 因为他可以将系统当中所有以某个命令名称启动的程序全部删除。 举例来说,上面的范例二当中,系统内所有以 httpd 启动的程序,就会通通的被删除啦! ^_^

系统资源的观察

  • free :观察内存使用情况
    [root@www ~]# free [-b|-k|-m|-g] [-t]
    选项与参数:
    -b  :直接输入 free 时,显示的单位是 Kbytes,我们可以使用 b(bytes), m(Mbytes)k(Kbytes), 及 g(Gbytes) 来显示单位喔!
    -t  :在输出的最终结果,显示实体内存与 swap 的总量。范例一:显示目前系统的内存容量
    [root@www ~]# free -m
              total       used    free   shared   buffers    cached
    Mem:        725        666      59        0       132       287
    -/+ buffers/cache:     245     479
    Swap:       996          0     996
    仔细看看,我的系统当中有 725MB 左右的实体内存,我的 swap 有 1GB 左右, 那我使用 free -m 以 MBytes 来显示时,就会出现上面的资讯。Mem 那一行显示的是实体内存的量, Swap 则是虚拟内存的量。 total 是总量, used 是已被使用的量, free 则是剩余可用的量。
  • uname:查阅系统与核心相关资讯
    [root@www ~]# uname [-asrmpi]
    选项与参数:
    -a  :所有系统相关的资讯,包括底下的数据都会被列出来;
    -s  :系统核心名称
    -r  :核心的版本
    -m  :本系统的硬件名称,例如 i686 或 x86_64 等;
    -p  :CPU 的类型,与 -m 类似,只是显示的是 CPU 的类型!
    -i  :硬件的平台 (ix86)范例一:输出系统的基本资讯
    [root@www ~]# uname -a
    Linux www.vbird.tsai 2.6.18-92.el5 #1 SMP Tue Jun 10 18:49:47 EDT 2008 i686
    i686 i386 GNU/Linux
  • uptime:观察系统启动时间与工作负载
    [root@www ~]# uptime15:39:13 up 8 days, 14:52,  1 user,  load average: 0.00, 0.00, 0.00
    # top 这个命令已经谈过相关资讯,不再聊!
  • netstat :追踪网络或插槽档
    [root@www ~]# netstat -[atunlp]
    选项与参数:
    -a  :将目前系统上所有的连线、监听、Socket 数据都列出来
    -t  :列出 tcp 网络封包的数据
    -u  :列出 udp 网络封包的数据
    -n  :不以程序的服务名称,以埠号 (port number) 来显示;
    -l  :列出目前正在网络监听 (listen) 的服务;
    -p  :列出该网络服务的程序 PID 范例一:列出目前系统已经创建的网络连线与 unix socket 状态
    [root@www ~]# netstat
    Active Internet connections (w/o servers) <==与网络较相关的部分
    Proto Recv-Q Send-Q Local Address        Foreign Address      State
    tcp        0    132 192.168.201.110:ssh  192.168.:vrtl-vmf-sa ESTABLISHED
    Active UNIX domain sockets (w/o servers)  <==与本机的程序自己的相关性(非网络)
    Proto RefCnt Flags       Type       State         I-Node Path
    unix  20     [ ]         DGRAM                    9153   /dev/log
    unix  3      [ ]         STREAM     CONNECTED     13317  /tmp/.X11-unix/X0
    unix  3      [ ]         STREAM     CONNECTED     13233  /tmp/.X11-unix/X0
    unix  3      [ ]         STREAM     CONNECTED     13208  /tmp/.font-unix/fs7100
    ....(中间省略)....
  • dmesg :分析核心产生的信息
    范例一:输出所有的核心启动时的资讯
    [root@www ~]# dmesg | more
    
    范例二:搜寻启动的时候,硬盘的相关资讯为何?
    [root@www ~]# dmesg | grep -i hdide0: BM-DMA at 0xd800-0xd807, BIOS settings: hda:DMA, hdb:DMAide1: BM-DMA at 0xd808-0xd80f, BIOS settings: hdc:pio, hdd:pio
    hda: IC35L040AVER07-0, ATA DISK drive
    hdb: ASUS DRW-2014S1, ATAPI CD/DVD-ROM drive
    hda: max request size: 128KiB
    ....(底下省略)....
  • vmstat :侦测系统资源变化
    [root@www ~]# vmstat [-a] [延迟 [总计侦测次数]] <==CPU/内存等资讯
    [root@www ~]# vmstat [-fs]                      <==内存相关
    [root@www ~]# vmstat [-S 单位]                  <==配置显示数据的单位
    [root@www ~]# vmstat [-d]                       <==与磁碟有关
    [root@www ~]# vmstat [-p 分割槽]                <==与磁碟有关
    选项与参数:
    -a  :使用 inactive/active(活跃与否) 取代 buffer/cache 的内存输出资讯;
    -f  :启动到目前为止,系统复制 (fork) 的程序数;
    -s  :将一些事件 (启动至目前为止) 导致的内存变化情况列表说明;
    -S  :后面可以接单位,让显示的数据有单位。例如 K/M 取代 bytes 的容量;
    -d  :列出磁碟的读写总量统计表
    -p  :后面列出分割槽,可显示该分割槽的读写总量统计表范例一:统计目前主机 CPU 状态,每秒一次,共计三次!
    [root@www ~]# vmstat 1 3
    procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st0  0     28  61540 137000 291960    0    0     4     5   38   55  0  0 100  0  00  0     28  61540 137000 291960    0    0     0     0 1004   50  0  0 100  0  00  0     28  61540 137000 291964    0    0     0     0 1022   65  0  0 100  0  0

转载于:https://www.cnblogs.com/ysztcn/p/4179592.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/292221.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux shell 嵌套expect 与服务器交互脚本

2019独角兽企业重金招聘Python工程师标准>>> 我们与服务器进行交互是该用expect 脚本的&#xff0c;用 “/usr/bin/expect <<-EOF” 来开启expect 脚本 用spawn 来开启一个新的进程 expect 来接受命令&#xff0c;send来发送交互命令 结束用 EOF来over expect…

python读取mysql以html形式输出_python实现处理mysql结果输出方式

在运维过程中&#xff0c;经常需要读取mysql的结果输出并进行响应的处理&#xff0c;这节介绍如何用Python读取mysql结果表并进行相应的整理。进行mysql结果文件输出&#xff1a;mysql -h10.20.10.207 -uroot -ppasswd test -e "select sendorderid, (price*100),mob from…

SkyWalking集成与案例

今天我们通过代码的形式来了解下&#xff0c;如何在项目中使用Skywalking。前几篇文章可以参考&#xff1a;《学习Skywalking 搭建篇》《Skywalking执行效果 多图篇》《Skywalking的ES索引 收藏篇》今天说说代码篇。先说下比较常见的开源 APM 如下&#xff1a;CAT&#xff1…

Windows Azure 安全最佳实践 - 第 6 部分:Azure 服务如何扩展应用程序安全性

多种 Windows Azure服务可以帮助您将应用程序安全性扩展到云。 有三种服务可提供多个提供程序之间的身份标识映射、内部部署数据中心间的连接和相互发送消息的应用程序功能&#xff08;无论应用程序位于何处&#xff09;。 使用Windows Azure Active Directory&#xff0c;您…

2014-11-25nbsp;11:26

爱好&#xff1f; 会网球 羽毛球 确实能扩展社交 转载于:https://www.cnblogs.com/wangduqiang/p/4180834.html

八皇后问题(二)

1、八皇后问题(二) 思路:我们采取回溯的方法来解决,还是那样表示,比如数组a, a[1] = 8;表示这个放在第一行第八列 2、代码实现: #include<stdio.h> #include<math.h>int count = 0; int check_queen(int a[], int n) {for (int i = 1; i < n; i++)if (f…

Windows Server 2012活动目录基础配置与应用(新手教程)之3---将客户机加入到指定域...

在WIN 2012服务器上安装AD后&#xff0c;WIN2012就从普通的服务器变成了域控制器。一个域也就产生了。但遗憾的是&#xff0c;目前这个域的规模还很小&#xff0c;只有DC这一台主机-------光杆司令&#xff01;&#xff01;下面尝试扩大域的规模&#xff0c;将客户机加入到域。…

论物理学界的神预言

全世界只有3.14 % 的人关注了爆炸吧知识一沙见世界 一花窥天堂手心握无限 须臾纳永恒杨振宁曾说读上面的四句诗可以感受到物理的美但物理的美不止于此物理还有一种庄严美一种神秘美一种初窥宇宙奥秘的畏惧美物理就是如此的迷人任何语言在它的面前都很贫瘠数学让人摆脱了愚昧而…

聊一聊如何用C#轻松完成一个SAGA分布式事务

背景 银行跨行转账业务是一个典型分布式事务场景&#xff0c;假设 A 需要跨行转账给 B&#xff0c;那么就涉及两个银行的数据&#xff0c;无法通过一个数据库的本地事务保证转账的 ACID &#xff0c;只能够通过分布式事务来解决。市面上使用比较多的分布式事务框架&#xff0c…

梯度消失和梯度爆炸_知识干货-动手学深度学习-05 梯度消失和梯度爆炸以及Kaggle房价预测...

梯度消失和梯度爆炸考虑到环境因素的其他问题Kaggle房价预测梯度消失和梯度爆炸深度模型有关数值稳定性的典型问题是消失&#xff08;vanishing&#xff09;和爆炸&#xff08;explosion&#xff09;。当神经网络的层数较多时&#xff0c;模型的数值稳定性容易变差。PyTorch的默…

Js中 关于top、clientTop、scrollTop、offsetTop的用法

2019独角兽企业重金招聘Python工程师标准>>> Js中 关于top、clientTop、scrollTop、offsetTop的用法 网页可见区域宽&#xff1a; document.body.clientWidth; 网页可见区域高&#xff1a; document.body.clientHeight; 网页可见区域宽&#xff1a; document.body.…

UVa 1639 (期望) Candy

题意&#xff1a; 两个盒子里各有n颗糖&#xff0c;每天有p的概率从第一个盒子里取一颗糖&#xff0c;1-p的概率从第二个盒子里去一颗糖。直到某一天打开某个盒子忽然发现没糖了&#xff0c;求另一个盒子里剩余糖果数的期望。 分析&#xff1a; 紫书上面已经分析的很清楚了&…

八皇后问题(三)

八皇后问题(三) 思路: 用递归实现,既然是深度优先搜索,采用回溯思想,一般都可以用递归来实现。 代码: #include<stdio.h> #include<math.h>int a[512] = {0}; int n; int sum; int check_queen(int a[], int n) {for (int i = 1; i < n; i++)if (fabs(n…

C#中的串口通信SerialPort

前言大家好&#xff0c;我是阿辉。今天这篇文章带大家学习下C#中的串口通讯。在日常的开发工作中&#xff0c;如果工作内容是CS方向的同学应该很容易接触到串口通讯方面的业务需求。那么也就很容易想到C#中SerialPort类&#xff0c;它就是专门来处理串口通讯相关的。了解什么是…

日本的酒店主题能有多丰富?

1 伤害性不大&#xff0c;侮辱性极强&#xff08;素材来源网络&#xff0c;侵删&#xff09;▼2 好家伙&#xff0c;这字医生都看不懂&#xff01;&#xff08;via.你的野王&#xff0c;侵删&#xff09;▼3 当家里点了电子蜡烛&#xff08;素材来源网络&#xff0c;侵删&…

python编写请求参数带文件_转载:如何编写一个带命令行参数的Python文件

看到别人执行一个支持命令行参数的python文件&#xff0c;瞬间觉得高大上起来、牛逼起来&#xff0c;那么如何编写一个带命令行参数的python脚本呢&#xff1f;不用紧张&#xff0c;下面将简单易懂地让你学会如何让自己的python脚本&#xff0c;支持命令行参数。首先你要知道py…

6款程序员不得不爱的bootstrap模板

Bootstrap是基于jQuery框架开发的&#xff0c;它在jQuery框架的基础上进行了更为个性化和人性化的完善&#xff0c;形成一套自己独有的网站风格&#xff0c;并兼容大 部分jQuery插件。Bootstrap中包含了丰富的Web组件&#xff0c;根据这些组件&#xff0c;可以快速的搭建一个漂…

C# 使用XML序列化对象(一)

在System.Xml.Serialization命名空间中提供了XML序列化类XmlSerializer用于将对象序列化为XML。 下面看一个最简单的例子&#xff1a; public class A{public int a{get;set;}}public string XmlSerialize<T>(T obj){XmlSerializer xs new XmlSerializer(typeof(T));usi…

数据结构之深度优先搜索(用栈实现)问题

深度优先搜索 可以这样理解,向四边延伸搜索,然后遇到不能搜索的时候就回退,也就是回溯思想,然后再去其它可能地方搜索。 题目: 定义一个二维数组: int maze[5][5] = { 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0,…