作为操作系统的一大巨头,linux可谓是程序猿们必须了解的一个东西;
而linux操作系统之中的权限也分高低,按用户分为普通用户和超级用户。
而它们之中有什么不同呢?来一起了解一下吧。
目录
Linux的用户
Linux中有两种用户,分为普通用户和超级用户(root);
二者的权限不同,可以做的事情也不同;
而用户之间可以通过su命令进行更换,但要输入对应用户的密码;
比如root用户可以通过su (普通用户名)的方式来登录该用户,但不需要输入密码;
而普通用户也能通过su命令登录root用户,但是普通用户想登录root用户必须输入root用户的密码。
那么说了这么多,root用户和普通用户的区别是什么呢?
root用户和普通用户的区别
在linux中,文件都有各种权限来限制其他用户,而普通用户会受到文件权限限制;
文件权限决定普通用户能不能修改,读取该文件,而root用户则不会受到文件权限限制;
root用户可以任意删除,读取,修改文件,这就是root用户和普通用户的区别;
文件的权限、类型
linux和windows系统不同,在windows中,系统通过文件后缀来区分不同文件,比如.c、.rar之类的,这类后缀决定这个文件是什么,用来干什么的。
而linux则采用了另外一种方式来区分不同文件。
在linux中输入 ls -l 的命令,我们可以看到文件的属性以列表的形式打印出来,我们发现;
在最左边,可以看到这样的一连串字母:

其中,最左端的字母就决定了这个文件的类型;
而linux中,就是以这种方式来决定不同文件类型;
文件类型
| d | 文件夹 |
| - | 普通文件 |
| l | 软连接 |
| b | 块设备文件 |
| p | 管道文件 |
| c | 字符设备文件 |
| s | 套接口文件 |
不同的文件具有不同的文件类型,而我们若是想在linux中创建一个能够写代码,且能编译并运行的文件,我们就应该这样写:
touch <xxxx>;
这样写,我们也不用像在vs或者其他windows环境下运行的软件一样,必须带不同的文件后缀才能编译不同语言的文件,比如.c,.cpp,.java之类的,只需要创建之后,在里面输入代码就能够编译运行。
而我们也能够看到上面图中除了最左侧的文件类型,还有一连串的字母:

rw-,rwx,r-x之类的,我们能够发现,抛开最左边的文件类型,其他字符都是三个三个存在的
这代表什么呢?
在了解这个之前,我们需要了解linux中,文件属性的排列方式:

上面就是文件属性的排列方式,每三个一组,而r、w、x、-、这四个字符,又有不同的含义;
| r | 读权限,代表对应的位置的用户具有访问该文件的权限 对于目录来说具有访问权限 |
| w | 写权限,代表对应的位置的用户具有修改改文件的权限 对于目录来说具有删除或移动目录内文件的权限 |
| x | 执行权限,代表对应的位置的用户具有执行该文件的权限 对于目录来说具有进入该目录的权限 |
| - | 代表没有该权限 |
从上面的图来说

比如第一个文件:
rwx rwx r-x,说明该文件的所有者具有读,写,执行的权限,而该用户所属组也具有读写执行的权限,而其他用户只具有读和执行的权限,不具有写的权限;
而在linux中这些文件的权限是通过二进制码设置的;
比如 rwxrwxr-x 的二进制位就是 111 111 101;
修改文件访问权限
chmod
一般文件的访问权限都是linux系统内部已经设置好了的,但是有时候有些文件光靠linux内部设置的不够用,因此linux提供了chmod方法来修改用户对文件的访问权限;
chmod
功能:设置文件的访问权限
格式:chmod [参数] 权限 文件名
在实际使用这个方法之前,我们需要了解如何更改对应用户的权限;
比如如果我想修改test.c的拥有者的权限,给拥有者加上x权限,那么我们应该这样做;

我们发现,在chmod方法的使用过程中,我们除了有文件的名字,还有一句 “u+x” 的语言;
x在前面已经说过,是文件的执行权限;
那么u是什么呢?
这我们就要了解到linux中的用户表示符了;
| u | 文件的拥有者 |
| o | 文件的其他用户 |
| g | 拥有者的所属组 |
| a | 所有用户 |
而想给用户添加权限或者减少权限也有对应的符号
| + | 添加对应权限 |
| - | 取消对应权限 |
| = | 赋予对应权限 |

通过图片我们可以发现,通过这个指令可以随意修改文件权限;
而之前我们也说过,其实所有的权限都可以通过二进制来表示,而 我们修改权限也可以用二进制码来修改;

此处我用chmod 000 test.c的方式,将所有权限取消;

而这里我用chmod 777 test.c的方式,将所有权限添加;
此处777 和 000 实际上都是8进制的数字,7转换为二进制是111,因此会将对应用户的权限全部添加上去;
而我是777的权限,因此所有用户的权限都添加上去了;
此外,chmod还有一个特别的参数—— "-r'
当我们想修改一个文件的所有用户权限的时候,我们除了使用 “chmod a-w test.c” 的方式
还可以这样写 “chmod -r -w test,c”
这样这个文件所有用户的w权限就被取消了;
修改文件所属者/所属组
除了修改文件权限,linux还提供了修改文件所属组和所属者的方法;
修改文件所属者
chown [参数] 用户名 文件名
修改文件所属组
chgrp [参数] 用户名 文件名
这两个方法的使用方式和chmod的方式一样,因此使用方式就不详细介绍了;
但是还是有需要注意的点;
chown和chgrp
chown可以修改文件的拥有者,chgrp可以修改文件所属组;
但是普通用户默认是无法将文件拥有者修改的;
只有超级用户或者普通用户使用sudo指令获得超级用户权限才能修改

上图中,我使用sudo命令提取root账户权限来更改test.txt的文件拥有者;
然后系统需要我输入自身账户的密码,但是由于这个账户并未在白名单上;
因此sudo提权失败;
而使用chgrp修改文件所属组也是需要进行sudo提权,否则就会拒绝;
文件掩码
umask
在linux中,文件初始权限实际上是根据文件初始默认权限与上文件掩码的反码生成最终的文件权限;
最终文件权限 = 默认权限&~umask;
比如,新建文件夹默认权限是 “0666”,而新建目录则是 “0777”,
而普通用户的掩码值为0002,超级用户的掩码值为0022;
因此普通用户创建文件夹的权限默认为 0666&~0002 = 0664 ;
而新建目录则是 0777 & ~0002 = 0775 ;
而文件掩码我们也是可以设置;
在linux中,单独使用umask是查看文件掩码,而umask后带数字则是设置文件掩码;
file命令
功能:辨别文件类型
使用方式:file [参数] 文件
参数:
-c:详细显示指令过程
-z:尝试解读压缩文件内容
粘滞位
一般来说,每个用户的home目录对于其他用户而言都是没有任何权限的;
但是在平常,也许是有特殊的用处,需要root创建一个共享目录;
该共享目录的权限应该是777;
可以供所有人在里面创建或删除文件;
这个时候就出现了一个问题——文件可以被其他用户删除;
之前说过,目录的 x 权限决定是否能够cd到目录中,w 权限决定是否可在目录中删除或者创建文件,r 权限决定是否可在目录中通过 ls 查看文件;
从这里我们就能够看出,文件能否被删除跟文件本身没有关系;
只和文件所在目录的权限有关系;
而为了解决这个问题,linux引入了粘滞位;
使用:
chmod +t [目录所在路径]
当我们给目录添加上 t 粘滞位时,那么用户想删除其他用户的文件时,就会删除失败;
当添加了 t 粘滞位后,那么该目录里的文件只能由三种用户删除:
1: root用户
2:该目录的所有者
3:该文件的所有者

9549

被折叠的 条评论
为什么被折叠?



