作者:NetDemon netdemon@20cn.com www.20cn.net -------------------- 我们都知道 UNIX 是一个多用户的操作系统,那么,它是怎样来区分一个文件是属于谁的,这个文件是什么类型的文件的呢?下面我们通过一个例子来说明这个问题 我们现在使用ls命令列出当前
作者:NetDemon
netdemon@20cn.com
www.20cn.net
--------------------
我们都知道UNIX是一个多用户的操作系统,那么,它是怎样来区分一个文件是属于谁的,这个文件是什么类型的文件的呢?下面我们通过一个例子来说明这个问题
我们现在使用ls命令列出当前目录下的文件
#ls -la
# -rw-rw-rw- 1 root wheel 170 jan 7 19:46 mnk
# -rw-r----- 1 root wheel 18204 jan 8 20:34 nmap.tar.gz
# -rwxr-xr-- 1 candy user 1204 may 23 13:00 mysh.sh
# drwx------ 2 netdemon user 512 may 23 14:23 mydoc
|-----1------|--2--|----3-----|---4---|---5---|------6------|-----7-------|
在这里第一部分是文件属性,第二部分是文件数量,第三是所有者,第四是所属组,第五是文件大小,第六是文件修改时间,第七是文件名,其中文件名,时间,文件大小应该不用解释大家都能明白,我就不再说明了,第三部分表明了一个文件的拥有者是谁,就mnk这个文件来说,它的拥有者是root,是属于wheel这个组的,而mysh.sh的拥有者是candy,user组的,通常情况下,如果用户属于这个组,那么这个文件也就属于这个组,第二部分指出连接到此文件的连接的数量,我们都知道,在win系统上,我们可以创建快捷方式,比如在桌面上创建一个快捷方式,指向某个文件,UNIX的连接也大致是一样的概念,如果在系统尚有一个连接是指向mnk的,那么在这里它的1就会变成2,
UNIX系统的文件属性和存取权限Windows系统
。而第一部分呢,表面看起来很不知所谓,很难一下子明白这个表示了什么,但这个就恰恰是UNIX的精粹所在,UNIX的最大特点之一,如果没有这个,UNIX将不是UNIX。这个部分一共有10位数来表示,第一位表示文件类型,"-"表示这个一个文件,"d"表示这个一个目录,"s"表示这是一个连接,详细的说明请看最后的表格,接下来的9位,我们把他们每3位分为一段来看,第一段对应于文件拥有者用u表示(user),第二段对应属组用g表示(group),第三段对应任何人用o表示(other),而每一段的第一位代表读权限(r),第二为代表写权限(w),第三位代表执行(x)(对文件而言)或可进入(对目录而言)权限,现在我们拿第二个文件nmap.tar.gz来作说名,第一位"-"表明这是一个文件,接下来的"rw-"表明root可以读写这个文件,但不能执行它,再接下来的"r--"表明了属于wheel这个组的人可以读这个文件,但不能修改(不可写)也不能执行这个文件,最后的"---"表明了其他的任何人都不能读、写、执行这个文件。由此,我们现在可以知道,mnk这个文件是任何一个人都可以读写但不能执行的一个文件,因为它的每一部分都是"rw-",而第三个mysh.sh就是candy可读可写可执行,netdemon可以执行但不能修改或删除,为什么呢?通过第4个mydoc,我们看出netdemon也是属于user组的一个用户,而mysh.sh的表示组权限的这一段是"r-x",所以netdemon有执行这个文件的权限,但是其他的人就只能看了,这是因为最后的"r--"说明的这个规则。第四个mydoc,由第一位的"d",说明这是一个目录而不是一个文件,netdemon可以读写进入这个目录,但其他的人都不可以包括同一组的candy,因为他最后都是"---"。但是,root可不可以呢?答案是可以的,因为root是整个系统权限最高的一个用户的名字,几乎所有的UNIX系统都一样,整个系统所有的东西都是属于root的,尽管在某些UNIX系统上root去删除mydoc这个目录时会出错,但root还是通过可以使用chown或chmod来改变文件的属性再删除或修改的,(关于chown及chmod等命令自行用'man chmod'命令察看说明)
那么,我们通常也接触到的一些资料说的属性为700,644,755的这些又是怎么回事呢?其实,这只是表示的方式不一样而已,照前面的说法,把表示属性的9位数分为三段,user,group,other,各段的权限(rwx)换为二进制,再变为10进制的结果,有"r"或"w","x"权限的用1表示,没有的用0表示,即"---"为000,"rwx"为111,那么,"r-x"的二进制就表示为 101,而101的十进制数为 1*2e2+0*2e1+1*2e0=1*4+0*2+1*1=5,再把u,g,o各自的值串起来就成了755 644等的这些表示法了,比如"rwxr-xr-x" ,因为u为rwx,二进制是111,十进制是7,g和o都为r-x,二进制是101,十进制是5,所以,"rwxr-xr-x"也可以用755表示,下面给出各种权限的二进制和十进制的值
权限 二进制 十进制
---------------------------------------
--- 000 0
--x 001 1
-w- 010 2
-wx 011 3
r-- 100 4
r-x 101 5
rw- 110 6
rwx 111 7
---------------------------------------
文件类型的表示符
---------------------------------------
d 目录
b 二进制特殊文件
c 文本特殊文件
l 符号连接
p Pipe
s Socket
- 普通文件
---------------------------------------
顺便说一个问题,就是UNIX系统不是用扩展名(如win系统的.exe .com)来标示一个文件是否是可执行文件,一个文件是否可以执行和文件名无关,只和文件属性的x的值有关系,
电脑资料
《UNIX系统的文件属性和存取权限Windows系统》(https://www.unjs.com)。看到这里,我相信你对文件权限这个问题你应该是可以弄清楚了,可如果你比较细心又聪明的话同时你也许会有一个疑问,如果一个文件的属性是"-------rwx",那么企不是任何人都能读写和执行,但此文件的所有者自己却没有呢?这个问题,我就卖个关子了,我希望你可以自己试一下,毕竟实践还是非常的重要的,你需要自己安装一个UNIX的系统来用一用,对于UNIX的命令的这一部分我不准备写了,因为基本上,在 /bin 及 /usr/bin下面的所有文件都是UNIX的命令,UNIX并没有像DOS那样有内部命令和外部命令之分的,所有的可执行文件都是UNIX的命令,你可以把bin下面的每个都尝试一下,不懂的呢,就用 man "文件名" 这个命令来得到他的作用和使用方法,当然,man 出来的都是E文的,你不要说你E文不好看不懂,你既然知道你E文不好,就应该去花点时间学习E文,而通过看man来学习是一个很有效的方法,我就是这样,我读书的时候E文不及格,后来是通过给老师送礼才过了关的,但是我现在还是可以勉强和外国佬在网上聊天,因为这都是man给逼出来的。我可不希望现在还在读书的朋友学我那样通过送礼过关哦,一边看着屏幕一边翻着字典一个一个查的滋味非常痛苦的,况且我是虽然E文不及格,但专业科的模拟电子线路却是全系最高分的,而且人还长得帅那教E文的老太太才有怜悯之心的哦,你就不知道啦,呵呵
接下去的这段时间,你应该去安装UNIX系统啦,弄清楚各种常用的命令等,我本来是准备在下一篇说说程序和进程的权限的,但考虑到这个时候说也许大家的水平接不上,所以下一篇就说说网络基础方面的了,到了一定的程度再回过头来说UNIX,这样并发而来,也许更加好一点,你在UNIX方面有什么问题可以到论坛发问或者写信给我,但拜托不要在QQ上来问我,因为我那上有好友几百多个,加上我通过而没有加为好友的总共可能有2000个,在这样的情况下,我根本不可能回答你什么除非20个字之内可以说完的,而写信或者在论坛提问我有充分的时间详细的解答你的问题,这样彼此都有好处,请大家理解我的苦衷
原文转自:http://www.ltesting.net