Linux系统是个多用户,多任务的系统。既然是多人模式,肯定要有所区分。为了保障系统安全,为了使多用户特性付诸实践,那么必须发明一种方法来阻止用户彼此之间受到影响。毕竟,一个 用户的行为不能导致计算机崩溃,也不能乱动属于另一个用户的文件。

这边我们一起学习下,文件权限。

Linux每个用户必须属于一个组,linux每个文件有拥有着,组成员,和其它人的概念(当然root是无敌的,整个系统都是它的)

读取,写入,和执行

我们通过命令 ls -al查看下文件权限

drwxr-xr-x  2 itest  test 4096 1月  24 10:02 htdocs
-rw-r--r--  1 itest  test    0 1月  24 10:02 test.txt

在解析这些结果的含义前,我们先了解下其他的知识:

在linux下文件权限的    r:表示可读,数字为4  w:表示可写,数字为2  x:表示可执行,数字为1

我们分开下这一大串的含义,我们一般以7个区段去解读:

drwxr-xr-x  2 itest  test 4096 1月  24 10:02 htdocs
第一区段(drwxr-xr-x):d表示目录,d后面的rwx表示文件的拥有者有可读可写可执行的权限,drwx后面的r-x表示文件拥有者所在组的其他组成员可读不可写可执行权限,drwxr-x后面的r-x表示不在文件拥有者所在的组的其它成员拥有可读不可写可执行权限
第二区段(2):表示文件连接数,被引用次数
第三区段(itest): 表示文件的拥有者
第四区段(test):表示文件的拥有者所在的组
第五区段(4096):表示文件或者目录的大小
第六区段(1月  24 10:02):表示文件最后修改时间
第七区段(htdocs):表示文件名

这一段-rw-r--r-- 1 itest test 0 1月 24 10:02 test.txt除了第一个-表示普通文件之外其他的与上面一个例子一样意思。

看完简单例子,我们再系统学下:列表前十个字符表示文件的属性,第一个字符表示文件类型

文件可能的几个类型:

* - 一个普通文件
* d 一个目录
* l  一个符号链接(软链接文件)。注意对于符号链接文件,剩余的文件属性总是"rwxrwxrwx",而且都是 虚拟值。真正的文件属性是指符号链接所指向的文件的属性,类似 Windows 系统的快捷方式,删除了并不会影响源文件。
* c 一个字符设备文件。这种文件类型是指按照字节流,来处理数据的设备。 比如说终端机,或者调制解调器
* b  一个块设备文件。这种文件类型是指按照数据块,来处理数据的设备,例如一个硬盘,或者 CD-ROM 盘。
* s 一个套接字文件
* p 一个管道文件

剩下的九个字符,叫做文件模式,代表着文件所有者,文件组所有者,和其他人的读,写,执行权限。

分别代表

owner   group   world
rwx      rwx     rwx

权限属性:

r: 如果是文件表示允许打开并读取文件内容。如果是目录允许列出目录中的内容,前提是目录必须设置了可执行属性(x)。
w:如果是文件允许写入文件内容或截断文件。但是不允许对文件进行重命名或删除,重命名或删除是由目录的属性决定的。如果是目录允许在目录下新建、删除或重命名文件,前提是目录必须设置了可执行属性(x)。
x:如果是文件允许将文件作为程序来执行,使用脚本语言编写的程序必须设置为可读才能被执行。如果是目录允许进入目录,例如:cd directory 。

chmod 更改文件模式

更改文件或目录的模式(权限),可以利用 chmod 命令。注意只有文件的所有者或者超级用户才 能更改文件或目录的模式。chmod 命令支持两种不同的方法来改变文件模式:八进制数字表示法,或 符号表示法。首先我们讨论一下八进制数字表示法。

我们看下八进制,二进制以及文件模式的映射关系。

八进制   二进制   文件模式(rwx)

0              000       ---
1              001       --x
2              010       -w-
3              011       -wx
4              100       r--
5              101       r-x
6              110       rw-
7              111       rwx

示例:

chmod 777 test   //我们把目录test的可读可写可执行权限给所有用户
chmod 764 test  //文件目录权限:文件拥有者可写可读可执行,文件拥有者所在组成员可读可写不可执行,其他用户只有读取权限

我们再看下符号表示法的使用方法和含义:

* u "user"的简写,意思是文件或目录的所有者。
* g 用户组。
* o "others"的简写,意思是其他所有的人。
* a "all"的简写,是"u", "g"和“o”三者的联合。

如果没有指定字符,则假定使用”all”。执行的操作可能是一个“+”字符,表示加上一个权限, 一个“-”,表示删掉一个权限,或者是一个“=”,表示只有指定的权限可用,其它所有的权限被删除。

我们看几个符号表示的实例:

u+x   为文件所有者添加可执行权限。
u-x   删除文件所有者的可执行权限。
+x  为文件所有者,用户组,和其他所有人添加可执行权限。 等价于 a+x。
o-rw  除了文件所有者和用户组,删除其他人的读权限和写权限。
go=rw  给组的其它成员和文件拥有者读写权限。如果已经有了执行的权限,他们将被移除。
u+x,go=rw 给文件拥有者执行权限并给组和其他人读和执行的权限。多种设定可以用逗号分开。

文件权限不仅仅只有这几种模式,这边介绍的都是一些简单文件权限还有一些特殊权限需要看详细文档学习。

我们还可以通过命令 chgrp 更改文件用户组所有权

chgrp更改文件用户组

使用示例:

chgrp groupname filename  //chgrp  新组名   文件名

也可以通过chown更改文件的所有者

chown 更改文件的用户组和拥有者

chown username filename  // chmod  新拥有者名称  文件名
chown -R username.groupname filename  //把目录下所有的文件,子目录下的文件改变拥有者和用户组
chown username.username filename  //改变文件拥有者和组
chown username: filename  // 改变文件拥有者和群组
chown :username filename  //改变文件用户组

chown语法示例:

chown [选项]... [所有者][:[组]] 文件...

参数说明:

-c 显示更改的部分的信息
-f 忽略错误信息
-h 修复符号链接
-R 处理指定目录以及其子目录下的所有文件
-v 显示详细的处理信息
-deference 作用于符号链接的指向,而不是链接文件本身

stat 查看文件详细信息

stat filename #查看文件的详细信息,文件的访问时间、修改时间、改变时间,linux 文件没有创建时间

chattr 命令

chattr +i index.php #设置文件不允许修改、删除、移动、复制,root 用户也生效

chattr -i index.php #取消文件属性设置

lsattr 命令

lsattr filename or dirname #查看文件或目录的属性性