在小白与计算机的日常中,经常会碰到文件无(读、写、执行)权限,包括很多刚入门的程序员,也常常在别人的博客里会看到类似 1
2### 看懂文件类型与权限等信息
 先不慌,打开终端,在任意非空目录下我们输入:
ls -l1
2
3
4
5
6
7
8
9
10
11终端会输出该目录下所有文件的信息:

好,我们来对每一列是什么分别介绍:
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]((https://en.wikipedia.org/wiki/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
。
- 其余每一列对应的信息如下:
[类型+权限]—[连接]-[所有者]-[所属组]-[文件大小]-[最后修改日期]-[文件名称]
文件权限的修改:
一张图看懂修改文件权限的命令:
通过按位与的设计巧妙的用三个二进制位表示了三种权限产生的8种组合。
用符号改变权限时,如:chmod a+r XX.file
表示对用户、组、其他 全部添加读取权限。
以上,有任何疑问欢迎留言~