标签:
一、原理阐述
在 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
Shell
#!/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
1
2
3
4
5
6
7
8
9
10
11
#!/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.制作最后的自解压安装程序
Shell
cat setup.sh httpd.tar.gz >install_httpd chmod +x install_httpd
1
2
cat setup.sh httpd.tar.gz >install_httpd
chmod +x install_httpd
自解压安装程序的使用方法非常简单:
执行 ./install_httpd 即可自动安装 apache
注意:需要以 root 用户执行。
写在最后:这个教程百度能搜到很多,但是之前的内容如果是新手去看的话,可能有点难理解,一旦理解了就会觉得很容易,我重新整理了下,改成了更容易理解的应用举例即相关说明,希望和我当初一样的刚学 linux 的新人能快速学会这个方法。
标签:
来源: https://blog.csdn.net/qq_33468857/article/details/83188621