shell学习———第五课时(文件属性的操作)

改变文件的属组工具 chgrp ;

  语法:

  chgrp [参数选项]…… 组 文件……

  它的用户和chown 类似,只不过它仅是用来改变文件或目录的属组的;-R参数用于目录及目录下所有文件改变属组的。这和chown也是一样的。简单来两个例子;

  例子一:

  [root@localhost ~]# ls -l sun.txt

  -rw-r——r—— 1 root root 0 04-25 09:38 sun.txt

  [root@localhost ~]# chgrp beinan sun.txt 注:改变sun.txt的属组为beinan用户组;

  [root@localhost ~]# ls -l sun.txt

  -rw-r——r—— 1 root beinan 0 04-25 09:38 sun.txt

  例子二:

  [root@localhost ~]# ls -ld mydir/

  drwxr-xr-x 2 root root 4096 04-25 09:08 mydir/

  [root@localhost ~]# ls -lr mydir/

  总计 8

  -rwxr-xr-x 2 root root 29 04-22 21:02 sun.txt

  -rwxr-xr-x 2 root root 29 04-22 21:02 sun002.txt

  lrwxrwxrwx 1 root root 7 04-21 22:16 sun001.txt -> sun.txt

  -rw-r——r—— 1 root root 0 04-24 22:37 example.txt

  -rw-rw-rw- 1 root root 0 04-24 15:05 dony.txt

  [root@localhost ~]# chgrp -R linuxsir mydir/ 注:改变所mydir及其下面所有的文件及子目录的属组为linuxsir;

  [root@localhost ~]# ls -ld mydir/

  drwxr-xr-x 2 root linuxsir 4096 04-25 09:08 mydir/

  [root@localhost ~]# ls -lr mydir/

  总计 8

  -rwxr-xr-x 2 root linuxsir 29 04-22 21:02 sun.txt

  -rwxr-xr-x 2 root linuxsir 29 04-22 21:02 sun002.txt

  lrwxrwxrwx 1 root linuxsir 7 04-21 22:16 sun001.txt -> sun.txt

  -rw-r——r—— 1 root linuxsir 0 04-24 22:37 example.txt

  -rw-rw-rw- 1 root linuxsir 0 04-24 15:05 dony.txt

  7.3 文件属主和属组的特殊情况 ;

  [root@localhost ~]# ls -lh sungood.txt

  -rw-r——r—— 1 501 502 85 04-25 13:45 sungood.txt

  上面的例子是不是有点怪?因为他的属主和属组都是一个数值;这是为什么呢?出现这种情况的原因是系统中不存在与之对应的用户,所以只能以数字形式显示了。有时我们删除了用户,但没有删除其家目录,这种情况下,它的家目录的属主和属组也会变成数字;

  [root@localhost ~]# userdel linuxsir

  [root@localhost ~]# ls -ld /home/linuxsir

  drwx—— 16 501 502 4096 03-27 02:28 /home/linuxsir

  影响文件的读写执行的因素;

  之所以把这部份的内容单列出来,是因为这部份的内容是基于我们对用户管理及文件权限了解的基础上进行的。比如一个文件的读、写、执行,它要受到哪几方面的影响。

  一个文件能不能被读取,要受到它的属主、属组及其它用户权限的影响,还要受到其父目录权限的影响。我们来举个例子;

  [root@localhost ~]# cd /home 注:进入/home 目录;

  [root@localhost home]# mkdir redhatdir 注:创建一个目录redhatdir

  [root@localhost home]# touch redhatdir/test.txt 注:创建一个文件test.txt

  [root@localhost home]# chmod 700 redhatdir/ 注:修改redhatdir的权限 ,为属主可读可写可执行,属组和其它用户无权限;

  [root@localhost home]# ls -ld redhatdir/ 注:查看redhatdir的属性;

  drwx—— 2 root root 4096 04-25 13:01 redhatdir/

  [root@localhost home]# ls -lr redhatdir/ 注:查看test.txt 文件的属性;

  总计 0

  -rw-r——r—— 1 root root 0 04-25 13:02 test.txt

  [root@localhost home]# su beinan 注:我们切换到普通用户beinan

  [beinan@localhost home]$ cd redhatdir/ 注:进入redhatdir目录,以beinan用户身份。

  bash: cd: redhatdir/: 权限不够

  [beinan@localhost home]$ more redhatdir/test.txt

  redhatdir/test.txt: 权限不够

  解释:我们通过这个例子来看,为什么test.txt在其它用户权位上拥有可读权限r——,但我们用普通用户还不能查看它的内容呢?这是因为他 的父目录没有其它用户的何读权限。我们是不是redhatdir目录的其它用户可读权限打开,就能让普通用户beinan能读取 test.txt的内容了呢??

  [root@localhost home]# chmod 704 redhatdir/

  [root@localhost home]# ls -ld redhatdir/

  drwx——r—— 2 root root 4096 04-25 13:02 redhatdir

  [root@localhost home]# su beinan

  [beinan@localhost home]$ cd redhatdir/

  bash: cd: redhatdir/: 权限不够

  看来如果不设置属组的权限,只打开属主的权限及其它用户在redhatdir目录的读权限的情况下,其它用户是不能访问的;我们应该把 test.txt父目录的 redhatdir 的属主的读、写、执行要打开,还要把父目录的属组的读和执行权限打开,其它用户的读和执行权限打开,也就是要拥有 rwxr-xr-x 权限,这样文件的其它用户才能访问。

  [root@localhost home]# chmod 755 redhatdir/

  [root@localhost home]# more redhatdir/test.txt

  好象这块说的不太清楚,如果您看不太明白,多多chmod 练习练习,也没有什么难的。

  其实为文件分配权限的最终目的是让文件的属主有何权限,让属组下的用户有何权限,让其它用户有何权限。文件权限是和用户管理相关联的,所以理解这方面的内容还得了解用户管理。

  文件被修改或被访问的时间;

  [root@localhost ~]# ls -l adduml02.sh

  -rwxr-xr-x 1 root root 545 04-21 22:26 adduml02.sh

  我们通过查看 文件的属性时,会发现它的时间标记,比如上面的 04-21 22:26 .这个时间并不代表文件被创建的时候,他是代表文件被访问或被修改的时间。文件被修改的时间比较好理解,比如我们可以用编辑器来修改文本文件,然后保存一 下,这样文件的时间就变了。

  当然也有其它的工具不修改文件的内容,只修改文件的时间,这时可以被称为访问时间。比如touch工具能达到这个目的。

  [root@localhost ~]# ls -l adduml02.sh

  -rwxr-xr-x 1 root root 545 04-21 22:26 adduml02.sh

  [root@localhost ~]# touch adduml02.sh 注:更新文件的访问时间成为当前系统时间;

  [root@localhost ~]# ls -l adduml02.sh

  -rwxr-xr-x 1 root root 545 04-25 11:21 adduml02.sh

  关于touch 的用法, 更多的请参见: man touch或touch ——help

  文件属性和文件系统属性的关系;

  文件系统的特性决定着文件属性的定义和修改,比如我们通过 chattr 来锁定一个文件为不可修改或不可删除时,要用到chattr 的+i参数;这在ext2和ext3文件系统是有效的,但在reiserfs 文件系统是没有任何效果的;

  [root@localhost ~]# chattr +i lsfile.sh

  [root@localhost ~]# lsattr lsfile.sh

----i-------- lsfile.sh

  [root@localhost ~]# rm -rf lsfile.sh

  rm: 无法删除 “lsfile.sh”: 不允许的操作

  注:如果把lsfile.sh变成可修改可删除,应该用-i参数;

  比如在ext3或ext2 文件系统中,我们要让一个文件只能追加内容,但不能删除。应该用chattr的+a参数。

  如果您在用ext3文件系统,想查看chattr 的帮助,请man chattr .

作者: liurhyme   发布时间: 2010-11-17