赞
踩
Linux严格意义上说的是一个操作系统,我们称之为“内核(kernel)”,但我们一般用户,不能直接使用kernel。而是通过kernel的“外壳”程序,也就是所谓的shell,来与kernel沟通。如何理解?为什么不能直接使用kernel?
内核是操作系统的核心,负责处理复杂的系统资源和任务。用户并不擅于直接与内核进行直接交流。
直接操作内核可能会导致系统不稳定或安全问题。内核中的错误或不当操作可能会对系统造成严重影响,甚至导致系统崩溃。通过Shell等中间层,可以对用户的操作进行一定的限制和检查,确保系统的安全和稳定。
Shell提供了更加友好和灵活的用户界面,允许用户以更加直观和便捷的方式与内核进行交互。
从技术角度,Shell的最简单定义:命令行解释器主要包含:
对比windows GUI,我们操作windows 不是直接操作windows内核,而是通过图形接口,点击,从而完成我们的操作(比如进入D盘的操作,我们通常是双击D盘盘符.或者运行起来一个应用程序)。
shell 对于Linux,有相同的作用,主要是对我们的指令进行解析,解析指令给Linux内核。反馈结果在通过内核运行出结果,通过shell解析给用户。
Linux下有两种用户:超级用户(root)、普通用户。
语法:su [用户名]
功能:切换用户。
例如,要从root用户切换到普通用户 user,则使用 su user。 要从普通用户user切换到root用户则使用 su root(root可以省略),此时系统会提示输入root用户的口令
普通账号刚创建时并不能使用sudo指令,需要在root账号对/etc/sudoers
文件进行配置后,普通账号才有使用sudo的权限。
语法:sudo [选项] [命令]
功能:sudo命令可以让普通用户以超级用户或其他用户的身份执行命令,而不需要知道超级用户的密码。
常用选项:
sudo命令的配置
配置文件:sudo的配置文件是/etc/sudoers
,该文件定义了哪些用户可以执行哪些命令。
由于这里还没有讲到vim的相关知识,大家可以在后面一篇文章中学习完vim的基本操作了再进行sudo命令的配置。
这里我来为大家讲述如何创建一个普通用户,并配置sudo命令。
adduser 用户名 // 创建普通用户
passwd 用户名 //设置普通用户登录密码
按照上面的步骤操作即可完成对sudo指令的配置。
为啥要有所属组呢? 有所有者和其他用户不是应该就够了吗?
假设张三和李四在同一个公司分别在A小组和B小组做相同的项目,张三的项目已经做3/4了,老板想看看张三做的项目,如果只有所有者和其他用户,老板想看张三的代码,那么张三只能开启other的读权限,那么张三的代码既能被老板看到,也能被李四看到,那么这样会导致张三的代码可能会被李四剽窃,而有了所属组,张三就可以将老板加入所属组,并开启所属组的读权限,那么张三的代码就只能被老板看而不能被李四看到。
为什么上面有图片中只有所有者和所属组,没有other呢?因为没有必要,除去所属组和所属组剩下就是other了。
没有对应的权限会怎么样?
以下图为例提一个问题,用户去掉文件拥有者的读权限,但是保留所属组的读权限,并且用户是所属组的组长,为什么不能读文件内的内容呢?
用户会按照顺序拥有者、所属组和其他用户的顺序匹配,如果用户匹配了拥有者则不会再向后匹配了,否则再向后面匹配,这里用户是拥有者也是所属组组长,不能因为拥有者的权限没有或少于所属组权限就继续向后匹配,所以这里用户匹配拥有者的权限,所以用户不能读文件内的内容。
-:普通文件、源代码、可执行程序、库等
d:文件夹(目录)
l:软链接文件(类似Windows的快捷方式)
可以使用ln指令创建软连接文件,具体使用我会在后面的文章中讲述到。
b:块设备文件(例如硬盘、光驱等)
p:管道文件,主要用于进程间的通信,它允许一个进程将数据写入管道的写入端,而另一个进程可以从管道的读取端读取数据。
c:字符设备文件(例如键盘、显示屏等)(终端设备是字符设备的一种)
在我们向显示器打印整数985的时候是输出一个一个的字符还是输出整数985?那么我们在输入一个整数的时候是输入一个个字符还是输入的整数呢?
实际上我们向显示器打印整数985的时候printf("%d",985)
,printf会将整数985格式化输出,输出一个一个的字符,所以显示器就是字符设备。当我们敲击键盘输入一个整数时,int x = 0 , scanf(“%d”,&x)
,实际上也是输入的一个一个字符,而输入的字符最终由格式化控制最终拼成一个整数,所以键盘也是一个字符设备,而上一篇文章中我为大家灌输了一个概念:Linux下一切皆文件!,所以键盘和显示器就是字符设备文件。
当我们输入ll /dev/pts*
时,会显示设备文件的详细的信息,我们发现这里只有两个设备文件,当我们在开一台设备再试试,我们可以发现多了一个设备文件。
那么如果在这个时候给这个多出来的设备文件输入信息回发生什么呢?我们发现文件的内容在新开的设备中显示了出来
‘-’
表示不具有该项权限Linux表示 | 说明 |
---|---|
rwx | 可读可写可执行 |
rw- | 可读可写 |
r-x | 可读可执行 |
r- - | 可读 |
-wr | 可写可执行 |
- w - | 可写 |
- - x | 可执行 |
- - - | 无权限 |
权限符号 | 八进制 | 二进制 |
---|---|---|
rwx | 7 | 1 1 1 |
rw- | 6 | 1 1 0 |
r-x | 5 | 1 0 1 |
r- - | 4 | 1 0 0 |
-wr | 3 | 0 1 1 |
- w - | 2 | 0 1 0 |
- - x | 1 | 0 0 1 |
- - - | 0 | 0 0 0 |
功能:设置文件的访问权限
语法:chmod [选项] 权限 文件名
常用选项:
说明:只有文件的拥有者和root才可以改变文件的权限
用户符号:
chmod命令权限格式
+:向权限范围增加权限代号所表示的权限
-:向权限范围取消权限代号所表示的权限
=:权限范围赋予权限代号所表示的权限
三位8进制数字
三位8进制数字对应着拥有者、所属组和其他用户的8进制权限,以下面chmod 664 test.c
为例,6代表的权限是rw-
,4代表的权限是r--
,所以这一段指令是将test.c
文件的拥有者权限改为rw-
,所属组的权限改为rw-
,其他用户的权限改为r--
。
功能:修改文件的拥有者
语法:chown [选项] 用户名 文件名
从下面的图片中我们可以看出在没有提权的情况下直接修改文件的拥有者是不行的,为什么呢?
在现实中我们送别人东西并不是直接“唉呀,给你给你”,还需别人的接收,Linux中同样如此,但是Linux中没有直接对应“接收”的机制来同意拥有者的变更,那么这里直接提权强制将文件“送”出去。
功能:修改文件或目录的所属组
格式:chgrp [参数] 用户组名 文件名
常用选项:-R 递归修改文件或目录的所属组
功能:查看或修改文件掩码
新建文件默认权限=0666
新建目录默认权限=0777
但实际上你所创建的文件和目录,看到的权限往往不是上面这个值。原因就是创建文件或目录的时候还要受到umask的影响。假设默认权限是mask,则实际创建的出来的文件权限是: mask & ~umask
语法:umask 权限值
说明:将现有的存取权限减去权限掩码后,即可产生建立文件时预设权限。超级用户默认掩码值为0022,普通用户默认为0002。
功能:辨识文件类型
语法:file [选项] 文件或目录...
常用选项:
可执行权限: 如果目录没有可执行权限, 则无法cd到目录中
可读权限: 如果目录没有可读权限, 则无法用ls等命令查看目录中的文件内容.
可写权限: 如果目录没有可写权限, 则无法在目录中创建文件, 也无法在目录中删除文件
于是, 那么这里提出一个问题,是否只要用户具有目录的写权限,用户就可以删除目录中的文件, 而不论这个用户是否有这个文件的写权限。这好像不太科学啊,我张三创建的一个文件,凭什么被你李四可以删掉?
我们发现如果有权限的情况下,李四确实可以将张三的文件删除,但是一般这种情况是不会发生的,因为在/home这个目录下就进不去,更别说里面的文件了
但是还有一种情况就是两个需要在同一个目录下进行合作,那么这种情况一般都是root账号在根目录下创建一个目录,两人都在这个目录工作,李四还是可以将张三的文件删除,那么应该怎么办呢?为了解决这个问题, Linux引入了粘滞位的概念。
当一个目录被设置为"粘滞位"(用chmod +t),则该目录下的文件只能由
如果有什么建议和疑问,或是有什么错误,大家可以在评论区中提出。
希望大家以后也能和我一起进步!!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。