linux命令移植-拷贝命令和相应的库到指定的地方

最近学习xen虚拟化,需要移植最小化系统,之前也学习过最小化系统,发现一段时间不用,里面的东西基本上都忘记了。今天正好来回顾下。

命令移植需要移植两个东西:

  1. 命令的本身
  2. 命令依赖的库

首先移植命令本身:

  1. 找到命令所在的地方.
    1. 通过which 找到命令的完整路径。

clip_image001

 

 

会发现还含有alias的信息,并且,命令前面还有空格。需要提取出来命令的路径。

首先去掉alias

clip_image002

然后只匹配/bin/ls,相当于匹配/之后的任意字符:

clip_image003

  1. 复制命令道目标目录的地方。由于是移植,需要目录结构和命令的目录结构保持一致。。那么难题来了,一个命令你需要找出它的目标位置,且要先判断是否存在这个目标位置,不存在的话,需要新建。县找出命令之前的目录。。

clip_image004

这两个grep都可以用来找出目录得地址。

那么在命令的基础上找出目录的命令则为 grep -o "^/.*/"

  1. 要找出库文件,并且对库文件进行复制。

通过ldd 可以找出命令所需要的库文件。

clip_image005

如何提取到/lib64/libcap.so.2这个东西出来。好难。这样就提取出来了。

clip_image006

  1. 复制函数

如果是命令复制的话,只需要复制一次,如果是库复制的话,需要复制很多次。

命令复制:

假设命令为$BIN_COMMAND 要复制的地方为$DEST_PATH

复制命令为

 acp{

CPATH=echo $1 | grep -o "/.*/"

[! d $DEST_PATH$PATH ] && mkdir $DEST_PATH$CPATH

[ ! e $DEST_PATH$PATH$1 ] && cp $1 $DEST_PATH$CPATH

}

以上的是单独的复制功能,那么整个复制都需要调用这个函数。

复制整个的过程为:

bin_cp{

for i in {ldd $1 | grep -o "/.*[^[:space:]]*"};

do acp I

done

echo "lib copy complete"

acp $1 && echo "bin $1 copy complete"

}

  1. 加上控制循环。

read -p "please input your commad" CMD

until $CMD=q ;do

! wich $CMD && read -p "commad err,please input again" $CMD && continue

$BIN_COMMAND=`which $CMD | grep -v "^alais" | grep -o "/.*"

bin_cp $BIN_COMMAND

read -p "please input your commad" CMD

done

 

  1. 完整的代码:

#!/bin/bash

DEST_PATH=/mnt

acp() {

        CPATH=`echo $1 | grep -o "/.*/"`

        [ ! -d $DEST_PATH$CPATH ] && mkdir -p $DEST_PATH$CPATH

        [ ! -e $DEST_PATH$1 ] && cp $1 $DEST_PATH$CPATH

}

bin_cp() {

        for i in `ldd $1 | grep -o "/[^[:space:]]*"`;

                do acp $i

        done

        echo "lib copy complete"

        acp $1 && echo "bin $1 copy complete"

}

 

read -p "please input your commad" CMD

until [ $CMD == 'q' ] ;do

        ! which $CMD && read -p "commad err,please input again" CMD && continue

        BIN_COMMAND=`which $CMD | grep -v "^alias" | grep -o "/.*"`

        bin_cp $BIN_COMMAND

        read -p "please input your commad" CMD

done

 

posted @ 2016-04-10 21:51  Lkad  阅读(1800)  评论(0编辑  收藏  举报