1.shell
1.1什么是shell?
shell即外壳,是运行在linux系统上的一个脚本语言,包裹在linux内核的外面。我们常说的linux操作系统实际上是linux内核。我们使用的所有指令都是一个个程序,而shell指令就是一个将我们用户的操作翻译给linux内核的程序。总的来说,shell就像是一个翻译官,将用户的意图转换加工并传递给内核,内核做出反应后传递给shell,shell再转换加工并传递给用户。
总结:shell就是我们用户和操作系统之间进行交互的媒介(命令行解释器**)。**
1.2 shell的作用
为什么不让用户直接在linux内核上操作呢?
要知道,操作系统是最接近计算机硬件的软件 ,控制分配着计算机的各种硬件资源以及作业。如果直接暴露给用户使用,那么我们的计算机将会变得非常危险,用户一个不小心可能就会让整个机器崩溃。另外,操作系统向上提供的这些接口较为复杂难懂,在用户角度上来说是非常不友好的(大部分用户都不是程序员)。所以,我们需要将这些操作系统的接口"包装"起来,一来是可以更好的保护计算机,二来是为用户操作提供容易理解并使用的"工具"。
2.linux权限
2.1权限的概念
在我们的日常生活中会接触到许许多多需要权限才能执行的事情,比如我们要看某个需要会员 才能看的电影,通过"会员",app可以筛选出谁能看这个电影,谁不能看这个电影。其实会员的概念跟权限一致,其实质都是在规定---什么样的角色能干什么事。 而在linux操作系统中,"角色"包括普通用户和root超级用户。
root用户和普通用户的区别
超级用户:可以再linux系统下做任何事情,不受限制
普通用户:在linux下做有限的事情。
超级用户的命令提示符是**"#"** ,普通用户的命令提示符是**"$"**
2.2su指令
su用来切换当前的用户身份
语法su [用户名]
常用格式
指令格式 | 含义 |
---|---|
su | 输入root密码后切换到root用户但是pwd目录不变 |
su - | 输入root密码后切换到root用户但是pwd目录/root |
su root | 输入root密码后切换到root用户但是pwd目录不变 |
su - root | 输入root密码后切换到root用户但是pwd目录/root |
su 某用户名 | 输入这个用户的密码后切换到该用户但是pwd目录不变 |
su - 某用户名 | 输入这个用户的密码后切换到该用户但是pwd目录在 /该用户 |
举例:
su root 指令演示
su - root指令演示
总结
su指令可实现普通用户和root(超级管理员)之间的交换,值得注意的是,su默认只是切换身份,并没有切换环境变量,环境变量依然是普通用户的。切换用户身份时,用户的环境变量也切换成新用户的环境变量,所以"-"不能省略,不然有些操作无法执行。这也是为什么su root之后所处的当前路径不会更新,而su - root之后所处的当前路径会回到/root下。
2.3linux权限管理
对linux而言,一切皆文件,Linux的权限管理其实大多也就是在管理文件。文件=文件内容+属性 ,属性又包括这个文件的路径、最近修改时间、文件拥有者、文件所属组等信息 。即使我们创建一个空文件(没有内容),这个文件的大小也不为0,因为还需要空间存储属性信息。
用ls 查看文件属性
红框框里面的就是文件属性
2.3.1文件属性
对于以下文件属性
解析各个字段
2.3.2文件的拥有者、所属组的概念
在Linux系统中,每个文件和目录都有一个所有者 (owner)和一个所属组 (group)。这两个概念是用来控制对文件和目录的访问权限的。
拥有者
我们知道linux系统是多用户操作系统,每个文件都有它的 拥有者,只有文件的拥有者才具有修改文件属性的权力 ,当一个文件被创建时,会默认当前用户为文件的拥有者。当然,root用户可以随意修改,即使该文件的拥有者并不是root.
所属组
所属组定义了文件或目录的关联组。所有属于同一组的用户都具有该组对文件或目录的一些权限。这允许多个用户在同一组中共享访问权限。
注意
权限分为三个主要类别:所有者权限、所属组权限和其他用户权限。那为什么没有标明其他用户是谁呢?在linux文件属性中,如果一个用户既不是该文件的拥有者也不是所属组,那么对于这个文件而言,这个用户就是其他用户,也只能使用其它用户的权限。
2.4文件类型以及权限
在这个字段中,一共有10个字符,第一个字符表示文件的类型,后面九个字符以三个为一组,分别表示这个文件的拥有者、所属组、其它用户的权限。
文件类型
d:文件夹
-:普通文件
l:软链接(类似Windows的快捷方式)
b:块设备文件(例如硬盘、光驱等)
p:管道文件
c:字符设备文件(例如屏幕等串口设备)
s:套接口文件
文件的权限
文件和目录的权限由三组权限分别表示,分别是所有者权限、所属组权限和其他用户权限 。每组权限都包含读(read)、写(write)和执行(execute)权限。r表示读权限,w表示写权限,x表示执行权限 。如果没有对应的权限,用"-"表示。(顺序是固定的)
可用八进制表示每一组的权限
r的权值为4,二进制表示为100
w的权值为2,二进制表示为010
x的权值为1,二进制表示为001
其中权限的组合用每种权限的权值相加得到,例如7(八进制)用二进制表示为111(100+010+001=111),转换为权限的含义就是,可读可写可执行。如果某个文件总的权限用八进制表示为700,从左往右,分别表示,拥有者的权值为7,所属组和其他的权值为0。
例如:
r - - 表示可读、不可写、不可执行
r w - 表示可读、可写、不可执行
- 表示不可读、不可写、不可执行
分析以下部分文件属性
cpp
-rw-rw-r-- 1 tsx tsx 0 Nov 30 18:53 file2.txt
通过这个文件属性信息我们可以知道,file2.txt是一个普通文件,拥有者和所属组都是tsx,拥有者和所属组的权限都是是 可以读取文件的内容,可以向该文件写入信息,不可执行。而对于其他用户来说,就只有读的权限。
演示
假设cat 某个该用户没有读权限的文件
注意
对于一个文件夹来说,读、写、执行的权限含义与普通文件相比有所不同。
1、读权限 :表示用户可以列出目录中的文件和子目录 。对于一个目录来说,如果该用户没有读权限,即使可以列出该目录的子目录和文件,也无法查看其文件的内容 。
2、写权限 :表示用户可以在目录中创建、删除和重命名文件或子目录 。对于一个目录来说,如果该用户没有写权限,可以列出该目录的子目录和文件。如果没有写权限,即使其子目录或文件的权限是可写的,也不能删除或者修改等操作。
3、执行权限 :对于目录,执行权限表示用户可以进入该目录 。如果用户没有执行权限,即使目录是可读的,也无法进入其中。也就意味着,用cd 指令进入某个没有x(执行)权限的目录会失败。
2.5修改文件的权限
在linux操作系统中,我们可以使用一些指令来修改 文件的权限属性,也可以修改文件的拥有者和所属组。
2.5.1chmod指令
chmod是用来修改文件或者目录权限的指令,它允许用户为文件或目录的所有者、所属组和其他用户分别设置读、写和执行权限。
常用选项:
-R -> 递归修改目录文件的权限
说明:只有文件的拥有者和root才可以改变文件的权限
chmod命令权限值的格式
chmod 用户表示符+/- /= 权限字符 文件名
用户表示符
u:拥有者
g:拥有者同组用
o:其它用户
a:所有用户
+、-、=符号
+:向权限范围增加权限代号所表示的权限
-:向权限范围取消权限代号所表示的权限
=:向权限范围赋予权限代号所表示的权限
将拥有者的权限减去一个r权限
考虑以下指令
cpp
chmod u-r 111
我们可以看到用chmod u-权限符 可以删除某个文件拥有者的读权限,那怎么加回来呢?
将拥有者的权限增加上一个r权限
考虑以下指令
cpp
chmod u+r 111
将某个目录下的文件或者子目录的所有用户都删除写权限
考虑以下指令
cpp
chmod -R a-w 111
其实修改用户的权限非常的简单,指令格式也非常的容易理解。另外,我们也可以用对应的八进制来代替权限符。比如chmod 000 某个文件:
2.6思考
我们发现,创建的目录或者是文件在被创建之后都会有默认的权限,这些默认权限的赋予规则是什么呢?
文件的默认权限
在Linux系统中,新创建的文件和目录都会有默认权限。这些默认权限是由系统的 umask(用户文件创建掩码)值控制的。Umask决定了在创建新文件或目录时从文件权限中去除的权限位。
2.6.1什么是umask?
umask
(用户文件创建掩码)是一个在Unix和类Unix系统中的概念,用于控制新文件和目录的默认权限。它是一种权限掩码,用来确定在创建新文件或目录时从权限中要移除的位。
我们可以用umask直接查看umask值(八进制)
cpp
umask
2.6.2默认权限规则
Umask的值是从文件权限中减去的权限。我们知道文件的三个身份权限可以用三个八进制位表示,而**默认创建的文件会将满权限(一个身份的满权限的权值是7,三个就是777)的八进制位分别减去对应的umask位(相同的八进制位).**例如,如果umask的值为0002,那么在创建新文件时会去除其它用户的写权限(2)。
以umask值为0002为例(跟002一样)
第一位八进制默认为 7-0=7,对应着拥有者的权限为111 (二进制),也就是rwx
第二位八进制默认为 7-0=7,对应着所属组的权限为111 (二进制),也就是rwx
第三位八进制默认为 7-2=5,对应着拥有者的权限为101 (二进制),也就是r-x
所以根据以上默认权限的规则,umask为0002时,创建的目录或者文件的权限默认都是775
2.6.3 修改umask
我们可以用umask+ 合适的八进制值来修改umask
考虑以下指令集
cpp
umask 000
mkdir 555
根据前面的默认权限规则得到得到默认权限的过程
第一位八进制默认为 7-0=7,对应着拥有者的权限为111 (二进制),也就是rwx
第二位八进制默认为 7-0=7,对应着所属组的权限为111 (二进制),也就是rwx
第三位八进制默认为 7-0=0,对应着拥有者的权限为111 (二进制),也就是rwx
2.7修改文件的拥有者和所属组
2.7.1修改文件的拥有者
chown指令
chown命令可以将某个文件的拥有者修改为另一个存在的用户。 只有超级用户 (root)才有权限使用
chown
命令。
考虑以下指令
cpp
chown root 111
2.7.2修改文件的所属组
chgrp指令
chgrp命令
用于更改文件或目录所属组的命令。只有超级用户 (root)才有权限使用chgrp
命令。
考虑以下指令
cpp
chgrp root 222
2.8.总结
文件的权限总是围绕着什么样的角色能干什么样的事,了解并熟悉权限操作管理有助于保护我们的文件信息也有助于团队之间的信息沟通。就像我们人一样,我们应当明确自己是什么角色、能干什么样的事,恪守本分,遵纪守法,这样社会才会有秩序,这样我们才能安稳的生活。