Chinaunix首页 | 论坛 | 博客
  • 博客访问: 5592774
  • 博文数量: 745
  • 博客积分: 10075
  • 博客等级: 上将
  • 技术积分: 7716
  • 用 户 组: 普通用户
  • 注册时间: 2005-04-29 12:09
文章分类

全部博文(745)

文章存档

2019年(1)

2016年(1)

2010年(31)

2009年(88)

2008年(129)

2007年(155)

2006年(197)

2005年(143)

分类:

2006-07-31 12:09:51

第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来查看或修改组成员。
阅读(3308) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~