码迷,mamicode.com
首页 > 系统相关 > 详细

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

时间:2015-09-18 18:40:20      阅读:259      评论:0      收藏:0      [点我收藏+]

标签:linux 移植、ldd

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

技术分享


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}‘

技术分享


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

  技术分享

本文出自 “Linux新手学习” 博客,请务必保留此出处http://xzb2015.blog.51cto.com/8796643/1696124

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

标签:linux 移植、ldd

原文地址:http://xzb2015.blog.51cto.com/8796643/1696124

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!