在Linux系统中,文件和目录的权限管理是保障系统安全的核心机制,通过合理的权限设置可以控制用户对资源的访问范围,查看权限是日常运维和开发中的基础操作,掌握多种查看方法能更高效地排查权限问题,本文将详细介绍Linux中查看权限的各类命令、权限表示方法及实际应用场景。
基础权限查看:ls
命令
ls
(list)是Linux中最常用的文件列表命令,通过组合不同选项可查看详细的权限信息。
基本语法与核心选项
执行ls -l
(长格式输出)会显示文件的详细属性,输出结果通常包含7个字段,以-rwxr-xr-x
为例,各字段含义如下:
-
第1位:文件类型
:普通文件d
:目录l
:符号链接b
:块设备文件(如硬盘)c
:字符设备文件(如键盘)p
:管道文件s
:套接字文件 -
第2-10位:权限位,分为3组,每组3位,分别代表所有者(User)、所属组(Group)、其他用户(Others)的权限:
r
(read,读):可读取文件内容(文件)或列出目录内容(目录)w
(write,写):可修改文件内容(文件)或在目录中创建/删除文件(目录)x
(execute,执行):可执行文件(文件)或进入目录(目录)
示例
-rwxr-xr-x
:- 所有者:
rwx
(读、写、执行) - 所属组:
r-x
(读、执行) - 其他用户:
r-x
(读、执行)
-
第11位:硬链接数(指向同一inode的文件数量)
-
第12-13位:所有者(文件所属用户)
-
第14-15位:所属组(文件所属用户组)
-
第16-17位:文件大小(字节,默认显示数字,需
-h
选项转为人类可读格式,如0K
) -
第18-19位:最后修改时间(格式为“月 日 时:分”或“年 月 日”取决于修改时间远近)
-
第20位:文件名
常用ls
选项组合
选项 | 功能描述 | 示例 |
---|---|---|
-a |
显示所有文件(包括隐藏文件,以开头) | ls -la |
-h |
以人类可读格式显示文件大小(K 、M 、G ) |
ls -lh |
-d |
显示目录本身权限,而非目录内容 | ls -ld /etc |
-R |
递归显示目录及其子目录内容 | ls -R /var/log |
-n |
以数字形式显示UID(用户ID)和GID(组ID),而非用户名/组名 | ls -ln |
详细权限查看:stat
命令
ls -l
仅显示基础权限位,而stat
命令可提供更详细的权限信息,包括访问时间、修改时间、状态改变时间等,并支持八进制权限表示。
基本语法
stat [选项] 文件/目录
输出解析
以stat test.txt
为例,关键输出字段:
- Size:文件大小(字节)
- Access:最后访问时间(atime)
- Modify:最后修改时间(mtime,内容改变时更新)
- Change:状态改变时间(ctime,权限、所有者等属性改变时更新)
- Mode:权限信息,包含符号表示(如
-rw-r--r--
)和八进制表示(如0644
)
八进制权限表示
权限位可通过数字简化表示,规则为:
r
= 4w
= 2x
= 1- 无权限 = 0
将所有者、所属组、其他用户的权限数字相加,得到八进制权限:
| 权限组合 | 所有者 | 所属组 | 其他用户 | 八进制 |
|———-|——–|——–|———-|——–|
| rwx
| 4+2+1=7 | 4+2+1=7 | 4+2+1=7 | 777 |
| rw-r--r--
| 4+2+0=6 | 4+0+0=4 | 4+0+0=4 | 644 |
| rwxr-xr-x
| 7 | 5 | 5 | 755 |
stat
命令的Mode
字段会直接显示八进制值(如0600
),方便快速修改权限(如chmod 644 test.txt
)。
特殊权限查看
除基础权限外,Linux还支持SUID、SGID、Sticky Bit三种特殊权限,它们通过权限位的s
或t
标识。
特殊权限类型
- SUID(Set User ID):仅对可执行文件有效,执行时以文件所有者权限运行(如
/usr/bin/passwd
,所有者为root
,普通用户执行时临时获得root
权限修改密码)。- 权限位标识:所有者
x
位改为s
(如rwsr-xr-x
,八进制4755
)。
- 权限位标识:所有者
- SGID(Set Group ID):对可执行文件或目录有效,执行时以文件所属组权限运行;对目录有效,目录中新创建的文件自动继承目录所属组。
- 权限位标识:所属组
x
位改为s
(如rwxr-sr-x
,八进制2755
)。
- 权限位标识:所属组
- Sticky Bit:仅对目录有效,目录中的文件仅所有者或
root
可删除(如/tmp
,防止普通用户误删他人文件)。- 权限位标识:其他用户
x
位改为t
(如rwxrwxrwt
,八进制1777
)。
- 权限位标识:其他用户
查看特殊权限
ls -l
:若权限位中有s
或t
(小写s
表示x位正常,大写S
表示x位被禁用),如chmod u=s test.txt
(禁用x位后显示为rwS
)。stat
:在Mode
字段中明确标识,如Mode: (4755/-rwsr-xr-x) 1000000000000000000000000000000000000000
,其中4
代表SUID。
ACL(访问控制列表)权限查看
基础权限仅支持所有者、所属组、其他用户三类,ACL可针对特定用户或组设置更精细的权限。
查看ACL权限
使用getfacl
命令:
getfacl [选项] 文件/目录
示例输出:
# file: test.txt # owner: user1 # group: group1 # flags: -s- # 表示启用SGID user::rw- # 所有者权限:读写 group::r-- # 所属组权限:读 other::r-- # 其他用户权限:读 user:user1:rw- # 特定用户user1权限:读写 group:group1:rwx # 特定组group1权限:读写执行
ACL生效条件
- 文件系统需支持ACL(如ext4、xfs,通过
mount | grep ext4
查看是否包含acl
选项)。 - 需通过
setfacl -m u:user1:rw test.txt
手动设置ACL权限。
目录与文件权限的核心区别
目录的权限逻辑与文件有本质区别,需重点理解:
- 目录的
r
权限:允许使用ls
列出目录内容(如ls /etc
),但无法进入目录(需x
权限)。 - 目录的
w
权限:允许在目录中创建、删除、重命名文件(无论文件自身权限如何),但仅限文件所有者或root
(需配合x
权限)。 - 目录的
x
权限:允许使用cd
进入目录(如cd /etc
),是访问目录内容的“通行证”,无x
权限时,即使有r
权限也无法列出目录内容(仅能显示目录名)。
示例:
# 查看目录权限 ls -ld /tmp # 输出:drwxrwxrwt 10 root root 4096 May 10 10:00 /tmp # 解释:所有者/所属组/其他用户均有rwx权限,且Sticky Bit(t)生效,防止普通用户误删/tmp中他人文件。
常见场景与命令组合
查看当前目录所有文件的权限(含隐藏文件)
ls -la
查看特定文件的八进制权限
stat -c "%a %n" test.txt # 输出:644 test.txt
递归查看目录及其子目录权限,并以数字形式显示
ls -lnR /var/log
查看并过滤包含特定权限的文件(如所有者有执行权限)
ls -l | grep "^-..x"
相关问答FAQs
Q1:为什么目录没有x权限时,即使有r权限也无法使用ls列出内容?
A:Linux中,目录的r
权限仅允许“读取目录名称”,而x
权限是“访问目录内容”的必要条件,当用户对目录无x
权限时,系统禁止其“打开”目录,因此无法读取目录下的文件列表(即使有r
权限),若/test
目录权限为drwxr--r--
,普通用户可执行ls -ld /test
(查看目录自身信息),但无法执行ls /test
(列出目录内容),因为缺少x
权限。
Q2:如何快速查看文件的权限数字表示,并判断是否有特殊权限?
A:使用stat
命令的-c
选项可自定义输出格式,
stat -c "%a %A %n" test.txt
输出示例:755 -rwxr-xr-x test.txt
,其中%a
显示八进制权限(755),%A
显示符号权限(-rwxr-xr-x),若权限位中包含s
或t
(如4755
或1777
),则说明存在SUID/Sticky Bit等特殊权限。ls -l
中权限位的s
或t
标识也可直观判断特殊权限存在。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/26295.html