小linux 移植命令的功能 单独脚本
2011-05-16 07:57
274 查看
之前说的从0构建linux,有种情况,当我们做好小linux后在使用过程中发现你需要用到的一个命令没有怎么办,还记得有个移植命令的功能函数吧,我们可以单独拿出来,想事后加命令直接调用就好,将其拿出来后如下:
具体每一行不用详细解释,在上一篇中有解释可以参考
#!/bin/bash
#
TARGET='/mnt/sysroot'
BINCP() {
TMPFILE=`mktemp -t bincp.XXXX`
FULLBIN=`which $1 2>/dev/null | grep -v "alias" | sed 's@[[:space:]]/{1,/}/(.*/)@/1@g'`
if [ -z $FULLBIN ];then
echo "Incorrect file name or file not exist..."
return 2
fi
BINPATH=`echo $FULLBIN | sed "s@/(.*/)/${1}@/1@g"`
[ -d $TARGET/$BINPATH ] || mkdir -p $TARGET/$BINPATH &> /dev/null
[ $? -eq 0 ] && cp -f $FULLBIN ${TARGET}/$BINPATH && echo -e "Copying /033[1;31m${1}/033[0m to the target.../n/tCopy the /033[1m$FULLBIN/033[0m done."
# copy the library files
LDLINUX=`ls /lib | grep ld-linux`
cp /lib/$LDLINUX $TARGET/lib
ldd $FULLBIN | grep -E -v "linux-gate|ld-linux" | cut -d'>' -f2 | cut -d' ' -f2 > $TMPFILE
while read LINE; do
LIBFILE=`basename $LINE`
LIBPATH=`echo $LINE | sed "s@/(.*/)/$LIBFILE@/1@g"`
if [ ! -e $TARGET/$LIBPATH/$LIBFILE ]; then
[ -d $TARGET/$LIBPATH ] || mkdir -p $TARGET/$LIBPATH &> /dev/null
cp $LINE $TARGET/$LIBPATH
[ $? -eq 0 ] && echo -e "/tCopy the /033[1m$LINE/033[0m done."
fi
done < $TMPFILE
rm -f $TMPFILE
}
for I in init bash mount hostname ifconfig ls cat touch mkdir; do
BINCP $I
done
echo -e "/nCopy other commands or deamons to target, /033[31;1mQUIT/033[0m for quiting./n"
read -p "The name of binary file will be copyed: " BINARY
[[ -n $BINARY ]] && BINARY=`basename $BINARY` 2> /dev/null
while [[ $BINARY != 'QUIT' ]] && [ -n $BINARY ]; do
BINCP $BINARY
RETVAL=$?
echo -n -e "/nContinue, type /033[31;1mQUIT/033[0m for quiting: "
read BINARY
[[ -n $BINARY ]] && BINARY=`basename $BINARY` 2> /dev/null
[ $RETVAL -eq 2 ] && continue
sync
done
sync
具体每一行不用详细解释,在上一篇中有解释可以参考
#!/bin/bash
#
TARGET='/mnt/sysroot'
BINCP() {
TMPFILE=`mktemp -t bincp.XXXX`
FULLBIN=`which $1 2>/dev/null | grep -v "alias" | sed 's@[[:space:]]/{1,/}/(.*/)@/1@g'`
if [ -z $FULLBIN ];then
echo "Incorrect file name or file not exist..."
return 2
fi
BINPATH=`echo $FULLBIN | sed "s@/(.*/)/${1}@/1@g"`
[ -d $TARGET/$BINPATH ] || mkdir -p $TARGET/$BINPATH &> /dev/null
[ $? -eq 0 ] && cp -f $FULLBIN ${TARGET}/$BINPATH && echo -e "Copying /033[1;31m${1}/033[0m to the target.../n/tCopy the /033[1m$FULLBIN/033[0m done."
# copy the library files
LDLINUX=`ls /lib | grep ld-linux`
cp /lib/$LDLINUX $TARGET/lib
ldd $FULLBIN | grep -E -v "linux-gate|ld-linux" | cut -d'>' -f2 | cut -d' ' -f2 > $TMPFILE
while read LINE; do
LIBFILE=`basename $LINE`
LIBPATH=`echo $LINE | sed "s@/(.*/)/$LIBFILE@/1@g"`
if [ ! -e $TARGET/$LIBPATH/$LIBFILE ]; then
[ -d $TARGET/$LIBPATH ] || mkdir -p $TARGET/$LIBPATH &> /dev/null
cp $LINE $TARGET/$LIBPATH
[ $? -eq 0 ] && echo -e "/tCopy the /033[1m$LINE/033[0m done."
fi
done < $TMPFILE
rm -f $TMPFILE
}
for I in init bash mount hostname ifconfig ls cat touch mkdir; do
BINCP $I
done
echo -e "/nCopy other commands or deamons to target, /033[31;1mQUIT/033[0m for quiting./n"
read -p "The name of binary file will be copyed: " BINARY
[[ -n $BINARY ]] && BINARY=`basename $BINARY` 2> /dev/null
while [[ $BINARY != 'QUIT' ]] && [ -n $BINARY ]; do
BINCP $BINARY
RETVAL=$?
echo -n -e "/nContinue, type /033[31;1mQUIT/033[0m for quiting: "
read BINARY
[[ -n $BINARY ]] && BINARY=`basename $BINARY` 2> /dev/null
[ $RETVAL -eq 2 ] && continue
sync
done
sync
相关文章推荐
- linux命令练习:脚本实现硬盘分区功能
- 裁剪Linux并实现网卡模块的安装(附有命令移植的脚本)
- 定制微型linux实现启用虚拟终端基于帐号密码登录、提供ssh服务,提供Web服务(下)附有命令移植脚本 推荐
- 打造自己的专属Linux(二):使用脚本实现自动化建立小Linux与命令移植
- python argparse模块小练习--Python脚本实现linux命令的功能
- Linux基本命令练习:脚本实现硬盘分区功能
- 打造自己的专属Linux(二):使用脚本实现自动化建立小Linux与命令移植
- Linux下创建脚本并用命令方式运行
- 关于linux下执行脚本编译C++:需要使用make命令和makefile
- linux - Bash的基本功能(历史命令)
- Linux 定时执行shell脚本命令之crontab
- linux下的Source命令的基本功能
- linux脚本后台记录top命令信息
- shell脚本删除N天前的文件夹-----附linux和mac上date命令的不同
- 【转】arm-linux-ld命令 ld链接脚本
- 详解如何在 Linux 启动时自动执行命令或脚本
- 从windows拷贝到linux的脚本报错:未找到命令 or 语法错误
- EOF(End OF File)在Linux命令和脚本中表示用户自定义终止符
- Linux系统的命令别名功能
- linux常用功能和命令(更新中)