第2章 用腳本實現自動拷貝命令和依賴庫文件
這篇文章主要是對我上一篇博文http://blog.51cto.com/linuxprince/2045703加以完善的,前一篇文章中拷貝命令和依賴庫文件的過程是完全手工方式的,顯得特別LOW,這章把該過程完善一下,用腳本方式實現。
2.1命令具體實現方法
創建腳本文件bincp.sh輸入以下內容:
#!/bin/bash
#
DESPATH=/mnt/sysroot
libcp() {
LIBPATH=${1%/*}
[ ! -d $DESPATH$LIBPATH ] && mkdir -p $DESPATH$LIBPATH
[ ! -e $DESPATH$1 ] && cp $1 $DESPATH$LIBPATH && echo "Copy lib file $1 Finished."
}
bincp() {
BINPATH=${1%/*}
[ ! -d $DESPATH$BINPATH ] && mkdir -p $DESPATH$BINPATH
[ ! -e $DESPATH$1 ] && cp $1 $DESPATH$BINPATH
DEPLIBS=`ldd $1 | grep -o "/lib\(64\)\{0,1\}/[^[:space:]]\{1,\}"`
for LIB in $DEPLIBS;
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-3-爲精簡的系統增加網絡功能和關機重啓功能http://blog.51cto.com/linuxprince/2047373