文件属性

- 第一列代表这个文件的类型与权限(permission)
这一列共有10个字符代表这个文件是“目录、文件或链接文件等”。
- 若是‘d’则是目录。
- 若是‘-’则是文件。
- 若是‘l’则表示为连接文件(linkfile)。
- 若是‘b’则表示设备文件中可供存储的接口设备。
- 若是‘c’则表示设备文件里面的串行端口设备,例如键盘、鼠标(一次性读取设备)。
接下来的字符中,以3个一组,切均为“rwx”的3个组合参数。其中‘r’代表可读(read),‘w’代表可写(write),‘x’代表可以执行(execute)。要注意的是,这3个权限的位置不会改变,如果没有权限,就会出现减号‘-’而已。
- 第一组为“文件所有者权限”。
- 第二组为“同用户组的权限”。
- 第三组为“其它非本用户组的权限”。
第二列表示有多少文件连接到此节点(i-node)
每个文件都会将它的权限与属性记录到文件系统的i-node中,不过我们使用的目录树却是使用文件名来记录,因此每个文件名就会连接到一个i-node。这个属性记录的就是有多少不同的文件名连接到相同的一个i-node号码。
第三列和第四列表示这个文件(或目)的“所有者账号”和“所属用户组”。
第五列表示这个文件的容量大小,默认单位为B。
第六列为这个文件的创建日期或者是最近的修改日期。
修改文件属性与权限
常见的几个用于修改用户组、所有者、各种身份的权限的命令:
chgrp:改变文件所属用户组。
chown: 改变文件所有者。
chmod: 改变文件的权限。
改变所属用户组:chgrp
这个命令是change group的简称。不过,请记得,要被改变的组名必须要在/etc/group文件内存在才行,否者就会显示错误。
chgrp [-R] dirname/filename
- -R:进行递归(recursive)的持续更改,即连同子目录下的所有文件。
例子:
[root@localhost corlymeng]# chgrp corly test.log
[root@localhost corlymeng]# ls -l
-rw-r–r–. 1 root corly 0 7月 24 16:40 test.log
改变文件所有者:chown
这个命令是change owner的简称。要注意的是,用户必须是已经存在于系统中的账号,也就是在/etc/passwd这个文件中有记录的用户名称才能改变。chown还可以修改文件的用户组。
chown [-R] 账号名称[:组名] 文件或目录
- -R:同上面一样
例子:
//将test.log所有者改为bin这个账号
chown bin test.log
//将test.log的所有者和用户组改回为root
chown root:root test.log
事实上,chown也可以使用“chown user.group file”,亦即在拥有者与群组间加上小数点也行! 不过很多朋友设定账号时,喜欢在账号当中加入小数点(例如corly.meng这样的账号格式),这就会造成系统的误判了! 所以我们比较建议使用冒号“:”来隔开拥有者与群组,此外,chown也能单纯的修改所属用户组。例如“chown .sshd install.log”就是修改用户组,就是那个小数点的用途。
改变文件权限:chmod
文件权限的改变是用chmod这个命令,但是权限的设置有两种,分别可以使用数字或者是符号来进行权限的更改。
- 数字更改文件权限
Linux文件的基本权限就有9个,分别是user、group、others三种身份各有自己的read、write、execute权限。其中我们可以用数字来代表各个权限,各权限的数字对照如下:
- r:4
- w:2
- x:1
每种身份(user、group、others)各自的三个权限分数是要累加的,例如当前权限“**-rwxrwx—**”,分数是:
- user= rwx = 4+2+1 = 7
- group = rwx = 4+2+1 = 7
- others = — = 0+0+0 = 0
所以等我们设置权限更改时,该文件的权限数字就是770。更改权限的命令chmod的语法如下:
chmod [-R] xyz 文件或目录
- xyz:刚刚提到的数字类型的权限,为rwx属性数值的相加。
- -R:递归更改。
举例来说,如果要将test.log文件的所有权限都设置启用,那么就执行:
chmod 777 test.log
- 符号类型改变文件权限
还有一个更改文件权限的方法。从前面的介绍我们可以发现,基本上就9个权限,分别是user、group、others三种身份。那么我们就通过u,g,o来代表三种身份的权限。此外a代表all,也即全部身份。
| chmod | u g o a |
+(加入) -(除去) =(设置) |
r w x |
文件或目录 |
例如我们要设置一个文件权限为“**-rwxr-xr-x**”时。
chmod u=rwx,go=rx test.log
#注意:那个u=rwx,go=rx是连在一起的,中间没有任何空格。
如果是“**-rwxr-xr–**”权限呢?可以用“chmod u=rwx,g=rx,o=r test.log”来设置。如果我不知道原先文件的属性,而我只想增加test.log这个文件每个人均可写入的权限,可以使用如下命令:
chmod a+w test.log
如果要去掉所有人可执行权限,则:
chmod a-x test.log
目录权限
文件是存放实际数据的所在,目录主要的内容是记录文件名列表,文件名与目录有强烈的关联。所以如果针对目录,那个r、w、x有什么意义呢?
- r (read contents in directory)
- 表示具有读取目录结构列表的权限,表示你可以查询该目录下的文件名数据。
- w (modify contents of directory)
: 新建已存在的文件与目录;
: 删除已存在的文件与目录(不论该文件的权限为何);
: 将已存在的文件或目录进行重命名; - 转义该目录内的文件、目录位置。
- x (access directory)
- 表示用户能够进入该目录成为工作目录的用途,所谓的工作目录(work directory)就是你目前所在的目录。
- 例 1:
有一个目录的权限如下:
drwxr–r– 3 root root 1024 Jun 25 08:22 test
系统中有一个账号名称为corly,这个账号并没有支持root用户组,那么corly对这个目录有何权限?
corly对此目录有r权限,因此可以查询目录下的文件名列表。因为corly不具有x的权限,所以corly并不能切换到此目录内。
上面的例子中因为corly具有r权限,一看之下好想就具有可以进入此目录的权限,其实是错误的。能不能进一个目录,只与该目录的x权限有关。此外,工作目录对于命令的执行非常重要,如果你在某目录下没有x的权限,那你就没有办法切换到该目录下,也就无法执行该目录下的任何命令,即使你具有该目录的r权限。
- 例 2:
假设账号corly,他的主文件夹在/home/corly/,corly对此目录具有rwx权限。若在此目录下有一个名为test.log的文件,该文件的权限如下:
-rwx—— 1 root root 1024 Sep 20 04:09 test.log
请问corly对此文件的权限是什么?可否删除此文件?
由于corly对此文件来说是“others”的身份,因此这个文件他无法读、编辑和执行,也就是说他无法变动这个文件的内容。
但是由于这个文件在他的主文件夹下,他在此目录具有rwx的完整权限,因此对于test.log这个文件来说,他是能够删除的。