Linux文件权限

文件属性

文件属性

  • 第一列代表这个文件的类型与权限(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这个文件来说,他是能够删除的。

欢迎关注我的其它发布渠道