脚本/root/bin/copycmd.sh

🔷编写脚本/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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值