04_linux权限管理
权限管理
1 文件权限
文件的权限主要针对三类对象,分别是:
owner:u
: 所属用户group:g
: 所属组other:o
: 其他人
u、g、o 都有读(read)、写(write)、执行(excute) 三个权限,所以UGO模式是三类九种基本权限。
用命令
ls -l
可列出文件的权限,第一列输出明确了后面的输出(后面一列代表ugo
权限)。第一个字母对应的关系:
-
普通文件d
文件夹l
符号链接c
字符设备b
块设备p
管道
2 权限设置
2.1 chmode
修改文件权限
格式:
$ chmode [选项] 权限模式 文件
选项:
- 用户身份
- u 文件的拥有者
- g 文件所属组
- o 其他人
- a 以上三者全部身份
- 赋予方式
+
增加权限-
取消权限=
设置唯一权限
- 权限
r
表示可读取w
表示可写入x
表示可执行,X 表示只有当该文件是个子目录或者该文件已经被设定过为可执行
- 其他参数说明:
-c
若该文件权限确实已经更改,才显示其更改动作-f
若该文件权限无法被更改也不要显示错误讯息-v
显示权限变更的详细资料-R
对目前目录下的所有文件与子目录进行相同的权限变更(即以递归的方式逐个变更)-help
显示辅助说明--version
显示版本
字母形式设置权限:
# 为fn.sh文件设置权限
$ chmod u=rwx,g=r-x,o=rx fn.sh # 可以写成 chmod u=rwx,go=rx fn.sh
# 创建一个脚本
$ echo "echo 'hello world'" > test.sh
# 查看权限
$ ls -lt | grep test.sh
-rw-rw-r-- 1 gll gll 19 Mar 28 14:06 test.sh
# 给test.sh文件增加可执行权限
$ chmod ugo+x test.sh
# 查看权限
$ ls -lt | grep test.sh
-rwxrwxr-x 1 gll gll 19 Mar 28 14:06 test.sh
# 取消o的可执行权限
$ chmod o-x test.sh
数字模式:
chmod命令可以使用八进制数来指定权限。文件或目录的权限位是由9个权限位来控制,每三位为一组,它们分别是文件所有者(User)的读、写、执行,用户组(Group)的读、写、执行以及其它用户(Other)的读、写、执行。历史上,文件权限被放在一个比特掩码中,掩码中指定的比特位设为1,用来说明一个类具有相应的优先级。
数字模式 | 权限 | rwx | 二进制 |
---|---|---|---|
7 | 读 + 写 + 执行 | rwx | 111 |
6 | 读 + 写 | rw- | 110 |
5 | 读 + 执行 | r-x | 101 |
4 | 只读 | r-- | 100 |
3 | 写 + 执行 | -wx | 011 |
2 | 只写 | -w- | 010 |
1 | 只执行 | --x | 001 |
0 | 无 | --- | 000 |
理解技巧:
- 4 只读权限, 二进制 100
- 2 只写权限, 二进制 010
- 1 可执行权限, 二进制 001
- 0 无权限, 二进制 000
例如, 765 将这样解释:
- 所有者的权限用数字表达:属主的那三个权限位的数字加起来的总和。如 rwx ,也就是 4+2+1 ,应该是 7。
- 用户组的权限用数字表达:属组的那个权限位数字的相加的总和。如 rw- ,也就是 4+2+0 ,应该是 6。
- 其它用户的权限数字表达:其它用户权限位的数字相加的总和。如 r-x ,也就是 4+0+1 ,应该是 5。
数字形式设置权限:
# o=rwx, go=rw-
$ chmod 766 test.sh
# 目录workdir下的所有文件都增加可读可写可执行权限
chmod -R 777 workdir
一般不要单独设置 2 3 这样的权限。
一个文件没有读的权限,如何去打开编辑文件内容?虽然可以通过命令行去追加或者覆盖文件内容,但对于编辑文件内容来说操作起来复杂。
特别说明: 在linux系统中, 文件的删除权限是指的文件的目录是否有可写可执行的权限,
如果目录有可写可执行的权限,那么目录下的文件就具有了删除的权限。
3 所有者和所属组设置
3.1 chown
Linux chown(英文全拼:change owner)命令用于设置文件所有者和文件关联组的命令。
chown 需要超级用户 root 的权限才能执行此命令
格式:
$ chown [-cfhvR] [--help] [--version] user[:group] file...
参数 :
user
新的文件拥有者的使用者 IDgroup
新的文件拥有者的使用者组(group)-c
显示更改的部分的信息-f
忽略错误信息-h
修复符号链接-v
显示详细的处理信息-R
处理指定目录以及其子目录下的所有文件--help
显示辅助说明--version
显示版本
示例:
# 修改文件的所有者和所属组
$ sudo chown sam:sam demo.txt
# 将当前前目录下的所有文件与子目录的拥有者皆设为 runoob,群体的使用者 runoobgroup:
chown -R runoob:runoobgroup *
# 把 /home/runoob 的关联组设置为 512 (关联组ID),不改变所有者:
chown :512 /home/runoob
3.2 chgrp
Linux chgrp(英文全拼:change group)命令用于变更文件或目录的所属群组
格式:
$ chgrp [选项] 所属组 文件或目录
参数说明:
-
-c 或 --changes:效果类似"-v"参数,但仅回报更改的部分。
-
-f 或 --quiet 或 --silent: 不显示错误信息。
-
-h 或 --no-dereference: 只对符号连接的文件作修改,而不改动其他任何相关文件。
-
-R 或 --recursive: 递归处理,将指定目录下的所有文件及子目录一并处理。
-
-v 或 --verbose: 显示指令执行过程。
-
--help: 在线帮助。
-
--reference=<参考文件或目录>: 把指定文件或目录的所属群组全部设成和参考文件或目录的所属群组相同。
-
--version: 显示版本信息。
示例:
$ chgrp -v gll demo.txt
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构