cen's blog cen's blog
首页
  • 编程文章

    • markdown使用
  • 学习笔记

    • 《JavaScript教程》
    • C++学习
    • C++数据结构
    • MySQL
    • Linux
  • 高中时代
  • 工作日常
  • CLion
  • 技术文档
  • GitHub技巧
  • Nodejs
  • 博客搭建
  • 分类
  • 标签
  • 归档
关于
GitHub (opens new window)

cen

十年饮冰,难凉热血
首页
  • 编程文章

    • markdown使用
  • 学习笔记

    • 《JavaScript教程》
    • C++学习
    • C++数据结构
    • MySQL
    • Linux
  • 高中时代
  • 工作日常
  • CLion
  • 技术文档
  • GitHub技巧
  • Nodejs
  • 博客搭建
  • 分类
  • 标签
  • 归档
关于
GitHub (opens new window)
  • Linux环境搭建
  • 基本指令
  • 权限
    • 用户切换
    • 提升当前权限
    • 文件的权限
      • 文件访问者的分类
      • 文件类型和访问权限
      • 设置访问权限:
      • 改变文件拥有者
      • 改变文件所属组
      • umask
      • 掩码
    • 目录的权限
    • 粘滞位
  • Linux基础开发工具
  • 进程概念
  • 进程控制
  • 基础IO流
  • 动态库和静态库
  • 进程通信
  • 进程信号
  • 多线程
  • 线程安全
  • Linux
cen
2025-02-09
目录

权限

# 用户切换

Linux下有两种用户:超级用户(root)和普通用户。

  • 超级用户:可以再linux系统下做任何事情,不受限制
  • 普通用户:在linux下做有限的事情。
  • 超级用户的命令提示符是#,普通用户的命令提示符是`$

命令: su [用户名] 功能: 切换用户

# 提升当前权限

但可能某些情况下,你只想提升当前指令的权限,那么不必切换到超级用户。

sudo命令

语法:sudo

功能: sudo后面的命令相当于用root身份来执行,可以提升执行指令的权限,而不用切换超级管理员。

注意:

如果root未将普通用户添加道/etc/sudoers中,系统不相信该普通用户,就会出错:

xxx is not in the sudoers file.  This incident will be reported.
1

解决方案

  1. ls /etc/sudoers
  2. vim进行编辑文件/etc/sudoers
## Allow root to run any commands anywhere 
root    ALL=(ALL)       ALL
1
2

添加信任用户cen

## Allow root to run any commands anywhere 
root    ALL=(ALL)       ALL
cen     ALL=(ALL)       ALL
1
2
3
  1. 保存退出

# 文件的权限

# 文件访问者的分类

  • 文件和文件目录的所有者:u---User
  • 文件和文件目录的所有者所在的组的用户:g---Group
  • 其它用户:o---Others

例如:

total 4
drwxrwxr-x 2 cen cen 4096 Feb  9 16:47 dir
-rw-rw-r-- 1 cen cen    0 Feb  9 16:47 file1
-rw-rw-r-- 1 cen cen    0 Feb  9 16:47 file2
         # 拥有者 所属组
         # 除了文件拥有者和文件所属组之外的都叫other
1
2
3
4
5
6

可见User和Group都是cen所有的。

# 文件类型和访问权限

drwxrwxr-x 2 cen cen 4096 Feb  9 16:47 dir
1

文件权限

  1. 文件类型
  • d:文件夹(目录)
  • -:普通文件(源代码、库文件、可执行程序、文件压缩包...)
  • l:软链接(类似Windows的快捷方式)
  • b:块设备文件(例如硬盘、光驱等)
  • p:管道文件
  • c:字符设备文件(例如屏幕等串口设备)
  • s:套接口文件
  1. 访问权限

字母表示法:

Linux表示 说明 Linux表示 说明
r-- 只读 -w- 仅可写
--x 仅可执行 rw- 可读可写
-wx 可写可执行 r-x 可读可执行
rwx 可读可写可执行 --- 无权限

八进制数值表示法

字符表示法 二进制 八进制数值表示法 说明
r-- 100 4 仅可读
-w- 010 2 仅可写
--x 001 1 仅可执行
rw- 110 6 可读可写
r-x 101 5 可读可执行
-wx 011 3 可写可执行
rwx 111 7 可读可写可执行
--- 000 0 无权限

# 设置访问权限:

功能: 设置文件的访问权限

格式:chmod [选项] 用户符号 +/-/= 权限字符 文件名

1)+:向权限范围增加权限代号所表示的权限。

2)-:向权限范围取消权限代号所表示的权限。

3)=:向权限范围赋予权限代号所表示的权限。

用户符号:

  1. u:拥有者
  2. g:所属组
  3. o:other
  4. a:所有用户

常用选项:

  1. -R 递归修改目录文件的权限

说明:只有文件的拥有者和root才可以改变文件的权限

# 改变文件拥有者

语法:chown 选项 用户名 文件名或目录名

功能: 修改文件的拥有者。

常用选项: -R 递归修改目录文件的拥有者

注意:

  1. 修改文件的拥有者需要root用户进行操作,若是普通用户则需要进行权限提升。

  2. 可以使用chown指令同时修改文件的拥有者和所属组,将拥有者和所属组的用户名用冒号隔开即可。

# 改变文件所属组

语法:chgrp 选项 用户名 文件名或目录名

功能: 修改文件的所属组

常用选项: -R 递归修改目录文件的所属组。

# umask

功能:

  1. 查看或修改文件掩码
  2. 新建文件夹默认权限 = 0666
  3. 新建目录默认权限 = 0777 但实际上你所创建的文件和目录,看到的权限往往不是上面这个值。原因就是创建文件或目录的时候还要受到 umask的影响。假设默认权限是mask,则实际创建的出来的文件权限是: mask & ~umask

格式: umask 权限值 说明:

将现有的存取权限减去权限掩码后,即可产生建立文件时预设权限。(umask:超级用户默认掩码值为0022,普通用户默认为0002)

# 掩码

新建文件的默认权限为0666,新建目录的默认权限为0777。其中第一位的0与特殊权限有关,我们这里不必深究,而后面三位就是权限的八进制数值表示方法。

文件:0666 -> 6 6 6 -> 110 110 110 -> rw-rw-rw-

目录:0777 -> 7 7 7 -> 111 111 111 -> rwxrwxrwx

所创建出来的文件和目录的权限值往往不是我们所翻译出来的值,原因就是创建文件和目录的时候还要受到umask的影响,假设默认权限是mask,则实际创建出来的文件权限 = mask & (~umask)

如下:

文件:110 110 110 & (~000 010 010) = 110 100 100 -> rw-r--r--

目录:111 111 111 & (~000 010 010) = 111 101 101 -> rwxr-xr-x

drwxr-xr-x 2 root root  4096 Feb 10 10:54 newdir
-rw-r--r-- 1 root root     0 Feb 10 10:54 newfile
1
2

# 目录的权限

对于文件来说,其可读可写可执行的属性我们都知道分别代表着什么对应的操作,那对于目录来说可读可写可执行又分别代表着什么呢? 1)可读权限: 如果用户没有该目录的可读权限,则无法通过ls指令查看目录中的文件内容。 2)可写权限: 如果用户没有该目录的可写权限,则无法通过一系列指令在目录中创建文件或删除文件。 3)可执行权限: 如果用户没有该目录的可执行权限,则无法通过cd指令进入到目录当中。

# 粘滞位

[root@VM-8-2-opencloudos ~]# ll
drwxr-xr-x 2 root root  4096 Feb 10 10:54 newdir
-rw-r--r-- 1 root root     0 Feb 10 10:54 newfile
[root@VM-8-2-opencloudos ~]# chmod u-w newfile
[root@VM-8-2-opencloudos ~]# ll
drwxr-xr-x 2 root root  4096 Feb 10 10:54 newdir
-r--r--r-- 1 root root     0 Feb 10 10:54 newfile
[root@VM-8-2-opencloudos ~]# rm -rf newfile
[root@VM-8-2-opencloudos ~]# ll
drwxr-xr-x 2 root root  4096 Feb 10 10:54 newdir
1
2
3
4
5
6
7
8
9
10

为了解决这个不合理的问题,Linux引入了粘滞位的概念。

语法:chmod +t 目录名

功能: 给目录加上粘滞位。

当一个用户将某一个目录加上粘滞位后,该目录的权限值的最后一位变为字符't',此时另一个用户就算有该目录的可写权限,也无法删除该目录下的文件。

当一个目录被设置为"粘滞位"(用chmod +t),则该目录下的文件只能由超级管理员删除、该目录的所有者删除和该文件的所有者删除。

上次更新: 2025/02/11, 21:46:14
基本指令
Linux基础开发工具

← 基本指令 Linux基础开发工具→

最近更新
01
线程安全
05-21
02
cmake教程
05-08
03
项目
05-07
更多文章>
Theme by Vdoing | Copyright © 2024-2025 京ICP备2020044002号-3 京公网安备11010502056119号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式