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

本文介绍在Xen虚拟化环境中移植最小化系统的步骤,包括如何定位并复制命令及其依赖库文件,确保移植后的系统能够正常运行。

最近学习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

 

转载于:https://www.cnblogs.com/LKad/p/5375667.html

### 回答1: SDL在不同平台上的移植方法略有不同,以下是SDL在Windows、LinuxArm-Linux上的移植方法: 在Windows平台上,可以通过以下步骤来移植SDL: 1. 下载SDL的Windows版本开发,并将其解压到本地目录中。 2. 在Visual Studio中新建一个工程,并在工程中添加SDL的头文件路径文件路径。 3. 在工程中添加SDL的文件,并将SDL.dll文件放入工程的运行目录中。 4. 使用SDL提供的API进行开发。 在Linux平台上,可以通过以下步骤来移植SDL: 1. 安装SDL的开发,可以使用命令sudo apt-get install libsdl2-dev进行安装。 2. 在编译时加入SDL的文件,并使用SDL提供的API进行开发。 在Arm-Linux平台上,可以通过以下步骤来移植SDL: 1. 在交叉编译环境中安装SDL的开发。 2. 在编译时指定交叉编译器,并加入SDL的文件。 3. 将生成的可执行文件拷贝到目标设备上,并将SDL的文件拷贝到目标设备的路径中。 4. 在目标设备上运行可执行文件。 以上是SDL在不同平台上的移植方法,具体实现可能需要根据具体情况进行调整。 ### 回答2: SDL(Simple DirectMedia Layer)是一个跨平台的多媒体,可用于游戏开发媒体应用程序。它提供了一套简单的API,用于处理音频、视频、图形输入设备。 在Windows上进行SDL移植,可以按照以下步骤进行: 1. 下载SDL开发的Windows版本,并解压到合适的目录中。 2. 在开发环境中设置SDL相关的编译选项路径,使得编译器可以找到SDL头文件文件。 3. 在项目中包含SDL的头文件,使用SDL的API编写代码。 4. 将SDL的文件链接到项目中,以便在运行时可以正确地加载使用SDL的功能。 在Linux上进行SDL移植,可以按照以下步骤进行: 1. 使用系统的包管理器安装SDL开发,例如在Ubuntu上可以使用apt-get命令安装。 2. 在开发环境中设置SDL相关的编译选项路径,使得编译器可以找到SDL头文件文件。 3. 在项目中包含SDL的头文件,使用SDL的API编写代码。 4. 将SDL的文件链接到项目中,以便在运行时可以正确地加载使用SDL的功能。 在Arm-Linux上进行SDL移植,可以按照以下步骤进行: 1. 获取适用于Arm-Linux的SDL源码,并进行交叉编译,生成适用于Arm架构的SDL文件。 2. 在开发环境中设置交叉编译工具链、SDL相关的编译选项路径,使得编译器可以找到SDL头文件文件。 3. 在项目中包含SDL的头文件,使用SDL的API编写代码。 4. 将交叉编译生成的Arm-Linux上的SDL文件链接到项目中,以便在运行时可以正确地加载使用SDL的功能。 总结而言,SDL的移植方法主要包括下载安装开发、在开发环境中配置编译选项路径、包含头文件、链接文件等步骤。具体的过程根据不同的操作系统平台有所区别,但整体上都是相似的。 ### 回答3: SDL(Simple DirectMedia Layer)是一个跨平台的多媒体,它提供了对图形、音频、输入设备等的统一访问接口。以下是在Windows、LinuxArm-Linux上进行SDL多平台移植的方法: 在Windows上移植SDL: 1. 下载SDL的Windows开发包,并解压到合适的位置。 2. 在工程中添加SDL的头文件路径文件路径。 3. 将SDL.dll拷贝到工程的可执行文件所在的目录下。 在Linux移植SDL: 1. 在终端中使用包管理器安装SDL开发包。 2. 在编译时使用SDL的头文件路径文件路径,例如: gcc main.c -o main -lSDL2 在Arm-Linux移植SDL: 1. 安装交叉编译器,并设置环境变量,以便能够编译针对Arm架构的程序。 2. 下载适用于Arm-Linux的SDL开发包,并解压到合适的位置。 3. 在交叉编译时使用交叉编译器的头文件路径文件路径,例如: arm-linux-gcc main.c -o main -I/path/to/SDL/include -L/path/to/SDL/lib -lSDL2 以上是SDL在Windows、LinuxArm-Linux上的简要移植方法。具体的移植过程可能会因操作系统版本、编译器等而有所不同,需要根据具体情况进行相应的调整配置。移植时还需注意版本兼容性、依赖关系等问题,确保移植后的程序能够正确运行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值