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
+ 代表加入,-代表去除,=代表设定
范例:
- 将learn.txt权限设置为 ower:rw-,group:r–,others:—。
答:
chmod u=rw,g=r,o=- learn.txt
- 将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
查看操作系统位版本