一、Linux文件权限核心基础
Linux是典型的多用户操作系统,为了区分不同用户对文件的操作权限,引入了“用户身份”和“权限分类”两大核心概念。在进行权限管理前,必须先明确这两个基础要素。
1.1 三类核心用户身份
Linux系统中,每个文件都与三类用户身份绑定,权限配置也围绕这三类身份展开:
所有者(Owner):文件的创建者,对文件拥有最高控制权。使用ls -l命令查看时,第三列显示的即为所有者用户名。
所属组(Group):包含多个用户的用户组,组内用户共享该文件的组权限。ls -l命令第四列显示的是所属组名称。
其他用户(Others):既不是文件所有者,也不属于所属组的用户,权限最为受限。
1.2 三种基本操作权限
针对上述三类用户,Linux定义了读、写、执行三种基本操作权限,不同权限对应不同的操作范围:
读权限(Read,简称r):允许查看文件内容(如使用cat、less命令)或列出目录内容(如ls命令)。
写权限(Write,简称w):允许修改文件内容(如使用vim编辑)或对目录进行增删文件/目录操作(如touch、rm命令)。注意:目录的写权限需配合执行权限才能生效。
执行权限(Execute,简称x):允许运行可执行文件(如Shell脚本、二进制程序)或进入目录(如cd命令)。对于普通文本文件,执行权限通常不需要配置。
二、文件权限符号详解
在Ubuntu 20.04中,文件权限的表示分为“字符表示法”和“数字表示法”两种,前者直观易懂,后者简洁高效,在实际操作中需灵活运用。
2.1 字符表示法:直观展示权限分配
使用ls -l命令查看文件详情时,输出结果的第一列即为权限的字符表示,例如:-rw-r--r--。该字符串共10个字符,含义拆解如下:
第1个字符:文件类型标识,常见类型包括: -:普通文件(如文本文件、脚本、二进制程序)
d:目录文件(如/home、/etc)
l:软链接文件(类似Windows的快捷方式)
c:字符设备文件(如键盘、鼠标等外设)
b:块设备文件(如硬盘、U盘等存储设备)
第2-4个字符:所有者(Owner)的权限,依次对应r、w、x。例如rw-表示所有者拥有读和写权限,无执行权限。
第5-7个字符:所属组(Group)的权限,格式同所有者权限。例如r--表示所属组仅拥有读权限。
第8-10个字符:其他用户(Others)的权限,格式同上。例如r--表示其他用户仅拥有读权限。
再举一个目录权限的例子:drwxr-xr-x,含义为“目录文件,所有者拥有读、写、执行权限,所属组和其他用户拥有读和执行权限”。
2.2 数字表示法:高效配置权限
数字表示法将r、w、x三种权限分别对应一个固定数字,通过数字相加得到某类用户的权限组合,更适合批量或快速配置权限。三种权限对应的数字如下:
读权限(r):对应数字4
写权限(w):对应数字2
执行权限(x):对应数字1
无权限:对应数字0
由于权限分为所有者、所属组、其他用户三类,因此数字表示法需用三位数字表示,每位数字对应一类用户的权限总和,格式为“所有者权限 所属组权限 其他用户权限”。常见的权限组合及对应关系如下表:
数字组合
字符表示
权限说明
适用场景
755
rwxr-xr-x
所有者读写执行,组和其他读执行
可执行程序、脚本、公共目录
644
rw-r--r--
所有者读写,组和其他只读
普通文本文件、配置文件(公开)
600
rw-------
仅所有者读写,其他无权限
敏感配置文件(如ssh私钥)
700
rwx------
仅所有者读写执行,其他无权限
私人脚本、保密目录
777
rwxrwxrwx
所有用户均有读写执行权限
测试场景(严禁生产环境使用)
三、修改文件权限:chmod命令实操
修改文件或目录权限的核心命令是chmod(change mode的缩写),该命令支持字符模式和数字模式两种修改方式,需根据实际需求选择。
3.1 字符模式修改:精准调整权限
字符模式通过“用户身份+操作符+权限”的组合来修改权限,语法格式如下:
chmod [用户身份][操作符][权限] 文件名/目录名
各参数含义:
用户身份:u(所有者)、g(所属组)、o(其他用户)、a(所有用户,默认值)
操作符:+(添加权限)、-(移除权限)、=(设置权限,覆盖原有权限)
权限:r(读)、w(写)、x(执行)
Ubuntu 20.04实操案例:
给文件test.sh的所有者添加执行权限: chmod u+x test.sh执行后,所有者权限从rw-变为rwx。
移除目录data的其他用户读权限: chmod o-r data执行后,其他用户权限从r-x变为--x。
给文件config.ini的所属组设置读写权限(覆盖原有权限): chmod g=rw config.ini无论所属组原有权限如何,执行后均变为rw-。
给所有用户添加对log.txt的读权限(a可省略): chmod +r log.txt
3.2 数字模式修改:快速批量配置
数字模式直接使用三位数字指定权限,语法格式更简洁:
chmod 数字组合 文件名/目录名
Ubuntu 20.04实操案例:
将脚本install.sh权限设置为“所有者读写执行,组和其他读执行”(755): chmod 755 install.sh
将敏感文件id_rsa(SSH私钥)权限设置为“仅所有者读写”(600): chmod 600 id_rsa这是SSH私钥的标准安全权限,若权限过宽会导致SSH连接失败。
将目录webroot及其下所有文件/目录权限统一设置为755: chmod -R 755 webroot参数-R表示递归修改,适用于目录及其子内容批量配置。
四、改变文件所属关系:chown与chgrp命令
除了修改权限,有时还需要调整文件的所有者或所属组,核心命令为chown(change owner)和chgrp(change group)。注意:修改所属关系需要root权限,普通用户需使用sudo。
4.1 chown:修改所有者与所属组
chown命令可同时修改所有者和所属组,语法格式:
# 仅修改所有者
sudo chown 新所有者 文件名/目录名
# 同时修改所有者和所属组(用:分隔)
sudo chown 新所有者:新所属组 文件名/目录名
Ubuntu 20.04实操案例:
将文件report.pdf的所有者改为用户ubuntu: sudo chown ubuntu report.pdf
将目录app的所有者改为ubuntu,所属组改为dev: sudo chown ubuntu:dev app
4.2 chgrp:单独修改所属组
若仅需修改文件或目录的所属组,可使用更简洁的chgrp命令,语法格式:
sudo chgrp 新所属组 文件名/目录名
# 递归修改目录及子内容所属组
sudo chgrp -R 新所属组 目录名
Ubuntu 20.04实操案例:
将文件data.log的所属组改为dev: sudo chgrp dev data.log
将目录project及其下所有内容的所属组改为test: sudo chgrp -R test project
五、操作核心操作指令汇总表
功能分类
具体指令
参数/说明
适用场景
权限查看
ls -l 文件名/目录名
输出第一列为权限字符,第三列为所有者,第四列为所属组
查看单个文件/目录详细权限
ls -la 目录名
-a:显示隐藏文件及目录
查看目录下所有文件权限(含隐藏)
权限修改(chmod)
chmod u+x 文件名
u:所有者,+:添加,x:执行权限
给所有者添加执行权限
chmod o-w 文件名
o:其他用户,-:移除,w:写权限
移除其他用户写权限
chmod a=r 文件名
a:所有用户,=:覆盖设置,r:读权限
给所有用户设置读权限(覆盖原有)
chmod 755 文件名
数字组合:所有者rwx,组和其他rx
配置可执行程序、公共目录权限
chmod -R 644 目录名
-R:递归修改目录及子内容
批量配置目录及子文件权限
所属关系调整
sudo chown 用户名 文件名
sudo:获取root权限,修改所有者
单独修改文件所有者
sudo chown -R 用户名:组名 目录名
:分隔所有者与组,-R:递归处理
修改目录及子内容的所有者和组
sudo chgrp 组名 文件名
仅修改文件所属组,需root权限
为方便快速查询和实操,本节汇总文件权限管理的核心指令,涵盖权限查看、修改、所属关系调整等关键操作,按功能分类整理并标注核心参数与说明:
5.1 权限查看核心指令
主要用于查看文件/目录的权限信息、所有者及所属组,是权限管理的前提操作:
# 查看单个文件/目录的详细权限信息
ls -l 文件名/目录名
# 查看目录下所有文件的详细权限(含隐藏文件)
ls -la 目录名
说明:输出结果第一列为权限字符表示,第三列为所有者,第四列为所属组,可快速判断当前权限配置。
5.2 权限修改核心指令(chmod)
按修改模式分为字符模式和数字模式,分别适用于精准调整和批量配置场景:
# 字符模式:给所有者添加执行权限
chmod u+x 文件名
# 字符模式:移除其他用户的写权限
chmod o-w 文件名
# 字符模式:给所有用户设置读权限(覆盖原有)
chmod a=r 文件名
# 数字模式:设置权限为755(所有者读写执行,组和其他读执行)
chmod 755 文件名
# 数字模式:递归设置目录及子内容权限为644
chmod -R 644 目录名
关键参数:-R(递归修改,仅用于目录);用户身份缩写(u、g、o、a);操作符(+、-、=)。
5.3 所属关系调整核心指令
包含chown(修改所有者/所属组)和chgrp(仅修改所属组),需root权限(前缀sudo):
# chown:修改单个文件所有者
sudo chown 用户名 文件名
# chown:同时修改目录的所有者和所属组(递归)
sudo chown -R 用户名:组名 目录名
# chgrp:修改单个文件所属组
sudo chgrp 组名 文件名
# chgrp:递归修改目录及子内容所属组
sudo chgrp -R 组名 目录名
说明:chown命令中,所有者与所属组用冒号(:)分隔;-R参数同样适用于递归处理目录。
5.4 高频场景指令速查
整理日常运维中高频场景的指令组合,直接复制使用:
场景需求
核心指令
设置SSH私钥权限(安全要求)
sudo chmod 600 ~/.ssh/id_rsa
配置Web服务目录权限
sudo chmod -R 755 /var/www/html
创建仅自己可见的私人目录
mkdir mydir && chmod 700 mydir
让组内成员可编辑共享文件
sudo chgrp 组名 共享文件 && chmod g+w 共享文件
查看目录下所有文件的权限明细
ls -l 目录名 | awk '{print $1,$3,$4,$9}'
提示:所有指令均在Ubuntu 20.04系统中测试通过,执行前建议通过ls -l确认当前权限状态,避免误操作。