目录
1.外壳程序 Shell
问题1:什么是shell?
问题2:为什么不然用户直接操作内核?
问题3:shell的作用是什么?
问题4:为什么我听说shell是一门脚本语言?这和shell是一个软件层矛盾吗?
问题5:我还听说过bash,shell和bash的关系是什么呐?
问题5 shell的版本
问题6 shell内部命令和外部命令
2.权限
2-1 用户切换
2-1-1普通用户转root:
2-1-2 root转普通用户
2-1-3 短暂提权 sudo
2-2 权限简介
2-3 文件类型
2-4 基本权限
2-5 修改权限
2-5-1修改文件的读写可执行权限
2-5-2修改文件的拥有者和所属组
2-6 权限掩码
2-7 目录的权限
解答:乌龟壳是用来保护乌龟的,shell中文:外壳,就是用来保护我们的Linux内核(kernel)的,shell其实是一个软件层,也就是我们所说的应用程序,通过这个外壳程序提供的命令行界面,我们可以操控我们的Linux内核。
用户通过输入Linux命令到shell----命令行解释器,shell将用户的命令翻译出来,调用相应的系统调用接口,交给操作系统(内核)处理,操作系统处理完成后,返回结果给shell,shell翻译后展示给用户结果,经从而完成用户和操作系统的沟通。
解答:用户对内核操作的学习成本太高!!
例子:给大家举一个例子理解用户,shell,内核三者的关系
假如你是村长的儿子(用户),你喜欢如花姑娘(内核),但是你对男女之事不太擅长,所以你请来村里的媒婆(shell)去帮你说媒。
你把你希望如花能做你女朋友的这个请求告诉了媒婆,媒婆帮你向如花姑娘说媒,但是如花拒绝了你的请求-----如花已经有男朋友了,媒婆给你反馈了如花不喜欢你的反馈。
-----shell的作用1:翻译并传递用户的请求和内核的反馈。
但是你还是死缠烂打,还是嚷嚷着要媒婆帮你去向如花说媒,媒婆知道如花已经有男朋友了,所以就直接拒绝了你的请求。
-----shell的作用2:对于非法用户的非法请求,直接拒绝用户,从而保护内核。
后面你还来找媒婆,媒婆转念一想,你爸是村长,媒婆为了自己的名声,就被迫的接下你这个请求,你又碍于如花的不耐烦的态度,但是媒婆就叫自己的徒弟去向如花说媒,让徒弟代替自己去说媒,结果怎么样都可以向村长斡旋。
-----shell的作用3:创建子进程来执行具有风险的请求。(shell运行起来本身就是一个进程)
解答:我们经常说的shell也是一种脚本语言,常称为shell script,同python、js等脚本语言一样,可以使用if、while等组合逻辑将指令进行编排实现一些复杂的功能。
解答:如果说shell是媒婆(一种职业)的话,那么bash就是王媒婆(一个具体从事媒婆职业的人),Linux下用的具体的命令行解释器(shell)就是bash。
验证型问题:怎么验证每一次登入都会创建一个新的进程?
解答:
ps axj 查看进程
PS axj | grep 'bash'查看bash进程
然后我再登入一个重新登入一次song用户:
这里我们可以看到(进程)bash多了一个
(村长再生一个就得找一个王媒婆说媒~~~~)
解答:以下列举几种shell:
sh(Bourne Shell) 是UNIX最初使用的 shell
bash(Bourne Again Shell):Linux默认,是Bourne Shell的扩展。完全兼容Bourne Shell,并在他基础上增加了很多特性如命令补全、命令历史等。
其实我们认识的ssh其实全称是secure shell,是在网络传输过程中加密传输的,所以相比一般的更安全,所以叫做secure shell
内部命令:内部命令是写在bashy源码里面的,其执行速度比外部命令快,因为解析内部命令shell不需要创建子进程。比如:cd,echo等 。
外部命令:是Linux系统中实用的命令,通常放在/bin,user/bin等目录下,可通过echo $PATH查看命令的存储位置
echo $PATH
命令是内部命令还是外部命令可以通过type 命令来查看
type 命令
其实windows中的cmd也是一种shell,他也是有内部命令和外部命令的:
我们知道我们Linux中通常分为root用户和普通用户
root用户:超级管理员,具有很高的权限,#
普通用户:具有一般的权限,$
1.su 用户切换并不改变工作目录:
2.su - 用户切换并改变工作目录到/root
root转普通用户:快捷键ctrl+d
ps:退出普通用户:快捷键ctrl+d
ps:退出Xshell:快捷键ctrl+d
ps:exit指令可以从root或song一次退到[D:~]$
如果我只想让普通用户短暂的提权,短暂的具有一下root的权限去执行某些操作,而在大多数情况下,还是只具有普通用户的一般权限,这样的话,我们该怎么办呐?
模板;sudo + 正常的指令
例子:sudo touch file.txt ----以root的身份执行touch file.txt这条指令
ps:这里要输入的密码是普通用户song的密码,所以建议root和普通用户的密码设置成不同,作为区分.
输完密码后你发现:普通用户song 不在sudoers文件中,终止了sudo touch file.txt的请求.
至于如何把普通用户song加入白名单,我们讲到vim编辑器时给大家演示.
首先那Linux操作系统对于文件的权限具有很严格的控制,要想对文件执行某种特定的操作,必须得拥有某种特定的权限。
那么什么是权限呐?
首先权限约束的是人,比如校长能进入校长办公室,但是我不能进入校长办公室,ps:这是因为角色问题,而不是因为某一个人,比如王刚校长被撤职了,即使他还是王刚,但是因为他不再是校长的身份,所以他就不能再进入校长办公室了.
其次由于事物天然的属性决定了某一个人能不能执行相应的操作,比如校长能坐在桌子上,却不能吃掉桌子,这是因为桌子只能被用来做,而不能用来吃.
听到这里或许你会以为我说的是废话,但是这能帮你理解文件权限:操作者的角色+文件所对你该角色的开放属性
首先给出结论:Linux中不以后缀区分文件类型,而是通过文件属性中的首字符的类型来区分文件类型.
但是有同学就会有图片中的问题:
我们知道ll命令可以查看文件的更多属性,那么这些属性分别代表什么意思呐,这里先给一个大概的方向:
-普通文件[文本,各种动静态库,可执行程序,源程序]
d 目录文件
c 字符设备文件
b 块设备文件
p 管道文件
l 链接文件
s 套接字
以上的7项依次表示为[文件的属性和权限-rw-re-r--] , [连接数1] , [文件的拥有者] , [文件的所属组] , [文件的大小] , [文件的创建时间] , [文件名]
三种身份:
文件拥有者(user)
文件所属组(group)
其他人(other)
文件的拥有者:文件的创建者在创建的时候默认创建者就是拥有者,但是文件如物品一般可修改其拥有者,所以文件的创建者不一定是文件的拥有者
文件的所属组:我们在公司写项目的时候,和你(文件拥有者)分配在同一个组写项目的人就是文件的所属组的人
其他人:除了文件的拥有者和文件的所属组以外的人.
每一种身份,对应三种权限
读(r):read
写(w):write
执行(x):execute
每一个角色的三个文件属性分别为读,写,执行,如果是r,w,x就是读写执行,如果该位置是-,就是不可读.
首先我们要知道文件的拥有者和root都可以对文件的读写可执行权限进行修改,
但是我们通过测试还发现:
文件的拥有者如果没有读写可执行权限,那么就不能读写可执行权限!
但是root用户是即使没有读写权限,也是可以读可以写的,但是执行权限如果不自己加的话,就不能可执行.(因为怕这个程序很危险吧,所以如果不加上可执行权限就不能执行)
所以说root用户是不受权限的约束的~!
方式1:chmod以字符形式修改
1.一个人的一个权限
chmod u+r file.txt
2.一个人的多个权限
chmod g-rwx file.txt
3.多个人的一个权限
chmod a-r file.txt
4.多个人的多个权限
chmod a+rwx
chmod u+rwx,g-rwx,o+rwx file.txt
方式2:chmod以数字形式修改
由于权限的位置是固定且是两种状态的(0/1)
如果每一个角色权限中rwx三个位置中每一个位置都可用0表示无此权限,1表示有此权限,那么对于每一个角色来说:
000:无读无写无可执行
001:无读无写有可执行
010:无读有写无可执行
011:无读有写有可执行
111:有读有写有可执行
将这个二进制转换为八进制就依次是
0
1
2
3
7
那么一个角色的权限就可以用一个八进制数来表示.
那么三个角色的权限就可以用三个八进制数来表示.
-rw------- (600) 只有拥有者有读写权限。
-rw-r--r-- (644) 只有拥有者有读写权限;而属组用户和其他用户只有读权限。
-rwx------ (700) 只有拥有者有读、写、执行权限。
-rwxr-xr-x (755) 拥有者有读、写、执行权限;而属组用户和其他用户只有读、执行权限。
-rwx--x--x (711) 拥有者有读、写、执行权限;而属组用户和其他用户只有执行权限。
-rw-rw-rw- (666) 所有用户都有文件读、写权限。
-rwxrwxrwx (777) 所有用户都有读、写、执行权限。
2-5-2-1 修改文件拥有者
如果现在的文件拥有者是song,我想把文件的拥有者给root,文明的给就得征得root的允许,所以我们就的强制的给(sudo暂时提权)
如果文件的拥有者是root,我想把文件给song,则直接给!
如果文件的拥有者不是root,我想把属于song的文件给自己,直接拿!
2-5-2-1 修改文件的所属组
修改文件的所属组也类似的道理:
chgrp song file.txt
值得一提的是,其实可以通过文件的拥有者/root使用chown依次性的将文件的拥有者和所属组一次性的改掉(也就是或chgrp可以束之高阁)
所以我们修改了文件的拥有者和所属组,其他人就是除了文件的拥有者和所属组之外的人了~~~~
问题:为什么我们新创建的文件的默认的权限是我们看到的这样的?为什么你的Xshell和我的Xshell的新创建的文件的默认权限是不一样的?
解答:这就和这里要讲的权限掩码有关:
未完待续
对于非root用户来说:
读 | 写 | 可执行 | |
---|---|---|---|
普通文件 | cat | nano | ./ |
目录 | ll | touch/rm | cd |