Linux文件基本属性知识点总结
一、文件属性的查看方式
在Linux系统中,我们可以通过ls -l命令查看文件的详细属性信息,该命令会列出当前目录下所有文件的权限、所有者、所属组、大小、修改时间等核心属性。执行命令后得到的输出格式如下:
$ ls -l -rw-r--r-- 1 root root 1024 10月 1 12:00 test.txt drwxr-xr-x 2 user user 4096 10月 2 14:30 docs
上述输出中,第一列就是文件的基本属性信息,后续列分别对应硬链接数、所有者、所属组、文件大小、最后修改时间、文件名。
二、文件属性字段详解
1. 文件类型标识
属性信息的第一位字符代表文件类型,常见的类型及对应标识如下:
-:普通文件,包括文本文件、二进制文件、压缩包等
d:目录文件,即文件夹
l:符号链接文件,相当于Windows系统中的快捷方式
c:字符设备文件,如键盘、鼠标等串行设备
b:块设备文件,如硬盘、U盘等存储设备
p:管道文件,用于进程间通信
s:套接字文件,用于网络进程间通信
2. 权限字段
属性信息的第2到第10位共9个字符,分为3组,每组3位,分别对应文件所有者(u)、所属组(g)、其他用户(o)的权限。每组权限的3位分别代表:
第一位:读权限(r),对应数值4,有该权限则可以查看文件内容或列出目录下的文件
第二位:写权限(w),对应数值2,有该权限则可以修改文件内容或在目录下创建、删除文件
第三位:执行权限(x),对应数值1,有该权限则可以运行程序文件或进入目录
如果对应位置是-,则表示没有该权限。例如rw-r--r--表示所有者有读写权限,所属组和其他用户只有读权限。
3. 特殊权限标识
除了基础的rwx权限外,Linux文件还有3种特殊权限,会在对应权限位上显示为特殊字符:
SUID:出现在所有者的执行权限位,原本的x会变为s(有执行权限)或S(无执行权限),作用是让普通用户执行该文件时临时获得所有者的权限,常见于
/usr/bin/passwd这类修改密码的程序SGID:出现在所属组的执行权限位,原本的x会变为s(有执行权限)或S(无执行权限),作用在文件上时让执行者临时获得所属组的权限,作用在目录上时,目录下新建的文件会自动继承该目录的所属组
SBIT:出现在其他用户的执行权限位,原本的x会变为t(有执行权限)或T(无执行权限),仅对目录有效,作用是目录下用户只能删除自己创建的文件,无法删除其他用户的文件,常见于
/tmp目录
三、修改文件属性的常用命令
1. 修改文件权限:chmod
chmod命令用于修改文件的权限,支持两种设置方式:
一是字符表示法,通过u/g/o/a(all,所有用户)配合+/-/=来添加、删除、设置权限,示例如下:
# 给test.txt的所有者添加执行权限 chmod u+x test.txt # 移除所有用户的写权限 chmod a-w test.txt # 设置所属组权限为读写,其他用户无权限 chmod g=rw,o= test.txt
二是数字表示法,将r/w/x分别对应4/2/1,三组权限的数值相加作为设置值,示例如下:
# 设置权限为rwxr-xr-x,对应数值755 chmod 755 test.sh # 设置权限为rw-r-----,对应数值640 chmod 640 data.conf
2. 修改文件所有者/所属组:chown和chgrp
chown命令可以同时修改文件的所有者和所属组,chgrp仅用于修改所属组,使用示例如下:
# 将test.txt的所有者改为user,所属组改为dev chown user:dev test.txt # 递归修改docs目录及目录下所有文件的所有者为user chown -R user docs/ # 将test.txt的所属组改为test chgrp test test.txt
3. 修改特殊权限
特殊权限可以通过数字表示法设置,在基础3位权限前加第4位数字:SUID对应4,SGID对应2,SBIT对应1,示例如下:
# 设置SUID权限,最终权限为4755 chmod 4755 /usr/bin/example # 设置SBIT权限,最终权限为1777,对应/tmp目录的常用权限 chmod 1777 /tmp/testdir
四、属性查看与修改的注意事项
修改文件所有者和所属组通常需要root权限,普通用户无权限修改不属于自己的文件属性
删除文件时,判断的是用户对文件所在目录是否有写权限和执行权限,而非对文件本身的权限
使用
ls -l查看目录属性时,目录的默认权限通常是755,普通文件的默认权限通常是644,具体由系统的umask值决定修改权限时如果使用递归参数-R,要多加确认,避免误修改系统文件或大量无关文件的权限导致程序运行异常