1. 程式人生 > >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

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 的新人能快速學會這個方法。