6.1、多用户概述
6.1.1、基本概念
用户:不同的用户具备不同的权限,每个用户在权限允许范围内完成不同的任务,Linux利用了这种权限的划分和管理,实现了多用户多任务的运行机制。
用户组:用户组是具有相同特征用户的逻辑集合。
Linux用户和用户组的:
1、一对一:一个用户可以存在一个组中,是组中的唯一成员;
2、一对多:一个用户可以存在多个用户组中,此用户具有多个组的共同权限
3、多对一:多个用户存在于一个组中,这些用户就具有和组相同的权限
4、多对多:多个用户存在于多个组中。
Linux的UID和GID(用户ID和组ID)
Linux系统中,每个用户有两种ID号,用户ID(UID),组ID(GID)
6.1.2、帐号的系统文件
1、/etc/passwd 文件:系统用户配置文件,储存了系统中所有的用户的基本信息,并且所有用户都可以对此文件进行读操作
vim /etc/passwd:以只读的方式打开passwd文件
退出:ZZ
用户名:密码:UID:GID:描述性信息:用户主目录:默认的shell
用户名:就是一串能代表用户身份的字符串
密码:“x”表示此用户设有密码,但不是真正的密码,真正的密码保存在/etc/shadow文件中
UID:每个用户都有唯一的一个UID,0~65535
0:超级用户
1~999:系统用户(伪用户)
1000~65535:普通用户
GID:表示用户的初始组的组ID
初始组:指用户登录时就拥有这个组的相关权限。每个用户的初识组只能有一个
附加组:指用户可以加入多个其他的用户组,并拥有这些组的共同权限
描述性信息:只是用于解释这个用户的意义而已
默认的Shell:Shell就是Linux的命令解释器,可以理解成用户登录后拥有的权限
2、/etc/shadow 文件(影子文件):用户储存Linux系统中用户的密码信息
/etc/shadow文件只有root用户拥有读权限,其他用户没有任何权限
sudo vim /etc/shadow
用户名:加密密码:密码最后一次修改时间:最小的修改时间间隔:密码有效期:密码有效期截至前的警告天数:密码过期后的宽限时间:账号失效时间:保留字段
加密密码:这里保存的是真正加密后的密码
密码最后一次修改时间:密码最后修改的时间与1970年1月1日相隔几天
date -d "1970-01-01 18326 days"//换算天数与日期
最小的修改时间间隔:最后一次修改密码日起,几天内不能修改密码,0表示随时可以修改
密码有效期:默认99999,亦可以认为是永久生效
密码有效期截至前的警告天数:提前几天警告
密码过期后的宽限时间:0:立即失效 -1:永不失效
账号失效时间:如果规定了此时间,无论密码是否失效,到期后,帐号都无法使用,以1970.1.1为基准
保留字段:目前还没有使用
3、/etc/group文件:用户组配置文件,所有的用户组的所有信息都在此文件中
组名:组密码:GID:该用户组中的用户列表
组名:描述组名称的一串字符串,不能重复
组密码:“x”表示有组密码,真正的加密后的组密码保存在/etc/gshadow中
GID:
该用户组中的用户列表:显示所有用户(附加用户)
4、/etc/gshadow文件:储存组用户的组密码信息
组名:加密密码:组管理员:组附加用户列表
6.2、帐号管理
6.2.1、用户账号管理
1、useradd命令:添加新的系统用户
useradd [选项] 用户名
创建用户账号的默认值可以通过 :useradd -D来查看
修改:
1、通过vim文本编辑器手动修改 /etc/default/useradd
2、通过命令修改:useradd 直接修改
2、passwd命令:修改用户密码
passwd [选项] 用户名 //root用户
选项:
- -S:查询用户密码的状态,只有root用户能使用
- -l:暂时锁定用户
- -u:解锁用户
3、chage命令:修改用户密码状态
chage [选项] 用户名
选项:
- -l:列出用户的详细密码信息
- -d 日期:修改最后一次修改密码的日期
4、userdel命令:删除用户
userdel [选项] 用户名
选项:
-r:删除用户并且删除用户家目录
6.2.2、组帐号管理
1、groupadd命令:添加用户组
groupadd [选项] 组名
2、groupdel命令:删除用户组
3、gpasswd命令:把用户添加进组或者从组中删除
gpasswd [选项] 组名
选项:
-a user:将user加入组中
-d user:将user从组中移除
-M user1…:讲多个用户加入组中
-A user1…:设置用户管理员
4、newgrp命令:切换用户的有效组
newgrp 组名
1、创建一个有家目录,和shell为bash的用户user2
sudo useradd -g group1 -G group2,group3 -m -s /bin/bash user2
2、给user2设置密码
passwd user2
3、切换到user2用户
su - user2
4、通过newgrp命令切换user2的有效组,并且创建文件
mkdir user1
newgrp group2
mkdir user2
newgrp group3
mkdir user3
ls -l
6.2.3、用户和组状态命令
1、usrmod命令:修改用户信息
2、groupmod命令:修改用户组
-g GID :修改组ID
-n 新组名: 修改组名:groupmod -n 新组名 旧组名
3、su命令:用户间切换
从普通用户切换到root用户,从root用户切换到普通用户,以及普通用户之间切换
su [选项] 用户名
选项:
- -:当前用户不仅切换为指定用户的身份,而且工作环境也切换了
- -p:切换用户身份,但是不切换工作环境
- -c:切换用户并且只执行一次命令,然后自动切换回来
4、id命令:查看用户的UID和GID
6.3、磁盘配额
6.3.1、磁盘配额概述
磁盘配额:Linux系统中用来限定特定的普通用户或者用户组在指定的分区上占用的磁盘空间或者文件个数。
1、磁盘配额限制普通用户和用户组,root用户不能做磁盘配额
2、磁盘配额只针对分区,不能针对目录
3、可以限制用户所占用的磁盘容量大小(block),还可以限制占用的文件数(inode)
安装quota命令:
sudo apt-get install quota
磁盘配额中的常见概念:
用户配额和组配额
磁盘容量限制和文件个数限制
软限制和硬限制
宽限时间
6.3.2、配置磁盘配额
1、设置挂载参数userquota和grpquota
创建一块虚拟硬盘:
关闭虚拟机->设置->储存->控制器SATA->添加虚拟硬盘->创建新的虚拟硬盘->VDI->固定大小->位置、名字、大小->创建
对sdb硬盘进行分区:
sudo fdisk /dev/sdb
格式化分区:
sudo mkfs -t ext3 -c /dev/sdb1
挂载分区:
sudo mount /dev/sdb1 /home/test
设置挂载参数
sudo mount -o remount,usrquota,grpquota /home/test
mount |grep sdb1
2、扫描文件系统并且建立Quota记录文件:quotacheck命令
quotacheck [-avugfM] 文件系统
一般只需要使用 quotacheck -avug
6.3.3、管理磁盘配额
1、开启磁盘配额限制(quotaon命令)
quotaon [-avug]
quotaon [-uvg] 文件系统名称
2、关闭磁盘配额限制(quotaoff命令)
命令格式与quotaon相同
3、修改用户(群组)的磁盘配额(edquota命令)
edquota [-u 用户名] [-g 群组名]
edquota -t
edquota -p 源用户名 -u 新用户名
4、查看配额(quota)
sudo quota -uvs linux
6.4、设置文件和目录的操作权限
6.4.1、操作权限简介
查看文件或者目录的权限信息
ls -l
rwx(所有者权限) r-x (所属组权限)r-x(其他人权限)
rwx权限对文件的作用
r:表示可读取此文件的实际内容
w:表示文件可以被编辑
x:表示该文件具备被系统执行的权限
rwx权限对目录的作用
r:表示读取目录结构列表的权限:ls
w:对于目录,w权限是最高权限
x:表示用户可以进入目录:cd
6.4.2、更改文件和目录的操作权限
chmod命令通过数字修改文件权限
r --> 4
w --> 2
x --> 1
例如:rwx(所有者权限) r-x (所属组权限)r-x(其他人权限)
所有者:4+2+1 = 7
所属组:4+1 = 5
其他人:4+1 = 5
对应的权限值 755
chmod [-R] 权限值 文件\目录名
chmod命令通过字母修改文件权限
chmod [u/g/o/a] [=(设定)/+(加入)/-(删除)] [r/w/x] 文件名
6.4.3、更改文件或目录的属主和所属组
chown [-R] 所有者:所属组 文件或目录
6.4.4、设置文件或目录的权限掩码
默认情况下,创建一个文件的权限为“rw-r–r-- 目录:rwx r-x r-xr-x
umask:root用户默认0022,— -w- -w-普通用户默认0002 -------w
文件或者目录的初始权限 = 文件或目录的最大默认权限 - umask权限掩码
- 对于文件而言,最大默认权限666 rw rw rw
- 对于目录而已,最大默认权限777 rwx rwx rwx
umask修改默认权限
umask 权限掩码
6.5、多任务概述
6.5.1、基本概念
1、任务
通常一个任务就是程序的一次运行。
2、程序
程序是使用计算机语言编写的可以实现特定目标或者解决特定问题的代码集合
储存在磁盘上,包括指令和数据的实体
3、进程
就是运行中的程序
一个运行的程序,可能有多个进程,每个进程在过程中执行特定的任务
是程序执行和管理资源的最小单位
4、进程的分类
-
交互进程:由shell启动的进程
-
批处理进程:与终端无关,是一种进程序列,
-
守护进程:也叫做监控进程,总是活跃的
5、查看进程
-
简单形式
ps
以简略的方式显示当前用户有控制终端的进程信息
-
BSD形式
ps axu
-
SVR4形式
ps -efl
6、父进程、子进程、孤儿进程、僵尸进程
父进程启动子进程后,子进程可以与父进程同时运行
子进程先于父进程结束,子进程向父进程发送信号,父进程回收子进程的相关资源
父进程先于子进程结束,子进程成为了孤儿进程,同时init进程收养,变成了init进程的子进程
子进程先于父进程结束,但是父进程没有回收子进程的资源,子进程就变成了僵尸进程
7、进程标识符(进程ID)
每个进程都有一个非负整数表示的唯一标识,PID
任何时候PID都是唯一的,但是可以重用,当一个进程退出的时候,其进程ID就可以被其它进程使用
延时重用
6.5.2、进程的启动方式
Linux手动启动进程
前台启动进程
后台启动进程:其实就是在命令的结尾处添加一个 & 符号
Linux调度启动进程
实现调度启动的方式:at、crontab命令
6.6、进程的管理
6.6.1、实时监听进程运行的状态——top命令
top [选项]
-d 秒数:间隔几秒更新
-n 次数:
-p 进程PID:仅查看指定ID的进程
-u 用户名:查看指定用户的进程
6.6.2、调整进程优先级——nice命令
修改NI值:
1、NI范围-20~19
2、普通用户调整的NI范围是0~19,而且只能调整自己进程
3、普通用户只能调高NI值,不能降低
4、只有root用户才能设定NI值为负数,并且可以调整任何一个用户的进程
nice:可以给要启动的进程赋予NI值,但是不能修改已启动的进程的NI值
renice命令:可以修改正在运行的进程的NI值
6.6.3、终止进程
kill [信号] PID
信号名称 | 信号编号 | 含义 |
---|---|---|
EXIT | 0 | 程序退出时收到该信号 |
HUP | 1 | 让某些进程还没终止的情况下重新初始化 |
INT | 2 | 表示结束进程,但不是强制性的 |
QUIT | 3 | 退出 |
KILL | 9 | 强制结束进程 |
SEGV | 11 | 段错误 |
TERM | 15 | 正常结束进程,是kill命令的默认信号 |
kill 2288//默认信号15
kill -9 2288//强制结束进程