前言
权限是操作系统用来限制资源访问的机制,权限一般分为读、写、执行。
系统中每个文件都拥有特定的权限、所属用户及所属组,通过这样的机制来限制哪些用户、哪些组可以对特定的文件进行什么样的操作。
每个进程都是以某个用户的身份运行,所以进程的权限与该用户的权限一样,用户的权限越大,该进程所拥有的权限也就越大。
文件权限
权限 | 对文件的影响 | 对目录的影响 |
---|---|---|
r(读取) | 可读取文件内容 | 可列出目录内容 |
w(写入) | 可以修改文件内容(注:这里很多人存在误解,文件拥有W权限,不一定可以删除文件) | 可在目录创建、删除文件 |
x(执行) | 可以作为命令执行(注:这里很多人存在误解,文件拥有X权限,不一定可以执行文件) | 可访问目录内容 |
权限说明
一般我们将r权限用4表示,w权限用2表示,x权限用1表示,-表示无权限
例:
rwx -> 7
r-x -> 5
r-- -> 4
-wx -> 3
-w- -> 2
--x -> 1
--- -> 0
#在Linux中如何查看权限
[root@Jia user]# ll
drw-r--r-x. 2 root test 4096 6月 9 19:15 ceshi
#对上面这一行的解释
1> d : 表示是一个目录,同时还有以下情况, -:文件,l:软链接 , c:字符设备, b:块文件
2> rw- : 表示所有者权限
3> r-- : 表示用户组权限
4> r-x : 表示其他人权限
5> 2 : 表示该目录下有2个子目录
6> root : 表示该目录所有者为root
7> test : 表示该目录所属的用户组为test
8> 4096 : 文件大小,目录都是4096
9> 6月 9 19:15 : 最后创建/修改的时间
10> ceshi : 文件/文件夹名词
相关命令
更改用户所在组
usermod -g group username
更改文件的所有者
chown username file
更改文件所在组
chgrp group file
更改文件及所有子目录的所有者与用户组
chown -R username:group file
#注:只能在root用户下才能chown,chgrp
更改文件权限
chmod [777] file
重点
#很多人对文件的w和x权限有误解,不是文件拥有w权限就一定可以删除文件!!
#并且文件拥有x权限,不一定代表一定可执行!!
#下面我会进行举例说明
准备工作
# 1> 创建两个用户 wukong bajie
# 2> 创建一个目录 test
# 3> 在test目录下创建文件test.sh
# 4> test.sh 中的内容为 echo "haha"
# 5> test目录的所有者与test.sh所有者均为用户wukong
文件x权限详解
wukong | bajie |
---|---|
#修改test与test.sh的权限 1> cd test/ 2> chmod 777 test/ 3> cd test/ 4> chmod 777 test.sh | |
5> cd test/ 6> ll 7> -rwxrwxrwx. test.sh | |
8> chmod 766 test/ | |
9> ./test.sh -bash: ./test.sh: 权限不够 |
这里执行test.sh为什么权限不够了呢??
#注:此时test.sh的权限还是rwxrwxrwx,但是为什么没有x权限了??
详解:
从上面例子中我们不难发现,test目录权限已经失去了x权限
所以得出结论
# 文件的x权限与父目录有密切关系!
# 文件做x权限时不仅需要自己本身需要有x权限,同时父目录必须也必须有x权限!
文件w权限详解
wukong | bajie |
---|---|
#修改test与test.sh的权限 1> cd test/ 2> chmod 777 test/ 3> cd test/ 4> chmod 777 test.sh | |
5> cd test/ 6> ll 7> -rwxrwxrwx. test.sh | |
8> chmod 755 test/ | |
9> rm -rf test.sh rm: 无法删除”test.sh”: 权限不够 |
这里执行rm为什么权限不够了呢??
#注:此时test.sh的权限还是rwxrwxrwx,但是为什么没有w权限了??
详解:
从上面例子中我们不难发现,test目录权限已经失去了x权限
这里直接给出结论
# 文件的w权限与父目录有密切关系!
# 文件做w权限时父目录必须有w权限,自己本身有没有w权限都可以删除!
关于一个w权限的一个坑点
wukong | bajie |
---|---|
#修改test与test.sh的权限 1> cd test/ 2> chmod 777 test/ 3> cd test/ 4> chmod 755 test.sh 5> ll -rwxr-xr-x. 1 wukong yaoguai 27 6月 9 20:48 test.sh | |
5> cd test/ 6> ll 7> -rwxr-xr-x. 1 wukong yaoguai 27 6月 9 20:48 test.sh 8> vim test.sh (注此时会提示是只读文件,没关系继续修改文件保存) 9> ll 10>-rwxr-xr-x. 1 bajie yaoguai 30 6月 9 21:01 test.sh | |
11> ll -rwxr-xr-x. 1 bajie yaoguai 30 6月 9 21:01 test.sh |
注意坑点来了!为什么用户 bajie 明明没有w权限,却把文件修改了?并且文件所有者都变为了 bajie? !!
针对这种情况,我做了以下测试
#以下是我对此的理解
#1> 当父文件夹拥有x权限(r权限可有可无),子文件必须拥有w权限才能修改,并且所有者不会变化
#2> 当父文件夹拥有rwx权限时,子文件只有rw及以上权限才能修改,并且所有者不会变化
#3> 当父文件夹拥有rwx权限时,子文件权限若在rw(6)以下,可以强制修改,但是所有者也会发生变化
至此Linux的权限介绍完毕