434
时间:2007-06-14 来源:studentol
第十二课 Linux进程查看 |
2000年5月30日 转载自 |
本节中要介绍的不只是进程查看方面的内容,由于Linux是个多用户系统,有时候也要了解其他用户现在在干什么,所以在本节中还将接触多用户方面的内容。同时Linux是一个多进程系统,经常需要对这些进程进行一些调配和管理;而要进行管理,首先就要知道现在的进程情况:究竟有哪些进程?进程情况如何?等等。所以需要进程查看方面的工作。 who命令 该命令主要用于查看当前在线上的用户情况。这个命令非常有用。如果用户想和其他用户建立即时通讯,比如使用talk命令,那么首先要确定的就是该用户确实在线上,不然talk进程就无法建立起来。又如,系统管理员希望监视每个登录的用户此时此刻的所作所为,也要使用who命令。 who命令的常用语法格式如下: who [imqsuwHT] [--count] [--idle] [--heading] [--help] [--message] [--mesg] [--version] [--writable] [file] [am i] 所有的选项都是可选的,也就是说可以单独使用who命令。 不使用任何选项时,who命令将显示以下三项内容: login name:登录用户名; terminal line:使用终端设备; login time:登录到系统的时间。 如果给出的是两个非选项参数,那么who命令将只显示运行who程序的用户名、登录终端和登录时间。通常这两个参数是“am i”,即该命令格式为:“who am i”。 下面对who命令的常用参数进行说明。 -m 和“who am i”的作用一样,显示运行该程序的用户名。 -q,--count 只显示用户的登录帐号和登录用户的数量,该选项优先级高于其他任何选项。 -s 忽略。主要是用于和其他版本的who命令兼容。 -i,-u,--idle 在登录时间后面显示该用户最后一次对系统进行操作至今的时间,也就是常说的“发呆”时间。 -H,--heading 显示一行列标题。常用的标题如表4-2所示。 表4-2who命令输出常用标题 标 题 说 明 USER 用户登录帐号 LINE 用户登录使用终端 LOGIN-TIME 用户登录时间 IDLE 用户空闲时间,即未进行操作的时间 PID 用户登录shell的进程ID FROM 用户网络地址 -w,-T--mesg,--message,--writable 和-s选项一样,在登录帐号后面显示一个字符来表示用户的信息状态: +:允许写信息; -:不允许写信息; ?:不能找到终端设备。 --help 在标准输出上显示帮助信息。 --version 在标准输出上显示版本信息。 下面介绍who命令的一些基本用法。 如果需要查看在系统上究竟有哪些用户,可以直接使用who命令。 [例17] 查看登录到系统的用户情况 $ who root tty1 Mar 17 13:49 foxy tty2 Mar 17 13:49 root tty3 Mar 17 13:49 bbs ttyp0 Mar 17 13:49 (river.net) 可以看到,现在系统一共有四个用户。第一列是登录用户的帐号;第二列是登录所使用的终端;第三列是登录时间;第四列是用户从什么地方登录的网络地址,这里是域名。 一般来说,这样就可以了解登录用户的大致情况了。但有时上面的显示不是那么直观,因为没有标题说明,不容易看懂,这时就需要使用-H选项了。 [例18] 查看登录用户的详细情况,键入: $ who -uH 显示如下: USER LINE LOGIN-TIME IDLE FROM root tty1 Mar 17 13:49 . foxy tty2 Mar 17 13:49 00:01 root tty3 Mar 17 13:49 00:01 bbs ttyp0 Mar 17 13:49 00:01 (river.net) 这样一目了然。其中-u选项指定显示用户空闲时间,所以可以看到多了一项IDLE。第一个root用户的IDLE项是一个“.”,这就说明该用户在前1秒仍然是活动的,而其他用户后面都有一个时间,称为空闲时间。 最后来看看使用“who am i”格式命令的结果: 233.river.net!root tty1 Mar 17 13:49 可见只显示出了运行该who命令的用户情况,当然这时候不存在空闲时间。 who命令应用起来非常简单,可以比较准确地掌握用户的情况,所以使用非常广泛。 w命令 该命令也用于显示登录到系统的用户情况,但是与who不同的是,w命令功能更加强大,它不但可以显示有谁登录到系统,还可以显示出这些用户当前正在进行的工作,并且统计数据相对who命令来说更加详细和科学,可以认为w命令就是who命令的一个增强版。 w命令的显示项目按以下顺序排列:当前时间,系统启动到现在的时间,登录用户的数目,系统在最近1秒、5秒和15秒的平均负载。然后是每个用户的各项数据,项目显示顺序如下:登录帐号、终端名称、远程主机名、登录时间、空闲时间、JCPU、PCPU、当前正在运行进程的命令行。 其中JCPU时间指的是和该终端(tty)连接的所有进程占用的时间。这个时间里并不包括过去的后台作业时间,但却包括当前正在运行的后台作业所占用的时间。而PCPU时间则是指当前进程(即在WHAT项中显示的进程)所占用的时间。下面介绍该命令的具体用法和参数。 语法格式如下: w -[husfV] [user] 下面对参数进行说明: -h 不显示标题。 -u 当列出当前进程和CPU时间时忽略用户名。这主要是用于执行su命令后的情况。 -s 使用短模式。不显示登录时间、JCPU和PCPU时间。 -f 切换显示FROM项,也就是远程主机名项。默认值是不显示远程主机名,当然系统管理员可以对源文件作一些修改使得显示该项成为默认值。 -V 显示版本信息。 User 只显示指定用户的相关情况。 [例19] 显示当前登录到系统的用户的详细情况 $ w 2:50pm up 2 min, 4 users, load average:0.22,0.16,0.06 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT root tty1 2:49pm 0:00s 0.56s 0.10s w foxy tty2 2:49pm 1:09 0.42s 0.42s bash root tty3 2:49pm 46.00s 0.67s 0.25s telnet bbs3 bbs ttyp0 river.net 2:49pm 45.00s 0.49s 0.49s bbs h river.net ps命令 1. ps简介 前面介绍的两个命令都是用于查看当前系统用户的情况,下面就来看看进程的情况,这也是本章的主题。要对进程进行监测和控制,首先必须要了解当前进程的情况,也就是需要查看当前进程,而ps命令就是最基本同时也是非常强大的进程查看命令。使用该命令可以确定有哪些进程正在运行和运行的状态、进程是否结束、进程有没有僵死、哪些进程占用了过多的资源等等。总之大部分信息都是可以通过执行该命令得到的。 2. ps命令及其参数 ps命令最常用的还是用于监控后台进程的工作情况,因为后台进程是不和屏幕键盘这些标准输入/输出设备进行通信的,所以如果需要检测其情况,便可以使用ps命令了。 该命令语法格式如下: ps [选项] 下面对命令选项进行说明: -e 显示所有进程。 -f 全格式。 -h 不显示标题。 -l 长格式。 -w 宽输出。 a 显示终端上的所有进程,包括其他用户的进程。 r 只显示正在运行的进程。 x 显示没有控制终端的进程。 O[+|-] k1 [,[+|-] k2 [,…]] 根据SHORT KEYS、k1、k2中快捷键指定的多级排序顺序显示进程列表。对于ps的不同格式都存在着默认的顺序指定。这些默认顺序可以被用户的指定所覆盖。其中“+”字符是可选的,“-”字符是倒转指定键的方向。 pids 只列出指定进程的情况。各进程ID之间使用逗号分隔。该进程列表必须在命令行参数的最后一个选项后面紧接着给出,中间不能插入空格。比如:ps -f1,4,5。 以下介绍长命令行选项,这些选项都使用“--”开头: --sort X[+|-] key [,[+|-] key [,…]] 从SORT KEYS段中选一个多字母键。“+”字符是可选的,因为默认的方向就是按数字升序或者词典渌承颉1热纾?ps -jax -sort=uid,-ppid,+pid。 --help 显示帮助信息。 --version 显示该命令的版本信息。 在前面的选项说明中提到了排序键,接下来对排序键作进一步说明。需要注意的是排序中使用的值是ps使用的内部值,并非仅用于某些输出格式的伪值。排序键列表见表4-3。 表4-3 排序键列表 短格式 长格式 说 明 c cmd 可执行的简单名称 C cmdline 完整命令行 f flags 长模式标志 g pgrp 进程的组ID G tpgid 控制tty进程组ID j cutime 累计用户时间 J cstime 累计系统时间 k utime 用户时间 K stime 系统时间 m min_flt 次要页错误的数量 M maj_flt 主要页错误的数量 n cmin_flt 累计次要页错误 N cmaj_flt 累计主要页错误 o session 对话ID p pid 进程ID P ppid 父进程ID r rss 驻留大小 R resident 驻留页 s size 内存大小(千字节) S share 共享页的数量 t tty tty次要设备号 T start_time 进程启动的时间 U uid UID u user 用户名 v vsize 总的虚拟内存数量(字节) y priority 内核调度优先级 3. 常用ps命令参数 前面两节介绍的参数可能让读者觉得有些可怕,实际上这是一个非常容易使用的命令,一般的用户只需掌握一些最常用的命令参数就可以了。 最常用的三个参数是u、a、x,下面将通过例子来说明其具体用法。 [例20] 以root身份登录系统,查看当前进程状况 $ ps PID TTY TIME COMMAND 5800 ttyp0 00:00:00 bash 5835 ttyp0 00:00:00 ps 可以看到,显示的项目共分为四项,依次为PID(进程ID)、TTY(终端名称)、TIME(进程执行时间)、COMMAND(该进程的命令行输入)。 可以使用u选项来查看进程所有者及其他一些详细信息,如下所示: $ ps u USER PID %CPU %MEM USZ RSS TTY STAT START TIME COMMAND test 5800 0.0 0.4 1892 1040 ttyp0 S Nov27 0:00 -bash test 5836 0.0 0.3 2528 856 ttyp0 R Nov27 0:00 ps u 在bash进程前面有条横线,意味着该进程便是用户的登录shell,所以对于一个登录用户来说带短横线的进程只有一个。还可以看到%CPU、%MEM两个选项,前者指该进程占用的CPU时间和总时间的百分比;后者指该进程占用的内存和总内存的百分比。 在这种情况下看到了所有控制终端的进程;但是对于其他那些没有控制终端的进程还是没有观察到,所以这时就需要使用x选项。使用x选项可以观察到所有的进程情况。 [例21] 下面是使用x选项的例子: $ ps x PID TTY STAT TIME COMMAND 5800 ttyp0 S 0:00 -bash 5813 ttyp1 S 0:00 -bash 5921 ttyp0 S 0:00 man ps 5922 ttyp0 S 0:00 sh -c /usr/bin/gunzip -c /var/catman/cat1/ps.1.gz | / 5923 ttyp0 S 0:00 /usr/bin/gunzip -c /var/catman/cat1/ps.1.gz 5924 ttyp0 S 0:00 /usr/bin/less -is 5941 ttyp1 R 0:00 ps x 可以发现突然一下子就多出了那么多的进程。这些多出来的进程就是没有控制终端的进程。 前面看到的所有进程都是test用户自己的。其实还有许多其他用户在使用着系统,自然也就对应着其他的很多进程。如果想对这些进程有所了解,可以使用a选项来查看当前系统所有用户的所有进程。经常使用的是aux组合选项,这可以显示最详细的进程情况。 [例22] $ ps aux USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.0 1136 64 ? S Nov25 0:02 init [3] root 2 0.0 0.0 0 0 ? SW Nov25 0:00 [kflushd] root 3 0.0 0.0 0 0 ? SW Nov25 0:03 [kupdate] root 4 0.0 0.0 0 0 ? SW Nov25 0:00 [kpiod] root 5 0.0 0.0 0 0 ? SW Nov25 0:00 [kswapd] root 163 0.0 0.1 1628 332 ? S Nov25 0:02 sshd root 173 0.0 0.0 1324 200 ? S Nov25 0:00 syslogd root 181 0.0 0.0 1420 0 ? SW Nov25 0:00 [klogd] daemon 191 0.0 0.1 1160 312 ? S Nov25 0:00 /usr/sbin/atd root 201 0.0 0.1 1348 492 ? S Nov25 0:00 crond root 212 0.0 0.0 1292 68 ? S Nov25 0:00 inetd …… 在显示的最前面是其他用户的进程情况,可以看到有root、daemon等用户以及他们所启动的进程。 在上面的例子中,介绍了ps命令最常见的一些选项和选项组合,用户可以根据自己的需要选用。 top命令 top命令和ps命令的基本作用是相同的,显示系统当前的进程和其他状况;但是top是一个动态显示过程,即可以通过用户按键来不断刷新当前状态。如果在前台执行该命令,它将独占前台,直到用户终止该程序为止。 比较准确的说,top命令提供了实时的对系统处理器的状态监视。它将显示系统中CPU最“敏感”的任务列表。该命令可以按CPU使用。内存使用和执行时间对任务进行排序;而且该命令的很多特性都可以通过交互式命令或者在个人定制文件中进行设定。在后面的介绍中将把命令参数和交互命令分开讲述。 下面是该命令的语法格式: top [-] [d delay] [q] [c] [s] [S] [i] d 指定每两次屏幕信息刷新之间的时间间隔。当然用户可以使用s交互命令来改变之。 q 该选项将使top没有任何延迟的进行刷新。如果调用程序有超级用户权限,那么top将以尽可能高的优先级运行。 S 指定累计模式。 s 使top命令在安全模式中运行。这将去除交互命令所带来的潜在危险。 i 使top不显示任何闲置或者僵死进程。 c 显示整个命令行而不只是显示命令名 top命令显示的项目很多,默认值是每5秒更新一次,当然这是可以设置的。 显示的各项目为: uptime 该项显示的是系统启动时间、已经运行的时间和三个平均负载值(最近1秒,5秒,15秒的负载值)。 processes 自最近一次刷新以来的运行进程总数。当然这些进程被分为正在运行的,休眠的,停止的等很多种类。进程和状态显示可以通过交互命令t来实现。 CPU states 显示用户模式,系统模式,优先级进程(只有优先级为负的列入考虑)和闲置等各种情况所占用CPU时间的百分比。优先级进程所消耗的时间也被列入到用户和系统的时间中,所以总的百分比将大于100%。 Mem 内存使用情况统计,其中包括总的可用内存,空闲内存,已用内存,共享内存和缓存所占内存的情况。 Swap 交换空间统计,其中包括总的交换空间,可用交换空间,已用交换空间。 PID 每个进程的ID。 PPID 每个进程的父进程ID。 UID 每个进程所有者的UID 。 USER 每个进程所有者的用户名。 PRI 每个进程的优先级别。 NI 该进程的优先级值。 SIZE 该进程的代码大小加上数据大小再加上堆栈空间大小的总数。单位是KB。 TSIZE 该进程的代码大小。对于内核进程这是一个很奇怪的值。 DSIZE 数据和堆栈的大小。 TRS 文本驻留大小。 D 被标记为“不干净”的页项目。 LIB 使用的库页的大小。对于ELF进程没有作用。 RSS 该进程占用的物理内存的总数量,单位是KB。 SHARE 该进程使用共享内存的数量。 STAT 该进程的状态。 其中S代表休眠状态; D代表不可中断的休眠状态; R代表运行状态; Z代表僵死状态; T代表停止或跟踪状态。 TIME 该进程自启动以来所占用的总CPU时间。如果进入的是累计模式,那么该时间还包括这个进程子进程所占用的时间。且标题会变成CTIME。 %CPU 该进程自最近一次刷新以来所占用的CPU时间和总时间的百分比。 %MEM 该进程占用的物理内存占总内存的百分比。 COMMAND 该进程的命令名称,如果一行显示不下,则会进行截取。内存中的进程会有一个完整的命令行。 下面介绍在top命令执行过程中可以使用的一些交互命令。从使用角度来看,熟练的掌握这些命令比掌握选项还重要一些。这些命令都是单字母的,如果在命令行选项中使用了s选项,则可能其中一些命令会被屏蔽掉。 <空格> 立即刷新显示。 Ctrl+L 擦除并且重写屏幕。 h或者? 显示帮助画面,给出一些简短的命令总结说明。 k 终止一个进程。系统将提示用户输入需要终止的进程PID,以及需要发送给该进程什么样的信号。一般的终止进程可以使用15信号;如果不能正常结束那就使用信号9强制结束该进程。默认值是信号15。在安全模式中此命令被屏蔽。 i 忽略闲置和僵死进程。这是一个开关式命令。 q 退出程序。 r 重新安排一个进程的优先级别。系统提示用户输入需要改变的进程PID以及需要设置的进程优先级值。输入一个正值将使优先级降低,反之则可以使该进程拥有更高的优先权。默认值是10。 S 切换到累计模式。 s 改变两次刷新之间的延迟时间。系统将提示用户输入新的时间,单位为s。如果有小数,就换算成m s。输入0值则系统将不断刷新,默认值是5 s。需要注意的是如果设置太小的时间,很可能会引起不断刷新,从而根本来不及看清显示的情况,而且系统负载也会大大增加。 f或者F 从当前显示中添加或者删除项目。 o或者O 改变显示项目的顺序。 l 切换显示平均负载和启动时间信息。 m 切换显示内存信息。 t 切换显示进程和CPU状态信息。 c 切换显示命令名称和完整命令行。 M 根据驻留内存大小进行排序。 P 根据CPU使用百分比大小进行排序。 T 根据时间/累计时间进行排序。 W 将当前设置写入~/.toprc文件中。这是写top配置文件的推荐方法。 从上面的介绍中可以看到,top命令是一个功能十分强大的监控系统的工具,尤其对于系统管理员而言更是如此。一般的用户可能会觉得ps命令其实就够用了,但是top命令的强劲功能确实提供了不少方便。下面来看看实际使用的情况。 [例23] 键入top命令查看系统状况 $ top 1:55pm up 7 min, 4 user, load average:0.07,0.09,0.06 29 processes:28 sleeping, 1 running, 0 zombie, 0 stopped CPU states: 4.5% user, 3.6% system, 0.0% nice, 91.9% idle Mem: 38916K av, 18564K used, 20352K free, 11660K shrd, 1220K buff Swap: 33228K av, 0K used, 33228K free, 11820K cached PID USER PRI NI SIZE RSS SHARE STAT LIB %CPU %MEM TIME COMMAND 363 root 14 0 708 708 552 R 0 8.1 1.8 0:00 top 1 root 0 0 404 404 344 S 0 0.0 1.0 0:03 init 2 root 0 0 0 0 0 SW 0 0.0 0.0 0:00 kflushd 3 root -12 -12 0 0 0 SW< 0 0.0 0.0 0:00 kswapd 4 root 0 0 0 0 0 SW 0 0.0 0.0 0:00 md_thread 5 root 0 0 0 0 0 SW 0 0.0 0.0 0:00 md_thread 312 root 1 0 636 636 488 S 0 0.0 1.6 0:00 telnet 285 root 6 0 1140 1140 804 S 0 0.0 2.9 0.00 bash 286 root 0 0 1048 1048 792 S 0 0.0 2.6 0.00 bash 25 root 0 0 364 364 312 S 0 0.0 0.9 0.00 kerneld 153 root 0 0 456 456 372 S 0 0.0 1.1 0.00 syslogd 160 root 0 0 552 552 344 S 0 0.0 1.4 0.00 klogd 169 daemon 0 0 416 416 340 S 0 0.0 1.0 0.00 atd 178 root 2 0 496 496 412 S 0 0.0 1.2 0.00 crond 187 bin 0 0 352 352 284 S 0 0.0 0.9 0.00 portmap 232 root 0 0 500 500 412 S 0 0.0 1.2 0.00 rpc.mountd 206 root 0 0 412 412 344 S 0 0.0 1.0 0.00 inetd 215 root 0 0 436 436 360 S 0 0.0 1.1 0.00 icmplog 第一行的项目依次为当前时间、系统启动时间、当前系统登录用户数目、平均负载。第二行为进程情况,依次为进程总数、休眠进程数、运行进程数、僵死进程数、终止进程数。第三行为CPU状态,依次为用户占用、系统占用、优先进程占用、闲置进程占用。第四行为内存状态,依次为平均可用内存、已用内存、空闲内存、共享内存、缓存使用内存。第五行为交换状态,依次为平均可用交换容量、已用容量、闲置容量、高速缓存容量。然后下面就是和ps相仿的各进程情况列表了。 |
第十三课 Linux进程调度 |
2000年5月30日 转载自 |
kill命令 当需要中断一个前台进程的时候,通常是使用< Ctrl+c >组合键;但是对于一个后台进程恐怕就不是一个组合键所能解决的了,这时就必须求助于kill命令。该命令可以终止后台进程。至于终止后台进程的原因很多,或许是该进程占用的CPU时间过多;或许是该进程已经挂死。总之这种情况是经常发生的。 kill命令是通过向进程发送指定的信号来结束进程的。如果没有指定发送信号,那么默认值为TERM信号。TERM信号将终止所有不能捕获该信号的进程。至于那些可以捕获该信号的进程可能就需要使用kill(9)信号了,该信号是不能被捕捉的。 kill命令的语法格式很简单,大致有以下两种方式: kill [-s 信号 | -p ] [ -a ] 进程号 ... kill -l [信号] -s 指定需要送出的信号。既可以是信号名也可以对应数字。 -p 指定kill命令只是显示进程的pid,并不真正送出结束信号。 -l 显示信号名称列表,这也可以在/usr/include/linux/signal.h文件中找到。 kill命令的使用 下面看看该命令的使用。 [例24] 在执行一条find指令时由于时间过长,决定终止该进程。 首先应该使用ps命令来查看该进程对应的PID,键入ps,显示如下: PID TTY TIME COMMAND 285 1 00:00:00 -bash 287 3 00:00:00 -bash 289 5 00:00:00 /sbin/mingetty tty5 290 6 00:00:00 /sbin/mingetty tty6 312 3 00:00:00 telnet bbs3 341 4 00:00:00 /sbin/mingetty tty4 345 1 00:00:00 find / -name foxy.jpg 348 1 00:00:00 ps 可以看到该进程对应的PID是345,现在使用kill命令来终止该进程。键入: # kill 345 再用ps命令查看,就可以看到,find进程已经被杀掉了。 [例25] 杀掉进程11721 # ps PID TTY TIME COMMAND 11668 p1 00:00:00 -tcsh 11721 p1 00:00:00 cat 11737 p1 00:00:00 ps # kill 11721 [1] Terminated cat # 有时候可能会遇到这样的情况,某个进程已经挂死或闲置,使用kill命令却杀不掉。这时候就必须发送信号9,强行关闭此进程。当然这种“野蛮”的方法很可能会导致打开的文件出现错误或者数据丢失之类的错误。所以不到万不得已不要使用强制结束的办法。如果连信号9都不响应,那恐怕就只有重新启动计算机了。 控制多个进程命令 Linux可使用户同时运行多个进程,还允许用户或系统管理员能控制正在运行的进程。 nohup命令 理论上,我们一般退出Linux系统时,会把所有的程序全部结束掉,包括那些后台程序。但有时候,例如您正在编辑一个很长的程序,但是您下班或是有事需要先退出系统,这时您又不希望系统把您编辑那么久的程序结束掉,希望退出系统时,程序还能继续执行。这时,我们就可以使用nohup命令使进程在用户退出后仍继续执行。 一般这些进程我们都是让它在后台执行,结果则会写到用户自己的目录下的nohup.out这个文件里(也可以使用输出重定向,让它输出到一个特定的文件)。 [例26] $ nohup sort sales.dat & 这条命令告诉sort命令忽略用户已退出系统,它应该一直运行,直到进程完成。利用这种方法,可以启动一个要运行几天甚至几周的进程,而且在它运行时,用户不需要去登录。 nohup命令把一条命令的所有输出和错误信息送到nohup.out文件中。若将输出重定向,则只有错误信息放在nohup.out文件中。 renice命令 renice命令允许用户修改一个正在运行进程的优先权。 利用renice命令可以在命令执行时调整其优先权。其格式如下: $ renice -number PID 其中,参数number与nice命令的number意义相同。 注: (1) 用户只能对自己所有的进程使用renice命令。 (2) root用户可以在任何进程上使用renice命令。 (3) 只有root用户才能提高进程的优先权。 思 考 题 1. 什么是进程?进程与作业有何区别? 2. 进程启动的方式有哪几种? 3. at命令与batch命令有何本质区别? 4. cron命令在何时执行?如何改变其执行状态? 5. 何谓前台作业、后台作业?如何挂起当前的前台作业?如果要恢复其运行又如何做? 6. 进程的查看命令有哪些?各有什么不同? 7. 如何中断一个后台进程? 8. 如何在用户退出Linux系统时,使一个进程仍然能继续执行? 9. 如何修改一个作业的优先权? 10. 编写和检验完成下列各项功能的命令管道行: (1)显示当前系统中的登录名的数目。 (2)显示当前系统中有多少个进程。 11. 说明下列管道行分别完成什么功能: (1)df -a | wc -l (2)who | wc - |
第十四课 Linux磁盘管理 |
2000年5月30日 转载自 |
第十四课 磁盘管理 在Liunx系统中,如何有效地对存储空间加以使用和管理,是一项非常重要的技术。本章讲述如何查看系统中存储空间的使用情况、如何进行文件的转储、以及如何进行软盘的格式化。 磁盘空间管理 系统软件和应用软件,都要以文件的形式存储在计算机的磁盘空间中。因此,应该随时监视磁盘空间的使用情况。Linux系统提供了一组有关磁盘空间管理的命令。 df命令 功能:检查文件系统的磁盘空间占用情况。可以利用该命令来获取硬盘被占用了多少空间,目前还剩下多少空间等信息。 语法:df [选项] 说明:df命令可显示所有文件系统对i节点和磁盘块的使用情况。 该命令各个选项的含义如下: -a 显示所有文件系统的磁盘使用情况,包括0块(block)的文件系统,如/proc文件系统。 -k 以k字节为单位显示。 -i 显示i节点信息,而不是磁盘块。 -t 显示各指定类型的文件系统的磁盘空间使用情况。 -x 列出不是某一指定类型文件系统的磁盘空间使用情况(与t选项相反)。 -T 显示文件系统类型。 例1:列出各文件系统的磁盘空间使用情况。 $ df Filesystem 1 K-blocks Used Available Use% Mounted on /dev/hda2 1361587 1246406 44823 97% / df命令的输出清单的第1列是代表文件系统对应的设备文件的路径名(一般是硬盘上的分区);第2列给出分区包含的数据块(1024字节)的数目;第3,4列分别表示已用的和可用的数据块数目。用户也许会感到奇怪的是,第3,4列块数之和不等于第2列中的块数。这是因为缺省的每个分区都留了少量空间供系统管理员使用。即使遇到普通用户空间已满的情况,管理员仍能登录和留有解决问题所需的工作空间。清单中Use% 列表示普通用户空间使用的百分比,即使这一数字达到100%,分区仍然留有系统管理员使用的空间。最后,Mounted on列表示文件系统的安装点。 例2:列出各文件系统的i节点使用情况。 $ df -ia Filesystem Inodes IUsed IFree Iused% Mounted on /dev/ hda2 352256 75043 277213 21% / none 0 0 0 0% /proc localhost:(pid221) 0 0 0 0% /net 例3:列出文件系统的类型。 $ df -T Filesystem Type 1K-blocks Used Available use% Mounted on /dev/hda2 ext2 1361587 1246405 44824 97% / 本例中的文件系统是ext2类型的。 du命令 du的英文原义为“disk usage”,含义为显示磁盘空间的使用情况。 功能:统计目录(或文件)所占磁盘空间的大小。 语法:du [选项] [Names…] 说明:该命令逐级进入指定目录的每一个子目录并显示该目录占用文件系统数据块(1024字节)的情况。若没有给出Names,则对当前目录进行统计。 该命令的各个选项含义如下: -s 对每个Names参数只给出占用的数据块总数。 -a 递归地显示指定目录中各文件及子孙目录中各文件占用的数据块数。若既不指定-s,也不指定-a,则只显示Names中的每一个目录及其中的各子目录所占的磁盘块数。 -b 以字节为单位列出磁盘空间使用情况(系统缺省以k字节为单位)。 -k 以1024字节为单位列出磁盘空间使用情况。 -c 最后再加上一个总计(系统缺省设置)。 -l 计算所有的文件大小,对硬链接文件,则计算多次。 -x 跳过在不同文件系统上的目录不予统计。 下面举例说明du命令的使用: 例1:查看/mnt目录占用磁盘空间的情况。 $ cd /mnt $ ls -lFR total 10 -rwxrwxrwx 2 root root ll0 Ju1 3l 00:33 aa* drwxr-xr-x 2 root root l024 Ju1 20 14:16 dev/ -rw-r--r-- 1 root root 6229 Aug 2 0l:39 s1ack drwxrwxrwx 2 root root 1024 Aug 2 02:09 var/ 1rwxrwxrwx 1 root root l0 Aug 2 0l:51 wei->/home/wei/ dev: tota1 0 lrwxrwxrwx 1 root root 8 Ju1 20 l4:l6 cdrom->/dev/hdb var: tata1 37 -r-xr-xr-x l root root 36064 Aug 2 02:09 rawrite. exe* 例2:列出各目录所占的磁盘空间,但不详细列出每个文件所占的空间。 $ du l . /dev 38 . /var 48 . 输出清单中的第一列是以块为单位计的磁盘空间容量,第二列列出目录中使用这些空间的目录名称。 注意不带选项的du命令将从当前目录开始沿着目录结构向下工作直到列出所有目录的容量为止。这可能是一个很长的清单,有时只需要一个总数。这时可在du命令中加-s选项来取得总数: $ du –s /mnt /mnt 例3:列出所有文件和目录所占的空间(使用a选项),而且以字节为单位(使用b选项)来计算大小。 $ du -ab 8 ./dev/cdrom l032 ./dev 36064 ./var/rawrite. exe 37088 ./var 6229 ./s1ack 1l0 ./aa l0 ./wei 45493 . 磁 盘 操 作 dd命令 功能:把指定的输入文件拷贝到指定的输出文件中,并且在拷贝过程中可以进行格式转换。可以用该命令实现DOS下的diskcopy命令的作用。先用dd命令把软盘上的数据写成硬盘的一个寄存文件,再把这个寄存文件写入第二张软盘上,完成diskcopy的功能。需要注意的是,应该将硬盘上的寄存文件用rm命令删除掉。系统默认使用标准输入文件和标准输出文件。 语法:dd [选项] if =输入文件(或设备名称)。 of =输出文件(或设备名称)。 ibs = bytes 一次读取bytes字节,即读入缓冲区的字节数。 skip = blocks 跳过读入缓冲区开头的ibs*blocks块。 obs = bytes 一次写入bytes字节,即写入缓冲区的字节数。 bs = bytes 同时设置读/写缓冲区的字节数(等于设置ibs和obs)。 cbs = byte 一次转换bytes字节。 count=blocks 只拷贝输入的blocks块。 conv = ASCII 把EBCDIC码转换为ASCIl码。 conv = ebcdic 把ASCIl码转换为EBCDIC码。 conv = ibm 把ASCIl码转换为alternate EBCDIC码。 conv = block 把变动位转换成固定字符。 conv = ublock 把固定位转换成变动位。 conv = ucase 把字母由小写转换为大写。 conv = lcase 把字母由大写转换为小写。 conv = notrunc 不截短输出文件。 conv = swab 交换每一对输入字节。 conv = noerror 出错时不停止处理。 conv = sync 把每个输入记录的大小都调到ibs的大小(用NUL填充)。 例1:要把一张软盘的内容拷贝到另一张软盘上,利用/tmp作为临时存储区。把源盘插入驱动器中,输入下述命令: $ dd if =/dev/fd0 of = /tmp/tmpfile 拷贝完成后,将源盘从驱动器中取出,把目标盘插入,输入命令: $ dd if = /tmp/tmpfile of =/dev/fd0 软盘拷贝完成后,应该将临时文件删除: $ rm /tmp/tmpfile 例2:把net.i这个文件写入软盘中,并设定读/写缓冲区的数目。 (注意:软盘中的内容会被完全覆盖掉) $ dd if = net.i of = /dev/fd0 bs = 16384 例3:将文件sfile拷贝到文件 dfile中。 $ dd if=sfile of=dfile fdformat 命令 软盘是用户常用的存储介质之一。软盘在使用之前必须先作格式化操作,然后可以用tar、dd、cpio等命令存储数据,也可以在软盘上建立可安装的文件系统。 功能:低级格式化软盘 语法:format [-n] device 说明:该命令的作用是对软盘进行格式化。 -n 软盘格式化后不作检验。 device 指定要进行格式化的设备,通常是下述设备之一: /dev/fd0d360 /dev/fd0h1200 /dev/fd0D360 /dev/fd0H360 /dev/fd0D720 /dev/fd0H720 /dev/fd0h360 /dev/fd0h720 /dev/fd0H1440 思 考 题 1. 显示出你的系统磁盘空间使用情况。 2. 显示出你的当前目录下所有文件所占的空间。 3. 请格式化一张软盘,并把text这个文件写入软盘中。 |