文件权限概述
linux中的文件或目录的权限和用户及用户组关联很大。
linux中每个文件或目录都有一组共9个基础权限位,每三位字符被分为一组,他们分别是属主位(占三个字符)、用户组权限位(占三个字符)、其它用户权限位(占三个字符)。比如rwxr-xr-x,linux中正是这9个权限(更多权限位后面会提到)位来控制文件属主、用户组以及其它用户的权限。
- r(read)可读权限,对应数字4。
- w(write)可写权限,对应数字2。
- x(execute)执行权限,对应数字1。
- -(没有任何权限),对应数字0。
实例:
模拟环境:
groupadd inhome # 一个用户组
useradd IanA -g inhome # 属主
useradd IanB -g inhome # 同一个用户组的其它用户
useradd Lisa # 其它用户组的用户
- 1
- 2
- 3
- 4
一个用户组inhome的成员有IanA,IanB。其它用户组成员Lisa。超级用户root。
[root@ianLinux ~]# mkdir /data/test/IanA -p
[root@ianLinux ~]# cd /data/test/IanA
[root@ianLinux IanA]# vi test.sh
echo "study Linux."
~
~
...
[root@ianLinux IanA]# ls -l test.sh
-rw-r--r-- 1 IanA inhome 20 9月 8 10:05 test.sh
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
rw-r–r–权限下:
IanA用户(rw-)可读可写不可执行:
IanB用户(r–)可读不可写不可执行:
Lisa用户(r–)可读不可写不可执行:
rwxrw-r–权限下:
先把权限修改一下:
IanA用户(rwx)可读可写可执行:
[IanA@ianLinux IanA]$ whoami
IanA
[IanA@ianLinux IanA]$ echo "##" >>test.sh
[IanA@ianLinux IanA]$ cat test.sh
echo "study Linux."
##
##
[IanA@ianLinux IanA]$ ./test.sh
study Linux.
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
IanB用户(rw-)可读可写不可执行:
[IanB@ianLinux IanA]$ whoami
IanB
[IanB@ianLinux IanA]$ cat test.sh
echo "study Linux."
[IanB@ianLinux IanA]$ echo "##" >>test.sh
[IanB@ianLinux IanA]$ cat test.sh
echo "study Linux."
##
[IanB@ianLinux IanA]$ ./test.sh
-bash: ./test.sh: 权限不够
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
Lisa用户(r–)可读不可写不可执行:
[Lisa@ianLinux IanA]$ whoami
Lisa
[Lisa@ianLinux IanA]$ cat test.sh
echo "study Linux."
##
[Lisa@ianLinux IanA]$ echo 111 >>test.sh
-bash: test.sh: 权限不够
[Lisa@ianLinux IanA]$ ./test.sh
-bash: ./test.sh: 权限不够
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
-wx-wx–x权限下:
先把权限修改一下:
[root@ianLinux IanA]# chmod 331 test.sh
[root@ianLinux IanA]# ls -l test.sh
--wx-wx--x 1 IanA inhome 23 9月 8 11:02 test.sh
- 1
- 2
- 3
IanA用户(-wx)不可读可写可执行:
没有读权限也不能执行的。
因为不可读,所以vi编辑的时候,也看不到内容,但是还是能写,但是这个写不正常。:
Lisa用户(–x)不可读不可写可执行:
强制也不能写入,没有写权限。
有关文件的删除:
我们发现虽然test.sh的属主是IanA,但是在IanA用户下却无法删除test.sh。
在之前我们已经讨论过这个问题了。
文件删除原理:
我们删除一个文件,并不是清除了这个文件的inode节点和block数据块。只是在这个文件的父目录的block数据块中,删除了这个文件的名字,从而使这个文件名消失,并且无法指向这个文件的inode的节点。
父目录的属主是root。所以IanA不能删除。
用超级用户修改一下。
现在就可以删除了。
总结的测试结论:
linux普通文件的读、写、执行权限说明:
- 可读r:表示具有读取\阅读文件内容的权限
- 可写w:表示具有新增、修改文件内容的权限
①如果没有r,那么vi无法编辑,强制编辑的话会覆盖数据,echo可以追加。
②删除文件(修改文件名等)的权限是受父目录的权限控制,和文件本身权限无关) - 可执行x:表示具有执行文件的权限
①文件本身要能够执行
②普通用户同时还需要具备r的权限才能
③root都可执行
win32下可执行文件:*.exe,*.bat,*.com
- linux下可执行文件:*.sh,*.py,*perl等
转载至https://blog.csdn.net/codetz/article/details/52464275