Linux文件权限入门——看懂rwx与chmod
刚接触 Linux 时,很多人第一次被权限拦住:明明文件就在那里,执行却提示 Permission denied;改了权限,又担心是不是给得太宽。本文就从最常见的 ls -l 输出讲起,把 rwx、所有者、组和其他人,以及 chmod 的数字法一次讲清楚。
一、先会读 ls -l
执行 ls -l,常见的一行是这样的:
-rw-r--r-- 1 zhangsan dev 2048 Nov 4 10:00 notes.txt
第一个字符表示类型:- 是普通文件,d 是目录,l 是软链接。后面九个字符分成三组,每组三个,依次是所有者、所属组、其他人。每一组里的 r、w、x 分别代表读、写、执行。上面的例子就是:所有者可读写,组和其他人只可读。
第二列的数字、后面的所有者和组也很重要。权限不是只看字母,还要看你是谁:你是文件所有者,就看第一组;你在所属组里,就看第二组;既不是所有者也不在组里,就看第三组。系统按这个顺序匹配,只取其中一组,不会把三组合并。
二、数字法:r=4,w=2,x=1
把 r、w、x 记成 4、2、1,三组相加就得到三位数字。755 表示所有者 7(4+2+1,读写执行),组 5(4+1,读执行),其他人 5。644 表示所有者 6(4+2,读写),组和其他人都是 4(只读)。
所以常见的组合很好记:可执行脚本、程序目录常用 755;普通配置文件、文档常用 644;私钥、敏感配置则要收紧,比如 600,只让所有者读写。记住数字不是越大越安全,也不是越小越安全,而是越贴合用途越好。
三、改权限的正确姿势
查看当前权限用 ls -l,修改用 chmod。例如:
chmod 755 deploy.sh
chmod 644 config.yaml
chmod 600 id_rsa
如果只想给所有者加上执行权限,而不动其他位,可以用符号法:chmod u+x 脚本文件。u 代表所有者,g 是组,o 是其他人,a 是全部;+ 是增加,- 是去掉,= 是设为指定值。符号法适合微调,数字法适合一次性定好三组。
改之前先想清楚:这个文件需要被谁读、被谁改、被谁执行?只给必要的权限,是最不容易出错的原则。
四、四个常见易错点
第一,给普通文件加 x 不等于能运行。脚本还需要第一行有正确的解释器,比如 #!/bin/bash,而且内容本身要是可执行的脚本;否则即使 chmod +x,也可能报格式错误。
第二,目录的 x 和文件的 x 含义不同。对文件,x 是执行;对目录,x 是进入目录、访问其中已知文件名的权限。没有 x,即使有 r,也进不去目录、打不开里面的文件;只有 x 没有 r,可以访问已知路径的文件,但不能列出目录内容。
第三,目录写权限要格外谨慎。目录的 w 意味着可以在其中新建、删除、重命名文件,哪怕你不是文件的所有者。所以把目录设成 777,等于把里面文件的删除权也交了出去,生产环境尤其要避免。
第四,权限问题先看身份再看数字。同样是 644,所有者能改、其他人只能读;如果当前用户不在组里,组权限再宽也与你无关。排查时先用 whoami 和 id 确认身份,再用 ls -l 对照三组,这样定位最快。
五、一个小练习
新建一个测试文件和目录,分别试一试:
touch test.txt
mkdir testdir
ls -l test.txt
ls -ld testdir
chmod 600 test.txt
chmod 755 testdir
ls -l test.txt; ls -ld testdir
对照输出,把每组字母翻译成数字,再反向从数字还原成字母。练两遍之后,看到 -rwxr-xr-x 就能立刻反应出 755,看到 drwxr-x— 就知道组可读执行、其他人没有任何权限。
总结一句话:权限是“谁、对什么、能做什么”的三元组。读懂 ls -l 的三组字母,掌握 4、2、1 的数字法,区分文件与目录的 x,再坚持最小权限原则,Linux 权限就不再是玄学,而是一套可以推导的规则。
- 点赞
- 收藏
- 关注作者
评论(0)