文章目录

  • 文件的访问者
  • 文件的类型和权限表达
  • 文件权限的修改
  • 文件拥有者、所属组的修改
    • 文件拥有者修改
    • 文件所属组修改
  • 关于权限掩码
  • 关于目录的权限

文件的访问者

文件的访问者,可以分为三类

  • 拥有者(owner):拥有该文件的访问者
  • 所属组(group):该文件所属的组
  • 其他人(other):除了拥有者、所属组外的其他访问者

当我们查看更多文件更多属性的时候

会显示拥有者和所属组,而除了这两个以外的就被称为其他人。

为什么会分出拥有者、所属组和其他人呢?

假设你自己独立设计出了一款软件,将用户类别划分为拥有者、所属组和其他人,更方便对访问软件的人做出约束:
只有你自己能操作
允许你和你所在的组操作
允许你和你所在的组以及其他人也能操作。
……

上面所属组的位置只有一个用户,这样也算组吗?当然是可以的呀,一个人作一个组这是被允许的。

文件的类型和权限表达


先来看一下文件的类型

标识 档案的类型
普通文件
d 文件夹(目录)
l 软链接
b 块设备文件
p 管道文件
c 字符设备文件
s 套接口文件
//例如//test.c是一个普通文件,拥有者为root用户,所属组为root用户
-rw-r--r-- 1 root root   79 Jan 22 15:00 test.c//test_commands是一个文件夹,拥有者为YDY,所属组为YDY用户
drwxrwxr-x 4 YDY YDY 4096 Apr  9 20:12 test_commands

如果我们只知道Linux系统上的某文件的文件名,如何查看它是什么类型的文件呢?

使用命令:file
功能:查看文件的类型
格式:file 选项 文件名

//例如
[root@VM-0-2-centos test_user]# ls
user_dirt1
[root@VM-0-2-centos test_user]# file user_dirt1
user_dirt1: sticky directory
[root@VM-0-2-centos test_user]#

用户的一般权限有可读权限、可写权限、可执行权限,三三为一组。

标识 代表的权限(对文件) 代表的权限(对目录)
r 拥有读取文件内容的权限 具有浏览该目录信息的权限
w 拥有修改文件内容的权限 拥有删除移动目录内文件的权限
x 拥有执行文件的权限 具有进入目录的权限
没有某一权限 没有某一权限

例如:

权限符号 说明
r— — 只读
— w — 仅可写
— — x 仅可执行
…… ……
例如
//test.c的拥有者对该文件有r、w权限,没有x权限
//test.c所属组对该文件有r权限、没有w、x权限
//其他人对该文件有r权限、没有w权限、没有x权限
-rw-r--r-- 1 root root   79 Jan 22 15:00 test.c

权限只有《有、无》两种结果,所以可使用2进制,1代表有某一权限,0代表没有,Linux对于权限的表达方法可以用十进制的数字

权限符号 说明 二进制 十进制
r— — 只读 100 4
— w — 仅可写 010 2
— — x 仅可执行 001 1
…… …… …… ……

要注意三个三个为一组。现在可能对这种表达的方式不能理解,修改权限的时候就可以理解了。

文件权限的修改

可以对文件的权限进行修改。

命令:chmod
功能:实际上是change mode 的缩写,功能是可以修改权限
格式:chmod 选项 更改权限 文件名。
说明:选项可写可不写,若有需要,可自行查阅man-pages

使用chmod有两种方式。

【方式一】

chmod 用户表示符+/-权限标识符 文件名

用户表示符有:

  • u:代表拥有者
  • g:代表所属组
  • o: 其他用户
  • a:所有用户

加权限使用+,减权限使用-

//例如
[YDY@VM-0-2-centos ~]$ ls -l -d ls_test
-rw-rw-r-- 1 YDY YDY 0 Apr  7 16:35 ls_test
[YDY@VM-0-2-centos ~]$ chmod u+x ls_test //给拥有者增加x权限
[YDY@VM-0-2-centos ~]$ ls -l -d ls_test
-rwxrw-r-- 1 YDY YDY 0 Apr  7 16:35 ls_test
[YDY@VM-0-2-centos ~]$ chmod g-w ls_test //给所属组减去w权限
[YDY@VM-0-2-centos ~]$ ls -l -d ls_test
-rwxr--r-- 1 YDY YDY 0 Apr  7 16:35 ls_test
[YDY@VM-0-2-centos ~]$ chmod o+wx ls_test //给其他人加上w和x权限
[YDY@VM-0-2-centos ~]$ ls -l -a ls_test
-rwxr--rwx 1 YDY YDY 0 Apr  7 16:35 ls_test
[YDY@VM-0-2-centos ~]$ 

【方式二】

chmod 数字权限表示符 文件名

不需要使用用户表示符,直接使用数字权限表示符来修改
例如:

文件拥有者、所属组的修改

文件拥有者修改

命令:chown
格式:chown 用户 文件名
功能:修改文件的拥有者

//例如
[root@VM-0-2-centos ~]# ll
total 16
-rw-r--r-- 1 root root   79 Jan 22 15:00 test.c //文件的拥有者为root用户
[root@VM-0-2-centos ~]# chown YDY test.c //将文件的拥有者改为YDY的普通用户
[root@VM-0-2-centos ~]# ll
total 16
-rw-r--r-- 1 YDY  root   79 Jan 22 15:00 test.c //文件拥有者变为YDY的普通用户

实际上,只有root用户可以这样直接更改拥有者,因为root用户的权限最高。
这就好比,我把东西给你,你选择可以要,也可以选择不要,而root用户就相当于是老大,你不要也得要。

所以使用普通用户的来直接更改文件的拥有者是不行的

//例如
-rwxrwxrwx 1 YDY YDY 0 Apr 10 15:26 test_chmod //本来拥有者为YDY用户
[YDY@VM-0-2-centos test_commands2]$ chown root test_chmod
chown: changing ownership of ‘test_chmod’: Operation not permitted //提示,操作不被允许

那么普通用户如何更改文件的拥有者?
答案是:暂时赋予最高权限,相当于暂时给了你这个普通用户,root的能力。可使用sudo命令,前提是这个普通用户已经被root用户信任。

还可以使用chown同时修改拥有者和所属组
格式为:chown 拥有者用户:所属组用户 文件名

[root@VM-0-2-centos ~]# ll
total 16
-rw-r--r-- 1 root root   79 Jan 22 15:00 test.c
[root@VM-0-2-centos ~]# chown YDY:YDY test.c //同时修改拥有者和所属组
[root@VM-0-2-centos ~]# ll
total 16
-rw-r--r-- 1 YDY  YDY    79 Jan 22 15:00 test.c//修改成功

文件所属组修改

命令:chgrp
格式:chgrp 用户名 文件名
功能:修改文件的所属组

//例如
[root@VM-0-2-centos YDY]# ll
total 16
-rw-r--r-- 1 root root    0 Apr 10 16:01 test_chgrp //本来所属组为root用户
[root@VM-0-2-centos YDY]# chgrp YDY test_chgrp //将文件的所属组修改为YDY普通用户
[root@VM-0-2-centos YDY]# ll
total 16
-rw-r--r-- 1 root YDY    0 Apr 10 16:01 test_chgrp //修改成功

和修改文件的拥有者差不多,直接修改所属组也只有root用户可以,否则要暂时使得普通用户获得最高权限。

关于权限掩码

不知道你有没有发现,当你创建文件的时候,所有文件的权限都是一样的。

//我的linux系统上
[YDY@VM-0-2-centos test_commands2]$ touch test_file1 test_file2 test_file3
[YDY@VM-0-2-centos test_commands2]$ ll
total 0
-rw-rw-r-- 1 YDY YDY 0 Apr 10 16:15 test_file1
-rw-rw-r-- 1 YDY YDY 0 Apr 10 16:15 test_file2
-rw-rw-r-- 1 YDY YDY 0 Apr 10 16:15 test_file3

为什么权限我的linux系统上的文件的权限默认都是rw-rw-r--?
而当我新建目录文件的时候,默认权限都是rwxrwxr-x.

[YDY@VM-0-2-centos test_commands2]$ mkdir test_dirt1 test_dirt2 test_dirt3
[YDY@VM-0-2-centos test_commands2]$ ll
total 12
drwxrwxr-x 2 YDY YDY 4096 Apr 10 16:21 test_dirt1
drwxrwxr-x 2 YDY YDY 4096 Apr 10 16:21 test_dirt2
drwxrwxr-x 2 YDY YDY 4096 Apr 10 16:21 test_dirt3
-rw-rw-r-- 1 YDY YDY    0 Apr 10 16:15 test_file1
-rw-rw-r-- 1 YDY YDY    0 Apr 10 16:15 test_file2
-rw-rw-r-- 1 YDY YDY    0 Apr 10 16:15 test_file3

事实上:

也就是:

  • 普通文件的默认起始权限是:rw-rw-rw-
  • 目录文件的默认起始权限:rwxrwxrwx

但是我的Linux系统上,却不一样?
这要涉及到权限掩码,可以使用umask命令查看你的系统的权限掩码

记住一个公式:

这个公式的意思是,把mask按位取反,然后和相应的默认起始权限按位与,最后得到相应的默认权限。
以我的linux系统为例。

我的linux的权限掩码为0002,取后三个,也就是002,002对应二进制000 000 010.取反后和666默认起始权限,也就是110 110 110按位与,最后得到664,也就是rw-rw-r.

关于目录的权限

目录的权限限制了什么呢?

  • 可读权限: 如果用户对于目录没有可读权限, 则该用户无法用ls等命令查看目录中的文件内容.
  • 可写权限: 如果用户对于目录没有可写权限, 则该用户无法在目录中创建文件, 也无法在目录中删除文件.
  • 可执行权限:如果目录没有可执行权限,则该用户无法使用cd命令切换到该目录中

那么按照逻辑来说,只要我这个用户拥有了可写的权限,是不是就可以不受限制地在该目录下新建和删除文件了呢?

[test_user@VM-0-2-centos ~]$ ll
total 4
drwxrwxrwx 2 test_user test_user 4096 Apr 10 19:43 user_dirt1 //目录
[test_user@VM-0-2-centos test_user]# cd user_dirt1 //切换到该目录
[test_user@VM-0-2-centos user_dirt1]$ ll
total 0
-rw-rw-r-- 1 YDY YDY 0 Apr 10 19:28 user_file1 //目录下的文件拥有者和所属组为YDY
[test_user@VM-0-2-centos user_dirt1]$ rm -rf user_file1 //尝试删除
[test_user@VM-0-2-centos user_dirt1]$ ll
total 0 //居然删除成功了!

为什么我YDY是拥有者和所属组,却可以被你test_user用户给删了呢?这样真的不太地道。

为了解决这个不地道的事情, Linux引入了粘滞位的概念
【粘滞位】

使用粘滞位可以满足other在特定的目录下创建文件并且写入,但是只有文件的拥有者才能删除该目录下的文件。

如何设置为目录设置粘滞位?
答:为目录的other添加t权限 ,就设置了粘滞位,可使用命令chmod o+t 目录名

此时该目录下的文件就不允许其他人随便删除了

Linux权限的理解 | 粘滞位 |权限掩码 |文件类型相关推荐

  1. linux粘滞位权限,Linux中的特殊权限粘滞位(sticky bit)详解

    Linux下的文件权限 在linux下每一个文件和目录都有自己的访问权限,访问权限确定了用户能否访问文件或者目录和怎样进行访问.最为我们熟知的一个文件或目录可能拥有三种权限,分别是读.写.和执行操作, ...

  2. Linux入门:权限管理之粘滞位

    关于linux下粘滞位(sticky位): 粘滞位(Sticky bit): 如果用户对目录有写权限,则可以删除其中的文件和子目录,即使该用户不是这些文件的所有者,而且也没有读或写许可.粘滞位出现可执 ...

  3. 粘滞位权限与文件保护

    通常情况下用户只要对某个目录具备w写入权限,便可以删除该目录中的任何文件,不论这个文件的权限是什么.例如我们进行以下的操作: 以root用户的身份创建目录file,并赋予file目录777权限.在fi ...

  4. linux应用程序设置粘滞位,Linux粘滞位的设置

    粘滞位(Stickybit),或粘着位,是Unix文件系统权限的一个旗标.最常见的用法在目录上设置粘滞位,如此以来,只有目录内文件的所有者或者root才可以删除或移动该文件.如果不为目录设置粘滞位,任 ...

  5. linux应用程序设置粘滞位,Linux中的粘滞位

    Sticky 位是一个访问权限标志位,可以用来标示文件和路径. 历史: 粘滞位是在1974年Unix的第5版中引入的,用来设置可执行文件.当可执行文件设置粘滞位之后,它能够指示操作系统在程序退出后,保 ...

  6. linux应用程序设置粘滞位,Linux中设置粘滞位

    关于目录有三种权限: r - -可读权限,可以列出目录下的内容(但如果要列出目录下的内容必须要能进入这个目录所需要的权限为 r-x) -w-可写权限,可以往目录里些内容(但是如果如果往目录里面些内容, ...

  7. 【Linux】Linux权限管理 —— shell运行原理 | 权限 | 目录权限 | 粘滞位 | 权限掩码umask

    Linux权限及相关指令 1. shell命令以及运行原理 2. Linux权限管理 2.1 权限相关概念 2.1.1 用户分类 2.1.2 如何用户切换 2.2 权限的两要素 2.2.1 人 2.2 ...

  8. 【Linux】权限管理 _目录权限 _umask _粘滞位[学习总结 _复习专用]

    1.Linux权限的概念 Linux下有两种用户:root.普通用户. root:可以在Linux系统下做任何事情,不受权限的限制 普通用户:在Linux下做有限的事情 root用户的命令提示符是&q ...

  9. 【Linux】什么是粘滞位

    文章目录 前言 粘滞位 用法 谁能删除 前言 我们知道了用户一旦拥有了目录的写权限,就可以删除目录中的文件,而用户本身可能没有这个文件的写权限.这样就会造成:我张三创建的一个文件,莫名其妙被李四删掉的 ...

  10. linux系统下的粘滞位

    1.粘滞位的引出: 用户对目录具有(w)写的权限就可以删除目录(不是用户自己创建的目录)中的文件,哪怕该用户对该文件(不是用户自己创建的文件)没有写(w)的权限 用户具有目录写的权限 root用户创建 ...

最新文章

  1. 绝命沙虫 精度,double,模拟 牛客白月赛44
  2. Android Broadcast 和 BroadcastReceiver的权限限制
  3. 蓝桥杯2013年省赛C/C++大学组 C/C++
  4. [翻译] RAReorderableLayout
  5. 理想的工作永远不存在
  6. Atitit 文件远程传输读写协议 scp http ftp nfs webdav smb D:\Program Files\Git\usr\bin\scp.exe 4.密码安全策略不完善 在
  7. win7修复计算机消失,Win7一键修复丢失DLL,常见dll丢失一键修复方法
  8. 随机数练习1,和电脑比roll点
  9. Java jdk 1.8版本安装包
  10. 35、html制作QQ彩贝热销时装页面(注意:需要素材)
  11. mysql处理微信表情
  12. 樊登读书分享ppt_樊登读书《干法》学习分享
  13. 百度云不限速下载最新破解真好用
  14. 【GNN】GN:更通用的 GNN 架构
  15. 手机号与邮箱正则表达式
  16. 信息系统故障分析案例---------记一次性能检测系统故障排查
  17. linux基础 linux命令跟踪 strace命令
  18. SharePoint Designer 2013 和 Visio 2013 中的工作流开发
  19. maven工程私服仓库配置(阿里云仓库)
  20. 《清华园日记》读后感

热门文章

  1. word怎么竖向选中,word怎么文字竖排的两种方法
  2. android自定义view星空,自定义RecyclerView星空列表「多item且互相交错,自定义列表,ViewGroup级」...
  3. tif构建金字塔失败arcgis_ArcGIS影像构建金字塔小窍门
  4. [杀形态验证]3D准确率达98
  5. idea怎么运行c语言程序,IntelliJ IDEA 10.0 64位运行方法
  6. 离线地图开发 支持 局域网内二次开
  7. 大学生网页制作之美食篇html+css静态网页设计
  8. 使用 Kubernetes Ingress 对外暴露服务
  9. hdu-5745 La Vie en rose bitset
  10. SEO网站关键词挖掘策略