一、为什么要引入用户机制
在介绍“用户”之前,需要先对Linux的文件系统有所了解。文件系统是对文件进行组织和管理的模式,是一种数据的抽象。它能够将数据表现为一个个单独的个体,让用户逐一访问。
如果在同一台计算机上,Tom 创建了文件 a.txt,那么 Jerry 也可以访问该文件。但是出于安全性考虑,Tom的文件并不希望被Jerry访问到。于是就需要引入一种机制——用以识别文件的编号,这就是用户。
二、理解用户
用户包括:
用户名:供人使用,可以是任意字符
用户ID:供计算机使用,是唯一的识别标志。
通常操作系统会建立一个用户信息库,用以成对的存放用户名和用户ID,例如:
{roo,0} //root 即为用户名,0即是root 用户的ID
{centos,500}// centos 即为用户名,500即是centos 用户的ID
当用户登陆时,计算机就会在信息库中查找用户名所对应的用户ID,然后将资源按需分配给登陆的用户。
Linux是多用户多任务的系统,不同的用户可以创建不同的文件。在Linux中,用户可以分为以下两类:
1. 管理员用户:通常为 root 用户,ID 为 0
2. 普通用户,可以分为两类:
a)人为登陆的用户
b)只允许运行某些程序,但从来不允许登陆的用户,其目的在于实现某些管理功能,此类用户称为系统用户。
所有的非0用户都是普通用户,其中系统用户的ID号为 1-499,500 以上的所有ID号都是可登陆用户。
三、系统调用
系统调用也称为模式转换,它有两种模式:
当内核在cpu上运行,就叫做系统运行在内核模式下;
当用户的程序在cpu上运行,就叫做系统运行在用户模式下。
例如当我们执行以下命令:
# mkdir /tmp/a.txt
该命令虽然是用户发出的,但需要操作硬盘,即向硬盘写入数据,因此会发生系统调用,于是会从用户模式进入到内核模式。
四、文件的属主(owner)和属组(group)
文件的属主(owner)即为文件的拥有者;
文件的属组(group)即为文件所属的组。
这里我们需要理解组的概念。组可以看成一个容器,它一次性完成了权限设置,用来映射用户群和访问权限,也被称为角色(role),进入组的用户自动继承了组的权限。
例如,如果文件a.txt所属的组为mygroup,而mygroup对a.txt具有全部的访问权限,那么若用户jerry属于mygroup组,则Jerry自动获得了该文件a.txt的访问权限。
五、什么是进程
在window的操作系统中,我们可以通过Ctrl+Alt+Delete 组合键打开任务管理器查看进程(process);在Linux操作系统中,同样也有进程,可以使用以下命令来查看当前正在运行的进程:
# ps -aux | less
我们可以将进程和程序加以对比,来帮助我们理解进程。程序可以看做是存放在硬盘上的二进制码,是死的数据;而进程可以看成是正在执行过程中的程序。
进程有自己的生命周期,即从程序启动到运行结束;如果站在操作系统的角度看,进程实际上是资源分配的单位;而从用户的角度看,进程是用户的代理,用户通过进程完成对计算机的操作。
六、进程的类别
进程可以分为以下三类:
1. 守护进程(deamon):是后台进程,用来完成操作系统的基本任务,如运行GUI界面所需的进程;
2. 交互式进程(interactive):是用户进程,即用户手动发起的进程;
3. 实时进程(real time),此处不加赘述,后文将详细介绍该类进程。
七、进程的权限管理
进程和文件一样,也有属组和属主。判断某一进程是否有权限访问资源,取决于发起进程的用户是否有权限访问资源。
例如,当用户Tom试图运行命令:
# touch /tmp/b.txt
那么touch 命令发起的进程就属于Tom 用户。
进程的判断顺序通常是:①首先判断属主--->②然后判断属组