1.4.2使用ps报告
当需要哪些进程或系统管理进程正在运行时,使用ps -e选择项,如果还想得到过程的更详细信息,用ps -el选择项。各选择项的详细说明参考ps(1)命令手册。
下面是如何发现潜在问题的指南:
*查看有没有由同一用户所有的相同作业,若有,这可能是由于某用户运行了启动一组后台作业的shell程序,但没有等待作业终止,找用户谈谈,看是否是这种情况,如果必要,用kill命令杀死其中一些进程,有关杀死一个进程的详细介绍参见后面几节。
*查看TIME域,看哪些进程占用了大量的CPU时间,这样的进程可能导致死循环。
*查看C域,找出占用大量CPU时间且不重要的进程,如果认为此进程确实不值占用如此多的CPU时间,可以用priocntl命令降低它的优先级,有关priocntl命令的详细信息,参考prioentl(1)手册。
*查看SZ域,找出占用太大内存的进程。如果某个进程占用了过于大的内存,将它杀死,如果系统中有许多进程都需要大量内存,则可能需要扩充内存。
*查找占用CPU时间越来越多的失控进程,可以用带-f可选项的ps命令查看其超始时间(STIME),也可直接看其TIME域所指的CPU累计时间。
1.4.3杀死进程
有时用户需要彻底地消除一个进程,这时用kill命令,kill命令的格式为kill-,此处是一个数或一个名称。
注意:仅当进程不能正常退出时用kill命令。
有时用kill命令后进程仍未死掉,最常见的三种情况:
;进程退出前正在等待一个设备(如磁带机)完成某种操作。
;进程正在等待由于nfs出现问题而无效的资源,在这种情况应该用kill-QUIT命令来杀死一个进程。
;进程处于僵尸态,正如ps报告的消息所显示,僵尸进程已经释放了它所占资源,但还没有接收到父进程的回应,一般接收到回应后删除对应的进程表项,在下次启动系统时,僵尸进程被消除,僵尸(Zombies)进程不影响系统性能,所以用户不必删除它们。
要杀死一个进程:
1、 变成超级用户,要杀死一个非你拥有的进程,你必须成为超级用户。
2、 键入ps -e,将显示出一组进程,使用第一栏的PID(进程ID)号作为下一步的输入,如果你知道是哪个进程出了问题,则可以键入:
ps -e | grep 来找到其进程ID
3、 键入kill-15 ,若仅键入kill,无参数,则缺省的信号是15。
4、 键入ps -e,检查进程是否已经终止,如果进程还存在,则到第5步。
5、 键入kill-9 ,这个进程应该被终止。 键入man -s5 signal,查看kill所使用的信号描述。
例如:如果gtxa系统上的Open Windows 死了,你必须从另一个系统远程注册来杀死此进程。
elm% rlogin gtxa
Password:
gtxa% ps-e │ grep openwin
PID TTY TIME COMD
2212 pts/0 0:00 openwin
2213 pts/1 0:00 grep openwin
gtxa # kill 2212
gtxa # exit
gtxa% logout
elm%
1.5基本管理工具
Solaris系统软件提供以下两种管理工具:
*一组通用的操作系统命令
*具有图形用户接口的管理工具(Administration Tool)。
1.5.1经常使用的命令
下面几节简单地介绍基本的Solaris命令,你很可能会使用它们作为系统管理例程的一部分,更详细的介绍参见第二章中的“Basic OS Commands”及附录A列出的SunOS 4.x命令与SunOS 5.x命令的对照表。
1.5.1.1在文件系统中移动
Solaris系统软件是有一个层次结构的文件系统,当管理系统时,你需要了解目前处于文件系统的哪个位置、如何转到不同的目录。
1.5.1.2查看在文件系统中所处的位置
要知道目前处于文件系统的哪一层,键入pwd。pwd(打印工作目录)命令显示当前目录:
gtxa&pwd
/etc
gtxa%
1.5.1.3改变目录
要改变目录,键入cd 。cd(改变目录)命令使你进入所键入的目录中:
gtxa% cd /usr
gtxa%% pwd
/usr
gtxa%
如果仅键入cd而没键入路径名,你就返回注册目录下。
1.5.1.4查看文件的有关信息
用ls命令可以显示目录内容以及文件的许可权、符号链、所有者、组、文件长度(字节数)、修改日期及时间和文件名,许多用户存取文件出错的原因,追根底在于拥有不正确的许可权或所有权,有关此类问题的详细说明见第10章“识别文件存取问题”。
1.5.1.5显示文件信息
要显示某个文件的有关信息,键入ls -1 ,则显示许可权、符号链、所有者、组、文件长度(字节数)、修改日期及时间和文件名。
要看目录中的全部文件,键入ls -1a,有关ls的选择项清单可参见命令手册。
gtxa% ls -1 /etc/passed
-r--r--r--lrootsys659 Feb 24 17:28/etc/passed
gtxa%
1.5.1.6查找一个文件
要从根目录开始搜索寻找到一个文件, 就键入find $HOME -name -print. $HOME变量表示查找从根目录开始。 -name选项表示要查找指定的文件名,-print 选项要求显示出查找的结果。如果没找到中指定的文件则系统回到提示符状态。
下面例子是查找文件core:
gtxa% find $HOME -name core -print
/home/ignatz/core
gtxa%
表1.4 find命令的可选项
可选项 说明
-fstype 查找指定类型的文件系统,通常用ufs或nfs中的文件
-prune 限制搜索到指定的目录
-nouser 查找不属于/etc/passwd中用户的文件
-nogroup 查找不属于/etc/group中组的文件
-atime 查找在最后天被存取过的文件
-mtime 查找在最后天被修改过的文件
-ctime 查找在最后天被改变过的文件, 这种改变包括改变文件的属性。如链接数、所有者或组
-Xdev 限制只对一个文件系统搜索
有关find命令可选项的完整说明见find(1)。
1.5.1.7查看一个文件的类型
某些情况下需要确定一个文件的类型,如要查看一个文件的类型,则键入file 。输出结果是指定文件的文件类型。
例如:如果一个用户试图执行一个无执行许可权的ASCII 文件或空文件,查看文件的类型可以得知此文件是ASCII 文件或空文件而不能执行。
以下是空文件的例子:
gtxa% file junk
junk: empty file
gtxa%
以下是ASCII文件的例子:
gtxa% file junk
junk: ascii text
gtxa%
以下例子中,文件是具有可执行许可权的文本文件,所以file命令报告该文件可执行,且是文本文件。
gtxa%chmod 777 junk
gtxa% file junk
junk: commands text
gtxa%
你也可以用ls -1命令来查看某文件是否有执行许可权。
可以用file *命令查看一个目录中全部文件的类型。文件按字母顺序列出,后面跟文件类型:
gtxa% file *
coterie: directory
course: ascil text
dead. letter ascii text
ksyms English text
people: directory
personal: directory
showrev: ascii text
status: directory
text: directory
toodo: ascii text
gtxa%
1.5.1.8查看文件中的信息
用grep和egrep命令可查找文件或命令输出的某些特定信息。
1.5.1.9查找文件中的字符串
键入grep 可查找文件中的指定字符串,且显示文件可包含该字符串的行。
例如:查找passwd文件中包含csh的行:
gtxa% grep csh /etc/passwd
ignatz: 6693: 10:Ignatz 64607:/home/ignatz: /bin/csh
fred: 14072:10:Fred Lux:/home//home/fred:/vin/csh
gtxa%
同时查找多个文件的方法是:在命令中输入多个文件名,它们之间以空格分开;或者用无字符代文件名(或与文件名一起使用)。
为显示出不包含某字符串的行,可以键入grep -v 。
查找具有某种模式的输入行,可以将grep以管道的方式与许多管理命令结合起来使用。
例如:要查找某一用户当前的全部进程,可以将ps命令和grep结合起来使用,并查找该用户名,键入ps -e│grep 。即显示该用户名的清单。可用下面的命令查找Open Windows的全部进程:
gtxa%ps -e │grep openwin
PID TTY TIME COMD
2212 pts/0 0:00 openwin
gtxa%
1.5.1.10查看文件
毫无疑问,人们要花很时间查看文件的内容,需要查看整个文件时可以用more命令,当只需看文件尾的内容时(如日志(log)文件),可用tail命令来显示文件的最后10行,当重要信息在文件头时,可用head命令显示文件的前10行。
1.5.1.11浏览文件
可以键入more 来浏览文件,文件一次只显示一屏,按空格键显示下一屏。当你用more浏览文件时,若想查找文件中的某个字符串,可以键入/。屏幕滚到你要查找的字符串的位置, 并在窗口顶部显示要找的字符串的“... skippin”信息。如果未找到,则屏幕不滚动并显示出“Pattern not found”。
例如:要查找/etc/mail/aliasses文件中的Local aliases串, 可键入/Local aliases.
/Local aliases
... skipping
# # # # # # # # # # # #
# Local aliases below #
# # # # # # # # # # # #
注意:在more命令中一定要用正确的大小写字母。上例中,如果你键入了/local aliases,则会告诉你没有找到。
为了查找下一个匹配的字符串,键入n。键入q退出more命令,显示shell 提示符。
为显示shell intr 字符,可键入stty -a,就显示stty的设备清单,下列中:^h(退格键)是删除字符:
gtxa%
speed 9600 bau;
rows=35; columns=80; ypixel =9; xpixels=0;
eucw 1:0:0:0, scrw 1:0:0:0
intr=^c;quit=^│; erase=^?;kill=^u
eof=^d; eol+^; eo12=;swtch=;
start=^d; stop =^s;susp=^z;dsusp=^y;
rprnt=^r; flush =^o; werase=^w; lnext =^V;
parenb-parodd cs-cstopb hupcl cread-clocal -loolk -
crtscts-parext
-ingbrk btkint ignpar-parmrk-inpck istrip -inncr -
igncr icrnl-iucle
ixon-ixany-ixoff imaxbel
isig icanon-xcase echo echoe echok-echonl-noflsh
-tostop echoctl -echoprt echoke -defecho -flusho -
pendin inxten
opost-olcuc onler -onocr -ofill-ofdel
1.5.1.12查看文件尾
若要查看文件尾,键入tail , 显示出文件的最后10行(缺省情况),下例显示了/etc/lp/system文件尾:
gtxa% /usr/bin/tail /etc/lp/system
#
# Kepler:x:-: s5: -:n:10:-:-:SVR4.0 OS
# fubar:x:-bsd:10:n-:-:BSD OS
# Galialeo:x:-:s5:-30:10-:-:
# # # # #
billboard:x-:bsd:-:n:10:-:-:
homeboyl:x-:s5:-:n:10-:-:
regal:x:-:s5:-:n:10-:-:
mrplod:x:-:s5:-:n:10:-:-:
gtxa%
缺省时,head和tail命令显示10行,可靠用-n任项来控制显示行数,用你要显示的行数代替n。例如:要显示最后20行, 可键入tail -20 。
注意:tail命令最多能显示4096字节(大约400行)。
1.5.1.13查看文件头
若要查看文件头,可键入head这时显示出头10行
下例中显示/etc/password文件:
gtxa% /usr/bin/head /etc/pased
rood:x:0:1:0000-Admin(0000):/:sbin/sh
daemon:x:1:1:0000-Admin(0000):/:
bin:x:2:2:0000-Admin(0000):/var/adm:
sys:x:3:3:0000-Admin(0000):/:
adm:x:4:4:0000-Admin(0000):/var/adm:
lp:x:71:8:0000-lp(0000):/usr/spool/lp:
smtp:x:0:0:mail daemon user:/:
uucp:x:5:5:0000-uucp(0000):/usr/lib/uucp:
nuucp:x:9:9:0000-
uucp(0000):/var/spool/uucppublic:/usr/lib/uucp/uucico
listen:x:37:4:Network Admin:/usr/net/nls:
gtxa%
1.5.1.14改变文件的所有权和许可权
用户的许多问题可能是由文件的所有权和许可权问题产生的,用ls命令可查看文件的所有权和许可权,如果要改变它们,可用:chown、chmod和chgrp命令。
*改变文件所有权
你必须拥有一个文件或目录(或者你是超级用户)你才能成为属主
1>键入ls -1 。文件的属主显示在第三列中
2>进入超级用户
3>键入chown . 所有权按赋予指定的新属主文件。
gtxa% ls -1 quest
-rw-r--r--1fred staff 6023 Aug5 12:06 quest
gtxa% su
Password:
# chown ignarz quest
# ls-1 quest
-rw-r--r--lignatzataff6023 Aug5 12:06 quest
#
更详细的介绍请参见第10章。
* 改变文件的许可权
表1.5列出的设置文件许可权的8进制值。可以用三个这样的数来分别设置属主、组和其它用户的许可权。例如:644 说明属主有读/写权限,同组用户和其它用户有只读权限。
表1.5 文件权限的八进制值
值 说明
0 无权限
1 只可执行
2 只可写
3 可写、可执行
4 只读
5 可读、可执行
6 可读、可写
7 可读、写、执行
1>键入ls -1 。列表显示出文件当前的权限。
2>键入chmod 。改变文件的权限变为你指定的值。
注意:可以用元字符(如* ?)替换文件名,或与它们一起使用来更改多个文件或一个目录中所有文件的权限。
下例中,将一个文件权从666改为644。
gtxa% ls - 1 quest
-rw-rw-rw-lignatzstaff 6023 Aug5 12:06 quest
gtxa% chmod 644 quest
gtxa%ls -1 quest
-rw-r--r--lignatzstaff6023 Aug5 12:06 quest
gtxa%
1.5.1.15改变文件组
若要改变文件组,键入chgrp 。改变指定文件的组ID
$ls -lg junk
-rw-r--r--l other 0 Oct 31 14:49 junk
$chgrp 10 junk
$ls -lg junk
-rw-r--r--l ataff 0 Oct 31 14:49 junk
$
组ID号在Group数据库或本地/etc/group文件中定义, 关于组的详细信息请参见第7章。
1.5.1.16设置或显示系统环境
shell使用shell初始化文件中给出的一组说明来维护环境,用户也可以直接发命令给shell来修改shell从环境变量中得到有关环境的信息。Solaris系统软件提供7个缺省的环境变量。
*PSI:定义shell提示符。Bourne和Korn shell的缺省提示符是$。C shell的缺省提示符是%,任何shell中root的缺省提示符皆是#。用户可以在.profile,.login 或.cshrc 文件中下义不同的shell提示符。
*HOME:定义用户主目录的绝对路径。作为注册进程的一部分,自动定义HOME的缺省值,并且设置为/etc/passwd 文件中说明的注册目录。当键入cd命令且无参数时,shell转到HOME 变量所确定的目录之下。
*LOGNAME:定义用户的注册名。作为注册进程的一部分,LOGNAME的缺省值被自动定义且设置为/etc/passwd文件中说明的注册名。
*PATH:列出一组目录。当用户敲入命令后,shell 按顺序从这些目录中查找要执行的程序。如果一个命令所在的目录不在该查找路径中,则用户必须键入该命令的全部路径。做为注册进程的一部分,PATH的缺省值是按.profile(Bourne和Korn shell)或.cshrc(C shell)文件中的说明设置。查找路径的顺序是非常重要的。当同名的命令在不同的目录存在时,执行的是第一个找到的命令。例如:假设PATH(以Bourne 和Korn shell方式)定义为PATH =/bin:/usr/bin/:usr/sbin:$HOME/bin,在usr/bin和/home/jean/bin目录中均有名为sample的程序,当用户不键入路径,而只是键入sample命令时,则执行/usr/bin目录中的sample程序。
其它环境变量包括:
*LPDEST:设置用户的缺省打印机
*OPENWINHOME:设置Open Wimdows可执行码的路径
*DESKSET:设置DESKSET的可执码的路径
*LANG:设置本地语言,可能值是:english、japanese、German、French、Swedish和Italian等
*HZ:设置Borne和Korn shell的历史
*TZ:设置时区
*SHELL:设置make,vi或其它工具所使用的缺省shell
*MAIL:告诉shell到哪去查找新的邮件
*MANSECTS:设置手册的有效章节
用户和系统管理员可另外定义自己使用的环境变量,当用户从shell命令中定义环境变量时,只要用户不退出shell,则定义的环境变量就一直起作用。退shell,则不再起作用。可将“永久”环境变量存在.profile、.login或.cshrc文件中,定义环境变量的语法依不同的shell而不同。
1.5.1.17定义Bourne和Korn shell环境变量
若要定义Bourne和Korn shell环境变量,键入=;export .
$HZ=100;export HZ
$
1.5.1.18定义C shell环境变量
若定义C shell 环境变量,键入setenv .
%setenv DISLAY rogue:0
%
1.5.1.19显示环境变量的设置
若要显示出当前的环境变量设置,键入env。
$env
HOME=/home/irving
HZ=100
LOGNAME=irving
MAIL=/var/mail/irving
MANSECTS=\1:1m:1c:1f:1s:1b;2\3:3c