linux下一個好玩的自解壓腳本

周海漢 /文

2010.4.22

 

看集羣的東西時無意中看到幾年前流行的分佈式科學計算seti@home,美國伯克利大學等科學界用於計算天體數據的。SETI@home 是一項利用全球聯網的計算機共同搜尋地外文明(SETI)的科學實驗計劃。你可以通過運行一個免費程序下載並分析從射電望遠鏡傳來的數據來加入這個項目。 不過我再次使用其客戶端時,居然說沒有計算任務。看來外太空探索在美國也不受重視了。

 

SETI@home的客戶端 BOINC 軟件 ,linux下是一個sh腳本。有意思的是該腳本有4M多。我想什麼腳本這麼大啊?

下下來執行一下,居然在目錄下生成一堆東西。原來該腳本是個自解壓腳本。

 

分析了一下,自己並仿做了一個。

 

腳本前三行:

先建一個目錄test,並塞入一些要打包的東西

zhouhh@zhh64:~/test$ ls
sendmail.py  test.c  testfor.sh

zhouhh@zhh64:~/test$ vi test.sh

輸入:

#!/bin/sh
( read l; read l; read l ;exec cat ) < "$0" | gunzip | tar xf - && ls -l
exit
保存,並改爲可執行屬性。

該腳本的意思,三個read l,隨後一個cat,其實是讀取test.sh的前三行,並丟棄。即將該腳本的三行不做處理。從第四行開始,送給gunzip,再送給tar解壓,最後顯示解壓的結果。

 

zhouhh@zhh64:~/test$ tar -zcvf data.tar.gz *
sendmail.py
test.c
testfor.sh
test.sh

zhouhh@zhh64:~/test$ ls
data.tar.gz  sendmail.py  test.c  testfor.sh  test.sh

此時看到有一個tar.gz文件。

將其放到test.sh中:

zhouhh@zhh64:~/test$ cat data.tar.gz >> test.sh

zhouhh@zhh64:~/test$ ls -lh test.sh
-rwxr-xr-x 1 zhouhh zhouhh 1.4K 2010-04-22 17:04 test.sh

此時腳本有1.4k了。

新建個目錄去做實驗:

zhouhh@zhh64:~/test$ mkdir data
zhouhh@zhh64:~/test$ mv test.sh data
zhouhh@zhh64:~/test$ cd data
zhouhh@zhh64:~/test/data$ ls
test.sh
zhouhh@zhh64:~/test/data$ ./test.sh
總用量 16
-rwxr-xr-x 1 zhouhh zhouhh 975 2010-04-12 16:50 sendmail.py
-rw-r--r-- 1 zhouhh zhouhh  92 2010-04-22 12:06 test.c
-rwxr-xr-x 1 zhouhh zhouhh 558 2010-03-25 11:20 testfor.sh
-rwxr-xr-x 1 zhouhh zhouhh  88 2010-04-22 16:49 test.sh
zhouhh@zhh64:~/test/data$ ls
sendmail.py  test.c  testfor.sh  test.sh
zhouhh@zhh64:~/test/data$ cat test.sh
#!/bin/sh
( read l; read l; read l ;exec cat ) < "$0" | gunzip | tar xf - && ls -l
exit
此時data目錄下已經自解壓了原來test目錄下壓縮到data.tar.gz中的文件。

 

該腳本複雜一點可以繼續完成安裝等工作,有點類似於windows下winzip做的exe自解壓安裝文件。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章