自学内容网 自学内容网

第二部分:shell与Linux权限

目录

1、shell浅谈

2、Linux权限

2.1、用户

2.2、文件类型和访问权限

2.2.1、文件访问者的分类

2.2.2、文件类型

2.2.3、文件访问权限

2.2.4、文件权限的表示

 2.3、文件权限设置

2.3.1、chmod命令

2.3.2、chown命令

2.3.3、chgrp命令

2.3.4、umask命令

2.3.5、file命令

2.3.6、sudo

2.4、粘滞位


1、shell浅谈

Linux是一个操作系统,Linux的核心是内核(kernel)。“但是我们一般不与操作系统直接打交道,而是通过“外壳”程序间接的和操作系统打交道,这个外壳程序就是shell,为什么呢?原因有很多,比如用户直接与操作系统打交道可能会损害操作系统,此外直接与操作系统打交道的成本是比较高的。

对比Windows,我们操作Windows也不是直接操作Windows内核,而是通过图形接口,点击,从而完成我们的操作(当然Windows也是支持命令行的,只不过大多时候我们都是使用图形化界面的方式操作Windows)。

对于Linux,我们则使用的是命令行的方式操作。命令行将指令解析后给Linux内核,反馈结果在通过内核运行出结果,通过命令行解析给用户。(输入指令过程的本质就是在输入字符串)。

我们所有的命令都是要在OS(操作系统)内部运行的,但是OS的操作难度较高,用户也不能直接和操作系统打交道,所以使用图形化界面的方式,或者命令行解释器间接和OS打交道。

命令行解释器也就是bash命令行,也就是shell或者sh。区别是shell是一个抽象的概念bash和sh是这个抽象概念的具体实例。

Shell的最简单定义:命令行解释器,主要包含:

1、将使用者的命令翻译给核心(kernel)处理。

2、同时,将核心的处理结果翻译给使用者。

接下来,解释一下bash命令行的提示符:

[test@name ~]$

 其中test是用户名,@后面的name是主机名,~是当前用户的家目录,$是普通用户的提示符(root用户的提示符是#)。

2、Linux权限

2.1、用户

Linux下有两种用户:超级用户(root)、普通用户。

超级用户:可以再linux系统下做任何事情,不受限制(类似于Windows下的超级管理员)。

普通用户:在linux下做有限的事情,受权限的控制。

超级用户的命令提示符是“#”,普通用户的命令提示符是“$”。

若想要超级用户和普通用户进行切换,可以使用su命令:

语法:su [用户名]

功能:切换用户。

例如:

要从root用户切换到普通用户user,则使用 su user,不需要输入密码。

要从普通用户user切换到root用户则使用 su root(root可以省略),此时系统会提示输入root用户的密码。

注意:在从普通用户切换成root用户,su命令后面可以加-,如果加上,相当于重新登录了root账号,默认在root的家目录,但是如果不加,就相当于身份的切换,默认在该普通用户的家目录。

从普通用户切换成了root后想要再变回到普通用户,可以使用exit。

2.2、文件类型和访问权限

2.2.1、文件访问者的分类

文件拥有者:u---User

与文件拥有者所在一个组的用户:g---Group

其它用户:o---Others 

2.2.2、文件类型

在Windows中,文件的类型是以文件后缀来区分的。在Linux中,文件后缀对于系统来讲没有直接的意义,但是对于在Linux上运行的软件是有意义的,比如:gcc是一款编译器,也就是一款软件,他就要求操作的文件要以.c为结尾的。因此,我们在创建文件时,尽量带上后缀,不光能避免一些问题,也能让自己容易区分文件的类型。

d:文件夹

-:普通文件

l:软链接(类似Windows的快捷方式)

b:块设备文件(例如硬盘、光驱等)

p:管道文件

c:字符设备文件(例如屏幕等串口设备)

s:套接口文件

2.2.3、文件访问权限

i.读(r):r对文件而言,具有读取文件内容的权限;对目录来说,具有浏览该目录信息的权限(也就是看目录面的内容)。

ii.写(w):w对文件而言,具有修改文件内容的权限;对目录来说具有删除移动目录内文件的权限(也就是对目录里面尽心操作,比如:创建、移动、删除等)。

iii.执行(x):x对文件而言,具有执行文件的权限;对目录来说,具有进入目录的权限。

iv.“-”表示不具有该项权限。

例如:

注意:root用户是不受权限限制的(例如:哪怕显示root用户对该文件是没有权限的,root用户照样也已对该文件进行操作),其他的普通用户是受权限限制的。

2.2.4、文件权限的表示

1、字符表示法

 2、8进制数值表示法

 2.3、文件权限设置

2.3.1、chmod命令

语法:chmod 权限 文件名

功能:设置文件的访问权限。

说明::只有文件的拥有者和root才可以改变文件的权限。

权限字符:

+:增加权限

-:取消权限

=:等于什么权限

用户符号:

u:拥有者

g:拥有者同组用

o:其它用户

a:所有用户

例如:

chomd u-rwx,g+rwx,o+rw test.txt

 表示:拥有者去掉读写执行的权限,所属组加上读写执行的权限,其他加上读写权限。再比如:

chomd u+w test.txt

 表示:拥有加上写权限。

除了上面的写法,还可以使用8进制数来表示权限,例如:

chomd 664 test.txt

 上面的数字是八进制,第一个数字6表示拥有者的权限改为读写权限,第二个数字6表示所属组改为读写权限,第三个数字4表示其他用户权限改为读权限。

2.3.2、chown命令

语法:chown [参数] 用户名 文件名

功能:修改文件的拥有者

注意:普通用户需要使用sudo才能修改权限。

例如:

chown test test.txt

把test.txt的拥有者改为test用户。

还可以使用chown 拥有者:拥有者组 文件名的格式一次性的修改文件的拥有者和所属组,例如:

chown root:root test.txt

把test.txt文件的拥有者和所属组都改为root用户。

2.3.3、chgrp命令

语法:chgrp [参数] 用户组名 文件名

功能:修改文件的所属组

注意:普通用户需要使用sudo才能修改权限。

例如:

chgrp root test.txt

把test.txt文件的所属组改为root。

注意:在判断一个用户对某个文件的权限时,优先从拥有者开始,其次是所属组,最后是其他用户。也就是说当一个文件的拥有者和所属组是同一个用户时,该用户对该文件的操作权限就是拥有者的权限。

2.3.4、umask命令

语法:umask [权限值]

功能: 查看或修改权限掩码(普通用户权限掩码默认是0002,root用户权限掩码默认是0022)。

新建文件夹起始权限=0666

新建目录起始权限=0777

但实际上你所创建的文件和目录,看到的权限往往不是上面这个值。原因就是创建文件或目录的时候还要受到 umask的影响。假设默认权限是mask,则实际创建的出来的文件权限是: mask & ~umask

例如:

umask

查看权限掩码。再比如:

umask 0001

把权限掩码改为0001。

注意:最终的权限=起始权限&(~权限掩码)。

例如:

110 110 110 //文件的起始权限。
000 000 010 //权限掩码的值。
111 111 101 //权限掩码取反后的值。
110 110 100 //起始权限&权限掩码取反后的值(也就是最终权限)
最后的值为664也就是普通文件的最终权限

 同样目录的最终权限也是这样算出来的,例如:

111 111 111 //起始
000 000 010 //权限掩码umask
111 111 101 //~umask
111 111 101 //起始权限&~umask的结果
最后的值就是775,也就是目录的最终权限
2.3.5、file命令

语法:file [选项] 文件或目录

功能:辨识文件类型。还可以用来查看可执行文件是动态链接的还是静态链接的(后面讲)。

2.3.6、sudo

如果我们要想暂时对一条命令进行提权,就可以使用sudo命令。

其本质是在一段时间内以root用户的身份去执行sudo后面的命令。

但是我们目前创建出来的普通用户是没办法执行sudo的,若想要让普通用户执行sudo,需要将该普通用户添加到系统的配置文件中。(也就是授予某个普通用户使用sudo的权利)

在root用户下(一定要在root用户下,不要使用普通用户完成该操作,即便是普通用户sudo提权进行操作也是不建议的。),使用

vim /etc/sudoers

 然后找到root ALL=(ALL)  ALL这个东西啊,仿照这个格式在下面添加一个用户,例如wang用户。

 添加完成后保存退出即可。

:关于vim后面会讲,如果不会使用vim,可以看后面的文章之后再来配置。

语法:sudo command

功能:以root身份去执行command命令。

例如:

sudo whoami

结果为root。

2.4、粘滞位

有时候,我们想要多个用户进行文件数据的共享,让每个普通用户可以在共享目录下创建文件,可以向自己创建的文件中写入内容,也可以删除自己创建的文件等等。

普通用户在自己家目录的权限是700,在自己家目录创建的文件,其他普通用户是看不到的(不受权限约束的root例外)。由于上面的原因,我们所建立的共享文件不能在任何一个用户的家目录下。

此外,一个文件是否可以被删,并不由这个文件本身决定,而是由这个文件所处的目录决定。换句话来讲, 就是只要用户具有目录的w权限, 用户就可以删除目录中的文件, 而不论这个用户是否有这个文件的写权限,这是不太科学的,例如:张三创建的一个文件, 凭什么被你李四可以删掉。但如果我们去掉了共享目录的w权限,虽然没法删除文件了,但是同时也没办法创建文件了,共享目录的共享也就体现不出来了。

为了解决这个不科学的问题,Linux引入了粘滞位的概念。

粘滞位:给目录设置,一般是共享目录,大家可以在该目录中进行各自文件的增删改查,只允许文件的拥有者或者root能删除文件,其他人一概不许。t:是一种特殊的x权限。

例如:创建一个shared文件(注意:下面的操作在是在root用户下进行的)

mkdir shared

 将该文件的权限变为777

chmod 777 shared

 对该共享文件的其他用户加上粘滞位,也就是t权限。

chmod o+t shared

注意:粘滞位是针对目录的,不是普通文件。

Linux中系统中默认会有一个共享目录tmp,这个目录就被设置了粘滞位。


原文地址:https://blog.csdn.net/yi_ren_yi_xin/article/details/145158661

免责声明:本站文章内容转载自网络资源,如侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!