专栏首页张戈的专栏Shell下制作自解压安装包,实现脚本的简单加密

Shell下制作自解压安装包,实现脚本的简单加密

一、原理阐述

在 linux 下可以用几个最基本的命令制作一个自解压的程序。其原理是:利用 cat 命令可以将两个文件连起来(用>>追加也能达到同样效果),前一个文件是 shell 脚本,负责执行解压和安装;后一个文件是一个压缩包。

把这两个文件通过 cat 连接成一个新的可执行文件,前面是解压程序,后面是压缩包,当你执行这个自解压文件时,会先执行前面的 shell 脚本,利用 tail -n 取得后面的压缩包内容并往下执行解压和调用动作。这样就具有自动解压和安装的功能了。这里比较重要的命令是 tail -n 将后多少行(也就是压缩文件的内容)进行解压。

如此一来,也实现了内容的简单加密,使用 cat 合并两个文件之后,你再用 cat 去获取得到的内容会发现都是乱码,而且只要 shell 脚本行数和解压路径不知道,一时半会也很难找到源代码(当然,应该可以通过 history 来查看。)

二、程序执行逻辑

  • 执行程序中的 shell 脚本代码
  • 把程序后面的部分进行解压
  • 执行源码安装和部署脚本
  • 退出程序

三、应用举例

假如当前目录下有一个压缩文件 httpd.tar.gz,压缩包内有一个 httpd 文件夹,文件夹内有 httpd 的安装脚本 install.sh 和其他相关文件,现在需要将这个压缩文件制作成自解压并自动执行 install.sh 的可执行文件。现在开始介绍:

1.编写自解压引导脚本 setup.sh

#vim setup.sh

#!/bin/bash   
line=`wc -l $0|awk '{print $1}'`   
line=`expr $line - 10`    
tail -n $line $0 |tar zx -C /usr/local/src   
cd /usr/local/src/httpd   
./install.sh   
ret=$?   
#以下注释行(含此行)由代码中$line-10的10(假如叫n)来决定,应该补齐代码总行数为n+1行,这里即为11行   
#   
#   
exit $ret

这个就是负责解压和调用安装脚本(install.sh)的引导脚本(或称“头文件”)

2.制作安装 tar 包

httpd.tar.gz 是一个 apache 源码包的一个 tar.gz 包,里面已经 DIY 加入了 install.sh 脚本,也就是包含了手动安装 apache 所用的如./configure --with prefix=/usr/local/apache2,make,make install 之类的安装命令。 反正就是在 apache 原始安装包解压后加入了 install.sh 脚本,然后使用命令 tar cvzf httpd.tar.gz httpd/ 重新打包为 httpd.tar.gz Ps:也就是说,若要手动安装,这解压这个包,然后执行./install.sh 即可安装 apache 了。

3.制作最后的自解压安装程序

cat setup.sh httpd.tar.gz >install_httpd   
chmod +x install_httpd

自解压安装程序的使用方法非常简单:

执行 ./install_httpd 即可自动安装 apache

注意:需要以 root 用户执行。

写在最后:这个教程百度能搜到很多,但是之前的内容如果是新手去看的话,可能有点难理解,一旦理解了就会觉得很容易,我重新整理了下,改成了更容易理解的应用举例即相关说明,希望和我当初一样的刚学 linux 的新人能快速学会这个方法。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 教你如何查看Linux的CPU负载

    记得博主以前被问到 CPU 负载如何才算高的时候,出过一次糗,具体就不记录了。。。在网上找了一篇比较详细的 Linux 下的 CPU 负载算法教程,科普一下。不...

    张戈
  • WordPress后台首页显示RSS错误的解决办法

    这两天,麻烦不断,可能是因为我折腾的比较频繁吧!老是出现奇奇怪怪的问题,而且百度、GG 居然搜不到有用的解决办法!折腾了大半天,终于被我搞定,虽然还是很笨的方法...

    张戈
  • 详解Linux系统的CPU负载均值

    上一篇文章的最后,作者提到了文章的参考来源,我特意前往访问了下,发现写得非常不错,特转过来,可以结合阅读,以便更容易理解 CPU 负载这个概念。 你可能对于 L...

    张戈
  • DBA核心的价值是什么(一)

    今天下午在思考几个问题,工作的本质是什么?DBA的核心价值是什么?有哪些工作是DBA不可取代的?在整理的过程中,也有了一些心得体会。

    jeanron100
  • R&Python Data Science 系列:数据处理(2)

    承接R&Python Data Science 系列:数据处理(1)继续介绍剩余的函数。

    1480
  • ZNV 力维曹友盛:AIoT 如何赋能智慧城市创新实践 | AIoT+智慧城市峰会

    12月20日,雷锋网主办的AIoT+智慧城市峰会在深圳举行,ZNV力维首席技术官曹友盛在峰会上分享了ZNV AIoT架构设计与 AIoT如何赋能智慧城市的创新实...

    AI掘金志
  • Pandas tricks 之 transform的用法

    如下销售数据中展现了三笔订单,每笔订单买了多种商品,求每种商品销售额占该笔订单总金额的比例。例如第一条数据的最终结果为:235.83 / (235.83+232...

    超哥的杂货铺
  • 数据库连接引擎那点事儿

    天长,地久。天地之所以能长且久者,以其不自生也,故能长生。是以圣人后其身而身先,外其身而身存,非以其无私邪?故能成其私。——老子

    大牧莫邪
  • jupyter notebook中import tensorflow 错误,socket.gaierror: [Errno -5] No address associated with host...

    jupyter notebook中import tensorflow 错误,出现错误的原因是,我们在安装anaconda时,jupyter已经默认安装了,安装所...

    水球喵子
  • ShadowBreaker方程式工具包浅析

    今日,臭名昭著的方程式组织工具包再次被公开,TheShadowBrokers在steemit.com博客上提供了相关消息。 本次被公开的工具包大小为117.9M...

    云鼎实验室

扫码关注云+社区

领取腾讯云代金券