Linux 文件权限入门:先弄清读、写与执行这三件事
刚接触 Linux,很多人第一次栽在“权限”上:文件明明在眼前,打开却提示 Permission denied;脚本写好了,一运行却说没有执行权限。其实背后的规则并不复杂,核心就是三件事:读、写、执行,以及它们分别属于谁。
一、先看懂 ls -l 输出的那串字母
在终端执行 ls -l,每一行开头都有一串类似 -rw-r--r-- 的字符。第一个字符表示类型:- 是普通文件,d 是目录,l 是软链接。后面九个字符每三个一组,依次对应所有者(user)、所属组(group)、其他人(others)。
字母含义很直白:r 是读(read),w 是写(write),x 是执行(execute),- 表示没有这项权限。-rw-r--r-- 就是:所有者可以读写,组和其他人只能读。
二、同样是 rwx,文件和目录上意思不同
对文件来说,读是查看内容,写是修改、追加内容,执行是把文件当作程序来运行。
对目录来说,读是列出里面的文件清单,写是在目录里新建、删除、重命名文件,执行是进入这个目录、访问其中已知名字的文件。
举个例子:目录 data 的权限是 r--,只有读没有执行,你可以用 ls data 看到里面的文件名,但 cat data/report.txt 会失败,因为没有执行权限,进不去这个目录。反过来,目录只有执行没有读时,你看不到文件清单,却能直接访问你知道名字的文件。目录的 x,就是一张通行证。
三、数字权限:把三件事压缩成一个数字
Linux 还可以用数字表示权限:r=4,w=2,x=1,把一组权限相加。rwx 是 7,rw- 是 6,r-x 是 5。于是 chmod 755 就表示所有者 rwx、组 r-x、其他人 r-x,这是可执行脚本最常见的权限。
写好一个部署脚本,想让它能直接运行:
chmod +x deploy.sh
./deploy.sh
想把敏感文件收紧到只有自己可读写:
chmod 600 config.txt
ls -l config.txt
这时输出是 -rw-------,存放密钥、令牌这类文件时,600 是最常用的选择。
四、新手最容易踩的三个坑
第一,别急着 chmod 777。777 意味着任何人都能读、写、执行,临时图省事常常会埋下安全隐患。遇到权限问题先问一句:到底缺了哪一位的哪一个权限?多数时候精确地补一个 x 就够了。
第二,删除文件看的是目录的写权限,不是文件的写权限。一个只读文件(444),只要它所在的目录可写,你仍然可以删除它;反过来,文件权限是 666,但所在目录没有写权限,你也删不掉它。
第三,执行脚本和读取脚本是两回事。运行 ./deploy.sh 需要 x 权限;而用 bash deploy.sh 运行,只需要读权限,因为这时是 bash 在读取脚本内容,而不是内核直接执行它。同一个脚本,两种运行方式对权限的要求不同,报错时先分清自己用的是哪一种。
五、动手练一次
在自己的练习目录里新建文件,写一行字进去,再依次改权限,观察 ls -l 的变化和能否正常读取:
echo "hello linux" > hello.txt
chmod 400 hello.txt
cat hello.txt
chmod 600 hello.txt
400 是只读,600 是自己可读写。亲手改一次、看一次输出,比背十遍权限表记得更牢。
文件权限说到底是在回答三个问题:谁能看、谁能改、谁能运行。先把读、写、执行这三件事,以及它们在文件和目录上的不同含义分清,再遇到 Permission denied,就不再是玄学,而是可以一步步排查的线索。
- 点赞
- 收藏
- 关注作者
评论(0)