目录
一、shell命令及运行原理
1、外壳程序shell
# 我们前面已经知道了什么是命令行:

# 这个命令行本身也是个可执行程序,其功能就是根据用户的输入,来输出用户期望的内容或进行相关的反馈。
# 这种可执行程序(如bash工具等)叫做命令行解释器,也统一叫做shell外壳。
# Linux严格意义上说的是⼀个操作系统,我们称之为“核⼼(kernel)“ ,但我们⼀般⽤⼾,不能直接使⽤kernel。⽽是通过kernel的“外壳”程序,也就是所谓的shell,来与kernel沟通。
2、shell作用
# 那么我们该如何理解?又为什么不能直接使⽤kernel?

# 从技术⻆度,Shell的最简单定义:命令⾏解释器(command Interpreter)主要包含:
- 将使⽤者的命令翻译给核⼼(kernel)处理。
- 同时,将核⼼的处理结果翻译给使⽤者。
# 对⽐windows GUI,我们操作windows 不是直接操作windows内核,⽽是通过图形接⼝,点击,从⽽完成我们的操作(⽐如进⼊D盘的操作,我们通常是双击D盘盘符.或者运⾏起来⼀个应⽤程序)。
# shell 对于Linux,有相同的作⽤,主要是对我们的指令进⾏解析,解析指令给Linux内核。反馈结果在通过内核运⾏出结果,通过shell解析给⽤⼾。
- 帮助理解:如果说你是⼀个闷骚且害羞的程序员,那shell就像媒婆,操作系统内核就是你们村头漂亮的且有让你⼼动的MM⼩花。你看上了⼩花,但是有不好意思直接表⽩,那就让你你家⼈找媒婆帮你提亲,所有的事情你都直接跟媒婆沟通,由媒婆转达你的意思给⼩花,⽽我们找到媒婆姓王,所以我们叫它王婆,它对应我们常使⽤的bash。
# 每次在xshell登录你的用户的时候, 系统都会给你重新分配一个新的shell外壳程序, 也就是人手一个王婆. 而且在没有用户登录的时候, 是没有shell进程的, 毕竟都没有用户, 那么媒婆也就没必要存在了。
# 所以就有一个现象就是, 比如你登录了两次你的用户, 你在其中一个用户kill掉了另外一个登录用户的shell进程, 那你这边是不会有任何影响的, 但是那边就会有影响, shell进程都挂掉了, 就帮不了你了。
二、用户
1、超级用户root与普通用户
# Linux下有两种⽤⼾:超级⽤⼾(root)、普通⽤⼾。
- 超级⽤⼾:可以再linux系统下做任何事情,不受限制
- 普通⽤⼾:在linux下做有限的事情。
- 超级⽤⼾的命令提⽰符是“#”,普通⽤⼾的命令提⽰符是“$”。

# 超级用户拥有极高的权限,可以在 Linux 统下执行几乎任何操作,其权限几乎不受限制。相比之下,普通用户通常只能在自己的工作目录/home/xxx内进行工作,并且在整个系统上所能进行的操作也较为有限。 换句话说,Linux系统中的权限概念主要是为了对普通用户的行为进行限制,以确保系统的安全性和稳定性。而超级用户由于其强大的权限,在使用时需要格外谨慎,以免误操作对系统造成严重破坏。
# 超级用户的提示符为#,普通用户的提示符为$。这一区别可以帮助用户在使用命令行时快速区分自己当前所使用的用户身份,从而更好地掌握自己的操作权限范围。
2、创建与删除普通用户
2.1 创建普通用户
# 实际上,使用root账号是比较危险的,因为root账号的权限太大,可能会因为误操作而造成不可挽回的结果,所以我们最好创建一个普通用户的账号平时使用。接下来我们就来谈一谈如何创建一个普通账户:
- 首先在
root用户下,输入指令addser yourid,其中yourid是你自己创建的用户名。- 然后输入指令
passwd yourid来设置你的密码。(其中输入密码并不会显示)- 最后再次确认密码,密码设置就成功。
# 在知道如何创建新用户之后,我们可以通过我们创建的用户名与密码登录普通用户。
2.2 删除普通用户
直接在
root用户下,输入指令userdel -r yourid,
3、root与普通用户的切换
# 虽然我们平时使用的是普通用户,但是偶尔有些指令就需要在root用户下执行。所以这时候就需要我们切换用户。
3.1 普通 -> root
su:仅仅是一个用户身份的切换,用户所处的路径不发生改变。su root:其实就是su的全称。su-:更改为家目录/root下,其实就相当于重新登录。


3.2 root -> 普通
su user
# 切换用户后,若想切回上次的用户,可按Ctrl+d实现,也可以输入指令exit。
# 但是有时候我们并不知道root用户的密码,但是又需要root用户去执行某条指令,那么这时就需要输入指令sudo 指令,这条指令就可以提升我们要执行指令的权限,即让root用户执行。但是使用这个指令有一个条件就是root用户将此普通用户添加到可信任白名单中。
# 如果要将某个用户添加进入可信任白名单中,首先在root用户下,通过指令vim /etc/sudoers对应文件。

# 然后我们就可以使用sudo指令来提升指令时的权限。

4、Linux多用户之间相互隔离
# 在Linux系统中,每新建一个普通账号,系统就会在/home目录下自动创建以特定用户名来命名的文件夹,登陆普通账号时,默认的家目录就是这个目录里面。
# 这个用户文件夹的拥有者和所属组都是特定用户自己,而这个目录的所属组和other属性全都关闭了,这就意味着:任何普通用户都无法进入其他用户的家目录。

三、Linux权限管理
1、 用户划分
# 在Linux中,为了方便管理文件,还对我们的用户或者文件访问者进行了分类:
文件和文件目录的拥有者:
u—User
文件和文件目录的所属组:g—Group
其它用户(即不是这个文件的拥有者):o—Others

# 因为other可能存在多个,所以除了文件拥有者和文件所属组之外的都叫other。
2、文件类型与访问权限
# 首先是文件类型,在Linux下,可以分为以下几种文件:
-:普通文件(指不包含有文件系统信息的结构信息的文件,是用户所接触到的文件,比如常见的.exe,.c,.txt,归档文件等在Linux中统称为普通文件)
d:目录(文件夹)
l:软链接(类似Windows的快捷方式)文件
b:块设备文件(例如硬盘、光驱等)
p:管道文件
c:字符设备文件(例如屏幕等串口设备)
s:套接字文件
# 然后文件的访问权限也可以分为:可读(r)、可写(w)和可执行(x)。

# 如果仔细观察就可以发现,其一共有十个字符,除开第一个代表文件的类型外,后九个每三个为一组,分别代表拥有者,所属组,其他用户的可读,可写,可执行的权限。
| 字符表示法 | 说明 |
| r - - | 仅可读 |
| - w - | 仅可写 |
| - - x | 仅可执行 |
| r w - | 可读可写 |
| r - x | 可写可执行 |
| - w x | 可写可执行 |
| r w x | 可读可写可执行 |
| - - - | 无权限 |
# 其实除了这种表示方法之外还有一种表示方法那就是八进制表示法,如下图:
| 字符表示法 | 二进制 | 八进制数值表示法 | 说明 |
| r - - | 100 | 4 | 仅可读 |
| - w - | 010 | 2 | 仅可写 |
| - - x | 001 | 1 | 仅可执行 |
| r w - | 110 | 6 | 可读可写 |
| r - x | 101 | 5 | 可读可执行 |
| - w x | 011 | 3 | 可写可执行 |
| r w x | 111 | 7 | 可读可写可执行 |
| - - - | 000 | 0 | 无权限 |
# 可执行权限 != 文件可执行
3、权限的设置
# 在了解权限的分类之后,我们接下来学习如何更改文件的访问权限:
3.1 更改文件的访问权限(chmod)
1、语法:
chmod 选项 权限 文件名或目录名2、功能: 设置文件的访问权限
3、常用选项:
-R递归修改目录文件的权限
3.1.1 方法一: 用户符号 +/-/= 权限字符
+:向权限范围增加权限代号所表示的权限
-:向权限范围取消权限代号所表示的权限
=:向权限范围赋予权限代号所表示的权限
# 用户符号:
u:拥有者
g:所属组
o:other
a:所有用户

# 注意:如果相同时改变不同种类用户的访问权限,中间需要用逗号隔开。

3.1.2 方法二: 使用八进制数字

# 接下来我们来讨论如何更改文件的拥有者。
3.2 更改文件的拥有者(chown)
1、语法:
chown 选项 用户名 文件名或目录名2、功能: 修改文件的拥有者
3、常用选项:
-R递归修改目录文件的拥有者

3.3 更改文件所属组(chgrp)
# 我们也可以通过以下命令改变文件所属组。
1、语法:
chgrp 选项 用户名 文件名或目录名2、功能: 修改文件的所属组
3、常用选项:
-R递归修改目录文件的所属组

3.4 chown同时更改拥有者和所属组
# 其实我们可以使用chown指令同时改变拥有者与所属组,中间:隔开即可。

# 当然以上指令都需要在root用户下执行。
# 在CentOS下,系统在确定权限信息的时候,只确定一次用户角色,顺序是:拥有者、所属组、other
# root用户不受权限的约束!!!
4、文件掩码
# 实际上,新建文件的默认权限为0666(rw- rw- rw-),新建目录的默认权限为0777(rwx rwx rwx),其中第一位与特殊权限相关,这里我们不需要深究。但是实际上新建文件与目录的默认权限并不如上所说,这是怎么回事呢?
# 其实这种情况就与我们的文件掩码umask有关,我们设默认权限为mask,实际创建出的文件或目录权限为:最终权限 = mask & (~umask)。
# 我们可以通过这个指令umask 八进制数来修改默认的掩码umask:

# root用户的默认掩码为0022,而普通用户为0002 。
# umask的修改是临时的,只要重新登录就会恢复为默认的umask。
# umask的目的:希望凡是在umask中出现的权限,都不应该在最终权限中出现。
# 为什么要有umask?
- 默认权限由OS自主决定,无法在创建前进行修改;umask使得系统可配置,是可以灵活满足需要的一种表现。
- 特殊情况下,我们可以通过配置umask,可以控制文件的默认权限,让我们的代码都是可控的
5、目录的权限
# 对于普通文件来说,可读,可写,可执行这种字面含义就能帮助我们理解其权限的作用,但是对于目录来说,就有所区别了。
1、可读权限: 如果用户没有该目录的 r 权限,则无法通过
ls指令查看目录中的文件内容。2、可写权限: 如果用户没有该目录的 w 权限,则无法通过一系列指令在目录中创建文件或删除文件。
3、可执行权限: 如果用户没有该目录的 x 权限,则无法通过
cd指令进入到目录当中。
# 由此我们能发现一个现象:一个文件是否能被删除,与文件本身的权限无关!而是与文件所处目录的 w 权限有关!!!
# 但是这种情况就会导致一个非常严重的问题,那就是:拥有目录的可读权限的人可以删除目录中的文件,即使你没有这个文件的任何操作属性,因此这是不可取的,你不可能去随便删除别人的文件。

# 所以了为了解决这个问题就引入了粘滞位的概念。
6、共享文件 -- 粘滞位
# 为目录添加粘滞位特别简单只需要输入指令chmod +t 目录名。一般是共享文件,任何一个人都可以在目录进行各自文件增、查、改,但是不能让非拥有者删除。

# t 是一种特殊的 x 权限。
# 在为目录添加了粘滞位之后,该目录文件就只能由root用户删除或者该目录或文件的拥有者删除。
# 其实在根目录 / 下就存在一个tmp/是带粘滞位的,他相当于就是系统自带的共享文件,我们可以在里面去创建共享文件,而不需要每次创建共享文件都在根目录!!



2969

被折叠的 条评论
为什么被折叠?



