简介

linux操作系统的基本概念

操作系统的核心——内核

本文所说的操作系统是指管理和分配计算机资源的核心层软件。

内核的作用

内核态和用户态

在用户态运行时,CPU只能访问被标记为用户空间的内存。在内核态运行时,CPU既能访问用户空间内存,也能访问内核空间内存。

只有处于内核态时,才能执行某些特定操作,例如:执行宕机指令关闭系统,访问内存管理硬件,以及设备I/O操作的初始化。通过这一设计,确保用户进程既不能访问内核指令和数据结构,也无法执行不利于系统运行的操作。

shell

shell读取用户输入的命令,执行相应程序响应命令。也称之为命令解释器。

用户和组

系统的每个用户都拥有唯一的登录名和与之对应的整数型用户ID。系统密码文件/etc/passwd为每个用户都定义有一行记录,记录信息包括:

用户保存在 /etc/passwd 文件中

用户密码保存在 /etc/shadow 文件中

群组保存在 /etc/group 文件中

冷知识:群组密码保存在 /etc/gshadow 文件中

每一个用户都至少属于一个群组,以用户名命名的群组。

用户一开始登录只拥有初始群组的权限,passwd 文件中的第三项就是初始群组(gid),想要获得其他群组权限就要用newgrp命令获取。

#创建用户
useradd [用户名]
#良好的创建用户办法
useradd -r -m -s /bin/bash [用户名]
#删除用户,但删不干净
userdel [用户名]
#删除用户,删的很干净
userdel -r [用户名]
#修改用户的初始群组(gid)
usermod -g [组名] [用户名]
#改变用户有效群组
newgrp [组名]
#查看当前用户所在组
groups
#添加一个组
groupadd [组名]
#删除一个组
groupdel [组名]
#将用户添加到组中
gpasswd -aG [用户名] [组名]
#将用户从组中删除
gpasswd -d [用户名] [组名]
#更改文件所属组
chgrp [组名] [文件名]
#更改文件所有者
chown [用户名] [文件名]
#更改文件所有者,包括文件内的文件
chown -R [用户名] [文件名]
#更改文件权限
chmod [权限] [文件]

文件的所有权和权限

系统把用户分为三类,文件的属主、文件组ID相匹配的属组成员用户级其他用户。可为以上三种用户设置三种权限。

读权限:允许查看文件内容。

写权限:允许修改文件内容。

执行权限:允许执行文件。

也可以针对目录进行权限设置,意义稍有不同。

进程

进程内存布局:

创建进程和执行程序

进程可以使用系统调用fork来创建一个新进程。调用fork的进程称为父进程,新创建的进程称为子进程。exce函数族与进程相关。

init进程

系统引导时,内核会创建一个名为init的进程,即所有进程之父,系统所有进程都是由init进程直接或间接创建的。init进程由超级用户权限运行,且不可被杀死(包括超级用户)。只有关闭系统才能结束进程。

守护进程

守护进程具有特殊用途,系统创建和处理此类进程的方式与其他进程相同,但以下特征是其所独有的:

环境列表

每个进程都会维护一组环境变量,fork创建的新进程会继承父进程的环境变量。在shell中,可使用export命令创建环境变量。

环境变量用途多样。shell定义并使用了一系列变量,HOME(明确定义了用户登录目录的路径名)、变量PATH(指明了用户输入命令后,shell查找与之相应程序时所搜索的目录列表)。

内存映射

调用系统函数mmap( )的进程,会在其虚拟地址空间中创建一个新的内存映射。

映射分为两类。

映射共享

两种放式:两个进程都针对某一文件的相同部分加以映射或由fork创建的子进程自父进程处继承映射。

当两个进程共享相同页面时,进程之一对页面内容改动是否为其他进程所见取决于创建映射时所传入的标志参数,若为私有则修改对进程不可见且修改内容不会落实到文件,若为共享,则修改内容对其他进程可见,且修改会落实到文件。

❤️ 转载文章请注明出处,谢谢!❤️