搞定文件权限问题
以前写的一篇文章,操作系统是Solaris,不过可以用在其他Unix系统上。
另外想了解更多的权限问题可以看看ACL,以下是几个网站:
FreeBSD 5.0已经在新的UFS2中引入了ACL机制,相关文章你可以看:
http://www.cnfug.org/journal/systems/2004/000011.html
Mac OS X Server v10.4以后也引入了ACL,
http://www.apple.com.cn/server/macosx/features/fileprint.html
这个是Linux上使用ACL的办法:
http://www.linuxaid.com.cn/articles/7/9/794686264.shtml
首先对本人前段时间*极其*懒惰的行为表示最最深刻的反省。(懒到对文件设置权限的时候只会用chmod 777 *,而不研究其他知识。)
今天花了点时间研究了下unix下的文件权限设置问题,终于搞定,不敢独享。
先了解一些基本情况:
文件系统允许三种基本文件访问类型,即文件或目录的读(r)、写(w)和执行(x)。
针对用户的分类,当前用户(u)、当前用户组(g)、其他用户(o)。
赋予权限可以采用带”+”号的chmod命令,撤消权限可以采用带”-”号的chmod命令。
现在我们来看看”ls -l”命令列出的内容
# ls -l
合计 16
-rwxr-xr-x 1 root other 5412 5月 15日 15:52 hello
-rw-r–r– 1 root other 125 5月 15日 15:36 hello.c
drwxr-xr-x 2 root other 512 5月 15日 15:53 mdir
# cd mdir
# pwd
/test/mdir
# cd ..
# pwd
/test
前面的一段字符”drwxr-xr-x”代表的是什么意思呢?
下面我们把它分为4部分来讲解:
d rwx r-x r-x
目录/文件 当前用户权限 当前用户组权限 其他用户
第一部分:
“d”表示这个是个目录,”-”表示非目录。
第二部分:
针对当前用户(文件所有者)
rwx分别表示读、写、执行的权限,”-”表示没有此权限。
第三部分和第四部分各个标志位的意思同第二部分,只是针对的用户不同。
第三部分针对的是该用户所在的组的其他用户,第四部分针对的是全部用户。
根据这个我们来看看hello和hello.c的文件权限情况:
hello的”-rwxr-xr-x”
第一部分”-”表示这个不是目录,是个文件。
第二部分”rwx”表示当前用户对它有:读、写、执行的权限。
第三部分”r-x”表示当前用户组对它只有:读、执行的权限而没有写的权限。
第四部分”r-x”表示其他用户对它只有:读、执行的权限而没有写的权限。
hello.c的”-rw-r–r–”
第一部分”-”表示这个不是目录,是个文件。
第二部分”rw-”表示当前用户对它有:读、写的权限而没有执行的权限。
第三部分”r–”表示当前用户组对它只有:读的权限而没有写、执行的权限。
第四部分”r–”表示其他用户对它只有:读的权限而没有写、执行的权限。
现在我们执行一下看看:
# hello
Hello World
# hello.c
hello.c: execute permission denied
现在我们来改一下”hello”的权限,取消它的执行权限。
# chmod u-x hello
# ls -l
合计 16
-rw-r-xr-x 1 root other 5412 5月 15日 15:52 hello
-rw-r–r– 1 root other 125 5月 15日 15:36 hello.c
drwxr-xr-x 2 root other 512 5月 15日 15:53 mdir
# hello
Hello World
# chmod g-x hello
# ls -l
合计 16
-rw-r–r-x 1 root other 5412 5月 15日 15:52 hello
-rw-r–r– 1 root other 125 5月 15日 15:36 hello.c
drwxr-xr-x 2 root other 512 5月 15日 15:53 mdir
# hello
Hello World
# chmod o-x hello
# ls -l
合计 16
-rw-r–r– 1 root other 5412 5月 15日 15:52 hello
-rw-r–r– 1 root other 125 5月 15日 15:36 hello.c
drwxr-xr-x 2 root other 512 5月 15日 15:53 mdir
# hello
hello: cannot execute
这里需要注意的是因为我是以root用户进入系统的,所以需要去掉所有组的执行权限,才看的出效果。
说到这里有人会问了,那平时接触到的”chmod 777 *”和”chmod 666 *”等是什么意思呢?
其实这个是权限标志位的八进制表示方法。
“rwx”和”-”分别用1和0表示的话,则”rwx”三位权限位,转换为八进制就是数字7。
按照上面的方法,如果要恢复hello的原来的权限的话。
“rwxr-xr-x”转换一下”111101101″,再转换一下就是”755″。则命令为”chmod 755 hello”
# ls -l
合计 16
-rw-r–r– 1 root other 5412 5月 15日 15:52 hello
-rw-r–r– 1 root other 125 5月 15日 15:36 hello.c
drwxr-xr-x 2 root other 512 5月 15日 15:53 mdir
# chmod 755 hello
# ls -l
合计 16
-rwxr-xr-x 1 root other 5412 5月 15日 15:52 hello
-rw-r–r– 1 root other 125 5月 15日 15:36 hello.c
drwxr-xr-x 2 root other 512 5月 15日 15:53 mdir
# hello
Hello World
上面就是有关unix下文件权限的内容。
>> 本文固定链接: http://www.vcgood.com/archives/1387
顶…….
感谢楼主分享啊