Linux文件属性与权限详解
1.查看linux文件属性与权限
首先登入linux,并使用 下面的命令看看(需要su权限)
ls -al
ls是【list】的意思,显示文件名和相关属性,【-al】是列出包括隐藏文件(文件名第一个字符为【.】时是隐藏文件)的所有文件详细的权限与属性
输出的属性解释如下
drwxr-xr-x. 3 root root 18 4月 24 16:40 .config
文件类型与权限 链接数 文件拥有者 所属群组 大小 最后修改时间 文件名
第一列代表文件类型与权限
可以发现,有十个字符
-
第一个字符代表文件的类型
- 当为【d】则是目录
- 当为【-】则是文件
- 当为【l】则是链接文件(link file)
- 当为【b】则是表示装置文件里面可供存储的接口设备,即可随机存取装置
-当为【c】则表示装置文件里的串行端口设备,如键盘、鼠标等一次性读取装置
-
接下来以三个字符为一组,且取值只能在r(可读)、w(可写)、x(可执行)。这三个字符位置不会改变,如果没有相关权限则显示为【-】
- 第一组为文件拥有者的权限,如上例为rwx,代表对于文件拥有者root来说,可读可写可执行
- 第二组为所属群组的权限,上例为r-x,代表文件属于root群组,且该群组的权限为可读可执行但不可写。
- 第三组为相对于文件所属群组的其他人的权限,同上。
第二列表示有多少文件链接到此节点(i-node)
每个文件都会将他的权限和属性记录到文件系统的i-node,由于linux使用的目录树是使用文件名来记录,因此每个档名就会链接到一个i-node,这个属性即记录有多少不同的档名链接到相同的一个i-node。
第四列代表文件所属群组
相对于文件所属的群组,如果不在群组的账号权限是第一列的最后三位权限
第五列表示这个文件的容量大小,默认单位bytes
第六列代表最近修改日期
如果时间太久,就会只显示年份。如果想要完整的时间格式,可以用
ls -l --full-time
来显示完整的时间
对于更详细的ls用法,使用【ls --help】或【man ls】或【info ls】来查看官方的文档。
2.linux改变文件属性与权限
在学习修改权限之前,一定要搞清什么数据是可变的,什么是不可变的
常用指令如下:
- chgrp 改变文件所属群组
- chowm 改变文件所有者
- chmod 改变文件的权限,SUID,SGID,SBIT等特性
改变所属群组,chgrp
chgrp即change group。现在,新建一个测试文件:
touch test.txt
新建文件无任何输出,linux的理念就是没有反馈信息就是最好的运行成功信息
来用【ls -al】看一下该文件的属性
在改变群组之前,先学习一下chgrp用法:
chgrp [-R] group dirname/filename ...
选项-R:进行递归操作,即连同此目录下的所有文件、目录都改变。
将test.txt的群组改变为users并查看**(注意群组必须在/etc/group存在)**:
chgrp users test.txt
ls -al
那如果改变在一个/etc/group里没有的群组:
便会报错invaild group(默认语系是英文时。上图默认语系是中文)
改为文件拥有者 chown
用法与改变群组完全一致,只不过把chgrp换为chown。
chown比chgrp还多一个功能就是他可以同时改变文件所有者及所属群组:
chown [-R] 用户名:组名 文件或目录
这种用法也可以
chown [-R] 用户名.组名 文件或目录
也可直接修改群组
chown [-R] .组名 文件或目录
同样,用户名需要在/etc/passwd中有记录。
改变权限,chmod
权限设定方法有两种,一种是数字一种是rwx符号。
- 数字类型改变权限
rwx分别对应如下数字分数:
符号 | 分数 |
---|---|
r | 4 |
w | 2 |
x | 1 |
前面提到,每三个符号为一组权限,我们只需要累加即可,如rwx=4+2+1=7,r-x=4+1=5
linux文件基本权限设定了三组,即owner/group/others,三个身份都有各自的权限,假设一组权限是【-rwxrwx—】则:
owner = rwx = 4+2+1 = 7
group = rwx = 4+2+1 = 7
others = — = 0+0+0 = 0
因此该权限为770,那么以数字方式改变权限语法:
chmod [-R] xyz 文件或目录
xyz即为数字分数
将test.txt改为完全的权限即777:
chomd 777 test.txt
可以看到权限已经是【-rwxrwxrwx】
- 符号类型改变文件权限
linux将文件权限分为三种身份user、group、others,那么可以借u、g、o来表示 ,用a表示all,那么用符号改变的方式如下:
将test.txt设定为【-rwxr-xr-x】,则:
user(u): 具有读写执行权
group(g)、others(o)具有读与执行权
chmod u=rwx,go=rx test.txt
或者
chmod u=rwx.g=rx,u=rx test.txt
如果不清楚原先的属性,只需要对每个增加可写权限,就可以这样:
chmod a+w test.txt
如果拿掉权限就是【-】,要直接设定权限就用【=】
3.目录与文件之权限意义
权限对文件的重要性
文件是实际含数据的地方,对于文件来说:
- r 可以读取此文件的内容
- w 可以编辑、新增、或修改文件的内容,但不包含删
- x 该文件可以被系统执行
对于【x】可能不太好理解,在windows下,一个文件能否被执行是靠扩展名如.exe,.bat等来判断,但在linux下,是靠是否有【x】来判断,与文件名无关。
对于【w】是没有删除权限的
权限对目录的重要性
对于目录来说
- r 表示具有读取目录结构列表的权限
- w 表示你具有异动该目录结构列表的权限,也就是:
- 建立新的文件与目录
- 删除已经存在的文件与目录(不论该文件的权限如何)
- 将已存在的文件或目录更名
- 移动该目录的文件、目录位置
- x 代表用户能否进入该目录为工作目录。所谓工作目录即代表你当前所在的目录,也就是你需要cd改变到一个目录的话,你需要x权限
下表可以解释权限对文件和目录的区别
请注意,如果你在某目录不具有x权限,那么你就无法切换到该目录,无法执行该目录下的任何指令,即使你有该目录的r或w权
要开放目录给人浏览时,至少给予r和
x权,但不要随便给w权!
上述强调,x在目录中是与【能否进入该目录】有关,w可以让使用者删除、更新、新建文件或目录
例如有两个档名:
- /dir1/file1
- /dir2
假设你使用非roor用户(root用户无视权限),下图列了你完成某些操作所需的最小权限:
4.linux文件种类与扩展名
文件种类
- 正规文件
第一个字符为【-】,可分为- 文本文档(ASCII)
- 二进制文件(binary)
- 数据格式文件(data)
- 目录
第一个字符为【d】 - 链接档
即快捷方式,第一个字符为【l】 - 设备与装置文件
- 区块设备档,如硬盘或软盘,放在/dev/sda下,字符为【b】
- 字符设备文件,如键盘鼠标,字符为【c]
- 资料接口文件
字符为【s】,即套接字,在/run或/tmp可以看到 - 数据传输文件
FIFO,字符为【p】
linux文件扩展名
前面提到过,linux没有扩展名的,能不能执行只看是否有【x】权,而我们看到的扩展名只是帮助人类判断这个文件是干嘛的,如.sh是脚本,.tar是压缩包,只是帮助人类识别。
以上内容根据《鸟哥的Linux私房菜-基础学习篇(第四版(Linuxidc.com))》有删改