需求及應(yīng)用場景
1、簡化操作。一般的軟件安裝過程,如果想要精簡步驟,我們一般會將需要在命令行中輸入的命令寫成一個腳本,同時將安裝介質(zhì)準(zhǔn)備好。我們將腳本和安裝介質(zhì)上傳到生產(chǎn)環(huán)境,然后通過執(zhí)行腳本來完成安裝。如果能夠?qū)⑦@兩個文件合并為一個可執(zhí)行文件,那安裝的過程就更簡單明了。
2、代碼保護。對于一段腳本,提供給用戶使用,但是不希望用戶看到腳本的內(nèi)容,可以通過將腳本發(fā)布為.bin的形式。這樣用戶在環(huán)境中可以執(zhí)行、安裝,但是無法看到里面的內(nèi)容,也無法修改,從而達(dá)到保護腳本內(nèi)容的目的。
實現(xiàn)方法
1、本文以在Redhat系統(tǒng)中安裝ftp命令為例說明,如何將安裝腳本和安裝介質(zhì)整合成一個文件,簡化操作。
首先,編寫一個腳本,包含安裝的命令。
#!/bin/sh
echo "Hello World"
dir_installation=/root/create_bin
sed -n -e '1,/^exit 0$/!p' $0 > "${dir_installation}/ftp-0.17-54.el6.x86_64.rpm" 2>/dev/null
cd $dir_installation
rpm -ivh ftp-0.17-54.el6.x86_64.rpm
rm ftp-0.17-54.el6.x86_64.rpm
exit 0
注意,這個腳本的關(guān)鍵在于sed,他會把exit 0后面的內(nèi)容提取出來,另存為rpm包,然后執(zhí)行安裝,安裝完成后刪掉rpm。
最后,我們用cat命令將腳本和安裝包生成一個新的文件。
這時,如果用file命令查看install-rpm.bin文件,可以發(fā)現(xiàn)它的類型還是文本類型,用vim編輯器打開,還是可以看到腳本內(nèi)容的,也可進行修改。
2、對于第二個隱藏代碼內(nèi)容的需求,有一款工具叫做 shc ,可以用它來將腳本編程二進制文件。
shc的用法比較簡單,下載后make生成可執(zhí)行文件,然后直接對腳本進行加密,會生成兩個文件。一個以.x結(jié)尾,為可執(zhí)行的二進制文件。另一個以.x.c結(jié)尾,為生成的中間c文件。shc還能指定可執(zhí)行腳本的過期時間。
wget http://www.datsi.fi.upm.es/~frosal/sources/shc-3.8.9b.tgz
tar xvfz shc-3.8.9b.tgz
cd shc-3.8.9b
make
./shc -v
shc parse(-f): No source file specified
shc Usage: shc [-e date] [-m addr] [-i iopt] [-x cmnd] [-l lopt] [-rvDTCAh] -f script
./shc -f install-rpm.bin
通過 shc 可以將腳本文件編譯成二進制文件,隱藏了腳本的內(nèi)容,對于一般的用戶是沒辦法查看和修改的。當(dāng)然,還是有辦法可以再將二進制文件轉(zhuǎn)換為純文本的腳本的。