Linux软件管理和磁盘管理
Linux软件管理
Linux软件包基础
- 开源软件下的包
开源软件最初只是提供了源码文件,用户需自行编译安装,编译安装过程中产生的依赖问题需用户自己解决。为了方便各种包的管理Debian系的dpkg便应运而生,后来红帽才开发出自己的rpm包管理工具
- Rpm和deb
Rpm:红帽公司开发的包管理工具,用于管理红帽旗下的rpm包文件
Deb:Debian系Linux系统的包文件
CentOS软件包管理工具
- 包管理器功能
软件包管理器功能: 将编译好的应用程序的各组成文件打包一个或几个程序包文件,利用包管理器可以方便快捷地实现程序 包的安装、卸载、查询、升级和校验等管理操作。红帽系使用rpm和yum对软件包进行管理
- Rpm包管理器
CentOS 系统上使用rpm命令管理程序包
功能:
安装、卸载、升级、查询、校验、数据库维护
2.1 常用功能
2.1.1 安装
语法:
rpm -ivh package
i install 安装
v 显示详细信息
h 显示执行进度
例:
Rpm -ivh ftp-0.17-78.el8.x86_64.rpm
2.1.2 升级和降级
语法:
rpm {-U|--upgrade} [install-options] PACKAGE_FILE...
rpm {-F|--freshen} [install-options] PACKAGE_FILE...
upgrade:安装有旧版程序包,则"升级",如果不存在旧版程序包,则"安装"
freshen:安装有旧版程序包,则"升级", 如果不存在旧版程序包,则不执行升级操作
--force 强制安装
2.1.3 查询
语法:
rpm -q package
常用查询:
-qa 查看当前已安装包
-q PACKAGE 查询指定包
-qi PACKAGE 查询指定包详细信息
-qc PACKAGE 查询指定包配置未见
-ql PACKAGE 列出安装包所有文件
-qd PACKAGE 列出所有文档文件
-q --scripts PACKAGE 包内脚本
-qf FILE 文件所属包
2.1.4 卸载
语法:
rpm -e package
注意:当包卸载时,对应的配置文件不会删除, 以FILENAME.rpmsave形式保留
- Yum管理工具
YUM: Yellowdog Update Modifier,rpm的前端程序,可解决软件包相关依赖性,可在多个库之间定 位软件包
yum 实现过程
先在yum服务器上创建 yum repository(仓库),在仓库中事先存储了众多rpm包,以及包的相关的
元数据文件(放置于特定目录repodata下),当yum客户端利用yum/dnf工具进行安装时包时,会自动
下载repodata中的元数据,查询远数据是否存在相关的包及依赖关系,自动从仓库中找到相关包下载并
安装。
3.1 客户端配置
3.1.1 客户端配置文件
/etc/yum.conf #为所有仓库提供公共配置
/etc/yum.repos.d/*.repo: #为每个仓库的提供配置文件
3.1.2 Repo仓库文件
在/etc/yum.repos.d/目录下创建.repo文件,写入:
[repositoryID#仓库名]
name=Some name for this repository #描述
baseurl=url://path/to/repository/ #仓库地址
enabled={1|0} #是否启用
gpgcheck={1|0} #是否校验
gpgkey=URL 校验key地址
enablegroups={1|0} #是否启用包组
failovermethod={roundrobin|priority}
roundrobin:意为随机挑选,默认值
priority:按顺序访问
cost= 默认为1000
注:yum仓库指向的路径一定必须是repodata目录所在目录
说明:在文件内可使用变量,常用变量有:
yum的repo配置文件中可用的变量:
$releasever: 当前OS的发行版的主版本号,如:8,7,6
$arch: CPU架构,如:aarch64, i586, i686,x86_64等
$basearch:系统基础平台;i386, x86_64
$contentdir:表示目录,比如:centos-8,centos-7
$YUM0-$YUM9:自定义变量
Baseurl有本地,网络,ftp等形式
file:// 本地路径
http://
https://
ftp://
3.2 yum命令
3.2.1 安装包
支持本地包安装和升级
yum localinstall|install rpmfile1 [rpmfile2] [...]
yum localupdate|update rpmfile1 [rpmfile2] [...]
语法:
yum [options] [command] [package ...]
选项:
-y #自动回答为"yes"
-q #静默模式
--nogpgcheck #禁止进行gpg check
--enablerepo=repoidglob #临时启用此处指定的repo,支持通配符,如:"*"
--disablerepo=repoidglob #临时禁用此处指定的repo,和上面语句同时使用,放在后面的生效
--downloadonly #只下载相关包默认至/var/cache/yum/x86_64/7/目录下,而不执install/upgrade/erase
--downloaddir=
范例:
[root@centos8 Packages]# yum -y install httpd #安装apache
3.2.2 列出仓库和包
3.2.2.1 列出仓库
语法:yum repolist [all|enabled|disabled]
-v选项可查看详细信息
3.2.2.2 列出包
语法:
yum list
yum list [all | glob_exp1] [glob_exp2] [...]
yum list {available|installed|updates} [glob_exp1] [...]
3.2.3 卸载包
语法:yum remove | erase package1 [package2] [...]
3.2.4 升级和降级
语法:
检查可用:yum check-update
升级和降级:
yum upgrade|update [package1] [package2] [...]
yum upgrade-minimal #最小化升级
yum downgrade package1 [package2] [...] (降级)
3.2.5 查询
查看程序包information:
yum info [...]
查看指定的特性(可以是某文件)是由哪个程序包所提供:
yum provides | whatprovides feature1 [feature2] [...]
注意:文件要写全路径,而不只是文件名,否则可能无法查询到
查看依赖:yum deplist httpd
3.2.6 其他命令
3.2.6.1 仓库缓存
3.2.6.1.1 构建缓存
语法:yum makecache
3.2.6.1.2 清除缓存
语法; yum clean [ packages | metadata | expire-cache | rpmdb | plugins | all ]
3.2.6.2 历史事务
在进行包安装时会将记录保存到/var/log/yum.log内
yum history [info|list|packages-list|packages-info|summary|addon[1]info|redo|undo|rollback|new|sync|stats] 使用命令可进行查看
私有yum仓库
私有仓库实现:
- 缓存包,将网络仓库上的安装被缓存到本地
#CentOS 7 以前版本,reposync工具来自于yum-utils包
reposync --repoid=REPOID --download-metadata -p /path
- 创建仓库
createrepo [options]
- 更改客户端配置文件
将仓库地址baseurl指向自定地址
编译安装
程序包编译安装:
源代码-->预处理-->编译-->汇编-->链接-->执行
多文件:文件中的代码之间,很可能存在跨文件依赖关系
- 编译前准备
a) 准备:安装相关的依赖包
- 编译安装
a) 第一步:运行 configure 脚本,生成 Makefile 文件
其选项主要功能: 可以指定安装位置 指定启用的特性等
获取帮助:./configure –help
安装路径设定
--prefix=/PATH:指定默认安装位置,默认为/usr/local/
--sysconfdir=/PATH:配置文件安装位置
System types:支持交叉编译
软件特性和相关指定:
Optional Features: 可选特性
--disable-FEATURE
--enable-FEATURE[=ARG]
Optional Packages: 可选包
--with-PACKAGE[=ARG] 依赖包
--without-PACKAGE 禁用依赖关系
注意:通常被编译操作依赖的程序包,需要安装此程序包的"开发"组件,其包名一般类似于name[1]devel-VERSION
b) 第二步:make
c) 第三步:make install
d) 安装后配置
1. 二进制程序目录导入至PATH环境变量中
在/etc/profile.d/下创建.sh文件
写入:export PATH=/PATH/TO/BIN:$PATH
2. 相关用户及文件
有些开源软件编译完成后,还需要创建相关的用户及文件
3. 导入帮助手册
编辑/etc/man.config|man_db.conf文件,添加一个MANPATH
Ubuntu软件管理工具
Ubuntu下的软件管理工具apt
- 安装
apt install package 支持-y选项
- 查询
a) apt list 列出包
b) apt search package 搜索包
c) apt show package 查看包信息
- 卸载
a) apt remove package 卸载包
b) apt autoremove package 自动卸载,可解决依赖问题
- 修改仓库后执行apt update更新索引
- apt upgrade升级已安装包
Linux存储和文件系统
磁盘基础
1.基于MBR的分区 主分区: 不能再划分更小的分区,主分区+扩展<=4,可以有多个,一个硬盘只有一个主分区处于激活状态(启动系统) 1-4 扩展分区:可以有,也可以没有,有只有一个,不能直接使用,划分更小的分区才能使用 1-4 逻辑分区(逻辑驱动器):必须由扩展分区的划分出来的 5~
基于GPT的分区 只有主分区
- 磁盘命名
a) 磁盘设备的设备文件命名:
/dev/DEV_FILE
使用不同的表示区分不同的磁盘如虚拟磁盘vd,xvd
在/dev/下用a-z,aa,ab…对不同的磁盘表示
如/dev/sda, /dev/sdb,,,
使用数字表示同一块磁盘的不同分区
如:/dev/sda1,/dev/sda2,,
分区管理
- 查看分区
a) Lsblk 查看块设备
b) fdisk -l [-u] [device...] 查看分区
- 创建分区
a) fidsk MRB分区
b) gdisk GPT分区
c) 创建过程
i. 第一步 fidsk device
ii. 第二步交互式创建分区
常用子命令:
p 分区列表
t 更改分区类型
n 创建新分区
d 删除分区
v 校验分区
u 转换单位
w 保存并退出
q 不保存并退出
l 查看文件系统
注:默认文件系统为当前系统文件系统,创建swap和其他格式分区时需使用t命令更改文件系统,保存退出后使用partprobe同步分区表。以上步骤只是将分区创建出来,要使用还需执行
- 挂载
a) 临时挂载:mount dir /dev/device<新创建的分区>
b) 永久挂载:修改/etc/fstab文件,格式:
UUID=8d7c4b9c-b624-4f45-8877-e0e946f5f012 / xfs defaults 0 0 device 挂载位置 文件系统 其他选项 0 0
c)执行mount -a命令
2.swap需要使用mkswap创建文件系统,swapon启用分区
Raid基础
- raid简介
独立硬盘冗余阵列(RAID, Redundant Array of Independent Disks),旧称廉价磁盘冗余阵列(Redundant Array of Inexpensive Disks),简称磁盘阵列。利用虚拟化存储技术把多个硬盘组合起来,成为一个或多个硬盘阵列组,目的为提升性能或数据冗余,或是两者同时提升。
- 不同级别的raid
a) Raid0
RAID-0
以 chunk 单位,读写数据,因为读写时都可以并行处理,所以在所有的级别中,RAID 0的速度是最快的。 但是RAID 0既没有冗余功能,也不具备容错能力,如果一个磁盘(物理)损坏,所有数据都会丢失
读、写性能提升
可用空间:N*min(S1,S2,...)
无容错能力
最少磁盘数:1+
b) Raid1
也称为镜像, 两组以上的N个磁盘相互作镜像,在一些多线程操作系统中能有很好的读取速度,理论上读 取速度等于硬盘数量的倍数,与RAID 0相同。另外写入速度有微小的降低。
读性能提升、写性能略有下降
RAID-1
可用空间:1*min(S1,S2,...)
磁盘利用率 50%
有冗余能力
最少磁盘数:2+
c) Raid5
RAID5
所有磁盘上同时存储数据和校验数据,数据块和对应的校验信息存保存在不同的磁盘上,当一个数据盘损坏时,系统可以根据同一条带的其他数据块和对应的校验数据来重建损坏的数据。
读、写性能提升
可用空间:(N-1)*min(S1,S2,...)
有容错能力:
允许最多1块磁盘损坏
最少磁盘数:3, 3+
d) Raid10和raid01
RAID01 是先做条带化再作镜像,本质是对物理磁盘实现镜像;而 RAID10 是先做镜像再作条带化,是对虚拟磁盘实现镜像。
Raid10:
读、写性能提升
可用空间:N*min(S1,S2,...)/2
有容错能力:
每组镜像最多只能坏一块
最少磁盘数:4, 4+
动态逻辑卷
- 简述动态逻辑卷
LVM 把实际的物理磁盘数据映射到一个简单而灵活的虚拟逻辑存储视图上,藉以控制磁盘资源;
也就是重新考虑了管理文件系统和卷的方法,在文件系统管理中增加了一个额外的抽象层,可以实现虚拟分区或者动态建立一个逻辑卷以及更改卷的大小,允许文件系统跨越磁盘等功能。
物理卷(PV):Physical Volume
硬盘分区或从逻辑上与硬盘分区具有同样功能的设备(如 RAID),是 LVM 的基本存储逻辑块,
和基本的物理存储介质(如分区、磁盘等)不同的是,其中包含有 LVM 管理参数。
卷组(VG):Volume Group
LVM 中的最高抽象层,由一个或多个物理卷组成。可以在卷组上创建一个或多个逻辑卷。
逻辑卷(LV):Logical Volume
逻辑卷(LV)在卷组上建立,相当于非 LVM 系统中的分区,可以在其上创建文件系统,如 /home 或者 /var 等。
物理块(PE):Physical Extent
每一个物理卷被划分为大小相等的称为 PE(Physical Extents)的基本单元,具有唯一编号的 PE 是可以被 LVM 寻址的最小单元。PE 的大小是可配置的,默认为4MB。
- Lvm创建过程
a) 创建物理卷
创建物理卷
pvcreate /sda/device [/sda/ device] :可同时创建多个
b) 创建卷组
创建卷组
vgcreate [-s 指定PE大小] 卷名(vg0) 包含物理卷(/dev/sda1 /dev/sda2)
c) 创建逻辑卷
lvcreate [-l 通过指定PE数量设定大小 -L 直接设定大小如:1G] 逻辑卷名 卷组名
lvcreate -l 60%VG -n mylv testvg
d) 创建文件系统
mkfs.ext4 lvname 格式化为指定格式
e) 挂载使用
将创建好的lv写入fstab文件,执行mount -a命令
- Lvm在线扩容
lvresize -r -l +100%FREE /dev/VG_NAME/LV_NAME 扩容之前需确认卷组有剩余空间
- 快照功能
为现有逻辑卷创建快照,注意ext4必须使用-p r 实现只读
lvcreate -l 64 -s -n data-snapshot /dev/vg0/data
挂载快照,xfs注意要使用-o ro实现只读,访止快照被修改
mkdir -p /mnt/snap mount -o ro,nouuid /dev/vg0/data-snapshot /mnt/snap
恢复快照
umount /dev/vg0/data-snapshot umount /dev/vg0/data lvconvert --merge /dev/vg0/data-snapshot
删除快照
umount /mnt/snap lvremove /dev/vg0/data-snapshot
范例:
- 自建yum仓库,分别为网络源和本地源
a) 基于网络源
i. 备份原有文件
[root@centos8Packages]#mkdir /etc/yum.repos.d/bak;mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/bak
ii. 创建.repowenjian
[root@centos8 Packages]# vim /etc/yum.repos.d/CentOS.repo
iii. 写入网络源配置
root@centos8 yum.repos.d]# cat CentOS.repo.bak
[BaseOS]
name=BaseOS
baseurl=https://mirrors.aliyun.com/centos/$releasever/BaseOS/$arch/os/
https://mirrors.cloud.tencent.com/centos/$releasever/BaseOS/x86_64/os/
https://repo.huaweicloud.com/centos/$releasever/BaseOS/$arch/os/
https://mirrors.tuna.tsinghua.edu.cn/centos/$releasever/BaseOS/$arch/os/
gpgcheck=0
[epel]
name=epel
baseurl=https://mirrors.aliyun.com/epel/$releasever/Everything/$arch/
https://mirrors.cloud.tencent.com/epel/$releasever/Everything/$arch/
https://repo.huaweicloud.com/epel/$releasever/Everything/$arch/
https://mirrors.tuna.tsinghua.edu.cn/epel/$releasever/Everything/$arch/
gpgcheck=0
[AppStream]
name=AppStream
baseurl=https://mirrors.aliyun.com/centos/$releasever/AppStream/$arch/os/
https://mirrors.cloud.tencent.com/centos/$releasever/AppStream/$arch/os/
https://repo.huaweicloud.com/centos/$releasever/AppStream/$arch/os/
https://mirrors.tuna.tsinghua.edu.cn/centos/$releasever/AppStream/$arch/os/
gpgchech=0
iv. 测试
b) 基于本地源
i. 挂载光盘
[root@centos8 Packages]# mount /dev/sr0 /mnt/
ii. 备份原有文件
[root@centos8Packages]#mkdir /etc/yum.repos.d/bak;mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/bak
iii. 创建.repo文件
[root@centos8 Packages]# vim /etc/yum.repos.d/CentOS.repo
iv. 写入本地配置
[root@centos8 yum.repos.d]# cat CentOS.repo
[BaseOS]
name=BaseOS
baseurl=file:///mnt/BaseOS
gpgcheck=0
[AppStream]
name=AppStream
baseurl=file:///mnt/AppStream
gpgchech=0
v. 测试
- 编译安装http2.4,实现可以正常访问
a) 准备源码包
[root@centos8 data]# ls httpd-2.4.51.tar.bz2
b) 准备依赖包
yum -y install gcc apr-devel pcre-devel apr-util-devel openssl-devel redhat-rpm-config bzip2
解压缩
tar -xvf httpd-2.4.51.tar.bz2
c) 执行config脚本
./configure --prefix=/usr/local/httpd --sysconfdir=/etc/httpd --enable-ssl
d) 执行make &&make install命令
make && make install
e) 创建apache组和用户
groupadd -g 80 -r apache && useradd -g apache -r -u 80 -s /sbin/nologin apache
f) 修改配置文件
name=`hostname`; sed -ri 's/#(ServerName).*/\1 '$name':80/' /etc/httpd/httpd.conf
sed -ri -e 's/^(User).*/\1 apache/' -e 's/^(Group).*/\1 apache/' /etc/httpd/httpd.con
g) 创建/etc/profile.d/下.sh文件
echo "PATH=/usr/local/httpd/bin:$PATH" >/etc/profile.d/httpd.sh
. /etc/profile.d/httpd.sh
h) 启动服务
apachectl start
i) 测试
- 利用sed 取出ifconfig命令中本机的IPv4地址
[root@centos8 data]# ifconfig |sed -rn "/broad/s/[^0-9]+([0-9\.]+).*/\1/p"
10.0.0.8
- 删除/etc/fstab文件中所有以#开头,后面至少跟一个空白字符的行的行首的#和空白字符
[root@centos8 data]# sed -r '/^#/s/# ?//' /etc/fstab
/etc/fstab
Created by anaconda on Sun Nov 21 08:06:01 2021
Accessible filesystems, by reference, are maintained under '/dev/disk/'.
See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info.
After editing this file, run 'systemctl daemon-reload' to update systemd
units generated from this file.
UUID=8d7c4b9c-b624-4f45-8877-e0e946f5f012 / xfs defaults 0 0
UUID=bc823266-f139-4e8c-94cb-fc5b03fb1877 /boot xfs defaults 0 0
UUID=20ada6e7-9ce8-4586-9327-1c9f21869b1e /data xfs defaults 0 0
UUID=4b054c9e-546d-4a86-84b1-2f4392c12809 none swap defaults 0 0
- 处理/etc/fstab路径,使用sed命令取出其目录名和基名
[root@centos8 data]# echo "/etc/fstab" |sed -rn 's#(/.*/)(.*)#\1 \2#p'
/etc/ fstab