文件权限, 关于chmod

首先可以通过ls来观看文件的权限, 文件权限是长成这个样子的:

drwxr-xr-x  3 marine marine     4096 2010-09-22 20:43 lib
drwxr-xr-x  4 marine marine     4096 2010-06-22 18:45 man
-r--r--r--  1 marine marine    28230 2010-06-22 16:43 README.html
-r--r--r--  1 marine marine    25317 2010-06-22 16:43 README_ja.html
以上的第一段就是
第二段是硬链接数目,一般文件都只有一个吧。
文件权限是这样看的:
[类型标记][User/Owner][Group][Other]
用u标记用户,g标记组,o标记其他用户,而a则等效于ugo,即全部。显然root用户是无视这些权限的。
类型标记占一位,比如d表示文件夹,-表示普通文件,l表示软链接,然后是三组三位布尔数据,表示的是特定用户对该文件的操作权,按[读,写,运行/特殊]的格式排列。
所以你在用chmod的时候,可以用数字,或者直接用标记号来调节文件的权限。
比如:
 chmod u+x a.out -> 如此作为用户的你就可以运行a.out了
 chmod a+x lib -> 如此你就可以以任何解除删除lib下的链接了
 chmod u-x a.out -> 去掉运行权限
 chmod ugo=rwx a.out -> 直接设置所有人对a.out的所有操作权 这个命令等效于 chmod 777 a.out ,显然三位二进制的最大值是7.
 
然后要说的是粘住位。在远古时代,Linux是没有虚拟内存机制的,而需要你手工指定那些文件在运行完之后要留在交换区,如此你可以通过设置站住位来搞定它,这就是chmod的第一个数字,比如chmod 1777 a.out:
marine@marine-thinkpad:~$ touch a.out
marine@marine-thinkpad:~$ ls
a.out
marine@marine-thinkpad:~$ sudo chmod 1777 a.out
[sudo] password for marine: 
marine@marine-thinkpad:~$ ls -l
-rwxrwxrwt 1 marine marine    0 2010-09-28 08:34 a.out
最后的t就是这个功能了,当然,现在的粘住位的这一功能已经基本没用了,而他表达的意思是,除了该文件的所有者(创建或者chown),都不能删除这个文件(因为原先这个权限是所在目录给予的)
而特殊的功能位还有setgid 和setuid,他们的第一位数字分别是2和4,当然上述也可以通过u+s,g+s,o+t来指定,setgid和setuid的意义是,无论你是那个组(那个用户),都能够像属主那样去操作文件,因为你会被set成这个文件的所有人/组。