文章目录
shell命令以及运行原理
Linux严格意义上说的是一个操作系统,我们称之为“核心(kernel)“ ,但我们一般用户,不能直接使用kernel。而是通过kernel的“外壳”程序,也就是所谓的shell,来与kernel沟通。如何理解?为什么不能直接使用kernel?
从技术角度,Shell的最简单定义:命令行解释器(command Interpreter)主要包含:
- 将使用者的命令翻译给核心(kernel)处理
- 同时,将核心的处理结果翻译给使用者
对比windows GUI,我们操作windows 不是直接操作windows内核,而是通过图形接口,点击,从而完成我们的操作(比如进入D盘的操作,我们通常是双击D盘盘符.或者运行起来一个应用程序)。
shell 对于Linux,有相同的作用,主要是对我们的指令进行解析,解析指令给Linux内核。反馈结果在通过内核运行出结果,通过shell解析给用户。
在Linux中:
[xxm@VM-12-11-centos ~]$ ---- bash命令行
xxm:用户名
VM-12-11-centos:主机名
~:当前目录
$:命令行提示符(root用户为#)
我们输入的指令,本质上是是字符串,需要命令行解释器对我们的输入进行解释,然后将指令告诉操作系统,操作系统再反馈给命令行解释器,命令行解释器再将操作系统的反馈翻译给用户。
命令行解释器的作用:
- 进行命令行解释
- 保护操作系统,拦截用户的非法请求
命令行解释器包括:
- 命令行。bash, sh(统称为shell)等
- 图形化界面
Linux下用户的分类
分为两类:
- root:超级用户
- 普通用户
切换身份的指令为:su
语法:su [用户名]
从普通用户切换到root用户或其他普通用户需要提供相应的密码,而root切换到普通用户不需要密码。
如果普通用户想对一条命令进行短暂提权,可以使用 sudo 指令 :sudu command ,需要输入当前普通用户的密码,但是普通用户默认是没有颁发执行 sudo 的,因为操作系统不信任用户,除非将用户添加到系统的信任白名单(etc/sudoers)中。
Linux权限管理
Linux下权限是由两部分共同构成,一部分是访问者的身份,另一部分是文件对访问者的权限。
Linux下文件的访问者身份可分为三类:
- 文件和文件目录的所有者:u–user
- 文件和文件目录的所有者所在的组的用户:g–group
- 其他用户:o–others
而需要注意的是:Linux中root用户不受权限的限制!
Linux下文件的类型和访问权限属于文件的详细信息,可以用ls -l
指令查看。
- 文件类型
选项 | 含义 |
---|---|
- | 普通文件 |
d | 目录文件 |
b | 块设备文件 |
p | 管道文件 |
c | 字符设备文件 |
-
基本权限
-
读:Read对文件而言,具有读取文件内容的权限;对目录来说,具有浏览该目录信息的权限
-
写:Write对文件而言,具有修改文件内容的权限;对目录来说具有删除移动目录内文件的权限
-
执行:execute对文件而言,具有执行文件的权限;对目录来说,具有进入目录的权限
文件权限值的表示方法
字符表示方法
Linux表示 | 说明 | Linux表示 | 说明 |
---|---|---|---|
r– | 只读 | -w- | 只写 |
–x | 只执行 | rw- | 可读可写 |
-wx | 可写可执行 | r-x | 可读可执行 |
rwx | 可读可写可执行 | — | 无权限 |
8进制数值表示方法
权限符号 | 二进制 | 八进制 |
---|---|---|
r– | 100 | 4 |
-w- | 010 | 2 |
–x | 001 | 1 |
rw- | 110 | 6 |
r-x | 101 | 5 |
-wx | 011 | 3 |
rwx | 111 | 7 |
— | 000 | 0 |
权限的修改
仅文件的拥有者和root用户可以修改。
-
chmod [u/g/o/a] [+/-/=] [r/w/x] , (…可重复前面,进行多种身份的权限设置) [文件]
-
chmod 664 [文件]
除了可以修改文件对各种身份的访问者的权限,还可以修改文件的拥有者、所属组。
- 修改拥有者:chown [用户] [文件]
- 修改所属组:chgrp [用户] [文件]
- 修改拥有者和所属组:chown [用户]:[用户] [文件]
权限掩码
我们在Linux下创建文件和目录,为什么普通文件的默认权限是664,目录文件是775呢?
其实,普通文件的默认权限是666,目录是777,但存在权限掩码(umask),凡是在umask
中出现的权限,不会再最终文件权限中出现。
权限掩码的默认值是0002
,第一个0
表示八进制,后三位表示权限。
普通文件的默认权限是666
,二进制表示就是110 110 110
,权限掩码是000 000 010
,由于再权限掩码中出现过的权限,不会在最终文件的权限中出现,所以普通文件的最终权限是110 110 100
,也就是664。
目录文件的默认权限是777
,二进制表示就是111 111 111
,权限掩码是000 000 010
,所以目录文件的最终权限是111 111 101
,也就是775。
而需要注意的是,最终权限并不等于默认权限减权限掩码,请看示例:
我们先将umask
的值改为0001
,也就是000 000 001
,而我们之后创建的目录权限为111 111 110
,普通文件为110 110 110
。普通用户的最终权限并不是两者相减。
最终权限的计算方法为:最终权限 = 起始权限 & (~ umask)
那么umask
有什么意义呢?
通过修改umask
的值,我们可以设置新创建的普通文件和目录的“默认最终权限”。
修改umask:umask 0xxx(八进制)
目录文件的权限
一个文件能否被删除,并不由文件本身决定,而是由其所处的目录决定。
如果用户拥有目录的写权限,则可以删除目录中的文件。
那么如果我们需要多人协作,共同在一个目录下工作,彼此之间可以给自己的文件设置权限来设置是否允许其他人读/写/执行,但是并不能设置是否允许其他人删除。因为如果想让别人不能删除自己的文件,就要限制目录文件对他的写权限,但是这么一来,他就无法在目录下创建、修改文件,为了解决这一问题,Linux下目录可以被设置为粘滞位。
设置粘滞位的方式与设置文件权限的操作相同,只不过将最后一位的-
或x
用t
来代替。
[root@VM-12-11-centos lesson_5]# chmod +t /home/ # 加上粘滞位
而当一个目录被设置为粘滞位,则该目录下的文件只能由root用户或文件的所有者删除。
关于权限的总结
- 目录的可执行权限是表示你可否在目录下执行命令。
- 如果目录没有
-x
权限,则无法对目录执行任何命令,甚至无法cd
进入目录, 即使目录仍然有-r
读权限(这个地方很容易犯错,认为有读权限就可以进入目录读取目录下的文件)
为粘滞位,则该目录下的文件只能由root用户或文件的所有者删除。
关于权限的总结
- 目录的可执行权限是表示你可否在目录下执行命令。
- 如果目录没有
-x
权限,则无法对目录执行任何命令,甚至无法cd
进入目录, 即使目录仍然有-r
读权限(这个地方很容易犯错,认为有读权限就可以进入目录读取目录下的文件) - 而如果目录具有
-x
权限,但没有-r
权限,则用户可以执行命令,可以cd
进入目录。但由于没有目录的读权限,所以在目录下,即使可以执行ls
命令,但仍然没有权限读出目录下的文档。