Linux 文件基本属性
在 Linux 中执行 ls -l,会看到一串像 -rw-r--r-- 的字符,它们描述文件的类型与访问权限,是多用户系统安全的核心。看懂并能修改这些属性,是文件管理的必修内容。
看懂 ls -l 的输出
先看一个完整示例:
ls -l /etc/hostname
# 输出:-rw-r--r-- 1 root root 17 8月 5 10:20 /etc/hostname
从左到右依次为:类型与权限(10 个字符) | 链接数 | 属主 | 属组 | 大小 | 修改时间 | 文件名。
文件类型与权限位
第一个字符表示类型:- 普通文件、d 目录、l 软链接、b/c 块/字符设备。后面九个字符每三位一组,依次代表**属主(u)、属组(g)、其他用户(o)**的权限:
| 权限位 | 对文件 | 对目录 |
|---|---|---|
| r 读 | 可查看内容 | 可列出目录内容 |
| w 写 | 可修改内容 | 可新增/删除其中文件 |
| x 执行 | 可作为程序运行 | 可进入该目录(cd) |
因此 -rw-r--r-- 表示:普通文件,属主可读写,属组可读,其他用户只可读。
用 chmod 修改权限
数字法:r=4、w=2、x=1,三组分别求和。755 即 rwxr-xr-x:
chmod 755 script.sh # 属主全权限,属组与他人可读可执行
ls -l script.sh
# 输出:-rwxr-xr-x 1 root root 0 8月 5 10:30 script.sh
符号法:用 u/g/o/a 与 + - = 组合,更直观:
chmod u+x script.sh # 给属主加执行权限
chmod g-w script.sh # 去掉属组的写权限
chmod a+r script.sh # 所有用户都加读权限
chmod u=rwx,go=rx file # 属主 rwx,属组与他人 rx
修改属主与属组
文件归属用 chown 修改;只改属组也可用 chgrp:
chown zhangsan:dev app.log # 属主改为 zhangsan,属组改为 dev
chown zhangsan app.log # 只修改属主
chgrp dev app.log # 只修改属组
目录权限的特殊性
目录权限决定能否列出、进入或删除其中的文件:
mkdir /tmp/demo && touch /tmp/demo/a.txt
chmod 755 /tmp/demo # 其他人可读可进入
ls /tmp/demo
# 输出:a.txt
chmod 000 /tmp/demo # 收回所有人的全部权限
ls /tmp/demo
# 输出:ls: cannot open directory '/tmp/demo': Permission denied
默认权限与 umask
新建文件的默认权限由 umask 决定,常见的 0022 使文件默认为 644、目录为 755:
umask
# 输出:0022
touch new.txt && ls -l new.txt
# 输出:-rw-r--r-- 1 root root 0 ... new.txt
小结:ls -l 首段十个字符浓缩了文件类型与"属主/属组/其他"三级权限。用 chmod(数字法或符号法)改权限、chown/chgrp 改归属,再结合 umask 理解默认值,Linux 权限管理就基本掌握了。