目录

Linux总结

Linux总结

1 用户与用户组管理

1.1 用户与用户组

//linux用户和用户组
Linux系统是一个多用户多任务的分时操作系统
使用系统资源的用户需要账号进入系统
账号是用户在系统上的标识系统根据该标识分配不同的权限和资源
一个账号包含用户和用户组
//用户分类
超级管理员 UID为0 拥有系统一切权限 一般为root用户
系统用户(伪用户) UID 1-499  方便系统管理用来运行系统和服务的用户
普通用户 UID从500开始 可以登入系统的用户 拥有系统部分权限
//用户组分类
初始组 用户刚登陆系统所在的组用户必须有一个且只能有一个
附加组 除了初始组外加入的其他组可以有0或多个

1.2 Linux 系统添加用户 useradd

`命令格式 useradd [选项] 用户名`
选项i
`-u 用户ID` 指定用户id,一般指定UID要大于500,不指定系统会自动分配
`-g 初始组名` 指定用户初始组 尽量不要指定 系统会创建和新增用户名相同的组为该用户的初始组
`-G 附加组名` 指定用户所属附加组 多个时用逗号隔开
`-c 说明文字` 备注文字  文字会保存到“/etc/passwd”文件第五列
`-d 家目录`指定用户家目录
`-s shell` 指定用户登陆后使用的shell程序

vim /etc/passwd 查看添加的用户
vim /etc/shadow 查看用户密码

1.3 Linux修改用户密码 passwd

`命令格式 passwd [选项] 用户名`
选项
`-l 或 --lock` 临时锁住密码使密码失效
`-u 或 --unlock` 解锁
`-d 或 --delete` 删除现有用户的密码
`-n 天数`两次密码修改时间间隔 /etc/shadow第四列
`-x 天数`密码有效期/etc/shadow第五列
`-w 天数`密码到期前的警告天数/etc/shadow第六列
`-i 天数`密码到期后的宽限天数/etc/shadow第七列
`-S 或 --status` 显示用户密码状态
`--stdin` 从标准输入读取令牌 主要用在通过脚本批量添加用户,不需要交互的场景

`用户名` 用户名省略 默认修改当前登陆用户的密码 一般修改自己的密码直接执行passwd就可以
只有管理员才有修改用户密码权限 普通用户只能改自己的密码

1.4 Linux 修改系统用户信息 usermod

`命令格式 usermod [选项] 用户名`
选项
`-u` 修改用户ID
`-d` 修改用户家目录
`-c` 修改用户说明
`-g` 修改用户初始组
`-G` 修改用户附加组
`-s` 修改用户登入后所使用的shell程序
`-e` 修改账号失效日期 格式“YYYY-MM—DD”
`-l` 修改用户名
`-L` 锁定账号   与 `passwd -l 用户名`作用一样
`-u` 解锁账号

1.5 Linux 删除用户 userdel

`命令格式 userdel [选项] 用户名`
选项
`-r` 同时删除用户家目录和用户邮件

1.6 Linux查看用户UID和GID id

`命令格式 id [选项] 用户名`
选项
一般不使用任何选项
`-g` 仅显示该用户当前有效的用户组ID
`-G` 显示该用户所有用户组ID
`-u` 仅显示该用户ID

1.7 Linux添加用户组 groupadd

`命令格式 groupadd [选项] 组名`
选项
`-g` 指定组ID
`-r` 创建系统用户组 系统用户组的组ID小于1000 与/etc/login.defs内的 GID_MIN有关

1.8 Linux修改用户组 groupmod

`命令格式 groupmod [选项] 组名`
选项
`-g` 修改组ID
`-n` 修改组名

1.9 Linux删除用户组 groupdel

`命令格式 groupdel  组名`
注 如果用户组是某个用户的初始组 必须先删除这个用户或修改用户的GID后才能删除该用户组

1.10 显示当前登陆用户名 whoami

1.11 显示当前已登陆用户信息 w /who

这两个指令查询的信息都来源于日志文件 /etc/run/utmp

`命令格式 w [选项] 用户名`
选项
`-h 不打印头信息`
`-s 使用短输出格式`
`命令格式 who [选项] 查询文件`
选项
`-H 显示各栏位的标题信息列`
`-q 只显示登入系统的账号名称和总人数`
`-w 显示用户的信息状态栏`
`-u 显示闲置时间 用户一分钟没有进行任何动作 标志“。”号 超过24小时标志"old"`

1.12 用户身份切换 su /sudo

普通用户登陆系统,需要执行某些操作权限不够时,可以切换到有权限的用户身份去执行

su可以进行任何身份的切换,root用户切换其他用户不需要密码 其他情况切换都需要输入对应的登陆密码

`命令格式 su [选项] 用户名`
选项
`-或 -l 或 --login` 切换身份时同时切换环境变量,如果不加该选项 用户切换后环境变量还是旧的
`-c` 只执行一次指令不切换身份

注 不加用户名默认切换root

使用su指令需要知道root密码,这样容易导致密码流出很不安全,使用sudo来切换身份只需要知道用户自己的密码就可以,不是所有用户都能使用sudo指令,前提需要管理员给用户开发sudo权限。

`命令格式 sudo [-b] [-u 新使用者账号] 要执行的命令`
选项
`-b` 将后续的命令放到背景中让系统自行运行
`-u` 后面可以接切换的用户名 若无此项代表切换身份为root
`-l` 用法 sudo -l 显示sudo可以执行哪些命令

2 权限管理

2.1 Linux权限介绍

Linux是多用户的操作系统,允许多个用户同时登陆工作,Linux权限是操作系统用来限制不同用户对资源的访问机制。

基本权限 给文件和目录的所属者(u)、所属组(g)、其他用户(o)、分配的读®、写(w)、执行(x)权限

ACL权限 可以针对单一用户或用户组设定权限

特松权限 除了读写执行权限的另一种特殊权限(s/t,SUID/SGID/SBIT)

2.2 基本权限

2.2.1 权限位介绍(11位)

11位权限位的含义图 例 -rw-r–r–.

https://i-blog.csdnimg.cn/direct/03fff2a9692c4d93b69cfad1ffbe4cc9.png#pic_center

//第1位 代表文件类型,Linux不使用扩展名表示文件类型,使用权限位第一位表示文件类型。常见的文件类型
`-` 普通文件
`d` 目录文件(Linux中一切皆文件 目录也是文件) 
`l` 软链接文件
`b` 块设备文件 这是一种特殊设备文件,存储设备都是这种文件 如分区文件/dev/sdal
`c` 字符设备文件, 特殊设备文件,输入设备一般都是这种文件如鼠标、键盘
`p` 管道符文件 这是一种少见的特殊设备文件
 
//第2-4位  代表文件所属者权限
`r` 是读取权限
`w` 是写权限
`x` 是执行权限
//第5-7位  代表文件所属组权限 同样是rwx
//第8-10位 代表文件其他人权限 同样是rwx
//第11位 
`.` 如果是点 代表受SELinux安全上下文保护
`+` 如果是加号表示设置了ACL权限

2.2.2 权限含义解释

权限对文件的作用

读® 有读权限 可以执行cat more less head tail指令查看文件

写(w) 有写权限 可以执行vim echo等修改文件数据命令 注意对文件有写权限,是不能删除文件本身的,只能修改文件中的数据,想要删除文件 需要对文件的上级目录拥有写权限

执行(x) 有执行权限,代表文件可以允许

权限对目录的作用

读® 有读权限 可以执行ls指令查看目录下的内容 有哪些文件和子目录

写(w) 有写权限 可以修改目录下的数据,在目录中新建、删除、复制、剪切、粘贴子文件或子目录 touch rm cp mv等指令

执行(x) 目录是不能运行的。有执行权限 代表可以进入目录 可以执行cd指令进入目录

2.2.3 权限设定

chomd 命令用来修改文件或目录的权限

chomd [选项] 权限模式 文件或目录
选项
`-R` 递归设置权限
`--reference=参考文件或目录` 使用参考文件或目录的权限来设置目标文件或目录的权限

权限模式分为符合组合和八进制数组合
//符合格式 [ugoa] [[+-=][permission]] [用户身份] [[赋予方式][权限]]
用户身份
`u` 所有者
`g` 所属组
`o` 其他人
`a`  全部身份
赋予方式
`+` 加入权限
`-` 减去权限
`=` 设置权限
权限
`r``w``x` 执行
//八进制数组合格式[0-7][0-7][0-7]三位数字组成每一位数字都是权限之和 第一位是所属者 第二位所属组 第三位其他人
`r` 读权限对应的数字 `4`
`w` 写权限对应的数字 `2`
`x` 执行权限对应的数字 `1`

https://i-blog.csdnimg.cn/direct/6a8b2f43970f45e0bcb5c341d5185a17.png#pic_center

chown命令用来修改文件和目录的所有者和所属组

chown [选项] 所有者[:所属组]文件或目录
选项
`-R` 递归设置权限
`--reference=参考文件或目录`
省略[:所属组] 仅改变文件所属者

chgrp命令用来修改文件和目录的所属组

chgrp [选项] 用户组 文件或目录
选项
`-R` 递归设置权限
`--reference=参考文件或目录` 

2.2.4 默认权限与umask

1权限掩码 umask

当创建一个新文件和目录是会默认有一些权限的,新建的文件权限一般是“-rw-r–r–”,新建的目录权限一般是"drwxr-x-r-x".

文件默认最大权限 新建文件的默认最大权限是 666(-rw-rw-rw-) ,没有执行权限,需要用户手动赋予

目录默认最大权限 新建目录的默认最大权限是 777(drwxrwxrwx)

权限掩码值所表示的权限就是新建文件和目录要从默认最大权限里要排除的权限,查询掩码值有两种方式,直接执行umask以数字方式展示,可以看到‘0022“,执行umask -S 以符号展示,其中缺少的权限对应的权限值就是掩码值

2默认权限计算方式

`新建文件` 文件的默认最大权限是-rw-rw-rw-,通过计算
(-rw-rw-rw-)- (-----w--w-) = (-rw-r--r--)
 新建文件默认权限是 -rw-r--r-- 即644
`新建目录` 目录的默认最大权限是drwxrwxrwx,通过计算
(drwxrwxrwx)-(d----w--w-) = drwxr-xr-x
新建目录默认权限是 drwxr-xr-x 即655

3修改权限掩码 umask 命令

umask命令是用来显示或设置创建文件、目录的权限掩码的

umask [选项] [权限模式]
选项
`-S`以符号组合的方式输出权限掩码,不使用该选项时以八进制数的形式输出
权限模式 与chmod相同
注 使用umask设置的权限掩码只有临时有效,如果需要永久有效,需要修改/etc/bashrc文件里的内容,不建议修改

2.3 ACL权限

ACL(Access Control LIst) 主要目的是在提供传统的owner、group、others 的read、write、execute权限之外的细部权限设定,ACL可以针对单一使用者,单一文件或目录来进行r、w、x的权限规范

**命令 **

getfacl 查看ACL权限
语法 `getfacl [文件名]`
setfacl 添加、删除ACL权限
语法 `setfacl [选项] [文件名]`
选项
`-m` 设定ACL权限 多条逗号隔开
`-x` 删除ACL权限 多条逗号隔开 
`-b` 删除所有ACL权限
`-d` 设定默认ACL权限
`-k` 删除默认ACL权限
`-R` 递归设定ACL权限

ACL规则
`[d:]u:[用户名]:[权限(rwx)]` 指定用户的权限
`[d:]g:[组名]:[权限(rwx)]` 指定用户组的权限
 [d:] 表示设定为默认权限

3 磁盘管理

3.1 磁盘分类

硬件设备在Linux中是以文件形式进行定义和管理.而文件需要命名规范,udev设备管理器在/dev/目录下为所有的设备定义了内核设备的名称

1 IDE磁盘 价格低廉 兼容性强 性价比高 数据传输慢 不支持热插拔

2 SCSI磁盘 传输速率高 读写性能好 运行稳定 可连接多个设备 支持热插拔

3 SATA磁盘 结构简单 支持热插拔

4 USB

硬件设备                  文件名称
IDE设备            /dev/hd/[a-d]
SCSI/SATA?U 设备   /dev/sd/[a-p]
软驱               /dev/fd/[0-1]
打印机             /dev/lp/[0-15]
光驱              /dev/cdrom
鼠标              /dev/mouse

3.2 **查看磁盘命令 **df/du

df命令 检查文件系统的磁盘空间占用情况

`df [选项] [目录或文件名]`
选项
`-a` 列出所有的文件系统
`-k` 以kBytes的容量显示
`-m` 以MBytes的容量显示
`-h` 容易阅读的GBytes,MBytes,KBytes等格式自行显示
`-H` M=1000K取代M=1024k的进位方式 
`-T` 显示文件系统类型
`-i` 不用硬盘容量 而以inode的数量来显示

du命令查看一个或多个文件占用了多大的硬盘空间

`du [选项] 文件或目录`
选项
`-h` 可读的方式显示单位 (k,M,G)
`-s` 仅显示后边参数的总数

3.3 添加磁盘

3.4 磁盘分区 lsblk/fdisk

查看分区挂载情况 lsblk -f

fdisk 磁盘分区命令 添加 删除 转换

`fdisk 选项 装置名称`
选项
m menu显示命令列表
n new新增分区
p 显示磁盘分区
d 删除分区
w 写入并退出

操作分区步骤

1 fdisk /dev/sdb 开始分区 (find / -name sdb 根据名字查一下分区)

2 输入m 进入目录列表

3 输入n 新增分区

4 输出p 开始分区 后面按回车

5 最后输入 w 保存退出

6 lsblk -f 查看是否成功

3.5 格式化磁盘 mkfs

磁盘分割完毕后需要进行文件系统的格式化,使 mkfs 命令

`mkfs [-t 文件系统格式] 装置文件名`
-t 可以接文件系统格式 例如 ext3,ext2,vfat等(系统有支持才会生效)

操作步骤
mkfs -t ext4 /dev/sdb1 格式化指定分区
lsblk -f 查看是否成功

3.6 磁盘的挂载

挂载 **mount **

卸载 umount

`mount 设备名称 挂载目录`
`umount 设备名称 卸载目录`
卸载参数
`-f` 强制卸除 可用在类似网络文件系统(NFS)无法读取到的情况下
`-n` 不升级/etc/mtab的情况下卸除

操作步骤

1 创建目录 mkdir -p /home/newdisk

2 mount /dev/sdb1 /home/newdisk 建立设备分区和系统目录的映射关系

3 lsblk -f 查看是否挂载成功

4 进程管理

4.1Linux进程启动方式有几种方式

前台启动进程

后台启动进程

4.2 查看正在运行的进程 ps

ps命令是最常用的监控进程的命令

查看系统中所有的进程
`ps aux` 使用BS操作系统格式
`ps -le` Linux标准命令格式
选项
`a` 显示一个终端的所有进程
`u` 显示进程的归属用户及内存的使用情况
`x` 显示没有控制终端的进程
`-l` 长格式显示更加详细的信息
`-e` 显示所有进程

4.3 实时监听正在运行进程 top

ps命令一次性显示当前系统中进程状态,但是缺乏时效性

top命令可以动态的持续监听进程地运行状态,改命令还提供了一个交互界面 用户根据需要 人性化地制定自己地输出 进而更清楚了解进程地运行状态

`top 选项`
选项
`-d`制定每隔几秒更新 不写 默认3秒
`-b` 使用批处理模式输出 一般和n选项何用 用于把top命令重定向到文件中
`-n` 指定top命令的执行次数
`-p 进程PID` 仅查看指定ID的进程
`-s` 使top命令在安全模式中运行 避免在交互模式中出现错误
`-u` 用户名 只监听某个用户的进程


在top命令的显示窗口中 可以按键进行交互操作
`?或h` 显示交互模式的帮助
`P` 按照CPU的使用率排序 默认此选项
`M` 按照内存的使用率排序
`N` 按照PID排序
`T` 按照CPU的累积运算时间排序
`k` 按照PID给予某个进程一个信号
`r` 按照PID给某个进程重设优先级值
`q` 退出

如何判断服务器的健康状态

如果1分钟 5分钟 15分钟的平均负载高于1 证明系统压力比较大 如果CPU的使用率过高或空闲率过低,则证明系统压力较大。如果物理内存的空闲内存过小,则也证明系统压力较大

缓存 在读取硬盘中的数据时,把最常用的数据保存在内存的缓存区中 再次读取该数据时,就不去硬盘读取了 而在缓存中读取

缓冲 在向硬盘写入数据时 先把数据放入缓冲区 然后在一起向硬盘写入 把分散的写操作集中起来 减少磁盘碎片和硬盘的反复,提高系统性能

4.4 Linux查看进程树 pstree

pstree以树形式结构显示程序与进程之间的关系

需要yum -y install psmisc 安装
`pstree 选项 PID或用户名`
选项
`-a` 显示启动每个进程对应的完整指令,包括启动进程的路径 参数等
`-c` 不使用精简法显示进程信息(显示的进程中包含子进程 父进程)
`-n` 根据进程PID来排序输出 默认程序名排序
`-p` 显示进程的PID
`-u` 显示进程对应的用户名称

4.5 Linux列车进程调用或打开文件信息 lsof

通过ps命令可以查询到系统中所有的进程,通过lsof可以知道进程到底在调用哪些文件

lsof 根据文件找到对应的进程信息,也可以根据进行信息找到进程打开的文件

`lsof 选项`
选项
`-c` 只列出以字符串开头的进程打开的文件
`+d目录名` 列出某个目录中所有被进程调用的文件
`+D目录名` 同上 但会搜索目录下的所有目录 时间相对较长
`-u用户名` 只列出某个用户的进程打开的文件
`-p pid` 列出某个PID进程打开的文件

4.6 Linux终止进程 kill

`kill [信号] PID`
信号
`0` 程序退出时收到该信息
`1` 挂掉电话线或终端连接的挂起信息,这个信息也会造成某些进程在没有终止的情况下重新初始化
`2` 表示结束进程。但不是强制性的
`3` 退出
`9` 强制结束进程
`11` 段错误
`15` 正常结束进程 是kill的默认信号
`19` 暂停进程

4.7 Linux安装终端踢出当前登陆用户 pkill

通过进程名杀死一类进程
`pkill [信号] 进程名`
信号同上
按照终端号来踢出用户登陆
`pkill [-t 终端号] 进程名`

4.8 Linux将后台命令脱离终端运行 nohup

nohup 让后台工作在离开操作终端时 也能够正确地在后台执行

`nohup [命令] &`