当前位置: 首页 > news >正文

Day1011

1. LVM

lvm.jpg

  1. 简单使用
# 安装LVM
apt install -y lvm2# 创建pv(pv与硬盘名/分区名相同)
pvcreate /dev/sdb /dev/sdc
# 查看pv列表
pvs
# 查看pv详情
pvdisplay /dev/sdb# 创建vg(默认4M,可指定但感觉没必要改成16M)
vgcreate -s 16M testvg /dev/sdb /dev/sdc
# 查看vg列表
vgs
# 查看vg详情
vgdisplay testvg# 创建lv
lvcreate -L 10G -n lv1 testvg
# 指定剩余余量的百分比
lvcreate -l 100%free -n lv2 testvg
# 查看lv列表
lvs
# 查看lv详情
lvdisplay /dev/testvg/lv2# 查看硬盘列表
lsblk# 创建文件系统
mkfs -t ext4 /dev/testvg/lv1
# 查看已创建文件系统的可使用的硬盘
blkid | grep BLOCK_SIZE
# 挂载文件系统到指定目录
mount /dev/testvg/lv1 /mnt/lv1
# 查看挂载的文件系统
df -Th
# 尝试写入文件
echo hhh >> /mnt/lv1/lv1.zzz
cat /mnt/lv1/lv1.zzz# 扩容
pvcreate /dev/sdd
## vg扩容(将pv加入指定vg)
vgextend testvg /dev/sdd
## lv扩容,记得扩容文件系统(当然可以一键扩容lv和文件系统)
lvextend -L +2G /dev/testvg/lv1
## resize2fs扩容ext4的文件系统,xfs需要使用xfs_growfs(用法一致)
resize2fs /dev/testvg/lv1
## 一键扩容(不用先扩容lv再扩容文件系统,一条命令搞定)
lvresize -r -L +5G /dev/testvg/lv1
df -Th# 缩容(首先要备份保证数据完整,这样才可以操作lv和vg的缩容,当然扩容是不会有影响的)
## 取消挂载
umount /mnt/lv1
## 先缩容文件系统
resize2fs /dev/testvg/lv1 10G
## 检查是必须的,否则无法缩容lv(没必要记,直接缩容lv会提示先检查)
e2fsck -f /dev/testvg/lv1
## 后缩容lv
lvreduce -L 10G /dev/testvg/lv1
## 最后重新挂载
mount /dev/testvg/lv1 /mnt/lv1
df -Th# 删除
##  删除lv
lvremove /dev/testvg/lv1 /dev/testvg/lv2
## 删除后就看不到了也不能挂载了
blkid |grep BLOCK_SIZE
## 删除vg
vgremove testvg
## 删除pv
pvremove /dev/sdd /dev/sdb /dev/sdc
  1. 硬盘有容量, 分区有容量, 文件系统也有容量(扩容后记得同步下文件系统容量), ext4可以缩容但xfs不支持缩容, 需要备份后删除重建

  2. 假如创建testvg的vg和lv1的lv, lvm会创建两个设备文件: /dev/mapper/testvg-lv1/dev/testvg/lv1

    1. 这两个设备文件本质上是链接文件, 链接到同一个地方/dev/dm-0, dmX就是LVM(逻辑卷)创建的设备名, 平时使用/dev/testvg/lv1, 老系统为了兼容使用/dev/mapper/testvg-lv1

2. 软件管理

1. 相关概念

  1. 代码通过编译会生成而二进制包及配置并打包好, 在官网一般是源码的.tar.gz形式, 在包管理平台一般是.rpm形式(debian系列是.deb), 一般都是动态链接(静态链接生成的包比较大还可能冗余), 安装本质上是将压缩包里面的内容解压到指定的目录中, 程序通过动态链接依赖、加载配置等流程从而正常运行

    1. 包管理平台的镜像源可以切换, 在/etc/yum.repos.d/rocky*.repo/etc/apt/sources.list.d/ubuntu.sources中更改镜像源
    2. 包命名就懒得看了, 包的版本还是要注意的, 手动安装程序一般是需要先安装依赖的, 但这些依赖有的是指定到修订版本号的, 还有某些版本的包在官网也是找不到的, 可能有漏洞或者bug什么的下架了, 所以使用包管理工具就好, 最好不要离线安装
      1. 在线安装就是通过包管理工具安装如yum/dnf、apt等, 离线安装是通过本地的包管理器安装如rpm、dpkg等
      2. 包管理工具相比包管理器最大的优势就是可以自动管理依赖关系
  2. 编译环境主要是基础环境, 比如基础os+编译器+相关依赖即可正常编译, 除此之外还有一些定制配置, 在编译时需要指定哪些功能开启哪些关闭, 比如nginx可以选择关闭https模块只保留http模块等, 之后通过开关内核参数来实现性能的极致优化, 是可以这么操作, 但通常是没必要的, 内存相对没有那么贵, 追求稳定就不要给自己找

  3. 软件源仓库主要由属性目录(如repodata、dists)和软件目录(packages、pool)这两个重要部分组成, 前者记录软件的版本、依赖等, 后者是包的实体, 软件源仓库的配置如下所示

    # 红帽系列
    ## /etc/yum.repos.d/rocky.repo
    [aliyun-baseos]
    name=Rocky Linux $releasever - BaseOS
    baseurl=https://mirrors.aliyun.com/rockylinux/$releasever/BaseOS/$basearch/os/
    gpgcheck=0
    enabled=1[aliyun-appstream]
    name=Rocky Linux $releasever - AppStream
    baseurl=https://mirrors.aliyun.com/rockylinux/$releasever/AppStream/$basearch/os/
    gpgcheck=0
    enabled=1...# debian系列(两种,推荐前者,因为后者不能关闭gpg检查)
    ## /etc/apt/sources.list也可以,但为了方便管理还是使用/etc/apt/sources.list.d/docker.list吧
    ## /etc/apt/sources.list.d/docker.list
    deb [trusted=yes] https://mirrors.aliyun.com/docker-ce/linux/ubuntu noble stable## /etc/apt/sources.list.d/ubuntu.sources
    Types: deb
    URIs: https://mirrors.aliyun.com/ubuntu/
    Suites: noble noble-updates noble-backports
    Components: main restricted universe multiverse
    Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpgTypes: deb
    URIs: https://mirrors.aliyun.com/ubuntu/
    Suites: noble-security
    Components: main restricted universe multiverse
    Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg
    

2. 包管理器

  1. 红帽系列

    # rpm 常用命令# 查询相关
    # 查看已安装的软件列表
    rpm -qa | less
    # 查看软件信息
    rpm -qi nginx
    # 查看软件内部所有相关文件
    rpm -ql nginx
    # 反向查询指定文件是哪个软件的相关文件
    rpm -qf /etc/nginx/nginx.conf# -v显示过程,-h显示进度条
    # 安装
    wget https://mirrors.aliyun.com/epel/9/Everything/x86_64/Packages/n/nginx-1.20.1-1.el9.x86_64.rpm -O downloads/nginx-1.20.1-1.rpm
    rpm -ivh ./nginx-1.20.1-1.el9.x86_64.rpm# 移除(保留配置)
    rpm -evh nginx
    # 移除(删软件+删配置)
    rpm -e --eraseconfig nginx
    
  2. debian系列

    # dpkg 常用命令# 查询相关
    # 查看已安装的软件列表
    dpkg -l | less
    # 查看软件信息
    dpkg -s nginx
    # 查看软件内部所有相关文件
    dpkg -L nginx
    # 反向查询指定文件是哪个软件的相关文件
    dpkg -S /etc/nginx/nginx.conf# 无vh选项,默认是显示的
    # 安装
    wget https://mirrors.aliyun.com/epel/9/Everything/x86_64/Packages/n/nginx-1.20.1-1.el9.x86_64.rpm -O downloads/nginx-1.20.1-1.rpm
    dpkg -i ./nginx-1.20.1-1.rpm# 移除(保留配置)
    dpkg -r nginx
    # 移除(删软件+删配置)
    dpkg -P nginx
    

3. 包管理工具

  1. 红帽系列

    # yum/dnf 常用命令# 安装
    yum install nginx -y
    yum install nginx-1.20.1 -y# 移除(保留配置)
    yum remove nginx
    # 移除(删软件+删配置)
    yum remove nginx --erase-configs
    # 移除无引用关系的依赖
    yum autoremove# 搜索
    # yum search nginx
    yum list | grep nginx# 更新所有软件
    yum update# 更新软件源信息
    yum clean all
    yum makecache
    # 查看当前可用仓库
    yum repolist# 查看安装历史
    yum history
    
  2. debian系列

    # apt 常用命令# 安装(指定版本时必须写全)
    apt install nginx -y
    apt install nginx=1.20.1-1ubuntu1 -y# 移除(保留配置)
    apt remove nginx
    # 移除(删软件+删配置)
    apt purge nginx
    # 移除无引用关系的依赖
    apt autoremove# 搜索
    # apt search nginx
    apt list | grep nginx
    # apt-cache madison nginx# 更新所有软件
    apt upgrade# 更新软件源信息
    apt clean all
    apt update
    # 查看当前可用仓库
    apt policy | grep 100# 查看安装历史
    cat /var/log/dpkg.log
    

3. 打包压缩

# -z指定格式,-v查看过程,-f指定文件,-c创建归档,-x解开归档
# 打包并压缩
tar -zcvf xxx.tar.gz ~/downloads/xxx# 解包并解压
tar -zxvf xxx.tar.gz -C ~/downloads# 查看包中的内容
tar -tvf ddd.tar.gz# 压缩
zip -v xxx.zip ~/downloads/xxx
# 解压
unzip xxx.zip -d ~/downloads

4. 源码编译安装nginx

  1. nginx是大型c项目, 只使用gcc去编译怕是得老了, 所以需要使用make这个自动化编译工具
    1. ./configure是生成编译规则的, 通过这个可以实现项目的定制, 从而生成Makefile
    2. 在当前项目的目录下执行make开始编译, 它将按照Makefile中的模块与配置去编译生成二进制文件并将其放到objs临时目录下
    3. 之后执行make installobjs中的最终文件复制到Makefile中指定的安装目录下
    4. 最后软链二进制文件到usr/sbin/nginx, 并写一份服务配置文件到/etc/systemd/system/nginx.service即可
  2. 因为我不想使用宿主机做实验, 所以用了alpine做, 但是alpine编译出来的不能在其他linux系统中使用
    1. 正式的linux系统和alpine的底层c库是不一样的, 前者使用的是glibc库, 编译出来的包是通用的, 可以在alpine中使用, 但alpine使用的是musl库, 它编译出来的包只能用于同样底层c库的系统
    2. 还有一个使用的原因是一般情况下为了减小镜像的大小都会使用alpine作为基础镜像的

正式开始

# 1. 准备编译环境(各系统需安装的包是不一样的)
sed -i.bak -e 's|http://dl-cdn.alpinelinux.org|https://mirrors.aliyun.com|g' /etc/apk/repositories
apk update
apk add gcc make g++ libc-dev pcre pcre-dev openssl-dev zlib-dev wget curl# 2. 获取代码
## wget版本太低可能无法拉取,升级一下就好
mkdir ~/downloads
wget -P ~/downloads http://nginx.org/download/nginx-1.26.2.tar.gz
tar -zxvf  ~/downloads/nginx-1.26.2.tar.gz -C ~/downloads# 3. 定制配置
cd ~/downloads/nginx-1.26.2
./configure --prefix=/data/nginx-1.26.2 --with-http_ssl_module --with-http_v2_module --with-http_realip_module --with-threads# 4. 编译
make# 5. 安装
make install# 6. 软链
ln -s /data/nginx-1.26.2/sbin/nginx /usr/sbin/nginx
## 测试是否可用
nginx
nginx -v
netstat -tulnp
curl http://localhost:80
curl $(ip a | awk '/global/{print $2}' | cut -d "/" -f1):80# 7. 服务配置文件(alpine中没必要,因为alpine没有systemd程序,容器启动也只有一个sh进程而已)
# /etc/systemd/system/nginx.service
## 描述信息
[Unit]
Description=nginx server with https
After=network.target## 启动配置
[Service]
Type=forking
PIDFile=/data/nginx-1.26.2/logs/nginx.pid
## 不要写-g "daemon off;",因为宿主机运行必须后台运行,之所以镜像加这个是因为必须前台运行否则容器会退出
ExecStart=/data/nginx-1.26.2/sbin/nginx
ExecReload=/data/nginx-1.26.2/sbin/nginx -s reload
ExecStop=/data/nginx-1.26.2/sbin/nginx -s quit## 运行级别
[Install]
WantedBy=multi-user.target

docker镜像

FROM crpi-3nfwk4ni7qhe665f.cn-beijing.personal.cr.aliyuncs.com/ahahahop1/alpine:3.6 AS builder
RUN sed -i.bak -e 's|http://dl-cdn.alpinelinux.org|https://mirrors.aliyun.com|g' /etc/apk/repositories && \apk update && \apk add gcc make g++ libc-dev pcre pcre-dev openssl-dev zlib-dev wget
ARG NGINX_VERSION=1.26.2
RUN wget -P /data/downloads http://nginx.org/download/nginx-${NGINX_VERSION}.tar.gz &&\tar -zxvf /data/downloads/nginx-${NGINX_VERSION}.tar.gz -C /data/downloads && \cd /data/downloads/nginx-${NGINX_VERSION} && \./configure --prefix=/data/nginx --with-http_ssl_module --with-http_v2_module --with-http_realip_module --with-threads && \make && \make install
# COPY nginx.conf /data/nginx-${NGINX_VERSION}/conf/nginx.confFROM crpi-3nfwk4ni7qhe665f.cn-beijing.personal.cr.aliyuncs.com/ahahahop1/alpine:3.6 
RUN sed -i 's|http://dl-cdn.alpinelinux.org|https://mirrors.aliyun.com|g' /etc/apk/repositories && \apk add --no-cache pcre libssl1.0 zlib
COPY --from=builder /data/nginx /data/nginx
WORKDIR /data/nginx
ENV PATH=$PATH:/data/nginx/sbin
CMD ["nginx", "-g", "daemon off;"]

5. 服务管理

  1. systemd很久之前就替代了init, ll /sbin/init 现在的init也只是systemd的软链
  2. unitsystemd所管理的对象, unit有很多类型, 常用的一般有servicesocket, 可能用到的还有target
  3. 在不同的target(运行级别)下, 启动的服务可能不同, 在/etc/systemd/system/*.service中配置
  4. 常用的命令就那么几个, 只是有两个需要区别一下
    1. systemctl daemon-reload是重新加载systemd的配置, 即修改.service后缀的文件如/etc/systemd/system/docker.service
    2. systemctl reload <service>是重新加载软件自身的配置, 如/etc/docker/daemon.json
http://www.jsqmd.com/news/677805/

相关文章:

  • 5分钟掌握《经济研究》LaTeX模板:从零基础到完美排版
  • 三亚安易捷建筑装饰工程:三亚商铺拆除 酒店拆除值得选择的公司 - LYL仔仔
  • 太阳能灌溉控制系统设计与低功耗优化实践
  • 别再只用dp了!Android屏幕适配进阶:手动控制dpi防止布局被系统设置搞乱
  • 合肥豪杰汽车服务:专业做合肥汽车租赁的公司 - LYL仔仔
  • 2026年CPPM/SCMP正规授权报考机构推荐 采购人报考指南与避坑清单 - 众智商学课栈
  • 告别官方Example!手把手教你用Vivado 2017.4为Aurora 8B/10B IP核定制Streaming模式数据源
  • Qwerty Learner:3步打造你的双语肌肉记忆系统,让打字成为学习新方式
  • 从‘找茬’到‘抠图’:OpenCV图像分割实战指南(迭代法、OSTU、区域生长法详解)
  • 保姆级教程:手把手配置SAP EPIC对接建设银行付款接口(从FBZP到STRANS全流程)
  • 好写作AI:期刊论文的“审稿人思维预演系统”,专治“写完就被拒”
  • 保姆级避坑指南:用DCA1000和mmWave Studio 2.0采集AWR1843雷达数据(从接线到.bin文件生成)
  • 省人工好维护,适合茶饮连锁和便利店的全自动商用咖啡机推荐 - 品牌2026
  • Spring Boot 异步任务执行性能优化
  • 保姆级教程:用R语言ggplot2为你的基因表达数据绘制带拟合线和统计指标的‘高级感’散点图
  • 2026年湿式静电除尘:湿式静电除尘(雾)器、湿式静电除雾器、热电湿电除尘器、玻璃钢湿电除尘器、生物质锅炉湿电除尘器选择指南 - 优质品牌商家
  • 蓝奏云直链解析架构解析:三步实现自动化文件获取的最佳实践
  • 破局制造业AI落地:从技术引入到工程化交付的实践之路
  • IDM 试用期重置方案:技术解析与自动化实现
  • 昆山找靠谱律师哪里找 2026年实用参考 - 品牌排行榜
  • 陕西义眼定制机构推荐:欣目医疗,用专业与温度重塑自信人生 - 深度智识库
  • 终极AI背景去除神器:3分钟让你的视频和图片秒变透明!
  • 制造业工厂SolidWorks云主机资源动态调度:如何让10人SolidWorks设计团队流畅设计?
  • 2026年无锡比较好的展厅公司公司推荐分析,地产三维动画/三维动画/宣传片/展厅设计/产品三维动画,展厅公司公司推荐 - 品牌推荐师
  • 如何在Windows上轻松安装安卓应用:APK安装器完整指南
  • 量子计算入门必读:波函数与量子比特的底层联系是什么?(从薛定谔方程到量子门)
  • 从陀螺仪漂移到位置修正:图解SINS精对准中的误差传递链
  • STM32 ADC实战:土壤湿度传感器数据采集与校准全解析
  • 合肥豪杰汽车服务:团建租车电话 - LYL仔仔
  • 告别文件‘盲盒’:用python-magic在Windows/Mac/Linux上精准识别文件类型(附中文路径解决方案)