03. Linux文件权限与目录配置
1. 用户与用户组简介
1)作用
用户与用户组就是用于描述用户与文件的关系,即所有者(User)、同组(Group)、其他人(Other)
说明1:Linux中每添加一个用户,就会默认添加一个和该用户名相同的组,作为该用户的初始组(/etc/passwd文件中指出的就是这个初始组ID)
说明2:一个用户可以加入多个用户组
2)相关配置文件
用户信息文件:/etc/passwd
影子文件:/etc/shadow
组信息文件:/etc/group
组密码文件:/etc/gshasow
说明:在后续Linux用户管理笔记中将详细介绍这些配置文件
2. Linux文件权限解析
1)3个身份和3种权限
3个身份:owner group others
3种权限:read write execute
2)权限各字段解释
A. 文件类型
-:普通文件
具体的种类可以用file命令查看,一般可分为,
① 纯文本文件,编码集可以是ASCII、UTF8等
② 二进制文件(binary)
③ 数据格式文件(data),这属于一种特殊格式的文件,由特定的程序读取处理
e.g. last命令使用的/var/log/wtmp文件
查看wtmp的man手册可知,该文件就是将登陆信息组织为结构体存储
d:目录文件
l:链接文件(软连接)
b:块设备文件
c:字符设备文件
s:套接字文件
p:管道文件(有名管道)
B. 文件权限
rw-r--r--就是3个身份的3种权限
C. 文件链接数
表示有多少文件名链接到标识该文件的inode。Linux中每个文件都会将他的权限与属性记录到inode中,即文件系统是以inode来管理文件的;而目录是以文件名来管理文件的。
目录的block中记录的就是目录中的文件名与inode的对应关系,因此在实现层面,每个文件名都会关联到一个inode,也就有了此处的文件链接数。
说明:空目录的链接数为什么是2?
根据链接数的说明,一定是有2个文件名关联到了同一个inode,这2个文件名正式empty_dir和该目录下的 .
由此可以讨论下在A目录中新建目录,对A目录链接数的影响。假设在A目录下新建B目录,那么B目录的初始链接数为2;而B目录下.. 文件和A目录关联的inode相同,所以A目录的链接数会加1
D. 文件所有者
E. 文件所属用户组
文件的默认用户组为创建该文件用户的初识组
F. 文件大小,默认以B为单位,可以使用-h选项进行人性化显示
G. 文件内容最后修改时间
注意:Linux中有三个时间,文件最后获取时间(access time)、文件内容最后修改时间(modify time)、文件属性最后修改时间(change time)。实际上Linux中没有所谓文件创建时间。
后续笔记中将看到,修改文件属性涉及的是inode,修改文件内容涉及的是block
H. 文件名
注:如果以. 开头,是隐藏文件
3)创建文件/目录的缺省权限
所有者:文件创建者
所属组:文件创建者的初始组(每个用户可以属于多个组,但初识组只有一个)
权限:通过umask命令管理
命令名称:umask
命令英文愿意:the user file-creation mask
命令所在路径:shell内置命令
执行权限:所有用户
语法:umask [-S]
umask 新文件权限掩码
-S:以rwx形式显示新建文件缺省权限掩码
功能描述:显示、设置文件的缺省权限掩码
root的umask为0022,即在创建文件/目录时会取消group和other的w权限。当然,在创建文件时,默认不具备x权限。
注意:普通用户默认的umask值为0002
说明:关于设置文件权限掩码
使用umask命令设置文件权限掩码只能在shell中暂时生效,要想永久修改需要修改脚本(比如/etc/bashrc,该脚本中会根据不同的UID设置不同的umask;也可以修改各用户家目录下的.bashrc)
3. 文件与目录的权限意义
关键:rwx权限对文件[-]和目录[d]的意义不同
核心:文件和目录(目录也是文件),均将权限属性记录在inode中,实际数据记录在block中。所谓rwx权限就是通过inode中的信息,控制不同用户对block的访问。
造成文件与目录不同的原因就是文件的block中记录的是文件的数据,而目录的block中记录的是该目录中文件名与inode的对应关系
代表字符 |
权限 |
对文件的意义 |
对目录的意义 |
r |
读权限 |
可以查看文件内容 |
可以列出目录中的内容 |
w |
写权限 |
可以编辑/新增/修改文件内容 |
可以在目录中创建/删除/重命名文件 |
x |
执行权限 |
可以执行文件(只是有执行的权限,是否执行成功另当别论)
|
可以进入该目录将其作为工作目录(work directory)
|
说明1:rwx权限不能限制root用户
e.g. /etc/shadow文件的权限为000,但是root用户依然可以编辑
说明2:如果只是拥有一个目录的r 权限而没有x 权限,在使用ls 显示目录内容时可能仍无法成功
首先在/home/chencheng目录中新建test目录,并在其中touch 2个文件1.c和2.c,然后修改test目录权限为444使得用户失去x权限,然后使用ls查看该目录的内容。
分析:原因可能是ls的实现需要进入目标目录,但此时用户没有x权限
4. 修改文件的属性与权限
1)chgrp命令
命令名称:chgrp
命令所在路径:/bin/chgrp
执行权限:所有用户
功能描述:改变文件或目录的所属组
语法:chgrp [-R] 组名 文件名/目录名
-R:递归修改目录下的所有文件/目录
注意1:只有root用户可以进行此操作(不然可以随便给其他用户组添加文件了~~)
注意2:组名必须在/etc/group文件中,否则报错
2)chown命令
命令名称:chown
命令所在路径:/bin/chown
执行权限:所有用户
功能描述:改变文件所有者和所属组
语法:chown [-R] 用户名[: 组名] 文件名/目录名
-R:递归修改目录下的所有文件/目录
使用场景:root用户把自己的文件复制给普通用户(cp会保留文件的所有者和所属组),为了让普通用户能修改这个文件,root用户应当把这个文件的属主修改为那个普通用户
注意1:只有root用户可以进行此操作
注意2:chown可以仅修改用户名,也可以同时修改组名,此时以分号分割用户名和组名
注意3:用户名必须在/etc/passwd文件中,否则报错
3)chmod命令
命令名称:chmod
命令所在路径:/bin/chmod
执行权限:所有用户
功能描述:改变文件或目录的权限
语法:①数字法;②字母法
数字法比较熟悉,不再详解
字母法规则如下:
示例:chmod u=rwx,go=rx .bashrc
注意1:u=rwx,go=rx是连在一起的,中间没有空格
注意2:只有root用户和文件所有者可以修改文件权限
注意3:加-R选项可以进行递归修改
5. Linux文件名限制
1)文件名长度限制(ext2/ext3)
① 单一文件或目录文件名最长255个字符
② 包含完整路径最长4096个字符
2)文件名字符限制
由于Linux在文件界面下的一些命令操作的关系,一般情况下文件名字应避免以下特殊字符:
* ? < > ; & ! [ ] | \ ' " ( ) { }
还有文件名最好不以-开头,否则容易和命令选项混淆
6. Linux目录配置
注:Linux目录配置遵循FHS标准(Filesysytem Hierarchy Standard)
1)目录定义的四种交互形态
可/不可分享:该目录是否可以分享给其他系统挂载使用(比如通过NFS供其他机器挂载),不可分享的内容都是仅与自身机器有关
可/不可变动:该目录中的数据是否经常变动
2)FHS规则简介
FHS仅定义了三个目录应该放置的数据
/:根目录,与开机系统有关
/usr:UNIX software resource,与软件安装/执行有关
/var:variable,与系统运行过程有关
说明1:所有目录都由根目录衍生而来
说明2:根目录还与开机、还原、修复等操作相关。由于开机时需要特定的开机软件、内核文件、开机所需程序、函数库等文件数据;若系统出现错误时根目录也必须包含有能够修复文件系统的程序。
说明3:为了性能和稳定性,根目录所在分区越小越好
说明4:开机过程中仅有根目录会被挂载,其他分区则是开机完成后才会挂载。因此,根目录下与开机过程有关的目录必须和根目录在同一分区,包括
/etc:配置文件
/bin:重要执行文件
/dev:所需要的设备文件
/lib:执行文件所需的函数库和内核所需的模块
/sbin:重要的系统执行文件
说明5:关于/usr目录
① 所有系统默认的软件(distribution发布者提供的软件)都在/usr目录下
② 系统管理员自行下载安装的软件(非distribution默认)建议安装在/usr/local目录中
3)Linux目录简表
注:详细表格见《鸟哥的Linux私房菜:基础学习篇》P153 ~ 157
7. 绝对路径和相对路径
1)绝对路径:由根目录写起的路径
绝对路径的用途:绝对路径正确性好,如果使用相对路径在程序中,可能由于执行的工作环境不同,导致一些问题发生。
2)相对路径:相对于当前位置的路径
相对路径的用途:
① 一般在安装软件时使用。比如一个软件需要etc、bin、man这三个目录,但有些人喜欢将软件安装在/usr/local/packages/etc、/usr/local/packages/bin和/usr/local/packages/man下,有些人喜欢安装在/home/packages/etc、/home/packages/bin和/home/packages/man目录下,此时使用相对路径可以使得安装更方便。
② 使用相对路径可以避免写很长的路径名
8. 查看Linux distribution信息
命令名称:uname
命令所在路径:/bin/uname
执行权限:所有用户
功能描述:显示系统信息
语法:uname [-asr]
-a:显示所有信息
-s:显示内核类型
-r:显示内核发行版本