1. 程式人生 > >Linux系統裁減之,制作一個極度精簡的Linux-用腳本實現自動拷貝命令和依賴庫文件

Linux系統裁減之,制作一個極度精簡的Linux-用腳本實現自動拷貝命令和依賴庫文件

用腳本實現自動拷貝命令和依賴庫文件

第2章 用腳本實現自動拷貝命令和依賴庫文件

這篇文章主要是對我上一篇博文http://blog.51cto.com/linuxprince/2045703加以完善的,前一篇文章中拷貝命令和依賴庫文件的過程是完全手工方式的,顯得特別LOW,這章把該過程完善一下,用腳本方式實現。

2.1命令具體實現方法

創建腳本文件bincp.sh輸入一下內容:

#!/bin/bash

#

DESPATH=/mnt/sysroot

libcp() {

LIBPATH=${1%/*}

[ ! -d $LIBPATH ] && mkdir -p $LIBPATH

[ ! -e $DESPATH$1 ] && cp $1 $DESPATH$LIBPATH

}

bincp() {

BINPATH=${1%/*}

[ ! -d $BINPATH ] && mkdir -p $DESPATH$BINPATH

[ ! -e $DESPATH$1 ] && cp $1 $DESPATH$BINPATH

for LIB in `ldd $1 | grep -o "/lib\(64\)\{0,1\}/[^[:space:]]\{1,\}"`;

do libcp $LIB;

done

}

bincp /bin/ls

執行一下看看拷貝/bin/ls命令時,都做了哪些操作:

[root@CentOS5lsrv01 ~]# bash -x bincp.sh

+ DESPATH=/mnt/sysroot

+ bincp /bin/ls

+ BINPATH=/bin

+ '[' '!' -d /bin ']'

+ '[' '!' -e /mnt/sysroot/bin/ls ']'

++ ldd /bin/ls

++ grep -o '/lib\(64\)\{0,1\}/[^[:space:]]\{1,\}'

+ for LIB in '`ldd $1 | grep -o "/lib\(64\)\{0,1\}/[^[:space:]]\{1,\}"`'

+ libcp /lib64/librt.so.1

+ LIBPATH=/lib64

+ '[' '!' -d /lib64 ']'

+ '[' '!' -e /mnt/sysroot/lib64/librt.so.1 ']'

+ cp /lib64/librt.so.1 /mnt/sysroot/lib64

+ for LIB in '`ldd $1 | grep -o "/lib\(64\)\{0,1\}/[^[:space:]]\{1,\}"`'

+ libcp /lib64/libacl.so.1

+ LIBPATH=/lib64

+ '[' '!' -d /lib64 ']'

+ '[' '!' -e /mnt/sysroot/lib64/libacl.so.1 ']'

+ cp /lib64/libacl.so.1 /mnt/sysroot/lib64

+ for LIB in '`ldd $1 | grep -o "/lib\(64\)\{0,1\}/[^[:space:]]\{1,\}"`'

+ libcp /lib64/libselinux.so.1

+ LIBPATH=/lib64

+ '[' '!' -d /lib64 ']'

+ '[' '!' -e /mnt/sysroot/lib64/libselinux.so.1 ']'

+ for LIB in '`ldd $1 | grep -o "/lib\(64\)\{0,1\}/[^[:space:]]\{1,\}"`'

+ libcp /lib64/libc.so.6

+ LIBPATH=/lib64

+ '[' '!' -d /lib64 ']'

+ '[' '!' -e /mnt/sysroot/lib64/libc.so.6 ']'

+ for LIB in '`ldd $1 | grep -o "/lib\(64\)\{0,1\}/[^[:space:]]\{1,\}"`'

+ libcp /lib64/libpthread.so.0

+ LIBPATH=/lib64

+ '[' '!' -d /lib64 ']'

+ '[' '!' -e /mnt/sysroot/lib64/libpthread.so.0 ']'

+ cp /lib64/libpthread.so.0 /mnt/sysroot/lib64

+ for LIB in '`ldd $1 | grep -o "/lib\(64\)\{0,1\}/[^[:space:]]\{1,\}"`'

+ libcp /lib64/ld-linux-x86-64.so.2

+ LIBPATH=/lib64

+ '[' '!' -d /lib64 ']'

+ '[' '!' -e /mnt/sysroot/lib64/ld-linux-x86-64.so.2 ']'

+ for LIB in '`ldd $1 | grep -o "/lib\(64\)\{0,1\}/[^[:space:]]\{1,\}"`'

+ libcp /lib64/libattr.so.1

+ LIBPATH=/lib64

+ '[' '!' -d /lib64 ']'

+ '[' '!' -e /mnt/sysroot/lib64/libattr.so.1 ']'

+ cp /lib64/libattr.so.1 /mnt/sysroot/lib64

+ for LIB in '`ldd $1 | grep -o "/lib\(64\)\{0,1\}/[^[:space:]]\{1,\}"`'

+ libcp /lib64/libdl.so.2

+ LIBPATH=/lib64

+ '[' '!' -d /lib64 ']'

+ '[' '!' -e /mnt/sysroot/lib64/libdl.so.2 ']'

+ for LIB in '`ldd $1 | grep -o "/lib\(64\)\{0,1\}/[^[:space:]]\{1,\}"`'

+ libcp /lib64/libsepol.so.1

+ LIBPATH=/lib64

+ '[' '!' -d /lib64 ']'

+ '[' '!' -e /mnt/sysroot/lib64/libsepol.so.1 ']'

[root@CentOS5lsrv01 ~]# sync ?把修改立刻同步到磁盤

註意:此時精簡的Linux系統虛擬機不能是啟動或掛起狀態,必須處於關機狀態。

打開精簡的Linux系統馬上可以看到結果,如下圖:

技術分享圖片


Linux系統裁減之,制作一個極度精簡的Linux-用腳本實現自動拷貝命令和依賴庫文件