2025年2月24日 星期一 甲辰(龙)年 腊月廿四 设为首页 加入收藏
rss
您当前的位置:首页 > 计算机 > 软件应用 > 压缩解压

使用 gzexe 压缩和执行 shell 脚本

时间:11-21来源:作者:点击数:20

前言

在Linux系统中,shell 脚本是非常常见的自动化和任务管理工具。然而,随着脚本变得越来越复杂,其大小也可能随之增加,尤其是包含了大量注释和日志信息时。为了优化脚本的存储空间和传输效率,我们可以使用 gzexe 工具对脚本进行压缩。

本文将介绍 gzexe 的功能、安装方法以及使用示例,帮助你更好地理解和应用这一工具。

什么是 gzexe?

gzexe 是一个可以压缩 shell 脚本的工具。它通过使用 gzip 将脚本压缩成一个更小的文件,同时保留脚本的可执行性。压缩后的脚本在执行时,会自动解压缩并运行原始脚本内容。

安装 gzexe

在大多数现代的 Linux 发行版中,gzexe 是 gzip 软件包的一部分。你可以通过以下命令安装 gzip 及其附带的 gzexe 工具:

在 Debian/Ubuntu 系统上安装:

  • sudo apt-get update
  • sudo apt-get install gzip

在 CentOS/RHEL 系统上安装:

  • sudo yum install gzip

安装完成后,你可以通过运行 gzexe 命令来验证是否安装成功:

  • gzexe --version

如果安装成功,你应该会看到 gzexe 的版本信息。

使用 gzexe 压缩脚本

使用 gzexe 压缩脚本非常简单。以下是一个基本的使用示例:

1. 创建一个示例脚本 example.sh
  • #!/bin/sh
  • echo "This is a test script."
2. 添加可执行权限
  • chmod +x example.sh
3. 使用 gzexe 压缩该脚本:
  • gzexe example.sh

运行以上命令后,你会看到类似以下的输出:

  • example.sh: 28.7% -- replaced with example.sh~

这表示 gzexe 已经成功压缩了 example.sh 脚本,并生成了一个备份文件 example.sh~。

4. 查看压缩后的脚本:
  • ls -lh example.sh example.sh~

你会看到原始脚本 example.sh 已经被压缩替换,并且无法看懂脚本实际内容,

  • $ cat example.sh
  • #!/bin/sh
  • skip=49
  • tab=' '
  • nl='
  • '
  • IFS=" $tab$nl"
  • umask=`umask`
  • umask 77
  • gztmpdir=
  • trap 'res=$?
  • test -n "$gztmpdir" && rm -fr "$gztmpdir"
  • (exit $res); exit $res
  • ' 0 1 2 3 5 10 13 15
  • case $TMPDIR in
  • / | /*/) ;;
  • /*) TMPDIR=$TMPDIR/;;
  • *) TMPDIR=/tmp/;;
  • esac
  • if type mktemp >/dev/null 2>&1; then
  • gztmpdir=`mktemp -d "${TMPDIR}gztmpXXXXXXXXX"`
  • else
  • gztmpdir=${TMPDIR}gztmp$$; mkdir $gztmpdir
  • fi || { (exit 127); exit 127; }
  • gztmp=$gztmpdir/$0
  • case $0 in
  • -* | */*'
  • ') mkdir -p "$gztmp" && rm -r "$gztmp";;
  • */*) gztmp=$gztmpdir/`basename "$0"`;;
  • esac || { (exit 127); exit 127; }
  • case `printf 'X\n' | tail -n +1 2>/dev/null` in
  • X) tail_n=-n;;
  • *) tail_n=;;
  • esac
  • if tail $tail_n +$skip <"$0" | gzip -cd > "$gztmp"; then
  • umask $umask
  • chmod 700 "$gztmp"
  • (sleep 5; rm -fr "$gztmpdir") 2>/dev/null &
  • "$gztmp" ${1+"$@"}; res=$?
  • else
  • printf >&2 '%s\n' "Cannot decompress $0"
  • (exit 127); res=127
  • fi; exit $res u}fexample.shSVӏˌѯϠJMψWP
  • ʈ,V¢Dբ㤢̂=%.𫲪(

备份文件 example.sh~ 保留了未压缩的原始脚本内容。

5. 运行压缩的脚本:
  • $ ./example.sh
  • This is a test script.

你应该会看到脚本输出 This is a test script.,这表示压缩后的脚本可以正常运行。

工作原理

gzexe 使用 gzip 对脚本内容进行压缩,并将解压缩和执行逻辑嵌入到压缩后的脚本中。当你执行压缩后的脚本时,嵌入的逻辑会先解压缩脚本内容,然后执行解压缩后的原始脚本。

以下是 gzexe 的工作流程:

  1. 读取原始脚本内容。
  2. 使用 gzip 压缩脚本内容。
  3. 生成一个新的 shell 脚本文件,其中包含解压缩和执行逻辑,以及压缩后的脚本数据。
  4. 将原始脚本文件重命名为 filename~ 作为备份。
  5. 用生成的新脚本文件替换原始脚本文件。

恢复压缩前的脚本

如果你需要恢复压缩前的脚本内容,可以使用备份文件 filename~。例如:

  • mv example.sh~ example.sh

这将恢复原始的未压缩脚本 example.sh。

解压

如果你只拿到了压缩后的脚本,可用使用如下命令解压

  • gzexe -d example.sh

解压后可以看到脚本原本内容

  • $ cat example.sh
  • #!/bin/sh
  • echo "This is a test script."

压缩率

使用 gzexe 对小文件压缩,可能体积减小的不明显,甚至会增大,但是对大文件压缩,就能体现其压缩效果了,如下

  • $ ls sotruss -lh
  • -rwxr-xr-x 1 liyongjun liyongjun 4.3K 627 23:43 sotruss
  • $ gzexe sotruss
  • sotruss: 60.6%
  • $ ls sotruss -lh
  • -rwxr-xr-x 1 liyongjun liyongjun 2.6K 627 23:43 sotruss
方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
上一篇:UPX:究极打包利器 下一篇:很抱歉没有了
推荐内容
相关内容
栏目更新
栏目热门
本栏推荐