草庐IT

【linux | 打包压缩命令】

皮卡丘的blue 2024-02-09 原文

文章目录


前言

环境准备:
linux操作系统
VMware Workstation16.x
Centos7


打包压缩

  1. 压缩
  • 为什么要打压缩包?
    • 备份的时候,能节约空间
    • 网络传送的时候,能节约时间
  1. 打包压缩:
  • 目的:备份,还原

打包压缩:

  • 打包:很多文件放到一起成一个文件
  • 压缩:减少占用磁盘空间的操作

大文件超过4G的,无法传输 => 大文件的切割工具:将大文件切割(split)成很多小文件,然后我们就可以上传了

  1. Windows里的.rar压缩文件传递到linux里,是否能打开?
  • .zip : windows和linux都支持
  • .rar文件在linux里默认是不支持的
    =>
  • linux里的所有的压缩文件,windows里的都能打开
  • windows里的压缩文件,在linux里不一定就可以打开
  1. linux和Windows之间文件上传与下载的解决方法:
    (1). xftp => 在Windows安装
    (2). moba => 在Windows安装
    (3). lrzsz => 在linux里安装,在Windows里安装了xshell但是没安装xftp,在xshell中使用lrzsz工具
    • lrzsz的速度没有xftp快
    • 下载与使用:yum install lrzsz
      rz:recieve => linux里接受从windows里上传的文件
      sz:send => 将linux里的playbook.sh文件传到windows里

curl命令在linux里的使用
curl => 理解为linux里的字符界面的浏览器 下载
curl => 是默认安装在centos7的系统里,默认下载文件寻访在当前目录下
-O => 下载到当前文件夹
-o /backup/nginx.tar.gz => 指定下载到/backup目录下叫nginx.tar.gz

  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 1048k  100 1048k    0     0   572k      0  0:00:01  0:00:01 --:--:--  572k
[root@master ~]# ls /backup
beijing  filepath.txt  hubei  nginx.tar.gz  yunnan
[root@master ~]# 
[root@master ~]# curl  -o /backup/nginx-1.21.6.tar.gz  http://nginx.org/download/nginx-1.21.6.tar.gz
将http://nginx.org/download/nginx-1.21.6.tar.gz  # 文件下载到本地的/backup目录下叫nginx-1.21.6.tar.gz

1. zip/unzip

zip只能对文件进行压缩,不能对文件夹进行压缩

  • zip的使用
    • 如:zip passewd.zip passwd
      • passwd.zip => 打包压缩文件名
      • passwd => 源文件名
  • unzip的使用
    unzip => 是解压的命令
[root@localhost backup]# unzip passwd.zip 
Archive:  passwd.zip
  inflating: passwd   

Archive 附件: 一个压缩包或者压缩文件就称为一个附件
存档文件,归档文件
其实就是将一个文件压缩或者很多文件放到一个文件里,把很多东西放到一起 => 这个过程就称呼归档,存档
deflated 泄气(压缩)
inflate: 解压

2. gzip/gunzip

.gz压缩文件

直接在原文件上进行压缩,添加后缀名.gz
[root@localhost backup]# gzip passwd

查看压缩文件里的内容
[root@localhost backup]# zcat passwd.gz

解压文件
[root@localhost backup]# gunzip passwd.gz

3. xz

  • xz 也是linux系统默认安装的压缩工具
    .xz压缩文件

压缩

[root@localhost backup]# xz passwd
[root@localhost backup]# ls
beijing  filepath.txt  guangdong  hunan  passwd.xz  passwd.zip  shenzhen

查看压缩文件里的内容
[root@localhost backup]# xzcat passwd.xz

解压文件并查看

[root@localhost backup]# unxz passwd.xz
[root@localhost backup]# ls
beijing  filepath.txt  guangdong  hunan  passwd  passwd.zip  shenzhen
[root@localhost backup]# 

xz与gzip的区别

空间占用

xz的压缩效果比gzip好,压缩后占用的空间比较少,压缩需要的时间长
gzip压缩速度快,但是效果一般

文件比较小,使用xz或者gzip都可以
如果文件比较大,建议使用xz压缩,可以节约更多磁盘空间

时间对比

4. bzip2

bzip2 也是linux里的压缩工具
.bz2压缩文件

解压:bunzip2

查看压缩文件的内容bzcat

前四个压缩工具总结

zip、gzip、xz、bzip2

  • 都是只能给一个文件打压缩包,不推荐给文件或者多个文件夹打压缩包

5. 打包命令——tar

用途:制作归档文件、释放归档文件
格式:tar [选项]… 归档文件名 源文件或目录
解压:tar [选项]… 归档文件名 [-C 目标目录]
使用tar命令打的压缩包叫tarball => 即tar包
=> 归档文件:将很多个文件或者文件夹打包到一个文件里,然后可以对归档文件进行压缩
.tar => 其实是归档,不进行压缩
.tar.gz => 先归档,然后调用gzip进行压缩 =>速度快
.tar.xz => 先归档,然后调用xz进行压缩 =>压缩效果好
.tar.bz2=> 先归档,然后调用bzip2进行压缩

常用命令选项

-c:创建 .tar 格式的包文件  create
-x:解开.tar格式的包文件
-v:输出详细信息
-f:表示使用归档文件  file
-t:列表查看包内的文件  list
-p:保持原文件的原来属性
-P:保持原文件的绝对路径
-z 调用gzip去压缩
-J 调用xz去压缩
-j 调用bzip2去压缩

打压缩包

tar -czf => .tar.gz
tar czf => .tar.gz
tar cJf => .tar.xz
tar cjf => .tar.bz2

  1. 打包压缩一个文件或者文件夹
[root@master luoyawei]# cp /boot  . -r
[root@master luoyawei]# ls
boot  passwd
# 将当前目录下的passwd文件打包成passwd.tar.gz压缩包
[root@master luoyawei]# tar  czf  passwd.tar.gz   passwd   
                                   压缩文件        源文件
[root@master luoyawei]# ls
boot  passwd  passwd.tar.gz
  1. 文件和文件夹可以一起打包到一个压缩文件里
[root@master luoyawei]# tar  czf   /lianxi/luoyawei/boot_passwd.tar.gz   /boot   /etc/passwd
tar: 从成员名中删除开头的“/”
[root@master luoyawei]# tar  czf   /lianxi/luoyawei/boot_passwd_log.tar.gz   /boot   /etc/passwd  /var/log
tar: 从成员名中删除开头的“/”
[root@master luoyawei]# 
  1. 排除多个文件或者文件夹
    include 包含
    exclude 排除
[root@master luoyawei]# tar --exclude=/boot/{grub2,grub,efi}  -czf /lianxi/luoyawei/no_grub2_boot.tar.gz  /boot
  1. linux 不看重后缀名,命名不小心错误,可以file一下可以看出是什么压缩包

[root@master luoyawei]# tar  czf  passwd.tar.xz  passwd 
[root@master luoyawei]# ls
boot  passwd  passwd.tar.gz  passwd.tar.xz
[root@master luoyawei]# file passwd.tar.gz
passwd.tar.gz: gzip compressed data, from Unix, last modified: Tue Apr 12 19:55:59 2022
[root@master luoyawei]# file passwd.tar.xz
passwd.tar.xz: gzip compressed data, from Unix, last modified: Tue Apr 12 19:57:08 2022
  1. 打包文件,里面嵌入当前的日期
    date 是linux里查看时间的命令
    格式化输出日期:

+%Y year 年
%m month 月
%d day 日
%H hour 小时
%M minute 分钟
%S seconde 秒
%F 效果跟%Y-%m-%d类似

[root@hunan-wangzhe-5 lianxi]# date +%Y%m%d
20211027
[root@hunan-wangzhe-5 lianxi]# date +%Y-%m-%d
2021-10-27
[root@localhost lianxi]# echo $(date +'%F %H:%M:%S')
2022-05-07 19:18:47

获得日期给变量,然后调用变量

[root@master luoyawei]# ctime=$(date +%Y%m%d)
[root@master luoyawei]# echo $ctime
20220412
[root@master luoyawei]# 
[root@master luoyawei]# tar  czf  boot-$ctime.tar.gz /boot 

小结:

  1. 如果文件名一样,后面打包的文件会覆盖原来的文件
  2. 可以指定压缩包存放路径(绝对路径)
  3. 使用绝对路径打压缩包
[root@localhost luoyawei]# mkdir /weihong
[root@localhost luoyawei]# pwd
/lianxi/luoyawei
[root@localhost luoyawei]# tar czf /weihong/passwd.tar.gz /etc/passwd
tar: 从成员名中删除开头的“/”
[root@localhost luoyawei]# ls /weihong
passwd.tar.gz

查看压缩包

tar tf

解压

tar xf

  • xf
    # Extract all files from archive.tar.
    Extract 提取,解压

可以指定压缩包解压路径,默认解压在当前文件夹

[root@master luoyawei]# tar xf /weihong/passwd.tar.gz 
[root@master luoyawei]# ls
boot  etc  hosts.tar.gz
[root@master luoyawei]# ls etc/
passwd
[root@master luoyawei]# tar tf /weihong/passwd.tar.gz 
etc/passwd

tar xf <压缩包名> -C <解压到的路径>

[root@master luoyawei]# ls /nongda_weihong/
[root@master luoyawei]# tar xf /weihong/passwd.tar.gz   -C /nongda_weihong/
[root@master luoyawei]# ls /nongda_weihong/
etc

总结

本文章主要介绍了linux里的打包压缩相关命令,前半部分介绍了四种主要的压缩工具zip,gzip,xzip,bzip2,后面部分介绍了tar命令的打包与解包使用。

有关【linux | 打包压缩命令】的更多相关文章

  1. ruby - 使用 RubyZip 生成 ZIP 文件时设置压缩级别 - 2

    我有一个Ruby程序,它使用rubyzip压缩XML文件的目录树。gem。我的问题是文件开始变得很重,我想提高压缩级别,因为压缩时间不是问题。我在rubyzipdocumentation中找不到一种为创建的ZIP文件指定压缩级别的方法。有人知道如何更改此设置吗?是否有另一个允许指定压缩级别的Ruby库? 最佳答案 这是我通过查看ruby​​zip内部创建的代码。level=Zlib::BEST_COMPRESSIONZip::ZipOutputStream.open(zip_file)do|zip|Dir.glob("**/*")d

  2. ruby - 在 Ruby 中编写命令行实用程序 - 2

    我想用ruby​​编写一个小的命令行实用程序并将其作为gem分发。我知道安装后,Guard、Sass和Thor等某些gem可以从命令行自行运行。为了让gem像二进制文件一样可用,我需要在我的gemspec中指定什么。 最佳答案 Gem::Specification.newdo|s|...s.executable='name_of_executable'...endhttp://docs.rubygems.org/read/chapter/20 关于ruby-在Ruby中编写命令行实用程序

  3. ruby-on-rails - rbenv:从 RVM 移动到 rbenv 后,在 Jenkins 执行 shell 中找不到命令 - 2

    我从Ubuntu服务器上的RVM转移到rbenv。当我使用RVM时,使用bundle没有问题。转移到rbenv后,我在Jenkins的执行shell中收到“找不到命令”错误。我内爆并删除了RVM,并从~/.bashrc'中删除了所有与RVM相关的行。使用后我仍然收到此错误:rvmimploderm~/.rvm-rfrm~/.rvmrcgeminstallbundlerecho'exportPATH="$HOME/.rbenv/bin:$PATH"'>>~/.bashrcecho'eval"$(rbenvinit-)"'>>~/.bashrc.~/.bashrcrbenvversions

  4. ruby - Ruby 的压缩库? - 2

    是否有任何可用于Ruby的开源压缩/解压库?有没有人实现过LZW?或者,是否有任何使用压缩组件的开源库可以提取出来独立使用?编辑——感谢您的回答!我应该提到我必须压缩的是只驻留在数据库中的长字符串(我不会压缩文件)。此外,如果可以执行此操作的任何库都具有用于客户端压缩/分解的等效JavaScript实现,那将是理想的,因为这将用于Web应用程序。 最佳答案 您会在rubystdlib下找到所有已交付的ruby​​库的一个很好的列表.我会使用zlib库,它是开放的,无处不在,您会发现几乎所有语言的库!

  5. ruby - 从 Ruby : capturing the output while displaying the output? 运行 shell 命令 - 2

    我有一个问题。我想从另一个ruby​​脚本运行一个ruby​​脚本并捕获它的输出信息,同时让它也输出到屏幕。亚军#!/usr/bin/envrubyprint"Enteryourpassword:"password=gets.chompputs"Hereisyourpassword:#{password}"我运行的脚本文件:开始.rboutput=`runner`putsoutput.match(/Hereisyour(password:.*)/).captures[0].to_s正如您在此处看到的那样,存在问题。在start.rb的第一行,屏幕是空的。我在运行程序中看不到“输入您的密

  6. ruby - 是否有将图像文件转换为 ASCII 艺术的命令行程序或库? - 2

    有这样的事吗?我想在Ruby程序中使用它。 最佳答案 试试这个http://csl.sublevel3.org/jp2a/此外,Imagemagick可能还有一些东西 关于ruby-是否有将图像文件转换为ASCII艺术的命令行程序或库?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/6510445/

  7. ruby - 在 Ruby 的 if 语句中检查 bash 命令 - 2

    如何在Ruby的if语句中检查bash命令的返回值(true/false)。我想要这样的东西,if("/usr/bin/fswscell>/dev/null2>&1")has_afs="true"elsehas_afs="false"end它会提示以下错误含义,它总是返回true。(irb):5:warning:stringliteralincondition正确的语法是什么?更新:/usr/bin/fswscell寻找afs安装和运行状态。它会抛出这样的字符串,Thisworkstationbelongstocell如果afs没有运行,命令以状态1退出 最

  8. ruby - 可以正常中断的来自 Rake 的长时间运行的 shell 命令? - 2

    在几个项目中,我希望有一个类似rakeserver的rake任务,它将通过任何需要的方式开始为该应用程序提供服务。这是一个示例:task:serverdo%x{bundleexecrackup-p1234}end这行得通,但是当我准备停止它时,按Ctrl+c并没有正常关闭;它中断了Rake任务本身,它说rakeaborted!并给出堆栈跟踪。在某些情况下,我必须执行Ctrl+c两次。我可能可以用Signal.trap写一些东西来更优雅地中断它。有没有更简单的方法? 最佳答案 trap('SIGINT'){puts"Yourmessa

  9. ruby - Capistrano 中的执行、测试和捕获命令有什么区别? - 2

    关于SSHkit-Github它说:Allbackendssupporttheexecute(*args),test(*args)&capture(*args)来自SSHkit-Rubydoc,我明白execute实际上是test的别名?test之间有什么区别?,execute,capture在Capistrano/SSHKit中我应该什么时候使用? 最佳答案 执行只是执行命令。使用非0退出引发错误。测试方法的行为与execute完全相同,但是它返回bool值(true如果命令以0退出,而false否则)。它通常用于控制任务中的流程

  10. ruby - 如何在 Ruby 中执行 Windows CLI 命令? - 2

    我在目录“C:\DocumentsandSettings\test.exe”中有一个文件,但是当我用单引号编写命令时`C:\DocumentsandSettings\test.exe(我无法在此框中显示),用于在Ruby中执行命令,我无法这样做,我收到的错误是找不到文件或目录。我尝试用“//”和“\”替换“\”,但似乎没有任何效果。我也使用过系统、IO.popen和exec命令,但所有的努力都是徒劳的。exec命令还使程序退出,这是我不想发生的。提前致谢。 最佳答案 反引号环境就像双引号,所以反斜杠用于转义。此外,Ruby会将空格解

随机推荐