Unix Linux文件类型与权限管理

1,886 阅读3分钟

 在小白与计算机的日常中,经常会碰到文件无(读、写、执行)权限,包括很多刚入门的程序员,也常常在别人的博客里会看到类似 chmod 777 XX.filechmod u+x XX.filechmod g-w XX.file这些不明觉厉的命令,今天来帮还不清楚的童鞋科普一下,电脑中每个文件的权限 系统究竟是如何管理的,又如何修改文件的权限。

看懂文件类型与权限等信息

 先不慌,打开终端,在任意非空目录下我们输入:

ls -l

终端会输出该目录下所有文件的信息:

好,我们来对每一列是什么分别介绍:

  1. -r-xr-xr-x:文件类型及权限信息
    我们会发现任意一个文件第一列都是一个由 - d l p s b c D r w x + @ 这些字符组成的字符串,这一串字符究竟是由哪几部分组成又分别代表什么呢?
    • 第一位字符:文件类型信息,-代表这是一个常规文件--Regular file,d代表这是一个文件夹--Directory,l代表文件链接--Symbolic link,更多文件类型(p-Named pipe、s-Socket、b/c-Device file、D-Door)请参考Unix file types
    • 第2-10位,这九位字符每三个为一组,每组的三个字符分别代表读(r)、写(w)、执行(x)权限,三组分别代表不同所有者对该文件的权限,第一组:文件所有者的权限、第二组:这一组其他用户的权限、第三组:非本组用户的权限,总结如下图:
    • 在MacOS系统中,输入ls -l 发现文件权限格式与Linux稍有不同,部分文件权限信息的末尾有”+“或”@“符号:
      我们直接看官方说明:终端输入man ls,我们可以看到这一段说明:
    If the file or directory has extended attributes, the permissions 
    field printed by the -l option is followed by a '@' character.  
    Otherwise, if the file or directory has extended security 
    information (such as an access control list), the permissions 
    field printed by the -l option is followed by a '+' character.

那什么是“extended security”呢?其实就是扩展安全信息
执行 ls -le 查看extended security:

你会发现权限末尾有'+'的都会有0: group:everyone deny delete,意义就很明显啦~

那什么又是“extended attributes”呢?继续查看“@”的含义,
执行 ls -l@xattr -l XX.file 查看扩展属性:

简单理解@就是表示文件或目录有额外属性,比如在MacOS上 从网上下载个文件有时会提示“此文件来自网络下载不安全”,就是这个属性起的作用。而从MacOS下copy文件到Linux系统上时也会因为这个属性出现打不开的情况。可以手动去除掉:xattr -c XX.file

  1. 其余每一列对应的信息如下:
    [类型+权限]---[连接]-[所有者]-[所属组]-[文件大小]-[最后修改日期]-[文件名称]

文件权限的修改:

一张图看懂修改文件权限的命令:

通过按位与的设计巧妙的用三个二进制位表示了三种权限产生的8种组合。
用符号改变权限时,如:chmod a+r XX.file表示对用户、组、其他 全部添加读取权限。

以上,有任何疑问欢迎留言~