Linux 文件权限入门:读懂 chmod、chown 与 umask
在 Linux 服务器上工作,几乎每天都会遇到权限问题:文件打不开、脚本执行不了、新建文件别人读不到。很多时候不是文件坏了,而是权限、归属或默认权限没有设对。本文讲清楚三个最常用的工具:chmod 管“谁能做什么”,chown 管“文件属于谁”,umask 管“新建文件的默认权限”。
一、先看懂 ls -l 的权限位
执行 ls -l,第一列形如 -rw-r--r--。第一个字符表示类型,- 是普通文件,d 是目录;后面九个字符分成三组,依次是文件所有者、同组用户、其他用户的权限。每组三个位置分别是读(r=4)、写(w=2)、执行(x=1),没有权限用 - 表示。例如 rw-r--r-- 对应 644,所有者可读写,同组和其他用户只可读。目录的 x 不是“执行文件”,而是“进入目录、访问其中文件”的通行证,没有它,cd 和查看目录内容都会受限。
二、chmod:改权限
数字写法最直观,把三组权限相加即可:chmod 755 start.sh 让所有者可读可写可执行,其他人可读可执行,适合可执行脚本;chmod 644 config.yaml 适合普通配置文件。符号写法更适合只改一位:chmod g+w notes.txt 给同组加写权限,chmod o-r secret.txt 收回其他人的读权限,chmod u+x deploy.sh 只给所有者加执行权限。需要连同子目录一起改时加 -R,但要格外小心,chmod -R 777 会把所有文件都变成人人可写,安全风险很大,生产环境不要这样图省事。
三、chown:改归属
权限是“对谁而言”,归属决定了“谁是所有者、属于哪个组”。sudo chown deploy:deploy app.log 把文件的所有者和组一起改成 deploy;只改所有者用 sudo chown deploy app.log,只改组用 sudo chgrp ops app.log。目录及内容一起改同样用 -R,例如部署目录换了运行用户时,sudo chown -R deploy:deploy /opt/myapp 往往比反复放宽权限更干净。改归属通常需要管理员权限,普通用户不能随意把文件“送给”别人。
四、umask:新建文件的默认权限
为什么新建文件常常是 644、目录是 755?这就是 umask 在起作用。它不是直接设定权限,而是从最大权限里“减掉”一部分:文件最大 666,目录最大 777,减去 umask 后得到默认权限。常见的 umask 022 会让文件默认 644、目录默认 755;umask 027 则会让权限更收紧。当前值用 umask 查看,临时改用 umask 027,想长期生效就写进 shell 启动文件。要注意,umask 只影响之后新建的文件,不会回头改已经存在的文件。
五、排错时先查这四件事
遇到“Permission denied”,不要先急着加 777。先用 ls -l 看权限位,再用 ls -ld 看上级目录有没有 x 权限;然后确认文件归属是不是当前用户或所在组;最后看是执行脚本缺 x,还是写文件缺 w。很多“文件明明可读却打不开”的问题,根源在目录缺少 x。养成习惯:权限给够用就好,宁可按需放宽,也不要一次性全开;改完用 ls -l 复核一次,再测试一次实际操作。
把 chmod、chown、umask 分开理解,权限问题就不再玄乎:一个管能做什么,一个管属于谁,一个管新建时的起点。先在测试目录里多练几次,再去碰生产目录。
- 点赞
- 收藏
- 关注作者
评论(0)