shell命令以及运行原理
在Windows中,我们可以通过鼠标,双击一个文件夹,从而进入这个文件夹当中。
在Linux中,我们可以通过命令,通过输入命令cd + 文件名,进入到文件夹当中。
那么这个交互过程究竟是怎么完成的呢?
Linux严格意义上说的是一个操作系统,我们称之为“核心(kernel)“ ,但我们一般用户,不能直接使用kernel。因为学习使用kernel的成本太高。
而我们是通过kernel的“外壳”程序,也就是所谓的shell,来与kernel沟通。(在Windows中,同样道理,是通过GUI来与Windows内核沟通)
在Linux centos7中外壳程序名为bash,是shell的一种
从技术角度,Shell的最简单定义:
命令行解释器
(command Interpreter)主要包含:
①. 将使用者的命令翻译给核心(kernel)处理。
②. 将核心的处理结果翻译给使用者。
对比windows GUI(图形化界面),我们操作windows 不是直接操作windows内核,而是通过图形接口,点击,从而完成我们的操作(比如进入D盘的操作,我们通常是双击D盘盘符.或者运行起来一个应用程序)。
shell 对于Linux,有相同的作用,主要是对我们的指令进行解析,解析指令给Linux内核。反馈结果在通过内核运
行出结果,通过shell解析给用户。
权限
概念
Linux下有两种用户:超级用户(root)、普通用户。
超级用户:可以再linux系统下做任何事情,不受限制
普通用户:在linux下做有限的事情。
超级用户的命令提示符是“#”,
普通用户的命令提示符是“$”。
命令:su [用户名]
功能:切换用户。
例如,要从root用户切换到普通用户user,则使用 su user。 要从普通用户user切换到root用户则使用 su
root(root可以省略),此时系统会提示输入root用户密码的口令。
文件的属性
我们都知道,可以都过命令 ls -l 或者ll 来查看文件的详细信息,那么在这显示出来的信息中,都是代表什么意思呢?
我们已文件test_gdb来举例:
文件类型:
d:文件夹
-:普通文件
l:软链接(类似Windows的快捷方式)
b:块设备文件(例如硬盘、光驱等)
p:管道文件
c:字符设备文件(例如屏幕等串口设备)
s:套接口文件
基本权限
i.读(r/4)
:Read对文件而言,具有读取文件内容的权限;对目录来说,具有浏览该目录信息的权限
ii.写(w/2)
:Write对文件而言,具有修改文件内容的权限;对目录来说具有删除移动目录内文件的权限
iii.执行(x/1)
:execute对文件而言,具有执行文件的权限;对目录来说,具有进入目录的权限
iv.“—”
:表示不具有该项权限
权限位置是确定的
当然还有很多种情况,明白就好。
其他属性:
设置基本权限
a)chmod
功能:设置文件的访问权限
格式:chmod [参数] 权限 文件名
常用选项:
R -> 递归修改目录文件的权限
说明:只有文件的拥有者和root才可以改变文件的权限
chmod命令权限值格式
① 用户表示符+/-=权限字符
+:向权限范围增加权限代号所表示的权限
-:向权限范围取消权限代号所表示的权限
=:向权限范围赋予权限代号所表示的权限
用户符号:
u:拥有者
g:拥有者同组用
o:其它用户
a:所有用户
也可以用八进制
b)chown
功能:修改文件的拥有者
格式:chown [参数] 用户名 文件名
c)chgrp
功能:修改文件或目录的所属组
格式:chgrp [参数] 用户组名 文件名
常用选项:-R 递归修改文件或目录的所属组
默认权限
新建文件夹默认权限=0666
新建目录默认权限=0777
(0与特殊权限有关,这里先不做探讨,我们直接看后三位)
但我们发现好像不如我们所见为
666(rw- rw- rw-)和777 (rwx rwx rwx)
实际上,你所创建的文件和目录,看到的权限往往不是上面这个值。原因就是创建文件或目录的时候还要受到
umask
的影响。假设默认权限是
mask
,则实际创建的出来的文件权限是: mask & ~ umask
格式:umask 权限值
说明:将现有的存取权限减去权限掩码后,即可产生建立文件时预设权限。超级用户默认掩码值为0022,普通用户默认为0002。
那么掩码过程是怎样的呢?下面用一张图概况:
也可以通过修改umask值来改变默认权限!
(自行尝试,格式为: umask+要修改的掩码值)
目录权限
-
可执行
权限: 如果目录没有可执行权限, 则无法cd到目录中. -
可读
权限: 如果目录没有可读权限, 则无法用ls等命令查看目录中的文件内容. -
可写
权限: 如果目录没有可写权限, 则无法在目录中创建文件, 也无法在目录中删除文件.
先补充一些知识点:
ls -ld命令 可以查看当前文件所在目录的属性信息,相当于ll -d命令
只有可读权限的话,是无法查看此目录下文件的属性信息的,只能查看到文件名:
如果目录对other
不具有w权限,则不能创建文件,更无法删除文件
可是,如果该目录对other具有w权限,我们发现other居然可以删除任何的该目录下的文件,
并且无视该目录下的文件是否对other具有什么权限
这便是一个很大的问题,一不小心你的文件就会被别人全部删掉!
这么不合理的东西,自然也会引起重视,因此也有了解决方法,使得other可以在特定的目录下创建文件并写入,但自己的文件不会被other删掉——
粘滞位
语法: chmod +t 目录名
功能: 给目录加上粘滞位。
当一个目录被设置为”粘滞位”(用chmod +t),则该目录下的文件只能由
一、超级管理员删除
二、该目录的所有者删除
三、该文件的所有者删除
关于权限的总结
- 目录的可执行权限是表示你可否在目录下执行命令。
- 如果目录没有-x权限,则无法对目录执行任何命令,甚至无法cd 进入目, 即使目录仍然有-r 读权限(这个地方很容易犯错,认为有读权限就可以进入目录读取目录下的文件)
- 而如果目录具有-x权限,但没有-r权限,则用户可以执行命令,可以cd进入目录。但由于没有目录的读权限 所以在目录下,即使可以执行ls命令,但仍然没有权限读出目录下的文档。