目录
我们在命令行输入ll查看文件详情信息的时候,在文件信息的最前面可以看到-rw-rw-r--,这些表示的是什么呢?
实际上这是该文件对不同用户所开放的权限,下面我们就来聊一聊Linux中的文件权限相关的内容。
[zebra@VM-8-12-centos test]$ ll
total 12
-rw-rw-r-- 1 zebra zebra 21 Oct 23 22:19 README.md
-rw-rw-r-- 1 zebra zebra 24 Oct 24 10:50 test1.txt
-rw-rw-r-- 1 zebra zebra 28 Oct 24 10:17 test2.txt
首先我们要理解什么是权限,权限表示的是某件事情能不能被某个人所做。
所以权限实际上是由两部分组成的,一个是人,一个是事物权限属性,Linux下的各种用户对应的就是不同的人,文件中的读,写,修改就是文件可以提供给不同用户的权限属性。
文件访问者的分类
- 文件和文件目录的所有者:u---User
- 文件和文件目录的所有者所在的组的用户:g---Group
- 其它用户:o---Others (不是我,那就是其他人)
Q:为什么要有所属组这个概念?
A:因为我们在开发的过程中可能会被分成一个个小组,有时候想要把自己的代码让同组的人看到,同时不想让其他组的人看到,就需要使用组来对权限进行控制。
文件的权限属性分类
第一位的对应的文件类型:
- d:目录文件
- -:普通文件(文本,各种静态库,可执行程序,源程序)
- l:软链接(类似Windows的快捷方式)
- b:块设备文件(例如硬盘、光驱等)
- p:管道文件(通信)
- c:字符设备文件(键盘与显示器)
- s:套接口文件
Linux下一切皆文件
第2-10位的对应的文件的权限属性:
三位一组,总共三组。
三组分别对应的是文件拥有者的权限,文件所属组的用户的权限,其他用户的权限。
每组中按照读,写,执行的顺序给出文件的权限属性,r代表可读,w代表可写,x代表可执行
文件的权限属性的设置
1.chmod(change mode)
注意就算给用户加上x可执行权限,并不代表着用户就一定可以执行这个文件了,此文件必须是一个可以执行的文件才行。
功能:设置文件的访问权限
格式:chmod [参数] 权限 文件名
常用选项:
R -> 递归修改目录文件的权限
说明:只有文件的拥有者和root才可以改变文件的权限
- 用户表示符+/-=权限字符
+:向权限范围增加权限代号所表示的权限
-:向权限范围取消权限代号所表示的权限
=:向权限范围赋予权限代号所表示的权限
用户符号:
u:拥有者
g:拥有者同组用
o:其它用户
a:所有用户
注意:可以使用,分隔不同用户加权限。也可以使用all
- 超级用户的权限不受约束。
- echo命令自动换行。
root可以chmod任意用户的任意文件
[zebra@VM-8-12-centos test]$ ll
total 12
-rw-rw-r-- 1 zebra zebra 21 Oct 23 22:19 README.md
-rw-rw-r-- 1 zebra zebra 24 Oct 24 10:50 test1.txt
-rw-rw-r-- 1 zebra zebra 28 Oct 24 10:17 test2.txt
[zebra@VM-8-12-centos test]$ chmod u+x test1.txt
[zebra@VM-8-12-centos test]$ ll
total 12
-rw-rw-r-- 1 zebra zebra 21 Oct 23 22:19 README.md
-rwxrw-r-- 1 zebra zebra 24 Oct 24 10:50 test1.txt
-rw-rw-r-- 1 zebra zebra 28 Oct 24 10:17 test2.txt
[zebra@VM-8-12-centos test]$
2.chgrp(change group)
功能:修改文件或目录的所属组
格式:chgrp [参数] 用户组名 文件名
常用选项:-R 递归修改文件或目录的所属组
注意所属组必须是存在的组
[zebra@VM-8-12-centos test]$ sudo chgrp root test1.txt
[sudo] password for zebra:
[zebra@VM-8-12-centos test]$ ll
total 12
-rw-rw-r-- 1 zebra zebra 21 Oct 23 22:19 README.md
-rwxrw-r-- 1 zebra root 24 Oct 24 10:50 test1.txt
-rw-rw-r-- 1 zebra zebra 28 Oct 24 10:17 test2.txt
[zebra@VM-8-12-centos test]$
3.chown(change owner)
功能:修改文件的拥有者,把文件的用户者改为对应的用户(需要经过用户的同意,root不需要)
格式:chown [参数] 用户名 文件名
root可以修改任意文件的所属者,且不需要经过用户同意
如果是普通用户,想把自己的文件给别人,不想经过其他人同意,可以使用sudo,或者干脆su -变成root
[zebra@VM-8-12-centos test]$ chown root test1.txt
chown: changing ownership of ‘test1.txt’: Operation not permitted
[zebra@VM-8-12-centos test]$ sudo chown root test1.txt
[sudo] password for zebra:
Sorry, try again.
[sudo] password for zebra:
[zebra@VM-8-12-centos test]$ ll
total 12
-rw-rw-r-- 1 zebra zebra 21 Oct 23 22:19 README.md
-rwxrw-r-- 1 root root 24 Oct 24 10:50 test1.txt
-rw-rw-r-- 1 zebra zebra 28 Oct 24 10:17 test2.txt
[zebra@VM-8-12-centos test]$
1.如果想要一次性把文件的拥有者和所属组全部改了,可以使用如下chown指令,不被允许就使用sudo
[zebra@VM-8-12-centos test]$ chown zebra:zebra test1.txt
chown: changing ownership of ‘test1.txt’: Operation not permitted
[zebra@VM-8-12-centos test]$ sudo chown zebra:zebra test1.txt
[zebra@VM-8-12-centos test]$ ll
total 12
-rw-rw-r-- 1 zebra zebra 21 Oct 23 22:19 README.md
-rwxrw-r-- 1 zebra zebra 24 Oct 24 10:50 test1.txt
-rw-rw-r-- 1 zebra zebra 28 Oct 24 10:17 test2.txt
[zebra@VM-8-12-centos test]$
所以想要修改所属组并不一定要使用chgrp
2.other是不需要主动去改的,我们在改拥有者的时候,就相当于把 other也改掉了。
文件权限用八进制表示
因为权限位置是确定的,而且是两态的,所以我们可以使用二进制来表示
rwx rwx rwx对应的是111 111 111,对应的八进制就是777
除了ugo+-rwx以外,还可以使用八进制来修改权限。
[zebra@VM-8-12-centos test]$ ll
total 12
-rw-rw-r-- 1 zebra zebra 21 Oct 23 22:19 README.md
-rwxrw-r-- 1 zebra zebra 24 Oct 24 10:50 test1.txt
-rw-rw-r-- 1 zebra zebra 28 Oct 24 10:17 test2.txt
[zebra@VM-8-12-centos test]$ chmod 777 test1.txt
[zebra@VM-8-12-centos test]$ ll
total 12
-rw-rw-r-- 1 zebra zebra 21 Oct 23 22:19 README.md
-rwxrwxrwx 1 zebra zebra 24 Oct 24 10:50 test1.txt
-rw-rw-r-- 1 zebra zebra 28 Oct 24 10:17 test2.txt
[zebra@VM-8-12-centos test]$