项目技术操作文档
项目名称:
存储管理、进程管理
项目需求:
1、在企业服务器上安装新硬盘,对磁盘进行分区、格式化、挂载处理
2、根据企业服务器数据业务的不同,采用不同的raid技术来保证数据的读写速度、数据安全
3、在企业的存储服务器上采用LVM逻辑卷技术来实现容量的动态调整
4、在服务器的运维工作中随机对系统进程进行分析和管理
项目测试:
原理概述:存储管理是系统中必不可少的技术,Linux系统中支持多种存储管理技术。在企业服务器中需要根据业务的不同来分别使用分区、raid、LVM逻辑卷等技术。
测试环境:Linux系统、ssh远程管理
项目实施:
操作指南:
磁盘分区管理
需求:服务器上装了一块新硬盘,需要能正常往硬盘上写入数据。
新硬盘的相关技术处理:
1、分区。对硬盘上的数据进行分类管理。类似于windows中的c、d、e盘。
2、格式化。在硬盘的分区上创建文件分配表。也称为创建文件系统。
3、挂载分区。将硬盘分区中的文件读到一个文件夹中。
项目准备和实施:
1、准备:将Linux虚拟机用init 0正常关机,然后添加4块5G的硬盘。然后创建快照“4块硬盘”。
3、启动Linux虚拟机,对硬盘分区进行管理。
查看硬盘的型号:smartctl -a /dev/sda
查硬盘等块设备:lsblk 说明:lsblk是list block的缩写
硬盘分区设备文件的命名规则:
例:设备名sda1中代号的意思。
s是表示硬盘接口是SCSI(小型计算机系统接口)。
d表示disk磁盘。
a表示主板上第1个接口上的第1块硬盘。
1表示第1个分区
查所有的硬盘分区表:fdisk -l | grep sd
说明: -l 是list的缩写,显示分区表信息
创建新分区
命令:fdisk、parted、cfdisk
需求:对sdb硬盘创建2个主分区,一个2GB,另一个使用所有剩余空间。
设置分区表类型为msdos
创建第1个主分区,容量是2GB
创建第2个主分区,使用所有剩余空间
查看sdb硬盘的分区信息 parted -s /dev/sdb mklabel msdos
parted -s /dev/sdb mkpart primary 1 2G
parted -s /dev/sdb mkpart primary ‘2G -1‘
fdisk -l |grep sdb
parted命令格式:parted [选项] 硬盘设备 动作(即parted的内部命令)
-s 以脚本方式执行parted命令,不提示用户进行确认。
mklabel 类型 设置硬盘分区表类型。常见的类型有msdos(即MBR)、gpt等。
mkpart primary 起始容量 截止容量 创建主分区。默认容量单位是M,可用单位有K、M、G、T、P、E
mkpart extend 起始容量 截止容量 创建扩展分区。默认容量单位是M,可用单位有K、M、G、T、P、E
mkpart logical 起始容量 截止容量 创建逻辑分区。默认容量单位是M,可用单位有K、M、G、T、P、E
p 即print,显示此硬盘的分区表。例:parted -s /dev/sdb p
rm 数字 删除指定的分区。例:parted -s /dev/sdb rm 1
说明:msdos(也称MBR分区表)分区表最多只能分4个主分区,只能管理2TB以内的硬盘。
GPT分区表可以创建多达128个主分区,可以管理2TB以上的硬盘。
注:cfdisk、fdisk命令创建分区的方法后面讲。
4、格式化分区
命令:mkfs、mkfs.ext4、mkfs.xfs
命令格式:mkfs [选项] 分区设备
选项:-t 指定文件系统类型,常见的类型有ext、ext3、ext4、vfat。
文件系统:组织和管理文件的一套系统方法。
需求:对sdb硬盘的sdb1、sdb2分区格式化。
mkfs -t ext4 /dev/sdb1
mkfs.ext4 /dev/sdb2
5、手动挂载
命令格式:mount [选项] 设备 挂载点
选项: -v 显示过程,-a 挂载/etc/fstab文件中的所有设备,-o 指定挂载选项,
-t 指定文件系统类型,如ext4、iso9660(光盘格式)、vfat、xfs等
功能:将硬盘分区读到一个目录中。挂载后,用户此操作目录就等同于操作分区中的数据。
需求:将sdb1、sdb2分区分别挂载到/b1、/b2目录中。实施方法如下:
创建2个目录
查看目录中的文件列表
挂载sdb1分区到/b1目录中,并显示过程
挂载sdb2分区到/b2目录中,并显示过程
查看已挂载的设备
查看目录中的文件列表 mkdir -pv /b1 /b2
ls /b1 /b2
mount -v /dev/sdb1 /b1
mount -v /dev/sdb2 /b2
mount
ls /b1 /b2 会发现目录中有Lost+found这个目录
说明:如果挂载错了,可以用umount 设备名(或挂载点)来进行卸载(类似于windows中的U盘弹出操作)。
例如:卸载/dev/sdb1分区:umount /dev/sdb1
卸载/b2目录中的分区:umount /b2
6、测试数据的写入
在/b1目录中创建3个文件
复制/etc目录中以host开头的所有文件到/b2目录中
查看/b1、/b2目录的文件列表 touch /b1/{a,b,c}
cp -v /etc/host* /b2/
ls /b1 /b2
7、配置sdb1、sdb2自动挂载设置
说明:/etc/fstab是自动挂载的配置文件。fstab是file system table文件系统表的缩写。
查看硬盘分区的UUID唯一ID号:blkid 说明:blkid是block id块id的缩写。
编辑fstab自动挂载配置文件 vi /etc/fstab
sdb1的自动挂载设置
sdb2的自动挂载设置 /dev/sdb1 /b1 ext4 defaults 0 0
/dev/sdb2 /b2 ext4 defaults 0 0
fstab格式说明 分区设备 挂载点 文件系统类型 挂载选项 是否fsck扫描 是否dump备份
卸载sdb1、sdb2分区
测试自动挂载 umount /dev/sdb1 /dev/sdb2
mount -av
8、删除分区的思路
需求:删除sdb硬盘的所有分区。
思路:
首先,查看sdb硬盘的分区是否已挂载:mount
然后,如果已挂载,就卸载:umount /dev/sdb1 ; umount /dev/sdb2
然后,删除sdb1、sdb2分区:parted -s /dev/sdb rm 1 ; parted -s /dev/sdb rm 2
最后,在/etc/fstab文件中用#号注释掉或删除sdb1、sdb2的自动挂载设置。
任务: 参考sdb硬盘的分区、格式化、挂载过程,对sdc硬盘进行分区、格式化、挂载,挂载到/c1、/c2目录,做数据的写入测试。
创建分区的脚本:用脚本对sde硬盘创建一个主分区,格式化,挂载到/e1目录中,查看挂载状态。
说明:脚本就是将要执行的命令写在一个文件,运行这个文件时就执行这些命令。可以提高管理效率。
编辑fenqu.sh文件 vi fenqu.sh
声明脚本的解释器
设置分区表的类型为MSDOS
创建主分区,使用所有容量
格式化sde1分区,将过程写到null空文件中
查看磁盘空间使用状态
配置sde1的自动挂载 #!/bin/bash
parted -s /dev/sde mklabel msdos
parted -s /dev/sde mkpart primary ‘1 -1‘
mkfs.ext4 /dev/sde1 > /dev/null
mkdir -pv /e1
mount -v /dev/sde1 /e1
df -hT
echo ‘/dev/sde1 /e1 ext4 defaults 0 0‘ >> /etc/fstab
给脚本设置执行权限
运行脚本 chmod a+x fenqu.sh
sh fenqu.sh 或 ./fenqu.sh
说明:df(disk free)中的-h是以易读的方式显示容量单位(k、M、G、T等)。-T显示文件系统类型(ext4、iso9660、vfat、ntfs等)
删除分区的脚本:用脚本删除sde的分区。
编辑shanfq.sh文件 vi shanfq.sh
声明脚本的解释器
卸载sde1分区
删除/e1目录
删除sde1分区
用sed命令将fstab文件中的sde1找到后删除 #!/bin/bash
umount /dev/sde1
rm -rfv /e1
parted -s /dev/sde rm 1
sed -i ‘/sde1/d‘ /etc/fstab
给脚本设置执行权限
运行脚本 chmod a+x shanfq.sh
sh shanfq.sh 或 ./ shanfq.sh
cfdisk分区项目
cfdisk用法 cfdisk 磁盘设备 例如:cfdisk /dev/sdc
cfdisk的常用命令
红色字是快捷键 help帮助,new创建分区,delete删除分区,print打印分区表,quit退出,Write保存,Unit容量单位
type类型(83――Linux分区,82――swap分区,8e――LVM分区,fd—-raid分区),logical逻辑分区
1、用cfdisk命令给sdd硬盘创建2个主分区,一个3G,另一个使用所有剩余空间(即2G)。
查看分区表
用cfdisk给sdc硬盘分区 fdisk -l |grep sd 或 lsblk
cfdisk /dev/sdc 参考操作方法如下
创建第1个3G的主分区
创建第2个主分区 n新建==>p主分区==>3G回车==>beginning回车==>W保存==>yes回车
选free空闲空间==> n新建==>p主分区==>直接回车==>W保存==>yes回车==>q键退出
2、用mkfs.ext4格式化sdd硬盘的2个分区
格式化此分区ext4文件系统
格式化此分区ext4文件系统 mkfs.ext4 /dev/sdd1
mkfs -t ext4 /dev/sdd2
3、创建挂载点
在根目录下创建b1和b2目录 mkdir -pv /d1 /d2
4、手动挂载sdd1、sdd2分区到/d1、/d2目录
将sdd1挂载到/d1目录
将sdd2挂载到/d2目录
依次查看2个目录的文件列表
查看已挂载的设备状态
查看硬盘空间使用状态 mount /dev/sdb1 /d1
mount /dev/sdb2 /d2
ls /d1 /d2
mount
df -hT
5、写入文件测试
在/b1目录下创建3个空文件
复制3个文件到/d2目录中
依次查看2个目录的文件列表 touch /d1/{a,b,c,d}
cp /etc/{hosts,passwd,group} /d2/
ls /d1 /d2
6、配置fstab自动功能
依次卸载sdd1、sdd2分区
查看硬盘空间使用状态
依次查看2个目录的文件列表
编辑fstab自动挂载配置文件 umount /dev/sdd1 /dev/sdd2
df -hT
ls /d1 /d2
vi /etc/fstab 添加下行的内容
sdd1的挂载设置
sdd2的挂载设置 /dev/sdd1 /d1 ext4 defaults,noexec 0 0
/dev/sdd2 /d2 ext4 defaults 0 0
fstab文件功能说明 设备 挂载点 类型 选项 dump备份 是否fsck
7、做自动挂载测试
查看挂载状态
挂载fstab中的所有设备
mount
mount -av
df -hT
ls /d1 /d2
项目任务:参考sdd硬盘分区、格式化、挂载的方法,对sde硬盘进行管理,平均分成3个分区。
fdisk分区项目
fdisk用法:fdisk [选项] 磁盘设备 例如:fdisk -l /dev/sdc
说明:-l 是list,显示分区表信息
fdisk常用命令详解
命令 作用 命令 作用
m 获取帮助 t 改变某个分区的类型
n 添加新的分区(即创建分区) p 查看分区表信息
d 删除某个分区信息 w 保存并退出
l 列出所有可用的分区类型 q 不保存直接退出
1、用fdisk命令给sdd硬盘创建2个主分区,一个3G,另一个使用所有剩余空间(即2G)。
查看分区表
用cfdisk给sdc硬盘分区 fdisk -l |grep sd
fdisk /dev/sdd 参考操作方法如下
创建第1个3G的主分区 n新建==>p主分区==>1分区号==>回车(定起始扇区) ==>+3G回车(定容量)==>p显示分区
创建第2个主分区 n新建==>p主分区==>2分区号==>回车(定起始扇区) ==>回车(定结束扇区)==>p显示分区==>w保存分区表并退出
创建扩展分区:n 新建==>e扩展分区==>分区号==>起始位置==>截止位置或容量
创建逻辑分区:n新建==> l逻辑分区==>起始位置==>截止位置或容量
删除分区:d删除==>输入分区号并回车==>p显示分区==>w保存分区表并退出
2、用mkfs.ext4格式化sdd硬盘的2个分区
格式化此分区ext4文件系统
格式化此分区ext4文件系统 mkfs.ext4 /dev/sdd1
mkfs -t ext4 /dev/sdd2
3、创建挂载点
在根目录下创建b1和b2目录 mkdir -pv /d1 /d2
4、手动挂载sdd1、sdd2分区到/d1、/d2目录
将sdd1挂载到/d1目录
将sdd2挂载到/d2目录
依次查看2个目录的文件列表
查看已挂载的设备状态
查看硬盘空间使用状态 mount /dev/sdb1 /d1
mount /dev/sdb2 /d2
ls /d1 /d2
mount
df -hT
5、写入文件测试
在/b1目录下创建3个空文件
复制3个文件到/d2目录中
依次查看2个目录的文件列表 touch /d1/{a,b,c,d}
cp /etc/{hosts,passwd,group} /d2/
ls /d1 /d2
6、配置fstab自动功能
依次卸载sdd1、sdd2分区
查看硬盘空间使用状态
依次查看2个目录的文件列表
编辑fstab自动挂载配置文件 umount /dev/sdd1 /dev/sdd2
df -hT
ls /d1 /d2
vi /etc/fstab 添加下行的内容
sdd1的挂载设置
sdd2的挂载设置 /dev/sdd1 /d1 ext4 defaults,noexec 0 0
/dev/sdd2 /d2 ext4 defaults 0 0
fstab文件功能说明 设备 挂载点 类型 选项 dump备份 是否fsck
7、做自动挂载测试
mount
mount -av
df -hT
ls /d1 /d2
项目任务:参考sdd硬盘分区、格式化、挂载的方法,对sde硬盘进行管理,平均分成3个分区。
常见的硬盘品牌:
机械硬盘:由盘片、磁头、电路板、主轴等机械部件组成。特点:容量大,价格便宜。抗震性差(怕摔)。
机械硬盘:WestermDigital西部数据、Seagate希捷、Samsung三星、Hitach日立(HGST)、东芝Toshiba、迈拓Maxtor (被收购了)
固态硬盘(芯片存储):三星、闪迪、威刚、intel、七彩虹、西部数据……
亚洲市场上的机械硬盘产地:中国、新加坡、马来西亚……
硬盘性能参数
机械硬盘选购要考虑的主要性能参数:
接口:SAS、SCSI、SATA、IDE(已淘汰)
容量:4TB、2TB、1TB、500GB
缓存:64M、32M、16M、8M
每分钟转速:1万转、7200、5400
硬件中的专业术语 读数据 写数据
CPU控制器和运算器
一级缓存
二级缓存
三级缓存cache ↑
↑
↑
↑
↑
↑
↑ ↓
↓
↓
↓
↓
↓
↓
内存(内存条)
硬盘缓存
硬盘盘片
注:SAS是现在服务器硬盘专用的数据线接口。
SCSI是早期的服务器硬盘专用接口。SCSI是小型计算机系统接口(small computer system interface)的缩写。
SATA串口:是(Serial Advanced Technology Attachment,串行高级技术附件)的缩写。是一种基于行业标准的串行硬件驱动器接口,是由Intel、IBM、Dell、APT、Maxtor和Seagate公司共同提出的硬盘接口规范。2001年,由Intel、APT、Dell、IBM、希捷、迈拓这几大厂商组成的Serial ATA委员会正式确立了Serial ATA 1.0规范,在当年的IDF Fall 大会上,Seagate宣布了Serial ATA 1.0标准,正式宣告了SATA规范的确立。
SATA标准版本:bit比特 Byte字节
SATA 1.0: 1.5Gb/s = 1.5/8 = 0.1875 GB/s
SATA 2.0: 3Gb/s = 3/8 = 0.375 GB/s
SATA 3.0: 6Gb/s = 6/8 = 0.75 GB/s
问题:数据传输方式中的并行、串行有什么不同? 提示:想一下多车道的马路和单车道的马路就能明白有何不同。
USB接口:
USB是通用串行总线(Universal? Serial Bus)的缩写。是一个外部总线标准,用于规范电脑与外部设备的连接和通讯。是应用在PC领域的接口技术。USB接口支持设备的即插即用和热插拔功能。USB是在1994年底由英特尔Intel、康柏 compaq、IBM、Microsoft等多家公司联合提出的。
热插拔技术:是指在系统不关机、不断电的情况下能将硬件设备拔下来,并且不影响系统正常工作。USB接口和SATA接口都支持热插拔。注意:热插拔设备之前必须要保证没有对设备进行读写操作。
USB接口结构:由4根铜线组成,其中2根是电源线,另外2根是数据线。
USB接口版本:
计算机用户级别:
普通用户(网民)――-〉知道电脑硬件组成、会上网,不会解决问题。
初级系统管理员:会安装系统,会操作,理论原理知识懂得不多。进不了系统只会重装,不会修复。
中级系统管理(网络管理):会系统安装、懂分区原理、系统启动流程、网络基础知识(IP、路由和交换技术)、服务器技术(常见的网络服务DHCP、DNS、http网站服务、文件共享[ftp、samba、nfs]、mail邮件服务、AD活动目录[域控])
高级管理员:信息安全、路由和交换略懂、服务器集群技术、虚拟化、分布式存储、云平台构建、容器云构建、自动化部署、自动监控等。
架构师:懂以上所有技术内容、人员管理能力、项目解决方案的缩写。
CTO:首席技术官(Chief Technology Officer)
磁头:负责在磁盘上完成读写定位操作的部件。系统读出255磁头数,并不是说硬盘里面真的有255个磁头,而是系统从逻辑上对磁头的一种管理方法。
磁道track:当磁头在某一固定位置时,盘片转1圈所形成的圆。
扇区sector:将磁道等分成一定大小的弧段,每扇区默认为512字节
柱面cylinders:同一半径多个磁道就形成了柱面。
block块:默认的一个块是4096字节(8扇区512字节),系统读文件时,一次最少会读取1个块。
硬盘容量=磁头数扇区数柱面数512字节
在0磁头0柱面的第一个扇区保存着MBR(mater boot record)主引导记录与DPT(disk part table)分区表信息,2字节存magic编号。单个扇区容量为512bytes组成,主引导记录需要占用446bytes,分区表的为64bytes,而每记录一个分区信息需要16bytes,那么问题来了,好像只能记录4个分区信息?
MBR分区表的概念
primary主分区:主要的分区。
extend扩展分区:用来扩展管理逻辑分区的。
logical逻辑分区:扩展分区中的成员分区。逻辑分区的编号默认从5开始。
常见的MBR分区表方案:
1个主分区+1个扩展分区+多个逻辑分区。
5G的硬盘sdb分区示意图
sdb1
主分区
2G sdb2扩展分区3G
sdb5
逻辑分区1
600M sdb6
逻辑分区2
600M sdb7
逻辑分区3
600M sdb8
逻辑分区4
600M sdb9
逻辑分区5
600M
swap交换分区
虚拟内存:将硬盘的一部分空间当作内存来使用。用来缓解物理内存不足的问题。
SWAP即交换分区是一种类似于Windows系统虚拟内存的功能,将一部分硬盘空间虚拟成内存来使用,从而解决内存容量不足的情况,因为SWAP毕竟是用硬盘资源虚拟的,所以速度上比真实物理内存要慢很多,一般只有当真实物理内存耗尽时才会调用SWAP。
Win7设置虚拟内存:计算机属性――――》高级系统设置――――》性能设置――――》高级设置――――》更改
虚拟内存取值范围:物理内存的1.5~2倍。
win7虚拟内存文件:c:\pagefile.sys 是个隐藏文件
使用文件构建swap
应用场景:
硬盘已经没有剩余空间来创建swap分区时,在硬盘上创建一个swap文件来充当swap分区。
1、使用dd这个命令来创建一个128M的文件在/tmp目录中:
dd if=/dev/zero of=/tmp/swap bs=1M count=128
说明:if是指定输入文件,of是指定输出文件,bs是指定基本容量大小,count是读写的总次数,swap文件的容量等于bs*count=128M。
2、使用mkswap将/tmp/swap文件格式化为swap格式:
mkswap /tmp/swap
3、使用swapon来启用/tmp/swap文件
查看内存状态
启用此swap文件
查看swap状态 free 记住当前的swap值
swapon /tmp/swap
free 验证swap是否多了128M
swapon -s
4、使用swapoff关闭/tmp/swap文件
关闭swap文件
swapoff /tmp/swap
free
使用swap分区
应用场景:
如果硬盘有空闲空间来创建swap分区时,可以在硬盘上创建一个swap分区并启用swap。
目标:在sde硬盘上创建一个500M的swap分区,并启用这个Swap分区。
1、使用parted命令在sde硬盘上创建一个swap分区:
查看分区表
设置分区表类型为msdos(即MBR)
创建1个500M的主分区
设置为swap分区类型
查看块设备 fdisk -l |grep sd
parted -s /dev/sde mklabel msdos
parted -s /dev/sde mkpart primary 1 500M
parted -s /dev/sde set 1 swap on
lsblk
2、使用mkswap将/dev/sde1文件格式化为swap格式:
mkswap /dev/sde1
3、使用swapon来启用/dev/sde1
查看内存状态
启用此swap文件
查看swap状态 free
swapon /dev/sde1
free
swapon -s
4、使用swapoff关闭/dev/sde1
关闭swap文件
swapoff /dev/sde1
free
任务:以文件的方式创建一个500M的swap文件500M,查看内存状态,并启用这个Swap文件,查看内存状态中的Swap值,关闭swap文件。删除这个swap文件。
思考:
1、为什么要对硬盘进行分区?
2、parted命令管理分区的方法?
3、什么是挂载?为什么要挂载?
4、fstab自动挂载文件设置的格式?
5、机械硬盘的一些概念:磁头、磁道、扇区、柱面?
6、什么是MBR?MBR分区表的特点?
raid磁盘阵列
raid基础
硬raid:用raid磁盘阵列卡来实现。通过raid卡专用的软件来管理磁盘。
软raid:用操作系统中提供的raid软件来实现磁盘阵列功能。成本低,性能比硬Raid低,因为软raid会占用一定的cpu资源。
RAID磁盘阵列的特点汇总 (n表示硬盘的总数,k表示单块硬盘的容量)
RAID等级 功能 优点 硬盘数量 容量计算 容错、冗余功能
0 容量组合,高读写性能 读写速度快 >=2 nk 无
1 同步备份(即镜像) 保证数据安全 >=2 k 最多允许坏一块硬盘
5 容量组合+
单组奇偶校验码 读写速度快,
保证数据安全 >=3 (n-1)k 最多允许坏一块硬盘
6 容量组合+
双组奇偶校验码 读写速度快,
保证数据安全 >=4 (n-2)k 最多允许坏2块硬盘
10 同步备份(镜像)+
容量组合 读写速度快,
保证数据安全 >=4 (n-2)k 最多允许坏2块硬盘
RAID 0 :条带化。功能是将多个磁盘组合成一个大容量存储。
需要的硬盘数:>=2
总容量的计算:所有硬盘容量之和。例如,3块500G组成的RAID0,总容量为1500G.
工作原理:当有一组数据往硬盘中读写,raid 0会将数据进行切片,将切片数据分别写入不同的硬盘。
优点:读写速度快
缺点:当RAID 0中的任意一块硬盘坏,另一块硬盘上只有一半数据,数据无法访问。
RAID 1 :镜像。功能是实现实时备份。
最少需要的硬盘数:2
工作原理:同一个数据会同时在每个硬盘上各保存一份。
优点:当RAID 1中的其中任意一块硬盘坏,另一块硬盘上还有完整的数据。
缺点:当有2块500G的硬盘做RAID 1,可以使用的总容量是500G。如果两块硬盘的容量大小不同,则总容量取小容量的值。
RAID 5 :单组奇偶校验的条带,在Raid 0的基础上添加了奇偶校验码
需要的硬盘数:>=3
数据存储结构:1块硬盘的容量存奇偶校验码。其他硬盘存文件数据。
总容量的计算:所有硬盘容量之和减去1个“总容量的平均值”。例如,3块500G组成的RAID5,总容量为1500-500=1000G.
工作原理:以RAID 0的方式完成数据读写,并在数据中添加了奇偶校验码。
优点:读写速度快,有容错功能。当其中一块硬盘坏了,拆掉坏硬盘,添加新硬盘,系统会自动使用RAID 5的特殊算法(异或算法)来重建完整的数据。
缺点:由于奇偶校验码会占用一个磁盘空间,所以总的数据存储容量会减少。
RAID 6 :双组奇偶校验的条带
需要的硬盘数:>=4
总容量的计算:所有硬盘容量之和减去2个“硬盘容量”。例如,4块500G组成的RAID 6,总容量为2000-1000=1000G.
优点:读写速度快,有容错功能。当其中1块或2块硬盘坏了,可以通过RAID 6的特殊算法,系统会自动重建完整的数据。
缺点:由于奇偶校验码有2组,校验码会占用2个磁盘空间,所以总的数据存储容量会减少。
RAID 10(1+0或0+1):RAID0和RAID1的组合,称为嵌套化。
mdadm命令用于管理系统软件RAID硬盘阵列,格式为:”mdadm [模式] <RAID设备名称> [选项] [成员设备名称]”。
raid的管理流程:先创建分区(也可以不创建),再创建需要的raid,再格式化Raid,再手动或自动挂载Raid,生成raid的配置文件mdadm.conf。
对用于创建raid的sdb、sdc、sdd、sde硬盘进行分区,分区的类型为raid(代号fd).
查看当前的硬盘分区 lsblk 或 fdisk -l |grep sd
用cfdisk给sdb硬盘分区
cfdisk /dev/sdb 参考操作如下:
n新建――>p主分区――>容量――>W保存――>t类型――>fd――>W保存――>q退出
sdc、sdd、sde硬盘按sdb的方法进行分区操作
检验硬盘或分区是否支持raid技术 mdadm -E /dev/sd[b-e] 会显示硬盘支持Raid的一些信息
mdadm -E /dev/sd[b-e]1 会提示分区上没有md superblock, 是正常的
创建需要的raid:
例如:将sdb1、sdc1、sdd1、sde1创建成不同的Raid。
mdadm中的-C是创建raid,-l是指定raid等级,-n是指定raid中的磁盘盘分区数量,-x是指定热备磁盘,-S是停用raid,-s是scan扫描所有的raid设备,v是显示raid的信息。
将sdb1、sdc1创建成md0的Raid0设备
查md0这个raid的状态
扫描并显示系统中所有的raid设备信息
停用md0这个Raid设备 mdadm -C md0 -l 0 -n 2 /dev/sd[b-c]1 或用下面的一条命令
mdadm -C md0 -l 0 -n 2 /dev/sdb1 /dev/sdc1
mdadm -D /dev/md/md0
mdadm -Dsv
mdadm -S /dev/md/md0
将sdb1、sdc1创建成raid1,将sdd1设置成spare热备盘 mdadm -C md1 -l 1 -n 2 -x 1 /dev/sd[b-d]1
mdadm -D md1
将sdb1、sdc1、sdd1创建成raid5,
并将sde1设置成spare热备盘 mdadm -C /dev/md5 -l 5 -n 3 -x 1 /dev/sd[b-e]1 或用下面的一条命令
mdadm -C /dev/md5 -l 5 -n 3 /dev/sd[b-d]1 -x 1 /dev/sde1
查看raid工作状态的方法 lsblk
mdadm -Dsv
mdadm -D /dev/md0 D是detail详细信息的缩写
cat /proc/mdstat
raid创建后必须做的操作:先将raid格式化,再挂载,再测试数据的写入,生成raid的配置文件mdadm.conf。
格式化/dev/md1这个raid设备 mkfs.ext4 /dev/md/md1
创建/md1目录
将/dev/md1设备挂载到/md1目录中
查看挂载的状态
mkdir /md1
mount /dev/md1 /md1
df -hT 或 mount
ls /md1
复制/etc目录中的passwd、hosts、group文件到/md1中 cp /etc/{passwd,hosts,group} /md1
ls /md1
查看文件内容(可能是空的或文件不存在)
查看raid的简要信息
将raid的简要信息覆盖写入到mdadm.conf文件中 cat /etc/mdadm.conf
mdadm -Dsv
mdadm -Dsv > /etc/mdadm.conf 生成raid的配置文件
模拟raid中的磁盘或分区错误,并移除此磁盘或分区:
查看md1这个raid的状态 mdadm -D /dev/md1
指定md1中的sdb硬盘是坏的
从md1中移除sdb1这个分区
从服务目拔下sdb1这个分区 mdadm /dev/md1 -f /dev/sdb1
mdadm -D /dev/md1
mdadm /dev/md1 -r /dev/sdb1
装一块新硬盘到sdb硬盘所在的位置
将这个新硬盘添加到md1这个raid中
mdadm /dev/md1 -a /dev/sdb1
删除md1这个raid的流程:先卸载raid,再停用此raid,删除raid的设备文件,清空/etc/mdadm.conf配置文件的内容
卸载md1设备 df -hT 或 mount
umount /dev/md1
从/etc/fstab自动挂载的配置文件中将/dev/md1注释或删掉
查看raid的简要信息
查看md1的状态
停用md1这个Raid设备
启用md1这个raid设备 mdadm -Ds
mdadm -D /dev/md1
mdadm -S /dev/md1
mdadm -A /dev/md1 (激活raid的前提是必须在mdadm.conf文件中有raid的记录)
清空/etc/mdadm.conf配置文件的内容 echo “” > /etc/mdadm.conf
cat /etc/mdadm.conf
raid5案例
项目任务:
恢复虚拟机的快照到4块5G硬盘,然后用sdb、sdc、sdd硬盘创建一个raid 5,将sde设置成热备磁盘。
1、创建一个名称为rd5的raid磁盘阵列
查块设备
测试硬盘上是否存在raid超级块信息
创建名称为rd5的raid5的方法一
创建raid5的方法二 lsblk
mdadm -E /dev/sd[b-e]
mdadm -C rd5 -l 5 -n 3 -x 1 /dev/sd[b-e]
mdadm -C rd5 -l 5 -n 3 /dev/sd[b-d] -x 1 /dev/sde
mdadm功能说明
multi disk admin -E
-C
-l
-n
-x
-D
-s
-v
-S
-f
-r
-a 测试硬盘或分区是否有raid的超级块
即create,创建raid
指定raid等级,等级可以是0、1、5、6、10等
指定raid中磁盘或分区的数量
指定spare热备磁盘或分区的数量
显示raid的详细信息
即scan,扫描系统中所有raid设备
即verbose,显示raid的信息
即Stop,停用指定的raid设备
即fail,手动指定raid损坏的设备
即remove,从指定的Raid中删除某个坏硬盘或分区
即add,将某个设备加入到指定的raid中
2、查看raid的状态
查看raid的简要信息
查看rd5的详细信息 mdadm -Dsv
mdadm -D /dev/md/rd5
[root@localhost ~]# mdadm -D /dev/md/rd5
/dev/md/rd5: 设备名
Version : 1.2
Creation Time : Thu Mar 30 17:15:19 2017 创建时间
Raid Level : raid5 raid的等级
Array Size : 10476544 (9.99 GiB 10.73 GB) 阵列的容量
Used Dev Size : 5238272 (5.00 GiB 5.36 GB) 已使用的容量
Raid Devices : 3 阵列中的磁盘设备数量
Total Devices : 4 设备总数
Persistence : Superblock is persistent
Update Time : Thu Mar 30 17:16:41 2017 更新时间
State : clean 状态是clean表示正常
Active Devices : 3 活动的设备
Working Devices : 4 正在工作的设备
Failed Devices : 0 错误的设备
Spare Devices : 1 备胎(热备磁盘的数量)
Layout : left-symmetric
Chunk Size : 512K
Name : localhost.localdomain:rd5 (local to host localhost.localdomai n) 设备全名
UUID : 8344549d:00c203bf:4a0c1c69:6af128b3 设备的唯一标识号
Events : 18
Number Major Minor RaidDevice State
0 8 16 0 active sync /dev/sdb 活动的硬盘
1 8 32 1 active sync /dev/sdc 活动的硬盘
4 8 48 2 active sync /dev/sdd 活动的硬盘
3 8 64 - spare(空闲) /dev/sde 热备磁盘
3、格式化rd5这个raid
mkfs.ext4 /dev/md/rd5
4、手动挂载rd5这个raid到/rd5目录中
mkdir /rd5
mount -v /dev/md/rd5 /rd5
df -hT
ls /rd5
5、测试文件的写入
cp -v /etc/{hosts,passwd} /rd5
ls /rd5
7、生成mdadm.conf配置文件
为何要创建配置文件:如果没有mdadm.conf配置文件,重启后系统后不会自动加载这个Raid设备。
查看raid的简要信息
生成配置文件 mdadm -Dsv
mdadm -Dsv >> /etc/mdadm.conf
7、模拟rd5中sdb硬盘损坏,并移除坏硬盘
查看rd5的详细信息
指定sdb为坏硬盘
查看rd5的详细信息
从rd5阵列中删除sdb硬盘的记录
在rd5阵列中添加sdb新硬盘 mdadm -D /dev/md/rd5
mdadm /dev/md/rd5 -f /dev/sdb
mdadm -D /dev/md/rd5
mdadm /dev/md/rd5 -r /dev/sdb
mdadm -D /dev/md/rd5
mdadm /dev/md/rd5 -a /dev/sdb
8、删除raid的思路
卸载raid==>停用raid==>注释fstab中raid的配置==>注释掉mdadm.conf中raid的配置==>删除分区。
查看硬盘空间状态
卸载rd5设备
停用rd5设备
启用rd5设备或下一条命令
启用rd5设备
修改fstab自动挂载文件
修改mdadm.conf配置文件 df -hT
umount /dev/md/rd5
mdadm -S /dev/md/rd5
mdadm -A /dev/md/rd5 必须要有mdadm.conf配置文件(否则无法激活)
mdadm -A rd5 必须要有mdadm.conf配置文件(否则无法激活)
vi /etc/fstab 注释fstab中raid的配置
vi /etc/mdadm.conf 注释掉mdadm.conf中raid的配置
mdadm.conf的作用:当用mdadm -S 停用raid设备后,重新激活这个raid时,是根据mdadm.conf来加载raid设备的。否则无法加载。
任务:将4块硬盘中的sdb、sdc组建成一个名称为md1的raid1,将sdd硬盘设置成热备磁盘,然后格式化,挂载,生成mdadm.conf配置文件。
LVM逻辑卷管理
LVM的主要功能:容量组合,动态调整容量大小。
LVM是将多块硬盘从逻辑上组合成一个大容量的存储空间(即VG卷组),最终要划分成小的LV逻辑卷来使用这些空间。
LVM的管理流程:先给硬盘分区(也可以不分区),再创建PV物理卷(volnume),再创建VG卷组,再创建LV逻辑卷,再mkfs格式化LV,再mount手动或fstab自动挂载LV,再写入数据。
写入新数据-- touch /lv1/a1 touch /lv2/b1 touch /lv3/c1
挂载↑ /lv1 /lv2 /lv3
格式化↑
LV逻辑卷↑ lv-data lv-save lv-mydb ??剩余空间
VG卷组↑ PE PE PE PE PE PE PE PE PE PE PE PE PE PE PE
PV物理扩展↑ /dev/sdb或/dev/sdb1 /dev/sdc或/dev/sdc1 /dev/sdd或/dev/sdd1 /dev/sde或/dev/sde1
物理硬盘或分区↑ /dev/sdb或/dev/sdb1 /dev/sdc或/dev/sdc1 /dev/sdd或/dev/sdd1 /dev/sde或/dev/sde1
物理磁盘Physical Device: 整个硬盘设备或使用fdisk、cfdisk命令建立的硬盘分区
物理卷(PV,Physical Volume) :用pvcreate在硬盘上创建PE的结果。查PV的结果用pvdisplay。
卷组(VG,Volume Group) :由一个或多个物理卷(PV)组成的整体。
逻辑卷(LV,Logical Volume) :从卷组(VG)中切割出的空间,用于格式化(即创建文件系统),大小由PE的个数决定。
物理扩展(PE,Physical Extent):是卷组中的最小容量单元,每个PE默认为4MB的基本块。
逻辑扩展(LE,Logical Extent):LV中的最小单元。默认的每个LE大小跟PE的大小一致。
功能/命令 物理卷管理 卷组管理 逻辑卷管理
扫描scan pvscan vgscan lvscan
建立create pvcreate vgcreate lvcreate
显示display pvdisplay vgdisplay lvdisplay
状态status pvs vgs lvs
删除remove pvremove vgremove lvremove
扩展(增加容量)extend vgextend lvextend或lvresize
缩容(缩小容量)reduce vgreduce lvreduce或lvresize
调整系统中看到的容量 resize2fs
LVM逻辑卷管理的思路:先给硬盘分区(也可以不分区),再创建pv,再创建vg,再创建lv,再格式化,再手动或自动挂载,再测试数据的写入。
项目任务:将sdb、sdc、sdd这3块5G的硬盘用LVM管理,组合成一个15G的VG卷组,然后将sde这块5G的硬盘添加到这个卷组中,再将sde从卷组中删除,创建一个8G的LV,将LV的容量调整成12G,再将LV容量调整成7G,格式化LV,将LV挂载到/lvdata目录,做数据写入测试。
lsblk 或 fdisk -l |grep sd
创建pv,将sdb~sdd格式转换成pv
显示pv的状态
显示pv的详细信息 pvcreate /dev/sd[b-d]
pvs
pvdisplay
[root@localhost ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sdb lvm2 a-- 5.00g 5.00g
/dev/sdc lvm2 a-- 5.00g 5.00g
/dev/sdd lvm2 a-- 5.00g 5.00g
pv设备名 VG名称 格式 属性 总容量 空闲容量
PV名称
VG名称
pv的容量大小
可分配的
PE的大小
PE的数量
空闲的PE
已分配的PE数量
PV的唯一标识号 [root@localhost ~]# pvdisplay
"/dev/sdb" is a new physical volume of "5.00 GiB"
--- NEW Physical volume ---
PV Name /dev/sdb
VG Name
PV Size 5.00 GiB
Allocatable NO
PE Size 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID eeoeWu-nrEv-b3Lq-vGf0-1f4q-cFsC-sDL1yv
将sd[b-d]创建成名称为vg1的卷组
显示vg的状态
显示vg的详细信息 vgcreate vg1 /dev/sd[b-d]
vgs
vgdisplay
[root@localhost ~]# vgs
VG #PV #LV #SN Attr VSize VFree
vg1 3 0 0 wz--n- 14.99g 14.99g
卷组名 pv的数量 LV的数量 SnapShot快照的数量 属性 卷组容量 卷组剩余容量
VG名称
系统ID号
格式
元数据区域
元数据序号
VG的访问权限为可读可写
VG状态,resizable是指可以动态调整
最大的LV数量(限制创建LV的数量)
当前LV的数量
已打开(挂载)的LV数量
最大的PV数量(限制添加PV的数量)
当前pv的数量
正在访问的pv数量
vg的总容量
单个PE的大小
PE的个数
已分配的PE大小
空闲的PE容量
VG的唯一标识符 [root@localhost ~]# vgdisplay
--- Volume group ---
VG Name vg1
System ID
Format lvm2
Metadata Areas 3
Metadata Sequence No 1
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 0
Open LV 0
Max PV 0
Cur PV 3
Act PV 3
VG Size 14.99 GiB
PE Size 4.00 MiB
Total PE 3837
Alloc PE / Size 0 / 0
Free PE / Size 3837 / 14.99 GiB
VG UUID mz7EuQ-uJHI-COyM-dn9T-jhqj-vmqk-o286oS
将sde硬盘格式转换成pv
vg的扩容(增加容量)
查看vg的状态 pvcreate /dev/sde
vgextend vg1 /dev/sde 将/dev/sde加入到vg1卷组中
vgs
vg缩容(缩小容量) vgreduce vg1 /dev/sde 将/dev/sde从vg1组中移除
vgs
vgdisplay
LV设备的路径
逻辑卷名称
卷组名称
逻辑卷唯一标识号
LV的访问权限
lv的创建时间
lv的状态,available可用的
是否已打开(即挂载)
LV的容量大小
当前LE的总数量
段数,即所用的PV数量
分配
块设备 [root@localhost ~]# lvdisplay
--- Logical volume ---
LV Path /dev/vg1/lv1
LV Name lv1
VG Name vg1
LV UUID nD6kJE-P5Rd-pYQM-ouY6-zLsz-iJ2I-sHS8Mq
LV Write Access read/write
LV Creation host, time localhost.localdomain, 2017-03-30 19:37:43 +0800
LV Status available
open 0
LV Size 8.00 GiB
Current LE 2048
Segments 2
Allocation inherit继承
Read ahead sectors auto
- currently set to 256
Block device 253:0
在vg1中创建lv1这个8G的逻辑卷 lvcreate -L 8G -n lv1 vg1
lvs
lvdisplay
额外用pvs、pvdisplay、vgs、vgdisplay查一下lv跟pv和vg之间的数据关系
给lv1这个逻辑卷扩容 lvresize -L 12G -n /dev/vg1/lv1 或用下面一条命令
lvextend -L +4G -n /dev/vg1/lv1
额外用pvs、pvdisplay、vgs、vgdisplay查一下lv跟pv和vg之间的数据关系
给lv1这个逻辑卷缩容 lvresize -L 7G -n /dev/vg1/lv1 或用下面一条命令
lvreduce -L -5G -n /dev/vg1/lv1
格式化指定的LV mkfs.ext4 /dev/vg1/lv1
创建挂载目录
手动挂载
复制文件到/lvdata目录中
查看文件列表 mkdir /lvdata
mount /dev/vg1/lv1 /lvdata
cp -v /etc/{passwd,hosts,group} /lvdata
ls /lvdata
LVM的删除过程:
查看硬盘空间状态
卸载lv1这个逻辑卷 df
umount /dev/vg1/lv1 或 umount /lvdata
删除lv1这个逻辑卷 lvremove /dev/vg1/lv1
lvs
删除vg1这个卷组 vgremove vg1
vgs
删除sd[b-e]这些物理卷 pvremove /dev/sd[b-e]
pvs
对在已经挂载使用的LV进行缩容的思路:先卸载LV,再扫描lv,再用resize2fs调整系统中的LV容量,再用lvresize调整LV的容量,重新挂载LV,验证LV中的数据是否正常。
项目任务:将sdb、sdc、sdd、sde创建成一个名称为vg0的卷组,在vg0中创建一个6G且名称为data的逻辑卷,格式化并挂载data这个逻辑卷到/d1目录中,复制/etc中的passwd、hosts、group文件到/d1目录中。然后将data这个逻辑卷容量按正确的步骤调整成3G,再重新挂载data逻辑卷,验证数据是否正常。
查看块设备
创建pv物理卷
查看pv状态
创建名称为vg0的vg卷组
查看vg状态
在vg0卷组中创建6G的名称为data的lv逻辑卷
查看lv状态
查看lv的详细信息
格式化data这个lv
创建挂载目录
挂载data到/d1目录中
复制文件/d1目录中
查看/d1目录的文件列表 lsblk
pvcreate /dev/sd[b-e]
pvs
vgcreate vg0 /dev/sd[b-e]
vgs
lvcreate -L 6G -n data vg0
lvs
lvdisplay
mkfs.ext4 /dev/vg0/data
mkdir -pv /d1
mount /dev/vg0/data /d1
cp -v /etc/{passwd,hosts,group} /d1
ls /d1
对data逻辑卷的缩容过程 查看磁盘分区的空间
卸载/d1目录中的设备
检测data这个逻辑卷是否正常(即磁盘扫描)
调整data逻辑卷在文件系统中的容量为3G
显示lv的状态
调整data这个lv的容量为3G
显示lv的状态
挂载
查磁盘分区的容量状态
查看/d1目录中的文件列表 df
umount /d1
e2fsck -f /dev/vg0/data
resize2fs /dev/vg0/data 3G
lvs 会发现data这个lv的容量还是6G
lvresize -L 3G /dev/vg0/data
lvs
mount /dev/vg0/data /d1
df -hT
ls /d1
对data逻辑卷的扩容过程 查看磁盘分区的空间
卸载/d1目录中的设备
检测data这个逻辑卷是否正常
调整data这个lv的容量为5G
显示lv的状态
调整data逻辑卷在文件系统中的容量为5G
挂载
查看硬盘分区的容量
查看/d1目录中的文件列表 df
umount /d1
e2fsck -f /dev/vg0/data
lvresize -L 5G /dev/vg0/data
lvs 会发现data这个lv的容量还是6G
resize2fs -p /dev/vg0/data
mount /dev/vg0/data /d1
df -hT
ls /d1
LV快照(COW写时快照)的创建和管理 对vg0卷组的data逻辑卷做一个名称为DSNAP且大小为8G的逻辑卷快照:
给data逻辑卷创建一个名称为DSNAP的快照备份
创建LV快照的命令格式
创建目录
挂载DSNAP逻辑卷快照到/d1snap目录中
查看文件列表 lvcreate –L 8G -s -n DSNAP /dev/vg0/data 说明-s是snapshot
lvcreate -L 容量 -s -n 快照名称 源逻辑卷
lvs
lvdisplay
mkdir /d1snap
mount /dev/vg0/DSNAP /d1snap
ls /d1snap
LV逻辑卷快照的原理:备份原逻辑卷中此时的文件名列表和inode索引号及对应的block块编号,而不是备份文件的块中的正文数据。
LVM快照的工作原理:LVM的快照卷也是一个LV逻辑卷,快照卷跟源逻辑卷共享数据,当用户修改源逻辑卷中的文件时,LVM后台程序会自动将修改之前的文件复制一份到快照卷中。
磁盘容量配额
前面的项目讲到的类Unix系统最初设计理念就让许多人一起使用,多任务的操作系统,但是硬件的资源是固定有限的,如果出现个小破坏份子不断的创建文件或下载电影,那么硬盘空间总有一天会被占满的吧,这时就需要quota服务帮助我们为每个用户限制可以使用的硬盘空间,一旦超出预算就不再允许他们使用。
quota的磁盘配额可以限制用户的硬盘可用空间或最大创建文件数量,并且还有软/硬限制的区别:
soft软限制:当达到软限制时会提示用户,但允许用户在规定期限内继续使用。
hard硬限制:当达到硬限制时会提示用户,且强制终止用户的操作。
block块:限制用户能使用的容量。
inode索引号:限制用户能创建的文件数量。
技术点:ext4磁盘配额quota
磁盘配额quota:
限制用户或组对磁盘分区空间的使用量。
应用场合:
公司内部的文件共享服务,网络云环境中网盘(百度网盘、微云)空间限制。广泛应用在云存储、文件共享、邮件、Web网站等服务器。
配额控制的对象:用户、分区、容量、文件数量
soft软限制:允许用户在这个范围内写入数据,并且可以超过这个范围,但是会警告用户“空间不足,请清理文件”。
hard硬限制:不允许用户写入的数据容量超过此范围。
quota磁盘配额的实施思路(精简):
挂载分区时启用“磁盘配额功能”:mount -o usrquota,grpquota 分区设备 挂载点
生成quota的主配置文件:quotacheck -cvug 挂载点
激活quota功能:quotaon 挂载点
显示磁盘配额报表:repquota -av
给用户或组设置quota配额方案
测试配额的效果,查看配额使用情况
磁盘配额实验流程:(只有root用户才能设置quota限额参数)
0、临时关闭Selinux安全功能:setenforce 0 查状态:getenforce
1、对磁盘分区指定quota选项(usrquota,grpquota):手动mount或更改fstab文件再挂载
3、扫描并生成quota配置文件:quotacheck -cvug 挂载点
4、开启quota配额方案:quotaon 挂载点
2、创建用户、组
5、为用户、组设置配额参数:edquota [-u -g]
6、做文件写入测试,验证配额是否生效:touch dd cp……
7、查看当前用户的quota使用状态:quota
root用户查看某个用户的quota使用状态:quota -u 用户名
查看quota软件的工作状态:quotastats
quotacheck命令
功能:在linux系统中管理磁盘配额,生成quota配置文件
语法:quotacheck [选项] [参数]
选项:
-u 扫描系统中的usr.quota配置文件,如果不存在,则创建文件
-g 扫描系统中的grp.quota配置文件,如果不存在,则创建文件
-a 扫描系统中所有开启了quota功能的分区,并生成quota的配置文件
-v 显示quota扫描的结果
quota项目任务一:将sdc硬盘创建一个主分区,格式化并挂载到/c1目录中,同时做配额方案。
磁盘配额的实验:对/dev/sdc1硬盘分区做磁盘配额,只允许用户u1写入的最大容量为5M,允许u2用户最多写入3个文件。
准备工作:
创建u1和u2用户
useradd u1
useradd u2
passwd u1 设置密码为01
passwd u2
2、对/dev/sdc硬盘创建一个分区,格式化,挂载并启用配额功能。
查看硬盘分区表
给sdc硬盘设置分区表类型
在sdc上创建一个主分区
查看硬盘分区表
格式化sdc1分区
创建挂载目录
编辑fstab自动挂载配置文件 lsblk 或 fdisk -l|grep sd
parted -s /dev/sdc mklabel msdos
parted -s /dev/sdc mkpart primary ‘1 -1‘
lsblk 或 fdisk -l|grep sd
mkfs.ext4 /dev/sdc1
mkdir /c1
vi /etc/fstab 添加如下内容
光标定位到最后一行,插入一空行
sdc1的自动挂载设置
按G键,再按o键
/dev/sdc1 /c1 ext4 defaults,usrquota,grpquota 0 0
按Esc键 用户配额,组配额
输入:wq保存并退出
手动挂载如何实现磁盘配额:mount -o usrquota,grpquota /dev/sdc1 /c1
测试自动挂载:mount -av
查磁盘分区使用状态:df 或 mount 或 ls /c1
修改目录权限:chmod -v 777 /c1 将/c1目录的权限设置成777(rwxrwxrwx)
3、用quotacheck生成磁盘配额的主配置文件aquota.group、aquota.user
rm -rfv /c1/host*
ls /c1 发现并没有aquota.group、aquota.user这两个文件
setenforce 0 临时关闭selinux安全功能(否则做quotacheck时会提示“无权限”)
getenforce 查看selinux状态
quotacheck -cvug /c1 检测并生成aquota.group、aquota.user两个配置文件
ls /c1
quotaon /c1 激活quota功能,如需关闭quota功能用quotaoff命令
常用选项:--help
-c 生成磁盘配额主配置文件
-v 显示执行过程
-f 如果磁盘分区配额已激活启用,强制检测并“覆盖”生成磁盘配额文件
-a 检测所有(all)的文件系统
-u 检测用户文件aquota.user
-g 检测组文件aquota.group
*创建用户:
useradd -D 显示创建用户时的默认选项
useradd -Db /c1 修改创建用户时的默认选项中家目录的base基目录为/c1目录
useradd -D
useradd u1
useradd u2
tail /etc/passwd 查看用户账号文件的最后10行内容,看一下u1、u2的家目录路径是什么
*用edquota命令给用户设置配额方案
只允许用户u1写入的最大容量为5M(硬限制),当前使用了2M(软限制)时提醒用户清理文件。
edquota -u u1 修改后的结果如下图
允许u2用户最多写入15个文件,当写入20个文件时提醒用户清理文件。
edquota -u u2 修改后的结果如下图
配额方案中关键字的解释:
blocks:系统自动统计出此用户已使用的"块(容量)"数。
soft:软限制,默认单位是kB,超过此数值,用户可以继续写入新数据,系统会警告用户“已超出软限制”。
hard:硬限制,用户的使用容量不允许超过此值。
inodes:系统自动统计出已写入的文件个数。
soft:允许写入文件个数的软限制
hard:允许写入文件个数的硬限制
注意:如果soft、hard的值为0,表示不做限额
4、激活配额方案:quotaon -a
停用配额方案:quotaoff -a
查看配额状态:quotastats
quota状态查询
针对用户lucy的quota报表:quota -uvs lucy
针对群组lucy的报表:quota -gvs lucy
针对文件系统的quota报表:repquota -auvs
切换用户,做文件的写入测试
su - u2 切换到u2用户
pwd 显示当前工作目录的绝对路径
touch {1..11} 最终只创建了1~11这11个文件,因为最小限额是15个文件。
touch {12..20} 最终只创建了1~11这11个文件,因为最大限额是20个文件。
ls 显示当前目录的文件名列表
quota 查看当前用户的配额使用状态
exit 退出u2用户的登录
su - u1
pwd 显示当前工作目录的绝对路径
quota 查看当前用户的配额使用状态
dd if=/dev/zero of=2m bs=1M count=2 创建一个2M的文件2m
cp 2m 22m 复制2m文件为22m
cp 2m 222m 复制不成功,因为限额为5M,其中2m文件是2兆,22m是2兆,222m只能复制出1M到硬盘上。
ls 显示当前目录的文件名列表
quota 查看当前用户的配额使用状态
exit
dd命令的功能:创建一个文件,并指定文件的大小
dd命令格式:dd if=源文件 of=目标文件 bs=基本容量 count=读写次数
目标文件的总容量=bs基本容量 count读写次数
参数和选项:
if=/dev/zero 指定input file为/dev/zero,类似于cp命令中的“源文件”
of=~/k1 指定output file的路径文件名未~/k1,即“要创建的文件名”
bs=1M 指定单位byte为1M,可以根据需要用B、K、M、G、T等单位
count=6 单位字节的倍数。bscount=文件大小,此例为16=6M
dd实例通俗理解:
dd if=/dev/zero of=/k1 bs=1M count=6
将zero文件复制,得到文件k1,k1的文件大小是1M6=6M。
磁盘配额的小结:对/dev/sdb1硬盘分区做磁盘配额
查看当前的分区表
修改sdb硬盘的分区表标签为msdos
创建1个主分区,使用所有容量
显示分区表信息
格式化sdb1分区
创建挂载点目录
手动挂载并启用quota功能选项 lsblk 或 fdisk -l | grep sd
parted -s /dev/sdb mklabel msdos
parted -s /dev/sdb mkpart primary ‘1 -1‘
lsblk 或 fdisk -l | grep sd
mkfs.ext4 /dev/sdb1
mkdir /b1
mount -o usrquota,grpquota /dev/sdb1 /b1
自动挂载,并启用磁盘配额选项 vi /etc/fstab 添加如下内容
/dev/sdb1 /b1 ext4 defaults,usrquota,grpquota 0 0
挂载fstab中的所有分区,显示执行过程
查看硬盘剩余空间
查看/b1目录中的文件列表
在/b1挂载点目录生成quota的主配置文件
激活配额方案(必做)
查看/b1目录中是否有aquota.user和aquota.group文件 mount -av
df
ls /b1
qoutacheck -cvug /b1
quotaon /b1
ls /b1
修改用户创建的家目录的基目录
创建用户u1
创建用户u2
显示quota配额报表信息 useradd -Db /b1
useradd u1
useradd u2
repquota -av
给u1和u2用户分别设置配额,设置方法如下
edquota -u u1 下面是设置2M的软限制,5M的硬限制
edquota -u u2 下面是文件数量的软限制为10个文件,硬限制为15个文件
查看配额状态 quotastatus
切换到u2用户 ,做数据写入测试
显示当前工作目录
创建文件a、b
创建更多文件,会警告用户“超出限额”
显示文件名列表
退出u2用户的登录 su - u2
pwd
touch a b
touch c d e f g
ls
exit
切换到u1用户 ,做数据写入测试
显示当前工作目录
用dd命令创建一个2兆的文件
复制2m文件为22m
查看当前用户的配额状态 su - u1
pwd
dd if=/dev/zero of=2m bs=1M count=2
cp 2m 22m
quota
cp 2m 222m
cp 2m 2222m
ll -h
exit
小结:
磁盘配额的控制原理:限制用户、组能在磁盘分区上存储文件的个数、或容量。
附加任务:将/dev/sdd硬盘创建一个分区,然后格式化,再挂载到/d1目录中(并启用磁盘配额),设置配额的要求如下:
生成sdd1分区的quota主配置文件:quotacheck -uvg /dev/sdd1
d1用户:只允许创建5个文件,当创建2个文件时提醒用户“清理文件”
d2用户:只允许存入6M的文件,当容量使用了3M时提醒用户“清理文件”
quota精简笔记OK版:
说明:以下是对sdf硬盘创建一个主分区,然后对这个分区的文件系统做quota磁盘配额控制。
lsblk 显示块设备
parted -s /dev/sdf mklabel msdos 设置分区表格式标签为msdos(即MBR分区表)
parted -s /dev/sdf mkpart primary ‘1 -1 ‘ 创建主分区,使用所有容量
lsblk 显示块设备
mkfs.ext4 /dev/sdf1 格式化sdf1分区为ext4文件系统
mkdir -pv /f1 创建挂载点目录
mount -o usrquota,grpquota /dev/sdf1 /f1 手动挂载sdf1设备,并使用磁盘配额功能
setenforce 0 临时关闭Selinux安全功能
getenforce 查selinux的工作状态
quotacheck -cvug /f1 生成quota主配置文件
ls /f1 显示/f1目录的文件名列表
quotaon -v /f1 激活quota功能,如果未激活,后期切换到用户后,用quota查状态会出没有权限
useradd -Db /f1 修改useradd创建用户时的用户家目录的基目录为/f1
useradd fa 创建fa用户
repquota -av 显示quota配额状态信息报表
edquota -u fa 给fa用户设置文件数量配额,软限制为15个文件,硬限制为18个文件。
su - fa 切换到fa用户
quota 显示当前用户的quota配额使用状态信息
touch {1..5} 会提示quota exceeded配额超出,即超出了软限制。
touch {6..10} 会提示超出磁盘限额,无法创建。即超出了硬限制。
exit 退出当前用户
edquota命令补充:
将fa用户的配额方案复制给fb用户:edquota -p fa zk
文件系统、软、硬链接(新版)
文件系统(file system):
磁盘上组织文件的方法,成为文件系统。
文件系统是对存储空间的管理和分配,负责文件的存储并对存入的文件进行保护和检索的系统
数据在磁盘或分区的存储形式。用来管理文件存储的体系结构。把整个的硬盘按照文件系统的规格分为一个个等大小的block。
一本书结构: 书名----》目录(标题、页码)----》正文(标题、正文内容)data block
硬盘的存储结构: 分区----》文件系统(文件名标题、inode编号)----》block数据块----》sector扇区
用户访问硬盘上的文件的流程:cat /etc/hosts
文件名/etc/hosts----> inode节点号----》正文(多个block数据块)
注:默认一个block块是4KB(等于512byte*8),即一个块占用8个扇区(sector)。
0.windows的文件系统:fat fat32 ntfs
fat:是文件分配表(File Allocation Table)的缩写。即格式化时自动生成的文件系统表。
fat32的缺点:只能存储单个小于4G的文件,如果做文件共享安全性差。
ntfs的优点:是新技术文件系统(new technology file system)的缩写。支持存储单个大于4G的文件,安全性高,可以对每个文件单独设置权限(FACL)。
windows中将fat32转成ntfs,且不会丢失数据的方法:在cmd下用convert 盘符 /fs:ntfs
例:convert /?
convert x: /fs:ntfs
磁盘扫描和自动修复错误:chkdsk 盘符 例:chkdsk d: /f /f是强制扫描并修复
1.linux的文件系统:ext2 ext3 ext4 xfs
ext: EXT是延伸文件系统(英语:Extended file system,缩写为 ext或 ext1),也译为扩展文件系统,一种文件系统,于1992年4月发表,是为linux核心所做的第一个文件系统。
文件系统结构:
super block: 超级块,不同的文件系统不相同,记录该文件系统的整体信息,包括inode/block总量,使用量,剩余量以及文件系统的格式及相关信息等。 超级块坏了,分区的文件系统就不能挂载使用。
注意:super block损坏的话,可以用磁盘扫描命令工具进行扫描和修复。如e2fsck、xfs_ncheck、xfs_repair就是扫描和修复的命令。
inode(i节点,索引节点):即书籍目录的页码,记录文件的属性(文件的大小,权限,时间,i节点的编号等),inode对应的文件名是记录在block数据块中。一个文件占用一个i节点号,同时i节点要记录文件数据所对应的block编号。
inode的数量和你能够创建文件的数量有关
如果多个文件的i节点相同,说明他们是相同的文件
block(数据块):实际记录文件的内容的,一个文件可能占用多个block。
文件名1 ―――〉1号inode----〉block数据块(正文)―――>扇区
文件名2―――/
2.文件存储形式
说明:下图表达的意思是通过cat /etc/passwd的看文件内容的打开过程。
文件名存在目录里。
- /etc/passwd文件是如何被找到的?
/etc/passwdls -id / 或 stat / 显示根目录的i节点号
2 /
ls -id /etc 显示/etc目录的i节点号
784899 /etc
ls -i /etc/passwd 显示/etc/passwd文件的i节点号
795496 /etc/passwd
ln链接文件
硬链接:hard link,是指建立inode号和文件名之间的链接关系。同一个inode号可以对应多个文件名。
硬链接的创建:ln 源文件名 新文件名
硬链接访问文件的过程:硬链接文件名--->inode号--->block数据块――〉sector扇区
硬链接的缺点:1.目录不能创建硬链接 2.硬链接不能跨分区来创建
硬链接的应用场景:可以通过硬链接功能来实现文件的备份功能,这种备份方法可以节省一定的磁盘空间。
注意:/etc/passwd、/etc/shadow、/etc/group、/etc/gshadow是无法用ln命令硬链接方式来备份的,因为创建和删除用户后,这几个文件的inode号是会发生变化的。
ln硬链接练习:切换到当前用户的家目录,将/etc/passwd文件的前3行内容覆盖写入到当前目录中的pa文件中。然后给pa文件创建一个硬链接文件pb,查看pa、pb文件的inode信息,用cat查看pa、pb文件的内容,再将date命令的结果追加写入到pa文件中,再次查看pa、pb文件内容。
cd
head -3 /etc/passwd > pa
ln pa pb
ls -i pa pb
cat -n pa pb
date >> pa
cat -n pa pb
ln pa pc
ls -i pa
find / -inum 67157071 根据inode号查出对应的文件名
练习.给boot分区下的文件创建硬链接到根目录下,体验“硬链接不能跨分区来创建”的特点。
ln /boot/symvers-3.10.0-957.el7.x86_64.gz /ln-hard 会提示“无效的跨设备连接”
练习.执行以下命令,体验硬链接不能用于目录这个特点。
[root@localhost ~]# ln /etc /etcxx 错误提示如下
ln: "/etc": 不允许将硬链接指向目录
ln练习:通过硬链接功能将/etc目录中的yum.conf、hosts文件备份到/bak/etc目录中,备份的文件名跟原文件名相同。删除/etc/yum.conf和hosts文件,用硬链接方式恢复这两个文件。
mkdir -pv /bak/etc 创建备份目录
ln /etc/yum.conf /bak/etc/yum.conf 用硬链接功能备份/etc/yum.conf文件
ln /etc/hosts /bak/etc/hosts 用硬链接功能备份/etc/hosts文件
ls -i /etc/yum.conf /bak/etc/yum.conf /etc/hosts /bak/etc/hosts 查文件的inode号
rm -fv /etc/yum.conf /etc/hosts 删除指定的文件名
yum repolist 提示错误“找不到/etc/yum.conf文件”
ln /bak/etc/yum.conf /etc/yum.conf 用硬链接功能恢复/etc/yum.conf文件
ln /bak/etc/hosts /etc/hosts 用硬链接功能恢复/etc/hosts文件
软链接:soft link
又被称作符号链接、快捷方式。快捷方式的作用是方便用户快速访问到路径过于复杂(文件路径太长)的文件。快捷方式可以用于文件、目录,还可以跨分区创建快捷方式。快捷方式中保存的是文件的访问路径信息。
软链接命令:ln -s 目标文件路径 软链接文件名
软链接访问文件的过程:软链接文件名--->目标文件名--->inode号--->block数据块――-〉sector扇区
例:切换到当前用户家目录,给/etc/sysconfig/network-scripts目录创建一个名称为net的软链接文件。用ls -li查看net软链接文件的属性。
cd
ln -s /etc/sysconfig/network-scripts net
ls -li net
练习:执行如下命令,体验在删除目标文件后,软链接出错的状态。
cd
cp -v /etc/hosts ht
ln -s ht hts
ls -li hts
cat hts 用hts软链接可以正常访问到ht的文件内容。访问逻辑hts--->ht--->inode--->block-->sector
rm -f ht
ls -li hts 结果中的文件名会出现红底色,即表明目标文件丢失了
cat hts 提示“cat: hts: 没有那个文件或目录”。因为hts文件对应的目标文件ht被我们删除了。
提问:用df -h查出硬盘有10G的剩余空间,我创建文件时却提示空间不够,可能是什么原因导致的?
答:1.有可能是inode号用完了,用df -hi查inode的使用状态。然后用find命令找出0字节的文件,并把无用的0字节文件删除。
2.可能是用磁盘配额功能限制了用户的文件创建数量。
4.查看文件系统信息
df -hT 查看磁盘空间状态,并显示分区的文件系统类型
xfs_info /dev/sda1 注:此命令仅用于xfs家族文件系统
dumpe2fs -h /dev/sdb1 注:此命令仅用于ext家族文件系统
Inode count: 61056
Block count: 243968
Filesystem state: clean //说明该文件系统没有问题
Inode count: 131072 inode号的总数
Block count: 523776 block块的数量
Reserved block count: 26188 预留块的数量
Free blocks: 505812 空闲的块数
Free inodes: 131061 空闲的inode总数
Block size: 4096 //block块大小 4KB
Inode size: 256 //每个inode大小
xfs(连按tab键2下) 显示xfs文件系统管理命令列表
xfs_info /dev/sda1 注:此命令仅用于xfs家族文件系统
即使创建一个空白文件,他也需要256字节作为inode;如果有内容,即使他的内容大小不到一个块,也会占用一个块的空间。即块是最小分配单位。
5、查看磁盘分区空间的使用状态:
df
df -hT 人性化(human)显示磁盘分区容量使用状态,并显示文件系统类型(Typer)
df -i 查看磁盘分区的inode使用状态
df -hi
注:当文件系统的inode号用完了,而容量空间还有剩余时,也是无法创建文件的。如何解决?
方法:删除系统中没有用的文件,来释放inode空间。
文件系统、软、硬链接(旧版)
metadata元数据:又称中介数据、中继数据,是用来描述数据的数据(data about data),主要是描述数据属性(property)的信息,用来支持如指示存储位置、历史数据、资源查找、文件记录等功能。元数据是关于数据的组织、数据域及其关系的信息。
人看书的过程:先看书名―――〉再看目录中的章节标题―――〉找到页码―――〉找到正文内容。
在Linux系统中的ln命令能够让用户创建出两种不同类型的文件快捷方式,一定要注意区分:
硬链接(hard link)可以被理解为一个“指向原始文件inode索引号的指针”,系统不为它分配独立的inode与文件,所以实际上来讲硬链接文件与原始文件其实是同一个文件,只是名字不同。于是每添加一个硬链接,该文件的inode连接数就会增加1,直到该文件的inode连接数归0才是彻底删除。概括来说因为硬链接实际就是指向原文件inode的指针,即便原始文件被删除依然可以通过链接文件访问,但是不能跨文件系统也不能链接目录文件。
查看文件名的inode号的方法:ls -li 文件名 或 stat 文件名
例如:ls -li /etc/hosts
stat /etc/passwd
hard link硬链接的功能:给同一个inode号指定多个文件名。
ln创建硬链接的命令格式:ln 源文件名 新文件名
硬链接的应用场合:提高文件的安全性,如果不小心删除了硬链接中的其中一个文件名,可以给备用的硬链接文件名重新创建一个硬链接名。
硬链接访问文件的过程:
文件名1--->inode索引号--->多个block块--->多个sector扇区
文件名2-----↑ ↑
文件名3-----------↑
项目任务:将passwd文件中的前3行内容覆盖写入到/pa.txt文件中,然后给/pa.txt创建2个硬链接文件/pb和/pc,查看这三个文件的详细信息(即属性)。然后用cat分别查看这三个文件的内容,最后查看这三个文件的状态信息。
将passwd文件的前3行覆盖写入/pa.txt中 head -3 /etc/passwd > /pa.txt
进入/根目录 cd /
给pa.txt创建硬链接文件pb ln pa.txt pb
给pa.txt创建硬链接文件pc ln pa.txt pc
查看/根目录中包含p字母的所有文件的属性 ls -li / |grep p
cat /pa.txt ; cat /pb ;cat /pc
查看/pa.txt、/pb、/pc文件的状态信息 stat /pa.txt /pb /pc
项目任务:将/etc目录中的fstab、hosts、inittab文件用硬链接的方式备份到/fbak目录中,然后删除/etc/hosts文件,再用硬链接的方式恢复hosts文件到/etc目录中,查看这两个hosts文件的inode号是否一致,查看内容是否一致。
mkdir /fbak
cd /etc
ln fstab /fbak/fstab.bak
ln hosts /fbak/hosts.bak
ln inittab /fbak/inittab.bak
用硬链接的方式恢复hosts文件 rm -f /etc/hosts
cat /etc/hosts
ln /fbak/hosts.bak /etc/hosts
ls -li /fbak/hosts.bak /etc/hosts
stat /fbak/hosts.bak /etc/hosts
cat /fbak/hosts.bak
cat /etc/hosts
警告:group、passwd、shadow用户和组的相关文件不能用硬链接的方式备份,因为每次创建、删除用户时,系统会重新创建passwd文件,导致此文件的inode索引号发生变化。
警告2:硬链接不能跨分区,也就是sdb1分区上的文件名不能创建硬链接到sdc1分区中。
软链接也称为符号链接(symbolic link)即“仅仅包含它索要链接文件的路径名”因此能做目录链接也可以跨越文件系统(即跨分区),但原始文件被删除后链接文件也将失效,如同Winodw?中的“快捷方式”。
软链接的应用场合:当某个文件或文件夹的路径太长了,我们可以在/根目录中给它创建一个软链接(即快捷方式),访问起来更方便。
软链接访问文件的过程:
软链接名--->源文件名--->inode索引号--->多个block块--->多个sector扇区
项目任务:将passwd文件中的前3行内容覆盖写入到/sa.txt文件中,然后给/sa.txt创建1个硬链接文件/h1,创建1个软链接/s1,查看这三个文件的详细信息(即属性)。然后用cat分别查看这三个文件的内容,最后查看这三个文件的状态信息。删除/sa.txt文件。
将passwd文件的前3行覆盖写入/pa.txt中 head -3 /etc/passwd > /sa.txt
进入/根目录 cd /
给sa.txt创建硬链接文件h1 ln sa.txt h1
给sa.txt创建软链接文件s1 ln -s sa.txt s1
查看根目录中的sa.txt和h1文件的详细信息 ls -li /sa.txt /h1 /s1
查看/sa.txt、/h1、/s1文件的状态信息 stat /sa.txt /h1 /s1
删除sa.txt文件 rm -f /sa.txt
查看/h1、/s1文件的属性及inode索引号 ls -li /h1 /s1 发现s1属性最右边的sa.txt变红色块了,说明sa.txt文件丢失了
用/h1这个硬链接来恢复/sa.txt文件 ln /h1 /sa.txt 然后用上一条命令查看文件的属性有何变化
ln命令用于创建链接文件,格式为:“ln [选项] 目标”。
创建硬链接:“ln 文件名 链接名”
创建软链接:“ln -s 文件名 连接名”
选项 作用
-s 创建"符号链接"(默认是硬链接)
-f 强制创建文件或目录的链接(强制覆盖已存在的文件名)
-i 覆盖前先询问
-v 显示创建链接的过程
对/etc目录做出一个名为etcs的软连接。
[root@sky ~]# ln -s /etc /etcs
[root@sky ~]# ls -ld /etc*
根据索引号查文件名:find / -inum 索引号
例:
小结
看书过程:看书的目录标题====〉找到标题所在的页码====〉看正文内容。
文件的链接:
硬链接:给一个索引号指定多个文件名。通过这些文件名都可访问到同一个文件内容。
硬链接不能跨文件系统(即跨分区)创建。
硬链接访问文件内容的过程:文件名====〉inode索引号===〉blocks数据块
硬链接的创建:ln 源文件名 新文件名
例:ln /etc/hosts h1
软链接:给一个文件名创建一个符号链接(即快捷方式)。通过这个软链接名都可访问到目标文件名的文件内容。
软链接可以跨文件系统(即跨分区)创建。
硬链接访问文件内容的过程:软链接文件名====〉目标文件名====〉inode索引号===〉blocks数据块
硬链接的创建:ln -s 源文件名 新文件名
例:ln -s /etc/hosts h2
任务:进入当前用户的家目录,查看当前工作路径,在当前目录中给/etc /hosts创建硬链接ha、hb,再给ha创建一个软链接hs,查看ha、hb、hs的文件属性和索引号。删除ha文件,查看hs文件的属性,解释hs右边为什么会出现红色块。再恢复ha文件。再看hs文件的属性。
U盘启动制作软件:
WinPE启动盘:老毛桃U盘启动、深度、大白菜、U启动……
Linux和Windows系统原安装版U盘启动制作:UltraISO、WinSetupFromUSB多合启动制作
U盘启动制作流程:
1、准备必备的软件和系统安装镜像ISO文件
2、插上U盘,备份U盘上的原有数据到硬盘中。(因为制作时会格式化U盘,清空U盘中原始的数据)
3、打开U盘启动制作软件ultraISO,打开系统安装镜像ISO文件。
4、在U盘启动制作软件中点击“启动――写入硬盘映像――写入”等操作开始制作启动盘。等待制作完毕。
5、测试U盘是否能正常启动。
Linux进程管理
进程管理目标
1、进程的概念,进程的前后台切换。
2、进程的查询top/ps、结束kill
3、进程的优先级(nice/renice)调整
进程管理的命令和快捷键:
ctrl+c、ctrl+z、&、jobs、fg、bg、pstree、ps、top、uptime、vmstat、pidof、kill、killall、nice、renice……
程序program:具备某种功能的软件文件。例:ls、cd、word软件等命令程序。
进程process:正在运行的程序。程序在内存中运行的过程就产生进程。最少产生一个进程。大程序在运行时会产生一个主进程(即父进程,公司老大),然后再产生一些子进程(公司的职员)。
显示进程状态:ps
查系统的进程树:pstree
进程前后台操作用到以下命令或按键:
功能键 功能说明 功能键 功能说明
Ctrl+C 强制终止前台命令(正在运行的程序) 命令 & 在后台运行某个命令。例:firefox &
Ctrl+Z 挂起(最小化)。即暂停前台命令,放到后台 fg N 将任务号为N的进程切到前台(最大化)。例:fg 2
jobs 查看当前在后台执行的命令 bg N 激活任务号为N的后台进程。例:bg 3
进程的前后台切换:
例:执行以下任务,熟悉进程的后台运行功能。
在后台运行tail命令
查看后台工作任务
强制结束指定pid的进程 tail -0f /var/log/secure &
jobs -l
useradd ak
userdel -r ak
kill -9 进程pid号 进程pid号 进程pid号
例:执行以下任务,熟悉进程的前后台切换功能。
执行ping命令
将进程切到后台运行(即挂起)
查看所有的后台任务
将任务2切换到前台执行
强制结束进程的任务 ping 127.1
ctrl+z
ping 127.2
ctrl+z
ping 127.3
ctrl+z
jobs
fg 2
ctrl+c
例:进入/tmp目录,将vi、vim、ping在后运行,查后台进程,强制结束vi、vim的所有进程。
进入/tmp目录
在后运行vi a命令
在后运行vi a命令
在后台运行ping命令
查后台任务
强制结束所有vi、vim命令的进程
强制结束ping命令的所有进程
显示所有的信号名称 cd /tmp
vi a &
vim b &
ping 127.1 > /dev/null &
ping 127.2 > /dev/null &
jobs
killall -9 vi vim
jobs -l
killall -9 ping
kill -l (kill信号在后面介绍)
进程的前后台切换管理:&、jobs、fg、bg、ctrl+z、ctrl+c、ctrl+d
符号 功能
& 在后台运行某个程序。例如:tail -0f /var/log/secure &
ctrl+z 挂起(即最小化),将前台进程切换到暂停运行。例如:vi a1.txt 回车后按ctrl+z将vi切到后台
jobs 查看后台的任务,如jobs -l
fg 切换进程到前台(即最大化)。例如:fg 2 将任务2切换到前台执行
bg 激活(SIGCONT)后台任务,让后台任务从暂停状态转换为运行状态。
ctrl+c 强制终止(TERM)正在前台运行的进程
项目实验:进程前后台切换
进入/tmp目录
将vi 1.txt在后台运行
将vi 2.txt在后台运行
执行ping命令,并将当前命令切换到后台
执行ping命令,并将当前命令切换到后台
查看所有后台任务
将后台任务切换到前台
将任务切换到后台
查看当前用户的所有进程和父子进程关系
结束vi、ping的所有进程 cd /tmp
vi 1.txt &
vi 2.txt &
ping 127.0.0.1 回车后按ctrl+z
ping 127.0.0.2 回车后按ctrl+z
jobs -l
fg 工作号
ctrl+z
ps uf
killall -9 vi ping
pstree查看进程树
相关的信息:第1个进程是systemd(centos7)或init(centos6),进程号(pid)为1,以及进程之间的父子关系。
例:用top动态显示pid为1,2,3,0的进程状态。然后按q键退出top命令的操作界面。
top -p 1,2,3,0 注: 0 表示最后一个进程
ps查进程状态:ps [选项] 例(最常用):ps aux 注:以下绿底色为重点选项
选项 功能 实例
a 显示当前用户的所有进程。 ps a
u或-u 指定ps输出格式为用户名、pid、%cpu等 ps u 或ps -u 以用户为主的进程状态
f 以_格式显示进程之间的父子关系 ps f
x 显示当前用户终端和其他控制终端的进程 ps xa 显示ps的较完整信息
e 显示进程的运行环境(environment) ps e
l 以长格式显示,可以查出进程的线程 ps l 会显示进程的pid、PR、NI、完整命令等信息
-C 查看指定命令的进程状态 ps f -C sshd,systemd 查看sshd,systemd命令的进程
-p 查看指定PID的进程状态 ps -fp 1,2 查看进程号为1,2的进程
U 查看指定用户的进程状态 ps uU jin 查看jin用户的进程
-a : 显示现行终端下的所有进程,包括其他用户的进程 -A :显示所有进程,与 -e 具有同样的效用
输出格式规划:
l :即long较长、较详细的将该 PID 的的信息列出; j :工作的格式 (jobs format)
-f :做一个更为完整的输出。
显示所有的进程:ps aux 最常用的组合
显示所有进程中包含tty关键字的信息:ps aux|grep tty
显示4号终端的所有进程:ps -t 4
ps u 查到的信息简介:
USER:执行进程的用户
PID: 进程的ID号
%CPU:CPU的占用率
%MEM:内存占用率 VSZ:占用虚拟内存的容量
RSS:占用共享内存的容量
START:进程的启动时间
TTY:进程的终端 (切换终端的快捷键ctrl+Alt+F1~F6,用tty命令查看当前终端号)
STAT:进程的状态
状态中Ss+中的S表示进程处理状态为Sleep或Stop, s表示此进程存在子进程,+存在一个进程组(未展开显示)
状态中R+中的R表示进程正在运行,+存在一个进程组(未展开显示)
TIME:进程运行所使用的时间 COMMAND:进程的命令
ps其他案例
由于 ps 能够支持的系统类型相当的多,所以他的参数多的离谱!
而且有没有加上 - 差很多!详细的用法应该要参考 man ps 喔!
例1:将目前属于您自己这次登入的 PID 与相关信息列示出来
各相关信息的意义为:
F 代表这个程序的旗标 (flag), 4 代表使用者为 superuser;
S 代表这个程序的状态 (STAT);
#UID 代表执行者身份
PID 进程的ID号!底下的 PPID 则父进程的ID;
C CPU 使用的资源百分比
PRI 指进程的执行优先权(Priority的简写),其值越小越早被执行;PRI值越小优先级越高
NI 这个进程的nice谦让值,其表示进程可被执行的优先级的修正数值。范围 从 -20 (最高级) 到 19 (最低级).
ADDR 这个是内核函数,指出该程序在内存的那个部分。如果是个正在执行 的程序,一般就是『 - 』
SZ 使用掉的内存大小;
WCHAN 目前这个程序是否正在运作当中,若为 - 表示正在运作;
TTY 登入者的终端号;
TIME 使用掉的 CPU 时间。(CPU处理信息所耗掉的时间)
CMD 所下达的指令名称
例2:列出目前所有的正在内存当中的程序
? USER:该进程属于那个使用者账号的?
? PID :该进程的进程ID号。
? %CPU:该进程使用掉的 CPU 资源百分比;
? %MEM:该进程所占用的物理内存百分比;
? VSZ :该进程使用掉的虚拟内存量 (Kbytes)
? RSS :该进程占用的固定的内存量 (Kbytes)
? TTY :该进程是在那个终端机上面运作,若与终端机无关,则显示 ?,另外, tty1-tty6 是本机上面的登入者程序,若为 pts/0 等等的,则表示为由网络连接进主机的程序。
? STAT:该程序目前的状态,主要的状态有:
? ?R :该程序目前正在运作(running),或者是可被运作;
? ?S :该程序目前正在睡眠(sleep)当中 (可说是 idle 状态啦!),但可被某些讯号(signal) 唤醒。
? ?T :该程序目前正在侦测或者是停止(stop)了;
? ?Z :该程序应该已经终止,但是其父程序却无法正常的终止他,造成 zombie (僵尸) 程序的状态。属于进程异常。
孤儿进程:父进程死了,子进程还存活着。属于进程异常。
? START:该进程被触发启动的时间;
? TIME :该进程实际使用 CPU 运作的时间。
? COMMAND:该程序的实际指令为什么?
例3:以例一的显示内容,显示出所有的程序
例4:列出类似程序树的程序显示
例5:找出与 cron、syslog、systemd(init) 这两个服务有关的 PID 号码。egrep等同于grep -E命令。
选做的任务:
1、查找当前目录下占用为0字节的文件并删除
find ./ -type f -size 0 -exec rm -rf {} \;??? #此命令不要用于对根目录0字节文件的操作
2、将系统进程按内存占用大小排列显示出来
ps -e??-o “%C?? : %p : %z : %a”|sort -k5-nr???
3、将系统进程按CPU占用大小排列显示
ps -e??-o “%C?? : %p : %z : %a”|sort?? -nr
4、匹配某文件中某一行并进行内容替换
sed -i ‘/Root/s/no/yes’/etc/ssh/sshd_config??? #先匹配到Root,再将此行no替换为yes
5、显示所有运行级别为3并开机启动的服务
ls /etc/rc3.d/S* |cut -c 15-??? #rc3.d中S开头即为运行级别3的服务,并用cut截取第15个字符后面的内容
6、取得eth0网卡的IP地址?
方法1:ifconfig?? | grep ‘inet addr‘ | grep -v ‘127.0.0.1‘ | cut -d:-f2 | awk ‘{ print $2}‘
方法2:ifconfig eth0 |grep ‘inet addr‘ |awk ‘{print $2}‘
7、TCP抓包工具分析80、22端口数据流
tcpdump -c 10000 -i eth0 -n dst port 80
tcpdump -c 10000 -i eth0 -n dst port 22
tcpdump -c 10000 -i eth0 -n dst port 53
8、查询昨天的日期
date -date=yesterday
9、删除所有空目录
find /data -type d -empty -exec rm -rf {};??? #最好不要在/目录下执行此命令
10、删除5天前的文件
find /data -mtime +5 -type f -exec rm -rf{} \;
11、强制踢出终端用户
pkill -KILL -t pts/1
12、将来自80端口的请求转发到8080端口
iptables -A PREROUTING -p tcp -m tcp -dport80 -j DNAT -to-destination 127.0.0.1:8080
13、Linux服务器之间传文件
scp ~/install.log root@192.168.100.6:/tmp/??? #将个人主目录下install.log传到远程主机的/tmp目录下
14、对大文件进行分割
split -l 1000 message.log message??? #按每个文件1000行来分割
split -b 5m message.log message??? #按每个文件5M来分割
top命令简介
top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器。下面详细介绍它的使用方法。top是一个动态显示过程,即可以通过用户按键来不断刷新当前状态.如果在前台执行该命令,它将独占前台,直到用户终止该程序为止.比较准确的说,top命令提供了实时的对系统处理器的状态监视.它将显示系统中CPU最“敏感”的任务列表.该命令可以按CPU使用.内存使用和执行时间对任务进行排序;而且该命令的很多特性都可以通过交互式命令或者在个人定制文件中进行设定.
1.命令格式:
top [选项]
2.命令功能:
显示当前系统正在执行的进程的相关信息,包括进程ID、内存占用率、CPU占用率等
3.命令选项:
-b批处理
-c 显示完整的治命令
-I 忽略失效过程 -s 保密模式
-S 累积模式
-i<时间> 设置间隔时间
-u<用户名> 指定用户名
-p<进程号> 指定进程
-n<次数> 循环显示的次数
4.使用实例:
top动态查看进程状态:(按q键退出)
查看pid为0,1,2,3,4,5的进程:top -p 0,1,2,3,4,5
top命令信息的功能解释
top命令 系统时间 运行的时间 登录了2个用户 加载程序的平均时间
Tasks任务总数 1个正在运行 114个休眠 2个停止 0个僵尸进程
物理内存总容量 已使用的物理内存 未使用的物理内存 缓冲区内存
Swap虚拟内存 已使用0k 未使用的swap 高速缓存
PID号 进程的所有者 优先级 nice值
PID — 进程id USER — 进程所有者 PR — 进程优先级 NI — nice值。负值优先级高,正值优先级低
VIRT — 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES SHR — 共享内存大小,单位kb
RES — 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA
S — 进程状态。D=不可中断的睡眠状态 R=运行 S=睡眠 T=跟踪/停止 Z=僵尸进程
T状态在后台stopped暂停运行的进程。例如:vim a.txt &,再用ps uf查进程状态就可以看到T状态。用fg可以将T状态的进程调到前台运行。
%CPU — 上次更新到现在的CPU时间占用百分比 %MEM — 进程使用的物理内存百分比
TIME+ — 进程使用的CPU时间总计,单位1/100秒 COMMAND — 进程名称(命令名/命令行)
top的内部命令
h显示命令帮助 c显示进程的完整命令 n 设置每页显示的进程最大行数
r 调进程的优先级:r--->输入pid--->输入nice谦让值(nice取值范围是-20~19,nice值越小,PR优先级越高)
系统中PR的初始值是20,nice值是0,新的PR值=20+nice值
k结束进程:k--->输入pid--->信号(9强制结束)
用ctrl+c的信号2终止top进程:k --->输入pid--->信号2
用信号3正常退出top命令(相当于q键退出):k --->输入pid--->信号3
< 切换到上一页 > 切换到下一页 z彩色显示信息 b 高亮显示记录(要配合x、y使用)
x临时设置排序字段(要配合b或z使用),用<>来切换排序字段。 R 切换升序、降序
y高亮显示正在运行的进程 F 临时设置默认的排序字段 f 临时设置要显示的字段
o 修改显示的列的顺序。进入后按大写字母上移,小写字母下移 W 将当前设置写入~/.toprc文件中
m 切换显示内存信息 t 切换显示进程和CPU状态信息 S 切换到累计模式 n设置显示的行数
top的任务实践
1.显示进程号PID值为0,1,2,3,4,5的进程,并在top中显示完整命令:top -c -p 0,1,2,3,4,5
进入top界面后,按z键彩色显示,按b键高亮显示,按x键显示排序字段,按y键高亮显示正在运行的进程。
2.显示进程排序字段
续接第1个任务,按x键高亮显示排序字段,按<或>键切换排序字段。按R键切换升序、降序。
3.以%CPU、%MEM、TIME+进行排序
续接第2个任务,按M以%MEM列进行排序,按P以%CPU列进行排序,按T键以TIME+列进行排序。
4.调整进程的优先级
续接第第3个任务,按r键,输入进程pid值2回车,输入nice值-6回车,然后查看pid值为2的进程的PR值和NI值的变化。
5.W保存当前设置到~/.toprc配置文件
续接第4任务,按W将设置写入到~/.toprc配置文件。下次打开top程序会按现在的设置运行。
6.结束top进程
续接第5个任务,按k键,输入top的进程pid值回车,输入kill信号2回车,用ctrl+L清屏,看top命令是否结束。
7.以累积模式(-s)显示程序信息
命令:top ?-S -c -p 0,1,2,3,4,5
8.设置信息更新次数
命令:top? -n ?2 -p 0,1,2,3,4 说明:表示更新两次后终止更新显示
9.设置信息更新时间
命令:top ?-d?2 –c -p 0,1,2,3,4 功能:表示更新周期为2秒
- 每隔2500毫秒刷新(-d 2.5)一次TOP内容,总共2次(-n 2),输出内容存放到performace.txt文件中
命令:top -b -d 2.5 -n 2 -p 0,1,2 > performace.txt
注:要将内容输出到文件中,必须使用-b,表示批处理选项
top管理进程的任务2:
执行ping命令
将命令切换到后台执行
查ping命令的所有进程信息(命令OK)
查ping的pid值
用top查看指定pid的进程信息
调整此进程的nice值
用ctrl+c的信号终止此pid的进程
强制结束此pid的进程
退出top程序
结束所有ping命令的进程 ping 127.1
ctrl+z
ping 127.2
ctrl+z
ping 127.3
ctrl+z
ps -fC ping
pidof ping
top -p pid值1,pid值2 回车后按c键显示完整命令
r--->输入ping 127.3的pid值--->输入nice值-8
k--->输入ping 127.3的pid值--->信号2 (会发现无法中止)
k--->输入ping 127.3的pid值--->信号9
q
killall -9 ping
top的选项 top -p pid值 查看指定pid的进程信息
top -u 用户名 查看指定用户的进程信息 top -p 0,1,2,3
top -u gdm
top交互命令详解
在top?命令执行过程中可以使用的一些交互命令。这些命令都是单字母的,如果在命令行中使用了s?选项,?其中一些命令可能会被屏蔽。
h?显示帮助画面,给出一些简短的命令总结说明
n 设置每页显示的进程行数最大值
k?终止一个进程。
i?忽略闲置和僵死进程。这是一个开关式命令。
q?退出程序
r?重新安排一个进程的优先级别
S?切换到累计模式
T?根据时间/累计时间进行排序
W?将当前设置写入~/.toprc文件中 f或者F?从当前显示中添加或者删除项目
o或者O?改变显示项目的顺序
l?切换显示平均负载和启动时间信息
m?切换显示内存信息
t?切换显示进程和CPU状态信息
c?切换显示命令名称和完整命令行
M?根据驻留内存大小进行排序
P?根据CPU使用百分比大小进行排序
s?改变两次刷新之间的延迟时间(单位为s),如果有小数,就换算成m?s。输入0值则系统将不断刷新,默认值是5?s
kill命令发送信号
命令格式:killall 信号 命令名
命令格式:kill 信号 进程pid号
例:在后台运行两个ping命令,查看后台任务,然后用killall -9 ping结束掉这两个进程。
功能说明 操作命令
在后台执行ping 127.1命令
在后台执行ping 127.2命令
在后台执行ping 127.3命令
将任务2切换到前台
将当前任务切换到后台 ping 127.1 &>/dev/null &
ping 127.2 &>/dev/null &
ping 127.3 &>/dev/null &
fg 2
ctrl+z
查看后台任务
查看当前用户进程中包含ping的信息
查看ping的pid号
强制结束所有的ping命令 jobs
ps u | grep ping 或ps -fC ping
pidof ping
killall -9 ping
kill信号说明:kill -l
进程管理中kill常用的信号:
1) SIGHUP 重新加载程序的配置文件,通常‘systemctl reload 服务名‘就是给daemon守护进程发HUP信号。
2) SIGINT 程序终止(中止进程),等同于ctrl+c 3) SIGQUIT 程序退出,等同于q键退出指令
9) SIGKILL 立即强制结束程序的运行(强杀) 15) SIGTERM 程序正常结束(terminate)信号[exit命令]
18)CONT 继续、激活(与STOP相反, fg/bg命令) 19)STOP 暂停(同 Ctrl + Z) 20) SIGTSTP
1) SIGHUP
本信号在用户终端连接(正常或非正常)结束时发出, 通常是在终端的控制进程结束时, 通知同一session内的各个作业, 这时它们与控制终端不再关联。
登录Linux时,系统会分配给登录用户一个终端(Session)。在这个终端运行的所有程序,包括前台进程组和后台进程组,一般都属于这个Session。当用户退出Linux登录时,前台进程组和后台有对终端输出的进程将会收到SIGHUP信号。这个信号的默认操作为终止进程,因此前台进 程组和后台有终端输出的进程就会中止。不过可以捕获这个信号,比如wget能捕获SIGHUP信号,并忽略它,这样就算退出了Linux登录,wget也 能继续下载。
此外,对于与终端脱离关系的守护进程,这个信号用于通知它重新读取配置文件。
2) SIGINT
程序终止(interrupt)信号, 在用户键入INTR字符(通常是Ctrl-C)时发出,用于通知前台进程组终止进程。
3) SIGQUIT
和SIGINT类似, 但由QUIT字符(通常是Ctrl-)来控制. 进程在因收到SIGQUIT退出时会产生core文件, 在这个意义上类似于一个程序错误信号。
4) SIGILL
执行了非法指令. 通常是因为可执行文件本身出现错误, 或者试图执行数据段. 堆栈溢出时也有可能产生这个信号。
5) SIGTRAP
由断点指令或其它trap指令产生. 由debugger使用。
6) SIGABRT
调用abort函数生成的信号。
7) SIGBUS
非法地址, 包括内存地址对齐(alignment)出错。比如访问一个四个字长的整数, 但其地址不是4的倍数。它与SIGSEGV的区别在于后者是由于对合法存储地址的非法访问触发的(如访问不属于自己存储空间或只读存储空间)。
8) SIGFPE
在发生致命的算术运算错误时发出. 不仅包括浮点运算错误, 还包括溢出及除数为0等其它所有的算术的错误。
9) SIGKILL
用来立即结束程序的运行. 本信号不能被阻塞、处理和忽略。如果管理员发现某个进程终止不了,可尝试发送这个信号。
10) SIGUSR1
留给用户使用
11) SIGSEGV
试图访问未分配给自己的内存, 或试图往没有写权限的内存地址写数据.
12) SIGUSR2
留给用户使用
13) SIGPIPE
管道破裂。这个信号通常在进程间通信产生,比如采用FIFO(管道)通信的两个进程,读管道没打开或者意外终止就往管道写,写进程会收到SIGPIPE信号。此外用Socket通信的两个进程,写进程在写Socket的时候,读进程已经终止。
14) SIGALRM
时钟定时信号, 计算的是实际的时间或时钟时间. alarm函数使用该信号.
15) SIGTERM
程序结束(terminate)信号, 与SIGKILL不同的是该信号可以被阻塞和处理。通常用来要求程序自己正常退出,shell命令kill缺省产生这个信号。如果进程终止不了,我们才会尝试SIGKILL。
17) SIGCHLD
子进程结束时, 父进程会收到这个信号。
如果父进程没有处理这个信号,也没有等待(wait)子进程,子进程虽然终止,但是还会在内核进程表中占有表项,这时的子进程称为僵尸进程。这种情 况我们应该避免(父进程或者忽略SIGCHILD信号,或者捕捉它,或者wait它派生的子进程,或者父进程先终止,这时子进程的终止自动由init进程来接管)。
18) SIGCONT
让一个停止(stopped)的进程继续执行. 本信号不能被阻塞. 可以用一个handler来让程序在由stopped状态变为继续执行时完成特定的工作. 例如, 重新显示提示符...
19) SIGSTOP
停止(stopped)进程的执行. 注意它和terminate以及interrupt的区别:该进程还未结束, 只是暂停执行. 本信号不能被阻塞, 处理或忽略.
20) SIGTSTP
停止进程的运行, 但该信号可以被处理和忽略. 用户键入SUSP字符时(通常是Ctrl-Z)发出这个信号
21) SIGTTIN
当后台作业要从用户终端读数据时, 该作业中的所有进程会收到SIGTTIN信号. 缺省时这些进程会停止执行.
22) SIGTTOU
类似于SIGTTIN, 但在写终端(或修改终端模式)时收到.
23) SIGURG
有"紧急"数据或out-of-band数据到达socket时产生.
24) SIGXCPU
超过CPU时间资源限制. 这个限制可以由getrlimit/setrlimit来读取/改变。
25) SIGXFSZ
当进程企图扩大文件以至于超过文件大小资源限制。
26) SIGVTALRM
虚拟时钟信号. 类似于SIGALRM, 但是计算的是该进程占用的CPU时间.
27) SIGPROF
类似于SIGALRM/SIGVTALRM, 但包括该进程用的CPU时间以及系统调用的时间.
28) SIGWINCH
窗口大小改变时发出.
29) SIGIO
文件描述符准备就绪, 可以开始进行输入/输出操作.
30) SIGPWR
Power failure
31) SIGSYS
非法的系统调用。
在以上列出的信号中,程序不可捕获、阻塞或忽略的信号有:SIGKILL,SIGSTOP
不能恢复至默认动作的信号有:SIGILL,SIGTRAP
默认会导致进程流产的信号有:SIGABRT,SIGBUS,SIGFPE,SIGILL,SIGIOT,SIGQUIT,SIGSEGV,SIGTRAP,SIGXCPU,SIGXFSZ
默认会导致进程退出的信号有:SIGALRM,SIGHUP,SIGINT,SIGKILL,SIGPIPE,SIGPOLL,SIGPROF,SIGSYS,SIGTERM,SIGUSR1,SIGUSR2,SIGVTALRM
默认会导致进程停止的信号有:SIGSTOP,SIGTSTP,SIGTTIN,SIGTTOU
默认进程忽略的信号有:SIGCHLD,SIGPWR,SIGURG,SIGWINCH
此外,SIGIO在SVR4是退出,在4.3BSD中是忽略;SIGCONT在进程挂起时是继续,否则是忽略,不能被阻塞
查看kill的所有信号列表:kill -l
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP
6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1
11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM
16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ
26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR
31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3
38) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8
43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7
58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2
63) SIGRTMAX-1 64) SIGRTMAX
结束进程的命令:kill、killall、xkill、pkill
命令格式 功能解释和实例
kill 信号 pid值 结束指定pid的进程。例如:kill -9 3308
pkill 信号 进程的命令 结束指定的命令的进程。例如:pkill -9 vi
结束指定tty终端的进程。例如:tty ; pkill -9 -t pts/3
killall 信号 进程的命令 结束指定的命令的所有进程。例如:killall -9 vi
xkill 单击窗口 结束指定的窗口。(用于Linux桌面环境)。例:xkill 然后点要结束的窗口
kill信号案例
A窗口的任务:ping 127.1 B窗口的任务:ps -fC ping ; kill -19 3348
A窗口的状态结果 B窗口的任务:kill -18 3848
A窗口的状态结果 B窗口的任务:kill -2 3848
A窗口的任务:top -c -p 0,1,2 B窗口的任务:ps -fC top ; kill -19 3348
进程优先级调整
调整进程的优先级:nice、renice
说明:进程的优先级nice调整的取值范围是-20~19共40个数值,数值越小,优先级越高,CPU优先处理优先级高的进程。调整优先级时PR是以20为基数+-新的优先级数值(PR=20+NI)。NI是以0为基数。
实例:在后运行ping 127.0.0.1和ping 127.0.0.2、ping 127.1,然后用pidof查看ping的进程PID值,用top查看ping的进程信息,然后用r调整进程的优先级。
执行ping命令,并切换到后台执行
执行ping命令,并切换到后台执行
执行ping命令,并切换到后台执行
查看ping命令的进程状态
查看所有ping命令的进程pid值 ping 127.0.0.1 回车后ctrl+z
ping 127.0.0.2 回车后ctrl+z
ping 127.1 回车后ctrl+z
ps -fC ping
pidof ping
top -p 15404,15403,15402 回车后按c显示ping的完整命令
调15404这个PID的优先级:r--->输入15404这个pid值----> -5优先级--->结果见下图
调15402这个PID的优先级:r--->输入15402这个pid值----> 8优先级--->结果见下图
运行程序时设置进程的优先级:nice
语法:nice [选项] 程序命令
选项说明:-n 数字 指定优先级
例如:在后台执行ping命令,将它的优先级设置为5,用top查看进程状态,q键退出top界面。
运行ping并设置nice值
查ping命令的进程状态
查看指定pid的进程状态
退出top命令
强制结束所有的ping命令 nice -n 5 ping 127.9 回车后用ctrl+z切换到后台
ps -fC ping 或 ps uf|grep 127.9
top -p pid值 请验证PR和NI的值,此时的PR是25,NI是5
q键退出top命令
killall -9 ping
修改进程的优先级:renice
语法:renice [选项] 参数
例如:在后台执行ping命令,查看ping 127.11的进程状态信息,将它的优先级设置为5,用top查看进程状态。最后结束所有关于ping命令的进程。
执行ping命令
查看ping命令的进程状态
重新设置指定pid的进程优先级
用top查看指定pid的进程状态
结束所有的ping命令
查看所有进程状态中包含ping命令的信息 ping 127.11 回车后用ctrl+z切换到后台
ps -fC ping 或 ps aux|grep 127.11
renice -n -5 -p 进程的pid值
top -n 1 -p pid值 (-n 1表示等待1秒后退出)
killall -9 ping
ps aux|grep ping
uptime命令
功能:显示系统启动时间,运行的总时间,已登录的用户数量,负载时间值。(top命令顶端会显示这些信息)
vmstat命令
功能:展现给定时间间隔的服务器的状态值,包括服务器的CPU使用率,内存使用,虚拟内存交换情况,IO读写情况。
命令格式:vmstat [采样间隔时间] [采样次数]
例:vmstat 2 1命令中的2表示每个两秒采集一次服务器状态,1表示只采集一次。
vmstat查询结果详解
r 表示运行队列(就是说多少个进程真的分配到CPU),我测试的服务器目前CPU比较空闲,没什么程序在跑,当这个值超过了CPU数目,就会出现CPU瓶颈了。这个也和top的负载有关系,一般负载超过了3就比较高,超过了5就高,超过了10就不正常了,服务器的状态很危险。top的负载类似每秒的运行队列。如果运行队列过大,表示你的CPU很繁忙,一般会造成CPU使用率很高。
b 表示阻塞的进程,这个不多说,进程阻塞,0表示没有进程阻塞。
swpd 虚拟内存已使用的大小,如果大于0,表示你的机器物理内存不足了,如果不是程序内存泄露的原因,那么你该升级内存了或者把耗内存的任务迁移到其他机器。
free 空闲的物理内存的大小,我的Linux虚拟机器内存总共1G,剩余477M(即477752K)。
buff Linux/Unix系统是用来存储,目录里面有什么内容,权限等的缓存,我本机大概占用48M多(即48212K)
cache cache直接用来记忆我们打开的文件,给文件做缓冲,我本机大概占用300M多(即307836K)(这里是Linux/Unix的聪明之处,把空闲的物理内存的一部分拿来做文件和目录的缓存,是为了提高 程序执行的性能,当程序使用内存时,buffer/cached会很快地被使用。)
si 每秒从磁盘读入虚拟内存的大小,如果这个值大于0,表示物理内存不够用或者内存泄露了,要查找耗内存进程解决掉。我的机器内存充裕,一切正常。
so 每秒虚拟内存写入磁盘的大小,如果这个值大于0,同上。
bi 块设备每秒接收的块数量,这里的块设备是指系统上所有的磁盘和其他块设备,默认块大小是1024byte,我本机上没什么IO操作,所以一直是0,但是我曾在处理拷贝大量数据(2-3T)的机器上看过可以达到140000/s,磁盘写入速度差不多140M每秒。
bo 块设备每秒发送的块数量,例如我们读取文件,bo就要大于0。bi和bo一般都要接近0,不然就是IO过于频繁,需要调整。实验测试的方法:开两个窗口,一个窗口用vmstat 2进行监测,另一个窗口用dd if=/dev/zero of=200m bs=100M count=2 创建一个200M的文件,监测窗口可以看到bi值的变化。
in 每秒CPU的中断次数,包括时间中断
cs 每秒上下文切换次数,例如我们调用系统函数,就要进行上下文切换,线程的切换,也要进程上下文切换,这个值要越小越好,太大了,要考虑调低线程或者进程的数目,例如在apache和nginx这种web服务器中,我们一般做性能测试时会进行几千并发甚至几万并发的测试,选择web服务器的进程可以由进程或者线程的峰值一直下调,压测,直到cs到一个比较小的值,这个进程和线程数就是比较合适的值了。系统调用也是,每次调用系统函数,我们的代码就会进入内核空间,导致上下文切换,这个是很耗资源,也要尽量避免频繁调用系统函数。上下文切换次数过多表示你的CPU大部分浪费在上下文切换,导致CPU干正经事的时间少了,CPU没有充分利用,是不可取的。
us 用户CPU时间,我曾经在一个做加密解密很频繁的服务器上,可以看到us接近100,r运行队列达到80(机器在做压力测试,性能表现不佳)。
sy 系统CPU时间,如果太高,表示系统调用时间长,例如是IO操作频繁。
id 空闲 CPU时间,一般来说,id + us + sy = 100,一般我认为id是空闲CPU使用率,us是用户CPU使用率,sy是系统CPU使用率。
wt 等待IO CPU时间。
netstat命令
netstat命令
netstat功能
netetstat 命令用于显示各种网络相关信息,如网络连接,路由表,接口状态 (Interface Statistics),masquerade 连接,多播成员 (Multicast Memberships) 等等。
输出信息含义
执行netstat后,其输出结果为
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 2 210.34.6.89:telnet 210.34.6.96:2873 ESTABLISHED
tcp 296 0 210.34.6.89:1165 210.34.6.84:netbios-ssn ESTABLISHED
tcp 0 0 localhost.localdom:9001 localhost.localdom:1162 ESTABLISHED
tcp 0 0 localhost.localdom:1162 localhost.localdom:9001 ESTABLISHED
tcp 0 80 210.34.6.89:1161 210.34.6.10:netbios-ssn CLOSE
Active UNIX domain sockets (w/o servers)
Proto RefCnt Flags Type State I-Node Path
unix 1 [ ] STREAM CONNECTED 16178 @000000dd
unix 1 [ ] STREAM CONNECTED 16176 @000000dc
unix 9 [ ] DGRAM 5292 /dev/log
unix 1 [ ] STREAM CONNECTED 16182 @000000df
从整体上看,netstat的输出结果可以分为两个部分:
一个是Active Internet connections,称为有源TCP连接,其中"Recv-Q"和"Send-Q"指%0A的是接收队列和发送队列。这些数字一般都应该是0。如果不是则表示软件包正在队列中堆积。这种情况只能在非常少的情况见到。
另一个是Active UNIX domain sockets,称为有源Unix域套接口(和网络套接字一样,但是只能用于本机通信,性能可以提高一倍)。
Proto显示连接使用的协议,RefCnt表示连接到本套接口上的进程号,Types显示套接口的类型,State显示套接口当前的状态,Path表示连接到套接口的其它进程使用的路径名。
常见选项
-a (all)显示所有选项,默认不显示LISTEN相关
-t (tcp)仅显示tcp相关选项
-u (udp)仅显示udp相关选项
-n 拒绝显示别名,能显示数字的全部转化成数字。
-l 仅列出有在 Listen (监听) 的服務状态
-p 显示建立相关链接的程序名
-r 显示路由信息,路由表
-e 显示扩展信息,例如uid等
-s 按各个协议进行统计
-c 每隔一个固定时间,执行该netstat命令。
提示:LISTEN和LISTENING的状态只有用-a或者-l才能看到
例:netstat -at 显示所有的TCP协议网络进程
netstat查的信息说明:
proto协议类型:通常有tcp、udp、http
Recv-Q:收到的数据量 Send:发送的数据量
Local Address:本地IP地址和端口号。IP地址+端口号又被称为套接字(socket)。
Foreign Address:外来地址,即访问者的IP地址和端口号。
Stat:状态。常见的状态有Listen监听,ESTABLISHED已连接成功。
常见网络服务的端口号:
协议 端口号 协议 端口号 协议 端口号
http网站服务 80 telnet远程登录 23 DNS服务 53
ftp文件共享 21、20 pop邮局协议 110 DHCP服务 67、68
ssh远程管理 22 smtp简单邮件传输协议 25 NTP网络时间协议 123
Linux系统中服务端口号文件:more /etc/services
例:netstat -t 显示tcp协议的网络进程状态为ESTABLISHED的进程
?
例:显示tcp的网络进程状态,n以数字显示端口号,l列出在监听的进程,p显示进程的pid和程序名:netstat -tnlp
netstat的常用组合:netstat -atunlp|grep ssh
实用命令实例
- 列出所有端口 (包括监听和未监听的)
? 列出所有端口,并用more分页显示: netstat -a| more# netstat -a | more
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 localhost:30037 : LISTEN
udp 0 0 :bootpc :*
Active UNIX domain sockets (servers and established)
Proto RefCnt Flags Type State I-Node Path
unix 2 [ ACC ] STREAM LISTENING 6135 /tmp/.X11-unix/X0
unix 2 [ ACC ] STREAM LISTENING 5140 /var/run/acpid.socket
? 列出所有 tcp 端口 netstat -at
netstat -at
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 localhost:30037 : LISTEN
tcp 0 0 localhost:ipp : LISTEN
tcp 0 0 :smtp : LISTEN
tcp6 0 0 localhost:ipp [::]: LISTEN
? 列出所有 udp 端口 netstat -au
netstat -au
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
udp 0 0 :bootpc :
udp 0 0 :49119 :
udp 0 0 :mdns :*
- 列出所有处于监听状态的 Sockets
? 只显示监听端口 netstat -lnetstat -l
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 localhost:ipp : LISTEN
tcp6 0 0 localhost:ipp [::]: LISTEN
udp 0 0 :49119 :
? 只列出所有监听 tcp 端口 netstat -ltnetstat -lt
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 localhost:30037 : LISTEN
tcp 0 0 :smtp : LISTEN
tcp6 0 0 localhost:ipp [::]: LISTEN
? 只列出所有监听 udp 端口 netstat -lunetstat -lu
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
udp 0 0 :49119 :
udp 0 0 :mdns :
? 只列出所有监听 UNIX 端口 netstat -lxnetstat -lx
Active UNIX domain sockets (only servers)
Proto RefCnt Flags Type State I-Node Path
unix 2 [ ACC ] STREAM LISTENING 6294 private/maildrop
unix 2 [ ACC ] STREAM LISTENING 6203 public/cleanup
unix 2 [ ACC ] STREAM LISTENING 6302 private/ifmail
unix 2 [ ACC ] STREAM LISTENING 6306 private/bsmtp - 显示每个协议的统计信息
? 显示所有端口的统计信息 netstat -s
netstat -s
Ip:
11150 total packets received
1 with invalid addresses
0 forwarded
0 incoming packets discarded
11149 incoming packets delivered
11635 requests sent out
Icmp:
0 ICMP messages received
0 input ICMP message failed.
Tcp:
582 active connections openings
2 failed connection attempts
25 connection resets received
Udp:
1183 packets received
4 packets to unknown port received.
.....
? 显示 TCP 或 UDP 端口的统计信息 netstat -st 或 -su
netstat -st
netstat -su
- 在 netstat 输出中显示 PID 和进程名称 netstat -p
netstat -p 可以与其它开关一起使用,就可以添加 “PID/进程名称” 到 netstat 输出中,这样 debugging 的时候可以很方便的发现特定端口运行的程序。netstat -pt
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 1 0 ramesh-laptop.loc:47212 192.168.185.75:www CLOSE_WAIT 2109/firefox
tcp 0 0 ramesh-laptop.loc:52750 lax:www ESTABLISHED 2109/firefox - 在 netstat 输出中不显示主机,端口和用户名 (host, port or user)
当你不想让主机,端口和用户名显示,使用 netstat -n。将会使用数字代替那些名称。
同样可以加速输出,因为不用进行比对查询。
netstat -an
如果只是不想让这三个名称中的一个被显示,使用以下命令
netsat -a --numeric-ports
netsat -a --numeric-hosts
netsat -a --numeric-users
- 持续输出 netstat 信息
netstat 将每隔一秒输出网络信息。
netstat -c
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 ramesh-laptop.loc:36130 101-101-181-225.ama:www ESTABLISHED
tcp 1 1 ramesh-laptop.loc:52564 101.11.169.230:www CLOSING
tcp 0 0 ramesh-laptop.loc:43758 server-101-101-43-2:www ESTABLISHED
tcp 1 1 ramesh-laptop.loc:42367 101.101.34.101:www CLOSING
^C - 显示系统不支持的地址族 (Address Families)
netstat --verbose
在输出的末尾,会有如下的信息
netstat: no support forAF IPX‘ on this system.<br/>netstat: no support for
AF AX25‘ on this system.
netstat: no support forAF X25‘ on this system.<br/>netstat: no support for
AF NETROM‘ on this system. - 显示核心路由信息 netstat -r
netstat -r
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
192.168.1.0 255.255.255.0 U 0 0 0 eth2
link-local 255.255.0.0 U 0 0 0 eth2
default 192.168.1.1 0.0.0.0 UG 0 0 0 eth2
注意:?使用 netstat -rn 显示数字格式,不查询主机名称。 - 找出程序运行的端口
并不是所有的进程都能找到,没有权限的会不显示,使用 root 权限查看所有的信息。
netstat -ap | grep ssh
tcp 1 0 dev-db:ssh 101.174.100.22:39213 CLOSE_WAIT -
tcp 1 0 dev-db:ssh 101.174.100.22:57643 CLOSE_WAIT -
? 找出运行在指定端口的进程netstat -an | grep ‘:80‘
- 显示网络接口列表
netstat -i
Kernel Interface table
Iface MTU Met RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg
eth0 1500 0 0 0 0 0 0 0 0 0 BMU
eth2 1500 0 26196 0 0 0 26883 6 0 0 BMRU
lo 16436 0 4 0 0 0 4 0 0 0 LRU
显示详细信息,像是 ifconfig 使用 netstat -ie:netstat -ie
Kernel Interface table
eth0 Link encap:Ethernet HWaddr 00:10:40:11:11:11
UP BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
Memory:f6ae0000-f6b00000 - IP和TCP分析
? 查看连接某服务端口最多的的IP地址
wss8848@ubuntu:~$ netstat -nat | grep "192.168.1.15:22" |awk ‘{print $5}‘|awk -F: ‘{print $1}‘|sort|uniq -c|sort -nr|head -20
18 221.136.168.36
3 154.74.45.242
2 78.173.31.236
2 62.183.207.98
2 192.168.1.14
2 182.48.111.215
2 124.193.219.34
2 119.145.41.2
2 114.255.41.30
1 75.102.11.99
? TCP各种状态列表
wss8848@ubuntu:~$ netstat -nat |awk ‘{print $6}‘
established)
Foreign
LISTEN
TIME_WAIT
ESTABLISHED
TIME_WAIT
SYN_SENT先把状态全都取出来,然后使用uniq -c统计,之后再进行排序。
wss8848@ubuntu:~$ netstat -nat |awk ‘{print $6}‘|sort|uniq -c
143 ESTABLISHED
1 FIN_WAIT1
1 Foreign
1 LAST_ACK
36 LISTEN
6 SYN_SENT
113 TIME_WAIT
1 established)
最后的命令如下:
netstat -nat |awk ‘{print $6}‘|sort|uniq -c|sort -rn
分析access.log获得访问前10位的ip地址
awk ‘{print $1}‘ access.log |sort|uniq -c|sort -nr|head -10
sed文本编辑器
功能:显示、非交互式修改文件内容。
格式:sed [选项] ‘动作1;动作2;动作n’ 文件名
选项:-i 直接修改文件内容。
-n 仅输出sed处理的内容。
动作命令:p显示文件内容。例:显示passwd文件中的第2行:sed -n ‘2p’ /etc/passwd
d 删除文件内容
i 在指定行的上方插入一行内容
a 在指定行下面追加一行内容
c 整行修改(替换)
任务实战:
1、执行以下命令,用p命令输出文件的部分内容
进入/etc目录
显示文件中的第2行内容
显示文件中的第2~5行内容
显示文件中的第2行,第5行内容
输出ifconfig命令结果中的第1~2行内容 cd /etc
sed -n ‘2p‘ /etc/passwd
sed -n ‘2,5p‘ /etc/passwd
sed -n ‘2p;5p‘ /etc/passwd
ifconfig | sed -n ‘1,2p‘
2、执行以下命令,用d、a、i、c来处理文件内容。
删除第3行
查看文件内容
删除第2~4行
删除第2行,第4行
在第2行后添加hello这行内容
在第2~4行后添加内容
在第2行上方插入内容
在第2~4行上方插入内容
将第1行内容换成hello
将第1~3行内容换成hello cd回车 或 cd ~
cat -n /etc/passwd |head -5 > pa
sed -n ‘p‘ pa
sed ‘3d‘ pa
cat pa 会发现文件内容并没改变,因为没有用-i选项,只修改了缓冲区数据
sed ‘2,4d‘ pa
sed ‘2d;4d‘ pa
sed ‘2a \ hello‘ pa
sed ‘2,4a \ hello‘ pa
sed ‘2i \ hello‘ pa
sed ‘2,4i \ hello‘ pa
sed ‘1c hello‘ pa
sed ‘1,3c hello‘ pa
3、续接任务2。熟悉sed命令中的查找替换功能。
sed查找关键字并显示的格式:sed -n ‘/关键字/p‘ 文件名
显示文件中包含root的内容
显示文件中包含root、adm的内容
删除文件中包含root、adm的内容
显示passwd文件中包含root关键字的内容
显示passwd文件中以root开头的内容
显示passwd文件中以bash结尾的内容 sed -n ‘/root/p‘ pa
sed -n ‘/root/p;/adm/p‘ pa
sed ‘/root/d;/adm/d‘ pa
sed -n ‘/root/p‘ /etc/passwd
sed -n ‘/^root/p‘ /etc/passwd
sed -n ‘/bash$/p‘ /etc/passwd
sed查找关键字并显示的格式:sed -n ‘s/关键字/新内容/g‘ 文件名
将文件中所有的bin替换成BIN
将第1~3行中的bin替换成BIN
将第1~3行的第2个:号替换成;号 sed ‘s/bin/BIN/g‘ pa
sed ‘1,3s/bin/BIN/g‘ pa
sed ‘1,3s/:/;/2‘ pa
说明:替换中的g表示替换的范围是整行,如果用数字取代g表示替换此行的第几个。
awk命令
功能:将文件中内容中的行、列进行输出处理。
格式:awk -F 分隔符 ‘{动作}’ 文件名
说明:awk命令中默认以空格作为列字段的分隔符。
awk内部变量:NR是指定行号 $1~$n表示第几列 $0表示整行内容 NF是列数 $NF表示最后一列
例:用awk输出ifconfig结果中以空格分隔的第1行,第5列数据(网卡MAC地址)。输出第2行第2列内容(网卡的IP地址)。
ifconfig |awk ‘NR==1{print $5}‘
ifconfig |awk ‘NR==2{print $2}‘
例:用head查看passwd文件的前3行内容,用管道符将结果传给awk显示以:冒号分隔的第1列、最后一列数据。
head -3 /etc/passwd | awk -F : ‘{print $1,$NF}’
原文地址:https://blog.51cto.com/14173127/2353091