欢迎各位大佬光临本文章!!!
还请各位大佬提出宝贵的意见,如发现文章错误请联系冰冰,冰冰一定会虚心接受,及时改正。
本系列文章为冰冰学习编程的学习笔记,如果对您也有帮助,还请各位大佬、帅哥、美女点点支持,您的每一分关心都是我坚持的动力。
我的博客地址:bingbing~bang的博客_CSDN博客
https://blog.csdn.net/bingbing_bang?type=blog
我的gitee:冰冰棒 (bingbingsupercool) - Gitee.com
https://gitee.com/bingbingsurercool
系列文章推荐
目录
前言
在Linux中,用户是不能与操作系统直接进行交互使用的。原因很简单,如果让人直接访问操作系统,首先操作成本非常高,并且用户难免在使用中会发生一系列的错误,不容易维护。因此我们在与操作系统进行交互的时候就需要使用操作系统提供的外壳程序,该程序是我们与操作系统交流的媒介,能够提供给用户命令来使用操作系统,也能在一定程度上保护操作系统。我们既然使用该外壳程序与操作系统进行交互,就必然需要遵守一些规定,授权的命令才能执行,没有权限的命令无法执行。所有我们需要对Linux进行权限的理解。
1、Linux权限的概念
Linux下有两种用户,普通用户和超级用户,普通用户就是平民,超级用户可以理解为皇帝,拥有非常大的权限,基本不受权限约束。而对于平民来说,权力非常有限,只能做一些被明确允许的事情。
那我们如何进行身份的切换呢?
切换用户通常使用su命令:
su 用户名:进行用户切换,使用当前路径
su - 用户名:进行用户切换,使用用户家目录
例如,普通用户切换成root用户:
root 切换成普通用户:直接切换,不需要相应的密码
实际上我们在对用户进行切换,就是在对权限进行切换。
2、Linux的权限管理
介绍完用户后,下面我们得知道怎么来使用这些权限,首先 看一下,Linux下一个文件被创建后都具备那些权限。
当我们使用mkdir 和touch进行目录和文件的创建后,使用 ls -l 命令可以显示文件的具体信息。
我们知道,Linux下一切皆文件,并且Linux不以文件名后缀来区分文件的格式。那Linux怎么来区分文件种类呢?实际上我们通过ls -l 将一个文件的具体信息进行打印出来后,我们发现其对应了很多参数,这些参数代表了不同的意思。
(1)文件类型
文件类型在第一位种表示,文件类型有以下几种:
d :文件夹(目录文件)
- :普通文件
p :管道文件
b :块设备(磁盘设备)
c :字符设备(键盘或者显示器)
l :链接文件(快捷方式)
s :套接口文件
(2)基本权限
一个文件具备三种权限:
r :只读权限,对于普通文件来说,可以读取文件内容,对于目录来说可以浏览目
录信息,并且查看目录中有哪些文件。
w :只写权限,对于普通文件来说,可以更改文件的内容,对于目录文件来说可以
创建,移动,删除目录中的文件
x :执行权限,对于普通文件来说,可以执行文件,对于目录文件来说可以进入目
录。
(3)权限表示
文件信息的第2到10位表示权限信息,表示顺序是确定的,即rwx。如果对应位置为 '-' 则表示不具备该权限。表示方式有两种,字符形式和8进制形式。
字符表示:
Linux表示 | 说明 | Linux表示 | 说明 |
r - - | 只读 | - w - | 仅可写 |
- - x | 仅可执行 | r w - | 可读可写 |
- w x | 可写可执行 | r - x | 可读可执行 |
r w x | 可读可写可执行 | - - - | 无权限 |
8进制表示:
权限符号 | 八进制 | 二进制 |
r | 4 | 100 |
w | 2 | 010 |
x | 1 | 001 |
rw | 6 | 110 |
rx | 5 | 101 |
wx | 3 | 011 |
rwx | 7 | 111 |
- - - | 0 | 000 |
(4)权限归属
表示权限的共有9个位,三个为一组,代表三个身份。
拥有者:文件属于谁,用前三位表示。
所属组:文件属于哪一个组,用中间三位表示。
other:不属于上面两种身份,就是其他人,用后三位表示。
因此下面文件的权限为,拥有者lb可以对文件进行读写操作,不能执行;所属组lb对文件可以进行读写操作,不可以执行,其他人对文件只有读取的权限。
那为什么要设置这三种身份来管理文件的权限呢?道理很简单,一个文件属于我自己,我可以对其进行各种操作天经地义,可是其他人要想看我的文件是否得经过我的允许呢?如果不经过我的同意,其他人可以随便更改我的文件,这是非常不合理的行为,因此我可以将文件设置为其他人不能更改查看。但是,如果我的同事和我做同一个项目,我的文件需要对他开放读写权限,如果没有所属组概念,当我打开文件其他人的权限时,我的竞争对手也可以查看修改我的文件,因此我只打开所属组的权限,和我一组的人可以查看修改,其他人还是不能看。
3、文件访问权限的设置方法
文件的访问权限怎么设置呢?chmod是用来更改文件访问权限的命令。
命令:chmod + 权限 + 文件名
常用选项:
u :代表拥有者
g :代表所属组
o :代表其他人
a :代表所有
+ :增加权限
- :减少权限
= :向权限范围赋予权限代号所表示的权限,chmod u=x file.txt表示file.txt文件拥有
者的权限只有执行权限了
例如:chmod u+r file.txt 该命令表示将文件file.txt的拥有者加上读取权限
更改方式有两种,第一种使用字符进行更改,chmod 后加更改对象再加相应权限。
第二种,用8进制进行更改,chmod 后加0~7数字,再加文件名
注意,root用户不受任何权限约束,并且可以随意更改任何文件的权限。
例如下面的情况,首先lb用户将自己的文件file.txt的所有权限都关闭,然后进行文件读取和写入都不能进行,即便你是文件的拥有者。
然后将用户切换成root,对于文件file.txt来说,root用户不是拥有者,也不是所属组,属于其他人,其应该不具备任何权限。可是我们发现,root可以做任何事情,即便文件没有任何权限。
4、修改文件归属权限
文件的访问权限现在我们知道怎么进行修改了,那我想将我的文件变成其他人的文件可以吗,或者更改一下文件的所属组可以吗?
答案是肯定的,但是我们要知道,将一个东西给与他人,或者将文件变为自己的是需要征得其他人的同意的,我要你的文件给我,你不同意我就没有办法。
chown和chgrp是更改文件拥有者和所属组的命令。
使用:
chown zhangsan file.txt ---- 将文件file.txt的文件拥有者改为zhangsan
chgrep lisi file.txt --- 将文件file.txt的文件所属组改为lisi
例如我们使用root用户来将文件归属进行更改:
5、umask和粘滞位
(1)umask
Linux默认在文件创建时,如果是目录文件则起始权限是777,如果是普通文件,则起始权限是666。但是我们发现自己创建出来的文件并不是这样,为什么呢?
这是因为umask存在的原因,umask命令的功能是查看或者修改文件掩码,文件在创建时其权限为起始权限与掩码的反码进行按位与之后的结果所决定的,即凡是在umask中出现的权限,都不应该在最终权限中出现。
umask普通用户默认值为0002,超级用户为0022。
在命令行中输入umask 可以查看掩码,后面加上数字可以更改。
(2)粘滞位
通过前面我们得知,进入目录的权限是目录具备执行权限,浏览目录文件是目录具备读取权限,创建文件,删除文件是目录具备可写权限。当我们进行项目创作时会发现,不同的用户需要在同一个目录下进行创建文件,这时我们虽然可以设置文件权限让其他人不具备读写自己文件的权限,但是其他人可以将我们的文件进行删除,这就不科学了,凭啥你可以删除我的文件呢?
为了解决这种现象,Linux引入了粘滞位的概念,什么意思呢?
当一个目录被设置为粘滞位后,该目录下的文件只能由超级管理员删除,该目录的所有者删除,该文件的所有者删除。粘滞位只能给目录添加,不能给普通文件添加,粘滞位的取消只能是目录所有者执行。
设置方式:
chmod + t + 目录名
例如,在家目录下我们使用root创建一个目录temp,用户zhangsan和lb都能进来进行创建文件,里面包含lb的文件和zhangsan的文件。
zhangsan虽然不能更改lb的文件,但是它可以将文件删除。
然后我们回退到上层目录,增加粘滞位。
然后我们发现,再用zhangsan进行删除时,文件已经不能被删除了。
总结
Linux不以文件名后缀来作为文件类型的区分,但是并不意味着我们可以不写文件类型后缀,Linux下的软件有可能需要文件后缀来区分文件类型,例如gcc,并且,良好的文件名后缀可以让我们再查看文件时更容易识别文件。
目录的可执行权限是表示你可否在目录下执行命令。 如果目录没有-x权限,则无法对目录执行任何命令,甚至无法cd 进入目录, 即使目录仍然有 -r 读权限(这个地方很容易犯错,认为有读权限就可以进入目录读取目录下的文件) 而如果目录具有-x权限,但没有-r权限,则用户可以执行命令,可以cd进入目录。但由于没有目录的读权限。所以在目录下,即使可以执行ls命令,但仍然没有权限读出目录下的文档。