本手册的章节按照以上给出的标题顺序安排,你还必须了解何时及如何进行如下管理工作: (本手册不包含如下系统管理工作:安装系统软件、安装第三厂家软件、建立和管理网络服务、建立和管理邮件服务、扩充和删除硬件、管理安全性和记帐、监视系统和网络性能。)这章其余部分将描述如何完成系统管理员的工作,并介绍一些基本命令和管理工具。
1.1了解超级用户状态
超级用户是一个具有特权的用户,它可不受任何限制地使用全部文件和命令,超级用户有一个特定的UID(=0),这个帐号的用户名为root(其实只要是UID为0的用户就是超级用户)。许多系统管理任务都必须在超级用户下完成,如安装和拆卸文件系统、改变文件和目录的存取权和所有权、备份和恢复文件系统、创建设备文件,以及关闭系统。
我们可以用如下办法进入超级用户:
1、 在其它用户状态下,用不带任何参数的su命令,并按需要键入root的口令。
2、 在login提示下,键入root及其口令。
在入进超级用户后,shell将给出一个特殊的提示符“#”,提醒你对系统有着至高无上的存取权,做任何事情都要小心,通过查询记录文件/var/adm/sulog,可以跟踪谁正在使用超级用户帐号。
最好在必要时才进入超级用户,应该避免在超级用户下做一般的事情。如果某项任务需要你是超级用户,它会提示你应该进入超级用户。当你完成必要的工作后,应立即回到一般用户状态。
由于超级用户非保护的存取权限严重威胁系统的安全,所以root帐号总是设有一个口令,而且为了增加安全性,要经常更换口令。
1.1.1成为超级用户(su)
仅当需要使用root权限完成一定的工作时,你才进入超级用户,下面是从普通用户成为root的方法:
1、 在Shell的$或%提示符下,输入su。如果root帐号有口令的话,系统会提示你键入口令。
2、 键入超级用户口令,如果口令正确,你就具有了超级用户权限,系统显示“#”提示符。
gtxa%su
Password:
#
如果想使用root本身的环境变量,键入su -。
1.1.2退出超级用户状态
要退出超级用户状态,就简单地键入exit。
#exit
gtxa%
1.1.3以root注册
要直接注册成root,必须在login提示下完成:
1、 在login提示下,输入root,于是系统提示你输入root口令。
2、 输入root的口令,如果口令正确,系统将出现root提示符#:
login: root
Password:
#
1.2与用户通信
系统管理员工作的一个重要部分是与用户通信,使用户了解管理员所做的事情对系统功能所造成的影响,要让用户及时知道你所做的管理工作(如:重新引导系统,安装新的软件,或以某种方式改变系统环境)何时将对它们产生影响。
管理员可以口头与用户通讯,但最普遍的方式是:
;在注册时显示当前系统专用信息.
;用write命令直接将消息发送到某个用户终端上.
;用wall使用将消息发送给一个系统上的所有用户.
;用rwall命令将消息发送给网络上的所有用户.
;通过电子邮件将消息发送一个或一组用户.
1.2.1在注册时显示系统专用信息
每次用户注册进系统,屏幕上都会显示当天的系统消息,这个消息存贮在文件/etc/motd中。已经注册进系统和正在使用系统的用户看不见此信息,可使用motd命令查看此消息,这些信息包括:操作系统版本号,系统软件的变化,新安装(或删除)的第三厂家文件的名称,或系统的调度时间表。必须确保motd文件是最新的,如果motd显示的是过时的消息,用户会因此而失掉一个关键信息,消息应尽量简短,如果其长度超过一屏,用户就读不到开头部分。/etc/motd文件所在者应该是root, 而且root应是唯一对此文件具有写权限的用户。
gtxa% ls -1 /etc/motd
-rw-r--r-- root sys 49 Jan 1 1970 /etc/motd
gtxa%
注意:系统软件安装后,有几个文件(包括/etc/motd 在内)的更新时间为“Jan 1 1970”这个日期是UNIX的起始日期,当你对这些文件编辑后,这个时间会随之改变。
1.2.1.1建立日期消息
用如下步骤建立日期消息:
1、 成为超级用户
2、 用编辑工具(如vi)编辑/etc/motd文件
3、 删除不用的消息,输入新的消息
4、 保存修改后的文件,这些消息在用户下次登录进系统时显示
1.2.2将信息发送给单个用户
可以使用write命令将信息发送到用户的终端上,当使用窗口系统(如Open Windows)时,每个窗口都有一个独立的帐号,如果用户登录多次,则信息会直接显示在控制台窗口中。
1.2.2.1发送一个短消息给一个单独的用户
用以下步骤将一个一次性的短消息发送给单个用户:
1、 键入write username,username是用户的注册名。
2、 键入要发送的消息。
3、 输完消息后,键入Control-D. 则在username用户的控制台窗口中显示你键入的内容。
下面给出系统管理员发送消息的例子:
gtxa% write ignatz@elm
I'll come by at 12:00 to look at your problem.
gtxa%
下面是在用户控制台窗口显示的消息:
Message from fred@gtxa on ttypl 11:20...
I'll come by at 12:00 to look at your problem.
EOF
1.2.2.2将作为一个文件的消息发给个别用户
如果你想发送消息给一些用户,建立一个消息文件,再使用带参数的write命令来实现,其中的一个参数是消息文件名。
建立一个文件,此文件含有想要发送的消息。 键入write username < filename
在下面的例子中,管理员用cat命令建立消息文件:
gtxa% cat > message
I'll come by at 12:00 to look at your problem.
gtxa% write ignatz@elm < message
write: ignatz logged in more than once...
writing to console
gtxa%
如果用户进入了多个窗口系统,消息就显示在用户的控制台窗口中。下面是显示在控制台上的消息格式:
Message from fred@gtxa on ttypl at 11:20...
I'll come by at 12:00 to look at your problem.
象以上显示的那样,键入的消息与显示的消息是相同,用户可以用write命令响应并初始化一个双向对话,但这种对话不是真的交互式的。有两条打开的write 路径,两个方向各一条,详细介绍见write(1)说明。
1.2.3将消息发送给一个系统或网络中的所有用户
可以使用wall命令(write all)将消息同时发送给系统中的每个用户,用rwall(remote write all)命令将消息同时发送给网络中的所有用户。
要将消息发送给系统中的所有用户:
1、 键入wall
2、 键入想要发送的消息
3、 输入完消息后,键入control-D, 消息就会显示在系统中每个用户的控制台窗口中。
下面是一个实例:
gtxa% wall
System will be rebooted at 12:00
gtxa%
显示在用户控制台窗口的消息:
Broadcast message from root on console...
System will be rebooted at 12:00
EOF
注意:使用rwall命令要非常小心, 因此此命令消耗大量的系统和网络资源,要将消息发送给网络上的所有用户:
1、 键入rwall-n
2、 键入要发送的消息
3、 消息输入完后,键入Control-D, 消息就显示在网络系统各个用户的控制台窗口中。
下面是一个实例:
gtxa%rwall-n Eng
System gtxa will be rebooted at 12:00
gtxa%
显示在用户控制台窗口中的消息是:
Broadcast message from root on console...
System will be rebooted at 12:00
也可以用rwall命令将消息发送给某个系统中的所有用户, 其命令格式为:rwall hostname
1.2.4通过电子邮件发送消息
E-mail是传播某些系统管理信息的一种有效方式,但本手册不介绍如何使用电子邮件,有关邮件信息的详细说明见mail(1)、mailtool(1)和mailx(1)。
1.3启动和关闭系统
启动及关闭系统是系统管理工作的一个组成部分,这一节描述正常启动和关闭系统的过程,如果系统启动出现错误,参阅系统文档中有关如何诊断引导问题。
SunOS 5.x系统软件总处于连续运行状态,这样电子邮件和网络软件能正常地工作,但在以下几种情况下,系统却必须关闭或停止。
;切断系统电源
;安装一个新版本的操作系统
;电源老化
;系统扩充硬件
;进行文件系统维护
1.3.1选择init状态
Solaris系统软件有八个init状态: 缺省init状态/etc/inittab 中确定。Solaris系统软件的缺省init状态是运行级3。表1.1列出了7个可能的运行级别和系统在每级上的状态。
表1.1 系统初始状态
初始状态功能
0掉电状态
1.S.s系统管理员状态(单用户)
2多用户状态(不输出资源,没有启动NFS)
3多用户状态(输出资源,启动NFS进程)
4替换多用户状态(目前不用)
5软件重引状态(目前不用)
6系统重引导状态
/sbin/init 程序负责确保系统正常地运行,也可以用它来改变init 状态的命令,还可以用init 状态(带用-i选择项)作为shutdown命令的参数。以下是四种系统状态类型:
1、 掉电(运行级0)
2、 单用户(运行级1和s或S)
3、 多用户(运行级2和3)
4、 重引导(运行级5和6)
若准备做系统管理工作,必须确定对系统及所需要做的工作来说哪种init状态是合适的。
1.3.1.1查看系统运行级
要查看某系统的运行级,键入who -r:即显示出运行级、日期及时间、进程终止状态、进程id、进程退出状态。
在下面的例子中,系统gtxa处在缺省多用户运行级(3),日期和时间是在Feb 6 15:46,进程终状态是3,进程id是0, 进程退出状态是S:
gtxa%who -r
run-level 3 Feb 6 15:46 3 0 S
gtxa%
下面描述如何使用每个init状态。
1.3.1.2使用掉电状态,运行级0
用此级关闭系统以便安全切断电源。
1.3.1.3使用系统管理员状态,运行级1
当某项管理任务需要你是系统的唯一用户时,使用这一级,在这级状态下,只安装了root和/usr文件系统,只允许使用最少的核心实用程序,发出该命令的终端成为控制台,没有其它用户登录。
1.3.1.4使用多用户状态,运行级2
一般操作都在此状态下进行,在这级状态下多个用户可以访问系统和整个文件系统,除了nfs服务器、syslog和远程共享进程之外,所有的系统管理进程都在运行。
1.3.1.5使用远程资源共享状态,运行级3
此状态一般操作和nfs资源共享一起有效。
1.3.1.6使用替换多用户状态,运行级4
此运行级目前不用。
1.3.1.7使用交互重引导状态,运行级5
要从非缺省引导设备引导系统时,用此级。也可以用reboot -a 命令进入这个状态级。
1.3.1.8使用重引导状态,运行级6
使用此运行级关闭系统,使系统状态为运行级0, 然后重引导到多用户级(或到inittab文件中指定的缺省运行级)。
1.3.1.9使用单用户状态,运行级s或S
使用这一级使系统处于单用户状态,而所有的文件系统被安装且可访问。
1.3.1.10改变运行级
用telinit或init命令改变运行级,telinit命令需要一个单字符参数,此参数为init指定使用的运行级,尽管用户可以直接用init命令,但最好使用telinit命令去改变系统运行级。
1、 变成超级用户
2、 键入telinit n。参数n是要使用的init状态号。
要关闭系统
gtxa% su
Password:
# telinit 0
变成单用户状态:
gtxa% su
Password:
# telinit 1
要变成无nfs服务器系统管理进程运行的多用户状态:
gtxa% su
Password:
# telinit 2
要变到具有nfs服务器系统管理进程的多用户状态:
gtxa% su
Password:
# telinit 3
要关闭且重引导系统到运行级3:
gtxa% su
Password:
# telinit 6
1.3.2选择所用的关闭命令
准备做系统管理工作时,需要确定合适的关闭命令,下面介绍如何使用系统提供的关闭使命。
/usr/sbin/shutdown
/etc/telinit and /sbin/init
/usr/sbin/halt
/usr/sbin/reboot
以上命令皆完成:初始关闭过程,杀死所有的运行进程,将新数据写入硬盘将Solaris系统关闭为适当的运行级。
1.3.2.1 shutdown
在多用户状态下关闭系统,使用shutdown命令,此命令将警告消息发送给注册到此系统的所用用户,等待60秒钟(缺省)后将系统关闭为单用户状态,可以选择不同的缺省等待时间。
1.3.2.2 telinit和init
用telinit或init 命令可以关闭一个单用户系统或改变此系统的运行级,init命令改变系统的运行级,telinit命令init 你想要的运行级,两者可交替使用,但telinit命令更好,可用telinit将系统置成掉电状态(init 0)或进入单用户状态(init)。
注意:telinit/init和shutdown命令是改变系统运行状态的好方法,由于它们是用一级rc shell程序来杀死行进程, 因此用这些程序来关闭系统是最可靠的方式。
1.3.2.3 halt
当系统必须马上停止且不必警告任何用户时,用halt命令。halt命令在关闭系统时没有任何延时也不给系统中的用户以任何警告。halt命令不运行任何 rc shell程序,所以不是一个关闭系统的好方法。
1.3.2.4 reboot
系统不在多用户状态下,用reboot命令关闭系统并重新引导到多用户状态,reboot命令不警告系统中的用户,不运行rc shell程序,所以不是一个关闭系统的好方法。
1.3.3 引导系统
如果系统电源被切断,则开启电源就开始了多用户引导过程。下面说明从ok PROM提示下引导系统到不同状态下的方法。如果PROM 提示是>,键入n即显示出ok提示。
1.3.3.1 引导到多用户状态
要引导系统到多用户状态,在ok提示符下,键入boot,则在缺省驱动器上启动自动引导过程,显示一系列启动信息,最后系统进入多用户状态。
1.3.3.2 引导到单用户状态
要引导系统到单用户状态,在ok提示符下,键入boot -s,系统引导到单用户状态且提示输入root口令:
ok boot -s
INIT: SINGLE USER MODE
Type Ctrl-d proceed with normal start-up
(or give boot password for system maintenance)
键入root口令,注意要继续将系统引导到多用户状态,则键入Control-D。
1.3.3.3交互式引导
如果想对系统文件或核心作暂时改动,可以采用交互式引导,在这种情况下,可以测试所作的改动,且当出现问题时很容易恢复。
1、 在ok>的PROM提示下,键入boot-a,引导过程会按交互式方式提示你。
2、 若响应回车,即缺省/kernel/unix核心引导,若不用缺省核心,则键入要用的核心名称。
3、 若响应回车,即用缺省/etc/system文件,否则键入所用的系统文件名。
4、 若响应回车,即用缺省模块目录路径,否则键入模块目录路径名。
5、 若响应回车,即用缺省root文件系统,也可键入ufs从本地盘引导,或者键入ufs无盘客户。
6、 若响应回车用root设备的缺省物理名,否则键入想使用的设备名。
7、 若响应回车则用缺省交换文件系统类型swapfs(注意:swapfs是唯一允许的交换文件系统类型)。
以下例子中,接受的是缺省选择:
ok boot -a
(Hardware configuration messages)
rebooting from -a
Boot device: /sbus/esp@0,800000/sd@0,0 File and args:-a
Enter[/kernel/unix]:
(Copyright notice)
Name of system file [/etc/system]:
Name of default directory for modules [ ]:
root filesytem type [ufs]
Enter physical name of root device[/sbus@1, f8000000/esp@0,800000/sd@0,0:a]:
Swap filesystem type [swapfs]
configuring network interfaces: leo
Hostname: gtxa
(fsck messages)
The system is coming up. Please wait.
(More messages)
gtxa login:
1.3.3.4查看引导信息
引导信息存贮在/var/adm/messages文件中,引导完系统后若要查看这些信息,键入/usr/sbin/dmesg或more /var/adm/messages,则显示引导信息。
gtxa% /usr/sbin/dmesg
Jan 13 11:22 SunOS Release 5.0 Version [UNIX(R) System V Release 4.0]
system file (etc/system) error: readline error on line 1.
root nexus=Sun 4-60
mem=16384K (0x4000000)
avail mem =14688256
Ethernet address=8:0:20:7:83:17
sbuso at obio 0xf8000000
dma0 at SBus slot 0 0x400000
exp0 at SBus slot 0 0x800000 SBus level 3(sparc ipl 3)
sdl at sep0 target 1 lun 0
/sbua@1, f8000000/esp@0,800000/sd@1,0(sd1):
sd3 at esp0 target 3 lun 0
/sbus@1, f8000000/esp@0,800000/sd@3,0(sd3):
root on /sbus@ 1, f8000000/esp@0,800000/sd@3,0:a fstype ufs swap on swapfs fstype swapfs size 1348K
le0 at SBus slot 0 0xc00000 SBus level 4 (sparc ipl 5)
zs0 at obio 0xf1000000 sparc ipl 12
zs1 at obio 0xf0000000 sparc ipl 12
dump on /dev/dsk/c0t3d0sl size 32748K
Dec 24 12:30:01 sendmail[82]:alias database out of date
Dec 24 12:30:01 sendmail[82}: AA00082: message- in=<9112242030. AA00082@gtxa. Eng. Sun. COM>
Dec 24 12:30:01 sendmail[82]: AA00082: from=root, size=592, class=0, received form local
Dec 24 12:30:02, stat=Sent
Dec 24 12:30:58 sendmail[153]: network daemon starting
Dec 31 15:20:24 rlogind[734]: pcktread: suspeet zero len fdo at obio 0xf7200000 spare ipl 11
cgsix0 at SBus slot 1 0x0 SBus level 5(spare ipl 7)
cgsix0: screen 1152x900, single buffered, IM
mappable 1 gtxa%
1.3.3.5增加新的硬件后引导系统
当系统中增加新的硬件后,boot命令必须使用-r选择项,以便使操作系统在引导过程中查看并装入新的设备驱动程序。
1、 按硬件中的说明装入新的设备驱动程序。
2、 关闭系统且安装新的硬件。
3、 键入boot -r并回车,则运行重配置shell程序,装入在模块目录中的所有的设备驱动程序且建立相应的硬件结点(nodes)。
1.3.3.6退回引导进程
在有些情况下,你也许想退出或中断引导过程,具体的中断键依键盘类型不同而有所不同,例如,可键入stop -A或L1 -A。在tty 终端上,键入Break键。要中断引导过程,键入系统对应的中断键,当中断引导过程后,监视器将显示ok PROM提示:ok
键入boot重新启动引导过程,或键入help显示一组帮助信息。如果终端示出>提示,键入n获得ok提示。
1.3.4关闭系统
下面介绍如何用shutdown和init命令关闭系统。
1.3.4.1关闭一个多用户系统
在关闭一个多用户系统之前,要通知系统中的用户,给用户完成一些处理过程的时间。
1、 键入who,显示出注册的所有用户清单。
2、 键入ps-ef,显示出系统活动进程表,如果系统进程允许关闭,转到下一步。
3、 变成超级用户。
4、 键入cd /,必须在根目录下运行关闭命令。
5、 键入shutdown,系统要你确认是否要关闭系统。
6、 键入y,所有的用户将接收到一个消息,等待60秒后,系统关闭,进入单用户状态且提示键入root口令。
7、 键入root口令,系统处于单用户状态,这时可以进行维护工作。
8、 键入Control-D返回到缺省运行系统级。
# cd /
# shutdown
Shutdown started Fri Aug 6 10:50:35 EDT 1993
Broadcast message from root(console) on earth Fri Aug 9 10:59:35
THE SYSTEM IS BEING SHUT DOWN NOW!!!
LOG OFF NOW OR RISK YOUR FILES BEING DAMAGED
Do you want to continue?(y or n): y
The system is down.
Changing to init state s-please wait.
INIT: New run level S
INIT: SINGLE USER MODE
Type: Ctrl-d to proceed with normal start-up,
(or give root password for system maintenance):
1.3.4.2关闭系统:可选方式
如果想改变shutdown命令的缺省功能,选择以下所述的六种方式之一来完成。
1、 在不确认的情况下关闭系统:
*变成超级用户
*键入cd /,必须在root目录下运行shutdown命令。
*键入shutdown等待时间(Grace Period)
2、 为了改变shutdown等待时间(Grace Period),用以下几步:
*变成超级用户。
*键入cd /,必须在root目录下运行shutdown命令。
*键入shutdown -t .系统在等待用户确定的秒数后关闭。
*下面是改变等待时间(Grace Period)例子:
# cd /
# shutdown -g 120
3、 关闭且重新引导多用户系统
*变成超级用户。
*键入cd /, 必须在root目录下运行shutdown命令。
*键入shutdown -i6 将一条消息发送给所有的用户且执行re6 shell程序;系统关闭为掉电状态,然后恢复到多用户状态。
4、 关闭单用户系统
要关闭一个单用户系统,键入telinit 0(或init 0)命令运行shell程序使系统很快地关闭,没有警告信息。
5、 关闭且重新引导单用户系统
要关闭且重新引导单用户系统,键入telinit 6 (或init 6)。此时系统信息写到硬盘上,杀死所有的活动进程且系统回到掉电状态。系统再重新引导到缺省级(通常是多用户级)。
6、 紧急关闭系统
要紧急关闭一个系统,键入uadmin 2 0. 将系统信息写到硬盘上,系统回到掉电状态,且显示PROM提示。
1.4监视进程
某一时刻在系统中运行的程序称为进程。用户可以监视进程的状态,控制一个进程获得的CPU时间,挂起或终止一个进程的执行。
ps命令是获得进程信息的主要工具。可以用ps和grep命令查寻所需要的信息,可以确定哪些进程正在(或没有)运行,而且可以获得一个进程的详细信息,这些信息包括:
*PID<进程ID>
*UID<用户ID>
*优先级
*控制终端
*存贮器的使用
*CPU时间
*当前状态
ps命令反映的是命令被键入时的系统状态,因此当你正在监视系统时间的活动情况时,必须明白当你读结果时它们已经有点过时,表1.2列出了ps(1)手册。
表1.2 ps 命令最常用的选择项目
可选项说明
-e 报告所有的进程
-l 生成一个长报告,此报告中包括除STIME之外的所有域。
-f 显示进程启动程序的全路径名
1.4.1 ps命令报告的内容
当键入ps-e时,可获得如下所示的信息
gtxa% /usr/bin/ps -e
PID TTY TIME COMD
0 ? 0:02 sched
1 ? 0:01 init
2 ? 0:00 pageout
192 ? 0:00 sac
79 ? 0:10 inetd
75 ? 0:01 in route
136 ? 0:04 automoun
143 ? 0:01 crom
123 ? 0:01 statd
104 ? 0:01 rpcbind
106 ? 0:01 rpc. rwal
108 ? 0:01 rpc. ruse
110 ? 0:01 rpc. spra
113 ? 0:01 ypbind
115 ? 0:00 keyserv
117 ? 0:01 kerbd
127 ? 0:02 lockd
251 pts/0 0:00 ps
165 ? 0:00 scndmail
193 ? 0:01 ttymon
174 ? 0:03 sysylogd
156 ? 0:01 lpsched
209 ? 0:02 in rlogi
211 pts/0 0:03 csh
164 ? 0:00 lpNet
gtxa%
各栏内容说明如下:
*PID: 进程标识号
*TTY: 启动此进程(或其父进程)的终端。如果进程没有控制终端这一栏显示一个问号<?>──显示问号的进程常常是系统进程。
*TIME: 进程所用的CPU时间
*COMD: 产生此进程的命令名,注意:ps-e 命令仅显示出文件名的头八个字符。
当键入ps -el时,可看到如下的显示内容:
gtxa% /usr/bin/ps -el
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME COMD
19 T 0 0 0 80 O SY f010f1c8 0 ? 0:02 sched
8 S 0 1 0 251 0 20 fflad800 48 fflad9c4 ? 0:01 init
19 S 0 2 0 0 0 SY fflad000 0 fflad07d ? 0:00 pageout
8 S 0 192 1 49 1 20 ff1f7000 238 ff2de348 ? 0:00 sac
8 S 0 79 1 80 1 20 ff232800 258 f010fla4 ? 0:10 inetd
8 S 0 75 1 80 1 20 ff249000 327 ff2de448 ? 0:01 in route
8 S 0 136 1 80 1 20 ff2c3000 287 f010fla4 ? 0:04 automoun
8 S 0 143 1 80 1 20 ff293000 270 f010fla4 ? 0:01 cron
8 S 0 123 1 49 1 20 ff28e800 258 f010fia4 ? 0:01 statd
8 S 0 104 1 80 1 20 ff25a000 301 f010fla8 ? 0:01 rpcbind
8 S 0 106 1 77 1 20 ff258800 272 f010fia4 ? 0:01 rpc.rwal
8 S 0 108 1 80 1 20 ff260800 272 f010dla4 ? 0:01 rpc.ruse
8 S 0 110 1 78 1 20 ff266800 272 f010fla4 ? 0: 01 rpc. spra
表1.3是ps -el长报告中各域的说明表
域说明
F 十六进制标示,加在一起表示进程目前的状态
00进程已经终止,它对应的进程表项已空
01此进程是一个进程且总是在内存中
02此进程正被它的父进程跟踪
04此进程在被它的父进程跟踪,且已经停止运行
08此进程不能用信号激活
10进程正在内存中且在一个文件完成之前被锁住
20此进程不可换出
S 进程的当前状态,由下列字母之一表示:
O正在处理器上运行
S睡眠;等待IO事件完成
R运行就绪。
I空闲状态,进程正在创建
Z僵尸状态;进程已经终止且父进程不再等待,但此死进程仍留在进程表中。
T因父进程正在跟踪它而停止执行
X等待获得更多的内存
UID 进程所有者的用户ID号
PID 进程标识号
PPID 父进程的标识号
C 进程所用的CPU时间(该进程所用CPU时间的百分比估计值)
PRI 进程调度优先级,数字越大表示优先级越低
NI 进程的nice数,影响其调度优先级,提高进程的nice数意味着降低其优先级、使用更少的CPU时间
SZ 进程所需虚存数量,它很好地表示出进程对系统存贮器的要求。
TTY 启动此进程(或父进程)的终端,或者是“?”表示无控制终端(通常表示系统进程)。
TIME 进程从启始到目前所使用的CPU时间总和
COMD 产生此进程的命令。
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:3i:3n:3m:3k:3g:3e:3x11:3xt:3w:3b:9:4:5:7:8 PATH=/usr/bin SHELL=/bin/sh TERM=sun TZ=ESTS5EDT $ 1.5.1.20使用PATH变量 PATH环境变量是非常重要的。当用户执行一个带有全路径名的命令,shell按给定的全路径名去查找命令,当用户只给出命令名时,shell就按PATH环境变量给定的路径顺序去查找目录,若在某一目录中找到该命令时,就执行它。 缺省的根PATH(sbin:/usr/sbin:/usr/bin:/etc)是由系统设置的,但许多用户还在上面添加一些别的命令目录,用户的许多问题,如有关设置环境使用命令或工具的不正确版本等,常常是由于路径设置不正确所产生的。 1.5.1.21设置Bourne和Korn shell路径 Bourne与Korn shell的路径是在用户的$HOME/.profile 文件中如下设置的: PATH=.:/usr/bin:/$HOME/bin 1.5.1.22设置C shell路径 C shell的路径是在用户的$HOME/.cshrc 文件如下设置的: set path=(./usr/bin $ home/bin) 更详细说明请参阅有关手册和第10章。 1.5.2使用管理工具 管理工具是Open Windows的一个具有图形用户接口的工具。它用来管理主机系统和/etc下的17个数据库。使用这一管理工具可以管理用户和组,可以管理NIS+数据库和本地/etc目录下的文件。
|
阅读(1230) | 评论(0) | 转发(0) |