LINUX的各种系统的各种使用

软件管理:

ABI:二进制接口文件 用file命令可以查看

API:包内文件的命令接口

动态库:SO \ DLL

静态库:a

更平台无关的 noarch 里面放的都是帮助手册(rpm包里的)

管理及查看本机装载的库文件:

#加载配置文件中指定的库文件
ldconfig 
#显示本机已经缓存的所有可用库文件名及文件路径映射关系
root@rocky8 ~]# ldconfig -p

配置文件:/etc/ld.so.conf 和/etc/ld.so.conf.d/*.conf

缓存文件:/etc/ld.so.cache

包命名:
name-VERSION.tar.gz|bz2|xz 
VERSION: major.minor.release
#nginx-1.22.0.tar.gz 
#major     主版本号
#minor     次版本号
#release   修正版本号

rpm 包管理器:

-v				#显示详细信息
-h				#显示进度条
-c				#查看配置文件
-a				#所有包
-q				#是否安装
-p				#对未安装的程序查询
-d				#查询文档
-f				#查询文件由哪个包生成
-ivh			#包安装
-uvh			#包升级
-evh			#包卸载
-qi				#指定程序包
-qf				#根据文件查询包信息
-qpf			#查询没有安装的包文件
-qd				#查询文档文件
-qc				#查询配置文件
-ql				#列出包内所有文件
-qpl			#没安装的指定包文件
upgrade			#升级
freshen			#降级
-V              #(大写的V)

rpm {-V|--verify} [select-options] [verify-options] 
#字段说明
S #文件大小不一样
M #文件权限不一样或文件类型不一样
5 #md5 校验值不一样
D #版本号值不一样
L #链接路径不一样
U #属主发生了改变
G #属组发生了改变
T #修改时间发生了改变
P #功能发生了改变
c|d|g|l|r #文件类型 c配置文件, d数据文件,g该文件不属于此处,l许可文件(licens 
file),r自述文件(READ ME)
#如果占位符是 .   则表示该处与安装时没有任何改变

范例:
#安装之后没有修改任何文件
[root@rocky86 v]# rpm -V vsftpd
[root@rocky86 v]# echo $?
0
#安装之后修改了配置文件
[root@rocky86 v]# rpm -V nginx
S.5....T. c /etc/nginx/nginx.conf
[root@rocky86 v]# echo $?
1

重建数据库

rpm {--initdb|--rebuilddb} 
initdb 		#初始化,如果事先不存在数据库,则新建之,否则,不执行任何操作
rebuilddb 	#重建已安装的包头的数据库索引目录

安装包的更新日志:rpm -q --changelog packageName

yum:

/etc/yum.conf 						#为所有仓库提供公共配置
/etc/yum.repos.d/*.repo 			#为每个仓库的提供配置文件

[root@rocky86 ~]# cat /etc/yum.conf 
[main]
gpgcheck=1 						#安装包前要做包的合法和完整性校验
installonly_limit=3	   #同时可以安装3个包,最小值为2,如设为0或1,为不限制
clean_requirements_on_remove=True 	#删除包时,是否将不再使用的包删除
best=True 					#升级时,自动选择安装最新版,即使缺少包的依赖
skip_if_unavailable=False 	#跳过不可用的

repo 仓库配置文件指向的定义:

[repositoryID] 
name=Some name for this repository 		#仓库名称
baseurl=url://path/to/repository/ 		#仓库地址
mirrorlist=http://list/   				#仓库地址列表,在这里写了多个 baseurl指向的地址
enabled={1|0} 						   #是否启用,默认值为1,启用
gpgcheck={1|0} 						   #是否对包进行校验,默认值为1 
gpgkey={URL|file://FILENAME} 			#校验key的地址
enablegroups={1|0} 					    #是否启用yum group,默认值为 1
failovermethod={roundrobin|priority}     #有多个baseurl,此项决定访问规则,roundrobin 随机,priority:按顺序访问
cost=1000 							   #开销,或者是成本,YUM程序会根据此值来决定优先访问哪个源,默认为1000

baseurl 有多种写法,支持多种协议

注意:yum仓库指向的路径一定必须是repodata目录所在目录

baseurl=file:///cdrom/AppStream/
baseurl=https://mirrors.aliyun.com/rockylinux/8.6/AppStream/x86_64/os/
baseurl=http://mirrors.aliyun.com/rockylinux/8.6/AppStream/x86_64/os/
baseurl=ftp://10.0.0.159/

$arch 				#CPU架构 aarch64|i586|i686|x86_64
$basearch 			#系统基本体系结构i386|x86_64
$releasever 		#系统版本
#带变量的写法
mirrorlist=https://mirrors.rockylinux.org/mirrorlist?
arch=$basearch&repo=BaseOS-$releasever
#替换后的值
mirrorlist=https://mirrors.rockylinux.org/mirrorlist?arch=x86_64&repo=BaseOS-8

rockylinux的国内源:

阿里云 			  https://mirrors.aliyun.com/rockylinux/
中国科学技术大学 	   http://mirrors.ustc.edu.cn/rocky/
南京大学		     https://mirrors.nju.edu.cn/rocky/
上海交通大学 			https://mirrors.sjtug.sjtu.edu.cn/rocky/
东软信息学院 			http://mirrors.neusoft.edu.cn/rocky/

Rocky8.6上配置aliyun的repo源
[root@rocky86 yum.repos.d]# cat aliyun-baseos.repo 
[aliyun-baseos]
name=aliyun baseos
baseurl=https://mirrors.aliyun.com/rockylinux/8.6/BaseOS/x86_64/os/
gpgcheck=0

Rocky8.6上配置南京大学的repo源
[root@rocky86 yum.repos.d]# cat nju-extras.repo
[nju-extras]
name=nju extras
baseurl=https://mirrors.nju.edu.cn/rocky/8.6/extras/x86_64/os/
gpgcheck=0

Rocky8.6上配置 本地repo源
[root@rocky86 yum.repos.d]# cat cdrom-appstream.repo 
[cdrom-appstream]
name=cdrom appstream
baseurl=file:///cdrom/AppStream/
gpgcheck=0

#添加repo源
[root@rocky86 ~]# yum-config-manager --addrepo=https://mirrors.nju.edu.cn/epel/8/Everything/x86_64/
Adding repo from: https://mirrors.nju.edu.cn/epel/8/Everything/x86_64/

#禁用源
[root@rocky86 yum.repos.d]# yum-config-manager --disable 
mirrors.nju.edu.cn_epel_8_Everything_x86_64_
#启用源
[root@rocky86 yum.repos.d]# yum-config-manager --enable 
mirrors.nju.edu.cn_epel_8_Everything_x86_64_

yum命令:

-c				#指定配置文件
-v				#显示过程
-b				#尝试在可用包内寻找最匹配的版本
-y				#自动回答yes
-x				#排除指定包,可用通配符
--nogpgcheck	#不进行校验
--repo			#指定源
--enablerepo	#临时启用repo源
--disablerepo	#临时禁用repo源
--downloadoniy	#只下载不安装

常用的子命令:
autoremove               #卸载包,同时卸载依赖
check-update             #检查可用更新
clean                    #清除本地缓存
downgrade                #包降级
group                    #包组相关
help                     #显示帮助信息
history                  #显示history
info                     #显示包相关信息
install                  #包安装
list                     #列出所有包
makecache                #重建缓存
reinstall                #重装
remove                   #卸载
repolist                 #显示或解析repo源
search                   #包搜索,包括包名和描述

显示程序包:
yum list [ ]
--all					#显示所有的包
--available				#所有可用的包
--installed				#所有已安装的包
--updates				#所有可更新的包
--showduplicates		#显示相同包的所有版本
--installroot			#指定安装目录
--downloadonly			#只下载不安装
--downloaddir			#指定下载目录,如果下载目录不存在则创建目录
实现私用yum仓库:
ip1 : 10.0.0.150        yum server(服务器)
ip2 : 10.0.0.152  		client (客户端) 

步骤:
1. 在 yum server 机上搭建 web 服务,保证其它机器能能过web服务访问本机
2. 在 yum server 机上搭建 yum 仓服务
3. 在 client 机上将yum 的 repos 源指向 yum server 机
4. 测试

服务端配置:
#安装web服务
[root@rocky86 ~]# yum install -y httpd
#关闭防火墙
[root@rocky86 ~]# systemctl disabled --now firewalld.service
#开启web服务
[root@rocky86 ~]# systemctl enable --now httpd.service
#将阿里云的extras 源的相关数据下载到本地,给客户端使用
[root@rocky86 ~]# yum reposync --repoid=nju-extras --download-metadata -p 
/var/www/html/
#将本地光盘中的内容CP到web目录中,给客户端使用
[root@rocky86 ~]# mkdir /cdrom
[root@rocky86 ~]# mount /dev/sr0 /cdrom
[root@rocky86 ~]# cp -r /cdrom/BaseOS/* /var/www/html/BaseOS

客户端配置:
[root@rocky86 ~]# cat /etc/yum.repos.d/private-extras.repo 
[private-extras]
name=private extras
baseurl=http://10.0.0.157/extras/
gpgcheck=0
[root@rocky86 ~]# cat /etc/yum.repos.d/private-baseos.repo 
[private-baseos]
name=private baseos
baseurl=http://10.0.0.157/BaseOS/
gpgcheck=0

yum仓同步工具:
#CentOS 8 dnf 工具集成
dnf reposync --repoid=REPOID --download-metadata -p /path 
dnf reposync --help #查看帮助
#CentOS 7 以前版本,reposync工具来自于yum-utils包
reposync --repoid=REPOID --download-metadata -p /path

DNF:与yum用法相同

yum失败原因

解决办法

yum的配置文件格式错误或路径错误

检查/etcyum.repo.d/*.repo文件

yum cache

yum clean all

网络不通

网卡配置

ubuntu的软件管理:

dpkg包管理:
-i					#安装程序包
--unpack			#解压包
-r					#删除包
-P					#(大写的p)删除包和配置文件
-V					#(大写的V)检查包是否安装
-s					#指定包的详细信息
-p					#(小写p)显示机器上所有可安装的包
-L					#列出指定软件包的文件
-l					#列出当前已安装的包
-S					#(大写的S)根据文件查询是来自于那个包
-C					#(大写C)检查是否有包的残损
-c					#列出包内文件
--get-selections	#根据正则选包,打开包
--update-avail		#替换现有可安装的软件包信息
-Dh					#显示有关出错调试的帮助信息
--info				#列出包内信息

apt的用法:对标的是yum

apt [options] command
  
#options       
-h|--help     		#显示帮助
-v|--version 		#显示版本
-y|--yes 			#自动回答yes
-q|--quiet 			#安静模式
     
#command
list       			#根据名称列出软件包
search     			#搜索软件包描述
show|info       	#显示软件包细节
install   			#安装软件包
remove     			#移除软件包
autoremove 			#卸载所有自动安装且不再使用的软件包
update     			#更新可用软件包列表,只更新索引文件,不具体更新软件
upgrade   			#通过 安装/升级 软件来更新系统
full-upgrade 		#通过 卸载/安装/升级 来更新系统
edit-sources 		#编辑软件源信息文件

#更新某个具体的包
root@ubuntu22:~# apt install --only-upgrade nginx

配置文件说明:

deb URL section1 section2
#字段说明
deb 			#固定开头,表示是二进制包的仓库,如果deb-src开头,表示是源码库
URL 			#库所在的地址,可以是网络地址,也可以是本地镜像地址
section1 		#Ubuntu版本的代号,可用 lsb_release -sc 命令查看,也可以用 cat 
/etc/os-release
section2 		#软件分类,main完全自由软件 restricted不完全自由的软件,universe社区支持的软件,multiverse非自由软件
section1 		#主仓
section1-backports #后备仓,该仓中的软件当前版本不一定支持
section1-security #修复仓,主要用来打补丁,有重大漏洞,需要在当前版本中修复
时,会放此仓
section1-updates #非安全性更新仓,不影响系统安全的小版本迭代放此仓
section1-proposed #预更新仓,可理解为新版软件的测试放在此仓,测试一段时间后
会移动到 updates仓或security仓,非专业人士勿用

root@ubuntu22:~# cat /etc/apt/sources.list
deb https://mirrors.aliyun.com/ubuntu jammy main restricted #表示使用
主仓中的 main和 restricted 源
# deb-src https://mirrors.aliyun.com/ubuntu jammy main restricted
deb https://mirrors.aliyun.com/ubuntu jammy-updates main restricted
# deb-src https://mirrors.aliyun.com/ubuntu jammy-updates main restricted

在ubuntu库中,有两个重要目录,分别是dists和 pool dists 目录中存放的是该源仓库中的元数据,包括软件包的名称,适用的架构平台,版本号,依赖关系等 pool 目录中存放的是具体包文件

apt命令操作(如安装和删除软件包)日志文件 /var/log/dpkg.log

snap工具:

install 		#安装
remove 			#移除
find 			#查找
list 			#列出己安装的包
info 			#查看包信息

磁盘结构:

添加硬盘,不重启识别
]# echo '- - -' > /sys/class/scsi_host/host0/scan 
[root@rocky86 ~]# echo '- - -' > /sys/class/scsi_host/host1/scan 
[root@rocky86 ~]# echo '- - -' > /sys/class/scsi_host/host2/scan 
#但是在 ubuntu 中,该目录下的内容太多了
[root@ubuntu2204 ~]# ls /sys/class/scsi_host/
host0 host11 host14 host17 host2 host22 host25 host28 host30 host4 host7 host1  host12 host15 host18 host20 host23 host26 host29 host31 host5 host8  host10 host13 host16 host19 host21 host24 host27 host3 host32 host6 host9

#两种写法,1 循环遍历
[root@ubuntu2204 ~]# for i in `ls /sys/class/scsi_host/`;do echo '- - -' >  /sys/class/scsi_host/$i/scan;done

#2 找出SPI总线对应的 host,只扫描该 host
[root@ubuntu2204 ~]# grep mptspi /sys/class/scsi_host/host*/proc_name  
/sys/class/scsi_host/host32/proc_name:mptspi
[root@ubuntu2204 ~]# echo '- - -' > /sys/class/scsi_host/host32/scan

此处是重新扫描 SCSI 总线来添加设备,之所以是 SCSI 总线,是因为我们添加的 SCSI 类型的硬盘

分区方式:1.MBR 2.GPT

查看分区表信息:

[root@rocky86 ~]# fdisk -l /dev/sda

备份分区表信息:
#备份MBR分区表
[root@rocky86 ~]# dd if=/dev/sda of=/data/dpt.img bs=1 count=64 skip=446

管理分区:

lsblk
-a|--all            #输出所有设备信息
-b|--bytes          #以字节为单位显示设备大小
-d|--nodeps         #不显示分区信息
-e|--exclude <list> #以主设备号排除设备
-f|--fs             #显示文件系统
-i|--ascii          #只使用 ascii 字符输出
-I|--include <list> #仅显示指定的设备
-J|--json           #以json格式显示输出
-l|--list         	#以列表显示
-T|--tree           #以树状结构显示,默认项
-m|--perms          #显示属主属组及权限
-n|--noheadings     #不显示表头
-o|--output <list>  #只显示指定列
-O|--output-all     #显示所有列
-p|--paths          #显示设备全路径
-P|--pairs          #以 k=>v 的格式显示输出
-r|--raw            #原样输出
-s|--inverse        #反向显示关联信息
-S|--scsi           #显示scsi设备(small computer system interface 
device,小型计算机接口设备)
-t|--topology       #显示拓扑信息
#常用字段
NAME 				#设备名称
MAJ:MIN 			#主设备号:次设备号
RM 					#是否是可移动设备
SIZE 				#设备容量大小
RO 					#是否是只读设备
TYPE 				#设备类型
MOUNTPOINT 			#挂载点

常用的选项:

  • -a:显示所有块设备,包括空的和不可用的。

  • -b:以字节为单位显示设备大小。

  • -f:显示文件系统类型。

  • -h:人性化地显示设备大小,如1024M、2G等。

  • -i:显示设备的ID信息。

  • -n:不打印标题行。

  • -o [COL1,COL2,...]:自定义输出列。可以指定需要输出的列名,多个列之间用逗号分隔。

  • -p:将所有设备路径显示为完整路径。

  • -r:以反向顺序显示结果。

  • -S:显示每个设备的拓扑信息。

  • -t [TYPE1,TYPE2,...]:指定要显示的设备类型。可以指定多个设备类型,多个设备类型之间用逗号分隔。

  • -x [LIST]:排除指定的设备或设备类型。可以指定多个设备或设备类型,多个设备或设备类型之间用逗号分隔

创建分区命令:

fdisk 					#管理MBR分区
gdisk 					#管理GPT分区
parted 					#高级分区操作,可以是交互或非交互方式

注意:parted的操作都是实时生效的,没有交互式确认
#常用选项
-l|--list 				#显示所有硬盘分区信息        
-s|--script       		#不输出提示信息


#常用子命令
align-check TYPE N                       #检查分区是否满足对齐(最小|最佳)类型的对齐方式
mklabel|mktable LABEL-TYPE               #指定磁盘的分区类型 
mkpart PART-TYPE [FS-TYPE] START END     #新建分区,指定分区类型,文件系统,开始结束位置
name NUMBER NAME                         #重命名指定分区
print [devices|free|list,all|NUMBER]     #显示
quit                                     #退出
resizepart NUMBER END                    #重置分区大小
rm NUMBER                                #删除指定分区
disk_set FLAG STATE                      #为设备打标签
disk_toggle [FLAG]                       #修改flag
set NUMBER FLAG STATE                    #设置flag
toggle [NUMBER [FLAG]]                   #修改flag
unit UNIT                                #设置默认单位, 默认为MB,B|KB|MB|GB|TB
version                                 #显示版本

分区工具:fdisk gdisk

fdisk
#常用选项
-b|--sector-size <size> 		#指定扇区大小,默认512字节
-L|--color[=color]           	#显示时是否添加颜色(auto|always|never)默认启用颜色
-l|--list 						#显示
-o|--output <list> 				#只显示指定列
-u|--units[=<unit>]         	#设置显示单位 cylinders|sectors,默认sectors
-s|--getsz 						#显示设备有多少个扇区
-b|--bytes N                   	#以指定的字节大小来计算扇区数量
-t|--type type             		#只显示指定类型的分区表
-C|--cylinders N       			#指定柱面数
-H|--heads N           			#指定磁头数
-S|--sectors N         			#指定每条磁道的扇区数
#常用子命令
p 								#输出分区列表
t 								#更改分区类型
n 								#创建新分区
d 								#删除分区
v 								#校验分区
u 								#转换单位
w 								#保存并退出
q 								#不保存并退出

gdisk
b        						#备份分区表到指定文件
c       						#修改分区名
d       						#删除分区
i       						#显示分区详细信息
l       						#列出所有分区类型
n       						#新建分区
o       						#创建新的分区表
p       						#查看分区
q       						#退出
r       						#恢复和转换选项,非专业人士勿用
s       						#排序
t       						#修改分区类型,默认 8300,表示普通分区
v       						#检测硬盘是否有问题
w       						#保存退出

文件系统的组成部分:

内核:EXT4 XFS VFAT

虚拟文件系统:VFS

用户空间的管理工具:mkfs.ext4 ,mkfs.xfs ,mkfs.vfat

创建文件系统: mkfs

-t|--type=model 	#指定文件系统类型 (ext2|ext3|ext4|xfs),默认 ext2
-b               	#指定块 block 大小 (1024|2048|4096)
-L LABEL 			#设置卷标
-V|--verbose    	#显示创建过程
-j 					#同 -t ext3
-i N  				#为数据空间中每多少个字节创建一个inode;不应该小于block
大小
-N N 				#指定分区中创建多少个inode
-I N               	#一个inode记录占用的磁盘空间大小,128---4096
-m N 				#默认5%,为管理人员预留空间占总空间的百分比
-O FEATURE[,...] 	#启用指定特性
-O ^FEATURE 		#关闭指定特性

#创建ext4 文件系统
#mkfs.ext4 /dev/sdc1 等同于 mkfs -t ext4 /dev/sdc1
#创建xfs文件系统
#mkfs.xfs  /dev/sdc2

mke2fs:

mke2fs
ext系列文件系统专用管理工具
-t 					#指定文件系统类型 {ext2|ext3|ext4|xfs} 
-b 					#指定块大小{1024|2048|4096} 
-L LABEL 			 #设置卷标
-j 					#同 -t ext3,mkfs.ext3|mkfs -t ext3|mke2fs -j|mke2fs -t ext3
-i N 				#为数据空间中每多少个字节创建一个inode 不应该小于block大小
-N N 				#指定分区中创建多少个inode
-I N 				#一个inode记录占用的磁盘空间大小,128---4096
-m N 				#默认5%,为管理人员预留空间占总空间的百分比
-O FEATURE[,...] 	 #启用指定特性
-O ^FEATURE 		 #关闭指定特性

查看和管理分区信息:blkid

-U UUID 			#根据指定的UUID来查找对应的设备
-L LABEL 			#根据指定的LABEL来查找对应的设备

e2lable:管理ext系列文件系统的LABEL

findfs:查找分区

[root@ubuntu2204 ~]# findfs UUID=b2d34757-f593-46ce-a8e6-d1009eb71fdc
/dev/sdc2
[root@ubuntu2204 ~]# findfs LABEL='Ubuntu-Server 22.04 LTS amd64'
/dev/sr0

tune2fs 重新设定ext系列文件系统可调整参数的值 -l 查看指定文件系统信息

#tune2fs -l /dev/sdc1

xfs_info :显示已挂载的xfs文件系统

文件系统检测和修复 文件系统故障常发生于死机或者非正常关机之后,挂载为文件系统标记为“no clean” 注意:一定不要在挂载状态下执行下面命令修复

fsck:文件检测和修复

#常用选项
-a 	#自动修复
-r 	#交互式修复错误

e2fsck: ext系列文件专用的检测修复工具

-y	#自动回答为yes
-f 	#强制修复
-p 	#自动进行安全的修复文件系统问题

挂载:mount -a

mountpoint:挂载点目录必须事先存在,建议使用空目录

挂载规则:

一个挂载点同一时间只能挂载一个设备

一个挂载点同一时间挂载了多个设备,只能看到最后一个设备的数据,其它设备上的数据将被隐藏

一个设备可以同时挂载到多个挂载点

通常挂载点一般是已存在空的目录

mount 常用命令选项:

-a|--all               #自动挂载所有支持自动挂载的设备(定义在了/etc/fstab
文件中,且挂载选项中有auto功能)
-B|--bind 			   #绑定目录到另一个目录上
-c|--no-canonicalize   #不对路径规范化
-f|--fake              #空运行;跳过 mount(2) 系统调用
-F|--fork              #对每个设备禁用 fork,配合-a 选项一起使用
-T|--fstab path    	   #指定写文件,默认 /etc/fstab
-i|--internal-only     #不调用 mount.<type> 辅助程序
-l|--show-labels       #显示文件系统的 labels
-n|--no-mtab           #不更新/etc/mtab,mount不可见
-o|--options o1,o2     #挂载选项列表,以英文逗号分隔
-O|--test-opts o1,o2   #限制文件系统集合(和 -a 选项一起使用)
-r|--read-only         #以只读方式挂载文件系统(同 -o ro)
-t|--types     		   #指定要挂载的设备上的文件系统类型,如:ext4,xfs
--source device        #指明源(路径、标签、uuid)
--target mountpoint    #指明挂载点
-v|--verbose           #显示过程
-w|--rw|--read-write   #以读写方式挂载文件系统(默认)
-L LABEL 			   #以卷标指定挂载设备
-U UUID 			   #以UUID指定要挂载的设备
#-o选项值
async 				   #异步模式,内存更改时,写入缓存区buffer,过一段时间再写到磁盘中,效率高,但不安全
sync   				   #同步模式,内存更改时,同时写磁盘,安全,但效率低下
atime/noatime 		   #包含目录和文件
diratime/nodiratime    #目录的访问时间戳
auto/noauto 		   #是否支持开机自动挂载,是否支持-a选项
exec/noexec 		   #是否支持将文件系统上运行应用程序
dev/nodev 			   #是否支持在此文件系统上使用设备文件
suid/nosuid 		   #是否支持suid和sgid权限
remount 			   #重新挂载  
user/nouser 		   #是否允许普通用户挂载此设备,/etc/fstab使用
acl/noacl              #启用此文件系统上的acl功能
loop 				   #使用loop设备
_netdev   		       #当网络可用时才对网络资源进行挂载,如:NFS文件系统
defaults 			   #相当于rw, suid, dev, exec, auto, nouser, async
#--source 选项值
-L|--label label       #同 LABEL=label
-U|--uuid uuid         #同 UUID=uuid
LABEL=label            #用label值指定设备
UUID=uuid              #用uuid值指定设备
PARTLABEL=label        #按PARTLABEL值指定设备
PARTUUID=uuid          #按PARTUUID值指定设备
device                 #按路径指定设备
directory              #绑定式挂载的挂载点(参阅 --bind/rbind)
file                   #用于设置回环设备的常规文件

常用:

  1. 1.

    -t:指定文件系统类型。例如,-t ext4表示要挂载的文件系统类型为ext4。

  2. 2.

    -o:指定附加选项。可以使用-o选项指定各种选项,如读写权限、挂载点等。例如,-o rw表示以可读写模式挂载文件系统。

  3. 3.

    -n:禁用自动挂载。当没有找到自动挂载点时,使用-n选项可以避免尝试自动挂载。

  4. 4.

    -r:以只读模式挂载文件系统。例如,-r选项表示以只读方式挂载文件系统。

  5. 5.

    -w:以读写模式挂载文件系统。例如,-w选项表示以可读写方式挂载文件系统。

  6. 6.

    -a:自动挂载所有文件系统。使用-a选项将自动挂载所有符合条件的文件系统。

  7. 7.

    -L:根据卷标挂载文件系统。使用-L选项可以根据卷标来挂载文件系统,而不是使用设备路径。

  8. 8.

    -U:根据UUID挂载文件系统。使用-U选项可以根据UUID来挂载文件系统,而不是使用设备路径。

  9. 9.

    -v:显示详细信息。使用-v选项可以显示更详细的挂载信息。

umount :卸载挂载点 -a

查看挂载:

mount 				#通过mount命令查看
cat /etc/mtab 		#通过查看/etc/mtab文件显示当前已挂载的所有设备
cat /proc/mounts    #查看内核追踪到的已挂载的所有设备

持久挂载:写配置文件 /etc/fstab

每行定义一个要挂载的文件系统,,其中包括共 6 项

1.要挂载的设备或伪文件系统设备文件(LABEL=label | UUID=uuid | /dev/sda1)

2.挂载点:必须是事先存在的目录

3.文件系统类型:ext4,xfs,iso9660,nfs,none

4.挂载选项:defaults ,acl,bind,ro,rw 等

5.转储频率:0 不做备份; 1 每天转储; 2 每隔一天转储

6.fsck检查的文件系统的顺序:0 不自检 ; 1 首先自检,一般只有rootfs才用;2 非rootfs使用

添加新的挂在设备需要执行以下命令: mount -a (只对整行修改有效)

修改了/etc/fstab 文件中的挂载规则,无法通过 mount -a 生效,要执行重新挂载 mount -o remount

sawp空间:优化用的

swapoff -a 开启 swapon - a 禁用

移动介质:的挂载通常会在/media和/mnt下

自动挂载:

 apt install autofs
 #己运行,己加开机启动
[root@ubuntu2204 ~]# systemctl status autofs
#修改配置文件
[root@ubuntu2204 ~]# vim /etc/auto.master
......
/misc /etc/auto.misc #取消此行注释
#重启服务
[root@ubuntu2204 ~]# systemctl restart autofs
#查看
[root@ubuntu2204 ~]# ls /misc/cd
boot boot.catalog casper dists EFI install md5sum.txt pool ubuntu

磁盘常见工具:df

-a|--all             		#显示所有
-B|--block-size=SIZE 		#显示时指定块大小
--direct         			#将挂载点那一列标题显示为文件
-h|--human-readable 		#以方便阅读的方式显示
-H|--si             		#以 1000为单位,而不是1024
-i|--inodes         		#显示inode 信息而非块使用量
-k                   		#以KB为单位显示磁盘空间使用情况。
-l|--local             		#只显示本机的文件系统
--output[=FIELD_LIST]   	#只显示指定字段
-P|--portability       		#以Posix兼容的格式输出
--total           			#最后加一行汇总数据
-t|--type=TYPE       		#根据文件系统类型过滤
-T|--print-type     		#显示文件系统类型
-x|--exclude-type=TYPE 		#根据文件系统类型反向过滤

目录统计工具:du

-0|--null               #输出时以NULL分割,而不是换行
-a|--all              	#显示所有文件和目录大小
-B|--block-size=SIZE   	 #指定块大小
-b|--bytes             	 #同 --apparent-size --block-size=1
-c|--total             	 #汇总
-d|--max-depth=N       	 #指定最大目录层级
-h|--human-readable    	 #以方便阅读的格式显示
-k                     	 #同 --block-size=1K
-m                     	 #同 --block-size=1M
--si                   	 #友好显示,以 1000 为单位,而不是 1024
-s|--summarize         	 #只显示外层目录
-X|--exclude-from=FILE 	 #根据文件名忽略
--exclude=PATTERN      	 #根据正则表达式忽略
-x|--one-file-system   	 #忽略不在同一个文件系统的目录

 

#查看目录占用多大空间
[root@ubuntu2204 ~]# du -sh /etc/
6.5M /etc/
#查看目录下每个文件或子目录大小
[root@ubuntu2204 ~]# du -sh /var/log/* | head -n 3
40K /var/log/alternatives.log
16K /var/log/apache2
252K /var/log/apt

文件工具 :dd

dd if=/PATH/FROM/SRC of=/PATH/TO/DEST  bs=N count=N
#常用选项
if=file 						#从所命名文件读取而不是从标准输入
of=file 						#写到所命名的文件而不是到标准输出
ibs=size   						#一次读size个byte
obs=size       					#一次写size个byte
bs=size 						#指定块大小(既是是ibs也是obs)
cbs=size       					#一次转化size个byte
skip=blocks   					#从开头忽略blocks个ibs大小的块
seek=blocks   					#从开头忽略blocks个obs大小的块
count=n         				#复制n个bs
conv=conversion[,conversion...] #用指定的参数转换文件
#conversion 转换参数
ascii 							#转换 EBCDIC 为 ASCII
ebcdic 							#转换 ASCII 为 EBCDIC
lcase 							#把大写字符转换为小写字符
ucase 							#把小写字符转换为大写字符
nocreat 						#不创建输出文件
noerror 						#出错时不停止
notrunc 						#不截短输出文件
sync 							#把每个输入块填充到ibs个字节,不足部分用空(NUL)字符补齐
fdatasync 						#写完成前,物理写入输出文件
#备份MBR
dd if=/dev/sda of=/tmp/mbr.bak bs=512 count=1
#有一个大与2K的二进制文件fileA。现在想从第64个字节位置开始读取,需要读取的大小是128Byts。又有fileB, 想把上面读取到的128Bytes写到第32个字节开始的位置,替换128Bytes,实现如下
dd if=fileA of=fileB bs=1 count=128 skip=63 seek=31 conv=notrunc
#将本地的/dev/sdx整盘备份到/dev/sdy 
dd if=/dev/sdx of=/dev/sdy
#将/dev/sdx全盘数据备份到指定路径的image文件
dd if=/dev/sdx of=/path/to/image
#备份/dev/sdx全盘数据,并利用gzip压缩,保存到指定路径
dd if=/dev/sdx | gzip >/path/to/image.gz
#将备份文件恢复到指定盘
dd if=/path/to/image of=/dev/sdx
#将压缩的备份文件恢复到指定盘
gzip -dc /path/to/image.gz | dd of=/dev/sdx
#将内存里的数据拷贝到root目录下的mem.bin文件
dd if=/dev/mem of=/root/mem.bin bs=1024
#拷贝光盘数据到root文件夹下,并保存为cdrom.iso文件
dd if=/dev/cdrom of=/root/cdrom.iso
#销毁磁盘数据
dd if=/dev/urandom of=/dev/sda1
#通过比较dd指令输出中命令的执行时间,即可确定系统最佳的block size大小
dd if=/dev/zero of=/root/1Gb.file bs=1024 count=1000000
dd if=/dev/zero of=/root/1Gb.file bs=2048 count=500000  
dd if=/dev/zero of=/root/1Gb.file bs=4096 count=250000
#测试硬盘写速度
dd if=/dev/zero of=/root/1Gb.file bs=1024 count=1000000
#测试硬盘读速度
dd if=/root/1Gb.file bs=64k | dd of=/dev/null

RAID (磁盘阵列):

提高IO能力,磁盘并行读写

提高耐用性,磁盘冗余算法来实现

RAID实现的方式

外接式磁盘阵列:通过扩展卡提供适配能力

内接式RAID:主板集成RAID控制器,安装OS前在BIOS里配置

软件RAID:通过OS实现,比如:群晖的NAS

RAID-0:

以 chunk 单位,读写数据,因为读写时都可以并行处理,所以在所有的级别中,RAID 0的速度是最快的。 但是RAID 0既没有冗余功能,也不具备容错能力,如果一个磁盘(物理)损坏,所有数据都会丢失。

RAID-1:

也称为镜像, 两组以上的N个磁盘相互作镜像,在一些多线程操作系统中能有很好的读取速度,理论上读 取速度等于硬盘数量的倍数,与RAID 0相同。另外写入速度有微小的降低。

RAID-5


RAID-5(独立磁盘冗余阵列,级别5)是一种RAID配置,它使用带有奇偶校验的磁盘条带化。它需要至少三个磁盘来实现,并通过将奇偶校验数据分布在所有成员磁盘上来提供容错功能。这使得阵列可以在一个磁盘故障时继续运行。然而,如果多个磁盘同时故障,可能会导致数据丢失。

RAID-10


RAID-10(也称为RAID 1+0或RAID 1&0)结合了磁盘镜像(RAID-1)和磁盘条带化(RAID-0),创建了一种混合RAID配置。它需要至少四个磁盘。RAID-10既提供冗余性又提供性能优势。数据被镜像到多个磁盘对(RAID-1),然后这些镜像被条带化(RAID-0)。这种配置提供了高性能和容错性,因为它可以承受每个镜像集中一个或多个磁盘的故障。

RAID-01

RAID-01本质上是RAID-10的反向。它结合了磁盘条带化(RAID-0)和磁盘镜像(RAID-1)。它需要至少四个磁盘。在RAID-01中,多个RAID-0阵列被镜像。每个RAID-0阵列都被条带化以提高性能,然后这些条带化的阵列被镜像以提供冗余性。这种配置提供了类似RAID-0的高性能,但具有更好的容错性,因为它可以承受每个条带集中一个或多个磁盘的故障。然而,需要注意的是,RAID-01的冗余性不如RAID-10。

逻辑卷管理:lvm

可以允许对卷进行方便操作的抽象层,包括重新设定文件系统的大小, 允许在多个物理设备间重新组织文件系统 LVM可以弹性的更改LVM的容量

实现过程 将设备指定为物理卷 用一个或者多个物理卷来创建一个卷组,物理卷是用固定大小的物理区域(Physical Extent, PE)来定义的 在物理卷上创建的逻辑卷, 是由物理区域(PE)组成 可以在逻辑卷上创建文件系统并挂载

pv管理工具:

将块设备创建为物理卷,本质上就是给块设备打一个标签, 块设备数量和物理卷数量是对应的,有几个块设备,就可以创建几个物理卷, 块设备容量大小不限,可以跨分区。

显示ov信息:pvs pvdisplay

创建pv:pvcreate /dev/DEVICE

删除pv:pvremove /dev/DEVICE

vg管理工具:

显示卷组:vgs vgdisplay

创建卷组:

管理卷组:
vgextend vgname pv1 [pv2...] #往卷组中添加物理卷
vgreduce vgname pv1 [pv2...] #从卷组中移除物理卷

删除卷组:删除vg之前,要先把对应的 pv 解除绑定 (pvmove)

vgremove vgname

范例:

创建vg
[root@ubuntu2204 ~]# vgcreate -s 16M testvg /dev/sdb1 /dev/sdc
 Volume group "testvg" successfully created

范例:扩展vg

[root@ubuntu2204 ~]# pvs
 PV         VG       Fmt Attr PSize   PFree 
 /dev/sda3 ubuntu-vg lvm2 a-- <198.00g 99.00g
 /dev/sdb1 testvg   lvm2 a--     4.98g  4.98g
 /dev/sdb2           lvm2 ---     5.00g  5.00g
 /dev/sdc   testvg   lvm2 a--    19.98g 19.98g
#往testvg中增加 pv
[root@ubuntu2204 ~]# vgextend testvg /dev/sdb2 
 Volume group "testvg" successfully extended

lv管理工具:

显示逻辑卷: lvs lvdisplay

创建逻辑卷:

-L|--size N[mMgGtT] 			#指定大小 
-l|--extents N 					#指定PE个数,也可用百分比
-n Name 						#逻辑卷名称

缩减逻辑卷:

常用选项
-L|--size [-]Size[mMgGtT] 		#N个单位大小,也可写成-10M
-l|--extents [-]Number[PERCENT] #N个PE,也可以写成-10,表示在原基础上减10个PE大小

删除逻辑卷:

lvremove /dev/VG_NAME/LV_NAME

重设文件系统大小 修改了逻辑卷大小后,要同步文件系统

fsadm [options] resize device [new_size[BKMGTEP]]
resize2fs [-f] [-F] [-M] [-P] [-p] lvname   #只支持ext系列文件系统
xfs_growfs /mountpoint 						#只支持xfs 文件系统

范例:

创建lv
#从 testvg 中创建lv1,大小为 100个PE
[root@ubuntu2204 ~]# lvcreate -l 100 -n lv1 testvg
 Logical volume "lv1" created.

逻辑卷的使用跟硬盘分区使用一样,要先创建文件系统,再进行挂载

扩展逻辑卷:扩展逻辑卷之前,要先保证卷组(vg)上还有空间

两步实现,先扩展逻辑卷,再扩容文件系统
#第一步实现逻辑卷的空间扩展
lvextend -L [+]N[mMgGtT] /dev/VG_NAME/LV_NAME
#第二步实现文件系统的扩展
#针对ext
resize2fs /dev/VG_NAME/LV_NAME
#针对xfs 
xfs_growfs MOUNTPOINT

一步实现容量和文件系统的扩展:

lvresize -r -l +100%FREE /dev/VG_NAME/LV_NAME

缩减逻辑卷:注意:缩减有数据损坏的风险,建议先备份再缩减,不支持在线缩减,要先取消挂载,xfs文件系统不支 持缩减

缩减流程:

#取消挂载
umount /dev/VG_NAME/LV_NAME
#文件系统检测,e2fsck可写成fsck
e2fsck -f /dev/VG_NAME/LV_NAME
#缩减文件系统到指定大小
resize2fs /dev/VG_NAME/LV_NAME N[mMgGtT]
#缩减逻辑卷
lvreduce -L [-] N[mMgGtT] /dev/VG_NAME/LV_NAME
#重新挂载
mount /dev/VG_NAME/LV_NAME mountpoint

简化缩减流程:
umount /dev/VG_NAME/LV_NAME
lvreduce  -L N[mMgGtT] -r /dev/VG_NAME/LV_NAME
mount /dev/VG_NAME/LV_NAME mountpoint

跨主机迁移卷组:

1 在旧系统中,umount 所有卷组上的逻辑卷

2 禁用卷组

vgchange -a n vg0 
lvdisplay
  1. 1.导出卷组

vgexport vg0 
pvscan
vgdisplay

4.拆下旧硬盘在目标计算机上,并导入卷组:

vgimport vg0

5.启用

vgchange -ay vg0

6.mount 所有卷组上的逻辑卷

拆除指定的PV存储设备:

#1.查看vgdisplay   pvdisplay
#2.把某个要拆除的pv的数据迁移走
pvmove  name
#3.再出查看 pvdisplay
#4.在vg中拆除pv
vgreduce name(vg) name(pv)
#5.查看pvs
#6.删除pvremove   

  • 24
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

白了个白i

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值