🔷编写脚本/root/bin/copycmd.sh
(1)提示用户输入一个可执行命令名称
(2)获取此命令所依赖到的所有库文件列表
(3)复制命令至某目标目录(例如/mnt/sysroot)下的对应路径下
如:/bin/bash ==> /mnt/sysroot/bin/bash
/usr/bin/passwd ==> /mnt/sysroot/usr/bin/passwd
(4)复制此命令依赖到的所有库文件至目标目录下的对应路径下:
如:/lib64/ld-linux-x86-64.so.2 ==> /mnt/sysroot/lib64/ld-linux-x86-64.so.2
(5)每次复制完成一个命令后,不要退出,而是提示用户键入新的要复制的命令,并重复完成上述功能;直到用户输入quit退出
#!/bin/bash
ch_root="/data/mnt"
[ ! -d $ch_root ] && mkdir $ch_root
bincopy(){
cmd_path=`which --skip-alias $command`
bin_dir=`dirname $cmd_path`
[ -d ${ch_root}${bin_dir} ] || mkdir -p ${ch_root}${bin_dir}
[ -f ${ch_root}${cmd_path} ] || cp $cmd_path ${ch_root}
echo "copy $cmd_path ========\> $ch_root$bin_dir"
return 0
}
libcopy() {
lib_list=$(ldd `which --skip-alias $command` | grep -Eo '/[^[:space:]]+')
for loop in $lib_list;do
lib_dir=`dirname $loop`
[ -d ${ch_root}${lib_dir} ] || mkdir -p ${ch_root}${lib_dir}
[ -f ${ch_root}${loop} ] || cp $loop ${ch_root}${lib_dir}
echo "copy $loop ========\> $ch_root$lib_dir"
done
}
while read -p "Please input a command or quit: " command;do
if [ $command == "quit" ];then
break
elif [ -z $command ];then
echo "please input again!"
continue
else
which $command &>/dev/null
if [ $? -ne 0 ];then
echo "command is not exit!"
continue
else
if bincopy ;then
libcopy
fi
fi
fi
done