Linux 的文件权限与目录配置

Linux中将文件可存取的有三种身份,分别为owner,group,others。

使用者与群组

文件所有者(owner) 和 其他人(others) 顾名思义很简单。群组(group)最有用的功能是用于团队开发资源,一个群组有多个成员,一个成员可以属于多个群组。比较特殊的是 root 用户,root用户可以管理系统中的任何文件。
使用者和群组的记录文件:

  • /etc/passwd,这个文件中有用户的相关信息
  • /etc/shadow,这个文件中存储用户的密码
  • /etc/group,这个文件存储组名
  • /etc/gshadow,这个文件是/etc/group的加密资讯文件,比如用户组(Group)管理密码就是存放在这个文件。

Linux 文件权限概念

Linux 文件属性

先列出一个文件

[root@centos764 ~]# ls -l learn.txt
-rw-r--r--.  1   root    root      0     9月   8 14:09  learn.txt
[    1    ][ 2 ][  3  ][  4   ][   5   ][      6      ][    7    ] 
[   权限  ][连结][拥有者][ 群组 ][文件容量][   修改日期  ][  文件名  ]

第一栏代表文件的类型和权限(permission):

  • 第一栏第一个字符代表这个文件是目录、文件、链接文件等,详情见表:

代码

含义

d

代表为目录

-

代表为文件,此例中为[-],所以learn.txt是文件

l

代表为连结档(link file)

b

代表装备文件里面可供存储的接口设备(U盘等)

c

代表装置文件里面的串行端口设备,例如键盘、鼠标

  • 接下来的字符中,三个一组 ,且为[rwx]三个参数的组合。[r] 代表可读(read),[w] 代表可写(write),[x] 代表可执行(execute)。如果没有权限则用减号[-]
  • 第一组为文件所有者具有的权限,以learn.txt 为例,该文件拥有者可以读、写该文件,但不能执行该文件
  • 第二组为加入该群组的账号的权限
  • 第三组为 others 的权限

第二栏表示有多少文件名连结到此节点(i-node)

每个文件都会将他的权限与属性记录到文件系统的i-node中,在目录树的文件系统中用文件名来记录文件,每一个文件名会连结到一个i-node中。这个属性记录的是有多少个不同的文件名连结到相同的i-node号码(即一份文件有多少个文件名)。

第三栏代表文件的所有者(owner)

在此例中,learn.txt文件的拥有者为root

第四栏代表文件所属的群组(group)

在此例中,learn.txt文件所属群组为root

第五栏代表文件大小

单位默认为bytes,learn.txt是一个空文件

第六栏代表文件的建立日期或最近的修改日期

如果想要显示完整的时间,使用ls -l --full-time 命令,此例中若要显示完整时间执行命令 ls -l --full-time learn.txt

第七栏代表文件名称

比较特殊的如果文件名称已『 . 』开头,则该文件为隐藏文件。用ls -al 可以显示隐藏文件,比如 .bashrc 就是一个隐藏文件。

改变文件的属性与权限

常见的改变文件属性与权限的命令如下,其中修改文件所属群组、所有者,通常是root用户操作的

  • chgrp:修改文件所属群组(group)
  • chown:修改文件所有者(owner)
  • chmod:修改文件权限

修改文件所属群组,chmod

命令格式

[root@centos764 ~]# chgrp [-R] newgroup dirname/filename  
选项与参数: 
-R : 进行递归(recursive)的持续变更,亦即连同次目录下的所有文件、目录      都更新成为这个群组之意。常常用在变更某一目录内所有的文件之情况。

注意的是 newgroup 是/etc/group中存在的群组。
范例:

[root@centos764 ~]# ls -l learn.txt
-rw-r--r--. 1 root root 0 9月   8 14:09 learn.txt
[root@centos764 ~]# chgrp admin learn.txt
[root@centos764 ~]# ls -l learn.txt
-rw-r--r--. 1 root admin 0 9月   8 14:09 learn.txt

修改文件拥有者,chown

命令格式

[root@centos764 ~]#chown [-R] newowner dirname/filename
[root@centos764 ~]#chown [-R] newowner:newgroup dirname/filename
选项与参数: 
-R : 进行递归(recursive)的持续变更,亦即连同次目录下的所有文件都变更

chown 命令可以顺便修改文件/目录的组名。

修改权限,chmod

修改权限有两种方式,分别是数字、符号:

采用数字模式修改权限

权限与数字对照表:

字符

数字

r

4

w

2

x

1

命令格式:

[root@centos764 ~]# chmod [-R] xyz filename/dirname 
选项与参数: 
xyz : 就是刚刚提到的数字类型的权限属性,为 rwx 属性数值的相加。 
-R : 进行递归(recursive)的持续变更,亦即连同次目录下的所有文件都会变更

范例,将learn.txt 权限修改为 owner:rwx,group:rwx,others:rw-
rwx = 4 + 2 + 1 = 7, rw- = 4 + 2 = 6,则执行命令 chmod 776 learn.txt

采用字符模式修改权限

命令格式:
chmod [-R] [ugoa] [+-=] [rwx] filename/dirname
u 代表owner, g 代表group,o 代表others,a 代表all,即a = u + g + o
+ 代表加入,-代表去除,=代表设定
范例:

  1. 将learn.txt权限设置为 ower:rw-,group:r–,others:—。

答:chmod u=rw,g=r,o=- learn.txt

  1. 将learn.txt的owner添加x权限,group去掉r权限,others添加r权限

答: chmod u+x,g-r,o+r learn.txt

目录与文件的权限的意义

对一般文件而言 rwx 主要针对文件内容 来设计权限;对于目录来说 rwx 主要针对目录内文件名列表 来设计权限

权限对文件的重要性

权限对文件作用如下:

  • r(read): 可读取此文件的实际内容,如读取文本文件的内容等
  • w(write):可以编辑、新增或者修改文件的内容(但不包含删除该文件)
  • x(eXecute):该文件可以被系统执行的权限

与Windows不同,在Linux中文件是否可以被执行与拓展名无关,在Linux中拓展名仅起作标识的作用,文件是否能被执行与是否具有 x 权限有关。
对于文件的 rwx 仅与文件的内容的有关,与文件名的存在没有关系,因此控制文件是否能够被删除的是目录权限

权限对目录的重要性

文件是存放实际数据的地方,目录的主要内容记录文件名列表。
对于目录来说:

  • r(read contents in directory):读取目录结构列表的权限,具有 r 目录的权限,表示可以查询该目录下的文件名数据,即可以使用 ls 查询
  • w(modify contents of directory):修改目录结构列表的权限,与该目录底下的文件名异动有关即以下权限:
  • 建立新的文件和目录
  • 删除已经存在的文件和目录(无论该文件的权限为何)
  • 将已存在的文件或目录进行更名
  • 移动该目录内的文件、目录
  • x(access directory):用户能否进入该目录成为工作目录。

Linux文件种类与拓展名

文件种类

  • 正规文件(regular file):由ls -al所显示的属性第一个字符为[-],依照文件内容可分为:
  • 纯文本文档(ASCII):人们可以直接读取的数据
  • 二进制文件(binary):系统仅认识且可执行的文件。(scripts,文字性批处理文件不算)
  • 数据格式文件(data):程序运作中读取的某些特定格式的文件(data file)例如 /var/log/wtmp
  • 目录(directory):目录,第一个属性为[d]
  • 连结档(link file):相当于Windows系统中的快捷方式,第一个属性为[l]
  • 设备与装置文件(device):与系统周边及存储相关的文件,通常在/dev这个目录下,通常分为两种:
  • 区块(block)设备档:一些存储数据,提供系统随机存取的接口设备,例如硬盘和软盘
  • 字符(character)设备文件:一些串行端口的接口设备,例如键盘、鼠标
  • 资料接口文件(sockets):第一个属性为[s],通常在网络上进行数据承接,通常在/run或/tmp目录中
  • 数据输送文件(FIFO,pipe):FIFO是一种特殊的文件类型,主要目的在解决多个程序同事存取一个文件所造成的错误问题。FIFO是first-in-first-out的缩写。第一个属性为[p]

Linux 文件拓展名

一个Linux文件能不能被执行与拓展名无关,仅与文件的属性有关。我们通常通过拓展名来了解文件作用

Linux 目录配置

Linux 目录配置的依据–FHS

FHS(Filesystem Hierarchy Standard)的主要目的是让使用者了解到已安装的软件通常在哪个目录下。
FHS定义出三层目录中放什么数据,分别为:

  • /(root, 根目录):跟开机系统有关
  • /usr(unix software resource):与软件安装/执行有关
  • /var(variable):与系统运作有关

目录树(directory tree)

目录树的特性:

  • 目录树的起始点为根目录(/)
  • 每一个目录不仅能使用本地 partition 的文件系统,也可以使用网络上的filsystem
  • 每一个文件在此目录书中的文件名是独一无二的

CentOS 的观察

  • uname -r查看核心版本
  • uname -m查看操作系统位版本