Linux系统下文件或目录的权限
Linux是一个优秀的多用户系统,其严格的权限机制确保了其安全性,所以大部分人很少听到Linux系统下的安全事故。下面我们来了解下Linux系统下文件或目录的权限。
基础知识
Linux下,可以从文件的角度将用户分为3类:
用户 | 对应的字符表示 |
---|---|
文件创建者(又称文件所有者) | u |
与文件创建者同组的用户 | g |
其他用户 | o |
注意,我们用 a 表示所有用户。
Linux下,文件或目录的权限分为:
文件或目录的权限 | 对应的字符表示 | 对应的数字表示 |
---|---|---|
读 | r | 4 |
写 | w | 2 |
执行 | x | 1 |
注意,0代表没有权限。
查看文件或目录的权限
查看文件和目录的权限可以用两个命令: ll
或 ls -l
1 | sam@sam-WRT-WX9:~/Music$ ls -l hi |
命令返回值中,我们最关心的主要是第一个字段-rw-r--r--
。那么这串鬼符到底啥意思呢?
该字段中的首字符(-)指定该文件的类型,本例中它是一个常规文件。Linux系统下,文件类型主要有四种:普通文件、目录、链接文件、设备。如果ls -l
命令的参数实际是个目录,那么该字段的首字符就是d。文件类型和字符之间的对应关系如下:
文件类型 | 对应的字符 | 备注 |
---|---|---|
普通文件(regular file) | - | 普通文件通常分为两种:纯文本文件(ascii)和二进制文件(binary)。纯文本文件可通过cat命令直接查看内容,而二进制文件不能。需要注意的是,Linux系统并不以文件名中的后缀来区分文件类型(和Windows不一样),比如将test.txt中的.txt去掉,该文件依然能被Linux识别为文本文件 |
目录(directory) | d | 也就是Windows下的文件夹 |
链接文件(link) | l | 类似于Windows下的快捷方式 |
设备(device) | b(块设备文件)、c(字符设备文件) | 设备文件通常分为两种:块(block)设备文件和字符(character)设备文件。块设备(可以简单理解为硬盘)用于存储数据并提供系统存取接口,字符设备是一些串行端口的接口设备(比如键盘鼠标) |
1 | sam@sam-WRT-WX9:/dev$ ls -l | grep cpu_dma_latency #用ls -l查看cpu_dma_latency的文件类型,输出结果中的首字符为c,说明是字符设备文件 |
该字段的其余部分由三个三元组字符组成。第一个三元字符组代表文件创建者的权限,第二个代表与文件创建者同组的用户的权限,第三个代表所有其他用户的权限。
本例中,文件创建者对该文件具有读、写权限,与文件创建者同组的用户和所有其他用户具有读权限。
修改文件或目录的权限
修改文件和目录的权限可以用chmod
命令。我们来看几个例子:
1 | chmod 777 update.sh # 所有用户都将获得对update.sh文件的读、写、执行权限 |
这里的7是什么意思呢?通过这个等式就很容易理解了:7 = 4(读)+2(写)+1(执行)
第一个7对应着文件创建者,第二个7对应着与文件创建者同组的用户,第三个7对应者其他用户。这三类用户就是Linux下的所有用户了。也就是说系统中,所有用户都将获得对该文件的全部权限。
1 | chmod 750 update.sh |
chomd
可以配合加减号,来形象地表示权限赋予和剥夺操作。“+”表示添加权限,“-”表示取消权限。
1 | chmod a-x # 所有用户将对失去对该文件的执行权限 |