1:监测程序
1.1:探查进程 ps命令
默认情况下ps命令不会提供那么多信息:
PID TTY TIME CMD 694 ttys000 0:00.08 -bash
上例中的基本输出显示了程序的进程ID(process ID,PID),它们 运行在哪个终端(TTY)以及进程已用的CPU时间.
Linux系统中使用GUN ps命令支持3种不同类型的命令行参数:
1):Unix风格的参数,前面加单破折线;
2):BSD风格的参数,前面不加破折线;
3):GUN风格的长参数,前面加双破折线;
这里不给出具体参数,和使用方法(太多,需要自己去man)
常使用命令组合: Unix风格:
ps -ef
yusuwudeMacBook-Pro:~ yusuwu$ ps -ef UID PID PPID C STIME TTY TIME CMD 0 1 0 0 6:14上午 ?? 0:08.78 /sbin/launchd 0 42 1 0 6:14上午 ?? 0:00.25 /usr/sbin/syslogd 0 43 1 0 6:14上午 ?? 0:00.59 /usr/libexec/UserEventAgent (System) 0 46 1 0 6:14上午 ?? 0:00.20 /System/Library/PrivateFrameworks/Uninstall.framework/Resources/uninstalld 0 47 1 0 6:14上午 ?? 0:01.53 /usr/libexec/kextd
UID:启动这些进程的用户.
PID:进程的进程ID.
PPID:父进程的进程号(如果该进程是由另一个进程启动的).
C:进程生命周期中的CPU利用率.
STIME:进程启动时的系统时间.
TTY:进程启动时的终端设备
TIME:运行进程需要的累积CPU时间
CMD:启动的程序名称.
----------------------
ps -l
yusuwudeMacBook-Pro:~ yusuwu$ ps -l UID PID PPID F CPU PRI NI SZ RSS WCHAN S ADDR TTY TIME CMD 501 694 693 4006 0 31 0 4296528 1636 - S 0 ttys000 0:00.09 -bash
F:内核分配给进程的系统标记
S:进程的状态(O代表正在运行;S代表在休眠;R代表可运行,正等待运行;Z代表僵化,进程已结束但父进程已不存在;T代表停止)
PRI:进程优先级(越大的数字代表越低的优先级)
NI:谦让度值用来参与决定优先级
ADDR:进程的内存地址
SZ:加入进程被换出,所需交换空间的大致大小.
WCHAN:进程休眠的内核函数的地址.
-------------------------------
BSD风格: ps l
yusuwudeMacBook-Pro:~ yusuwu$ ps l UID PID PPID CPU PRI NI VSZ RSS WCHAN STAT TT TIME COMMAND 501 694 693 0 31 0 4296528 1636 - S s000 0:00.09 -bash
其中大部分和使用Unix风格参数时的输出一样只有小部分不同.
VSZ:进程在内存中的大小,以千字节(KB)为单位.
RSS:进程在未换出时占用的物理内存
STAT:代表当前进程状态的双字节状态码(注:笔者使用的是Mas OS系统,输出的并不是双字符状态码)
在这里对双字符状态码解释一番:如:Ss ,R+等
第一个字符采用了和Unix风格相同的值,表明进程是在休眠,运行还是等待.第二个字符进一步说明进程的状态.
[1]: < 该进程运行在高优先级上
[2]: N 该进程运行在低优先级上
[3]: L 该进程有页面锁定在内存中
[4]: S 该进程是控制进程
[5]: l 该进程是多线程的
[6]: + 该进程运行在前台
-------------------------------
GUN长参数:笔者系统不支持,暂不记;
1.2实时监测进程 top
ps命令虽然在收集运行在系统上的进程信息时非常有用,但是它只能显示某个特定时间点的信息.如果想观察那些频繁换进换出的内存的进程趋势,则需呀用到top命令,top命令和ps命令相似,能够显示进程信息,但它是实时的.
Processes: 328 total, 2 running, 326 sleeping, 1171 threads 08:40:34 Load Avg: 1.54, 1.66, 1.83 CPU usage: 5.9% user, 4.12% sys, 90.77% idle SharedLibs: 219M resident, 64M data, 24M linkedit. MemRegions: 46700 total, 2969M resident, 169M private, 1351M shared. PhysMem: 8119M used (1782M wired), 72M unused. VM: 2524G vsize, 1370M framework vsize, 0(0) swapins, 0(0) swapouts. Networks: packets: 254513/349M in, 177899/15M out. Disks: 174486/3215M read, 86778/1109M written. PID COMMAND %CPU TIME #TH #WQ #PORT MEM PURG CMPRS PGRP PPID STATE BOOSTS %CPU_ME %CPU_OTHRS UID FAULTS COW 1360 top 2.4 00:00.44 1/1 0 25 3532K 0B 0B 1360 694 running *0[1] 0.00000 0.00000 0 3890+ 104 1350 mdworker_sha 0.0 00:00.06 3 1 56 3240K 0B 0B 1350 1 sleeping *0[1] 0.00000 0.00000 501 3816 208 1203 mdworker_sha 0.0 00:00.28 4 1 58 6416K 0B 0B 1203 1 sleeping *0[1] 0.00000 0.00000 501 21698 188 1202 mdworker_sha 0.0 00:00.39 4 1 56 5980K 0B 0B 1202 1 sleeping *0[1] 0.00000 0.00000 501 26489 189
默认情况下,top命令在启动时会按照%CPU值对进程排序,可以在top运行时使用多种交互命令重新排序.每个交互命令都是单字符,在top命令运行时键入可改变top的行为,键入f允许你选择对输出进行排序的字段,键入d允许你修改轮询间隔,键入q可以退出top.用户在top命令输出上有很大的控制权,用这个工具就能经常找出占用系统大部分资源的罪魁祸首.当然了,一旦找到,接下来就是结束这些进程.
1.3结束进程 kill killall
在linux中,进程之间通过信号来通信.进程的信号就是预定义好的一个消息,进程能识别并决定忽略还是做出反应,进程如何处理信号是有开发人员通过编程来决定的.
Linux进程信号
信号值 | 信号名 | 描述 |
1 | HUP | 刮起 |
2 | INT | 中断 |
3 | QUIT | 结束运行 |
9 | KILL | 无条件终止 |
11 | SEGV | 段错误 |
15 | TERM | 尽可能终止 |
17 | STOP | 无条件停止运行,但不终止 |
18 | TSTP | 停止或暂停,但继续在后台运行 |
19 | CONT | 在STOP或TSTP之后恢复执行 |
在linux上有两个命令可以向运行中的进程发出进程信号
1:kill命令
kill命令可通过进程ID(PID)给进程发信号,默认情况下,kill命令会向命令行中列出的全部PID发送一个TERM信号,遗憾的是,你只能用进程的PID而不能用命令名,所以kill命令有时并不好用.
要发送进程信号,你必须是进程的属主或root用户.
yusuwudeMacBook-Pro:~ yusuwu$ kill 694
TERM信号告诉进程尽可能终止,不过,如果有不服管教的进程,它会忽略这个请求.如果要强行终止,-s参数支持指定其他信号(用信号名或信号值)
yusuwudeMacBook-Pro:~ yusuwu$ kill -s HUP 694
yusuwudeMacBook-Pro:~ yusuwu$ kill -s 1 694
要检查kill命令是否生效,可再运行ps -ef 或top命令来查看进程是否已经停止.
2:killall命令
killall命令非常强大,它支持通过进程名而不是PID来结束进程.killall命令也支持通配符,这在系统因负载过大而变慢时很有用.
yusuwudeMacBook-Pro:~ yusuwu$ killall http*
上例中的命令结束了所有以http开头的进程.
注:以root身份登录系统时,使用killall命令要特别小心,因为很容易就会误用通配符而结束了重要的系统进程.这可能会破坏文件系统.
2:监测磁盘空间
Linux文件系统将所有的磁盘都并入一个虚拟目录下.在使用新的存储媒体之前,需要把它们放到虚拟目录下,这项工作称为挂载(mounting).
在今天大部分的Linux发行版都可能自动挂载特定类型的可移动存储媒体,可移动存储媒体是指可从PC上轻易移除的媒体,比如CD-ROM,软盘和U盘.
如果用的发行版不支持自动挂载和卸载可移动存储媒体,就必须手动完成.
[1]:挂载存储媒体:mount
Linux系统上移除一个可移动设备时,不能直接从系统上移除,而应该先卸载.
[2]:卸载存储媒体:umount
如果在卸载设备时,系统提示设备繁忙,无法卸载设备,通常是有进程还在访问该设备或使用该设备上的文件,这时可用lsof命令获得使用它的进程信息,然后在
应用中停止使用该设备或停止该进程.
具体怎么用请自己去找男人(man)
查看设备的磁盘使用空间
df命令
通过df命令很容易发现哪个磁盘的存储空间快没了
另一个有用的命令是du命令,du命令可以显示某个特定目录(默认是当前目录)下的磁盘使用情况.这一方法可以用来快速判断系统上的某个目录下是不是有超大文件.
3:处理数据文件
[1]:排序sort命令
[2]:搜索数据grep命令,其衍生命令有egrep,fgrep
[3]:压缩数据
gzip是Linux上最流行的压缩工具.
gzip软件包是GUN项目的产物,意在编写一个能够替代原先Unix中的compress工具的免费版本.这个软件包含有下面的工具.
gzip:用来压缩文件.
gzcat:用来查看压缩过的文本文件的内容.
gunzip:用来解压文件
[4]:归档数据
目前,Unix和Linux上使用最广泛的归档工具是tar命令.
Linux中用tar命令对文件夹进行打包压缩
一、打包的概念
打包:指将多个文件(或目录)合并成一个文件,方便在不同节点之间传递或在服务器集群上部署。
压缩或打包文件常见扩展名 *.tar, *.tar.gz, *.gz, *.bz2, *.Z;
Linux系统一般文件的扩展名用途不大,但是压缩或打包文件的扩展名时必须的,因为linux支持的压缩命令较多,不同的压缩技术使用的压缩算法区别较大,根据扩展名能够使用对应的解压算法。
二、tar命令
1、命令作用
将文件夹打包,也能将包解开成文件夹。
2、选项参数
-c:(create)建立打包文件
-t :查看打包文件的内容含有哪些文件
-x :解打包或解压缩的功能,可以搭配-C(大写)在特定目录解开
-j :通过bzip2的支持进行压缩/解压缩,此时文件最好为*.tar.bz2
-z :通过gzip的支持进行压缩/解压缩,此时文件最好为*.tar.gz
-v :在压缩/解压缩的过程中,将正在处理的文件名显示出来
-f filename:-f 后面跟处理后文件的全名称(路径+文件名+后缀名)
-C 目录:这个选项用在解压缩,若要在特定目录解压缩,可以使用这个选项
-p:保留备份数据的原本权限与属性,常用于备份(-c)重要的配置文件
--exclude=FILE:在压缩的过程中,不要将那些文件打包
注意-c, -t, -x 不可同时出现在一串指令列中。
3、案例
案例1:在/tmp文件夹下创建demo文件夹,将/etc目录拷贝到/tmp/demo目录里,然后打包压缩成gz格式,要求显示压缩详情。
1)在/tmp文件夹下创建demo文件夹,将/etc目录拷贝到/tmp/demo目录里。
注意:拷贝非空目录要加 -r
2)将etc文件夹打包压缩成gz格式,并显示压缩详情。
tar -czvf 打包压缩后文件 被打包压缩的文件夹
[root@ied01 demo]# tar -czvf myetc.tar.gz etc
如果打包压缩成.bz2格式,那么tar命令的参数:-cjvf。
案例2:先删除etc目录,解压缩myetc.tar.gz到当前目录。
1)删除etc目录
[root@ied01 demo]# rm -rf etc
2)解压缩myetc.tar.gz到当前目录
[root@ied01 demo]# tar -xzvf myetc.tar.gz
案例3:将myetc.tar.gz解压缩到指定目录:/home。
[root@ied01 demo]# tar -xzvf myetc.tar.gz -C /home
案例4:仅仅解压缩myetc.tar.gz里的某个目录,例如etc/udev。
1)先删除etc目录
[root@ied01 demo]# rm -rf etc
2)解压缩myetc.tar.gz里的etc/udev目录
[root@ied01 demo]# tar -xzvf myetc.tar.gz etc/udev