电脑技术学习

Solaris高级系统管理员指南 (5)

dn001
第7章、Unix的shell命令
本章将介绍:各种shell解释器共同点、标准shell介绍、C shell介绍、Korn shell介绍。
在Solaris 2.x软件环境中提供给用户三种命令解释器:标准shell(缺省shell或Bourne shell,本手册中我们称为标准shell)、C shell和Korn shell。对每一个用户而言都有一个缺省的shell命令解释器,另外也可以在命令行中打入某种shell而重新进入另外一种shell解释器。本章首先介绍三种shell的公共命令,然后再分别对它们各自的特性作一些详细介绍。
7.1各种shell的公共命令
本节描述各种shell所使用的命令
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
表7.1 各种shell解释器的基本特性
特性 Bourne C Korn
别名 无 有 有
命令编辑 无 有 有
增强的cd 无 有 有
历史 无 有 有
忽略CTRL-D 无 有 有
不同于profile的初始文件 无 有 有
作业控制 有 有 无
退出文件 无 有 有
文件的重写保护 无 有 有
与标准shell的语义兼容性 是 否 是
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
7.1.1设置某种缺省shell
在用户数据库或/etc/passwd文件中,注册shell是在每个用户的登记项的最后一列中设置,用户可以使用系统提供的管理工具或编辑本地的/etc/passwd文件来修改注册shell,但是此用户必须是sysadm组的成员,即用户的组号(GID)应该是14,如果是在运行NIS+,则必须有建立和删除NIS+数据据库的权限。
下面是用户更改注册shell的一些步骤:
1、按需要,从管理工具中打开数据库管理器窗口。
2、 在用户数据上,按下SELECT,然后再接着按SELECT来选择NIS+或无NIS+服务。若选择NIS+则编辑Passwd数据库,否则编辑本地的/etc/passwd文件。
3、 点击Load键,显示用户数据库窗口。
4、 在想要编辑的用户项上按SELECT鼠标键,然后从编辑(Edit)菜单中选择修改(Modify)项。
5、 修改shell项的文字域,/bin/sh是标准shell,/bin/csh是C shell或者输入/bin/ksh作为Korn shell。
6、 点击Modify按钮,修改用户缺省SHELL定义,只要用户重新注册进入系统,即使用新的shell。
7.1.2在命令行中改变shell类型(sh,csh,ksh)
如果用户不修改用户数据库而想使用别的shell解释器,则可以在命令行中简单地打入所需shell的命令名即可。
例如,要想使用C shell,打入csh即可,缺省C shell提示符是在系统名之后跟一个百分号(%)。
$csh
gtxa%
如果要改变为Korn shell,则打入ksh,korn shell的缺省提示符是$
gtxa%ksh
$
7.1.3从shell解释器中退出(exit)
如果用户是在命令行中进入某种shell解释器,则只需打入exit和回车键,即可退出当前的shell解释器,而返回原先的shell解释器。
$exit
gtxa%
7.1.4清除一个shell窗口(clear)
在某个shell窗口中,用户可以清除一个shell窗口的内容,并且重新显示shell的提示符到此窗口的左上角,例如要清除一个窗口的内容,可以打入clear和回车键:
gtxa%which openwin
no openwin in. /home/ignatz/usr/deskset/bin/usr/bin
/home/ignatz/bin/bin/home/bin/etc/usr/etc/usr/etc/usr/ucb
/usr/bin
gtxa%clear
此时窗口的显示内容即被清除,然后把提示重新显示在顶部。
7.2标准shell
在Solaris 2.x软件环境中,标准shell(Bourne shell)是缺省shell,它是由Steve Bourne先生在AT&T Bell实验室工作时开发的,标准shell相对而言,结构紧凑,而且简单,但它也提供所有的程序设计功能,可以实现由各种命令和过程组成的shell文件(script)。因为如何编写shell文件已经超越本文范围,所以我们不在此赘述。
7.2.1标准shell的初始文件
标准shell只使用一个初始执行文件,其名为.profile,一般放在用户的基目录(home Directory)之下,它专门用来设置用户的环境。当用户注册或在命令行中启动标准shell时,即读.profile文件,一般来说,用户通过此文件来设置用户查找路径和其它环境变量。
7.2.2定义标准shell的环境变量
对于标准shell和Korn shell而言,定义环境变量的语法都是一样的,输入命令=; export,例如:
$HZ=100;export HZ
$
7.3 C shell
C shell是Bill Joy先生在UCB工作学习时开发的,它已被UNIX的众多用户所接受。C shell完全不同于标准shell和Korn shell,而且有自己独特的语法规则,C shell最重要的优点是具有历史功能、命令编辑功能和别名功能。历史功能的意义是C shell可以存贮用户最近输入的命令记录,用户可以显示这些命令,也可以按原样重新使用某条命令;而编辑功能是用户可以通过编辑来改变某条命令;别名可以让用户用短的名字来表示经常使用的长命令,或几条常用命令。
7.3.1C shell的初始文件
C shell使用两个初始化文件,用于设置用户的环境变量,这两个初始文件名分别是.login和.cshrc,也放在用户基本目录之下。
当用户注册时,C shell首先读.login,然后再读.cshrc文件。当用户是从命令行中启动C shell时,只读.cshrc文件(C shell运行控制)。因为.login文件不是每次启动C shell都读入,因此用户应该在.login中设置环境变量,而在.cshrc文件中设置用户的查找路径名。
7.3.2C shell环境变量的定义
使用命令setenv ,例如:
gtxa%setenv display rogue:0
gtxa%
7.3.3建立C shell的别名
用户可以在.cshrc文件中定义所需的别名。建立一个别名的语法为:
alias
例如,你想简写别名(alias)这个命令成为a,则可以在.cshrc文件加入下列一行:
alias a alias
下面的实例选自.cshrc文件。注意,如果命令行中包含有空格,则必须把整个命令中用引号引起来,引号可以是双引号,也可以是单引号:
alias a alias
a h hiostory
a c clear
a lf 1s -F
a ll "ls -l | home"
a la ls -a
a s "source .cshrc"
a f ‘find -name core -print'
a copytotape "ter cvf /dev/rmt/0 *"
7.3.4设置C shell的历史功能
要设置C shell的历史功能,只需在命令行中打入:
set history=
其中,n可理解为C shell可以存贮的命令条数。举例:
gtxa%set history=18
gtxa%
用户既可在shell窗口中"临时"设置历史功能,也可以把它放在.cshrc文件中设置"永久"的历史功能。
7.3.5使用C shell历史功能
在命令行中,打入history命令,即可显示已经打入过的命令,这些命令是你打入的最后n条命令,n是像7.3.4节所述的方法设置的。
gtxa%history
26 pwd
27 kermit
28 cd howto
29 tar avf /dev/rmt/0
30 ls -l howto*
31 cd
32 cd Config/Art
33 ls -1
34 tar cvf /dev/rmt/0
35 histoty
gtxa%
要想重复执行刚打入的命令,可打入!!和回车,即复执行上一条命令:
gtxa% history
26 pwd
27 kermit
28 cd howto
29 tar avf /dev/rmt/0
30 ls-l howto*
31 cd
32 cd Conrig/Art
33 ls-1
34 tar cvf /dev rmt/0
35 histoty
gtxa%!!
history
27 kermit
28 cd howto
29 tar avf /dev/rmt/0
30 ls-l howto*
31 cd
32 cd Conrig/Art
33 ls-1
34 tar cvf /dev rmt/0
35 history
36 history
gtxa%
要重复最后一条命令的最后一个词,可打入!$,这样上一条命令的最后一个词即可作为当前命令行中的一个变量。例如,你可能已经输入了某个文件的全程路径,然后想用这个路径名作为变量,来用vi编辑此文件或打印此文件:
gtxa%ls -l /home/ignatz/quest
gtxa%lp !$
gtxa%
!$可以用在命令行的任何地方,在下面的命令行中,文件/home/ignatz/quest将拷贝到/tmp目录之下:
gtxa%ls -1 /home/ignatz/quest
gtxa%cp !$ /tmp
cp /home/ignatz/quest /tmp
gtxa%
要想重复C shell历史令表中的某个序号的命令,则打入!,例如:
gtxa%history
29 tar avf /dev/rmt/0
30 ls -l howto*
31 cd
32 cd Config/Art
33 ls -1
34 tar avf /dev/rmt/0
35 ls -l
36 cd
37 lp howto*
38 history
gtxa%!32
cd Config/Art
gtxa%
7.3.6设置C shell的退格键(stty erase)
如果用户想把删除字符的键从Delete键变为Backspace键,则可以输入下面的命令:
gtxa%stty erase ^H
gtxa%
此后,退格键(Backspace)即作为字符删除键使用。
7.3.7新命令的嵌入
C shell为所有命令路径变量建立一个内部命令表,因此当用户把新命令放入某个目录中时,这个新命令并不在这个表中,这样,C shell就不会执行此新命令。C shell为了解决这个问题,把用户的新命令加入到查找路径内部表中,为用户提供了rehash命令,用户只需打入rehash命令,即可使这条新命令有效:
gtxa%newcommand
newcommand: Command not found
gtxa%rehash
gtxa%newcommand
gtxa%
7.3.8Cshell历史命令的编辑
用户可以从C shell的历史表中编辑命令,其语法:
S//
下面我们举例说明:
gtxa% history
31 cd
32 ls
33 cd/home/frame3.1
34 ls
35 cd
36 tar cvf /dve/rmt/0 frame3.1
37 lp questionnaire
38 lpstat -t
39 echo $PaTH
40 history
gtxa%!39:s/a/A/
echo $ PATH
.:/home/winsor:/usr/openwin/bin:/usr/deskset/bin:/home/
winsor/bin:/bin:/home/bin:/etc:/usr/etc:/usr/bin:/home/
frame3.1/bin
gtxa%
在此例中,第39条命令行中用户打错了一个字母,然后用户用C shell编辑命令改正了打错的那个字母,命令执行也就正常了。
7.4 Korn shell
Korn shell是AT&T Bell实验室的David Korn开发的,是标准shell超集,Korn shell使用标准shell一样的语法,只不过Korn shell本身又加入了许多新的功能, Korn shell 比C shell提供了更加方便的命令编辑方式,Korn shell一样亦具有历史和别名功能。
7.4.1Korn shell的初始化文件
korn shell使用两个初始文件,它们都存放在用户的基目录之下,其名分别为.profile和.,第二个文件名是可以让用户自己选择命名的,其主要功能是设置环境,同C shell类似,你可以把第二个文件名选择为.kshrc,以后我们即用.kshrc这个名称来说明第二个文件。
当用户注册时,Korn shell首先读.profile文件,然后读.kshrc。.kshrc主要让用户建立使用Korn shell的习惯约定,在.kshrc应该包括只有Korn shell才能执行的命令。
用户必须用ENV环境变量来指定这.文件的名称,Korn shell设置环境变量的命令语法同标准shell:
=;export
其中export命令是必须的,它使此变量对Korm shell以及它的所有子进程都有效,下面为.kshrc文件设置环境变量:
$ENV=$HOME/.kshrc;export ENV
$
很显然,用户必须将ENV这个环境变量在.profile中设置好,否则当用户注册时,Korn shell就会找不到.kshrc文件。注意,ENV环境变量是没有缺省设置的,用户不设置ENV,就不能使用这此性质。
不论是在注册时,还是在命令行中启动Korn shell,.kshrc文件在每次启动Korn shell时都必须读入。
7.4.2Korn shell的选择项
Korn shell有许多变量可用来指定用户的环境和控制命令的执行,要想显示当前的选择项设置情况,可输入:
$set -o
下例显示了Solaris 2.x软件系统中Korn shell的缺省设置情况:
$set -o
Current option settings
allexport off
bgnice on
eMacs off
errexit off
gmacs off
ignoreeof off
interactive on
keyWord off
markdirs off
monitor off
noexec off
noclobber off
noglop off
nounset off
privileged off
restricted off
trackall off
verbose off
vi off
viraw off
xtrace off
$
我们在表7.2中说明这些缺省选择项的具体意义。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
表7.2 Korn shell的选项
选择 缺省值 说明
allexport off 当定义时,自动地报告变量
bgnice on 要低优先级执行所有的后台作业
emacs off 设置emacs/gmacs为联机编辑器
errexit off 如果命令返回伪值,则shell执行ERR陷井并立即 退出
gnaces off 设置gmacs/gmacd为联机编辑器
ignoreeof off 当运行在交互式shell 时,则在文件的未尾也不退出shell,只有打入exit才退出shell
interactive on shell自动进入交互式方式,因此也立即显示shell提示符
keyword off shell根据变量赋值语法将每个字放入变量赋值表中
markdirs off 在所有目录名后显示一个"/"
monitor on 使能作业控制
noclobber off 当使用转向输出>时,不覆盖一个已经存在的文件
noexec off 只读此命令,而不执行它,利用此命令可以调试shell文件的语法错误
noglob off 取消文件名的扩充
nolog off 在历史文件中不存贮功能定义
nounser off 当shell想要扩展一下已经设置的变量时,显示一条错误信息
privilrged off 当此选择项是off时,使用实际UID和GID,若是on,则把UID和GID设置成启动此shell时有效值
restricted off 设置一种受限制的shell
trackall off 当命令第一次出现时,使得它成为别名
verbose off 当读入时,即是显示输入
vi off 设置vi为联机的编辑器
viraw 0ff 指定从vi中,每次只输入一个字符
xtrace off 当执行命令的变时时,显示它们
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
按照korn shell的习惯用法,这些选择都在.kskrc文件中设置。
要想使某选择项有效,可输入:
set -o
若要取消这个选择项,可输入:
set +o
例如在.kshrc中输入:
set -o vi
即设置联机编辑器为vi,而是如果是下面这一行:
set +o vi
则是关闭vi作为联机编辑器使用。
用户亦可以用同样的语法,在命令行中设置Korn shell的其它选择项。
7.4.3创建Korn shell的别名
Korn shell创建别名的语法是:
Alias =
例如把别名命令alias别名为a,其命令为:
$alias a=alias
$
Korn shell本身带有一些预先定义好的别名,要显示这张别名表,只需打入alias命令即可:
$alias
autoload=typeset -fu
false=let 0
functins=typeset -f
hash=alias -t -
history=fc -1
integer=typeset -i
nohup=nohup
r=fc -e -
stop-kill-STOP
suspend=kill -STOP $ $
true=:
type=whence -v
$
表7.3描述这些缺省别名的意义。

表7.3 Korn shell缺省别名
别名 值 定义
autoload typeset -fu 定义一个自动装入函数
false let -0 返回非零状态,经常用于产生无限循环
functions typeset -f 显示函数表
hash alias –t - 显示跟踪别名表
history fc -1 从历史文件中列出命令
integer typeset -i 整型变量的说明
nohup nohup 即使退出系统(log out),也继续执行正在运行的作业
r fc -e- 重复执行前面的命令
stop kill -STOP 停止作业
suspend kill -STOP$$ 挂起作业
true ; 返回一个零退出状态
type whence-v 显示命令的信息
7.4.4用Korn shell的联机编辑器编辑命令
使用Korn shell的联机编辑器,用户在执行命令以前可以编辑当前命令。Korn shell的联机编辑器可以是emacs、gmacs或vi,利用Korn Shell的选择项功能,使用下面命令:
set -o
或使用EDITOR或VISUAL环境变量来设置联机编辑器。
Korn shell的在线(或联机)编辑器vi是普通vi程序改进后的子集,使用联机vi编辑器时会自动进入插入方式。
用户在一般情况之下,不需要使用联机vi编辑器,而可直接打入命令并执行之。如果想要编辑某个命令,则打入Escape键进入命令方式,用户可以使用标准的光标移动命令向前移动,也可以使用vi编辑命令编辑这一行的内容。当用户在编辑命令时,按回车即执行此命令,而打入Escape则是回到输入方式。如果用户想要编辑的命令行是在一个vi文件中,则打入v命令即可打开一个含有命令行的文件。当退出vi时即执行命令,有关vi的常见命令请参见第2章的快速参考表。
7.4.5设置Korn shell的历史
Korn shell在某个文件中存贮所有的历史命令,这个文件用Korn shell的环境变量HISTFILE指定,如果没有设置这个环境变量,则存贮在$HOME/.sh-history中。变量HISTSIZE指定存贮的命令个数,若用户没有设置此环境变量,则保存最近输入的128条命令,当历史表中达到了最大的命令个数时,则继续保存新命令,而把最老的命令从历史表中删除。
要设置一个历史表的大小,可键入:
HISTSIZE=;export HISTSIZE
例如,下面命令行把历史表的大小设置为200:
$HISTSIZE=200;EXPORT HISTSIZE
$
用户可以在某个shell窗口中临时设置历史表的大小,也可以把这些设置命令放入.profile或.kshrc文件中使之“永久”有效。
7.4.6显示Korn shell的历史命令
用户可以利用fc和history这两条命令来显示历史表中的命令,这是因为history已经缺省别名为fc -1,所以用户可以交替使用这两条命令。
下列例子显示历史表中最后的16条命令。
$history
16 pwd
17 ps -el
18 ps -el | grep openwin
19 cd
20 more questionnaire
21 su
22 lp/etc/passwd
23 lpstat -t
24 man ksh
25 du
26 maker&
27 tip -2400 5551212
28 alias h=history
29 find /-name ksh -print
30 df -k
31 history
$
同样,用户打入命令$fc -1也可以显示同样的这些信息。
history和fc命令还可以有附加的变量,这样就可以让用户指定某个显示范围,例如可以显示最后的条命令或以倒序显示命令,有关ksh的详细材料,请参见ksh的手册。
7.4.7使用Korn shell的历史命令
要想利用Korn shell历史表中的命令,可以打入:
r
来重复使用由指定的这条命令,例如要重复使用第27条命令:
$r 27
tip -2400 5551212
(接着显示连接好的一些信息),若是重复执行历史表中的最后一条命令,则只需打入r即可。
7.4.8编辑Korn shell的历史命令
利用fc命令,用户可以显示特定的历史命令和编辑此命令,其语法为:
fc[-e ][-r][]

fc- e-[=选择项-e是用来指定某个编辑器,若不指定编辑器,则使用FCEDIT环境变量,这个环境变量的缺省值为/bin/ed。-r的选择项是倒序显示历史表中的命令,即把最近的命令显示在历史表最上面,若不指定范围,则编辑最后一条命令。
举例来说,用户想使用vi编辑历史表中的最后一条命令,则打入:
fc -e vi
此时创建一个含有历史表最后一项的文件,只要用户编辑此命令并保存这些改变,就可执行此命令了。


第8章、管理系统
本章将介绍:显示系统专有信息、配置附加的交换空间、创建本地邮件别名
8.1显示系统专有信息
使用本节的命令来获得系统专有信息,如主机ID号、硬件类型、处理机类型、OS版本号、系统配置、系统运行多长时间、以及系统日期和时间,随后还说明如何设置系统日期和时间,以及改变系统时域。
8.1.1确定主机ID号(sysdef -h)
为了得到系统的主机ID号,在命令行键入sysdef -h,系统就显示主机ID。这个命令替代SunOS4.x的命令hostid,hostid命令同时也可以使用。
gtxa%sysdef -h
Hostid
554095cc
gtxa%
8.1.2确定硬件类型(uname -m)
键入uname -m,就获得系统的硬件类型,提供相似信息的Sunos4.x命令arch,在sunos5.x中已不存在。
gtxa%uname -m
sun4c
gtxa%
8.1.3确定处理机类型(uname -p)
要获得系统的处理机类型,键入uname -p,系统的处理器类型就是显示出来,这个命令替代sunos的mach命令。
gtxa%uname -p
sparc
gtxa%
8.1.4确定OS版本号(uname -r)
命令uname -r给出OS版本信息
gtxa%unam -r
5.5
gtxa%
8.1.5显示系统配置信息(prtconf)
要显示系统的配置信息,键入prtconf,系统配置信息就显示出来。
gtxa%prtconf
System Configuration; Sun Microsystems sun4c
Memory size:16 Megabytes
sun 4/65 ,unit #0
options,unit#0 zs,unit #0
zs,unit #1
fd,unit #0 (No driver.)
audio,unit #0 (No driver.)
sbus,unit #0
dma,unit #0
esp,unit #0
scsibus,unit#s
sd,unit #0
sd,unit#1
le,unit #0
cgsix,unit #0
auxiliary -io,unit #0(Nodriver.)
...
gtxa%
显示系统配置信息的另一种方法是,键入命令sysdef,系统配置信息显示出来。
gtxa%sysdef
Hostid
530080d2
sun4c Configuration
Devices
options,unit # -1
zs,unit #0
zs,unit #1
fd,unit #-1
audio,unit #-1
sbus,unit #0
dma,unit #0
esp,unit #0
scsibus,unit #0
sd,unit #0
sd,unit #1
le,unit #0
cgsix,unit #0
auxiliary -io,unit #-1
interrupt -enable,unit #-1
memory-error,unit #-1
counter-timer,unit#-1
eeprom,unit #-1
pseudo,unit #0
lo,unit #0
tidg,unit #0
tivc,unit #0
...
gtxa%
8.1.6确定系统已经运行了多长时间
要想知道系统已运行了多长时间,键入命令uptime,本地系统的时间、用户数、平均负数均显示出来
gtxa%uptime
11:18am up 5 day(s),16:12 users,load average:16.46.15.92.15.55
gtxa%
要想知道系统是何时启动的,键入who -b,最后一次启动的月、日、时等信息显示出来。
gtxa%who -b
system boot Ju1 14 08:49
gtxa%
8.1.7确定系统的日期和时间(date)
要显示系统的日期和时间,键入date,系统的日期和时间就显示出来。
gtxa%date
Tue Ju1 14 19:40:47 PST 1992
gtxa%
8.1.8设置系统的日期和时间
下面是重新设置系统日期和时间的步骤:
1、变成超级用户
2、键入date,这里mm是月,dd是天,hh是时,mm是分,yy是年,于是系统的日期和时间按你指定的参数重新设置。
gtxa%su
Password:
#date
Tue ju1 14 16:07:01pst 1992
#date 07141552
tue ju1 14 15:52 :00 pst 1992
#
8.1.9改变系统的时区(/etc/TIMEZONE)
时区在/etc/TIMEZONE文件中设置,可用的U.S时区变量如下。完整的时区变量表见usr/share/lib/zoneinfo目录。
Us/arizona
US/central
US/east-indiana
US/Hawaii
US/Mountain
US/Pacific
US/Pacific-New
US/Yukon
下面是改变时区的步骤:
1、 成为超级用户。
2、 编辑/etc/timezone文件,改变tz=<时区》变量,并保存文件,于是时区被设置。
3、重新启动系统。
下面是一个/etc/timezone文件,系统的时区设置成pacific标准时区。
gtxa% more /etc/timezone
# ident " @(#)timezone 1.3 89/12/12 smi"/* svr4.01*/
# set timezone environment to default for the machine
TZ=US/Pacific;export TZ
下面是将时区Pacific改成Eastern的例子:
gtxa%su
Password:
#vi /etc /timezone
TZ =US/east-indiana;export TZ
:w!
#reboot
gtxa%date
tue ju1 14 14:24:52 est 1992
gtxa%
注:你需要保证文本编辑器确实将改变过的内容写进文件了,如:在vi中,可使用:w!命令强迫写。
8.2配置附加的交换空间(mkfile,swap)
为了在不做格式化的情况下创建并增加交换空间,首先必须使用mkfile命令加入交换空间。
为了列出可用的交换文件,键入swap –1,可用的交换文件表就显示出来。swap命令替代了sunos4.x的swapon命令。
gtxa%swap -1
swapfile dev swaplo blocks free
swapfs - 0 94520 93512
/dev/dsk/c0t3d0s1 32.25 8 65512 45048
gtxa%
下面是创建交换文件的步骤:
1、 成为超级用户,可以在没有根权限的情况下创建一个交换文件,但交换文件的属主最好是根,以使其它进程不能随意存取它。
2、 键入mkfile [k|b|m],跟在数字之后的字母分别K字节、块、或兆字节。于是,按你指定的大小及名字创建一个交换文件。下面的例子创建一个1MB大小的交换文件SWAP:
gtxa%su
Password
#mkfile 1m /files1/swap
#
下面是增加交换文件的步骤:
1、 成为超级用户;
2、 键入swap –a <路径>,必须使用绝对的路径来指定交换文件,这样交换区就变大,可以使用了;
3、 键入swap -1证实交换文件已增加;
#swap –a /files1/swap
#swap -1
swapfile dev swaplo blocks free
swapfs - 0 94520 93512
/dev/dsk/cot3d0s1 32.25 8 65512 45048
/files1/swap 8 20402040
下面是删除指定交换文件的步骤:
1、 成为超级用户;
2、 键入swap –d <路径名>,当交换文件不再使用时,它只从表中删除,使得不再用作交换区,文件本身并没删除。
gtxa%su
password:
#swap -d /files1/SWAP
#swap -1
swapfile dev swplo
blocks free
swpfs- 0
94520 93512
/dev/dsk/c0t30s1 32.25 8
65512 45048
#ls –1 /files1/swap
-rw-----1 root root 104857 jan 31 13:56 swap
#
当创建附加的交换空间时,如果希望重新启动系统时这个空间仍可用,那么,必须在/etc/vfstab文件中增加一项。下面是在文件/etc/vfstab中增加一个交换文件项的步骤:
1、成为超级用户;
2、编辑/etc/vfstab文件,增加一行: - - swap – no -。保证这一行跟在交换文件所在的硬盘分割项安装说明的后面。下次系统重新启动时,交换文件大小自动增加,下面的例子将增加交换文件/files1/swap的说明项放到/etc/vfstab文件中,它在安装文件/files1说明项之后。
/files1/swap - swap – no -
8.3创建一个本地邮件别名(/etc/mail/aliases)
在网络环境中,很可能用一个集中的方法去管理邮件别名,另外,用户常常希望建立本地别名。下面是在本地系统上创建邮件别名的步骤:
1、成为超级用户;
2、编辑文件/etc/mail/aliases;
3、 在文件的末端,在本地别名分类下,键入:<用户名1>,<用户名2>.......;
4、保存修改后的文件。
例如,如果你想创建一个叫做frIEnds的别名,就编辑/etc/mail/aliases文件,并增加如下项:
friends:dexter@elm,ogden@willow,mary@maple


第9章、文件存取问题分析
本章描述的是与查找路径、存取数据以及所有权等有关的问题。
当用户无法访问一个程序、一个文件或者是一个目录时,可以从以下两个方面来进行检查:
1、 用户的查找路径是否已被改变,或者查找路径中所列的目录次序是否正确。
2、 文件或目录是否有合适的权限和所有者。
该章简单地描述如何判断以上问题,并指出可能的解决方法。
9.1 诊断与查找路径有关的问题
如果用户键入一个不在查找路径中的命令,系统将提示"Command not found"信息,通常导致命令无法找到的原因有两点:系统中根本没有这一命令,或者命令不在查找路径中。
如果在查找路径的某个目录中存在同名或者错误版本的命令,系统也将无法正确执行该命令。
为了诊断和解决与查找路径有关的问题,可采用以下方法:
1、 显示当前的查找路径;
2、 编辑设置查找路径的文件(C Shell的.cshrc或.login,Bourne和Korn shell的.profile文件),在路径中加入所需目录名或者重新安排路径的次序。注意:对于C shell,应该同时检查.cshrc和.login文件,以确保路径设置的一致性,重复定义将导致路径难以查找并降低用户查找命令的效率。
3、 对C Shell用source命令操作该文件,对Bourne和Kron Shell使用.命令,使路径设置生效;
4、 检查该命令是否在正确路径中;
5、执行该命令。
9.1.1显示当前查找路径
为了显示当前的查找路径,可键入echo $PATH,如:
$echo $path
/sbin:/usr/sbin:/usr/bin:/etc
$
9.1.2为Bourne和Korn shells设置路径
为Bourne和Korn shells设置的路径在用户的$HOME/.profile文件中:
PATH=.:/usr/bin:$HOME/BIN;export path
路径表开始的点(.)表示系统首先要查找的是当前目录。
9.1.3Source Bourne和Korn shell的初始化文件
当改变了.profile文件中的内容后,需要使文件中的修改内容生效,此时可键入:
$. ./.profile
9.1.4为C shell设置路径
C shell中的路径设置在用户的$Home/.cshc或.login文件中。
set path=(./usr/bin $home/bin)
路径名开始的点(.)表示系统首先要查找的是当前目录。
9.1.5Source C shell初始化文件
当你改变了.cshrc或.login文件中的内容后,为变量设置生效,可键入:
$source.login
9.1.6检查当前的查找路径
当修改完.cshrc文件后,可以使用which命令来加以验证。该命令可自动检查.cshrc文件,如果在Bourne或Korn shell中执行which命令,并且在.cshrc文件中有一个which的别名,那么执行which命令可能导致错误的结果,为保证正确执行,Which命令应在C shell中执行。当然也可以在Korn shell中运行直应的Whence命令。
为了检查查找路径,可以键入which ,当系统在路径名表中找到该命令时,该命令的名称和路径就被显示出来。
以下例子表明openwin命令不在搜索路径中。
gtxa% which openwin
no openwin in /home/ingnatz/$bin/usr/sbin/usr/bin/etc/home/ignater/bin/bin/home/bin/usr/etc
gtxa%
以下例子则表明找到了openwin命令
gtxa% which openwin
/usr/openwin//bin/openwin
gtxa%
如果找不到某个命令,就需要查看有关手册。例如找不到lpsched命令,那么手册中的lpsched(1M)节中会告诉你lpsched命令的路径是/usr/lib/lp/lpsched。
9.1.7执行一个命令
键入即可执行一个命令,如果该命令在查找路径中,那么在任何路径下,该命令均可执行。如果不在查找路径,那么必须键入该命令的整个路径名。
9.2分析与权限和所有权有关的问题
用户不能存取文件或目录的最大可能是它们的权限或所有权被修改过了。例如,当用户作为根用户编辑文件时,文件和目录的所有权就可能改变,在为新用户建立主目录时,特别要注意将主目录下点(.)文件的所有者设置成该用户,如果用户不是点(.)文件的所有者,他们就不能在自己的主目录下建立文件。
另外,当改变用户组的所有权或将用户从/etc/group数据库中删除时,也会遇到同样的问题。
9.2.1改变文件的所有权
注意:当你拥有某文件或目录或者你是超级用户时,你才能修改它的所有权。
按以下步骤改变文件所有权。
1、键入ls –l 命令,在第三列显示文件的所有者;
2、成为超级用户;
3、 键入chown ,文件的所有权即指定给了新的所有者;
gtxa%ls - l quest
-rw-r-r-1 fred other 6023 Aug 512:06 quest
gtxa%su
Password:
#chown iqnatz:staff quest
#ls - l quest
-rw-r-r-l ignatz staff 6023 Aug 5 12:06 quest
#
9.2.2改变文件的权限
chmod命令可用于改变文件的权限。一般有两种方法,一是使用字符,其语法如下:chmod [who] [permission(s)] ,其中who可以是u、g或者o(即用户组或其它),你还可将它设成A用来改变所有权限(A缺省值),运算符可以是+或-,+表示增加权限,-表示删除权限,权限为R、W或X,即写、执行,有关权限的更多信息请参阅手册中的chmod(1)。
例如:为每个人设置读、写执行权限,可键入:
gtxa%chmod +wrx dog
gtxa%ls -l dog
-rwxrwxrwx 1 janice Staff 54 ju1 7 11:33 dog
gtxa%
为每个人设置读和执行权限,可键入:
gtxa%chmod +rx dog
gtxa%ls -l dog
-r-xr-xr-x l janice staff 54 ju1 7 11:34 dog
gtxa%
为了禁止任何人写此文件,可键入:
gtxa%chmod -w dog
gtxa%ls -l dog
-r-xr-xr-x 1 janice staff 54 ju1 7 11:35 dog
gtxa%
在下面的例子中,对dog文件的所有者赋予读写执行权限:
gtxa%chmod u+ wrx dog
gtxa% ls - l dog
-rwxr-x r-x 1 janice staff 54 ju1 7 11:36 dog
gtxa%
为限制同组成员和其它人员执行该文件,可键入:
gtxa%chmod go -x dog
gtxa% ls - l dog
-rwxr-r-1 janice staff 54 ju1 7 11:37 dog
gtxa%
改变文件权限的第二种方法是使用chmod命令的数字形式。你可以使用3位数字来分别设置owner,group和other的权限,例如,644表示对所者设置读写权限,对同组用户及其它用户设置只读权限。
1、 键入ls –1 ,系统将列出当前各文件的权限。
2、 键入chmod ,改变文件权限。
注意:你可以通过使用匹配符(*,?)来改变某组文件或某个目录下所有文件的权限。以下例子将文件权限666改为644:
gtxa%ls -l quest
-rw-rw-rw-1 ignatz staff 6023 Aubg 5 12 :16 quest
gtxa%chmod 644 quest
gtxa%ls -1 quest
-rw-r-r-1 ignatz staff 6023 Aug 5 12:16 quest
gtxa%
9.2.3改变文件组的所有权
如果某文件的组所有者不正确,那么该组成员就不能修改该文件。为了修改文件组的所有权,你必须是该组成员或者是根用户。为了改变文件的组ID,使用命令chgrp 。在solaris2.x下,ls -1命令显示文件夹所有者和用户组。当只需要显示组所有者时,可键入ls -lg命令。
$ls -lg junk
-wr-r-r-l other o Oct31 14:49 junk
$chgrp 10 junk
$ls- lg junk
-rw-r-r-1 staff o Oct 31 14:39 junk
GID可以在group数据库或本地/etc/group文件中找到,你可以通过使用Administration Tool的Database Manager来查看或修改组成员。

标签: