Linux压缩工具

tar:打包目录调用压缩算法

介绍:前面我们提到了,大多数压缩工具只能针对单一文件进行操作,如果你要压缩目录的话就会很麻烦,这时候我们可以使用tar这个打包工具,将目录内的多个文件打包成一个文件,再进行压缩。

 解压工具介绍:
 zip   压缩免费开源压缩算法,兼容性高,压缩率相对较低
 gz    GNU组织优化版的zip,仅在Linux平台使用,压缩率高于zip
 bz2   gz升级版,仅在Linux平台使用,压缩率高于gz
 xz    压缩率高于bz2,但是压缩速度慢,资源占用高
 ​
 tar 打包目录,调用压缩算法压缩打包好的文件;
 -c         创建打包文件
 -x         解开打包文件
 -v         显示过程
 -f         指定压缩文件
 -z         gzip算法
 -j         bzip2算法
 -J         xz算法
 -C         指定解压缩的目录
 -t         查看tar包内的文件
 -p         不修改文件属性
 -P         允许压缩路径中包含有"/"
 --exclude  压缩过程中排除指定的文件
 ​
 tar -cvf etc.tar  /etc       # 仅归档不压缩
 tar -czvf etc.tar.gz  /etc   # 使用gzip压缩
 tar -cjvf etc.tar.bz2 /etc   # 使用bzip2压缩
 tar -cJvf etc.tar.xz  /etc   # 使用xz压缩
 ​
 例:
 压缩
 [root@zuolaoshi test]# tar -czf etc.tar.gz etc
 [root@zuolaoshi test]# ls
 etc  etc.tar.gz
 解压缩
 [root@zuolaoshi test]# ls
 etc.tar.gz
 [root@zuolaoshi test]# tar -xf etc.tar.gz 
 [root@zuolaoshi test]# ls
 etc  etc.tar.gz
 查看压缩包内容
 [root@zuolaoshi test]# tar -tf etc.tar.gz
 etc/
 etc/libreport/
 etc/libreport/workflows.d/
 etc/libreport/workflows.d/report_uploader.conf
 etc/libreport/workflows.d/anaconda_event.conf
 .
 .
 .
 查询压缩包里面的文件信息
 [root@zuolaoshi test]# tar -tvf etc.tar.gz |more
 drwxr-xr-x root/root         0 2019-10-21 04:35 etc/
 drwxr-xr-x root/root         0 2019-10-21 04:35 etc/libreport/
 drwxr-xr-x root/root         0 2019-10-21 04:35 etc/libreport/workflows.d/
 .
 .
 .
 解压压缩包指定的文件
 [root@zuolaoshi test]# tar -tvf etc.tar.gz | grep shadow
 ---------- root/root       792 2019-10-21 04:35 etc/gshadow
 ---------- root/root      1506 2019-10-21 04:35 etc/shadow
 ---------- root/root       781 2019-10-21 04:35 etc/gshadow-
 ---------- root/root      1374 2019-10-21 04:35 etc/shadow-
 -rw-r--r-- root/root       214 2019-10-21 04:35 etc/pam.d/sssd-shadowutils
 [root@zuolaoshi test]# tar -xf etc.tar.gz etc/shadow
 [root@zuolaoshi test]# ls
 etc  etc.tar.gz
 [root@zuolaoshi test]# ls etc
 shadow
 ​

lrzsz:本地和服务器上传下载

 安装lrzsz方法:
 yum install -y lrzsz
 ​
 使用方法:
 rz            上传
 sz            下载
 ​

wget:下载

特点:它有几个非常实用的特点,特别适合服务器环境:

  1. 非交互式(省心):你敲下命令后,它就在后台默默下载,哪怕你退出了终端,它也能继续跑,不需要你一直盯着。

  2. 断点续传(防中断):如果下载大文件时网络突然断了,它可以从断开的地方继续下载,不用从头再来。

  3. 支持协议多:支持 HTTP、HTTPS、FTP 等最常见的网络协议。

  4. 递归下载(能爬网站):它不仅能下载单个文件,还能顺着网页里的链接,把整个网站或者整个目录的文件都扒下来(像爬虫一样)。

 ========================================
        wget 命令常用选项速查表
 ========================================
 选项    说明
 ----------------------------------------
 -c                         #  断点续传(下载中断后,再次执行可从断开处继续,不用重头再来)
 -b                         #  后台下载(不占用当前终端界面,默默在后台运行)
 -P [目录]                  #  指定保存目录(例如:-P /tmp 把文件直接存到 tmp 文件夹中)
 -O [新文件名]              #  下载并重命名(例如:-O app.zip 把下载的文件存为 app.zip)
 -i [文件]                  #  批量下载(从指定的文本文件中读取链接,一行一个,逐个下载)
 -q                         #  静默模式(下载时不输出任何进度条和状态信息)
 -t [次数]                  #  设置重试次数(例如:-t 10 网络波动失败后自动重试 10 次)
 -T [秒数]                  #  设置超时时间(例如:-T 30 如果 30 秒没响应就放弃连接)
 --limit-rate=[速度]        #  限速下载(例如:--limit-rate=500k 限制下载速度为 500KB/s)
 --no-check-certificate    #  跳过 SSL 证书验证(下载 HTTPS 资源证书报错时常用)
 ========================================
 常用组合示例:
   wget https://example.com/file.zip                                     # 基础下载单个文件
   wget -c https://example.com/bigfile.iso                               # 断点续传下载大型文件
   wget -b -o wget.log https://example.com/data.tar.gz                   # 后台下载,并把日志保存到 wget.log
   wget -P /opt/downloads -O redis.tar.gz https://redis.io/redis.tar.gz  # 下载到指定目录并重命名
   wget --limit-rate=1m https://example.com/video.mp4                    # 限制网速为 1MB/s 进行下载
   wget -i urls.txt                                                  # 从 urls.txt 文件中读取链接进行批量下载
 ========================================

nginx源码编译安装

介绍:GNU提供大量开源软件,我们可以下载到服务器自主编译安装;

高级语言分类:

* 编译型语言:例如C\C++、Go、Rust、Java,源码不能直接执行,需要编译器将源码"编译"成二进制程序(java字节码需要jvm运行);

* 解释型语言:例如:Python、Shell、JavaScript、PHP,源码可以被解释器直接运行;

 # 准备工作
 # 先配置好yum源,配好网络
 # 安装wget
 yum install -y wget
 ​
 # 下载nginx/redis源码,并编译;
 1.去官网下载源代码; nginx.org 
 cd /usr/local/src                                        #进入这个文件进行下载,文件会下载到/src里面
 wget https://nginx.org/download/nginx-1.31.0.tar.gz      #开始下载
 2.解压缩;
 tar -xvf nginx-1.31.0.tar.gz                             #解压文件                              
 3.安装编译环境;gcc make openssl                           #安装gcc、make、openssl
 yum install -y make zlib zlib-devel gcc-c++ libtool  openssl openssl-devel
 4.执行环境检测脚本;指定安装路径与开启的模块;
 cd nginx-1.31.0                                          #进入文件
 ./configure --with-http_stub_status_module --with-http_ssl_module    #检查linux环境(比如有没有安装必要的编译器、依赖库等)
 5.编译,make 
 make -j4                                                 #动用4个cpu核心,同时开工编译程序。
 6.安装,编译成功后,make install 
 make install                                             #正式安装到系统,可以使用。
 7.测试是否安装成功
 cd /usr/local/nginx/sbin                                 #进入文件目录
 ./nginx                                                  #启动器在目录里面,启动程序。
 systemctl stop firewalld                                 # 关闭防火墙
 systemctl disable firewalld                              # 开机不启动防火墙
 ​
 # 真机ping通Linux虚拟机;
 浏览器:地址栏输入Linux的ip地址;
 ​
 # nginx默认的web文件路径
 cd /usr/local/nginx/html

gdisk:磁盘分区工具

介绍:专门用来管理GPT分区表,升级版fdisk,支持超过2T硬盘分区。

 下载方式:
 yum install -y gdisk
 ​
 p    | 打印(Print)当前分区表
 n    | 新建(New)分区
 d    | 删除(Delete)分区
 t    | 修改(Type)分区类型代码
 i    | 查看(Info)分区详细信息
 w    | 写入(Write)磁盘并退出
 q    | 不保存退出(Quit)

LVM逻辑卷管理

介绍:磁盘的管理工具,可以灵活的对分区大小进行扩容或缩容。

PV:物理卷,将物理磁盘通过命令转换为物理卷PV

PE:默认4MB大小的数据存储单元,在PV中创建

VG:卷组,由多个P组合而成的“存储池”

LV:逻辑卷,在VG拆分出来建立文件系统,可以被系统挂载,当逻辑卷容量空间不足时,可以使用VG中剩余空间进行扩容也可以“缩容”(但不推荐),将多余空间回归到VG

 #下载lvm2
 yum install lvm2
 ​
 操作流程:
  添加物理磁盘 ->  pvcreate ( PV ) -> vgcreate (VG) -> lvcreate (LV) ->  mkfs.ext4 格式化  -> 
  mount 挂载 -> 创建文件 -> lvextend 扩容 -> 修复磁盘 让系统正确识别lv的容量
  
  
 功能/命令    物理卷管理     卷组管理      逻辑卷管理
 扫描         pvscan        vgscan       lvscan
 建立         pvcreate       vgcreate        lvcreate
 显示         pvdisplay       vgdisplay    lvdisplay
 删除         pvremove       vgremove        lvremove
 扩展                       vgextend        lvextend
 缩小                       vgreduce        lvreduce
 ​
 # 创建PV
 lsblk                             # 查看系统中磁盘的状态
 pvcreate /dev/sdb  /dev/sdc       # 将硬盘sdb、sdc初始化为物理卷
 pvscan                            # 扫描pv
 pvs                               # pv的简单信息
 pvdisplay                         # 查看pv的详细信息
 pvremove /dev/sdb /dev/sdc        # 移除pv,恢复磁盘
 ​
 ​
 # 创建VG
 vgcreate  vg1  /dev/sdb  /dev/sdc        # 建立vg(卷组)将sdb和sdc创建合并名为vg1的卷组
 vgs                                      # vg的简单信息
 vgdisplay                                # 查看vg的详细信息
 ​
 ​
 # 创建LV
 lvcreate -n lv1 -L 10G vg1               # 建立lv(逻辑卷)-n是指定逻辑卷名称 -L是指定逻辑卷大小 vg1卷组的名字
 lvdisplay                                # 查看lv的详细信息
 ls -l /dev/vg1/lv1                       # 查看/dev/vg1/lv1 逻辑卷的详细属性
 mkfs.ext4 /dev/vg1/lv1                   # 格式化/dev/vg1/lv1 逻辑卷为ext4 文件系统
 mkdir /mnt/data                          # 创建一个data名的文件 用来对接挂载的位置
 mount /dev/vg1/lv1 /mnt/data/            # 挂载 来实现使用分配好的空间
 ​
 ​
 #空闲全部分配及沾满分配
 lvcreate -n lv1 -l +100%FREE vg1         # 注:把vg剩余空间全部分配lv1  
 lvcreate -n lv1 -l +100%VG vg1           # 注:整个vg1的总容量全部分配lv1(包括已用,慎用!)
                 
  
 # 扩容命令
 umount /dev/vg1/lv1                      # 扩容之前确认好没有挂载,如果挂载了先卸掉,在扩容
 lvextend -L +30G /dev/vg1/lv1            # lv(逻辑卷)-L 指定大小 数值只能比原本的高
 lvextend -l +100%FREE /dev/vg1/lv1       # 注:-l :代表按物理扩展块(PE)的数量来分配空间。
                                          # +100%FREE:表示在现有基础上,增加卷组中 100% 的剩余空闲空间。
                                          
 e2fsck -f /dev/vg1/lv1                   # e2fsck是检查和修复ext2、ext3、ext4 等文件系统的核心工具
                                          # -f代表强制,意思是不管它看起来多健康,必须从头到尾强制检查一遍
                                          
 resize2fs /dev/vg1/lv1                   # 系统内核还没有同步到这部分新修改的信息,需要手动同步一下
 mount /dev/vg1/lv1  /mnt/data/           # 操作好扩容后并且修复和同步以后进行挂载
 df -h                                    # 查看是否挂载成功
 ​
 df -Th /dev/vg1/lv1                      # 确定文件系统类型 不同的文件类型执行刷新命令不一样
 ​
 ​
 # 缩容命令(生产环境慎用!)
 umount  /dev/vg1/lv1 
 e2fsck -f /dev/vg1/lv1
 resize2fs /dev/vg1/lv1 5G
 lvreduce -L 5G  /dev/vg1/lv1
 mount /dev/vg1/lv1 /mnt/data/
   
     

mdadm:软RAID

介绍:mdadm命令在Linux系统中创建和管理软件RAID磁盘阵列,而且它涉及的理论知识和操作过程与生产环境中的完全一致

mdadm用于创建、调整、监控和管理RAID设备,英文全称为“multiple devices admin”,语法格式为“mdadm参数 硬盘名称”。

RAID(冗余阵列独立磁盘)

RAID:特点介绍

  • 只追求性能,不关心数据安全:选 RAID 0优点:容量和读写速度翻倍(N 块盘总和)缺点:任意一块硬盘损坏,数据全丢适用:个人影音、缓存数据,可接受丢失的场景

  • 只追求极致安全,不关心性能和成本:选 RAID 1优点:数据实时镜像,任意一块硬盘损坏不影响数据缺点:容量利用率仅 50%,写入速度无提升适用:核心财务数据、用户数据库等关键信息

  • 平衡性能、容量与安全性,性价比最高:选 RAID 5优点:至少 3 块盘,支持一块硬盘故障恢复,容量利用率 ≈ (N−1)/N,读写性能均衡缺点:重建数据耗时,写入性能略低适用:中小型文件服务器、Web 服务器、一般数据库

  • 更高安全性,可容忍两块硬盘同时故障:选 RAID 6优点:至少 4 块盘,双校验,容错更强缺点:容量利用率更低(≈ (N−2)/N),成本更高适用:大容量存储、对安全要求极高的核心数据

  • 不差钱,追求极致性能+高安全:选 RAID 10优点:结合 RAID 1 镜像 + RAID 0 条带,性能强、容错高(每组可坏一块)缺点:容量利用率仅 50%,成本最高适用:金融系统、高频交易、高 IO 数据库

核心级别对比表格

RAID 级别

最少硬盘数

读写性能

冗余能力

空间利用率

典型应用场景

核心特点

RAID0

2

最优(并行)

无(单盘故障全丢)

100%

临时缓存、视频编辑

性能优先,无安全保障

RAID1

2

读好,写一般

允许 1 块故障(镜像)

50%

系统盘、重要文件存储

安全优先,性能中等

RAID5

3

读好,写中等

允许 1 块故障(单校验)

(n-1)/n

文件服务器、中小型数据库

平衡性能与冗余,成本适中

RAID6

4

读好,写较差

允许 2 块故障(双校验)

(n-2)/n

大容量存储、关键数据

高安全性,性能略低

RAID10

4

极佳(并行 + 镜像)

允许每组 1 块故障

50%

高 IO 数据库、交易系统

高性能 + 高安全,成本高

 软件安装:
 yum install mdadm
 ​
 # 创建
 mdadm -Cv /dev/md0 -n 4 -l 10 /dev/sd{b,c,d,e}            # 创建并显示过程 指定4块磁盘 RAID10
 mdadm -Q /dev/md0                                         # 查看简易信息 详细用 -D
 mkfs.ext4 /dev/md0                                        # 制作好的RAID格式为ext4格式
 mkdir /RAID                                               # 创建挂载点
 mount /dev/md0 /RAID                                      # 硬盘挂载
 df -h                                                     # 查看挂载情况
 ​
 # 模拟损坏及修复
 mdadm /dev/md0 -f /dev/sdb                                # -f 模拟设备损坏 /dev/sdb损坏
 mdadm /dev/md0 -r /dev/sdb                                # 移除指定故障盘
 mdadm /dev/md0 -a /dev/sdb                                # 系统默认会自动开始数据的同步工作
 mdadm -D /dev/md0                                         # 使用-D参数即可看到整个过程和进度(用百分比表示)
 ​
 ========================================
         mdadm 命令常用选项速查表
 ========================================
 选项    说明
 ----------------------------------------
 -C / --create     #  创建一个新的 RAID 阵列
 -A / --assemble   #  装配(激活)一个已经存在的 RAID 阵列
 -D / --detail     #  查看指定 RAID 阵列的详细信息
 -S / --stop       #  停止指定的 RAID 阵列
 -Q / --query      #  查看设备是否为 RAID 设备及其摘要信息
 -a / --auto       #  检测设备名称(若设备文件不存在则自动创建)
 -n / --raid-devices # 指定组成阵列的活动设备数量
 -l / --level      #  指定 RAID 级别(如 0、1、5、10 等)
 -v / --verbose    #  显示指令执行的详细过程
 -x / --spare-devices # 指定阵列中备用磁盘(热备盘)的数量
 -f / --fail       #  将阵列中的某个成员盘标记为故障(模拟设备损坏)
 -r / --remove     #  从阵列中移除指定的故障盘
 --add             #  向阵列中添加新的磁盘(用于替换故障盘或加备盘)
 --zero-superblock #  擦除磁盘上的 RAID 超级块信息(彻底删除 RAID 时用)
 --scan            #  扫描配置文件或 /proc/mdstat 获取缺失的信息
 ========================================
 常用组合示例:
   mdadm -Cv /dev/md0 -l 1 -n 2 /dev/sdb /dev/sdc   #  用两块盘创建 RAID1 阵列(显示详细过程)
   mdadm -Cv /dev/md0 -l 5 -n 3 /dev/sd{b,c,d}      #  用三块盘创建 RAID5 阵列
   mdadm -Cv /dev/md0 -l 5 -n 3 -x 1 /dev/sd{b,c,d,e} #  用三块盘创建 RAID5,并指定一块热备盘
   mdadm -D /dev/md0                                #  查看 md0 阵列的详细状态
   cat /proc/mdstat                                 #  查看当前系统所有 RAID 的同步进度
   mdadm /dev/md0 -f /dev/sdb                       #  模拟或标记 sdb 磁盘故障
   mdadm /dev/md0 -r /dev/sdb                       #  将故障的 sdb 盘从阵列中移除
   mdadm /dev/md0 -a /dev/sdd                       #  将新盘 sdd 加入阵列开始重建
   mdadm -S /dev/md0                                #  停止 md0 阵列
   mdadm --zero-superblock /dev/sdb                 #  擦除 sdb 上的 RAID 元数据
 ========================================
 ​