我们知道操作系统对磁盘数据进行管理,这种管理通常是文件系统的功能,文件系统将磁盘中一些相关的数据通过inode索引信息关联起来,并称这些数据为文件和目录。通常不同操作系统有不同的文件系统,也有共同支持的文件操作系统,如WIMDOW下有FAT32及NTFS文件操作系统,LINUX下通常有EXT2,EXT3等文件系统。文件系统是用来管理文件的。文件通常就是一个数据段的集合。在LINUX下一个文件一经创建,为安全起见,针对不同的用户,设计了三种基本访问方式,读(r)写(w)执行(x),对每一个文件,LINUX将其与用户进行关联,对用户设计了三种用户类型,文件属主(创建文件用户),同组用户(同一个用户组的任何用户),其它用户(不在同一个组的非创建用户)。
下面根据上图的显示的文件属性进行一一实验。
【1】文件类型 文件类型是读写权限10个字符中的第一个字符,通常用d表示目录文件,l表示符号链接文件,b表示块设备文件如硬盘 c表示字 符设备如显示器或者tty. p是命名管道文件,s是套接字文件, -是普通文件。这里需要强调一点文件类型是由LINUX默认指定的。不是可以修改的。
【2】文件权限 文件权限是读写权限后9个字符,分别代表文件属主用户、同组用户及其它用户的权限。文件与目录权限的r w x表示的含义还是有所不同的。其中目录r 表示可以列出目录下内容(ls操作), x表示可以访问搜索,也就是可以cd/find操作。w表示目录下允许创建新文件和修改文件。文件的r w x表示含义如下:
文件权限是可以修改的。缺省是由umask来决定的。umask针对单个用户设定了一个缺省值,采用补码设计。如umask =002,对文件来说是666-umask,对目录则是777-umask
[root@windriver-machine shtest]# cat /etc/bashrc |grep "umask"
umask 002
umask 022
通常文件读写权限用符号r w x来表示,但实际上从LINUX实现来说,它是采用数字来表示的,对r w x 分别对应二进制位4 2 1,因此,rwx 表示7,rw表示6 r 表示4。这样从整体来看,9位符号位合起来是3位十进制数字,如777表示rwxrwxrwx。但是从umask = 0002来看,这里又显示出四位十进制数字,那是为什么呢?可能好多地方都没详细说明。这里说明一下,实际上权限mode是有四位的。这一个多出来的位是SGID和SUID缺省是0.,SGID,SUID缺省用2,4表示。用字符就是t s表示。那么什么是SGID和SUID呢?
1)SUID 在文件权限位也就是第三个位置上通常是x字符,如果设置成“s”,称之为SUID,它用来表示当用户执行该文件时,系统用文件owner的UID替代实际执行该文件的用户UID。SUID 的文件肯定具有执行权限。如果没有x权限,则这里”s”要写成大写”S”.如rwSr-Sr--
2)SGID,同上类似,在文件权限的第6个位置上通常是组的执行字符x,如果设置成“s”,称之为SGID,也就是当一个用户执行该文件时,系统用文件组的拥有者gid来代替执行该文件有用户gid。目录文件的SGID具有继承性,其下所有文件及子目录同样继承GID属性。
3)t 在特定目录如/tmp的第9个位置设置为t表示不是这个目录的owner用户不能删除该目录下的文件。
修改文件权限用chmod后跟rwx符号来修改也可以使用数字方式。符号格式 chmod [u g o a] [+ – =] [r w x s t] filename
[windriver@windriver-machine shtest]$ ll -d 123abc/
drwxrwxr-x 2 windriver windriver 4096 2011-08-06 19:50 123abc/
[windriver@windriver-machine shtest]$ ll -d /tmp
drwxrwxrwt 14 root root 4096 2011-08-06 04:33 /tmp
[windriver@windriver-machine shtest]$ ls
1234.txt 123abc errors ex1.sh output
[windriver@windriver-machine shtest]$ ll 1234.txt
-rw-rw-r-- 1 windriver windriver 0 2011-08-06 19:50 1234.txt
[windriver@windriver-machine shtest]$ chmod u+x,g+x,o+x 1234.txt
[windriver@windriver-machine shtest]$ ll 1234.txt
-rwxrwxr-x 1 windriver windriver 0 2011-08-06 19:50 1234.txt
[windriver@windriver-machine shtest]$ chmod -x 1234.txt
[windriver@windriver-machine shtest]$ ll 1234.txt
-rw-rw-r-- 1 windriver windriver 0 2011-08-06 19:50 1234.txt
[windriver@windriver-machine shtest]$ chmod go+x 1234.txt
[windriver@windriver-machine shtest]$ ll 1234.txt
-rw-rwxr-x 1 windriver windriver 0 2011-08-06 19:50 1234.txt
[windriver@windriver-machine shtest]$ chmod go=rwx,o=rw 1234.txt
[windriver@windriver-machine shtest]$ ll 1234.txt
-rw-rwxrw- 1 windriver windriver 0 2011-08-06 19:50 1234.txt
[windriver@windriver-machine shtest]$ chmod ug=rwx,o=rw 1234.txt
[windriver@windriver-machine shtest]$ ll 1234.txt
-rwxrwxrw- 1 windriver windriver 0 2011-08-06 19:50 1234.txt
[windriver@windriver-machine shtest]$ chmod 754 1234.txt
[windriver@windriver-machine shtest]$ ll 1234.txt
-rwxr-xr-- 1 windriver windriver 0 2011-08-06 19:50 1234.txt
[windriver@windriver-machine shtest]$ chmod 4755 1234.txt
[windriver@windriver-machine shtest]$ ll 1234.txt
-rwsr-xr-x 1 windriver windriver 0 2011-08-06 19:50 1234.txt
[windriver@windriver-machine shtest]$ chmod 6755 1234.txt
[windriver@windriver-machine shtest]$ ll 1234.txt
-rwsr-sr-x 1 windriver windriver 0 2011-08-06 19:50 1234.txt
[windriver@windriver-machine shtest]$ chmod 2764 1234.txt
[windriver@windriver-machine shtest]$ ll 1234.txt
-rwxrwSr-- 1 windriver windriver 0 2011-08-06 19:50 1234.txt
[windriver@windriver-machine shtest]$ chmod 2764 123abc/
[windriver@windriver-machine shtest]$ ll -d 123abc/
drwxrwSr-- 2 windriver windriver 4096 2011-08-06 19:50 123abc/
[windriver@windriver-machine shtest]$ ll 123abc/
total 0
[windriver@windriver-machine shtest]$ cd 123abc/
[windriver@windriver-machine 123abc]$ touch 123abc.txt
[windriver@windriver-machine 123abc]$ ll
total 0
-rw-rw-r-- 1 windriver windriver 0 2011-08-06 21:24 123abc.txt
[windriver@windriver-machine 123abc]$ cd ..
[windriver@windriver-machine shtest]$ ls
1234.txt 123abc errors ex1.sh output
[windriver@windriver-machine shtest]$ chmod 2764 123abc/
[windriver@windriver-machine shtest]$ ll -d 123abc/
drwxrwSr-- 2 windriver windriver 4096 2011-08-06 21:24 123abc/
[windriver@windriver-machine shtest]$ ll 123abc/
total 0
-rw-rw-r-- 1 windriver windriver 0 2011-08-06 21:24 123abc.txt
[windriver@windriver-machine shtest]$ chmod 6755 123abc/
[windriver@windriver-machine shtest]$ ll 123abc/
total 0
-rw-rw-r-- 1 windriver windriver 0 2011-08-06 21:24 123abc.txt
[windriver@windriver-machine shtest]$ chmod -R 6755 123abc/
[windriver@windriver-machine shtest]$ ll 123abc/
total 0
-rwsr-sr-x 1 windriver windriver 0 2011-08-06 21:24 123abc.txt
[windriver@windriver-machine shtest]$
【3】文件用户 前面我们说了从文件权限角度有三种用户,但实际对一个文件来说,只需要设置文件的属主用户也就是OWNER和预设组GROUP,使用chown [owner][.group] filename 或者chgrp [group] filename Chown 同chmod一样有两个选项, –R 应用到子目录和文件 -h只应用符号链接本身。
[root@windriver-machine shtest]# groups windriver
windriver
[root@windriver-machine shtest]# groups root
root bin daemon sys adm disk wheel
[root@windriver-machine shtest]# id root
uid=0(root) gid=0(root) groups=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel)
[root@windriver-machine shtest]# groups
root bin daemon sys adm disk wheel
[root@windriver-machine shtest]# getenv group root
bash: getenv: command not found
[root@windriver-machine shtest]# getent group root
root:x:0:root
[root@windriver-machine shtest]# ll
total 16
-rwxrwSr-- 1 root root 0 2011-08-06 19:50 1234.txt
drwsr-sr-x 2 windriver windriver 4096 2011-08-06 21:24 123abc
-rw-rw-r-- 1 windriver windriver 49 2011-08-06 01:14 errors
-rwxrwxr-x 1 windriver windriver 120 2011-08-06 01:44 ex1.sh
-rw-rw-r-- 1 windriver windriver 1640 2011-08-06 19:13 output
[root@windriver-machine shtest]# chgrp bin 1234.txt
[root@windriver-machine shtest]# ll
total 16
-rwxrwSr-- 1 root bin 0 2011-08-06 19:50 1234.txt
drwsr-sr-x 2 windriver windriver 4096 2011-08-06 21:24 123abc
-rw-rw-r-- 1 windriver windriver 49 2011-08-06 01:14 errors
-rwxrwxr-x 1 windriver windriver 120 2011-08-06 01:44 ex1.sh
-rw-rw-r-- 1 windriver windriver 1640 2011-08-06 19:13 output
[root@windriver-machine shtest]#
【4】符号连接(文件快捷访问)。 我们都知道Windows下文件有快捷方式。在LINUX下对文件设置了两种符号连接,一种是软连接,另一种是硬连接。硬连接与软连接的区别就是创建的文件是否具有原文件共同的inode。两者都会创建出一个新文件,但是还是具有一些不同特征,具体如下图所示:软连接类似于快捷方式。