【Linux操作系统】shell和文件权限

目录

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 目录的权限


1.外壳程序 Shell

问题1:什么是shell?

解答:乌龟壳是用来保护乌龟的,shell中文:外壳,就是用来保护我们的Linux内核(kernel)的,shell其实是一个软件层,也就是我们所说的应用程序,通过这个外壳程序提供的命令行界面,我们可以操控我们的Linux内核。

用户通过输入Linux命令到shell----命令行解释器,shell将用户的命令翻译出来,调用相应的系统调用接口,交给操作系统(内核)处理,操作系统处理完成后,返回结果给shell,shell翻译后展示给用户结果,经从而完成用户和操作系统的沟通。

【Linux操作系统】shell和文件权限_第1张图片

问题2:为什么不然用户直接操作内核?

解答:用户对内核操作的学习成本太高!!

问题3:shell的作用是什么?

例子:给大家举一个例子理解用户,shell,内核三者的关系

假如你是村长的儿子(用户),你喜欢如花姑娘(内核),但是你对男女之事不太擅长,所以你请来村里的媒婆(shell)去帮你说媒。

【Linux操作系统】shell和文件权限_第2张图片

你把你希望如花能做你女朋友的这个请求告诉了媒婆,媒婆帮你向如花姑娘说媒,但是如花拒绝了你的请求-----如花已经有男朋友了,媒婆给你反馈了如花不喜欢你的反馈。

-----shell的作用1:翻译并传递用户的请求和内核的反馈

但是你还是死缠烂打,还是嚷嚷着要媒婆帮你去向如花说媒,媒婆知道如花已经有男朋友了,所以就直接拒绝了你的请求。

-----shell的作用2:对于非法用户的非法请求,直接拒绝用户,从而保护内核。

后面你还来找媒婆,媒婆转念一想,你爸是村长,媒婆为了自己的名声,就被迫的接下你这个请求,你又碍于如花的不耐烦的态度,但是媒婆就叫自己的徒弟去向如花说媒,让徒弟代替自己去说媒,结果怎么样都可以向村长斡旋。

-----shell的作用3:创建子进程来执行具有风险的请求。(shell运行起来本身就是一个进程)

问题4:为什么我听说shell是一门脚本语言?这和shell是一个软件层矛盾吗?

解答:我们经常说的shell也是一种脚本语言,常称为shell script,同python、js等脚本语言一样,可以使用if、while等组合逻辑将指令进行编排实现一些复杂的功能。

问题5:我还听说过bash,shell和bash的关系是什么呐?

解答:如果说shell是媒婆(一种职业)的话,那么bash就是王媒婆(一个具体从事媒婆职业的人),Linux下用的具体的命令行解释器(shell)就是bash。

验证型问题:怎么验证每一次登入都会创建一个新的进程?

解答:

 ps axj 查看进程
 PS axj | grep 'bash'查看bash进程

然后我再登入一个重新登入一次song用户:

这里我们可以看到(进程)bash多了一个

(村长再生一个就得找一个王媒婆说媒~~~~)

问题5 shell的版本

解答:以下列举几种shell:

  • sh(Bourne Shell) 是UNIX最初使用的 shell

  • bash(Bourne Again Shell):Linux默认,是Bourne Shell的扩展。完全兼容Bourne Shell,并在他基础上增加了很多特性如命令补全、命令历史等。

其实我们认识的ssh其实全称是secure shell,是在网络传输过程中加密传输的,所以相比一般的更安全,所以叫做secure shell

问题6 shell内部命令和外部命令

  • 内部命令:内部命令是写在bashy源码里面的,其执行速度比外部命令快,因为解析内部命令shell不需要创建子进程。比如:cd,echo等 。

  • 外部命令:是Linux系统中实用的命令,通常放在/bin,user/bin等目录下,可通过echo $PATH查看命令的存储位置

echo $PATH

命令是内部命令还是外部命令可以通过type 命令来查看

 type 命令

【Linux操作系统】shell和文件权限_第3张图片

其实windows中的cmd也是一种shell,他也是有内部命令和外部命令的:【Linux操作系统】shell和文件权限_第4张图片 

 

2.权限

2-1 用户切换

我们知道我们Linux中通常分为root用户和普通用户

  • root用户:超级管理员,具有很高的权限,#

  • 普通用户:具有一般的权限,$

2-1-1普通用户转root:

 1.su 用户切换并不改变工作目录:

【Linux操作系统】shell和文件权限_第5张图片

 2.su - 用户切换并改变工作目录到/root

【Linux操作系统】shell和文件权限_第6张图片

2-1-2 root转普通用户

root转普通用户:快捷键ctrl+d

ps:退出普通用户:快捷键ctrl+d

ps:退出Xshell:快捷键ctrl+d

ps:exit指令可以从root或song一次退到[D:~]$

2-1-3 短暂提权 sudo

如果我只想让普通用户短暂的提权,短暂的具有一下root的权限去执行某些操作,而在大多数情况下,还是只具有普通用户的一般权限,这样的话,我们该怎么办呐?

 
模板;sudo + 正常的指令
 例子:sudo  touch file.txt   ----以root的身份执行touch file.txt这条指令

ps:这里要输入的密码是普通用户song的密码,所以建议root和普通用户的密码设置成不同,作为区分.

输完密码后你发现:普通用户song 不在sudoers文件中,终止了sudo touch file.txt的请求.

至于如何把普通用户song加入白名单,我们讲到vim编辑器时给大家演示.

2-2 权限简介

首先那Linux操作系统对于文件的权限具有很严格的控制,要想对文件执行某种特定的操作,必须得拥有某种特定的权限。

那么什么是权限呐?

首先权限约束的是人,比如校长能进入校长办公室,但是我不能进入校长办公室,ps:这是因为角色问题,而不是因为某一个人,比如王刚校长被撤职了,即使他还是王刚,但是因为他不再是校长的身份,所以他就不能再进入校长办公室了.

其次由于事物天然的属性决定了某一个人能不能执行相应的操作,比如校长能坐在桌子上,却不能吃掉桌子,这是因为桌子只能被用来做,而不能用来吃.

听到这里或许你会以为我说的是废话,但是这能帮你理解文件权限:操作者的角色+文件所对你该角色的开放属性

2-3 文件类型

首先给出结论:Linux中不以后缀区分文件类型,而是通过文件属性中的首字符的类型来区分文件类型.

但是有同学就会有图片中的问题:

【Linux操作系统】shell和文件权限_第7张图片

我们知道ll命令可以查看文件的更多属性,那么这些属性分别代表什么意思呐,这里先给一个大概的方向:

【Linux操作系统】shell和文件权限_第8张图片

  1. -普通文件[文本,各种动静态库,可执行程序,源程序]

  2. d 目录文件

  3. c 字符设备文件

  4. b 块设备文件

  5. p 管道文件

  6. l 链接文件

  7. s 套接字

【Linux操作系统】shell和文件权限_第9张图片

以上的7项依次表示为[文件的属性和权限-rw-re-r--] , [连接数1] , [文件的拥有者] , [文件的所属组] , [文件的大小] , [文件的创建时间] , [文件名]

2-4 基本权限

  • 三种身份:

  1. 文件拥有者(user)

  2. 文件所属组(group)

  3. 其他人(other)

文件的拥有者:文件的创建者在创建的时候默认创建者就是拥有者,但是文件如物品一般可修改其拥有者,所以文件的创建者不一定是文件的拥有者

文件的所属组:我们在公司写项目的时候,和你(文件拥有者)分配在同一个组写项目的人就是文件的所属组的人

其他人:除了文件的拥有者和文件的所属组以外的人.

  • 每一种身份,对应三种权限

  1. 读(r):read

  2. 写(w):write

  3. 执行(x):execute

每一个角色的三个文件属性分别为读,写,执行,如果是r,w,x就是读写执行,如果该位置是-,就是不可读.

【Linux操作系统】shell和文件权限_第10张图片

2-5 修改权限

2-5-1修改文件的读写可执行权限

首先我们要知道文件的拥有者和root都可以对文件的读写可执行权限进行修改,

但是我们通过测试还发现:

  1. 文件的拥有者如果没有读写可执行权限,那么就不能读写可执行权限!

    【Linux操作系统】shell和文件权限_第11张图片

  2. 但是root用户是即使没有读写权限,也是可以读可以写的,但是执行权限如果不自己加的话,就不能可执行.(因为怕这个程序很危险吧,所以如果不加上可执行权限就不能执行)

    【Linux操作系统】shell和文件权限_第12张图片

所以说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

【Linux操作系统】shell和文件权限_第13张图片

方式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修改文件的拥有者和所属组

2-5-2-1 修改文件拥有者

如果现在的文件拥有者是song,我想把文件的拥有者给root,文明的给就得征得root的允许,所以我们就的强制的给(sudo暂时提权)

如果文件的拥有者是root,我想把文件给song,则直接给!

如果文件的拥有者不是root,我想把属于song的文件给自己,直接拿!

【Linux操作系统】shell和文件权限_第14张图片

2-5-2-1 修改文件的所属组

修改文件的所属组也类似的道理:

 chgrp song file.txt

值得一提的是,其实可以通过文件的拥有者/root使用chown依次性的将文件的拥有者和所属组一次性的改掉(也就是或chgrp可以束之高阁)

【Linux操作系统】shell和文件权限_第15张图片

所以我们修改了文件的拥有者和所属组,其他人就是除了文件的拥有者和所属组之外的人了~~~~

2-6 权限掩码

问题:为什么我们新创建的文件的默认的权限是我们看到的这样的?为什么你的Xshell和我的Xshell的新创建的文件的默认权限是不一样的?

解答:这就和这里要讲的权限掩码有关:

【Linux操作系统】shell和文件权限_第16张图片

未完待续 

2-7 目录的权限

对于非root用户来说:

可执行
普通文件 cat nano ./
目录 ll touch/rm cd

你可能感兴趣的:(Linux操作系统,linux,bash,运维)