一、shell命令及运行原理
1.什么是操作系统?
Linux操作系统
🎐狭义上就是指Linux内核
🎐广义上指Linux内核+LInux外壳和对应的配套程序
Windows操作系统
🎐狭义上就是指Windows内核
🎐广义上指Windows内核+Windows对应的整个图形化界面+预装的各种各样的应用软件
2.外壳程序
LInux外壳程序----命令行解释器Shell
外壳程序的作用是:
(1)将用户输入的指令解释传递给内核
(2)内核执行命令,得到结果,奖结果通过外壳传递给用户
外壳程序负责信息的传递,称为命令行解释器
在Linux中,命令行解释器称为shell
shell : 命令行解释器 (和用户直接打交道)
Windows下外壳程序—最典型的一种就是图形化界面
🎐在windows中的图形化界面本质是其中一种外壳程序
🎐在windows下拿鼠标双击一个图标时,就会被图形化界面的外壳解释成要把程序加载到内存,程序就可以运行了。当出现结果时,结果会以图形化界面的形式呈现出来。
3.用户为什么不直接访问操作系统内核?
因为用户不擅于和操作系统打交道,操作系统使用时成本太高,有很多的系统级接口,系统级参数,小白用户根本不会用。
4.操作系统内核为什么不直接把结果显示出来?非要加外壳程序?
shell外壳作用:
🎐命令解释
🎐保护内核(拦截不合法请求的指令,不让指令交给操作系统,从而变相保护内核)
生动理解:
要相亲的程序员(相当于用户),不擅长与女孩交流,通过媒婆(媒婆相当于外壳程序shell)介绍,认识相亲对象小花(小花相当于内核)。
再发展:
shell(相当于媒婆婚介所):
(1)一旦用户输入,有新的任务时,shell会创建子进程,让子进程执行命令(子进程相当于参加工作的大学生)
(2)父进程(相当于媒婆),继续进行命令行获取
5.shell理解重点总结
(1)shell是什么?
是包裹在操作系统外部的一层软件层,为用户进行命令行解释
(2)为什么要有shell?
因为用户不擅于和内核打交道,所以在用户和内核之间添加一层软件层,方便用户和图形化界面之间的输入,再把指令翻译给操作系统,操作系统执行,把结果再交给用户。
(3)shell具体是怎么做的?
shell 父进程+子进程
(4)bash、sh是什么?
shell是对所有命令行解释器的统称,而具体的一款shell是有bash、sh、windows图形化界面…
(5)安卓智能手机
底层是Linux内核
安卓是GUI(Shell外壳)
二、Linux权限的概念
1.Linux下有两种用户:
🎐root – 超级管理员:可以在linux系统下做任何事情,无权限限制
🎐普通用户:在linux下做有限的事情
2.切换用户的指令
(1)普通用户切换到root
🎐指令:su 或者 su -
🎐随后输入root用户的密码
🎐区别:
su:单纯的账号切换
su -:让root账号重新登录
🎐退出时按热键ctrl+D
(2)普通用户之间切换
🎐指令:su [普通用户名]
🎐普通用户之间切换,必须知道对方的密码
3.不切换到root用户,如何用root权限执行一条命令?
🎐指令:sudo 要执行的指令
🎐用sudo指令进行提权
🎐例如: sudo ls
🎐此时需要输入普通用户的密码
🎐sudo认证后在一定时间内再次使用sudo不用输密码
🎐安装卸载软件或者部署服务时需要把我们的文件拷贝在系统路径下时,必须使用sudo
🎐管理员只有将普通用户添加到/etc/sudoers文件中,普通用户才可以使用sudo指令,新建的普通用户无法使用sudo指令(sudoers文件会保存Linux受信任的用户,相当于白名单)
三、Linux权限管理
1.权限伴生文件!
(1)权限本质:
是一件事情是否允许被你做。
(2)权限与什么有关?
🎐人–角色
Linux中的角色划分:
🥑拥有者:文件和文件目录的所有者
🥑所属组:文件和文件目录的所有者所在的组的用户
🥑other:其他用户
🎐事物属性
也就是文件天然具备的属性
🥑r 被读取
🥑w 被写入
🥑x 被执行
2.文件类型和访问权限(事物属性)
(1)ll查看文件的属性
(2)用户和角色对应的关系
Linux具体的用户(root、普通用户)
Linux角色(拥有者,所属组,other)
二者之间关系:用户在一定程度上承担这些角色,二者是相互补充的关系。
(3)所属组是什么意思
🎐Linux帐号下任何一个文件一定隶属于一个所属组。
🎐所属组:一批用户的集合。
🎐一个组里可以有一个人
🎐一个组里可以有很多人,用组长的名字来对组命名
(4)为什么要有所属组?
更好地实现同一组的权限管理,保证不同用户可访问不同文件,同一组内可实现共享
(5)为什么没有看到other是谁?
拥有者和所属组是确定的,other有很多,是谁并不清楚。
只要判定一个不是拥有者,也不是所属组,那么就是other.
(6)Linux文件类型的分类:
🎐Linux区分文件类型与后缀无关
🎐那和什么有关?
和文件是否具有可执行权限有关
🎐后缀的意义?
给人看的,用来做一定程度上的用户级别的区分
🎐Linux系统并对文件用后缀作区分,但不代表gcc以及Linux中其他的软件不区分
🎐Linux文件类型的分类:用第一列的的第一个字符进行区分
🥑- :普通文件(包括源代码,可执行程序,库等)
🥑d:目录文件(也就是文件夹)
🥑c:字符设备文件(显示器文件。键盘文件)
🥑b:块设备文件(磁盘、分区)
🥑l:链接文件
🥑p:管道文件
✨理解字符设备文件
int a=123;
printf(“%d”,a);
🎐printf是格式化输出,printf底层把数字123转换成1字符、2字符、3字符,然后把1、2、4这三个字符显示到显示器上,所以打印整数时要进行格式化输出
🎐往显示器这样的设备打消息,是以字符为单位打印的,所以显示器叫字符设备。
int a;
scanf(“%d”,&a);
🎐从键盘上输入123,实际上输入了一个字符1、字符2、字符3,然后以格式控制把3个字符组合起来转成整数,放到a变量里
🎐所以键盘操作时的单位也是字符
理念:Linux下一切皆文件!
🎐显示器和键盘是文件吗?
是!叫做字符设备文件。
🎐每打开一个终端,相当于在linux中开辟一个字符设备文件,所以每次所写的消息最终就可以按照重定向的方式把内容向其他文件写入
✨理解块设备文件
🎐块设备文件:对数据以块为单位进行处理
🎐典型的块设备:磁盘、硬盘所对应的分区
🎐ls /dev/vda* -l 可查看云服务器上磁盘这样的设备
🎐dev是linux下设备目录
✨理解链接文件
🎐windows下的快捷方式就是链接文件
🎐linux下:
./lesson4/a.out
建立一个软链接 ln -s ./lesson4/a.out exe
在之后运行这个文件 ./exe 就能跑
✨管道文件
🎐主要用来进程间通信
🎐管道可以把一条指令交给另一条指令
3.权限符号
剩下的9个字符3个一组,每一组对应rwx权限,有相应权限就写相应字母,没有就写-
4.如何更改文件权限
🎐chmod 用户表示符±权限字符
🥑+:增加权限
🥑-:减少权限
🥑u:拥有者
🥑g:所属组
🥑o:其他用户
🥑a:所有用户
🎐一个人增加或减少文件权限
例如: chmod u-r test.txt
🎐如何一次性多处更改文件权限
注意用逗号隔开
例如: chmod u-r,g+wx,o+rwx test.txt
🎐想去掉所有人的写权限
例如: chmod a-w test.txt
🎐一般用户,不是文件的拥有者,不能更改文件权限。
🎐root账号不受权限约束,可以更改文件权限
🎐针对一个人既是拥有者又是所属组的情况:
权限,一个用户在匹配身份的时候,只能匹配一次。如果是拥有者,则只看拥有者权限,在的所属组权限不看了;不是拥有者,才看所属组权限,以此类推。
🎗️更改拥有者:普通用户将文件拥有者改为root或者其他普通用户
法一:sudo chown root/普通用户名 文件名
法二:
su (这一步将账号切换成root,输入root账号密码)
chown root/普通用户名 文件名
🎗️更改所属组:
例如将所属组修改为root
法一:sudo chgrp root 文件名
法二:
su
chgrp root 文件名
🎗️更改other:注意拥有者和所属组修改了,对应的other范围也自动修改了,所以不需要为修改other提供具体指令,也做不到
🎗️如何同时对拥有者和所属组进行修改
sudo chown 拥有者名:所属组名 文件名
5.研究默认权限
(1)起始权限
从上图可看出:
目录起始权限 775
普通文件起始权限 664
(2)权限掩码
Linux中存在权限掩码,通过umask查看或修改权限掩码
权限掩码是四位数字,可看作 0+三位八进制数字
(第一个0可看作8进制数字前缀,后面三位数字分别对应拥有者权限,所属组权限,other权限)
root默认掩码值是0022
普通用户掩码值是0002
🥑umask
作用:查看掩码值
验证如下:
🥑umask 权限值
作用:修改权限值
说明:将现有的存取权限去掉权限掩码后,即可产生建立文件时预设权限
我们研究权限掩码的后三位数字
002 也就是 000 000 010
🎗️注意:凡是在权限掩码中出现的权限,最终都要在起始权限中去掉
🎗️去掉不是指简单的加减法
🎗️最终权限=起始权限 去掉 权限掩码中出现的权限
🎗️去掉 :意思是清零指定的比特位。在umask中出现的比特位为1,最终权限的位置上必须被清零,无论起始是0还是1
🎗️0&1=0
🎗️1&1=1
🎐任何数和1按位与 结果是他本身
🎗️1&0=0
🎗️0&0=0
🎐任何数和0按位与 结果是0
🧨结论:最终权限 =起始权限 & (~umask)
~mask意思是:对umask按位取反(包括符号位)
🎃举例:
比如003按位取反
原来 000 000 011
之后 111 111 100
目录起始权限666(110 110 110)
(~umask)003 (111 111 100)
二者进行按位与&
结果 110 110 100 (也就是664)
所以该目录最终的权限是664,即拥有者有rw权限,所属组有rw权限,other有r权限。
(3)总结
起始权限是为了让文件或者目录在最开始有起始的权限
权限掩码让用户去控制文件或目录起始权限是什么,给用户更多选择性
6.文件权限与目录权限
(1)目录权限
进入一个目录,需要 x 权限
是否允许一个指定用户查看目录的文件列表,需要 r 权限
是否允许一个指定用户在当前目录下新建文件,需要 w 权限
(2)文件权限
一个文件一定是属于一个目录的。
一个文件属性能不能查看,是由目录的权限决定的!
一个文件能不能被删除,这个文件本身不能决定,要看所属的目录与对应账户是否有w权限。
(如果所属目录的一个other具有w权限,就可以删除该目录下的文件。)
(所以普通用户的默认掩码是002,000 000 010去掉的就是other中的写权限,默认这个值的本质是为了防止other用户的随意更改)
一般而言,不同的账号,是不会在同一个目录下的。
特殊情况,比如多个账号在同一个root创建的共享目录中相互协同、共享数据。
(由root账号创建一个目录,将这个目录的other权限设为有w权限时,一个账号就可以删除另一个账号的文件;若设为无w权限时,多个账号都不能在此目录下新建文件)
(当目录的other权限有w,如果其他账号想读、写、执行别的账号创建的文件,得看这个文件的other权限是否允许)
🎗️如何解决这种特殊情况呢?使得在共享目录下可以写文件但是不能让别人删除我的文件。
设置粘滞位。
(3)粘滞位
chmod +t 目录名
🎐作用:对目录设置粘滞位,在该目录的内部只有文件的拥有者能够删除自己的文件,其他人不能删除。
🎐应用场景:多用户实现文件共享
🎐注意:
不在一个人的家目录下共享
在根目录或非家目录下共享
7.file指令
file 文件或目录
功能:辨识文件类型
总结
Linux的权限部分内容就到这里啦~想要了解更多内容,记得关注后续哦👻