组建自己的Linux-02命令移植

1.找到命令的源文件路径

[root@Pure-01 ~]# which ls
alias ls='ls --color=auto'
	/bin/ls
[root@Pure-01 ~]# which cat
/bin/cat
#有的命令使用了别名,所以有alias相关信息,要把alias相关的去除
[root@Pure-01 ~]# 
[root@Pure-01 ~]# which ls | grep -v "alias"
#使用grep -v 去除alias
	/bin/ls
[root@Pure-01 ~]# which ls | grep -v "alias" | awk '{print $1}'
#使用这个命令就能输出源文件路径
/bin/ls

wKioL1X7ywPj4lAeAAbPJN-Fe6Y461.gif


2.找到命令依赖的文件

[root@Pure-01 ~]# ldd /bin/ls
#查看/bin/ls执行的时候依赖库,可以看到这儿有用的就是包含/lib64的
[root@Pure-01 ~]# ldd /bin/ls | grep -o "/lib64.*"
#grep -o只显示匹配的
[root@Pure-01 ~]# ldd /bin/ls | grep -o "/lib64.*" | awk '{print $1}'
#使用此命令就能输出命令依赖的库文件
#/bin/ls取自which ls | grep -v "alias" | awk '{print $1}'

wKioL1X7zQOj-TdXAAkqY-Cd0Dg382.gif


3.移植命令脚本

  现在知道要移植一个命令,需要移植命令源文件和所依赖的库。bincp移植命令源文件,libcp对应移植依赖库文件,创建下面的脚本并执行。

  dirname功能是取文件的目录名称。

  移植完成后使用chroot测试。

[root@Pure-01 tmp]# vi /tmp/cp1.sh 
#!/bin/bash
#
DEST=/mnt/sysroot
#设置移植的目的地
libcp() {
  LIBPATH=`dirname ${1}`
  [ ! -d $DEST$LIBPATH ] && mkdir -p $DEST$LIBPATH
  [ ! -e $DEST${1} ] && cp $1 $DEST$LIBPATH && echo "copy lib $1 finished."
}
bincp() {
  CMDPATH=`dirname ${1}`
  [ ! -d $DEST$CMDPATH ] && mkdir -p $DEST$CMDPATH
  [ ! -e $DEST${1} ] && cp $1 $DEST$CMDPATH
  for LIB in  `ldd $1 | grep -o "/lib64.*" | awk '{print $1}'`; do
    libcp $LIB
  done
}
read -p "Your command: " CMD
until [ $CMD == 'q' ]; do
   ! which $CMD && echo "Wrong command" && read -p "Input again:" CMD && continue
  COMMAND=`which $CMD | grep -v "alias" | awk '{print $1}'`
  bincp $COMMAND
  echo "copy $COMMAND finished."
  read -p "Continue: " CMD
done

 

  bash、mount命令(/sbin/init中需要mount重新挂载根)都需要移植,同时也可以移植cat、fdisk、ps、du、df...等等命令。 wKiom1X73aqiJYwGAA5eO8BQveM843.gif


参考博文:

    http://tanxw.blog.51cto.com/4309543/1368801


你可能感兴趣的:(linux,移植,ldd)