前言
其实我们在学会运用一些简单的Linux指令之后,我们可以简单的用ls查看当前目录的文件有哪些啊,可以使用tree用树形结构查看目录,可以使用touch来创建文件,用mkdir创建目录,可以使用rm来删除目录和文件,还可以使用等等的指令来配合我们想实现的行为。我们也是第一次听到权限这个词的,原因其实是因为我们一直是root用户,偷偷告诉你吧,root可以无视任何权限哦~
那权限是干嘛的呢?权限是限制什么的呢?权限出现的意义是什么呢?
请大家带着疑惑跟我一起学习权限吧!
忘记指令的可以看我这篇博客
一、Linux的两种用户
正如上文所说,我们一直使用的是root用户,并且在我们是root用户的时候并没有接触权限这个东西,所以我们把root用户又称为超级用户,而非root用户就是普通用户了。那接下来就一起学习这两种用户的区别吧!
1.1 root用户
1. Linux下的超级用户,可以做任何事情,不受限制
2. 一个Linux系统有且只有一个root用户
3. root用户在命令行的提示符是 #
1.2 非root用户
1. Linux下的普通用户,不被允许做任何事情,只可以做权限内的事
2. 一个Linux系统可以有多个普通用户
3. 普通用户的命令行提示符是 $
1.3 如何添加一个普通用户呢?
1. 建立用户: adduser 用户名
2. 设置密码:passwd 用户名
1.4 切换用户的命令
查看当前的普通用户有谁
ls /home
1. 切换普通用户(在root用户中)
方法一: su 用户名
特点:1. 不切换当前目录
2. 不需要输入密码
方法二:su - 用户名
特点:1. 以普通用户的身份重新登陆,切换到自己的家目录下
2. 不需要输入密码
2. 切换普通用户(在普通用户中)
方法一: su 用户名
特点:1. 不切换当前目录
2. 需要输入密码
方法二:su - 用户名
特点:1. 以新的普通用户的身份重新登陆,切换到自己的家目录下
2. 需要输入密码
3. 切换root用户(在普通用户中)
方法一: su 或者 su root
特点:1. 不切换当前目录
2. 需要输入密码
方法二:su - 或者 su - root
特点:1. 以root的身份重新登陆,切换到自己的家目录下
2. 需要输入密码
4. 回退到上一个用户
键盘快捷键:control➕d
指令二:logout
指令三:exit
1.5 sudo指令的应用(后续更新如何添加)
普通用户可以以root身份执行,对指定的指令提权。但是我们在使用sudo的前提是,我们被root用户允许了,而如何允许的?是在sudoers的配置文件中添加了我们的用户名了,目前我们暂时不介绍,我们了解sudo可以让普通用户暂时拥有root用户的权限就可以了。
二、权限
在了解Linux环境下的不同用户之后,我们来学习权限吧!那什么是权限呢?
比如学校,你只有刷脸通过才可以进学校,因为你是学生你才可以进,并不是你是你;
比如看电视,有些影片只有vip可以看,因为你是vip你就可以看,并不是你是你
比如酒店,你是酒店的住客,你才可以住,并不是你是你;
这都说明了一点,因为你的身份,才给你了一些权限,并不是因为你是你。
所以权限一定是限制我们可以做的事情的范围的,但是在生活中也总有那些不受限制的人的存在。
这与我们Linux下是一致的,普通用户受权限制约,root用户无视权限
2.1 权限出现的地方
我们要知道Linux下一切皆文件,所以对于Linux下涉及权限的地方无非就是是否可以访问文件,是否可以创建文件,是否可以修改文件,是否可以删除文件等。而我们对文件这一系列操作的人,也被分为下面这几种:
2.2 文件访问者的分类
1. 文件和文件目录的所有者:User ——————用u表示
2. 文件和文件目录的所有者所在的组的用户:Group——————用g表示
3. 既不是文件的拥有者,也不是所属组的其他用户:Others————用o表示
所以我们会以什么身份来访问文件?文件中又在哪里体现了我们的身份?文件被访问,修改,删除,创造等一系列操作的权限又在哪里体现?我们带着这三个问题继续学习新的知识———文件的访问权限
2.3 文件的访问权限和属性
1. 读权限 ‘ r ’ :对文件而言,具有读取文件内容的权限;
2. 写权限 ‘ w ’ :对文件而言,具有修改文件内容的权限;
3. 可执行权限 ‘ x ’ :对文件而言,具有执行文件的权限;
4. — :表示不具有该项权限
这些权限都是在文件的属性中查看的:使用ll命令
如下就是分类:
所以我们是否可以去访问文件,是先根据我们是什么角色,再看文件中角色的对应位置的权限的;
当然root无视一切权限;
并且我们只能扮演一种角色,先看拥有者是不是我,如果是我,即使所属组也是我,我们也仅仅扮演拥有者;
2.4 文件权限值的表示方法
1. 以字符表示
Linux表示 | 说明 |
r-- | 只读 |
-w- | 只写 |
--x | 可执行 |
rw- | 可读可写 |
r-x | 可读可执行 |
-wx | 可写可执行 |
rwx | 可读可写可执行 |
--- | 无权限 |
2. 以八进制数值表示
权限符号 | 八进制 | 二进制 |
r-- | 4 | 100 |
-w- | 2 | 010 |
--x | 1 | 001 |
rw- | 6 | 110 |
r-x | 5 | 101 |
-wx | 3 | 011 |
rwx | 7 | 111 |
--- | 0 | 000 |
2.5 权限的相关指令
1.修改权限指令 chmod(可以同时给u,g和o一起修改,中间加逗号)
使用规则 | 示例 | 功能 |
chmod u+/- rwx 文件名/目录名 | chmod u+r file chmod u-r file chmod u+rw file chmod u-rwx file |
给指定文件或者目录在拥有者的权限做改变 |
chmod g+/- rwx 文件名/目录名 | chmod g+r file chmod g-r file chmod g+rw file chmod g-rwx file |
给指定文件或者目录在所属组的权限做改变 |
chmod o+/- rwx 文件名/目录名 | chmod o+r file chmod o-r file chmod o+rw file chmod o-rwx file |
给指定文件或者目录在others的权限做改变 |
chmod a+/- rwx 文件名/目录名 | chmod a+r file chmod a-r file chmod a+rw file chmod a-rwx file |
给指定文件或者目录在拥有者,所属组和others的权限都做改变 |
chmod 三位八进制 文件名/目录名 | chmod 777 file chmod 657 file |
修改权限为八进制对应的权限 |
2. 修改拥有者指令 chown
注:chown指令在普通用户中不可以使用,在root用户中才可以使用
使用规则 | 示例 | 功能 |
chown user 文件名/目录名 | chown xmb file | 修改file文件的拥有者为xmb |
3. 修改所属组指令chgrp
注:chgrp指令在普通用户中不可以使用,在root用户中才可以使用
使用规则 | 示例 | 功能 |
chgrp group 文件名/目录名 | chgrp xmb file | 修改file文件的所属组为xmb |
若想同时修改拥有者和所属组
使用规则 | 示例 | 功能 |
chown user:group 文件名/目录名 | chown xmb:xmb file | 修改file文件的拥有者和所属组为xmb |
三、文件类型
首先Linux文件类型不同过后缀区分(不代表不用后缀)
Linux对文件后缀的态度:虽然Linux不通过后缀来识别文件类型,但是我们依旧推荐使用,因为我们的某些指令需要(gcc,g++需要后缀为.c/.cpp的文件),我们用户也需要,可以通过后缀区别具体的文件类型
3.1 文件类型的分类
文件前缀 | 代表的文件类型 |
‘-’ | 文本、源代码、图片、视频、库、可执行等文件 |
‘d’ | 目录文件 |
‘b’ | 块设备文件(磁盘,光驱); 可以在b文件中随机访问数据 |
‘c’ | 字符设备文件(键盘文件,显示器文件) 不支持在c文件中随机访问 |
‘l’ | 软链接文件(文件的快捷方式) |
‘p’ | 管道文件 |
‘s’ | 套接口文件 |
1. 查看对应前缀的文件
虚拟机 | 云服务器 | |
看前缀为b的文件 | ll /dev/sd* ll /dev/hd* |
ll /dev/vda* |
看前缀为c的文件 | ll /dev/tty* |
2. 创建软链接文件(类似指针和快捷方式)
ln -s 被链接的文件 软连接文件
3. 建管道文件
mkfifo 文件
3.2 查看文件类型指令
file 文件类型
四、目录的权限
x :决定是否可以进入目录
r :决定是否可以查看目录下的文件/目录的属性
w :决定是否可以在目录下创建文件,重命名文件,删除文件
t :粘滞位,是给目录中other设置的一个权限位,在x的位置,具有x的作用,同时新增了一个权限,只允许root和文件的owner删除目录里的文件。
chmod +t 目录名 增加目录的粘滞位
chmod -t 目录名 去掉目录的粘滞位
所以一个文件是否可以删除,并不取决于文件本身,而是取决于文件所处的目录的角色的权限是否具有‘ w ’权限
五、常见权限的问题
5.1 问题一
为什么创建的普通文件的默认权限不是777,而是664;为什么创建的目录的默认权限不是777,而是775?
我们的普通文件的起始权限是666,但是也不是664啊,目录文件的起始权限是777,也不是775。这又是为什么呢?这其实是因为一个叫权限掩码的东西(umask),其实是由起始权限和权限掩码的计算才得到我们文件的默认权限。
那如何查看我们当前用户的权限掩码呢?
umask
超级用户的默认权限掩码:0022
普通用户的默认权限掩码:0002
文件默认权限 = 起始权限 & (~umask)
5.2 问题二
我们如何实现在一个目录里,进行多用户共享呢?
我们进行多用户共享的目录一定不能是用户的家目录,家目录都是在根目录内的,所以我们要在根目录里找一个目录来进行多用户的文件的共享。
Linux系统默认的共享目录是tmp
而我们在进行共享的时候就怕别人会把你的创建的文件删除,所以在这里就用到了粘滞位。我们可以查看一下tmp的属性:
末尾有t,有粘滞位,只有自己才能删,别人删不了。