Linux文件权限是系统安全的核心机制,决定了不同用户对文件的访问操作,查看文件权限是日常管理和排查问题的基础操作,本文将详细介绍Linux中查看文件权限的各种方法、权限位含义及关联知识。
基础查看命令:ls
ls
是Linux中最常用的文件列表命令,结合不同选项可查看详细的权限信息。
ls -l
:显示长格式权限
ls -l
会以长格式列出文件信息,输出结果中每行包含权限、所有者、所属组、大小、修改时间等字段,
-rw-r--r-- 1 user group 1024 Oct 20 10:30 test.txt
drwxr-x--- 2 user group 4096 Oct 20 09:15 Documents/
字段解析(从左到右):
- 第1位:文件类型,表示普通文件,
d
表示目录,l
表示软链接,b
/c
表示块设备/字符设备等。 - 第2-10位:权限位,分3组,每组3位,分别对应用户(User,文件所有者)、组(Group,所属组)、其他(Others,其他用户)的权限,每组顺序为读(r)、写(w)、执行(x)。
- 示例中
-rw-r--r--
:普通文件,用户有读写权限(rw-),组和其他用户只有读权限(r–)。 - 示例中
drwxr-x---
:目录,用户有读、写、执行权限(rwx,目录的“执行”权限表示可进入目录),组有读、执行权限(r-x),其他用户无权限(—)。
- 示例中
- 第11位:硬链接数(普通文件为1,目录的硬链接数包含和,所以通常≥2)。
- 第12-13位:所有者(user)和所属组(group)。
- 后续字段:文件大小(字节)、修改时间、文件名。
ls
常用选项组合
选项 | 作用 | 示例 |
---|---|---|
-a |
显示所有文件(包括隐藏文件,以开头) | ls -la |
-h |
以人类可读格式显示大小(如K、M、G) | ls -lh |
-i |
显示文件的inode号 | ls -li |
-d |
显示目录本身信息(不列出目录内容) | ls -ld Documents/ |
详细权限查看:stat
命令
stat
命令比ls -l
提供更详细的文件元数据,包括精确的时间戳、权限、UID/GID等。
示例输出:
File: test.txt
Size: 1024 Blocks: 8 IO Block: 4096 regular file
Device: 801h/2049d Inode: 131073 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 1000/ user) Gid: ( 1000/ group)
Access: 2023-10-20 10:30:00.000000000 +0800
Modify: 2023-10-20 10:30:00.000000000 +0800
Change: 2023-10-20 10:30:00.000000000 +0800
Birth: -
关键信息:
- Access:权限的八进制表示(
0644
)和符号表示(-rw-r--r--
),八进制中第一位表示文件类型(0
普通文件,4
目录等),后三位对应r=4、w=2、x=1的组合(如6=4+2
即rw-,4=4+0
即r–)。 - Uid/Gid:文件所有者和所属组的数字ID(可通过
/etc/passwd
和/etc/group
查看对应用户名/组名)。 - Access/Modify/Change:
- Access(访问时间):最后一次读取文件内容的时间。
- Modify(修改时间):最后一次修改文件内容的时间。
- Change(状态改变时间):最后一次修改文件元数据(如权限、所有者)的时间。
权限位深入解析
符号权限与八进制权限
权限 | 符号表示 | 八进制值 | 含义 |
---|---|---|---|
读 | r | 4 | 可查看文件内容(文件)/可列出目录内文件(目录) |
写 | w | 2 | 可修改文件内容(文件)/可在目录中创建/删除文件(目录) |
执行 | x | 1 | 可执行文件(文件)/可进入目录(目录) |
组合示例:
rwx
(7):用户权限,可读、写、执行(如所有者权限)。r-x
(5):组权限,可读、执行,不可写。- (0):其他用户无权限。
特殊权限
除了基本rwx权限,Linux还有3种特殊权限,用于特定场景:
特殊权限 | 符号表示 | 八进制值 | 作用 | 示例 |
---|---|---|---|---|
SUID | u=s | 4 | 用户执行时以文件所有者身份运行(仅对可执行文件有效) | /usr/bin/passwd (普通用户修改密码时以root身份执行) |
SGID | g=s | 2 | 用户执行时以文件所属组身份运行;目录设置后,新建文件/目录继承该组权限 | 共享目录(如/project ,确保组内成员统一权限) |
Sticky Bit | o=t | 1 | 仅对目录有效,目录下文件只有所有者或root可删除 | /tmp (防止普通用户删除其他用户文件) |
查看特殊权限:ls -l
中若权限位出现s
或t
,则表示有特殊权限(如rwsr-xr-t
,用户权限位为s
,其他权限位为t
)。
ACL(访问控制列表)精细权限
当需要为特定用户/组设置独立于基本权限的精细权限时,可使用ACL。
查看ACL:getfacl
getfacl test.txt
输出示例:
# file: test.txt
# owner: user
# group: group
# flags: -s- # 表示有SGID权限
user::rw- # 用户权限:rw-
user:alice:r-- # 特定用户alice:r--
group::r-- # 组权限:r--
group:dev:rwx # 特定组dev:rwx
mask::r-- # 掩码(限制有效权限)
other::r-- # 其他用户权限:r--
设置ACL:setfacl
# 给用户alice添加读写权限 setfacl -m u:alice:rw test.txt # 给dev组添加执行权限 setfacl -m g:dev:x test.txt # 移除alice的权限 setfacl -x u:alice test.txt
高级技巧:查找与递归查看
查找特定权限的文件:find
# 查找当前目录下所有用户可读的文件 find . -type f -perm /u+r # 查找权限为755的目录 find . -type d -perm 755 # 查找其他用户无权限的文件 find . -type f -perm /o=-
递归查看目录权限:ls -R
或tree
# 递归列出所有文件和目录的权限(输出较长) ls -lR Documents/ # 使用tree命令以树形结构显示(需安装tree包) tree -p -u -g -s Documents/ # -p显示权限,-u显示所有者,-g显示组,-s显示大小
查看当前用户的默认权限:umask
umask
决定新建文件/目录的默认权限(权限取反计算),
umask 0022 # 默认权限:文件666-022=644(rw-r--r--),目录777-022=755(rwxr-xr-x)
关联操作:权限修改与所有者变更
虽然本文聚焦“查看”,但了解关联命令有助于理解权限体系:
- 修改权限:
chmod
(符号模式chmod u+x file
或八进制模式chmod 755 file
)。 - 修改所有者:
chown user:group file
(user
为所有者,group
为所属组)。 - 修改所属组:
chgrp group file
。
相关问答FAQs
Q1:为什么有些文件显示为红色或蓝色?
A:Linux终端中文件颜色默认表示文件类型:蓝色(d
)表示目录,绿色(可执行文件)表示可执行程序(如/bin/ls
),红色()表示压缩文件(如.tar.gz
),浅蓝色(l
)表示软链接,灰色表示隐含文件,颜色可通过LS_COLORS
环境变量自定义,例如export LS_COLORS="di=01;34"
(目录显示为加粗蓝色)。
Q2:如何查看文件的所有者和所属组的详细信息(如UID/GID对应的真实用户名)?
A:ls -l
会直接显示所有者用户名和所属组名,若需查看UID/GID,可结合id
命令:
# 查看用户user的UID和所属组 id user # 输出示例:uid=1000(user) gid=1000(group) groups=1000(group),4(adm)
若已知UID,可通过/etc/passwd
查看用户名:grep "1000" /etc/passwd
(输出格式:x:1000:1000::/home/user:/bin/bash
),同理,GID对应组名在/etc/group
中查询。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/15028.html