Linux目录文件权限
Linux系统中的每个文件和目录都有访问许可权限,用它来确定谁能通过何种方式对文件和目录进行访问和操作。文件或目录的访问权限分为只读,只写和可执行三种。
对目录(文件夹)设置权限是一件极其容易引起误导的事情,问题在于在linux的操作系统下,文件和目录两者的“读”“写”“执行”这三个权限有不同的含义。
对于目录来讲,读权限授予用户读取目录中文件的文件名(这里强调只能获取文件名)的权利,但是不能获取更多的文件信息,如文件类型,文件大小,所有者,权限等。
对于目录来讲,写权限授予用户修改目录中条目(entries)的能力,包括创建、删除文件以及修改文件名。
执行权限授予用户执行文件的能力,这个授权只能设置在可执行二进制文件或Shell脚本以允许操作系统来运行他们。
其实目录是硬盘上划分的一块区域,为了方便,容易找到文件,把互相有关的文件存储在一个文件夹内。就像把钢笔、铅笔、橡皮、小刀和尺子放在一个铅笔盒一样。
linux中的文件、目录权限区别如下:
| 文件 | 目录 |
r:可读权限 | 读取文件内容 | 读包含在目录中的文件名称 |
w:可写权限 | 对文件内容进行编辑 | 可以写信息到目录中,即可以创建、 删除文件、移动文件等操作 |
x:可执行权限 | 作为执行文件执行 | 可以进入目录;可以搜索 (能用该目录名称作为路径名 去访问它所包含的文件和子目录) |
举例说明:
1. 对文件有w权限不能删除文件,需要对文件所在的目录有w权限;
2. 对目录有w权限不能cd进入目录,需要对目录有x权限;
3. 对目录有x权限,只有在知道文件名并且有r权限的时候才能访问目录下的文件;
4. 对目录必须有x权限才能cd进入到目录,必须有rx权限才能使用ls列出目录清单;
5. 对目录有w权限,可以对目录中的任何文件或子目录进行创建、删除或修改操作,即使该文件或目录的所有者是其它用户也是如此;
umask 命令允许设定文件创建时的缺省模式,文件和目录的“文件属主”、“同组用户”、“其他用户”存在一个相应的umask值中的数字。对于文件来说,系统不允许用户在创建一个文本文件时就赋予它执行权限,必须在创建后用chmod命令增加这一权限,所以各个数字的最大值分别是6。而目录则允许设置执行权限,这样针对目录来说,umask中各个数字最大可以到7。所以对于目录来说最大权限为777,而文件的最大权限为666。
可以有几种计算umask值的方法,通过设置umask值,可以改变为新创建的文件和目录设置缺省权限。
无论umask的值是什么,在红帽企业版系统中,新建文件不再自动创建可执行权限。换句话说,一个umask值为0454和0545的新建文件会具有相同的权限。对于特定的文件,如果需要可执行权限,则需要使用chmod命令来设置。
相对于文件或目录的最大权限来说,umask和用户默认权限值,在二进制形式上是互为“补码”的关系。
默认情况下的umask值是022(可以用umask命令查看),此时你建立的文件默认权限是644(6-0,6-2,6-2),建立的目录的默认 权限是755(7-0,7-2,7-2)
(a)将umask值于目录的最大权限(777)进行异或得到的值即为新建目录的权限值。
(b)将umask值与文件的最大权限(666)进行异或得到的值即为新建文件的权限值。
例如:
$ umask
0022
$ touch test
$ ll a
-rw-r--r--1 sys sys 0 2013-04-12 10:32 test
新文件的二进制权限码为: 011-100-100
该权限码的计算方法为: 文件最大权限值(666) 与 umask值(022)的异或结果。
110-110-110
000-010-010 < 异或 XOR
------------------------------
110-100-100 < 新建文件的权限码,符号形式为: -rw-r--r--
注:rwx这三个的位置不能改变,没有就用-代替。
用下面的例子来进行说明:
有文件全名为/home/student/www/index.html ,各相关文件/目录权限如下:
第一栏表示的是文件的属性
这一栏的11个字符表示的意思如下
第一个字符表示的是文件的性质(文件、目录、连接文件等等),如:
.表示的是隐藏文件
d表示目录
-表示文件
l是一个连接文件(相当于快捷方式)
b是块设备文件(block)。一般放在/dev目录下,设备文件是普通文件和程序访问硬件设备的入口,是很特殊的文件。没有文件大小,只有一个主设备号和一个辅设备号。一次传输数据为一整块的被称为块设备,如硬盘、光盘等。最小数据传输单位为一个数据块
(通常一个数据块的大小为512字节)。
c是字符设备文件(character)。一般放在/dev目录下,一次传输一个字节的设备被称为字符设备,如键盘、字符终端等,传输数据的最小单位为一个字节。
p是命令管道文件
s是sock文件
第二到第十个字符表示的是权限
他们三个为一组,共分三组
第一组表示的是文件的所有者的权限
第二组表示的是文件的所属组(同组用户)的权限
第一组表示的是其他人的权限
第二栏表示的是有多少文件连接到inode(索引节点)
如果是一个文件,此时这一字段表示这个文件所具有的硬链接数,
如果是一个目录,则此字段表示该目录所含子目录的个数。
第三栏表示的是文件的所有者
第四栏表示的是文件的所属组
第五栏表示的是文件的大小(以字节为单位)
第六栏表示的是文件的创建日期或修改日期
第七栏表示的是文件名
(1)让用户能进入某目录成为“可工作目录”的基本权限是什么
可使用的命令:cd等切换工作目录的命令。
目录所需权限:用户对这个目录至少需要具有x的权限。
额外需求:如果用户想要在这个目录内利用ls查阅文件名,则用户对此目录还需要r的权限。
(2)用户在某个目录内读取一个文件的基本权限是什么
可使用的命令:例如cat,more,less等。
目录所需权限:用户对这个目录至少需要具有x权限。
文件所需权限:用户对文件至少需要具有r的权限才行。
(3)让用户可以修改一个文件的基本权限是什么
可使用的命令:例如nano或vi编辑器。
目录所需权限:用户在该文件所在的目录至少要有x权限。
文件所需权限:用户对该文件至少要有r,w权限。
(4)让一个用户可以创建一个文件的基本权限是什么
目录所需权限:用户在该目录至少要有w、x的权限。
(5)让用户进入某目录并执行该目录下的某个命令的基本权限是什么
目录所需权限:用户在该目录至少要有x的权限。
文件所需权限:用户在该文件至少需要x的权限。
让一个用户vbird能够进行:
cp/dir1/file1/dir2的命令时,请说明/dir1/file1/dir2的最小所需权限?
运行CP时,vbird要能够读取来源档,并且写入目标档,因此各文件/目录的最小权限应该是:
dir1:至少需要有x权限
file1:至少需要有r权限
dir2:至少需要有w、x权限
chmod命令是非常重要的,用于改动文件或目录的访问权限。用户用它控制文件或目录的访问权限。
我们必须首先了解用数字表示的属性的含义:0表示没有权限,1表示可执行权限,2表示可写权限,4表示可读权限,然后将其相加。所以数字属性的格式应为3 个从0到7的八进制数,其顺序是(u)user、(g)group、(o)others、(a)all。
例如,如果想让某个文件的属主有“读/写”二种权限,需要把4(可读)+2(可写)=6(读/写)。110
数字设定法的一般形式为:
chmod [mode] 文件名 chmod 711 wenjian.c
chown命令
功能:更改某个文件或目录的属主和属组。这个命令也非常常用。如果想存取一个文件的话,可以用该命令将文件的属主设为该用户。
该命令的各选项含义如下:
- R 递归式地改动指定目录及其下的所有子目录和文件的拥有者。
- v 显示chown命令所做的工作。
例1:把文件shiyan.c的所有者改为oracle。
$ chown oracle shiyan.c
例2:把目录/his及其下的所有文件和子目录的属主改成oracle ,属组改成users。
$ chown -R oracle.users /his
chgrp命令
功能:改动文件或目录所属的组。
语法:chgrp [选项] group filename
该命令改动指定指定文件所属的用户组。其中group能是用户组ID,也能是/etc/group文件中用户组的组名。
文件名是以空格分开的要改动属组的文件列表,支持通配符。如果用户不是该文件的属主或终极用户,则不能改动该文件的组。
该命令的各选项含义为:
- R 递归式地改动指定目录及其下的所有子目录和文件的属组。
例1:$ chgrp –R book/opt/local /book
改动/opt/local /book/及其子目录下的所有文件的属组为book。