linux怎样拷贝链接,作业——拷贝命令及其链接库

1),提示用户输入一个可执行命令的名称

2),获取此命令所依赖额所有库文件列表

3),复制命令至某目标目录(/mnt/sysroot,即把此目录当做根)下的对的路径中

bash,/bin/bash ===> /mnt/sysroot/bin/bash

useradd, /usr/sbin/useradd ===> /mnt/sysroot/usr/sbin/useradd

4),复制此命令所有依赖的所有库文件至目标目录对应的路径下:

/lib64/ld-linux-x86_64.so.2 ==>

/mnt/sysroot/lib64/ld-linux-x86_64.so.2

5,每次复制完成一个命令后,不要退出,而是继续提示用户输入命令,直到输入"quit"菜退出文

3c8ce6380daa33c267ccb0e2e66a02de.png

# 传递给函数可执行命令,复制命令程序和依赖库文件到指定目录 ,并且取掉绝对路径

f_copy_com_lib() {

command_path=$(which "$1" | grep -v "alias") #获取绝对路径

temp_dir=${command_path#*/} # 取掉绝对路径

temp_dir=${temp_dir%/*} # 取掉后面的文件文件名

mkdir -p $dir_path$temp_dir # 创建/mnt/sysroot下对应的的目录

cp -rf $command_path  $dir_path$temp_dir

#获取命令路径要注意两个问题:第一个要避开which查出结果有alias别名问题, which COM | grep -v "alias" 除去别名

#第一步,查出命令路径,第二步,去掉alias,第三步,查出命令所以来的库,第四步,获取库的准确路径

for lib_file in $( ldd $(which "$1" | grep -v "alias" ) | grep -o "/lib[^[:space:]]*") ; do

#a_library[$i]=$lib_file # 完整的库文件路径

temp_dir=${lib_file#*/} #取掉绝对路径 ${string#*word}

temp_dir=${temp_dir%/*} #去掉基名

mkdir -p $dir_path$temp_dir #创建一个库文件的路径

cp -rf $lib_file   $dir_path$temp_dir  #复制库文件到指定的目录中

#echo "${a_library[$i]}" #let i++

echo "$lib_file"

echo

done

}

while true ; do

cat << EOF

+++++++++++++++++++++++++++++++++++++++++++++++++

command)Please enter the system existing  command

quit) quit script

+++++++++++++++++++++++++++++++++++++++++++++++++

EOF

read -p "Please enter existing command:" v_command

if [ $v_command == "quit" ] ; then

break

fi

#如果输入的不存在的命令,处理

if ! ( which $v_command &>/dev/null ) ; then

echo "ERROR:command not found!"

continue # 进行下一次循环

fi

f_copy_com_lib  $v_command

don

3c8ce6380daa33c267ccb0e2e66a02de.png

原创文章,作者:不忘初衷,如若转载,请注明出处:http://www.178linux.com/67529

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值