Hello大家好!很高兴我们又见面啦!给生活添点passion,开始今天的编程之路!
我的博客:<但凡.
我的专栏:《编程之路》、《数据结构与算法之美》、《题海拾贝》、《C++修炼之路》、《Linux修炼:终端之内 洞悉真理》
欢迎点赞,关注!
目录
1、Linux文件类型
在linux系统中,系统是不以文件的后缀来区分文件类型的。那么系统是如何区分文件类型的呢?
我们新建几个文件,然后 ll 查看这几个文件的属性。
对于这三个文件来说,前两个是通过touch创建的普通文件,第三个是mkdir创建的文件夹。
在linux系统中,是用文件属性列区分的。哪一列是属性列呢?在上图中我已经标注出来了 。
其中,-代表这个文件是普通文件,而d代表这个文件是文件夹。除了这两个之外,还有一些文件属性:
l:软链接
b:块设备文件
p:管道文件
c:字符设备文件
s:套接口文件
像源代码,文本文件,可执行程序,文档,音视频,都是普通文件。块设备就是硬盘,SSD之类的。在linux系统中,块设备都存储在目录/dev下。像键盘、鼠标之类的文件都属于字符设备文件。
虽然说linux不用文件后缀来区分文件属性,但是不代表我们使用的工具不以文件后缀区分文件属性。所以说在新建文件时最好严格按照文件后缀建立。
2、Linux用户
其实linux系统是允许多用户登录的(当然Windows系统也支持),我们默认应该都是用root(管理员)来登录的。我们可以新建其他用户,并实现用户间的切换。既然存在管理员和普通用户,那权限肯定是有大小分别的。
我们可以使用adduser XXX来新建普通用户,使用passwd XXX来设置用户密码,userdel XXX来删除用户。在登录普通用户之后,我们使用su root并输入密码,就可以切换到管理账号。普通账号切换其他普通账号需要输入密码,但是管理账号切换普通账号是不需要输入密码的。
所有的普通账号都存在/home里,所以说我们可以通过查看/home目录来查看一共有几个普通账号。
普通用户不能对root创建的文件进行操作,普通用户也不能修改涉及系统配置或者核心文件的操作。就像在windows系统中,我们在删除系统盘中的某些文件时他会提示你需要管理员权限。在Linux系统中,如果我们是普通用户并且想更改一下系统配置,我们可以使用sudo +操作来短暂借用一下root权限(提权),当然了我们还是得输入密码。但是这个密码是自己账号的密码,不是超级用户的密码。
当然默认新增的普通用户是无法执行sudo的。必须通过root,把这个新增用户,添加到信任列表里才能执行sudo。我们使用nano记事本,在etc/sudoers文件中添加用户就可以了。
3、文件权限深入理解
我们在刚刚谈文件权限时只谈论了属性列。也就是第一列,剩下的几列是什么我们再来看一下。
我们先看最右边的红框,这个文件最新一次更改的时间。如果没有更改过那他就是文件创建时间。
从右往左第二个红框是文件的大小。
接下来几个框框我们就得细说一下了。
权限与身份
在linux系统中,每个用户对于每个文件都有特定的身份,身份有三种:拥有者,所属组,其他(other)。对于一个文件,身份不同的用户对于文件的权限不同。这个权限又分为r,w,x,对应读,写,执行。这里的执行只是说,如果你要执行这个文件,系统是允许的。但是这个文件不一定是可执行程序,所以说,一个文件就算你的权限有x,这个文件也不一定可以被执行。
拥有者很明显,就是文件的创建者。所属组我们可以理解为创建者的同事,其他可以理解为其余人,可能是一般人也可能是竞争者。
从左往右第二三四个框框,分别对应拥有者,所属组,其他的权限。
那么剩下两个框对应的就是拥有者和所属组是谁。
4、修改文件权限属性
一般只有文件的拥有者可以更改文件的权限属性。
我们可以使用chmod指令来实现权限的更改。
语法:chmod 身份 +/- 权限 文件名
举例:
我们还可以使用a更改所有人的权限:
其中,u代表拥有者,g代表所属组,o代表其他人,a代表所有人。
除此之外,linux文件权限也可以用三个二进制数来修改。比如,对于拥有者来说,默认情况他的权限时r w -,用1代表拥有该权限,用0代表没有改权限,那么拥有者初始权限对应二进制数就是6.我们可以使用666一次性设置三个身份的文件权限:
我们可以使用chown来更改文件的拥有者。当然了,普通用户是不能把文件拥有者给别人的,但是root可以把文件的拥有者给别人。我们可以用过提权或者切换用户来更改某个文件的拥有者。chown可以用来更改所属组。
在以下情景中,第一行命令是更改拥有者,第二行命令是更改拥有者和所属组。
在进行身份匹配时,只会从拥有者,所属组,other的顺序,成功匹配一次。
当然我这个用的是配置后的vim,所以是蓝色的字,如果用nano打开是白字。
5、目录权限
对于目录来说,如果没有r权限(但是有其他权限),我们也可以进入这个目录,甚至可以在里面创建文件,但是我们无法查看目录里面有什么文件。
其实对于目录来说,r,w,x都有新的意义
r:是否允许用户查看、执行目录下的文件信息。
w:该用户是否可以修改(属性)或者删除、执行目录下的文件,或者新建文件
x:能否进入一个目录
普通文件其实权限是666,而目录文件的起始权限是777。
但是如果我新建一个文件的话,发现他的默认权限是这样的:
这是为什么呢?其实,在linux中存在一个叫umask的概念,我们可以通过命令行来查看umask:
那么,我们的新建文件要在666或者777的基础上,去掉这个umask,通过&(~umask)的方式去掉:
算出来的结果和我们新建文件的默认权限时对应的。
这就意味着,不同的系统,新建文件的默认权限是不同的,因为默认umask码不同。并且,普通用户的umask码和root用户的umask码也可能不相同。
我们可以通过umask+数字的方式来修改umask码。在这里就不演示了。
在默认情况下,普通用户的家目录对于other和所属组都是没有任何权限的,普通用户的家目录只有自己和root能进入。也就是说root的权限非常高,不受文件的权限属性限制,但是root在极特殊情况也会有被限制的时候。
普通用户间文件共享
由于普通用户不能进入其他普通用户的家目录,如果两个普通用户想共用一个文件,这个操作只能root来做。root新建一个文件,让两个普通用户以other的身份去访问文件。
那么我们会有新的问题,就这个文件可以被任意一个普通用户删除。我们固然可以把目录中给other的w权限去掉,但是这样做得话任何普通用户也无法新建了。那么有没有什么办法,不改权限,也能保证文件不会被普通用户删除呢?
我们可以给目录设置粘滞位,这样除了root其他的普通用户就没法删除了。即只允许root或者文件拥有者删除文件。
举例:
查看shared目录属性:
切换普通用户,发现无法删除目录中的文件,但是仍然可以新建文件:
好了,今天的内容就分享到这,我们下期再见!