(一)linux文件属性
Linux文件属性不仅规定了文件的所有者(user)和所属组(group),还规定了所有者,所属组以及其他用户对该文件的权限。我们可以用 ls -l 或ls -al命令来查看这些属性。如下:
第一列中包含文件的类型,以及文件所有者、所属组和其他用户对文件的权限。
第一列第一个字符代表文件类型:
上例中我们只看到“d”和“-”两种文件类型,除此之外的文件类型还有“l”,“b”,“c”,“s”等。具体描述如下:
“ d ” 表示该文件为目录 ;
“ - ”表示该文件为普通文件;
“ l ” 表示该文件为链接文件(linkfile);
“ b ”表示该文件是块设备,即设备文件里面的可供存储的接口设备;
“ c ”表示该文件为设备文件里面的串行端口设备(例如:鼠标、键盘等一次性读取设备);
“ s ”表示该文件为套接字文件(socket),用于进程间通信。
接下来的九个字符以三个字符为单位分别表示文件所有者,文件所属用户组,其他用户的权限(可读(read)、可写(write)、可执行(eXecute))。
例如:上图中的 .bash history,该文件是一个普通文件文件拥有者对该文件可读、可写但不可执行,文件所属组和其他用户对该文件不可读、不可写、不可执行。
(二)更改文件权限
2.1 chgrp命令
功能:(change group)改变文件所属用户组。
格式:chgrp [组名] [文件名]
当然,chgrp命令也可以更改文件目录的所属组,例如:
但是,这里我们可以发现chgrp只改变了目录本身,并没有改变目录下的其他文件或目录属性。那如果我们想要级联更改子目录及子文件呢?这里就不得不提到 -R参数:
使用 chgrp -R dirname -R 进行递归的持续更改,即连子目录下的所有文件、目录都更新成这个用户组
2.2 chown命令
功能:(change owner)更改文件所有者。
格式:chown [所有者] [文件名] / chown -R [所有者] [文件名]
2.3 chmod命令
功能:更改文件权限
格式:
①符号类型改变文件权限 如:chmod u=rwx,o=r,g=r filename
前文中我们已经介绍了文件权限格式,例如,-rwxr--r--则表示该文件对所有者可读可写可执行,但对于所属组和其他用户只可读、不可写、不可执行。我们可以使用“u”,“g”,“o”来分别表示user,group,other的属性。我们可以对“u”,“g”,“o”分别赋值来实现权限的更改,也可以针对“u”,“g”,“o”增加或减少某个权限。具体规则如下表:
②数字类型改变文件权限 如:chmod 644 filename
前文中我们已经介绍了文件权限格式,例如,-rwxr--r--则表示该文件对所有者可读可写可执行,但对于所属组和其他用户只可读、不可写、不可执行。Linux下可使用数字代替“rwx”,具体规则为:r=4,w=2,x=1,-=0。那么上述的权限“-rwxr--r--”用数字表示就是744。具体算法为:rwx=4+2+1=7,r--=4+0+0=4,r--=4+0+0=4。
具体操作如下图:
2.4 umask命令
功能:改变文件的缺省权限
格式:umask xxx (这里的xxx表示三个数字),也可以直接输入umask查看其预设的值。
知道了这些,那么umask的值应该怎么设置呢?我们先看以下两条规则:
- 若用户建立一个普通文件,则预设是没有可执行权限的,即最大值为666(-rw-rw-rw-)。
- 若用户建立的是目录,则预设为所有权限都开放,即777(drwxrwxrwx)。
umask的值代表的是以上两条规定中的默认值需要减掉的权限。
例如:可写权限非常重要,因此预设权限时我们会去掉写权限。即在默认情况下,我们一般设定目录的权限值为755,普通文件的权限值为644。
则:目录的权限为“rwxrwxrwx” - “----w--w-” = “ rwxr-xr-x ”(umask 022)
普通文件的权限为“rw-rw-rw-” - “----w--w-” = “rw-r--r--” (umask 022)
从上图我们可以看到,查找时显示的umask值是四位而我们设定的umask值指的是umask值的后三位,那么umask值的第一位数值代表的是什么呢?这就涉及到文件的一些特殊权限了。当有特殊权限时,第一位数字可以是0~7中的任意一个数字,每一个数字代表一种特殊权限。今天在这里我们只分析一种特殊权限,即sticky bit。
(三)粘滞位(sticky bit)
粘滞位也可以理解为防删除位,它的作用是让用户只能删除属于自己的文件。
我们知道一个文件是否可以被某个用户删除,主要取决与该文件所在目录对该文件是否有写的权限。如果用户对目录有写权限,用户不仅可以向该目录下添加文件,也可以删除该目录下的文件和子目录,即使该用户不是这些文件的所有者,而且也没有读或写许可。但是如果我们希望用户在该目录下只可以添加文件但不能删除该目录下的文件,这个时候我们就可以给父目录设置粘滞位权限,增加了该权限后,即使用户对该目录有写的权限,也不能随意的删除该目录下不属于它的文件和目录。(但是该目录下的目录不继承改权限,要重新设置以后才可使用。)
我们发现设置粘滞位之后权限中最后一位就变成了 t 或者 T ,那可执行权限x又去哪了呢?t 、T有分别代表什么含义呢?
系统是这样规定的, 假如本来在该位上有x, 则这些特别标志如:sticky bit显示为小写字母 t ,
否则, 显示为大写字母 T 。
最后在用网上截取的关于粘滞位的内容来结束这篇博客吧!~~
在以前旧的系统当中,如果一个程序文件一旦设置了粘滞位,那么当该程序中止的时候他的所有指令段将被保存到系统的交换分区当中, 再次运行时可以更快的调入系统。不过现在的操作系统已经不再使用这种功能了。但这并不表示这一功能已经完全被废弃。当一个目录设置为粘滞位时,它将发挥特殊的作用,即当一个目录被设置为"粘滞位"(用chmod a+t),则该目录下的文件只能由 :
1)、超级管理员删除
2)、该目录的所有者删除
3)、该文件的所有者删除
也就是说,即便该目录是任何人都可以写,但也只有文件的属主才可以删除文件。