Linux - #操作系统概念 #权限
文章目录
前言
一、Linux操作系统 与 shell
1、对于Linux操作系统 :
2、对于命令行:
二、什么是操作系统
三、Linux 权限的概念
1、Linux 的文件类型
2、Linux 的用户
2.1 新增用户
2.2 问题
3、权限的理论理解
4、权限的操作实验
4.1 修改文件的权限属性:
方法一:符号模式 (Symbolic Mode)
方法二:八进制模式 (Octal Mode)
4.2 更改文件的拥有者和所属组
总结
前言
路漫漫其修远兮,吾将上下而求索;
一、Linux操作系统 与 shell
Linux 严格意义上说是一个操作系统,我们称之为”核心“, 但是用户一般不会直接使用 ”核心“,而是通过”外壳“程序 Shell 来与”核心“进行沟通;
Shell :命令行解释器 (command interpreter) 主要功能:
- 1、将使用者的命令翻译给”核心“处理
- 2、将”核心“ 处理的结果翻译给使用者
Q: 为什么不能直接使用”核心“?
- 门槛高,使用起来很复杂,许多东西需要自己编程来访问;且操作系统容易被恶意修改;
在windows 中,我们使用windows 并不只直接操作windows 的内核,而是通过windows 的图形化接口与内核进行“交互”;
而Shell 对于 Linux 也有同样的作用,通过对我们的指令进行解析给Linux 内核 , 通过内核运行出结果shell 再解析给用户;
1、对于Linux操作系统 :
狭义上的Linux操作系统为Linux 内核;
广义上的Linux操作系统 为内核 + shell 外壳程序 + 系统中默认安装的软件;
Q:Ubuntu、CentOS 等操作系统的区别?
- 可以认为Ubuntu、CentOS 等操作系统的内核是完全一样的,区别在于其外壳程序、系统中默认安装的软件不同;
注:安卓操作系统的底层就是Linux, 也可以认为安卓操作系统是封装出来的套壳程序;
Q:为什么要有外壳程序?
- 1、保护操作系统
- 2、方便用户操作,减少用户使用操作系统的成本;
Q:外壳程序是如何进行工作的?
- 在Linux 中外壳程序是命令行;在windows 中,外壳程序是图形化界面;在安卓上,外壳程序是图形化界面;外壳程序的核心作用是帮助我们进行命令行解释,将用户的需求、指令转递给操作系统,操作系统执行完了以后再将结果通过外壳程序传递给用户;因为外壳程序的存在,对于内核来说可以保护内核,另一方面,可以提高用户的使用体验;
此外,我们在Linux 中所使用的外壳程序严格意义上不叫作shell ,而是bash(在绝大多数的Linux 操作系统中);如下:
在我们登录时,bash 程序就已经跑起来了,给我们形成一个新的命令行让我们去进行输入;
Q: shell 与 bash 有什么区别?
- shell 是所有种类外壳程序的总称,而bash 是其中一种具体的外壳程序;
2、对于命令行:
云服务器登录Linux (eg.Ubuntu )会弹出命令行让你输入命令, 如下:
其中 ubuntu 为用户名, @VM-12-10-ubuntu 为主机名 , ~Test/Linux-git 为当前工作目录;
二、什么是操作系统
操作系统(Operating System,简称 OS) 是管理计算机硬件与软件资源的系统软件,同时也是计算机系统的内核与基石。
你可以把它想象成一个公司的总经理、一栋建筑的物业管理部门或者一个国家的政府。
-
没有操作系统的计算机就是一堆冰冷的、无法沟通的硬件(CPU、内存、硬盘等),我们普通用户无法直接使用。
-
有了操作系统,它就在我们用户和计算机硬件之间搭建了一座桥梁,负责所有复杂的底层沟通和管理工作,让我们能够轻松、高效、安全地使用计算机。
简单来说,操作系统是一款进行软硬件资源管理的软件;
Q:为什么要有操作系统?
- 操作系统做好软硬件的资源管理就可以给用户提供一个稳定、高效、安全的运行环境;
三、Linux 权限的概念
1、Linux 的文件类型
在Windows中区分文件类型,使用文件后缀名来区分的;而Linux 区分文件类型,依靠于文件属性列;
注:虽然Linux 不以文件后缀名来区分文件名,但是不代表用户不可以使用后缀;eg. gcc、g++ 等编译器在编译的时候也是需要看文件后缀名的,gcc、g++ 等关心的后缀与Linux 系统同不关心文件后缀并不冲突;
文件属性列,如下:
文件类型:
- d : 目录(文件夹)
- - :普通文件;eg. 源代码、库文件、文本文件、可执行文件、音视频、各种文档...
- l : 软连接(类似于 windows 中的快捷方式)
- b : 块设备文件(eg. 磁盘、硬盘、光盘... ; 支持随机访问,读取数据时以块为单位)
- p : 管道文件
- c : 字符设备文件(eg. 显示器、屏幕等;不支持随机读取,以字符为单位进行读取)
- s : 套接口文件
2、Linux 的用户
当代操作系统均是多用户操作,即一个操作系统允许多个人同时使用;
用户一般分为两类:
- 1、root 账户,Linux 管理员,只有一个;可以 Linux系统下做任何事情,不受限制
- 2、普通用户,可以有多个,普通用户的权限是受管控的,旨在特定目录下才允许做特定的操作
2.1 新增用户
在root 账号下:
//新增
adduser 你的用户名
//输入密码
passwd 你的密码
若想要删除此用户,在root 账号下执行:
userdel -r 所要删除的用户名
2.2 切换
CentOS中有root 账户 , Ubuntu 中没有;
2.2.1 普通用户 -> root
su root
//输入root的密码
2.2.2 root->普通账户
//zjx 为我的普通账号
su zjx
//输入账号zjx 的密码
需要注意的是,在不知道另外一个普通账号密码的前提之下,普通账号之间不能进行切换;另外,su 只是单纯地进行身份的切换,不会更改当前所在地工作目录;还可以使用 su - +账号 的形式来进行账号切换,不过 su - 会进行重新登录,如下:
//root-> 普通
su - zjx//普通 -> root
su - root
2.2 问题
Q1:如果我想做需要提高权限才能做的事的,该怎么办?
- 方法一:让自己变成root ,使用su root 或者 su - root 进行身份切换便可;
- 方法二:sudo + 指令, 指令提权功能,以root 身份运行该命令
//假设想要以root 的身份运行 ls 命令
sudo ls
//在CentOS中需要输入当前账号的密码
Q1: 既然普通用户仅需要输入密码就可以使用sudo 而拿到root 的权限,那么root 存在的意义是什么?
- 需要注意的是,默认新增的用户无法执行sudo , 新用户不受系统信任,而只有 root 才可以修改sudoers;
sudoers 的路径:/etc/sudoers
3、权限的理论理解
结合实际,权限 = 人 + 事物属性,eg.你想要在gitee 上看电影是不行的,因为gitee 并没有看电影这一功能 , 所以想要执行某一功能就要知道这个事物是否支持该功能;
而 人 = 角色 + 真实的你;eg. 张三是校长,学校的老师、同学尊重张三是在尊重张三“校长”这一身份……在这个世界上,人 = 扮演的社会角色 + 真实的自己,而权限的约束往往不是针对某一个具体的人,而是约束这个人所扮演的社会角色,eg. 老师、学生才可以进学校;
Linux 中一切皆文件,那么 文件权限 = 用户 + 文件权限属性;
Q:文件的属性有哪些?
- 文件的属性有 r、w、x ,即对应 读、写、可执行;
Linux 上的用户有很多,Linux 为了做权限管理,在Linux 系统中引入了三种角色:拥有者、所属组、other ;
Q:什么是所属组?为什么需要所属组?
- 在一些公司中会将开发人员分为两组,分别各自研发一款软件(赛马机制), 最后如软件的发布看这两组谁开发的软件更好;组内人员之间可以看到彼此的文件,但是两组之间不能相互查看;所属组的存在以支持定向让组内成员查看,并且在权限管理的过程中提供了更好的灵活性;
注:所属组可以一人一组也可以多人一组;
至于文件权限占了 9 byte, 3byte 为一组分别对应:拥有者、所属组、other 的权限,如下图:
表述文件test.c 的权限:(权限 = 角色 + 文件的权限属性)
test.c 的拥有者为 ubuntu 具有 读、写权限,所属组 ubuntu 具有读、写权限,其他人具有读权限;
Q:为什么文件属性中没有other?
- 只要不是拥有者、所属组就是other;
Q: root 、普通账户 与拥有者、所属组、other 的关系是什么?
- 拥有者、所属组、other 是一种角色身份,而root、普通用户是具体的人;角色身份由具体的人来扮演;
所以对于文件权限的操作(文件权限 = 人 + 文件权限属性) , 要么是对文件的权限属性做操作,要么就是修改人;
4、权限的操作实验
4.1 修改文件的权限属性:
方法一:符号模式 (Symbolic Mode)
chmod
功能:设置文件的访问权限
选项:-R 递归修改目录文件的权限
chmod [谁][操作符][权限] filename
谁 (Who):
u
:拥有者 ownerg
:所属组 groupo
:other 其他用户a
:所有人(all,即u+g+o
),是默认值如果省略
操作符 (Operator):
+
:添加权限-
:移除权限=
:精确设置权限(覆盖原有的)
权限 (Permissions):
r
:读w
:写x
:执行
即:chmod u/g/o[+/-]rwx filename
CentOS中如果有多人,中间用 , 分隔开(eg. 增加文件test,c u、g 的写属性):chmod u,g+w test.c
Ubuntu 中多人:chmod ug+w test.c
方法二:八进制模式 (Octal Mode)
chmod 八进制 filename
使用数字来代表权限。每个数字对应一组权限(u/g/o)
-
4
= 读 (r) 八进制4 = 二进制 100 -
2
= 写 (w) 八进制2 = 二进制 010 -
1
= 执行 (x) 八进制1 = 二进制 001
将所需权限的数字相加,就能得到该组的权限值
例如:
-
7 (4+2+1)
= 读 + 写 + 执行 (rwx) -
6 (4+2)
= 读 + 写 (rw-) -
5 (4+1)
= 读 + 执行 (r-x) -
0 (0)
= 无权限 (---)
用三个数字按顺序分别代表拥有者、所属组、other的权限
注:只有文件的拥有者才和root 才可以修改文件的权限属性;
操作如下:
//设置权限为 rwxr-xr--
//u: rwx = 4+2+1 = 7
//g: r-x = 4+0+1 = 5
//o: r-- = 4+0+0 = 4
chmod 754 test.sh//最常用的几个权限:
chmod 755 test.sh //rwxr-xr-x (常用于可执行程序或目录)
chmod 644 test.txt //rw-r--r-- (常用于普通文件)
chmod 600 .ssh/id_rsa //rw------- (常用于私密文件,只有自己能读写)//非常危险的操作,赋予所有用户所有权限,谨慎使用
chmod 777 test.sh //rwxrwxrwx
需要注意的是, root 是管理员,root 可以无视权限;
另外:
Q:为什么上面的test.c ubuntu 作为所属组明明有读权限,而却读不到呢?
- 在身份匹配的时候,先匹配拥有者再匹配所属组;若拥有者匹配上了,就以拥有者的权限来约束该用户访问文件,一旦权限不具备,不查看下一个角色;即,身份只能匹配一次;
Q:为什么只能匹配成功一次?
- 因为身份认证只需要一次;
我们可以验证一下:将拥有者的身份改为 zjx 的,所属组仍然为 ubuntu ,让ubuntu 获取文件中的内容:
Q:什么情况下会去掉自己的权限?
- 防止自己误操作该文件;
Q:x 什么意思,是否只要文件具备 x 权限就就可以执行?
尝试了一下,显然这是行不通的;这是因为可执行和能执行是两码事,一个可执行文件既要有可执行权限又要自己本身可以执行才能执行
一个可执行文件 = 可执行权限 + 本身可以执行
4.2 更改文件的拥有者和所属组
chown (chown
- change owner(改变拥有者))
- 功能:修改文件的拥有者
chown [选项] [新拥有者][:新所属组] 文件或目录
chgrp (chgrp
- change group (改变所属组))
- 功能:修改文件或目录的所属组
- 选项:-R 递归修改文件或目录的所属组
chgrp [选项] 新所属组 文件或目录
需要注意的是,拥有者修改文件的rwx 权限,修改的是自己文件的属性,所以没有什么限制,所以使用chmod 不需要管理者权限;但倘若要将文件给别人,是需要争得对方的允许,所以使用chown、chgrp 的时候,无论在CentOS 中还是在Ubuntu 中均需要带上sudo 或者转换为root 身份;
Q: 想要进入一个目录需要什么权限?
- x权限;
r (Read - 读):
- 对于文件:可以查看文件内容(如用
cat
,less
查看)- 对于目录:可以列出目录内的内容(如用
ls
列出)w (Write - 写):
- 对于文件:可以修改或覆盖文件内容
- 对于目录:可以在目录内修改、新建、删除文件或子目录(即使你不是该文件的所有者!)
x (eXecute - 执行):
- 对于文件:可以将文件作为程序或脚本执行
- 对于目录:可以进入该目录(如使用
cd
命令)
我们创建一个目录:
目录的默认权限中,拥有者、所属组、other 的权限均有x ,这是因为创建目录就是要进入的;
Q:上图中的dir、test.txt 均为新建文件,其默认权限分别为 rwxrwxr-x 以及 rw-rw-r-- ;Linux 中的文件(普通文件、目录文件)在新建的时候、缺省的权限为什么是我们现在所看到的样子?
普通文件:(起始权限):666
目录文件:(起始权限):777
而在普通文件、目录文件起始权限的基础上丢弃掉权限掩码就是我们新建文件、目录时所看见的默认权限的样子了,即最终权限= 起始权限 去掉 权限掩码 --> 起始权限&(~umask);
权限掩码:过滤掉权限掩码中出现的权限;
注:
- 1、在不同的系统中,权限掩码umask 的值可能不同;
- 2、权限的计算只能是 起始权限&(~umask) 而不能是 起始权限-umask ,因为减法会借位,而这3个八进制数字分别代表的是拥有者、所属组、other 的权限;
在Linux 系统中,可以手动设置 umask, 如下:
5、目录权限
r (Read - 读):
- 对于文件:可以查看文件内容(如用
cat
,less
查看)- 对于目录:可以列出目录内的内容(如用
ls
列出)w (Write - 写):
- 对于文件:可以修改或覆盖文件内容
- 对于目录:可以在目录内修改、新建、删除文件或子目录(即使你不是该文件的所有者!)
x (eXecute - 执行):
- 对于文件:可以将文件作为程序或脚本执行
- 对于目录:可以进入该目录(如使用
cd
命令)
操作如下:
一个文件是否能被删除,权限是依赖该文件所处目录是否具有w 权限;
另外,对于家目录:
普通用户的家目录只有自己和root 账户可以进入,other 没有进入的权限;
Q:如果想让多个普通账号之间进行文件或者数据的共享,该如何实现?
- 一般不能放在任何一个普通账号之下,因为普通账号之间不可以互相“串门”,故而应该在root 账号之下创建,公共目录下的普通人以other 的身份去访问;同时为了避免互删文件的情况,可能会想到的处理方法:将该共享文件所在目录的 w 权限去除掉,这样做是不可行的,虽然可以解决“互删”的问题,但是就不能在此目录下新建文件了;正确的处理方式:对该目录设置粘滞位;
当一个目录被设置为“粘滞位”(使用chmod+t ), 则该目录下的文件只能由:
- 1、超级管理员root 删除
- 2、该目录的拥有者删除
- 3、该文件的拥有者删除
总结
1、操作系统;
- 狭义上的Linux操作系统为Linux 内核;
- 广义上的Linux操作系统 为内核 + shell 外壳程序 + 系统中默认安装的软件;
2、操作系统是一个进行软硬件资源管理的软件;操作系统做好软硬件的资源管理就可以给用户提供一个稳定、高效、安全的运行环境;
3、Linux 中一切皆文件,而文件权限 = 用户 + 文件权限属性;
4、文件的属性有 r、w、x ,即对应 读、写、可执行;
5、修改文件权限:chmod 、chown 、chgrp