您当前的位置:首页 > 计算机 > 软件应用 > 压缩解压

使用 gzexe 压缩和执行 shell 脚本

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

前言

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