一、Shell命令运行原理
1.Shell
Linux作为一个操作系统,称为"kernel",一般用户不能直接使用kernel,而通过"kernel"的外壳程序"Shell"和kernel进行沟通。
所以广义上Linux发行版=Linux内核+外壳程序,狭义上Linux发行版=Linux内核。
Shell作为外壳程序,包裹在Linux内核外层,是一个应用程序,通过一系列的Linux命令对操作系统 发出相关治疗提供人际界面。它连接了用户和Linux内核,让用户更加高效、安全、低成本地使用Linux内核,这就是Shell的本质。bash是Shell的一种。
Shell命令的执行过程:
Shell有两个作用:
(1)传递请求指令,让操作系统执行命令
(2)保护内核
2.为什么Linux不让用户直接使用kernel
对比windows GUI,用户操作windows 不是直接操作windows内核,而是通过图形接口,点击,从而完成用户操作(比如进入D盘的操作,用户通常通过双击D盘盘符而进入D盘)。
shell 对于Linux,有相同的作用,主要是对用户的指令进行解析,解析指令给Linux内核。反馈结果在通过内核运行出结果,通过shell解析给用户。
二、Linux权限概念
权限是明确一件事情是否允许被特定的人做。 Linux权限能够指定谁可以对文件或目录执行什么操作。Linux下有两种用户,即超级用户和普通用户。超级用户的命令提示符是"#",普通用户的命令提示符是"$"。
超级用户:可以在Linux系统下作任何事情,不受限制。超级用户的命令提示符是"#"
普通用户:在Linux下做有限的事情。普通用户的命令提示符是"$"
两种用户可以互相切换:
也可以使用ctrl + d在普通用户下,切换为root用户。切换成root之后就能提升用户身份,可以执行对应命令。
三、Linux权限管理
1.文件访问的用户分类
用户分为3类:
(1)文件拥有者User---u
(2)文件所属组Group---g
(3)其他Others---o
2.文件类型和访问权限
(1)文件类型
在Linux中,不以文件后缀作为区分文件类型的方式,而是以文件详细列表的第一位进行标识区分:
如上图文件类型有-和d,linux中的文件类型分为以下几类:
1. d:文件夹 2. -:普通文件(包括文本、各种静态库、可执行程序、源程序) 3. l:软链接(类似Windows的快捷方式) 4. b:块设备文件(例如硬盘、光驱等) 5. p:管道文件 6. c:字符设备文件(例如屏幕等串口设备) 7. s:套接口文件
(2)访问权限
linux对文件有3种访问权限:
r:read,对文件而言,具有读取文件内容的权限;对目录来说,具有浏览该目录信息的权限
w:write,对文件而言,具有修改文件内容的权限;对目录来说具有删除移动目录内文件的权限
x:execute,对文件而言,具有执行文件的权限;对目录来说,具有进入目录的权限
3.权限的表示方法
权限既可以用字符表示也可以用八进制表示
(1)字符表示法
linux表示 | 说明 |
r-- | 只读 |
-w- | 仅可写 |
--x | 仅可执行 |
rw- | 可读可写 |
-wx | 可写和可执行 |
r-x | 可读可执行 |
rwx | 可读可写可执行 |
--- | 无权限 |
对于每一个文件来说,都有3种用户,且每种用户都有3种权限:
(2)八进制表示法
权限符号(读写执行) | 八进制 | 二进制 |
r-- | 4 | 100 |
-w- | 2 | 010 |
--x | 1 | 001 |
rw- | 6 | 110 |
-wx | 5 | 101 |
r-x | 3 | 011 |
rwx | 7 | 111 |
--- | 0 | 000 |
4.权限的设置
root不受任何权限限制,权限只限制普通用户。
(1)chmod修改文件访问权限
只有文件的拥有者和root可以设置文件的访问权限:
chmod 【参数】 权限 文件名
选项:
R -> 递归修改目录文件的权限
①用户符号+/-/=权限字符
1. +:向权限范围增加权限代号所表示的权限 2. -:向权限范围取消权限代号所表示的权限 3. =:向权限范围赋予权限代号所表示的权限 4. 用户符号: 5. u:拥有者 6. g:拥有者同组用 7. o:其它用户 8. a:所有用户
例如修改IP.log的访问权限,给user增加可执行权限:
②三位八进制数字
如将IP.log的权限改为拥有者不可读不可写可执行(1),所数组不可读不可写可执行(1),其他人不可读不可写不可执行(0):
虽然delia用户对IP.log不可读,但是root可以读IP.log,这是因为root不受任何权限限制:
如果需要cd进入某个目录,就需要有x权限,如果没有x权限,尽管可以ls查看文件名,但是cd不进去