广义上:Linux发行版 = Linux内核 + 外壳程序 狭义上:Linux = Linux内核
Linux严格意义上说的是一个操作系统,我们称之为“核心(kernel)“ ,但我们一般用户,不能直接使用kernel,而是通过kernel的“外壳”程序,也就是所谓的shell,来与kernel沟通.如何理解?为什么不能直接使用kernel?
从技术角度,Shell的最简单定义:命令行解释器(command Interpreter)主要包含
对比windows GUI,我们操作windows 不是直接操作windows内核,而是通过图形接口,点击,从而完成我们的操作(比如进入D盘的操作,我们通常是双击D盘盘符.或者运行起来一个应用程序)
shell 对于Linux,有相同的作用,主要是对我们的指令进行解析,解析指令给Linux内核.反馈结果在通过内核运行出结果,通过shell解析给用户.
帮助理解:如果说你是一个闷骚且害羞的程序员,那shell就像媒婆,操作系统内核就是你们村头漂亮的且有让你心动的MM小花.你看上了小花,但是有不好意思直接表白,那就让你你家人找媒婆帮你提亲,所有的事情你都直接跟媒婆沟通,由媒婆转达你的意思给小花,而我们找到媒婆姓王,所以我们叫它王婆,它对应我们常使用的bash
Shell的好处:
Shell运行原理:
1)创建子进程,让子进程进行命令行解释. 2)子进程出现任何问题,都不影响父进程Shell.
注意: Shell只是所有外壳程序的统称,例如在centos 7当中的外壳程序名叫bash.程序运行起来就是一个进程,Shell本身就是一个进程
Linux下有两种用户:超级用户(root)、普通用户.
命令:su 用户名 功能:切换用户.
例如
要从root用户切换到普通用户user,则使用 su user. 从root切到普通用户不需要输入密码,要从普通用户user切换到root用户则使用 su root(root可以省略),此时系统会提示输入root用户的密码.
普通用户如何更改密码: password 超级用户更改密码: password 用户名
注意:
Ctrl+D
或者输入exit
实现.二者都可以切成超级用户,但是su切换后当前路径不变, 而 su -路径会发生改变,变成根目录
语法: sudo 指令 功能: 临时提升当前指令的权限,以root身份执行
普通用户想使用sudo.需要被超级用户添加到信任列表后,才能拥有提升当前指令的权限
方法: 1.在root用户下:用vim打开 /etc/sudoers
文件
2.使用基本的vim操作,在底行模式中,先打开行号 :set nu
,大概在100行左右,然后把自己添加到信任列表中用户名 ALL=(ALL) ALL
3.然后我们的用户就可以使用sudo命令了
当我们想要改密码时: 直接:sudo passwd 用户名
理解什么是权限:一件事情是否允许被特定的人做
权限约束的是人 和 文件本身具有的天然的权限属性: r + w + x (权限 = 人 + 事物的属性), 所以权限的操作只分两类: 1.修改人 2.修改文件的属性
注意:
1)对于某一文件而言,其拥有者、所属组和other就是由超级用户(root)和普通用户所扮演
2)在Linux当中,所有用户都要隶属于某一个组,哪怕这个组只有你一个人(此时该组就以你的用户名为组名)
为什么存在所属组的概念?
假如某公司存在两个小组,二者是竞争关系,在同一个Linux服务器进行着同一款项目的开发,如果没有所属组的概念
可以通过ll 或者ls -l
指令查看具体的信息
所属组: 自己看到&&同组的人看到,不想让其他人看到
权限涉及到某个具体的事物来说,我们还需要讨论事物本身的属性.对于文件来说,我们应该讨论其文件类型,以及是否具有可读、可写和可执行的属性.
通过指令ll
,我们可以看到前面有一串字符,这串字符实际上就代表着该文件的类型和属性.
其中第一个字符代表该文件的类型,共10个字符
不同的字符开头表示不同的文件类型
注意:Linux当中,文件类型和文件后缀无关
剩下的字符,每三个分为一组,分别代表该文件相对于其拥有者、所属组以及other是否拥有某种属性.
每一组的三个字符的解析: 第一个字符代表该文件是否具有可读属性r,第二个代表是否具有可写属性w,第三个代表是否具有可执行属性x
基本权限:
读(r/4):Read对文件而言,具有读取文件内容的权限;对目录来说,具有浏览该目录信息的权限
写(w/2):Write对文件而言,具有修改文件内容的权限;对目录来说具有删除移动目录内文件的权限
执行(x/1):execute对文件而言,具有执行文件的权限;对目录来说,具有进入目录的权限
-
表示不具有该项权限
对于目录:
读取权限r:查看这个目录的内容 如:ls 写入权限w:向这个目录下创建文件或者创建普通目录 可执行权限x:进入目录 如:cd
例如
通过ll
指令显示文件权限值时的表示方法就是字符表示法
字符表示法 | 说明 |
---|---|
r - - | 仅可读 |
- w - | 仅可写 |
- - x | 仅可执行 |
r w - | 可读可写 |
r - x | 可读可执行 |
- w x | 可写可执行 |
r w x | 可读可写可执行 |
- - - | 无权限 |
字符表示法中,每一个字符所在位置所表示的结果只有两种可能,要么为真,要么为假, 所以我们可以用三个二进制位表示这三个字符,转化为一个八进制位进行表示:
字符表示法 | 二进制 | 八进制数值表示法 | 说明 |
---|---|---|---|
r - - | 100 | 4 | 仅可读 |
- w - | 010 | 2 | 仅可写 |
- - x | 001 | 1 | 仅可执行 |
r w - | 110 | 6 | 可读可写 |
r - x | 101 | 5 | 可读可执行 |
- w x | 011 | 3 | 可写可执行 |
r w x | 111 | 7 | 可读可写可执行 |
- - - | 000 | 0 | 无权限 |
语法: chmod 选项 权限 文件名或目录名 功能:设置文件的访问权限
常用选项: R 递归修改目录文件的权限
chmod命令权限值的格式
格式1: 用户表示符 +/-= 权限字符
+ 向权限范围增加权限代号所表示的权限 - 向权限范围取消权限代号所表示的权限 = 向权限范围赋予权限代号所表示的权限
用户符号: u:拥有者 g:拥有者同组用(所属组) o:其它用户 a:所有用户
若要同时设置不同类用户的访问权限,则需用逗号隔开.
格式2:三位8进制数字 将对应的八进制数转换为二进制,进而设置对应权限值.
说明:只有文件的拥有者和root才可以改变文件的权限 , 这种修改权限是永久修改,重启之后不恢复 注意:root权限基本不受约束
如:test.txt对任何用户都没有任何权限,但是root依然可以写入数据,读取数据
语法: chown 选项 用户名 文件名或目录名 功能:修改文件的拥有者 常用选项: -R 递归修改目录文件的拥有者.
注意: 修改文件的拥有者需要root用户进行操作,若是普通用户则需要进行权限提升.
使用chown可以同时修改文件所属组和文件拥有者 将拥有者和所属组的用户名用冒号隔开即可
语法: chgrp 选项 用户名 文件名或目录名 功能: 修改文件的所属组. 常用选项: -R 递归修改目录文件的所属组.
注意: 修改文件的所属组也需要进行权限提升. 如果文件属于你,但是所属组不是你,可以不经过root,直接把所属组改成自己
除了拥有者和所属组之外的人都是其它人 如果更改了拥有者和所属组,那么对其它人的定义也发生变化
一个事物的创建者是不是就是这个事物的拥有者? 不是 ! 创建者!=拥有者
我们查看新建的文件和目录,它们都有自己默认的权限.
新建文件夹(普通文件)默认权限(起始权限)为: 666 对应二进制:110 110 110 对应字符表示方法 : rw- rw- rw-
新建目录(目录文件)默认权限(起始权限)为: 0777 对应二进制:111 111 111 对应字符表示方法 : rwx rwx rwx
语法: umask 权限值 功能: 查看或修改文件掩码.
但实际上你所创建的文件和目录,看到的权限往往不是上面这个值.原因就是创建文件或目录的时候还要受到umask的影响.假设默认权限是mask,则实际创建的出来的文件权限是: mask & ~umask
权限掩码: 凡是在umask中出现的,都应在起始权限中去掉
凡是在umask中出现的权限位,都不能在最终权限中出现
我们也可以通过修改umask来设置文件的访问权限
超级用户默认掩码值为0022,普通用户默认为0002. 去掉所有人的写权限和可执行权限(即去掉wx) -> umask 0333
注意:自定义出来的权限只在本次登陆有效
功能说明:辨识文件类型 语法:file 选项 文件或目录…
常用选项:
可读权限: 如果目录没有可读权限, 则无法用ls等命令查看目录中的文件内容.
可写权限: 如果目录没有可写权限, 则无法通过一系列指令在目录中创建文件, 也无法在目录中删除文件.
可执行权限: 如果目录没有可执行权限, 则无法cd到目录中
产生问题: 只要用户拥有某目录的可写权限,就可以删除该目录当中的文件,而不论该用户是否拥有该文件的可写权限,这显然是不合理的.
为了解决这个不科学的问题, Linux引入了粘滞位的概念.
语法: chmod o+t 目录名 功能: 给目录加上粘滞位
只能对目录设置,一般是限制other权限的,对设置了粘滞位的目录,在该目录下,只能文件的拥有者和root可以删除,其它人不能删除
此时就算其它用户有该目录的可写权限,也无法删除该目录下的文件
注意:
w权限
,则other可以删除任何的目录下的文件这样就可以满足某种需求:通过设置粘滞位,other可以在特定的目录下创建文件,并写入,但是不想让任何人删掉自己的文件
应用场景:
有时候,有多个人,或者系统会有很多的临时数据,所有的临时文件都放在系统的/tmp目录下,需要把所有的权限放开,但是只想让文件的拥有者自己删除自己的文件,->设置粘滞位
例子:
为TEST目录创建粘滞位,这就保证了别人可以在这个目录下可以创建文件;可以删,但是只能删自己的,不能删别人的
当一个目录被设置为"粘滞位"(用chmod +t),则该目录下的文件只能由
一、超级管理员删除 二、该目录的所有者删除 三、该文件的所有者删除
注意: 虽然目录被加上了粘滞位,但如果用户有该目录的可写权限,则不影响其在该目录下创建文件