Linux系统裁减之,制作一个极度精简的Linux-2-用脚本实现自动拷贝命令和依赖库文件...
第2章 用脚本实现自动拷贝命令和依赖库文件
这篇文章主要是对我上一篇博文https://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命令时,都做了哪些操作:
[[email protected] ~]# 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 ']'
[[email protected] ~]# sync ß把修改立刻同步到磁盘
注意:此时精简的Linux系统虚拟机不能是启动或挂起状态,必须处于关机状态。
打开精简的Linux系统马上可以看到结果,如下图:
小结:自动拷贝命令和依赖库文件的程序还做得不够方便,明天将继续完善,请继续关注我后续发布的博文!!^_^
欢迎继续关注我的后续博文:
第3篇:Linux系统裁减之,制作一个极度精简的Linux-3-为精简的系统增加网络功能和关机重启功能
https://blog.51cto.com/linuxprince/2047373
第4篇:Linux系统裁减之,制作一个极度精简的Linux-4-使用mingetty绕开/bin/login https://blog.51cto.com/linuxprince/2049081
第5篇:Linux系统裁减之,制作一个极度精简的Linux-5-重新编译login去除对pam模块的依赖 https://blog.51cto.com/linuxprince/2054153
转载于:https://blog.51cto.com/linuxprince/2046142