我们都知道Windows以图形化界面为交互方式,而Linux以命令行界面为交互方式。Windows和Linux的交互方式虽然不同,但本质上是一样的,图形化界面和命令行界面都是为了让用户进行相关操作,而图形化界面和命令行界面就是我们所说的“外壳程序”。
Linux操作系统 = Linux内核 + Linux外壳 + 配套程序
Linux严格意义上说的是一个操作系统,我们称之为“核心(kernel)“ ,但我们一般用户,不能直接使用kernel。
而是通过kernel的“外壳”程序,也就是所谓的shell,来与kernel沟通。
从技术角度,Shell的最简单定义:命令行解释器(command Interpreter)主要包含:
对比windows GUI,我们操作windows 不是直接操作windows内核,而是通过图形接口,点击,从而完成我们的操作(比如进入D盘的操作,我们通常是双击D盘盘符.或者运行起来一个应用程序)。
shell 对于Linux,有相同的作用,主要是对我们的指令进行解析,解析指令给Linux内核。反馈结果在通过内核运行出结果,通过shell解析给用户。
- 如果说你是一个闷骚且害羞的程序员,那shell就像媒婆
- 操作系统内核就是你们村头漂亮的且有让你心动的MM小花
- 你看上了小花,但是有不好意思直接表白,那就让你你家人找媒婆帮你
- 所有的事情你都直接跟媒婆沟通,由媒婆转达你的意思给小花
- 而我们找到媒婆姓王,所以我们叫它王婆,它对应我们常使用的bash。
- 超级用户:可以再linux系统下做任何事情,不受限制
- 普通用户:在linux下做有限的事情。
- 超级用户的命令提示符是“#”,普通用户的命令提示符是“$”。
- 命令:su [用户名]
- 切换用户
eg:例如,要从root用户切换到普通用户user,则使用 su user。 要从普通用户user切换到root用户则使用 su root(root可以省略),此时系统会提示输入root用户的口令。
- 切换到root:用su -,我们可以切换到root用户(此时输入root账号密码,密码是不会回显在屏幕上的)
- 切换回普通用户:用su - 用户名 切回普通用户,(此时不用输入密码,但是我们不建议这样切回,因为使用su -命令时,会创建更多的bash进程)
- 推荐的切换回普通用户:输入exit或者敲击Ctrl+d,回退到普通用户 。
权限本质上是决定某件事情,某人能否做。
文件受人的影响和文件受本身自身特点 (事物属性) 的影响 所以文件权限 = 人 + 事物属性
文件权限属性:r(读)、w(写)、x(执行权限)
人 (一种角色):拥有者、所属组、other (其它)
- 文件和文件目录的所有者:u—User(中国平民 法律问题)
- 文件和文件目录的所有者所在的组的用户:g—Group(不多说)
- 其它用户:o—Others (外国人)
注: 除了文件拥有者和文件所属组之外的都叫other。
使用命令 ls -l (ll) 显示的多列属性的第一列对应的字符来区分它的文件类型。
d:文件夹
-:普通文件
l:软链接(类似Windows的快捷方式)
b:块设备文件(例如硬盘、光驱等)
p:管道文件
c:字符设备文件(例如屏幕等串口设备)
s:套接口文件
权限涉及到某个具体的事物来说,我们还需要讨论事物本身的属性。对于文件来说,我们应该讨论其文件类型,以及是否具有可读、可写和可执行的属性。
i.读(r/4):Read对文件而言,具有读取文件内容的权限;对目录来说,具有浏览该目录信息的权限
ii.写(w/2):Write对文件而言,具有修改文件内容的权限;对目录来说具有删除移动目录内文件的权限
iii.执行(x/1):execute对文件而言,具有执行文件的权限;对目录来说,具有进入目录的权限
iv.“—”表示不具有该项权限
字符表示方法
Linux表示 | 说明 | Linux表示 | 说明 |
---|---|---|---|
r - - | 只读 | - w - | 仅可写 |
- - x | 仅可执行 | r w - | 可读可写 |
- w x | 可读可执行 | r - x | 可读可执行 |
r w x | 可读可写可执行 | - - - | 无权限 |
八进制数值表示方法
权限符号(读写执行) | 八进制 | 二进制 |
---|---|---|
r | 4 | 1 0 0 |
w | 2 | 0 1 0 |
x | 1 | 0 0 1 |
r w | 6 | 1 1 0 |
r x | 3 | 0 1 1 |
r w x | 7 | 1 1 1 |
- - - | 0 | 0 0 0 |
- 功能:设置文件的访问权限
- 格式:chmod [参数] 权限 文件名
- R -> 递归修改目录文件的权限
说明:只有文件的拥有者和root才可以改变文件的权限
- ① 用户表示符+/-=权限字符
+:向权限范围增加权限代号所表示的权限
-:向权限范围取消权限代号所表示的权限
=:向权限范围赋予权限代号所表示的权限
用户符号:
u:拥有者
g:拥有者同组用
o:其它用户
a:所有用户
注意:chmod可以给拥有者,所属组,其他用户同时修改权限,中间用逗号隔开.
如果要修改不是自己的文件的时候需要sudo临时权限提升或者直接切成root身份
sudo chmod 用户表示符 + / - = 权限字符 文件名
语法: chgrp?选项?用户名?文件名或目录名
功能: 修改文件的所属组。
常用选项: -R 递归修改目录文件的所属组。
- 注意: 修改文件的拥有者需要root用户进行操作,若是普通用户则需要进行权限提升。
也可以使用chown指令同时修改文件的拥有者和所属组,将拥有者和所属组的用户名用冒号隔开即可。
语法: chgrp?选项?用户名?文件名或目录名
功能: 修改文件的所属组。
常用选项: -R 递归修改目录文件的所属组。
注意: 修改文件的所属组也需要进行权限提升。
我们查看新建的文件和目录,它们都有自己默认的权限。
新建文件的默认权限为0666,新建目录的默认权限为0777。其中第一位的0与特殊权限有关,而后面三位就是权限的八进制数值表示方法,我们将其翻译为字符表示方法。
原因就是创建文件或目录的时候还要受到umask的影响。假设默认权限是mask,则实际创建的出来的文件权限是: mask & ~umask
实际上,所创建出来的文件和目录的权限值往往不是我们所翻译出来的值,原因就是创建文件和目录的时候还要受到umask的影响,假设默认权限是mask,则实际创建出来的文件权限是:mask&(~umask)
我们可以通过指令umask查看文件默认掩码。
我们实际创建出来的文件和目录的权限值还需要进行进一步换算才能得出。首先我们将掩码的的后三位八进制换算为二进制,然后对其进行按位取反。
对于文件来说,其可读可写可执行的属性我们都知道分别代表着什么对应的操作,那对于目录来说可读可写可执行又分别代表着什么呢?
1)可读权限: 如果用户没有该目录的可读权限,则无法通过ls指令查看目录中的文件内容。
2)可写权限: 如果用户没有该目录的可写权限,则无法通过一系列指令在目录中创建文件或删除文件。
3)可执行权限: 如果用户没有该目录的可执行权限,则无法通过cd指令进入到目录当中。
那么这就会出现一个问题:
只要用户拥有某目录的可写权限,就可以删除该目录当中的文件,而不论该用户是否拥有该文件的可写权限,这显然是不合理的。
为了解决这个不合理的问题,Linux引入了粘滞位的概念。
语法: chmod?+t?目录名
功能: 给目录加上粘滞位。
当一个用户将某一个目录加上粘滞位后,该目录的权限值的最后一位变为字符“t”。
当一个目录被设置为粘滞位,则该目录下的文件只能由:
注意: 虽然目录被加上了粘滞位,但如果用户有该目录的可写权限,则不影响其在该目录下创建文件